diff --git a/CHANGELOG.md b/CHANGELOG.md index 41df89f8..4d040437 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to this project will be documented in this file. This project uses [Semantic Versioning](https://semver.org/) +## [3.4.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v3.4.0) (2024-11-18) + +### What's Changed +- Add RelaySwwitch1PM and RealySwitch1PLus Devices +- Handle no devices found [#272](https://github.com/OpenWonderLabs/node-switchbot/pull/272), Thanks [@dnicolson](https://github.com/dnicolson) +- Housekeeping and update dependencies + +**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v3.3.0...v3.4.0 + ## [3.3.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v3.3.0) (2024-11-02) ### What's Changed diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js index b2e74476..4da9c344 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAE6WaTXPbNhCG/4vOmTp2Jv3wzZaTSTpyrLGc5tDpASLXEmoQUEDQrqbT/56hKFkksdhdqFe+7z6LXYAgCenPfycB/gmTy8nMrWbwDGbyZrJRYT25nIBtqvrscP2ndaha8UnbcnL5639vXiMXLzoU62sXrmcfbl0ZIyJDBuuj12BLs/2iKmC5fXNGDhFbyKQbwFR/VT6DD7rWdnVEFEbVNdRnPXFIOL9IVRdD+ipPWbpwA8+6gBTo1SAa0d0G7NX8MzGqvYOifXPXRtvyQZsQg3oiw2jMEg1vzJKOnII22q5merVGB9DXGZKzQRU4pJOY+MYHpS0a30l0/CdlSyy4vc5ENssLNLJZXnCRlcYjK01Hfr5bgK2df/iExR9VmjI3zepWW/11gVGOKkPxUIPFboujRhOoWmSVLCrlw8wVTyjiIAoZc+9IzNw7hhS83qCIVqBiVW8NahvAP6oC6jM1WoIX739GNkqowIYbFRTKiFwUcunKLUppBS5wulZ2BcnwTqYg07XyNRq/U6jQEgwE+AbLtXNP91BvnK3xoaBOGj3c/AeseNvHgme6DgSglXkI3pm9xocvggoNxegMUtA9fG+ArGrg47H7GSGAe4cY1T4/2ssscW+kwB+8d/5u+TcUOK+nUxhtH73yUN5D5UJ6WcQ2EuqJJXoQKcAXtzTwsN0klthRpiBz5VWFAzqJCt409Zq8a/sGCvS9Ab+VbAOYkQLfNwYHtQIVuADf9j+5P/d0ClNDaDaSwjAjCT68w+K0g0qW2HufHr8q9yuNbBS02ZRKtqOjTgq9t95AUNqgyIGDQr0csqZ3w6GFfIiqEMBvp9oXjVHB+Y+q92Ib2jvwDPOMmG9/++X8/QXDRZdlOkV6lcqyjR4+RCLsKSTKkdr107nI7T/OGX9x7dH41xZBoJqPeORcvM1DWUxjGorbWLqLSdHugkVRPXNZ3XKpPjlphxzXm7GBIxbo93QHK5Lf0jRn8DkTo6KvGZZGzEDamZsDnRnUlEmmZ4w052QSNunEDvHtye+NvDGZXXHG+eER0x55EMQEqqmIR87F2zmUxTSmkbiNp+8OwbrjkJjZE7NIZEdxXx4/0dnIkkXlOpy0slnGp4h7InaCmIx+lwh/J42nJiW2SKlM01CXkM0POH+8iZXTF4UkUeF5dT8a5/zUgLLaru5d+8Zw/nZMRk0nkfFeENaTstB9EoRwWdeDk/IOu45OyfE4YomNZBENbehRkTDodsUOnlnpUj9qiLb3oyJnkP1CTBnkRO+GupzH9RH3cXxty3a9qmoMfBXEBPCKHmPayeV4gu2mf+bf8bqrstgbCFAE8kGeNMoyPLimWOPMnZRBoduYNMoySOB5XDP4QanjmOh3JDwO+eoy2G9HyWhiQmOHlIneugNRSKKbjZokZKbozIrT5cpr5QvNq/JWFVdl6aGOxnVUOEYFIX5I7C6KIucmbsqrICYQU4V55Fx00kaymEZPX8Imo8c3+OG6NH56R73W4C4pWwA+hUpMjnQHObglU5O7h+yiuNJz6yaKzqhYUG5mrS5oZ/EDgb6Ww6Fah9uy6HgjI0cOk2lr0snlcFb1/zAxBo9knlbqunDP8bZ9VFhGE9rXzFts8+9rORxivhO2LDo637Ejh0nPd9rJ5dgoG7QJyAfDUZEzLqL3xr4m4Dx0XrralI/lm2YVsUyzksS1/wjDYtvr0vjf58S6Q01yMtOxhE/Kx1f0UJWyvi4EXRiY5GRZF8Y+CT/dAXn1/OjyxuV3f48Zc7qrbGx7kvWHKpqm2h1ugV+cRyTEcwoXe/FO+U7l4/NDu0/NRc+jLOqU3PIaT68vv7b/XVd6NyDNXKa6/dMp+ovyUZEziFGipgwyOqtjXc6jZzDl4/gvKoCfgXo6nKeNwZEhm0i0mPLm50EbnrBl0+n2M3Y8218/AMyUYZ2hMwAA" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAE6WaTXPbNhCG/4vOmTp2Jv3wzZaTSTpSrLGc5tDpASLXEmoQUEDQrqbT/56hKVkksdhdqFfuu89iX4AgCenPfycB/gmTy8nMrWfwBGbyZrJVYTO5nIBtqvrscP2nTaja4KO25eTy1//evGYun3UoNtcuXM8+zF0ZIyJBBuuj12BLs/uiKmC5fXFGDRFbyKQNYLq/Kp/AB11ruz4iCqPqGuqzXnBIOL9IdRdD+lGesnLhBp50ASnQq0A0otst2KvFZ2JUewVF++aujbblvTYhBvWCDKMxKzS9MSs6cwraaLue6fUGHUA/zpCcDarAIV2IyW98UNqi+V2Izv+kbIklt9eZzGZ1gWY2qwsus9J4ZqXpzM+3S7C18/efsPxjlKYsTLOea6u/LjHKMcpQPNRgsdviGKMJVC+yTpaV8mHmikcUcQgKGQvvSMzCO4YUvN6iiDZA5areGtQ2gH9QBdRnarQEL97/jGyUUIENNyoolBGpKOTKlTuU0ga4xOlG2TUk07swBZlulK/R/JcIlVqCgQDfYLVx7vEO6q2zNT4UVEmjh5v/gBVv+1jyTNeBALRhHoI7s4/x6cugQkMxOoEUdAffGyC7Guh47H5GCOBeIUa1z4/2MkvcCynwB++dv139DQXO68UpjLYPXnko76ByIb0sYhkJ9cQSPQQpwBe3MnC/2yaW2DFMQRbKqwoHdCEqedvUG/Ku7Qso0PcG/E6yDWBCCnzXGBzUBqjEJfjW/+T+3ItTmBpCs5U0hglJ8OEdFqcdomSLvffp8atyv9NIRkGbbalkOzqqpNB76Q0EpQ2KHCgo1POhano3HErIh6gKAfxuqn3RGBWc/6h6L7ahvQPPMM2I+fa3X87fXzBcdFmmS6RXqaza6OFDFMKeQqIaqV0/XYvc/uOa8RfXHo1/bREEynxEI+fiNg/DYhpjKC5j6S4mRbsLlkV55rLccimfnNQhx3kzFnDEAv2e7mBF8lua5gw+Z2JU9DXD0ogZSCtza6Azg4oyyfSMkeKcSkKTTnSItyffG7kxma444/zwiGmPPATEBMpURCPn4nYOw2IaYyQu4+kvh2DdcUjM7AWzSKSjuC6Pn3A2kmRROYeTUrbK+BRxT8ROEJPZ7xLp76T51KTEEimVMQ1VCdn8gPPHm1g5/aCQJGo8r+8H45yfGlBW2/Wda98Yzt+OyajoJDLuBSE9qQrtkyCFq7oZnJR32E10So7nEUtsFBbRUEOPEQmDtitW8MxKl/pBQ7S9HyNyBukXIsogJ7wbxuU8zkdcx/G1Ldv1qqox8DUgJoBX9BjTSq7GI+y2/TP/jtddleXeQIAikA/ypFBW4d41xQZnvoQyKLSNSaGsggSexzWDH5Q6jol+R8LzkK8ug/12lMwmJjRWSJnorTsICkm02ahIQmaazuw43a68V77RvC7nqrgqSw91NK5jhGNUEOKHxMtFUebCxKa8BsQEYqowjZyLTtooLKbR05eQyejxDX64Ls2f3lKvNbgqh0042RNkECVuIkJpBYEZJzhB25DngcyAE7rnWs/tm2g6o2NBu5m9uqCdxQ8x+rEcDmUdLsui40ZGihwmY2tSydVwVvX/5DEGj8I8rdR14Z7iR80xwjKa0L4az7EHVj+WwyHmOyHLoqPzHStymPR8p5Vcja2yQZuAfOQcI3LGRfSu248JOPedlu42pWP5pllHLNOsJXntv9iw3Pa6NP/3BbHuUJGczDiW0En5+IoeRqWsr0uBCwORnCxzYayT8NMOyLvnR5c3Lg9G7bp/Qpwzr9OENKvKXFpjnlWh/WtSjGuvsrntKeIfqmia6uVgEfzyPCIhmlO42EdPSncqH19ntPrUWvR6lGWdUlve4+n95ff2v/si7gxKzFWq2z/8or/mHyNyBjFKVJRBRmd1HJfz6BlM6Tj+swrgZ6AeD2eZY3AkyCYSFlPa/Dqo4QlZNp22n5Hj1f76ASw6Jg8dNQAA" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index b9065665..d2e2894d 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/docs/classes/Advertising.html b/docs/classes/Advertising.html index 9569dc62..3cbbc732 100644 --- a/docs/classes/Advertising.html +++ b/docs/classes/Advertising.html @@ -1,8 +1,8 @@ Advertising | node-switchbot

Class Advertising

Represents the advertising data parser for SwitchBot devices.

-

Constructors

Constructors

Methods

Constructors

Methods

  • Parses the advertisement data coming from SwitchBot device.

    +

Constructors

Methods

  • Parses the advertisement data coming from SwitchBot device.

    This function processes advertising packets received from SwitchBot devices and extracts relevant information based on the device type.

    Parameters

    • peripheral: Peripheral

      The peripheral device object from noble.

      @@ -10,7 +10,7 @@
        • (level, message): void
        • Parameters

          • level: string
          • message: string

          Returns void

    Returns Promise<null | ad>

    • An object containing parsed data specific to the SwitchBot device type, or null if the device is not recognized.
    -
  • Parses the service data based on the device model.

    +
  • Parses the service data based on the device model.

    Parameters

    • model: string

      The device model.

    • serviceData: Buffer

      The service data buffer.

    • manufacturerData: Buffer

      The manufacturer data buffer.

      @@ -18,4 +18,4 @@
        • (level, message): void
        • Parameters

          • level: string
          • message: string

          Returns void

    Returns Promise<any>

    • The parsed service data.
    -
+
diff --git a/docs/classes/SwitchBotBLE.html b/docs/classes/SwitchBotBLE.html index f9339dee..cd9ae3da 100644 --- a/docs/classes/SwitchBotBLE.html +++ b/docs/classes/SwitchBotBLE.html @@ -1,5 +1,5 @@ SwitchBotBLE | node-switchbot

Class SwitchBotBLE

SwitchBotBLE class to interact with SwitchBot devices.

-

Hierarchy

  • EventEmitter
    • SwitchBotBLE

Constructors

Hierarchy

  • EventEmitter
    • SwitchBotBLE

Constructors

Properties

noble onadvertisement? ondiscover? @@ -12,30 +12,30 @@ wait

Constructors

Properties

noble: any
onadvertisement?: onadvertisement
ondiscover?: ondiscover
ready: Promise<void>

Methods

  • Discovers Switchbot devices.

    +

Returns SwitchBotBLE

Properties

noble: any
onadvertisement?: onadvertisement
ondiscover?: ondiscover
ready: Promise<void>

Methods

  • Emits a log event with the specified log level and message.

    +
  • Emits a log event with the specified log level and message.

    Parameters

    • level: string

      The severity level of the log (e.g., 'info', 'warn', 'error').

    • message: string

      The log message to be emitted.

      -

    Returns Promise<void>

  • Starts scanning for SwitchBot devices.

    +

Returns Promise<void>

+
diff --git a/docs/classes/SwitchBotOpenAPI.html b/docs/classes/SwitchBotOpenAPI.html index 19f0f8fe..5ccb46ac 100644 --- a/docs/classes/SwitchBotOpenAPI.html +++ b/docs/classes/SwitchBotOpenAPI.html @@ -5,7 +5,7 @@

The API token used for authentication.

The secret key used for signing requests.

-

Hierarchy

Constructors

Hierarchy

Constructors

Properties

Methods

controlDevice deleteWebhook @@ -15,25 +15,25 @@

Constructors

  • Creates an instance of the SwitchBot OpenAPI client.

    Parameters

    • token: string

      The API token used for authentication.

    • secret: string

      The secret key used for signing requests.

      -

    Returns SwitchBotOpenAPI

Properties

webhookEventListener?: null | Server<typeof IncomingMessage, typeof ServerResponse> = null

Methods

  • Controls a device by sending a command to the SwitchBot API.

    +

Returns SwitchBotOpenAPI

Properties

webhookEventListener?: null | Server<typeof IncomingMessage, typeof ServerResponse> = null

Methods

  • Controls a device by sending a command to the SwitchBot API.

    Parameters

    • deviceId: string

      The unique identifier of the device to control.

    • command: string

      The command to send to the device.

    • parameter: string

      The parameter for the command.

    • commandType: string = 'command'

      The type of the command, defaults to 'command'.

    Returns Promise<{
        response: {
            commandId: string;
        };
        statusCode: number;
    }>

    A promise that resolves to an object containing the API response.

    An error if the device control fails.

    -
  • Deletes a webhook by sending a request to the specified URL.

    +
  • Deletes a webhook by sending a request to the specified URL.

    Parameters

    • url: string

      The URL of the webhook to be deleted.

    Returns Promise<void>

    A promise that resolves when the webhook is successfully deleted.

    Will log an error if the deletion fails.

    -
  • Retrieves the list of devices from the SwitchBot OpenAPI.

    +
  • Retrieves the list of devices from the SwitchBot OpenAPI.

    Returns Promise<{
        response: devices;
        statusCode: number;
    }>

    A promise that resolves to an object containing the API response.

    Throws an error if the request to get devices fails.

    -
  • Retrieves the status of a specific device.

    +
  • Retrieves the status of a specific device.

    Parameters

    • deviceId: string

      The unique identifier of the device.

    Returns Promise<{
        response: deviceStatus;
        statusCode: number;
    }>

    A promise that resolves to the device status.

    An error if the request fails.

    -
  • Sets up a webhook listener and configures the webhook on the server.

    +
  • Sets up a webhook listener and configures the webhook on the server.

    This method performs the following steps:

    1. Creates a local server to listen for incoming webhook events.
    2. @@ -44,4 +44,4 @@

    Parameters

    • url: string

      The URL to which the webhook events will be sent.

    Returns Promise<void>

    A promise that resolves when the webhook setup is complete.

    Will log an error if any step in the webhook setup process fails.

    -
+
diff --git a/docs/classes/SwitchbotDevice.html b/docs/classes/SwitchbotDevice.html index d133012b..af717fac 100644 --- a/docs/classes/SwitchbotDevice.html +++ b/docs/classes/SwitchbotDevice.html @@ -1,5 +1,5 @@ SwitchbotDevice | node-switchbot

Class SwitchbotDevice

Represents a Switchbot Device.

-

Hierarchy (view full)

Indexable

  • [x: string]: any

Constructors

Hierarchy (view full)

Indexable

  • [x: string]: any

Constructors

Accessors

address connectionState friendlyName @@ -20,25 +20,25 @@

Constructors

  • Initializes a new instance of the SwitchbotDevice class.

    Parameters

    • peripheral: Peripheral

      The peripheral object from noble.

    • noble: __module

      The Noble object.

      -

    Returns SwitchbotDevice

Accessors

  • get connectionState(): string
  • Returns string

  • get onConnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onConnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

  • get onDisconnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onDisconnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

Methods

  • Sends a command to the device and awaits a response.

    +

Returns SwitchbotDevice

Accessors

  • get connectionState(): string
  • Returns string

  • get onConnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onConnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

  • get onDisconnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onDisconnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

Methods

  • Sends a command to the device and awaits a response.

    Parameters

    • reqBuf: Buffer

      The command buffer.

    Returns Promise<Buffer>

    A Promise that resolves with the response buffer.

    -
  • Connects to the device.

    +
  • Connects to the device.

    Returns Promise<void>

    A Promise that resolves when the connection is complete.

    -
  • Disconnects from the device.

    +
  • Disconnects from the device.

    Returns Promise<void>

    A Promise that resolves when the disconnection is complete.

    -
  • Discovers the device services.

    +
  • Discovers the device services.

    Returns Promise<Service[]>

    A Promise that resolves with the list of services.

    -
  • Retrieves the device characteristics.

    +
  • Retrieves the device characteristics.

    Returns Promise<Chars>

    A Promise that resolves with the device characteristics.

    -
  • Retrieves the device name.

    +
  • Retrieves the device name.

    Returns Promise<string>

    A Promise that resolves with the device name.

    -
  • Logs a message with the specified log level.

    +
  • Logs a message with the specified log level.

    Parameters

    • level: string

      The severity level of the log (e.g., 'info', 'warn', 'error').

    • message: string

      The log message to be emitted.

      -

    Returns Promise<void>

  • Sets the device name.

    +

Returns Promise<void>

+
diff --git a/docs/classes/WoBlindTilt.html b/docs/classes/WoBlindTilt.html index c3507bea..9f5b944e 100644 --- a/docs/classes/WoBlindTilt.html +++ b/docs/classes/WoBlindTilt.html @@ -1,6 +1,6 @@ WoBlindTilt | node-switchbot

Class WoBlindTilt

Class representing a WoBlindTilt device.

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Accessors

  • get address(): string
  • Returns string

  • get connectionState(): string
  • Returns string

  • get id(): string
  • Returns string

  • get onConnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onConnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

  • get onDisconnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onDisconnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

Methods

  • Closes the blind tilt to the nearest endpoint.

    -

    Returns Promise<void>

  • Closes the blind tilt down to the nearest endpoint.

    -

    Returns Promise<void>

  • Closes the blind tilt up to the nearest endpoint.

    -

    Returns Promise<void>

  • Sends a command to the device and awaits a response.

    +

Constructors

Accessors

  • get address(): string
  • Returns string

  • get connectionState(): string
  • Returns string

  • get id(): string
  • Returns string

  • get onConnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onConnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

  • get onDisconnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onDisconnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

Methods

  • Closes the blind tilt to the nearest endpoint.

    +

    Returns Promise<void>

  • Closes the blind tilt down to the nearest endpoint.

    +

    Returns Promise<void>

  • Closes the blind tilt up to the nearest endpoint.

    +

    Returns Promise<void>

  • Sends a command to the device and awaits a response.

    Parameters

    • reqBuf: Buffer

      The command buffer.

    Returns Promise<Buffer>

    A Promise that resolves with the response buffer.

    -
  • Connects to the device.

    Returns Promise<void>

    A Promise that resolves when the connection is complete.

    -
  • Disconnects from the device.

    Returns Promise<void>

    A Promise that resolves when the disconnection is complete.

    -
  • Retrieves the basic information of the blind tilt.

    Returns Promise<null | object>

    • A promise that resolves to an object containing the basic information of the blind tilt.
    -
  • Retrieves the current position of the blind tilt.

    Returns Promise<number>

    • The current position of the blind tilt (0-100).
    -
  • Logs a message with the specified log level.

    Parameters

    • level: string

      The severity level of the log (e.g., 'info', 'warn', 'error').

    • message: string

      The log message to be emitted.

      -

    Returns Promise<void>

  • Opens the blind tilt to the fully open position.

    -

    Returns Promise<void>

  • Runs the blind tilt to the specified position.

    +

Returns Promise<void>

Returns Promise<void>

+
diff --git a/docs/classes/WoBulb.html b/docs/classes/WoBulb.html index 91a405ac..e28751b0 100644 --- a/docs/classes/WoBulb.html +++ b/docs/classes/WoBulb.html @@ -1,6 +1,6 @@ WoBulb | node-switchbot

Class representing a WoBulb device.

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Accessors

  • get address(): string
  • Returns string

  • get connectionState(): string
  • Returns string

  • get id(): string
  • Returns string

  • get onConnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onConnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

  • get onDisconnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onDisconnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

Methods

  • Sends a command to the device and awaits a response.

    +

Constructors

Accessors

  • get address(): string
  • Returns string

  • get connectionState(): string
  • Returns string

  • get id(): string
  • Returns string

  • get onConnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onConnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

  • get onDisconnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onDisconnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

Methods

  • Sends a command to the device and awaits a response.

    Parameters

    • reqBuf: Buffer

      The command buffer.

    Returns Promise<Buffer>

    A Promise that resolves with the response buffer.

    -
  • Connects to the device.

    Returns Promise<void>

    A Promise that resolves when the connection is complete.

    -
  • Disconnects from the device.

    Returns Promise<void>

    A Promise that resolves when the disconnection is complete.

    -
  • Logs a message with the specified log level.

    Parameters

    • level: string

      The severity level of the log (e.g., 'info', 'warn', 'error').

    • message: string

      The log message to be emitted.

      -

    Returns Promise<void>

  • Reads the state of the bulb.

    +

Returns Promise<void>

+
diff --git a/docs/classes/WoCeilingLight.html b/docs/classes/WoCeilingLight.html index 3bb7fa52..fc266735 100644 --- a/docs/classes/WoCeilingLight.html +++ b/docs/classes/WoCeilingLight.html @@ -1,6 +1,6 @@ WoCeilingLight | node-switchbot

Class WoCeilingLight

Class representing a WoCeilingLight device.

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Accessors

  • get address(): string
  • Returns string

  • get connectionState(): string
  • Returns string

  • get id(): string
  • Returns string

  • get onConnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onConnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

  • get onDisconnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onDisconnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

Methods

  • Sends a command to the device and awaits a response.

    +

Constructors

Accessors

  • get address(): string
  • Returns string

  • get connectionState(): string
  • Returns string

  • get id(): string
  • Returns string

  • get onConnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onConnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

  • get onDisconnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onDisconnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

Methods

  • Sends a command to the device and awaits a response.

    Parameters

    • reqBuf: Buffer

      The command buffer.

    Returns Promise<Buffer>

    A Promise that resolves with the response buffer.

    -
  • Connects to the device.

    Returns Promise<void>

    A Promise that resolves when the connection is complete.

    -
  • Disconnects from the device.

    Returns Promise<void>

    A Promise that resolves when the disconnection is complete.

    -
  • Logs a message with the specified log level.

    Parameters

    • level: string

      The severity level of the log (e.g., 'info', 'warn', 'error').

    • message: string

      The log message to be emitted.

      -

    Returns Promise<void>

  • Sends a command to the ceiling light.

    +

Returns Promise<void>

+
diff --git a/docs/classes/WoContact.html b/docs/classes/WoContact.html index a80318f1..11c76fdc 100644 --- a/docs/classes/WoContact.html +++ b/docs/classes/WoContact.html @@ -1,6 +1,6 @@ WoContact | node-switchbot

Class representing a WoContact device.

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Accessors

  • get address(): string
  • Returns string

  • get connectionState(): string
  • Returns string

  • get id(): string
  • Returns string

  • get onConnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onConnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

  • get onDisconnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onDisconnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

Methods

  • Sends a command to the device and awaits a response.

    +

Constructors

Accessors

  • get address(): string
  • Returns string

  • get connectionState(): string
  • Returns string

  • get id(): string
  • Returns string

  • get onConnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onConnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

  • get onDisconnectHandler(): (() => Promise<void>)
  • Returns (() => Promise<void>)

      • (): Promise<void>
      • Returns Promise<void>

  • set onDisconnectHandler(func): void
  • Parameters

    • func: (() => Promise<void>)
        • (): Promise<void>
        • Returns Promise<void>

    Returns void

Methods

  • Sends a command to the device and awaits a response.

    Parameters

    • reqBuf: Buffer

      The command buffer.

    Returns Promise<Buffer>

    A Promise that resolves with the response buffer.

    -
  • Connects to the device.

    Returns Promise<void>

    A Promise that resolves when the connection is complete.

    -
  • Disconnects from the device.

    Returns Promise<void>

    A Promise that resolves when the disconnection is complete.

    -
  • Logs a message with the specified log level.

    Parameters

    • level: string

      The severity level of the log (e.g., 'info', 'warn', 'error').

    • message: string

      The log message to be emitted.

      -

    Returns Promise<void>

  • Sets the device name.

    +

Returns Promise<void>

+
diff --git a/docs/classes/WoCurtain.html b/docs/classes/WoCurtain.html index d6f7bf78..9e760dda 100644 --- a/docs/classes/WoCurtain.html +++ b/docs/classes/WoCurtain.html @@ -3,7 +3,7 @@
  • https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/curtain.md
  • https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/curtain3.md
  • -

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Closes the curtain.

      +

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Closes the curtain.

      Parameters

      • Optionalmode: number = 0xFF

        Running mode (0x01 = QuietDrift, 0xFF = Default).

        -

      Returns Promise<void>

    • Sends a command to the device and awaits a response.

      +

    Returns Promise<void>

    • Sends a command to the device and awaits a response.

      Parameters

      • reqBuf: Buffer

        The command buffer.

      Returns Promise<Buffer>

      A Promise that resolves with the response buffer.

      -
    • Connects to the device.

      Returns Promise<void>

      A Promise that resolves when the connection is complete.

      -
    • Disconnects from the device.

      Returns Promise<void>

      A Promise that resolves when the disconnection is complete.

      -
    • Logs a message with the specified log level.

      Parameters

      • level: string

        The severity level of the log (e.g., 'info', 'warn', 'error').

      • message: string

        The log message to be emitted.

        -

      Returns Promise<void>

    • Opens the curtain.

      +

    Returns Promise<void>

    • Opens the curtain.

      Parameters

      • Optionalmode: number = 0xFF

        Running mode (0x01 = QuietDrift, 0xFF = Default).

        -

      Returns Promise<void>

    • Sends a command to the curtain.

      +

    Returns Promise<void>

    • Sends a command to the curtain.

      Parameters

      • bytes: number[]

        The command bytes.

        -

      Returns Promise<void>

    • Runs the curtain to the target position.

      +

    Returns Promise<void>

    • Runs the curtain to the target position.

      Parameters

      • percent: number

        The percentage of the target position.

      • Optionalmode: number = 0xFF

        Running mode (0x01 = QuietDrift, 0xFF = Default).

        -

      Returns Promise<void>

    • Sets the device name.

      +

    Returns Promise<void>

    • Sets the device name.

      Parameters

      • name: string

        The new device name.

      Returns Promise<void>

      A Promise that resolves when the name is set.

      -
    • Parses the service data for WoCurtain.

      Parameters

      • serviceData: Buffer

        The service data buffer.

      • manufacturerData: Buffer

        The manufacturer data buffer.

      • emitLog: ((level: string, message: string) => void)

        The function to emit log messages.

        @@ -66,4 +66,4 @@

      Returns Promise<null | curtainServiceData | curtain3ServiceData>

      • Parsed service data or null if invalid.
      -
    +
    diff --git a/docs/classes/WoHand.html b/docs/classes/WoHand.html index b6f836e5..d9940fa5 100644 --- a/docs/classes/WoHand.html +++ b/docs/classes/WoHand.html @@ -1,6 +1,6 @@ WoHand | node-switchbot

    Class representing a WoHand device.

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      +

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      Parameters

      • reqBuf: Buffer

        The command buffer.

      Returns Promise<Buffer>

      A Promise that resolves with the response buffer.

      -
    • Connects to the device.

      Returns Promise<void>

      A Promise that resolves when the connection is complete.

      -
    • Disconnects from the device.

      Returns Promise<void>

      A Promise that resolves when the disconnection is complete.

      -
    • Logs a message with the specified log level.

      Parameters

      • level: string

        The severity level of the log (e.g., 'info', 'warn', 'error').

      • message: string

        The log message to be emitted.

        -

      Returns Promise<void>

    • Sets the device name.

      +

    Returns Promise<void>

    +
    diff --git a/docs/classes/WoHub2.html b/docs/classes/WoHub2.html index d441ef74..cd114567 100644 --- a/docs/classes/WoHub2.html +++ b/docs/classes/WoHub2.html @@ -1,6 +1,6 @@ WoHub2 | node-switchbot

    Class representing a WoHub2 device.

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      +

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      Parameters

      • reqBuf: Buffer

        The command buffer.

      Returns Promise<Buffer>

      A Promise that resolves with the response buffer.

      -
    • Connects to the device.

      Returns Promise<void>

      A Promise that resolves when the connection is complete.

      -
    • Disconnects from the device.

      Returns Promise<void>

      A Promise that resolves when the disconnection is complete.

      -
    • Logs a message with the specified log level.

      Parameters

      • level: string

        The severity level of the log (e.g., 'info', 'warn', 'error').

      • message: string

        The log message to be emitted.

        -

      Returns Promise<void>

    • Sets the device name.

      +

    Returns Promise<void>

    +
    diff --git a/docs/classes/WoHumi.html b/docs/classes/WoHumi.html index 18ac3336..ed975e95 100644 --- a/docs/classes/WoHumi.html +++ b/docs/classes/WoHumi.html @@ -1,6 +1,6 @@ WoHumi | node-switchbot

    Class representing a WoHumi device.

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      +

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      Parameters

      • reqBuf: Buffer

        The command buffer.

      Returns Promise<Buffer>

      A Promise that resolves with the response buffer.

      -
    • Connects to the device.

      Returns Promise<void>

      A Promise that resolves when the connection is complete.

      -
    • Disconnects from the device.

      Returns Promise<void>

      A Promise that resolves when the disconnection is complete.

      -
    • Decreases the humidifier setting.

      -

      Returns Promise<void>

    • Decreases the humidifier setting.

      +

      Returns Promise<void>

    • Logs a message with the specified log level.

      Parameters

      • level: string

        The severity level of the log (e.g., 'info', 'warn', 'error').

      • message: string

        The log message to be emitted.

        -

      Returns Promise<void>

    • Sends a command to the humidifier.

      +

    Returns Promise<void>

    Returns Promise<void>

    +
    diff --git a/docs/classes/WoIOSensorTH.html b/docs/classes/WoIOSensorTH.html index 86b42e29..dc7e6a5c 100644 --- a/docs/classes/WoIOSensorTH.html +++ b/docs/classes/WoIOSensorTH.html @@ -1,6 +1,6 @@ WoIOSensorTH | node-switchbot

    Class WoIOSensorTH

    Class representing a WoIOSensorTH device.

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      +

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      Parameters

      • reqBuf: Buffer

        The command buffer.

      Returns Promise<Buffer>

      A Promise that resolves with the response buffer.

      -
    • Connects to the device.

      Returns Promise<void>

      A Promise that resolves when the connection is complete.

      -
    • Disconnects from the device.

      Returns Promise<void>

      A Promise that resolves when the disconnection is complete.

      -
    • Logs a message with the specified log level.

      Parameters

      • level: string

        The severity level of the log (e.g., 'info', 'warn', 'error').

      • message: string

        The log message to be emitted.

        -

      Returns Promise<void>

    • Sets the device name.

      +

    Returns Promise<void>

    +
    diff --git a/docs/classes/WoPlugMiniUS.html b/docs/classes/WoPlugMiniUS.html index d1a14110..01aaac9b 100644 --- a/docs/classes/WoPlugMiniUS.html +++ b/docs/classes/WoPlugMiniUS.html @@ -1,6 +1,6 @@ WoPlugMiniUS | node-switchbot

    Class WoPlugMiniUS

    Class representing a WoPlugMini device.

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      +

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      Parameters

      • reqBuf: Buffer

        The command buffer.

      Returns Promise<Buffer>

      A Promise that resolves with the response buffer.

      -
    • Connects to the device.

      Returns Promise<void>

      A Promise that resolves when the connection is complete.

      -
    • Disconnects from the device.

      Returns Promise<void>

      A Promise that resolves when the disconnection is complete.

      -
    • Logs a message with the specified log level.

      Parameters

      • level: string

        The severity level of the log (e.g., 'info', 'warn', 'error').

      • message: string

        The log message to be emitted.

        -

      Returns Promise<void>

    • Operates the plug with the given bytes.

      +

    Returns Promise<void>

    +
    diff --git a/docs/classes/WoPresence.html b/docs/classes/WoPresence.html index b9786b1d..4f7b8999 100644 --- a/docs/classes/WoPresence.html +++ b/docs/classes/WoPresence.html @@ -1,6 +1,6 @@ WoPresence | node-switchbot

    Class WoPresence

    Class representing a WoPresence device.

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      +

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      Parameters

      • reqBuf: Buffer

        The command buffer.

      Returns Promise<Buffer>

      A Promise that resolves with the response buffer.

      -
    • Connects to the device.

      Returns Promise<void>

      A Promise that resolves when the connection is complete.

      -
    • Disconnects from the device.

      Returns Promise<void>

      A Promise that resolves when the disconnection is complete.

      -
    • Logs a message with the specified log level.

      Parameters

      • level: string

        The severity level of the log (e.g., 'info', 'warn', 'error').

      • message: string

        The log message to be emitted.

        -

      Returns Promise<void>

    • Sets the device name.

      +

    Returns Promise<void>

    +
    diff --git a/docs/classes/WoSensorTH.html b/docs/classes/WoSensorTH.html index 3ed1bf06..541b7ceb 100644 --- a/docs/classes/WoSensorTH.html +++ b/docs/classes/WoSensorTH.html @@ -1,6 +1,6 @@ WoSensorTH | node-switchbot

    Class WoSensorTH

    Class representing a WoSensorTH device.

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      +

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      Parameters

      • reqBuf: Buffer

        The command buffer.

      Returns Promise<Buffer>

      A Promise that resolves with the response buffer.

      -
    • Connects to the device.

      Returns Promise<void>

      A Promise that resolves when the connection is complete.

      -
    • Disconnects from the device.

      Returns Promise<void>

      A Promise that resolves when the disconnection is complete.

      -
    • Logs a message with the specified log level.

      Parameters

      • level: string

        The severity level of the log (e.g., 'info', 'warn', 'error').

      • message: string

        The log message to be emitted.

        -

      Returns Promise<void>

    • Sets the device name.

      +

    Returns Promise<void>

    +
    diff --git a/docs/classes/WoSmartLock.html b/docs/classes/WoSmartLock.html index 1c7ebe84..df4de6aa 100644 --- a/docs/classes/WoSmartLock.html +++ b/docs/classes/WoSmartLock.html @@ -1,6 +1,6 @@ WoSmartLock | node-switchbot

    Class WoSmartLock

    Class representing a WoSmartLock device.

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    Properties

    encryption_key: null | Buffer = null
    iv: null | Buffer = null
    key_id: string = ''
    Result: {
        ERROR: number;
        SUCCESS: number;
        SUCCESS_LOW_BATTERY: number;
    } = ...

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      +

    Constructors

    Properties

    encryption_key: null | Buffer = null
    iv: null | Buffer = null
    key_id: string = ''
    Result: {
        ERROR: number;
        SUCCESS: number;
        SUCCESS_LOW_BATTERY: number;
    } = ...

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      Parameters

      • reqBuf: Buffer

        The command buffer.

      Returns Promise<Buffer>

      A Promise that resolves with the response buffer.

      -
    • Connects to the device.

      Returns Promise<void>

      A Promise that resolves when the connection is complete.

      -
    • Decrypts a buffer using AES-128-CTR.

      Parameters

      • data: Buffer

        The data to decrypt.

      Returns Promise<Buffer>

      • The decrypted data.
      -
    • Disconnects from the device.

      Returns Promise<void>

      A Promise that resolves when the disconnection is complete.

      -
    • Encrypts a string using AES-128-CTR.

      Parameters

      • str: string

        The string to encrypt.

      Returns Promise<string>

      • The encrypted string in hex format.
      -
    • Sends an encrypted command to the device.

      Parameters

      • key: string

        The command key.

      Returns Promise<Buffer>

      • The response buffer.
      -
    • Retrieves the IV from the device.

      Returns Promise<Buffer>

      • The IV buffer.
      -
    • Gets general state info from the Smart Lock.

      Returns Promise<null | object>

      • The state object or null if an error occurred.
      -
    • Locks the Smart Lock.

      Returns Promise<number>

      • The result of the lock operation.
      -
    • Logs a message with the specified log level.

      Parameters

      • level: string

        The severity level of the log (e.g., 'info', 'warn', 'error').

      • message: string

        The log message to be emitted.

        -

      Returns Promise<void>

    • Operates the lock with the given command.

      +

    Returns Promise<void>

    Returns Promise<void>

    +
    diff --git a/docs/classes/WoSmartLockPro.html b/docs/classes/WoSmartLockPro.html index 3370fe96..36dca85c 100644 --- a/docs/classes/WoSmartLockPro.html +++ b/docs/classes/WoSmartLockPro.html @@ -1,6 +1,6 @@ WoSmartLockPro | node-switchbot

    Class WoSmartLockPro

    Class representing a WoSmartLockPro device.

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    Properties

    encryption_key: null | Buffer = null
    iv: null | Buffer = null
    key_id: string = ''
    Result: {
        ERROR: number;
        SUCCESS: number;
        SUCCESS_LOW_BATTERY: number;
    } = ...

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      +

    Constructors

    Properties

    encryption_key: null | Buffer = null
    iv: null | Buffer = null
    key_id: string = ''
    Result: {
        ERROR: number;
        SUCCESS: number;
        SUCCESS_LOW_BATTERY: number;
    } = ...

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      Parameters

      • reqBuf: Buffer

        The command buffer.

      Returns Promise<Buffer>

      A Promise that resolves with the response buffer.

      -
    • Connects to the device.

      Returns Promise<void>

      A Promise that resolves when the connection is complete.

      -
    • Decrypts a buffer using AES-128-CTR.

      Parameters

      • data: Buffer

        The data to decrypt.

      Returns Promise<Buffer>

      • The decrypted data.
      -
    • Disconnects from the device.

      Returns Promise<void>

      A Promise that resolves when the disconnection is complete.

      -
    • Encrypts a string using AES-128-CTR.

      Parameters

      • str: string

        The string to encrypt.

      Returns Promise<string>

      • The encrypted string in hex format.
      -
    • Sends an encrypted command to the device.

      Parameters

      • key: string

        The command key.

      Returns Promise<Buffer>

      • The response buffer.
      -
    • Gets general state info from the Smart Lock.

      Returns Promise<null | object>

      • The state object or null if an error occurred.
      -
    • Locks the Smart Lock.

      Returns Promise<number>

      • The result of the lock operation.
      -
    • Logs a message with the specified log level.

      Parameters

      • level: string

        The severity level of the log (e.g., 'info', 'warn', 'error').

      • message: string

        The log message to be emitted.

        -

      Returns Promise<void>

    • Operates the lock with the given command.

      +

    Returns Promise<void>

    Returns Promise<void>

    +
    diff --git a/docs/classes/WoStrip.html b/docs/classes/WoStrip.html index e5afe2bd..0aabff65 100644 --- a/docs/classes/WoStrip.html +++ b/docs/classes/WoStrip.html @@ -1,6 +1,6 @@ WoStrip | node-switchbot

    Class representing a WoStrip device.

    Hierarchy (view full)

    Constructors

    Hierarchy (view full)

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      +

    Constructors

    Accessors

    • get address(): string
    • Returns string

    • get connectionState(): string
    • Returns string

    • get id(): string
    • Returns string

    • get onConnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onConnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    • get onDisconnectHandler(): (() => Promise<void>)
    • Returns (() => Promise<void>)

        • (): Promise<void>
        • Returns Promise<void>

    • set onDisconnectHandler(func): void
    • Parameters

      • func: (() => Promise<void>)
          • (): Promise<void>
          • Returns Promise<void>

      Returns void

    Methods

    • Sends a command to the device and awaits a response.

      Parameters

      • reqBuf: Buffer

        The command buffer.

      Returns Promise<Buffer>

      A Promise that resolves with the response buffer.

      -
    • Connects to the device.

      Returns Promise<void>

      A Promise that resolves when the connection is complete.

      -
    • Disconnects from the device.

      Returns Promise<void>

      A Promise that resolves when the disconnection is complete.

      -
    • Logs a message with the specified log level.

      Parameters

      • level: string

        The severity level of the log (e.g., 'info', 'warn', 'error').

      • message: string

        The log message to be emitted.

        -

      Returns Promise<void>

    • Operates the strip light with the given byte array.

      +

    Returns Promise<void>

    +
    diff --git a/docs/enums/LogLevel.html b/docs/enums/LogLevel.html index 28cfcc9a..b16900e0 100644 --- a/docs/enums/LogLevel.html +++ b/docs/enums/LogLevel.html @@ -1,5 +1,5 @@ LogLevel | node-switchbot

    Enumeration LogLevel

    Enum for log levels.

    -

    Enumeration Members

    Enumeration Members

    Enumeration Members

    DEBUG
    DEBUGERROR
    DEBUGSUCCESS
    DEBUGWARN
    ERROR
    INFO
    SUCCESS
    WARN
    +

    Enumeration Members

    DEBUG
    DEBUGERROR
    DEBUGSUCCESS
    DEBUGWARN
    ERROR
    INFO
    SUCCESS
    WARN
    diff --git a/docs/enums/SwitchBotBLEModel.html b/docs/enums/SwitchBotBLEModel.html index 64ea8ba5..47dcaf5e 100644 --- a/docs/enums/SwitchBotBLEModel.html +++ b/docs/enums/SwitchBotBLEModel.html @@ -1,4 +1,4 @@ -SwitchBotBLEModel | node-switchbot

    Enumeration SwitchBotBLEModel

    Enumeration Members

    BlindTilt +SwitchBotBLEModel | node-switchbot

    Enumeration SwitchBotBLEModel

    Enumeration Members

    BlindTilt
    Bot
    CeilingLight
    CeilingLightPro
    ColorBulb
    ContactSensor
    Curtain
    Curtain3
    Hub2
    Humidifier
    Keypad
    Leak
    Lock
    LockPro
    Meter
    MeterPlus
    MeterPro
    MeterProCO2
    MotionSensor
    OutdoorMeter
    PlugMiniJP
    PlugMiniUS
    StripLight
    Unknown
    +

    Enumeration Members

    BlindTilt
    Bot
    CeilingLight
    CeilingLightPro
    ColorBulb
    ContactSensor
    Curtain
    Curtain3
    Hub2
    Humidifier
    Keypad
    Leak
    Lock
    LockPro
    Meter
    MeterPlus
    MeterPro
    MeterProCO2
    MotionSensor
    OutdoorMeter
    PlugMiniJP
    PlugMiniUS
    RelaySwitch1Plus
    RelaySwitch1PM
    StripLight
    Unknown
    diff --git a/docs/enums/SwitchBotBLEModelFriendlyName.html b/docs/enums/SwitchBotBLEModelFriendlyName.html index f3a768bd..d3516249 100644 --- a/docs/enums/SwitchBotBLEModelFriendlyName.html +++ b/docs/enums/SwitchBotBLEModelFriendlyName.html @@ -1,4 +1,4 @@ -SwitchBotBLEModelFriendlyName | node-switchbot

    Enumeration SwitchBotBLEModelFriendlyName

    Enumeration Members

    BlindTilt +SwitchBotBLEModelFriendlyName | node-switchbot

    Enumeration SwitchBotBLEModelFriendlyName

    Enumeration Members

    BlindTilt
    Bot
    CeilingLight
    CeilingLightPro
    ColorBulb
    ContactSensor
    Curtain
    Curtain3
    Hub2
    Humidifier
    Keypad
    Leak
    Lock
    LockPro
    Meter
    MeterPlus
    MeterPro
    MeterProCO2
    MotionSensor
    OutdoorMeter
    PlugMini
    StripLight
    Unknown
    +

    Enumeration Members

    BlindTilt
    Bot
    CeilingLight
    CeilingLightPro
    ColorBulb
    ContactSensor
    Curtain
    Curtain3
    Hub2
    Humidifier
    Keypad
    Leak
    Lock
    LockPro
    Meter
    MeterPlus
    MeterPro
    MeterProCO2
    MotionSensor
    OutdoorMeter
    PlugMini
    RelaySwitch1Plus
    RelaySwitch1PM
    StripLight
    Unknown
    diff --git a/docs/enums/SwitchBotBLEModelName.html b/docs/enums/SwitchBotBLEModelName.html index 9f563e63..3c1fa586 100644 --- a/docs/enums/SwitchBotBLEModelName.html +++ b/docs/enums/SwitchBotBLEModelName.html @@ -1,4 +1,4 @@ -SwitchBotBLEModelName | node-switchbot

    Enumeration SwitchBotBLEModelName

    Enumeration Members

    BlindTilt +SwitchBotBLEModelName | node-switchbot

    Enumeration SwitchBotBLEModelName

    Enumeration Members

    BlindTilt
    Bot
    CeilingLight
    CeilingLightPro
    ColorBulb
    ContactSensor
    Curtain
    Curtain3
    Hub2
    Humidifier
    Keypad
    Leak
    Lock
    LockPro
    Meter
    MeterPlus
    MeterPro
    MeterProCO2
    MotionSensor
    OutdoorMeter
    PlugMini
    StripLight
    Unknown
    +

    Enumeration Members

    BlindTilt
    Bot
    CeilingLight
    CeilingLightPro
    ColorBulb
    ContactSensor
    Curtain
    Curtain3
    Hub2
    Humidifier
    Keypad
    Leak
    Lock
    LockPro
    Meter
    MeterPlus
    MeterPro
    MeterProCO2
    MotionSensor
    OutdoorMeter
    PlugMini
    RelaySwitch1Plus
    RelaySwitch1PM
    StripLight
    Unknown
    diff --git a/docs/enums/SwitchBotModel.html b/docs/enums/SwitchBotModel.html index a8c3e3e8..eef2ccf4 100644 --- a/docs/enums/SwitchBotModel.html +++ b/docs/enums/SwitchBotModel.html @@ -1,4 +1,4 @@ -SwitchBotModel | node-switchbot

    Enumeration SwitchBotModel

    Enumeration Members

    BatteryCirculatorFan +SwitchBotModel | node-switchbot

    Enumeration SwitchBotModel

    Enumeration Members

    BatteryCirculatorFan
    BlindTilt
    Bot
    CeilingLight
    CeilingLightPro
    ColorBulb
    ContactSensor
    Curtain
    Curtain3
    Hub2
    HubMini
    HubPlus
    Humidifier
    IndoorCam
    K10
    K10Pro
    Keypad
    KeypadTouch
    Lock
    LockPro
    Meter
    MeterPlusJP
    MeterPlusUS
    MeterPro
    MeterProCO2
    MotionSensor
    OutdoorMeter
    PanTiltCam
    PanTiltCam2K
    Plug
    PlugMiniJP
    PlugMiniUS
    Remote
    RobotVacuumCleanerS1
    RobotVacuumCleanerS10
    RobotVacuumCleanerS1Plus
    StripLight
    UniversalRemote
    Unknown
    WaterDetector
    WoSweeper
    WoSweeperMini
    +

    Enumeration Members

    BatteryCirculatorFan
    BlindTilt
    Bot
    CeilingLight
    CeilingLightPro
    ColorBulb
    ContactSensor
    Curtain
    Curtain3
    Hub2
    HubMini
    HubPlus
    Humidifier
    IndoorCam
    K10
    K10Pro
    Keypad
    KeypadTouch
    Lock
    LockPro
    Meter
    MeterPlusJP
    MeterPlusUS
    MeterPro
    MeterProCO2
    MotionSensor
    OutdoorMeter
    PanTiltCam
    PanTiltCam2K
    Plug
    PlugMiniJP
    PlugMiniUS
    Remote
    RobotVacuumCleanerS1
    RobotVacuumCleanerS10
    RobotVacuumCleanerS1Plus
    StripLight
    UniversalRemote
    Unknown
    WaterDetector
    WoSweeper
    WoSweeperMini
    diff --git a/docs/interfaces/AdvertisementData.html b/docs/interfaces/AdvertisementData.html index 54353b67..14cbd530 100644 --- a/docs/interfaces/AdvertisementData.html +++ b/docs/interfaces/AdvertisementData.html @@ -1,3 +1,3 @@ -AdvertisementData | node-switchbot

    Interface AdvertisementData

    interface AdvertisementData {
        manufacturerData: null | Buffer;
        serviceData: null | Buffer;
    }

    Properties

    manufacturerData +AdvertisementData | node-switchbot

    Interface AdvertisementData

    interface AdvertisementData {
        manufacturerData: null | Buffer;
        serviceData: null | Buffer;
    }

    Properties

    manufacturerData: null | Buffer
    serviceData: null | Buffer
    +

    Properties

    manufacturerData: null | Buffer
    serviceData: null | Buffer
    diff --git a/docs/interfaces/Chars.html b/docs/interfaces/Chars.html index d4b896fe..871528b7 100644 --- a/docs/interfaces/Chars.html +++ b/docs/interfaces/Chars.html @@ -1,4 +1,4 @@ -Chars | node-switchbot

    Interface Chars

    interface Chars {
        device: null | Characteristic;
        notify: null | Characteristic;
        write: null | Characteristic;
    }

    Properties

    device +Chars | node-switchbot

    Interface Chars

    interface Chars {
        device: null | Characteristic;
        notify: null | Characteristic;
        write: null | Characteristic;
    }

    Properties

    Properties

    device: null | Characteristic
    notify: null | Characteristic
    write: null | Characteristic
    +

    Properties

    device: null | Characteristic
    notify: null | Characteristic
    write: null | Characteristic
    diff --git a/docs/interfaces/ErrorObject.html b/docs/interfaces/ErrorObject.html index fbde06cc..0115e5cc 100644 --- a/docs/interfaces/ErrorObject.html +++ b/docs/interfaces/ErrorObject.html @@ -1,3 +1,3 @@ -ErrorObject | node-switchbot

    Interface ErrorObject

    interface ErrorObject {
        code: string;
        message: string;
    }

    Properties

    code +ErrorObject | node-switchbot

    Interface ErrorObject

    interface ErrorObject {
        code: string;
        message: string;
    }

    Properties

    Properties

    code: string
    message: string
    +

    Properties

    code: string
    message: string
    diff --git a/docs/interfaces/NobleTypes.html b/docs/interfaces/NobleTypes.html index 1e7f1bc3..132627ea 100644 --- a/docs/interfaces/NobleTypes.html +++ b/docs/interfaces/NobleTypes.html @@ -1,4 +1,4 @@ -NobleTypes | node-switchbot

    Interface NobleTypes

    interface NobleTypes {
        noble: __module;
        peripheral: Peripheral;
        state:
            | "unknown"
            | "resetting"
            | "unsupported"
            | "unauthorized"
            | "poweredOff"
            | "poweredOn";
    }

    Properties

    noble +NobleTypes | node-switchbot

    Interface NobleTypes

    interface NobleTypes {
        noble: __module;
        peripheral: Peripheral;
        state:
            | "unknown"
            | "resetting"
            | "unsupported"
            | "unauthorized"
            | "poweredOff"
            | "poweredOn";
    }

    Properties

    Properties

    noble: __module
    peripheral: Peripheral
    state:
        | "unknown"
        | "resetting"
        | "unsupported"
        | "unauthorized"
        | "poweredOff"
        | "poweredOn"
    +

    Properties

    noble: __module
    peripheral: Peripheral
    state:
        | "unknown"
        | "resetting"
        | "unsupported"
        | "unauthorized"
        | "poweredOff"
        | "poweredOn"
    diff --git a/docs/interfaces/Params.html b/docs/interfaces/Params.html index 4b41e350..d4214a7e 100644 --- a/docs/interfaces/Params.html +++ b/docs/interfaces/Params.html @@ -1,6 +1,6 @@ -Params | node-switchbot

    Interface Params

    interface Params {
        duration?: number;
        id?: string;
        model?: string;
        noble?: __module;
        quick?: boolean;
    }

    Properties

    duration? +Params | node-switchbot

    Interface Params

    interface Params {
        duration?: number;
        id?: string;
        model?: string;
        noble?: __module;
        quick?: boolean;
    }

    Properties

    duration?: number
    id?: string
    model?: string
    noble?: __module
    quick?: boolean
    +

    Properties

    duration?: number
    id?: string
    model?: string
    noble?: __module
    quick?: boolean
    diff --git a/docs/interfaces/Rule.html b/docs/interfaces/Rule.html index b23c3e45..653a9df7 100644 --- a/docs/interfaces/Rule.html +++ b/docs/interfaces/Rule.html @@ -1,4 +1,4 @@ -Rule | node-switchbot

    Interface Rule

    interface Rule {
        enum?: unknown[];
        max?: number;
        maxBytes?: number;
        min?: number;
        minBytes?: number;
        pattern?: RegExp;
        required?: boolean;
        type?:
            | "string"
            | "boolean"
            | "object"
            | "float"
            | "integer"
            | "array";
    }

    Properties

    enum? +Rule | node-switchbot

    Interface Rule

    interface Rule {
        enum?: unknown[];
        max?: number;
        maxBytes?: number;
        min?: number;
        minBytes?: number;
        pattern?: RegExp;
        required?: boolean;
        type?:
            | "string"
            | "boolean"
            | "object"
            | "float"
            | "integer"
            | "array";
    }

    Properties

    Properties

    enum?: unknown[]
    max?: number
    maxBytes?: number
    min?: number
    minBytes?: number
    pattern?: RegExp
    required?: boolean
    type?:
        | "string"
        | "boolean"
        | "object"
        | "float"
        | "integer"
        | "array"
    +

    Properties

    enum?: unknown[]
    max?: number
    maxBytes?: number
    min?: number
    minBytes?: number
    pattern?: RegExp
    required?: boolean
    type?:
        | "string"
        | "boolean"
        | "object"
        | "float"
        | "integer"
        | "array"
    diff --git a/docs/interfaces/ServiceData.html b/docs/interfaces/ServiceData.html index 27214550..3ac6861f 100644 --- a/docs/interfaces/ServiceData.html +++ b/docs/interfaces/ServiceData.html @@ -1,2 +1,2 @@ -ServiceData | node-switchbot

    Interface ServiceData

    interface ServiceData {
        model: string;
        [key: string]: unknown;
    }

    Indexable

    • [key: string]: unknown

    Properties

    Properties

    model: string
    +ServiceData | node-switchbot

    Interface ServiceData

    interface ServiceData {
        model: string;
        [key: string]: unknown;
    }

    Indexable

    • [key: string]: unknown

    Properties

    Properties

    model: string
    diff --git a/docs/interfaces/SwitchBotBLEDevice.html b/docs/interfaces/SwitchBotBLEDevice.html index f0bc34d5..717343c1 100644 --- a/docs/interfaces/SwitchBotBLEDevice.html +++ b/docs/interfaces/SwitchBotBLEDevice.html @@ -1,4 +1,4 @@ -SwitchBotBLEDevice | node-switchbot

    Interface SwitchBotBLEDevice

    interface SwitchBotBLEDevice {
        BlindTilt: DeviceInfo;
        Bot: DeviceInfo;
        CeilingLight: DeviceInfo;
        CeilingLightPro: DeviceInfo;
        ColorBulb: DeviceInfo;
        ContactSensor: DeviceInfo;
        Curtain: DeviceInfo;
        Curtain3: DeviceInfo;
        Hub2: DeviceInfo;
        Humidifier: DeviceInfo;
        Lock: DeviceInfo;
        LockPro: DeviceInfo;
        Meter: DeviceInfo;
        MeterPlus: DeviceInfo;
        MeterPro: DeviceInfo;
        MeterProCO2: DeviceInfo;
        MotionSensor: DeviceInfo;
        OutdoorMeter: DeviceInfo;
        PlugMiniJP: DeviceInfo;
        PlugMiniUS: DeviceInfo;
        StripLight: DeviceInfo;
        Unknown: DeviceInfo;
    }

    Properties

    BlindTilt +SwitchBotBLEDevice | node-switchbot

    Interface SwitchBotBLEDevice

    interface SwitchBotBLEDevice {
        BlindTilt: DeviceInfo;
        Bot: DeviceInfo;
        CeilingLight: DeviceInfo;
        CeilingLightPro: DeviceInfo;
        ColorBulb: DeviceInfo;
        ContactSensor: DeviceInfo;
        Curtain: DeviceInfo;
        Curtain3: DeviceInfo;
        Hub2: DeviceInfo;
        Humidifier: DeviceInfo;
        Lock: DeviceInfo;
        LockPro: DeviceInfo;
        Meter: DeviceInfo;
        MeterPlus: DeviceInfo;
        MeterPro: DeviceInfo;
        MeterProCO2: DeviceInfo;
        MotionSensor: DeviceInfo;
        OutdoorMeter: DeviceInfo;
        PlugMiniJP: DeviceInfo;
        PlugMiniUS: DeviceInfo;
        StripLight: DeviceInfo;
        Unknown: DeviceInfo;
    }

    Properties

    BlindTilt: DeviceInfo
    Bot: DeviceInfo
    CeilingLight: DeviceInfo
    CeilingLightPro: DeviceInfo
    ColorBulb: DeviceInfo
    ContactSensor: DeviceInfo
    Curtain: DeviceInfo
    Curtain3: DeviceInfo
    Hub2: DeviceInfo
    Humidifier: DeviceInfo
    Lock: DeviceInfo
    LockPro: DeviceInfo
    Meter: DeviceInfo
    MeterPlus: DeviceInfo
    MeterPro: DeviceInfo
    MeterProCO2: DeviceInfo
    MotionSensor: DeviceInfo
    OutdoorMeter: DeviceInfo
    PlugMiniJP: DeviceInfo
    PlugMiniUS: DeviceInfo
    StripLight: DeviceInfo
    Unknown: DeviceInfo
    +

    Properties

    BlindTilt: DeviceInfo
    Bot: DeviceInfo
    CeilingLight: DeviceInfo
    CeilingLightPro: DeviceInfo
    ColorBulb: DeviceInfo
    ContactSensor: DeviceInfo
    Curtain: DeviceInfo
    Curtain3: DeviceInfo
    Hub2: DeviceInfo
    Humidifier: DeviceInfo
    Lock: DeviceInfo
    LockPro: DeviceInfo
    Meter: DeviceInfo
    MeterPlus: DeviceInfo
    MeterPro: DeviceInfo
    MeterProCO2: DeviceInfo
    MotionSensor: DeviceInfo
    OutdoorMeter: DeviceInfo
    PlugMiniJP: DeviceInfo
    PlugMiniUS: DeviceInfo
    StripLight: DeviceInfo
    Unknown: DeviceInfo
    diff --git a/docs/interfaces/WebhookDetail.html b/docs/interfaces/WebhookDetail.html index 2410b033..0ca40474 100644 --- a/docs/interfaces/WebhookDetail.html +++ b/docs/interfaces/WebhookDetail.html @@ -1,6 +1,6 @@ -WebhookDetail | node-switchbot

    Interface WebhookDetail

    interface WebhookDetail {
        createTime: number;
        deviceList: string;
        enable: boolean;
        lastUpdateTime: number;
        url: string;
    }

    Properties

    createTime +WebhookDetail | node-switchbot

    Interface WebhookDetail

    interface WebhookDetail {
        createTime: number;
        deviceList: string;
        enable: boolean;
        lastUpdateTime: number;
        url: string;
    }

    Properties

    createTime: number
    deviceList: string
    enable: boolean
    lastUpdateTime: number
    url: string
    +

    Properties

    createTime: number
    deviceList: string
    enable: boolean
    lastUpdateTime: number
    url: string
    diff --git a/docs/interfaces/ad.html b/docs/interfaces/ad.html index eb965c39..ddbc6ef9 100644 --- a/docs/interfaces/ad.html +++ b/docs/interfaces/ad.html @@ -1,5 +1,5 @@ -ad | node-switchbot

    Interface ad

    interface ad {
        address: string;
        id: string;
        rssi: number;
        serviceData:
            | botServiceData
            | colorBulbServiceData
            | contactSensorServiceData
            | curtainServiceData
            | curtain3ServiceData
            | stripLightServiceData
            | lockServiceData
            | lockProServiceData
            | meterServiceData
            | meterPlusServiceData
            | meterProServiceData
            | meterProCO2ServiceData
            | motionSensorServiceData
            | outdoorMeterServiceData
            | plugMiniUSServiceData
            | plugMiniJPServiceData
            | blindTiltServiceData
            | ceilingLightServiceData
            | ceilingLightProServiceData
            | hub2ServiceData
            | batteryCirculatorFanServiceData
            | waterLeakDetectorServiceData
            | humidifierServiceData
            | robotVacuumCleanerServiceData
            | keypadDetectorServiceData;
        [key: string]: unknown;
    }

    Indexable

    • [key: string]: unknown

    Properties

    address +ad | node-switchbot

    Interface ad

    interface ad {
        address: string;
        id: string;
        rssi: number;
        serviceData:
            | botServiceData
            | colorBulbServiceData
            | contactSensorServiceData
            | curtainServiceData
            | curtain3ServiceData
            | stripLightServiceData
            | lockServiceData
            | lockProServiceData
            | meterServiceData
            | meterPlusServiceData
            | meterProServiceData
            | meterProCO2ServiceData
            | motionSensorServiceData
            | outdoorMeterServiceData
            | plugMiniUSServiceData
            | plugMiniJPServiceData
            | blindTiltServiceData
            | ceilingLightServiceData
            | ceilingLightProServiceData
            | hub2ServiceData
            | batteryCirculatorFanServiceData
            | waterLeakDetectorServiceData
            | humidifierServiceData
            | robotVacuumCleanerServiceData
            | keypadDetectorServiceData
            | relaySwitch1PMServiceData
            | relaySwitch1PlusServiceData;
        [key: string]: unknown;
    }

    Indexable

    • [key: string]: unknown

    Properties

    address: string
    id: string
    rssi: number
    serviceData:
        | botServiceData
        | colorBulbServiceData
        | contactSensorServiceData
        | curtainServiceData
        | curtain3ServiceData
        | stripLightServiceData
        | lockServiceData
        | lockProServiceData
        | meterServiceData
        | meterPlusServiceData
        | meterProServiceData
        | meterProCO2ServiceData
        | motionSensorServiceData
        | outdoorMeterServiceData
        | plugMiniUSServiceData
        | plugMiniJPServiceData
        | blindTiltServiceData
        | ceilingLightServiceData
        | ceilingLightProServiceData
        | hub2ServiceData
        | batteryCirculatorFanServiceData
        | waterLeakDetectorServiceData
        | humidifierServiceData
        | robotVacuumCleanerServiceData
        | keypadDetectorServiceData
    +

    Properties

    address: string
    id: string
    rssi: number
    serviceData:
        | botServiceData
        | colorBulbServiceData
        | contactSensorServiceData
        | curtainServiceData
        | curtain3ServiceData
        | stripLightServiceData
        | lockServiceData
        | lockProServiceData
        | meterServiceData
        | meterPlusServiceData
        | meterProServiceData
        | meterProCO2ServiceData
        | motionSensorServiceData
        | outdoorMeterServiceData
        | plugMiniUSServiceData
        | plugMiniJPServiceData
        | blindTiltServiceData
        | ceilingLightServiceData
        | ceilingLightProServiceData
        | hub2ServiceData
        | batteryCirculatorFanServiceData
        | waterLeakDetectorServiceData
        | humidifierServiceData
        | robotVacuumCleanerServiceData
        | keypadDetectorServiceData
        | relaySwitch1PMServiceData
        | relaySwitch1PlusServiceData
    diff --git a/docs/interfaces/body.html b/docs/interfaces/body.html index 80d1fa74..03a33b44 100644 --- a/docs/interfaces/body.html +++ b/docs/interfaces/body.html @@ -1,3 +1,3 @@ -body | node-switchbot

    Interface body

    interface body {
        deviceList: deviceList;
        infraredRemoteList: infraredRemoteList;
    }

    Properties

    deviceList +body | node-switchbot

    Interface body

    interface body {
        deviceList: deviceList;
        infraredRemoteList: infraredRemoteList;
    }

    Properties

    deviceList: deviceList
    infraredRemoteList: infraredRemoteList
    +

    Properties

    deviceList: deviceList
    infraredRemoteList: infraredRemoteList
    diff --git a/docs/interfaces/bodyChange.html b/docs/interfaces/bodyChange.html index ca14703f..9342f00b 100644 --- a/docs/interfaces/bodyChange.html +++ b/docs/interfaces/bodyChange.html @@ -1,4 +1,4 @@ -bodyChange | node-switchbot

    Interface bodyChange

    interface bodyChange {
        command: string;
        commandType: string;
        parameter: string;
    }

    Properties

    command +bodyChange | node-switchbot

    Interface bodyChange

    interface bodyChange {
        command: string;
        commandType: string;
        parameter: string;
    }

    Properties

    command: string
    commandType: string
    parameter: string
    +

    Properties

    command: string
    commandType: string
    parameter: string
    diff --git a/docs/interfaces/deleteWebhookResponse.html b/docs/interfaces/deleteWebhookResponse.html index e96fb8e7..4f148bde 100644 --- a/docs/interfaces/deleteWebhookResponse.html +++ b/docs/interfaces/deleteWebhookResponse.html @@ -1,4 +1,4 @@ -deleteWebhookResponse | node-switchbot

    Interface deleteWebhookResponse

    interface deleteWebhookResponse {
        body: object;
        message: string;
        statusCode: number;
    }

    Properties

    body +deleteWebhookResponse | node-switchbot

    Interface deleteWebhookResponse

    interface deleteWebhookResponse {
        body: object;
        message: string;
        statusCode: number;
    }

    Properties

    Properties

    body: object
    message: string
    statusCode: number
    +

    Properties

    body: object
    message: string
    statusCode: number
    diff --git a/docs/interfaces/device.html b/docs/interfaces/device.html index d40787a8..ff6fa628 100644 --- a/docs/interfaces/device.html +++ b/docs/interfaces/device.html @@ -1,7 +1,7 @@ -device | node-switchbot

    Interface device

    interface device {
        deviceId: string;
        deviceName: string;
        deviceType: string;
        enableCloudService: boolean;
        hubDeviceId: string;
        version?: number;
    }

    Hierarchy (view full)

    Properties

    deviceId +device | node-switchbot

    Interface device

    interface device {
        deviceId: string;
        deviceName: string;
        deviceType: string;
        enableCloudService: boolean;
        hubDeviceId: string;
        version?: number;
    }

    Hierarchy (view full)

    Properties

    deviceId: string
    deviceName: string
    deviceType: string
    enableCloudService: boolean
    hubDeviceId: string
    version?: number
    +

    Properties

    deviceId: string
    deviceName: string
    deviceType: string
    enableCloudService: boolean
    hubDeviceId: string
    version?: number
    diff --git a/docs/interfaces/deviceList.html b/docs/interfaces/deviceList.html index 6cd3c04f..a3ae735f 100644 --- a/docs/interfaces/deviceList.html +++ b/docs/interfaces/deviceList.html @@ -1,2 +1,2 @@ -deviceList | node-switchbot

    Interface deviceList

    interface deviceList {
        device: device[];
    }

    Properties

    Properties

    device: device[]
    +deviceList | node-switchbot

    Interface deviceList

    interface deviceList {
        device: device[];
    }

    Properties

    Properties

    device: device[]
    diff --git a/docs/interfaces/deviceStatus.html b/docs/interfaces/deviceStatus.html index f72fbba8..35bc6c30 100644 --- a/docs/interfaces/deviceStatus.html +++ b/docs/interfaces/deviceStatus.html @@ -1,7 +1,7 @@ -deviceStatus | node-switchbot

    Interface deviceStatus

    interface deviceStatus {
        deviceId: string;
        deviceName: string;
        deviceType: string;
        enableCloudService: boolean;
        hubDeviceId: string;
        version: number;
    }

    Hierarchy (view full)

    Properties

    deviceId +deviceStatus | node-switchbot

    Interface deviceStatus

    interface deviceStatus {
        deviceId: string;
        deviceName: string;
        deviceType: string;
        enableCloudService: boolean;
        hubDeviceId: string;
        version: number;
    }

    Hierarchy (view full)

    Properties

    deviceId: string
    deviceName: string
    deviceType: string
    enableCloudService: boolean
    hubDeviceId: string
    version: number
    +

    Properties

    deviceId: string
    deviceName: string
    deviceType: string
    enableCloudService: boolean
    hubDeviceId: string
    version: number
    diff --git a/docs/interfaces/deviceStatusRequest.html b/docs/interfaces/deviceStatusRequest.html index efd3783f..a6c3388f 100644 --- a/docs/interfaces/deviceStatusRequest.html +++ b/docs/interfaces/deviceStatusRequest.html @@ -1,4 +1,4 @@ -deviceStatusRequest | node-switchbot

    Interface deviceStatusRequest

    interface deviceStatusRequest {
        body: deviceStatus;
        message: string;
        statusCode: number;
    }

    Properties

    body +deviceStatusRequest | node-switchbot

    Interface deviceStatusRequest

    interface deviceStatusRequest {
        body: deviceStatus;
        message: string;
        statusCode: number;
    }

    Properties

    Properties

    message: string
    statusCode: number
    +

    Properties

    message: string
    statusCode: number
    diff --git a/docs/interfaces/deviceWebhook.html b/docs/interfaces/deviceWebhook.html index 302f7e71..2981ac9d 100644 --- a/docs/interfaces/deviceWebhook.html +++ b/docs/interfaces/deviceWebhook.html @@ -1,4 +1,4 @@ -deviceWebhook | node-switchbot

    Interface deviceWebhook

    interface deviceWebhook {
        context: deviceWebhookContext;
        eventType: string;
        eventVersion: string;
    }

    Properties

    context +deviceWebhook | node-switchbot

    Interface deviceWebhook

    interface deviceWebhook {
        context: deviceWebhookContext;
        eventType: string;
        eventVersion: string;
    }

    Properties

    eventType: string
    eventVersion: string
    +

    Properties

    eventType: string
    eventVersion: string
    diff --git a/docs/interfaces/deviceWebhookContext.html b/docs/interfaces/deviceWebhookContext.html index 1aa4e265..293ece6f 100644 --- a/docs/interfaces/deviceWebhookContext.html +++ b/docs/interfaces/deviceWebhookContext.html @@ -1,4 +1,4 @@ -deviceWebhookContext | node-switchbot

    Interface deviceWebhookContext

    interface deviceWebhookContext {
        deviceMac: string;
        deviceType: string;
        timeOfSample: number;
    }

    Properties

    deviceMac +deviceWebhookContext | node-switchbot

    Interface deviceWebhookContext

    interface deviceWebhookContext {
        deviceMac: string;
        deviceType: string;
        timeOfSample: number;
    }

    Properties

    deviceMac: string
    deviceType: string
    timeOfSample: number
    +

    Properties

    deviceMac: string
    deviceType: string
    timeOfSample: number
    diff --git a/docs/interfaces/devices.html b/docs/interfaces/devices.html index 2b0fe33d..553fd79f 100644 --- a/docs/interfaces/devices.html +++ b/docs/interfaces/devices.html @@ -1,4 +1,4 @@ -devices | node-switchbot

    Interface devices

    interface devices {
        body: body;
        message: string;
        statusCode: number;
    }

    Properties

    body +devices | node-switchbot

    Interface devices

    interface devices {
        body: body;
        message: string;
        statusCode: number;
    }

    Properties

    Properties

    body: body
    message: string
    statusCode: number
    +

    Properties

    body: body
    message: string
    statusCode: number
    diff --git a/docs/interfaces/infraredRemoteList.html b/docs/interfaces/infraredRemoteList.html index a9d5a183..e1b2422c 100644 --- a/docs/interfaces/infraredRemoteList.html +++ b/docs/interfaces/infraredRemoteList.html @@ -1,2 +1,2 @@ -infraredRemoteList | node-switchbot

    Interface infraredRemoteList

    interface infraredRemoteList {
        device: irdevice[];
    }

    Properties

    Properties

    device: irdevice[]
    +infraredRemoteList | node-switchbot

    Interface infraredRemoteList

    interface infraredRemoteList {
        device: irdevice[];
    }

    Properties

    Properties

    device: irdevice[]
    diff --git a/docs/interfaces/irdevice.html b/docs/interfaces/irdevice.html index b4cf5e86..efda1c91 100644 --- a/docs/interfaces/irdevice.html +++ b/docs/interfaces/irdevice.html @@ -1,5 +1,5 @@ -irdevice | node-switchbot

    Interface irdevice

    interface irdevice {
        deviceId?: string;
        deviceName: string;
        hubDeviceId: string;
        remoteType: string;
    }

    Properties

    deviceId? +irdevice | node-switchbot

    Interface irdevice

    interface irdevice {
        deviceId?: string;
        deviceName: string;
        hubDeviceId: string;
        remoteType: string;
    }

    Properties

    deviceId?: string
    deviceName: string
    hubDeviceId: string
    remoteType: string
    +

    Properties

    deviceId?: string
    deviceName: string
    hubDeviceId: string
    remoteType: string
    diff --git a/docs/interfaces/pushResponse.html b/docs/interfaces/pushResponse.html index 66c08f6e..1b092faf 100644 --- a/docs/interfaces/pushResponse.html +++ b/docs/interfaces/pushResponse.html @@ -1,4 +1,4 @@ -pushResponse | node-switchbot

    Interface pushResponse

    interface pushResponse {
        body: {
            commandId: string;
        };
        message: string;
        statusCode: number;
    }

    Properties

    body +pushResponse | node-switchbot

    Interface pushResponse

    interface pushResponse {
        body: {
            commandId: string;
        };
        message: string;
        statusCode: number;
    }

    Properties

    Properties

    body: {
        commandId: string;
    }
    message: string
    statusCode: number
    +

    Properties

    body: {
        commandId: string;
    }
    message: string
    statusCode: number
    diff --git a/docs/interfaces/queryWebhookResponse.html b/docs/interfaces/queryWebhookResponse.html index 26197042..d38406ec 100644 --- a/docs/interfaces/queryWebhookResponse.html +++ b/docs/interfaces/queryWebhookResponse.html @@ -1,4 +1,4 @@ -queryWebhookResponse | node-switchbot

    Interface queryWebhookResponse

    interface queryWebhookResponse {
        body: WebhookDetail[];
        message: string;
        statusCode: number;
    }

    Properties

    body +queryWebhookResponse | node-switchbot

    Interface queryWebhookResponse

    interface queryWebhookResponse {
        body: WebhookDetail[];
        message: string;
        statusCode: number;
    }

    Properties

    Properties

    message: string
    statusCode: number
    +

    Properties

    message: string
    statusCode: number
    diff --git a/docs/interfaces/setupWebhookResponse.html b/docs/interfaces/setupWebhookResponse.html index 6692f28e..54847a10 100644 --- a/docs/interfaces/setupWebhookResponse.html +++ b/docs/interfaces/setupWebhookResponse.html @@ -1,4 +1,4 @@ -setupWebhookResponse | node-switchbot

    Interface setupWebhookResponse

    interface setupWebhookResponse {
        body: object;
        message: string;
        statusCode: number;
    }

    Properties

    body +setupWebhookResponse | node-switchbot

    Interface setupWebhookResponse

    interface setupWebhookResponse {
        body: object;
        message: string;
        statusCode: number;
    }

    Properties

    Properties

    body: object
    message: string
    statusCode: number
    +

    Properties

    body: object
    message: string
    statusCode: number
    diff --git a/docs/interfaces/switchbot.html b/docs/interfaces/switchbot.html index 4bc4747d..734ed7db 100644 --- a/docs/interfaces/switchbot.html +++ b/docs/interfaces/switchbot.html @@ -1,3 +1,3 @@ -switchbot | node-switchbot

    Interface switchbot

    interface switchbot {
        discover: ((arg0: {
            duration?: any;
            id?: string;
            model: string;
            quick: boolean;
        }) => Promise<any>);
        wait: ((arg0: number) => any);
    }

    Properties

    discover +switchbot | node-switchbot

    Interface switchbot

    interface switchbot {
        discover: ((arg0: {
            duration?: any;
            id?: string;
            model: string;
            quick: boolean;
        }) => Promise<any>);
        wait: ((arg0: number) => any);
    }

    Properties

    Properties

    discover: ((arg0: {
        duration?: any;
        id?: string;
        model: string;
        quick: boolean;
    }) => Promise<any>)
    wait: ((arg0: number) => any)
    +

    Properties

    discover: ((arg0: {
        duration?: any;
        id?: string;
        model: string;
        quick: boolean;
    }) => Promise<any>)
    wait: ((arg0: number) => any)
    diff --git a/docs/interfaces/updateWebhookResponse.html b/docs/interfaces/updateWebhookResponse.html index 79045651..95d43055 100644 --- a/docs/interfaces/updateWebhookResponse.html +++ b/docs/interfaces/updateWebhookResponse.html @@ -1,4 +1,4 @@ -updateWebhookResponse | node-switchbot

    Interface updateWebhookResponse

    interface updateWebhookResponse {
        body: object;
        message: string;
        statusCode: number;
    }

    Properties

    body +updateWebhookResponse | node-switchbot

    Interface updateWebhookResponse

    interface updateWebhookResponse {
        body: object;
        message: string;
        statusCode: number;
    }

    Properties

    Properties

    body: object
    message: string
    statusCode: number
    +

    Properties

    body: object
    message: string
    statusCode: number
    diff --git a/docs/interfaces/webhookRequest.html b/docs/interfaces/webhookRequest.html index 5a3ca665..f1aa2684 100644 --- a/docs/interfaces/webhookRequest.html +++ b/docs/interfaces/webhookRequest.html @@ -1,4 +1,4 @@ -webhookRequest | node-switchbot

    Interface webhookRequest

    interface webhookRequest {
        action: string;
        deviceList: string;
        url: string;
    }

    Properties

    action +webhookRequest | node-switchbot

    Interface webhookRequest

    interface webhookRequest {
        action: string;
        deviceList: string;
        url: string;
    }

    Properties

    Properties

    action: string
    deviceList: string
    url: string
    +

    Properties

    action: string
    deviceList: string
    url: string
    diff --git a/docs/modules.html b/docs/modules.html index fc056564..99b4afbe 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -119,6 +119,8 @@ meterPlusWebhookContext meterPro meterProCO2ServiceData +meterProCO2Status +meterProCO2WebhookContext meterProServiceData meterProStatus meterProWebhookContext @@ -147,6 +149,8 @@ plugMiniUSWebhookContext plugStatus plugWebhookContext +relaySwitch1PlusServiceData +relaySwitch1PMServiceData remote robotVacuumCleanerS1 robotVacuumCleanerS1Plus diff --git a/docs/types/MacAddress.html b/docs/types/MacAddress.html index 2b283542..3caba34a 100644 --- a/docs/types/MacAddress.html +++ b/docs/types/MacAddress.html @@ -1 +1 @@ -MacAddress | node-switchbot

    Type Alias MacAddress

    MacAddress: string
    +MacAddress | node-switchbot

    Type Alias MacAddress

    MacAddress: string
    diff --git a/docs/types/batteryCirculatorFan.html b/docs/types/batteryCirculatorFan.html index 07fa0a11..aa9a6108 100644 --- a/docs/types/batteryCirculatorFan.html +++ b/docs/types/batteryCirculatorFan.html @@ -1 +1 @@ -batteryCirculatorFan | node-switchbot

    Type Alias batteryCirculatorFan

    batteryCirculatorFan: device & {}
    +batteryCirculatorFan | node-switchbot

    Type Alias batteryCirculatorFan

    batteryCirculatorFan: device & {}
    diff --git a/docs/types/batteryCirculatorFanServiceData.html b/docs/types/batteryCirculatorFanServiceData.html index 448f6a66..9471bfae 100644 --- a/docs/types/batteryCirculatorFanServiceData.html +++ b/docs/types/batteryCirculatorFanServiceData.html @@ -1 +1 @@ -batteryCirculatorFanServiceData | node-switchbot

    Type Alias batteryCirculatorFanServiceData

    batteryCirculatorFanServiceData: serviceData & {
        fanSpeed: number;
        model: Unknown;
        modelFriendlyName: Unknown;
        modelName: Unknown;
        state: string;
    }
    +batteryCirculatorFanServiceData | node-switchbot

    Type Alias batteryCirculatorFanServiceData

    batteryCirculatorFanServiceData: serviceData & {
        fanSpeed: number;
        model: Unknown;
        modelFriendlyName: Unknown;
        modelName: Unknown;
        state: string;
    }
    diff --git a/docs/types/batteryCirculatorFanStatus.html b/docs/types/batteryCirculatorFanStatus.html index 567b1560..080da201 100644 --- a/docs/types/batteryCirculatorFanStatus.html +++ b/docs/types/batteryCirculatorFanStatus.html @@ -1 +1 @@ -batteryCirculatorFanStatus | node-switchbot

    Type Alias batteryCirculatorFanStatus

    batteryCirculatorFanStatus: deviceStatus & {
        battery: number;
        chargingStatus: string;
        fanSpeed: number;
        mode:
            | "direct"
            | "natural"
            | "sleep"
            | "baby";
        nightStatus: number;
        oscillation: string;
        power: string;
        verticalOscillation: string;
    }
    +batteryCirculatorFanStatus | node-switchbot

    Type Alias batteryCirculatorFanStatus

    batteryCirculatorFanStatus: deviceStatus & {
        battery: number;
        chargingStatus: string;
        fanSpeed: number;
        mode:
            | "direct"
            | "natural"
            | "sleep"
            | "baby";
        nightStatus: number;
        oscillation: string;
        power: string;
        verticalOscillation: string;
    }
    diff --git a/docs/types/batteryCirculatorFanWebhookContext.html b/docs/types/batteryCirculatorFanWebhookContext.html index bfdf22b1..dcacfde3 100644 --- a/docs/types/batteryCirculatorFanWebhookContext.html +++ b/docs/types/batteryCirculatorFanWebhookContext.html @@ -1 +1 @@ -batteryCirculatorFanWebhookContext | node-switchbot

    Type Alias batteryCirculatorFanWebhookContext

    batteryCirculatorFanWebhookContext: deviceWebhookContext & {
        battery: number;
        chargingStatus: "charging" | "uncharged";
        fanSpeed: number;
        mode:
            | "direct"
            | "natural"
            | "sleep"
            | "baby";
        nightStatus: "off" | 1 | 2;
        oscillation: "on" | "off";
        powerState: "ON" | "OFF";
        version: string;
        verticalOscillation: "on" | "off";
    }
    +batteryCirculatorFanWebhookContext | node-switchbot

    Type Alias batteryCirculatorFanWebhookContext

    batteryCirculatorFanWebhookContext: deviceWebhookContext & {
        battery: number;
        chargingStatus: "charging" | "uncharged";
        fanSpeed: number;
        mode:
            | "direct"
            | "natural"
            | "sleep"
            | "baby";
        nightStatus: "off" | 1 | 2;
        oscillation: "on" | "off";
        powerState: "ON" | "OFF";
        version: string;
        verticalOscillation: "on" | "off";
    }
    diff --git a/docs/types/blindTilt.html b/docs/types/blindTilt.html index d3b34082..3ba7594f 100644 --- a/docs/types/blindTilt.html +++ b/docs/types/blindTilt.html @@ -1 +1 @@ -blindTilt | node-switchbot

    Type Alias blindTilt

    blindTilt: device & {
        blindTiltDevicesIds: string[];
        calibrate: boolean;
        direction: string;
        group: boolean;
        master: boolean;
        slidePosition: number;
    }
    +blindTilt | node-switchbot

    Type Alias blindTilt

    blindTilt: device & {
        blindTiltDevicesIds: string[];
        calibrate: boolean;
        direction: string;
        group: boolean;
        master: boolean;
        slidePosition: number;
    }
    diff --git a/docs/types/blindTiltServiceData.html b/docs/types/blindTiltServiceData.html index 35904745..068d8c41 100644 --- a/docs/types/blindTiltServiceData.html +++ b/docs/types/blindTiltServiceData.html @@ -1 +1 @@ -blindTiltServiceData | node-switchbot

    Type Alias blindTiltServiceData

    blindTiltServiceData: serviceData & {
        battery: number | null;
        calibration: boolean;
        inMotion: boolean;
        lightLevel: number;
        model: BlindTilt;
        modelFriendlyName: BlindTilt;
        modelName: BlindTilt;
        sequenceNumber: number;
        tilt: number;
    }
    +blindTiltServiceData | node-switchbot

    Type Alias blindTiltServiceData

    blindTiltServiceData: serviceData & {
        battery: number;
        calibration: boolean;
        inMotion: boolean;
        lightLevel: number;
        model: BlindTilt;
        modelFriendlyName: BlindTilt;
        modelName: BlindTilt;
        sequenceNumber: number;
        tilt: number;
    }
    diff --git a/docs/types/blindTiltStatus.html b/docs/types/blindTiltStatus.html index 0cca9c1c..8c1e4fbc 100644 --- a/docs/types/blindTiltStatus.html +++ b/docs/types/blindTiltStatus.html @@ -1 +1 @@ -blindTiltStatus | node-switchbot

    Type Alias blindTiltStatus

    blindTiltStatus: deviceStatus & {
        battery: number;
        calibrate: boolean;
        direction: string;
        lightLevel?: "bright" | "dim";
        slidePosition: string;
    }
    +blindTiltStatus | node-switchbot

    Type Alias blindTiltStatus

    blindTiltStatus: deviceStatus & {
        battery: number;
        calibrate: boolean;
        direction: string;
        lightLevel?: "bright" | "dim";
        slidePosition: string;
    }
    diff --git a/docs/types/blindTiltWebhookContext.html b/docs/types/blindTiltWebhookContext.html index 704d8099..9e02197e 100644 --- a/docs/types/blindTiltWebhookContext.html +++ b/docs/types/blindTiltWebhookContext.html @@ -1 +1 @@ -blindTiltWebhookContext | node-switchbot

    Type Alias blindTiltWebhookContext

    blindTiltWebhookContext: deviceWebhookContext & {
        battery: number;
        calibrate: boolean;
        direction: string;
        group: boolean;
        slidePosition: number;
        version: string;
    }
    +blindTiltWebhookContext | node-switchbot

    Type Alias blindTiltWebhookContext

    blindTiltWebhookContext: deviceWebhookContext & {
        battery: number;
        calibrate: boolean;
        direction: string;
        group: boolean;
        slidePosition: number;
        version: string;
    }
    diff --git a/docs/types/bot.html b/docs/types/bot.html index 975ca42a..b6e1402b 100644 --- a/docs/types/bot.html +++ b/docs/types/bot.html @@ -1 +1 @@ -bot | node-switchbot

    Type Alias bot

    bot: device & {}
    +bot | node-switchbot

    Type Alias bot

    bot: device & {}
    diff --git a/docs/types/botServiceData.html b/docs/types/botServiceData.html index 6a2acd5a..3c7753ce 100644 --- a/docs/types/botServiceData.html +++ b/docs/types/botServiceData.html @@ -1 +1 @@ -botServiceData | node-switchbot

    Type Alias botServiceData

    botServiceData: serviceData & {
        battery: number;
        mode: boolean;
        model: Bot;
        modelFriendlyName: Bot;
        modelName: Bot;
        state: boolean;
    }
    +botServiceData | node-switchbot

    Type Alias botServiceData

    botServiceData: serviceData & {
        battery: number;
        mode: boolean;
        model: Bot;
        modelFriendlyName: Bot;
        modelName: Bot;
        state: boolean;
    }
    diff --git a/docs/types/botStatus.html b/docs/types/botStatus.html index 3d2249a0..529dc626 100644 --- a/docs/types/botStatus.html +++ b/docs/types/botStatus.html @@ -1 +1 @@ -botStatus | node-switchbot

    Type Alias botStatus

    botStatus: deviceStatus & {
        battery: number;
        mode: "pressMode" | "switchMode" | "customizeMode";
        power: string;
    }
    +botStatus | node-switchbot

    Type Alias botStatus

    botStatus: deviceStatus & {
        battery: number;
        mode: "pressMode" | "switchMode" | "customizeMode";
        power: string;
    }
    diff --git a/docs/types/botWebhookContext.html b/docs/types/botWebhookContext.html index 80c7fae7..2f269f6f 100644 --- a/docs/types/botWebhookContext.html +++ b/docs/types/botWebhookContext.html @@ -1 +1 @@ -botWebhookContext | node-switchbot

    Type Alias botWebhookContext

    botWebhookContext: deviceWebhookContext & {
        battery: number;
        deviceMode: "pressMode" | "switchMode" | "customizeMode";
        power: string;
    }
    +botWebhookContext | node-switchbot

    Type Alias botWebhookContext

    botWebhookContext: deviceWebhookContext & {
        battery: number;
        deviceMode: "pressMode" | "switchMode" | "customizeMode";
        power: string;
    }
    diff --git a/docs/types/ceilingLight.html b/docs/types/ceilingLight.html index ba5168fa..4589ba23 100644 --- a/docs/types/ceilingLight.html +++ b/docs/types/ceilingLight.html @@ -1 +1 @@ -ceilingLight | node-switchbot

    Type Alias ceilingLight

    ceilingLight: device & {}
    +ceilingLight | node-switchbot

    Type Alias ceilingLight

    ceilingLight: device & {}
    diff --git a/docs/types/ceilingLightPro.html b/docs/types/ceilingLightPro.html index 5acc7f61..6a3dae67 100644 --- a/docs/types/ceilingLightPro.html +++ b/docs/types/ceilingLightPro.html @@ -1 +1 @@ -ceilingLightPro | node-switchbot

    Type Alias ceilingLightPro

    ceilingLightPro: device & {}
    +ceilingLightPro | node-switchbot

    Type Alias ceilingLightPro

    ceilingLightPro: device & {}
    diff --git a/docs/types/ceilingLightProServiceData.html b/docs/types/ceilingLightProServiceData.html index 732afea2..9e0752bc 100644 --- a/docs/types/ceilingLightProServiceData.html +++ b/docs/types/ceilingLightProServiceData.html @@ -1 +1 @@ -ceilingLightProServiceData | node-switchbot

    Type Alias ceilingLightProServiceData

    ceilingLightProServiceData: serviceData & {
        blue: number;
        brightness: number;
        color_mode: number;
        color_temperature: number;
        delay: number;
        green: number;
        loop_index: number;
        model: CeilingLightPro;
        modelFriendlyName: CeilingLightPro;
        modelName: CeilingLightPro;
        power: boolean;
        preset: number;
        red: number;
        speed: number;
        state: boolean;
    }
    +ceilingLightProServiceData | node-switchbot

    Type Alias ceilingLightProServiceData

    ceilingLightProServiceData: serviceData & {
        blue: number;
        brightness: number;
        color_mode: number;
        color_temperature: number;
        delay: number;
        green: number;
        loop_index: number;
        model: CeilingLightPro;
        modelFriendlyName: CeilingLightPro;
        modelName: CeilingLightPro;
        power: boolean;
        preset: number;
        red: number;
        speed: number;
        state: boolean;
    }
    diff --git a/docs/types/ceilingLightProStatus.html b/docs/types/ceilingLightProStatus.html index 4e3fac32..17a334c7 100644 --- a/docs/types/ceilingLightProStatus.html +++ b/docs/types/ceilingLightProStatus.html @@ -1 +1 @@ -ceilingLightProStatus | node-switchbot

    Type Alias ceilingLightProStatus

    ceilingLightProStatus: deviceStatus & {
        brightness: number;
        colorTemperature: number;
        power: boolean;
    }
    +ceilingLightProStatus | node-switchbot

    Type Alias ceilingLightProStatus

    ceilingLightProStatus: deviceStatus & {
        brightness: number;
        colorTemperature: number;
        power: boolean;
    }
    diff --git a/docs/types/ceilingLightProWebhookContext.html b/docs/types/ceilingLightProWebhookContext.html index 4533e982..b0998a57 100644 --- a/docs/types/ceilingLightProWebhookContext.html +++ b/docs/types/ceilingLightProWebhookContext.html @@ -1 +1 @@ -ceilingLightProWebhookContext | node-switchbot

    Type Alias ceilingLightProWebhookContext

    ceilingLightProWebhookContext: deviceWebhookContext & {
        brightness: number;
        colorTemperature: number;
        powerState: "ON" | "OFF";
    }
    +ceilingLightProWebhookContext | node-switchbot

    Type Alias ceilingLightProWebhookContext

    ceilingLightProWebhookContext: deviceWebhookContext & {
        brightness: number;
        colorTemperature: number;
        powerState: "ON" | "OFF";
    }
    diff --git a/docs/types/ceilingLightServiceData.html b/docs/types/ceilingLightServiceData.html index 21a778e2..00ea037f 100644 --- a/docs/types/ceilingLightServiceData.html +++ b/docs/types/ceilingLightServiceData.html @@ -1 +1 @@ -ceilingLightServiceData | node-switchbot

    Type Alias ceilingLightServiceData

    ceilingLightServiceData: serviceData & {
        blue: number;
        brightness: number;
        color_mode: number;
        color_temperature: number;
        delay: number;
        green: number;
        loop_index: number;
        model: CeilingLight;
        modelFriendlyName: CeilingLight;
        modelName: CeilingLight;
        power: boolean;
        preset: number;
        red: number;
        speed: number;
        state: boolean;
    }
    +ceilingLightServiceData | node-switchbot

    Type Alias ceilingLightServiceData

    ceilingLightServiceData: serviceData & {
        blue: number;
        brightness: number;
        color_mode: number;
        color_temperature: number;
        delay: number;
        green: number;
        loop_index: number;
        model: CeilingLight;
        modelFriendlyName: CeilingLight;
        modelName: CeilingLight;
        power: boolean;
        preset: number;
        red: number;
        speed: number;
        state: boolean;
    }
    diff --git a/docs/types/ceilingLightStatus.html b/docs/types/ceilingLightStatus.html index 7234cd09..933dfa15 100644 --- a/docs/types/ceilingLightStatus.html +++ b/docs/types/ceilingLightStatus.html @@ -1 +1 @@ -ceilingLightStatus | node-switchbot

    Type Alias ceilingLightStatus

    ceilingLightStatus: deviceStatus & {
        brightness: number;
        colorTemperature: number;
        power: boolean;
    }
    +ceilingLightStatus | node-switchbot

    Type Alias ceilingLightStatus

    ceilingLightStatus: deviceStatus & {
        brightness: number;
        colorTemperature: number;
        power: boolean;
    }
    diff --git a/docs/types/ceilingLightWebhookContext.html b/docs/types/ceilingLightWebhookContext.html index 57a5a080..65fd0368 100644 --- a/docs/types/ceilingLightWebhookContext.html +++ b/docs/types/ceilingLightWebhookContext.html @@ -1 +1 @@ -ceilingLightWebhookContext | node-switchbot

    Type Alias ceilingLightWebhookContext

    ceilingLightWebhookContext: deviceWebhookContext & {
        brightness: number;
        colorTemperature: number;
        powerState: "ON" | "OFF";
    }
    +ceilingLightWebhookContext | node-switchbot

    Type Alias ceilingLightWebhookContext

    ceilingLightWebhookContext: deviceWebhookContext & {
        brightness: number;
        colorTemperature: number;
        powerState: "ON" | "OFF";
    }
    diff --git a/docs/types/colorBulb.html b/docs/types/colorBulb.html index 7e080df9..a693a809 100644 --- a/docs/types/colorBulb.html +++ b/docs/types/colorBulb.html @@ -1 +1 @@ -colorBulb | node-switchbot

    Type Alias colorBulb

    colorBulb: device & {}
    +colorBulb | node-switchbot

    Type Alias colorBulb

    colorBulb: device & {}
    diff --git a/docs/types/colorBulbServiceData.html b/docs/types/colorBulbServiceData.html index 78d3cd6b..4b4d3555 100644 --- a/docs/types/colorBulbServiceData.html +++ b/docs/types/colorBulbServiceData.html @@ -1 +1 @@ -colorBulbServiceData | node-switchbot

    Type Alias colorBulbServiceData

    colorBulbServiceData: serviceData & {
        blue: number;
        brightness: number;
        color_mode: number;
        color_temperature: number;
        delay: number;
        green: number;
        loop_index: number;
        model: ColorBulb;
        modelFriendlyName: ColorBulb;
        modelName: ColorBulb;
        power: boolean;
        preset: number;
        red: number;
        speed: number;
        state: boolean;
    }
    +colorBulbServiceData | node-switchbot

    Type Alias colorBulbServiceData

    colorBulbServiceData: serviceData & {
        blue: number;
        brightness: number;
        color_mode: number;
        color_temperature: number;
        delay: number;
        green: number;
        loop_index: number;
        model: ColorBulb;
        modelFriendlyName: ColorBulb;
        modelName: ColorBulb;
        power: boolean;
        preset: number;
        red: number;
        speed: number;
        state: boolean;
    }
    diff --git a/docs/types/colorBulbStatus.html b/docs/types/colorBulbStatus.html index 2a0e66be..091a4d73 100644 --- a/docs/types/colorBulbStatus.html +++ b/docs/types/colorBulbStatus.html @@ -1 +1 @@ -colorBulbStatus | node-switchbot

    Type Alias colorBulbStatus

    colorBulbStatus: deviceStatus & {
        brightness: number;
        color: string;
        colorTemperature: number;
        power: string;
    }
    +colorBulbStatus | node-switchbot

    Type Alias colorBulbStatus

    colorBulbStatus: deviceStatus & {
        brightness: number;
        color: string;
        colorTemperature: number;
        power: string;
    }
    diff --git a/docs/types/colorBulbWebhookContext.html b/docs/types/colorBulbWebhookContext.html index 32fa33e9..ed968f96 100644 --- a/docs/types/colorBulbWebhookContext.html +++ b/docs/types/colorBulbWebhookContext.html @@ -1 +1 @@ -colorBulbWebhookContext | node-switchbot

    Type Alias colorBulbWebhookContext

    colorBulbWebhookContext: deviceWebhookContext & {
        brightness: number;
        color: string;
        colorTemperature: number;
        powerState: "ON" | "OFF";
    }
    +colorBulbWebhookContext | node-switchbot

    Type Alias colorBulbWebhookContext

    colorBulbWebhookContext: deviceWebhookContext & {
        brightness: number;
        color: string;
        colorTemperature: number;
        powerState: "ON" | "OFF";
    }
    diff --git a/docs/types/contactSensor.html b/docs/types/contactSensor.html index 3f363e3d..1a3820a2 100644 --- a/docs/types/contactSensor.html +++ b/docs/types/contactSensor.html @@ -1 +1 @@ -contactSensor | node-switchbot

    Type Alias contactSensor

    contactSensor: device & {}
    +contactSensor | node-switchbot

    Type Alias contactSensor

    contactSensor: device & {}
    diff --git a/docs/types/contactSensorServiceData.html b/docs/types/contactSensorServiceData.html index d0825a5d..af7ed0dc 100644 --- a/docs/types/contactSensorServiceData.html +++ b/docs/types/contactSensorServiceData.html @@ -1 +1 @@ -contactSensorServiceData | node-switchbot

    Type Alias contactSensorServiceData

    contactSensorServiceData: serviceData & {
        battery: number;
        button_count: number;
        contact_open: boolean;
        contact_timeout: boolean;
        doorState: string;
        lightLevel: string;
        model: ContactSensor;
        modelFriendlyName: ContactSensor;
        modelName: ContactSensor;
        movement: boolean;
        tested: boolean;
    }
    +contactSensorServiceData | node-switchbot

    Type Alias contactSensorServiceData

    contactSensorServiceData: serviceData & {
        battery: number;
        button_count: number;
        contact_open: boolean;
        contact_timeout: boolean;
        doorState: string;
        lightLevel: string;
        model: ContactSensor;
        modelFriendlyName: ContactSensor;
        modelName: ContactSensor;
        movement: boolean;
        tested: boolean;
    }
    diff --git a/docs/types/contactSensorStatus.html b/docs/types/contactSensorStatus.html index de56f483..1a144ef8 100644 --- a/docs/types/contactSensorStatus.html +++ b/docs/types/contactSensorStatus.html @@ -1 +1 @@ -contactSensorStatus | node-switchbot

    Type Alias contactSensorStatus

    contactSensorStatus: deviceStatus & {
        battery: number;
        brightness: "bright" | "dim";
        moveDetected: boolean;
        openState: "open" | "close" | "timeOutNotClose";
    }
    +contactSensorStatus | node-switchbot

    Type Alias contactSensorStatus

    contactSensorStatus: deviceStatus & {
        battery: number;
        brightness: "bright" | "dim";
        moveDetected: boolean;
        openState: "open" | "close" | "timeOutNotClose";
    }
    diff --git a/docs/types/contactSensorWebhookContext.html b/docs/types/contactSensorWebhookContext.html index 53afe7e0..cb2d8952 100644 --- a/docs/types/contactSensorWebhookContext.html +++ b/docs/types/contactSensorWebhookContext.html @@ -1 +1 @@ -contactSensorWebhookContext | node-switchbot

    Type Alias contactSensorWebhookContext

    contactSensorWebhookContext: deviceWebhookContext & {
        brightness: "dim" | "bright";
        detectionState: "NOT_DETECTED" | "DETECTED";
        doorMode: "IN_DOOR" | "OUT_DOOR";
        openState: "open" | "close" | "timeOutNotClose";
    }
    +contactSensorWebhookContext | node-switchbot

    Type Alias contactSensorWebhookContext

    contactSensorWebhookContext: deviceWebhookContext & {
        brightness: "dim" | "bright";
        detectionState: "NOT_DETECTED" | "DETECTED";
        doorMode: "IN_DOOR" | "OUT_DOOR";
        openState: "open" | "close" | "timeOutNotClose";
    }
    diff --git a/docs/types/curtain.html b/docs/types/curtain.html index 109f4a41..d410a768 100644 --- a/docs/types/curtain.html +++ b/docs/types/curtain.html @@ -1 +1 @@ -curtain | node-switchbot

    Type Alias curtain

    curtain: device & {
        calibrate: boolean;
        curtainDevicesIds: string[];
        group: boolean;
        master: boolean;
        openDirection: string;
    }
    +curtain | node-switchbot

    Type Alias curtain

    curtain: device & {
        calibrate: boolean;
        curtainDevicesIds: string[];
        group: boolean;
        master: boolean;
        openDirection: string;
    }
    diff --git a/docs/types/curtain3.html b/docs/types/curtain3.html index bf879317..d91d6c04 100644 --- a/docs/types/curtain3.html +++ b/docs/types/curtain3.html @@ -1 +1 @@ -curtain3 | node-switchbot

    Type Alias curtain3

    curtain3: device & {
        calibrate: boolean;
        curtainDevicesIds: string[];
        group: boolean;
        master: boolean;
        openDirection?: string;
    }
    +curtain3 | node-switchbot

    Type Alias curtain3

    curtain3: device & {
        calibrate: boolean;
        curtainDevicesIds: string[];
        group: boolean;
        master: boolean;
        openDirection?: string;
    }
    diff --git a/docs/types/curtain3ServiceData.html b/docs/types/curtain3ServiceData.html index 1e9597e6..a2e481b2 100644 --- a/docs/types/curtain3ServiceData.html +++ b/docs/types/curtain3ServiceData.html @@ -1 +1 @@ -curtain3ServiceData | node-switchbot

    Type Alias curtain3ServiceData

    curtain3ServiceData: serviceData & {
        battery: number;
        calibration: boolean;
        deviceChain: number;
        inMotion: boolean;
        lightLevel: number;
        model: Curtain3;
        modelFriendlyName: Curtain3;
        modelName: Curtain3;
        position: number;
    }
    +curtain3ServiceData | node-switchbot

    Type Alias curtain3ServiceData

    curtain3ServiceData: serviceData & {
        battery: number;
        calibration: boolean;
        deviceChain: number;
        inMotion: boolean;
        lightLevel: number;
        model: Curtain3;
        modelFriendlyName: Curtain3;
        modelName: Curtain3;
        position: number;
    }
    diff --git a/docs/types/curtain3WebhookContext.html b/docs/types/curtain3WebhookContext.html index 6a2afb82..b2a188df 100644 --- a/docs/types/curtain3WebhookContext.html +++ b/docs/types/curtain3WebhookContext.html @@ -1 +1 @@ -curtain3WebhookContext | node-switchbot

    Type Alias curtain3WebhookContext

    curtain3WebhookContext: deviceWebhookContext & {
        battery: number;
        calibrate: boolean;
        group: boolean;
        slidePosition: number;
    }
    +curtain3WebhookContext | node-switchbot

    Type Alias curtain3WebhookContext

    curtain3WebhookContext: deviceWebhookContext & {
        battery: number;
        calibrate: boolean;
        group: boolean;
        slidePosition: number;
    }
    diff --git a/docs/types/curtainServiceData.html b/docs/types/curtainServiceData.html index 1cc45a87..7722a305 100644 --- a/docs/types/curtainServiceData.html +++ b/docs/types/curtainServiceData.html @@ -1 +1 @@ -curtainServiceData | node-switchbot

    Type Alias curtainServiceData

    curtainServiceData: serviceData & {
        battery: number;
        calibration: boolean;
        deviceChain: number;
        inMotion: boolean;
        lightLevel: number;
        model: Curtain;
        modelFriendlyName: Curtain;
        modelName: Curtain;
        position: number;
    }
    +curtainServiceData | node-switchbot

    Type Alias curtainServiceData

    curtainServiceData: serviceData & {
        battery: number;
        calibration: boolean;
        deviceChain: number;
        inMotion: boolean;
        lightLevel: number;
        model: Curtain;
        modelFriendlyName: Curtain;
        modelName: Curtain;
        position: number;
    }
    diff --git a/docs/types/curtainStatus.html b/docs/types/curtainStatus.html index dbff57e9..73d465de 100644 --- a/docs/types/curtainStatus.html +++ b/docs/types/curtainStatus.html @@ -1 +1 @@ -curtainStatus | node-switchbot

    Type Alias curtainStatus

    curtainStatus: deviceStatus & {
        battery: number;
        calibrate: boolean;
        group: boolean;
        lightLevel?: "bright" | "dim";
        moving: boolean;
        slidePosition: number;
    }
    +curtainStatus | node-switchbot

    Type Alias curtainStatus

    curtainStatus: deviceStatus & {
        battery: number;
        calibrate: boolean;
        group: boolean;
        lightLevel?: "bright" | "dim";
        moving: boolean;
        slidePosition: number;
    }
    diff --git a/docs/types/curtainWebhookContext.html b/docs/types/curtainWebhookContext.html index 7ac46559..577f4331 100644 --- a/docs/types/curtainWebhookContext.html +++ b/docs/types/curtainWebhookContext.html @@ -1 +1 @@ -curtainWebhookContext | node-switchbot

    Type Alias curtainWebhookContext

    curtainWebhookContext: deviceWebhookContext & {
        battery: number;
        calibrate: boolean;
        group: boolean;
        slidePosition: number;
    }
    +curtainWebhookContext | node-switchbot

    Type Alias curtainWebhookContext

    curtainWebhookContext: deviceWebhookContext & {
        battery: number;
        calibrate: boolean;
        group: boolean;
        slidePosition: number;
    }
    diff --git a/docs/types/floorCleaningRobotS10.html b/docs/types/floorCleaningRobotS10.html index 00b5a870..90d2911e 100644 --- a/docs/types/floorCleaningRobotS10.html +++ b/docs/types/floorCleaningRobotS10.html @@ -1 +1 @@ -floorCleaningRobotS10 | node-switchbot

    Type Alias floorCleaningRobotS10

    floorCleaningRobotS10: device & {}
    +floorCleaningRobotS10 | node-switchbot

    Type Alias floorCleaningRobotS10

    floorCleaningRobotS10: device & {}
    diff --git a/docs/types/floorCleaningRobotS10Status.html b/docs/types/floorCleaningRobotS10Status.html index 51c7d31a..632f2493 100644 --- a/docs/types/floorCleaningRobotS10Status.html +++ b/docs/types/floorCleaningRobotS10Status.html @@ -1 +1 @@ -floorCleaningRobotS10Status | node-switchbot

    Type Alias floorCleaningRobotS10Status

    floorCleaningRobotS10Status: deviceStatus & {
        battery: number;
        onlineStatus: string;
        taskType: string;
        waterBaseBattery: number;
        workingStatus: string;
    }
    +floorCleaningRobotS10Status | node-switchbot

    Type Alias floorCleaningRobotS10Status

    floorCleaningRobotS10Status: deviceStatus & {
        battery: number;
        onlineStatus: string;
        taskType: string;
        waterBaseBattery: number;
        workingStatus: string;
    }
    diff --git a/docs/types/floorCleaningRobotS10WebhookContext.html b/docs/types/floorCleaningRobotS10WebhookContext.html index 6e5c0270..01491ce0 100644 --- a/docs/types/floorCleaningRobotS10WebhookContext.html +++ b/docs/types/floorCleaningRobotS10WebhookContext.html @@ -1 +1 @@ -floorCleaningRobotS10WebhookContext | node-switchbot

    Type Alias floorCleaningRobotS10WebhookContext

    floorCleaningRobotS10WebhookContext: deviceWebhookContext & {
        battery: number;
        onlineStatus: "online" | "offline";
        taskType:
            | "standBy"
            | "explore"
            | "cleanAll"
            | "cleanArea"
            | "cleanRoom"
            | "fillWater"
            | "deepWashing"
            | "backToCharge"
            | "markingWaterBase"
            | "drying"
            | "collectDust"
            | "remoteControl"
            | "cleanWithExplorer"
            | "fillWaterForHumi"
            | "markingHumi";
        waterBaseBattery: number;
        workingStatus:
            | "Standby"
            | "Clearing"
            | "Paused"
            | "GotoChargeBase"
            | "Charging"
            | "ChargeDone"
            | "Dormant"
            | "InTrouble"
            | "InRemoteControl"
            | "InDustCollecting";
    }
    +floorCleaningRobotS10WebhookContext | node-switchbot

    Type Alias floorCleaningRobotS10WebhookContext

    floorCleaningRobotS10WebhookContext: deviceWebhookContext & {
        battery: number;
        onlineStatus: "online" | "offline";
        taskType:
            | "standBy"
            | "explore"
            | "cleanAll"
            | "cleanArea"
            | "cleanRoom"
            | "fillWater"
            | "deepWashing"
            | "backToCharge"
            | "markingWaterBase"
            | "drying"
            | "collectDust"
            | "remoteControl"
            | "cleanWithExplorer"
            | "fillWaterForHumi"
            | "markingHumi";
        waterBaseBattery: number;
        workingStatus:
            | "Standby"
            | "Clearing"
            | "Paused"
            | "GotoChargeBase"
            | "Charging"
            | "ChargeDone"
            | "Dormant"
            | "InTrouble"
            | "InRemoteControl"
            | "InDustCollecting";
    }
    diff --git a/docs/types/hub2.html b/docs/types/hub2.html index dc07b53b..1ccafd90 100644 --- a/docs/types/hub2.html +++ b/docs/types/hub2.html @@ -1 +1 @@ -hub2 | node-switchbot

    Type Alias hub2

    hub2: device & {}
    +hub2 | node-switchbot

    Type Alias hub2

    hub2: device & {}
    diff --git a/docs/types/hub2ServiceData.html b/docs/types/hub2ServiceData.html index 6e8ad8ad..f1d91285 100644 --- a/docs/types/hub2ServiceData.html +++ b/docs/types/hub2ServiceData.html @@ -1 +1 @@ -hub2ServiceData | node-switchbot

    Type Alias hub2ServiceData

    hub2ServiceData: serviceData & {
        celsius: number;
        fahrenheit: number;
        fahrenheit_mode: boolean;
        humidity: number;
        lightLevel: number;
        model: Hub2;
        modelFriendlyName: Hub2;
        modelName: Hub2;
    }
    +hub2ServiceData | node-switchbot

    Type Alias hub2ServiceData

    hub2ServiceData: serviceData & {
        celsius: number;
        fahrenheit: number;
        fahrenheit_mode: boolean;
        humidity: number;
        lightLevel: number;
        model: Hub2;
        modelFriendlyName: Hub2;
        modelName: Hub2;
    }
    diff --git a/docs/types/hub2Status.html b/docs/types/hub2Status.html index dbbba7be..e31f5c0f 100644 --- a/docs/types/hub2Status.html +++ b/docs/types/hub2Status.html @@ -1 +1 @@ -hub2Status | node-switchbot

    Type Alias hub2Status

    hub2Status: deviceStatus & {
        humidity: number;
        lightLevel: number;
        temperature: number;
    }
    +hub2Status | node-switchbot

    Type Alias hub2Status

    hub2Status: deviceStatus & {
        humidity: number;
        lightLevel: number;
        temperature: number;
    }
    diff --git a/docs/types/hub2WebhookContext.html b/docs/types/hub2WebhookContext.html index d6a47ec0..b9d995eb 100644 --- a/docs/types/hub2WebhookContext.html +++ b/docs/types/hub2WebhookContext.html @@ -1 +1 @@ -hub2WebhookContext | node-switchbot

    Type Alias hub2WebhookContext

    hub2WebhookContext: deviceWebhookContext & {
        humidity: number;
        lightLevel: number;
        scale: "CELSIUS" | "FAHRENHEIT";
        temperature: number;
    }
    +hub2WebhookContext | node-switchbot

    Type Alias hub2WebhookContext

    hub2WebhookContext: deviceWebhookContext & {
        humidity: number;
        lightLevel: number;
        scale: "CELSIUS" | "FAHRENHEIT";
        temperature: number;
    }
    diff --git a/docs/types/humidifier.html b/docs/types/humidifier.html index 16d80f38..af889b35 100644 --- a/docs/types/humidifier.html +++ b/docs/types/humidifier.html @@ -1 +1 @@ -humidifier | node-switchbot

    Type Alias humidifier

    humidifier: device & {}
    +humidifier | node-switchbot

    Type Alias humidifier

    humidifier: device & {}
    diff --git a/docs/types/humidifierServiceData.html b/docs/types/humidifierServiceData.html index afff4a83..33405c49 100644 --- a/docs/types/humidifierServiceData.html +++ b/docs/types/humidifierServiceData.html @@ -1 +1 @@ -humidifierServiceData | node-switchbot

    Type Alias humidifierServiceData

    humidifierServiceData: serviceData & {
        autoMode: boolean;
        humidity: number;
        model: Humidifier;
        modelFriendlyName: Humidifier;
        modelName: Humidifier;
        onState: boolean;
        percentage: number;
    }
    +humidifierServiceData | node-switchbot

    Type Alias humidifierServiceData

    humidifierServiceData: serviceData & {
        autoMode: boolean;
        humidity: number;
        model: Humidifier;
        modelFriendlyName: Humidifier;
        modelName: Humidifier;
        onState: boolean;
        percentage: number;
    }
    diff --git a/docs/types/humidifierStatus.html b/docs/types/humidifierStatus.html index 0b358e26..2f94743e 100644 --- a/docs/types/humidifierStatus.html +++ b/docs/types/humidifierStatus.html @@ -1 +1 @@ -humidifierStatus | node-switchbot

    Type Alias humidifierStatus

    humidifierStatus: deviceStatus & {
        auto: boolean;
        childLock: boolean;
        humidity: number;
        lackWater: boolean;
        nebulizationEfficiency: number;
        power: string;
        sound: boolean;
        temperature: number;
    }
    +humidifierStatus | node-switchbot

    Type Alias humidifierStatus

    humidifierStatus: deviceStatus & {
        auto: boolean;
        childLock: boolean;
        humidity: number;
        lackWater: boolean;
        nebulizationEfficiency: number;
        power: string;
        sound: boolean;
        temperature: number;
    }
    diff --git a/docs/types/humidifierWebhookContext.html b/docs/types/humidifierWebhookContext.html index 3c4487b9..dd6b24d0 100644 --- a/docs/types/humidifierWebhookContext.html +++ b/docs/types/humidifierWebhookContext.html @@ -1 +1 @@ -humidifierWebhookContext | node-switchbot

    Type Alias humidifierWebhookContext

    humidifierWebhookContext: deviceWebhookContext & {
        humidity: number;
        scale: "CELSIUS" | "FAHRENHEIT";
        temperature: number;
    }
    +humidifierWebhookContext | node-switchbot

    Type Alias humidifierWebhookContext

    humidifierWebhookContext: deviceWebhookContext & {
        humidity: number;
        scale: "CELSIUS" | "FAHRENHEIT";
        temperature: number;
    }
    diff --git a/docs/types/indoorCam.html b/docs/types/indoorCam.html index 58f08200..0b8ac17c 100644 --- a/docs/types/indoorCam.html +++ b/docs/types/indoorCam.html @@ -1 +1 @@ -indoorCam | node-switchbot

    Type Alias indoorCam

    indoorCam: device & {}
    +indoorCam | node-switchbot

    Type Alias indoorCam

    indoorCam: device & {}
    diff --git a/docs/types/indoorCameraWebhookContext.html b/docs/types/indoorCameraWebhookContext.html index e0af3ba0..edda18f9 100644 --- a/docs/types/indoorCameraWebhookContext.html +++ b/docs/types/indoorCameraWebhookContext.html @@ -1 +1 @@ -indoorCameraWebhookContext | node-switchbot

    Type Alias indoorCameraWebhookContext

    indoorCameraWebhookContext: deviceWebhookContext & {
        detectionState: "DETECTED";
    }
    +indoorCameraWebhookContext | node-switchbot

    Type Alias indoorCameraWebhookContext

    indoorCameraWebhookContext: deviceWebhookContext & {
        detectionState: "DETECTED";
    }
    diff --git a/docs/types/keypad.html b/docs/types/keypad.html index aa13a902..1f99aa28 100644 --- a/docs/types/keypad.html +++ b/docs/types/keypad.html @@ -1 +1 @@ -keypad | node-switchbot

    Type Alias keypad

    keypad: device & {
        keyList: keyList;
        lockDeviceId: string;
        remoteType: string;
    }
    +keypad | node-switchbot

    Type Alias keypad

    keypad: device & {
        keyList: keyList;
        lockDeviceId: string;
        remoteType: string;
    }
    diff --git a/docs/types/keypadDetectorServiceData.html b/docs/types/keypadDetectorServiceData.html index 2865bf34..13baaba9 100644 --- a/docs/types/keypadDetectorServiceData.html +++ b/docs/types/keypadDetectorServiceData.html @@ -1 +1 @@ -keypadDetectorServiceData | node-switchbot

    Type Alias keypadDetectorServiceData

    keypadDetectorServiceData: serviceData & {
        battery: number;
        event: boolean;
        low_battery: boolean;
        model: Keypad;
        modelFriendlyName: Keypad;
        modelName: Keypad;
        tampered: boolean;
    }
    +keypadDetectorServiceData | node-switchbot

    Type Alias keypadDetectorServiceData

    keypadDetectorServiceData: serviceData & {
        battery: number;
        event: boolean;
        low_battery: boolean;
        model: Keypad;
        modelFriendlyName: Keypad;
        modelName: Keypad;
        tampered: boolean;
    }
    diff --git a/docs/types/keypadTouch.html b/docs/types/keypadTouch.html index 1d1af7f9..3e123d84 100644 --- a/docs/types/keypadTouch.html +++ b/docs/types/keypadTouch.html @@ -1 +1 @@ -keypadTouch | node-switchbot

    Type Alias keypadTouch

    keypadTouch: device & {
        keyList: keyList;
        lockDeviceId: string;
        remoteType: string;
    }
    +keypadTouch | node-switchbot

    Type Alias keypadTouch

    keypadTouch: device & {
        keyList: keyList;
        lockDeviceId: string;
        remoteType: string;
    }
    diff --git a/docs/types/keypadTouchWebhookContext.html b/docs/types/keypadTouchWebhookContext.html index 71e344d9..b87d978c 100644 --- a/docs/types/keypadTouchWebhookContext.html +++ b/docs/types/keypadTouchWebhookContext.html @@ -1 +1 @@ -keypadTouchWebhookContext | node-switchbot

    Type Alias keypadTouchWebhookContext

    keypadTouchWebhookContext: deviceWebhookContext & {
        commandId: string;
        eventName: "createKey" | "deleteKey";
        result: "success" | "failed" | "timeout";
    }
    +keypadTouchWebhookContext | node-switchbot

    Type Alias keypadTouchWebhookContext

    keypadTouchWebhookContext: deviceWebhookContext & {
        commandId: string;
        eventName: "createKey" | "deleteKey";
        result: "success" | "failed" | "timeout";
    }
    diff --git a/docs/types/keypadWebhookContext.html b/docs/types/keypadWebhookContext.html index 2571c1a4..7401673d 100644 --- a/docs/types/keypadWebhookContext.html +++ b/docs/types/keypadWebhookContext.html @@ -1 +1 @@ -keypadWebhookContext | node-switchbot

    Type Alias keypadWebhookContext

    keypadWebhookContext: deviceWebhookContext & {
        commandId: string;
        eventName: "createKey" | "deleteKey";
        result: "success" | "failed" | "timeout";
    }
    +keypadWebhookContext | node-switchbot

    Type Alias keypadWebhookContext

    keypadWebhookContext: deviceWebhookContext & {
        commandId: string;
        eventName: "createKey" | "deleteKey";
        result: "success" | "failed" | "timeout";
    }
    diff --git a/docs/types/lock.html b/docs/types/lock.html index 38e055d5..635b8906 100644 --- a/docs/types/lock.html +++ b/docs/types/lock.html @@ -1 +1 @@ -lock | node-switchbot

    Type Alias lock

    lock: device & {
        group: boolean;
        groupName: string;
        lockDevicesIds: string[];
        master: boolean;
    }
    +lock | node-switchbot

    Type Alias lock

    lock: device & {
        group: boolean;
        groupName: string;
        lockDevicesIds: string[];
        master: boolean;
    }
    diff --git a/docs/types/lockPro.html b/docs/types/lockPro.html index b0d956f3..64a29b96 100644 --- a/docs/types/lockPro.html +++ b/docs/types/lockPro.html @@ -1 +1 @@ -lockPro | node-switchbot

    Type Alias lockPro

    lockPro: device & {
        group: boolean;
        groupName: string;
        lockDevicesIds: string[];
        master: boolean;
    }
    +lockPro | node-switchbot

    Type Alias lockPro

    lockPro: device & {
        group: boolean;
        groupName: string;
        lockDevicesIds: string[];
        master: boolean;
    }
    diff --git a/docs/types/lockProServiceData.html b/docs/types/lockProServiceData.html index 1582ae81..0de8e980 100644 --- a/docs/types/lockProServiceData.html +++ b/docs/types/lockProServiceData.html @@ -1 +1 @@ -lockProServiceData | node-switchbot

    Type Alias lockProServiceData

    lockProServiceData: serviceData & {
        auto_lock_paused: boolean;
        battery: number;
        calibration: boolean;
        door_open: boolean;
        double_lock_mode: boolean;
        model: LockPro;
        modelFriendlyName: LockPro;
        modelName: LockPro;
        night_latch: boolean;
        status: string;
        unclosed_alarm: boolean;
        unlocked_alarm: boolean;
        update_from_secondary_lock: boolean;
    }
    +lockProServiceData | node-switchbot

    Type Alias lockProServiceData

    lockProServiceData: serviceData & {
        auto_lock_paused: boolean;
        battery: number;
        calibration: boolean;
        door_open: boolean;
        double_lock_mode: boolean;
        model: LockPro;
        modelFriendlyName: LockPro;
        modelName: LockPro;
        night_latch: boolean;
        status: string;
        unclosed_alarm: boolean;
        unlocked_alarm: boolean;
        update_from_secondary_lock: boolean;
    }
    diff --git a/docs/types/lockProStatus.html b/docs/types/lockProStatus.html index 0b9db928..11f2ef8f 100644 --- a/docs/types/lockProStatus.html +++ b/docs/types/lockProStatus.html @@ -1 +1 @@ -lockProStatus | node-switchbot

    Type Alias lockProStatus

    lockProStatus: deviceStatus & {
        battery: number;
        doorState: string;
        lockState: string;
        moveDetected: boolean;
    }
    +lockProStatus | node-switchbot

    Type Alias lockProStatus

    lockProStatus: deviceStatus & {
        battery: number;
        doorState: string;
        lockState: string;
        moveDetected: boolean;
    }
    diff --git a/docs/types/lockProWebhookContext.html b/docs/types/lockProWebhookContext.html index 126d2596..8a2c2c59 100644 --- a/docs/types/lockProWebhookContext.html +++ b/docs/types/lockProWebhookContext.html @@ -1 +1 @@ -lockProWebhookContext | node-switchbot

    Type Alias lockProWebhookContext

    lockProWebhookContext: deviceWebhookContext & {
        lockState: "UNLOCKED" | "LOCKED" | "JAMMED";
    }
    +lockProWebhookContext | node-switchbot

    Type Alias lockProWebhookContext

    lockProWebhookContext: deviceWebhookContext & {
        lockState: "UNLOCKED" | "LOCKED" | "JAMMED";
    }
    diff --git a/docs/types/lockServiceData.html b/docs/types/lockServiceData.html index 5f580190..07c80672 100644 --- a/docs/types/lockServiceData.html +++ b/docs/types/lockServiceData.html @@ -1 +1 @@ -lockServiceData | node-switchbot

    Type Alias lockServiceData

    lockServiceData: serviceData & {
        auto_lock_paused: boolean;
        battery: number;
        calibration: boolean;
        door_open: boolean;
        double_lock_mode: boolean;
        model: Lock;
        modelFriendlyName: Lock;
        modelName: Lock;
        night_latch: boolean;
        status: string;
        unclosed_alarm: boolean;
        unlocked_alarm: boolean;
        update_from_secondary_lock: boolean;
    }
    +lockServiceData | node-switchbot

    Type Alias lockServiceData

    lockServiceData: serviceData & {
        auto_lock_paused: boolean;
        battery: number;
        calibration: boolean;
        door_open: boolean;
        double_lock_mode: boolean;
        model: Lock;
        modelFriendlyName: Lock;
        modelName: Lock;
        night_latch: boolean;
        status: string;
        unclosed_alarm: boolean;
        unlocked_alarm: boolean;
        update_from_secondary_lock: boolean;
    }
    diff --git a/docs/types/lockStatus.html b/docs/types/lockStatus.html index 34503810..68c161d8 100644 --- a/docs/types/lockStatus.html +++ b/docs/types/lockStatus.html @@ -1 +1 @@ -lockStatus | node-switchbot

    Type Alias lockStatus

    lockStatus: deviceStatus & {
        battery: number;
        doorState: string;
        lockState: string;
        moveDetected: boolean;
    }
    +lockStatus | node-switchbot

    Type Alias lockStatus

    lockStatus: deviceStatus & {
        battery: number;
        doorState: string;
        lockState: string;
        moveDetected: boolean;
    }
    diff --git a/docs/types/lockWebhookContext.html b/docs/types/lockWebhookContext.html index 841a27cf..d2093695 100644 --- a/docs/types/lockWebhookContext.html +++ b/docs/types/lockWebhookContext.html @@ -1 +1 @@ -lockWebhookContext | node-switchbot

    Type Alias lockWebhookContext

    lockWebhookContext: deviceWebhookContext & {
        lockState: "UNLOCKED" | "LOCKED" | "JAMMED";
    }
    +lockWebhookContext | node-switchbot

    Type Alias lockWebhookContext

    lockWebhookContext: deviceWebhookContext & {
        lockState: "UNLOCKED" | "LOCKED" | "JAMMED";
    }
    diff --git a/docs/types/meter.html b/docs/types/meter.html index 49f29e05..ec7f10ba 100644 --- a/docs/types/meter.html +++ b/docs/types/meter.html @@ -1 +1 @@ -meter | node-switchbot

    Type Alias meter

    meter: device & {}
    +meter | node-switchbot

    Type Alias meter

    meter: device & {}
    diff --git a/docs/types/meterPlus.html b/docs/types/meterPlus.html index cb648e06..4cf0f567 100644 --- a/docs/types/meterPlus.html +++ b/docs/types/meterPlus.html @@ -1 +1 @@ -meterPlus | node-switchbot

    Type Alias meterPlus

    meterPlus: device & {}
    +meterPlus | node-switchbot

    Type Alias meterPlus

    meterPlus: device & {}
    diff --git a/docs/types/meterPlusServiceData.html b/docs/types/meterPlusServiceData.html index 5bbb0445..bb28ef51 100644 --- a/docs/types/meterPlusServiceData.html +++ b/docs/types/meterPlusServiceData.html @@ -1 +1 @@ -meterPlusServiceData | node-switchbot

    Type Alias meterPlusServiceData

    meterPlusServiceData: serviceData & {
        battery: number;
        celsius: number;
        fahrenheit: number;
        fahrenheit_mode: boolean;
        humidity: number;
        model: MeterPlus;
        modelFriendlyName: MeterPlus;
        modelName: MeterPlus;
    }
    +meterPlusServiceData | node-switchbot

    Type Alias meterPlusServiceData

    meterPlusServiceData: serviceData & {
        battery: number;
        celsius: number;
        fahrenheit: number;
        fahrenheit_mode: boolean;
        humidity: number;
        model: MeterPlus;
        modelFriendlyName: MeterPlus;
        modelName: MeterPlus;
    }
    diff --git a/docs/types/meterPlusStatus.html b/docs/types/meterPlusStatus.html index 169f87a2..e42d7b0d 100644 --- a/docs/types/meterPlusStatus.html +++ b/docs/types/meterPlusStatus.html @@ -1 +1 @@ -meterPlusStatus | node-switchbot

    Type Alias meterPlusStatus

    meterPlusStatus: deviceStatus & {
        battery: number;
        humidity: number;
        temperature: number;
    }
    +meterPlusStatus | node-switchbot

    Type Alias meterPlusStatus

    meterPlusStatus: deviceStatus & {
        battery: number;
        humidity: number;
        temperature: number;
    }
    diff --git a/docs/types/meterPlusWebhookContext.html b/docs/types/meterPlusWebhookContext.html index aa28777e..90713e84 100644 --- a/docs/types/meterPlusWebhookContext.html +++ b/docs/types/meterPlusWebhookContext.html @@ -1 +1 @@ -meterPlusWebhookContext | node-switchbot

    Type Alias meterPlusWebhookContext

    meterPlusWebhookContext: deviceWebhookContext & {
        humidity: number;
        scale: "CELSIUS" | "FAHRENHEIT";
        temperature: number;
    }
    +meterPlusWebhookContext | node-switchbot

    Type Alias meterPlusWebhookContext

    meterPlusWebhookContext: deviceWebhookContext & {
        humidity: number;
        scale: "CELSIUS" | "FAHRENHEIT";
        temperature: number;
    }
    diff --git a/docs/types/meterPro.html b/docs/types/meterPro.html index 1c7efdf1..9c37ccc5 100644 --- a/docs/types/meterPro.html +++ b/docs/types/meterPro.html @@ -1 +1 @@ -meterPro | node-switchbot

    Type Alias meterPro

    meterPro: device & {}
    +meterPro | node-switchbot

    Type Alias meterPro

    meterPro: device & {}
    diff --git a/docs/types/meterProCO2ServiceData.html b/docs/types/meterProCO2ServiceData.html index 3dfa4d49..437636ec 100644 --- a/docs/types/meterProCO2ServiceData.html +++ b/docs/types/meterProCO2ServiceData.html @@ -1 +1 @@ -meterProCO2ServiceData | node-switchbot

    Type Alias meterProCO2ServiceData

    meterProCO2ServiceData: serviceData & {
        battery: number;
        celsius: number;
        fahrenheit: number;
        fahrenheit_mode: boolean;
        humidity: number;
        model: MeterProCO2;
        modelFriendlyName: MeterProCO2;
        modelName: MeterProCO2;
    }
    +meterProCO2ServiceData | node-switchbot

    Type Alias meterProCO2ServiceData

    meterProCO2ServiceData: serviceData & {
        battery: number;
        celsius: number;
        co2: number;
        fahrenheit: number;
        fahrenheit_mode: boolean;
        humidity: number;
        model: MeterProCO2;
        modelFriendlyName: MeterProCO2;
        modelName: MeterProCO2;
    }
    diff --git a/docs/types/meterProCO2Status.html b/docs/types/meterProCO2Status.html new file mode 100644 index 00000000..3de4480d --- /dev/null +++ b/docs/types/meterProCO2Status.html @@ -0,0 +1 @@ +meterProCO2Status | node-switchbot

    Type Alias meterProCO2Status

    meterProCO2Status: deviceStatus & {
        battery: number;
        co2: number;
        humidity: number;
        temperature: number;
    }
    diff --git a/docs/types/meterProCO2WebhookContext.html b/docs/types/meterProCO2WebhookContext.html new file mode 100644 index 00000000..56eff2a3 --- /dev/null +++ b/docs/types/meterProCO2WebhookContext.html @@ -0,0 +1 @@ +meterProCO2WebhookContext | node-switchbot

    Type Alias meterProCO2WebhookContext

    meterProCO2WebhookContext: deviceWebhookContext & {
        co2: number;
        humidity: number;
        scale: "CELSIUS" | "FAHRENHEIT";
        temperature: number;
    }
    diff --git a/docs/types/meterProServiceData.html b/docs/types/meterProServiceData.html index 53a10097..38ffb8ab 100644 --- a/docs/types/meterProServiceData.html +++ b/docs/types/meterProServiceData.html @@ -1 +1 @@ -meterProServiceData | node-switchbot

    Type Alias meterProServiceData

    meterProServiceData: serviceData & {
        battery: number;
        celsius: number;
        fahrenheit: number;
        fahrenheit_mode: boolean;
        humidity: number;
        model: MeterPro;
        modelFriendlyName: MeterPro;
        modelName: MeterPro;
    }
    +meterProServiceData | node-switchbot

    Type Alias meterProServiceData

    meterProServiceData: serviceData & {
        battery: number;
        celsius: number;
        fahrenheit: number;
        fahrenheit_mode: boolean;
        humidity: number;
        model: MeterPro;
        modelFriendlyName: MeterPro;
        modelName: MeterPro;
    }
    diff --git a/docs/types/meterProStatus.html b/docs/types/meterProStatus.html index aa302e43..51058488 100644 --- a/docs/types/meterProStatus.html +++ b/docs/types/meterProStatus.html @@ -1 +1 @@ -meterProStatus | node-switchbot

    Type Alias meterProStatus

    meterProStatus: deviceStatus & {
        battery: number;
        humidity: number;
        temperature: number;
    }
    +meterProStatus | node-switchbot

    Type Alias meterProStatus

    meterProStatus: deviceStatus & {
        battery: number;
        humidity: number;
        temperature: number;
    }
    diff --git a/docs/types/meterProWebhookContext.html b/docs/types/meterProWebhookContext.html index bf410108..bc3b917f 100644 --- a/docs/types/meterProWebhookContext.html +++ b/docs/types/meterProWebhookContext.html @@ -1 +1 @@ -meterProWebhookContext | node-switchbot

    Type Alias meterProWebhookContext

    meterProWebhookContext: deviceWebhookContext & {
        humidity: number;
        scale: "CELSIUS" | "FAHRENHEIT";
        temperature: number;
    }
    +meterProWebhookContext | node-switchbot

    Type Alias meterProWebhookContext

    meterProWebhookContext: deviceWebhookContext & {
        humidity: number;
        scale: "CELSIUS" | "FAHRENHEIT";
        temperature: number;
    }
    diff --git a/docs/types/meterServiceData.html b/docs/types/meterServiceData.html index a1ce1f21..76065611 100644 --- a/docs/types/meterServiceData.html +++ b/docs/types/meterServiceData.html @@ -1 +1 @@ -meterServiceData | node-switchbot

    Type Alias meterServiceData

    meterServiceData: serviceData & {
        battery: number;
        celsius: number;
        fahrenheit: number;
        fahrenheit_mode: boolean;
        humidity: number;
        model: Meter;
        modelFriendlyName: Meter;
        modelName: Meter;
    }
    +meterServiceData | node-switchbot

    Type Alias meterServiceData

    meterServiceData: serviceData & {
        battery: number;
        celsius: number;
        fahrenheit: number;
        fahrenheit_mode: boolean;
        humidity: number;
        model: Meter;
        modelFriendlyName: Meter;
        modelName: Meter;
    }
    diff --git a/docs/types/meterStatus.html b/docs/types/meterStatus.html index 38d1ce4c..51bfa203 100644 --- a/docs/types/meterStatus.html +++ b/docs/types/meterStatus.html @@ -1 +1 @@ -meterStatus | node-switchbot

    Type Alias meterStatus

    meterStatus: deviceStatus & {
        battery: number;
        humidity: number;
        temperature: number;
    }
    +meterStatus | node-switchbot

    Type Alias meterStatus

    meterStatus: deviceStatus & {
        battery: number;
        humidity: number;
        temperature: number;
    }
    diff --git a/docs/types/meterWebhookContext.html b/docs/types/meterWebhookContext.html index d329c483..c638175c 100644 --- a/docs/types/meterWebhookContext.html +++ b/docs/types/meterWebhookContext.html @@ -1 +1 @@ -meterWebhookContext | node-switchbot

    Type Alias meterWebhookContext

    meterWebhookContext: deviceWebhookContext & {
        humidity: number;
        scale: "CELSIUS" | "FAHRENHEIT";
        temperature: number;
    }
    +meterWebhookContext | node-switchbot

    Type Alias meterWebhookContext

    meterWebhookContext: deviceWebhookContext & {
        humidity: number;
        scale: "CELSIUS" | "FAHRENHEIT";
        temperature: number;
    }
    diff --git a/docs/types/motionSensor.html b/docs/types/motionSensor.html index 0c63bee3..1f700791 100644 --- a/docs/types/motionSensor.html +++ b/docs/types/motionSensor.html @@ -1 +1 @@ -motionSensor | node-switchbot

    Type Alias motionSensor

    motionSensor: device & {}
    +motionSensor | node-switchbot

    Type Alias motionSensor

    motionSensor: device & {}
    diff --git a/docs/types/motionSensorServiceData.html b/docs/types/motionSensorServiceData.html index 00b0cef3..f9488428 100644 --- a/docs/types/motionSensorServiceData.html +++ b/docs/types/motionSensorServiceData.html @@ -1 +1 @@ -motionSensorServiceData | node-switchbot

    Type Alias motionSensorServiceData

    motionSensorServiceData: serviceData & {
        battery: number;
        iot: number;
        is_light: boolean;
        led: number;
        lightLevel: string;
        model: MotionSensor;
        modelFriendlyName: MotionSensor;
        modelName: MotionSensor;
        movement: boolean;
        sense_distance: number;
        tested: boolean;
    }
    +motionSensorServiceData | node-switchbot

    Type Alias motionSensorServiceData

    motionSensorServiceData: serviceData & {
        battery: number;
        iot: number;
        is_light: boolean;
        led: number;
        lightLevel: string;
        model: MotionSensor;
        modelFriendlyName: MotionSensor;
        modelName: MotionSensor;
        movement: boolean;
        sense_distance: number;
        tested: boolean;
    }
    diff --git a/docs/types/motionSensorStatus.html b/docs/types/motionSensorStatus.html index ad6ba82e..2959bf96 100644 --- a/docs/types/motionSensorStatus.html +++ b/docs/types/motionSensorStatus.html @@ -1 +1 @@ -motionSensorStatus | node-switchbot

    Type Alias motionSensorStatus

    motionSensorStatus: deviceStatus & {
        battery: number;
        brightness: "bright" | "dim";
        moveDetected: boolean;
    }
    +motionSensorStatus | node-switchbot

    Type Alias motionSensorStatus

    motionSensorStatus: deviceStatus & {
        battery: number;
        brightness: "bright" | "dim";
        moveDetected: boolean;
    }
    diff --git a/docs/types/motionSensorWebhookContext.html b/docs/types/motionSensorWebhookContext.html index 840a2132..b80277bf 100644 --- a/docs/types/motionSensorWebhookContext.html +++ b/docs/types/motionSensorWebhookContext.html @@ -1 +1 @@ -motionSensorWebhookContext | node-switchbot

    Type Alias motionSensorWebhookContext

    motionSensorWebhookContext: deviceWebhookContext & {
        detectionState: "NOT_DETECTED" | "DETECTED";
    }
    +motionSensorWebhookContext | node-switchbot

    Type Alias motionSensorWebhookContext

    motionSensorWebhookContext: deviceWebhookContext & {
        detectionState: "NOT_DETECTED" | "DETECTED";
    }
    diff --git a/docs/types/onadvertisement.html b/docs/types/onadvertisement.html index 4683aa83..7b21cf59 100644 --- a/docs/types/onadvertisement.html +++ b/docs/types/onadvertisement.html @@ -1 +1 @@ -onadvertisement | node-switchbot

    Type Alias onadvertisement

    onadvertisement: ((ad: ad) => Promise<void> | void)
    +onadvertisement | node-switchbot

    Type Alias onadvertisement

    onadvertisement: ((ad: ad) => Promise<void> | void)
    diff --git a/docs/types/ondiscover.html b/docs/types/ondiscover.html index 418eeb27..4d7d1a95 100644 --- a/docs/types/ondiscover.html +++ b/docs/types/ondiscover.html @@ -1 +1 @@ -ondiscover | node-switchbot

    Type Alias ondiscover

    ondiscover: ((device: SwitchbotDevice) => Promise<void> | void)
    +ondiscover | node-switchbot

    Type Alias ondiscover

    ondiscover: ((device: SwitchbotDevice) => Promise<void> | void)
    diff --git a/docs/types/outdoorMeter.html b/docs/types/outdoorMeter.html index 8a156b87..8597b060 100644 --- a/docs/types/outdoorMeter.html +++ b/docs/types/outdoorMeter.html @@ -1 +1 @@ -outdoorMeter | node-switchbot

    Type Alias outdoorMeter

    outdoorMeter: device & {}
    +outdoorMeter | node-switchbot

    Type Alias outdoorMeter

    outdoorMeter: device & {}
    diff --git a/docs/types/outdoorMeterServiceData.html b/docs/types/outdoorMeterServiceData.html index 104add46..db4c7bab 100644 --- a/docs/types/outdoorMeterServiceData.html +++ b/docs/types/outdoorMeterServiceData.html @@ -1 +1 @@ -outdoorMeterServiceData | node-switchbot

    Type Alias outdoorMeterServiceData

    outdoorMeterServiceData: serviceData & {
        battery: number;
        celsius: number;
        fahrenheit: number;
        fahrenheit_mode: boolean;
        humidity: number;
        model: OutdoorMeter;
        modelFriendlyName: OutdoorMeter;
        modelName: OutdoorMeter;
    }
    +outdoorMeterServiceData | node-switchbot

    Type Alias outdoorMeterServiceData

    outdoorMeterServiceData: serviceData & {
        battery: number;
        celsius: number;
        fahrenheit: number;
        fahrenheit_mode: boolean;
        humidity: number;
        model: OutdoorMeter;
        modelFriendlyName: OutdoorMeter;
        modelName: OutdoorMeter;
    }
    diff --git a/docs/types/outdoorMeterStatus.html b/docs/types/outdoorMeterStatus.html index 08062b25..e6101dcd 100644 --- a/docs/types/outdoorMeterStatus.html +++ b/docs/types/outdoorMeterStatus.html @@ -1 +1 @@ -outdoorMeterStatus | node-switchbot

    Type Alias outdoorMeterStatus

    outdoorMeterStatus: deviceStatus & {
        battery: number;
        humidity: number;
        temperature: number;
    }
    +outdoorMeterStatus | node-switchbot

    Type Alias outdoorMeterStatus

    outdoorMeterStatus: deviceStatus & {
        battery: number;
        humidity: number;
        temperature: number;
    }
    diff --git a/docs/types/outdoorMeterWebhookContext.html b/docs/types/outdoorMeterWebhookContext.html index 4d33bc18..7f9d00dd 100644 --- a/docs/types/outdoorMeterWebhookContext.html +++ b/docs/types/outdoorMeterWebhookContext.html @@ -1 +1 @@ -outdoorMeterWebhookContext | node-switchbot

    Type Alias outdoorMeterWebhookContext

    outdoorMeterWebhookContext: deviceWebhookContext & {
        humidity: number;
        scale: "CELSIUS" | "FAHRENHEIT";
        temperature: number;
    }
    +outdoorMeterWebhookContext | node-switchbot

    Type Alias outdoorMeterWebhookContext

    outdoorMeterWebhookContext: deviceWebhookContext & {
        humidity: number;
        scale: "CELSIUS" | "FAHRENHEIT";
        temperature: number;
    }
    diff --git a/docs/types/panTiltCamWebhookContext.html b/docs/types/panTiltCamWebhookContext.html index f9418b69..f351449f 100644 --- a/docs/types/panTiltCamWebhookContext.html +++ b/docs/types/panTiltCamWebhookContext.html @@ -1 +1 @@ -panTiltCamWebhookContext | node-switchbot

    Type Alias panTiltCamWebhookContext

    panTiltCamWebhookContext: deviceWebhookContext & {
        detectionState: "DETECTED";
    }
    +panTiltCamWebhookContext | node-switchbot

    Type Alias panTiltCamWebhookContext

    panTiltCamWebhookContext: deviceWebhookContext & {
        detectionState: "DETECTED";
    }
    diff --git a/docs/types/pantiltCam.html b/docs/types/pantiltCam.html index 5a6ec5af..c9b335a6 100644 --- a/docs/types/pantiltCam.html +++ b/docs/types/pantiltCam.html @@ -1 +1 @@ -pantiltCam | node-switchbot

    Type Alias pantiltCam

    pantiltCam: device & {}
    +pantiltCam | node-switchbot

    Type Alias pantiltCam

    pantiltCam: device & {}
    diff --git a/docs/types/pantiltCam2k.html b/docs/types/pantiltCam2k.html index a4bcefb7..366f9833 100644 --- a/docs/types/pantiltCam2k.html +++ b/docs/types/pantiltCam2k.html @@ -1 +1 @@ -pantiltCam2k | node-switchbot

    Type Alias pantiltCam2k

    pantiltCam2k: device & {}
    +pantiltCam2k | node-switchbot

    Type Alias pantiltCam2k

    pantiltCam2k: device & {}
    diff --git a/docs/types/plug.html b/docs/types/plug.html index 92eb8a0b..e2a5fbaa 100644 --- a/docs/types/plug.html +++ b/docs/types/plug.html @@ -1 +1 @@ -plug | node-switchbot

    Type Alias plug

    plug: device & {}
    +plug | node-switchbot

    Type Alias plug

    plug: device & {}
    diff --git a/docs/types/plugMini.html b/docs/types/plugMini.html index 24f39bde..334edae7 100644 --- a/docs/types/plugMini.html +++ b/docs/types/plugMini.html @@ -1 +1 @@ -plugMini | node-switchbot

    Type Alias plugMini

    plugMini: device & {}
    +plugMini | node-switchbot

    Type Alias plugMini

    plugMini: device & {}
    diff --git a/docs/types/plugMiniJPServiceData.html b/docs/types/plugMiniJPServiceData.html index 65c4d889..43d78666 100644 --- a/docs/types/plugMiniJPServiceData.html +++ b/docs/types/plugMiniJPServiceData.html @@ -1 +1 @@ -plugMiniJPServiceData | node-switchbot

    Type Alias plugMiniJPServiceData

    plugMiniJPServiceData: serviceData & {
        currentPower: number;
        delay: boolean;
        model: PlugMiniJP;
        modelFriendlyName: PlugMini;
        modelName: PlugMini;
        overload: boolean;
        state: string;
        syncUtcTime: boolean;
        timer: boolean;
        wifiRssi: number;
    }
    +plugMiniJPServiceData | node-switchbot

    Type Alias plugMiniJPServiceData

    plugMiniJPServiceData: serviceData & {
        currentPower: number;
        delay: boolean;
        model: PlugMiniJP;
        modelFriendlyName: PlugMini;
        modelName: PlugMini;
        overload: boolean;
        state: string;
        syncUtcTime: boolean;
        timer: boolean;
        wifiRssi: number;
    }
    diff --git a/docs/types/plugMiniJPWebhookContext.html b/docs/types/plugMiniJPWebhookContext.html index d6bb6dc7..2e07c410 100644 --- a/docs/types/plugMiniJPWebhookContext.html +++ b/docs/types/plugMiniJPWebhookContext.html @@ -1 +1 @@ -plugMiniJPWebhookContext | node-switchbot

    Type Alias plugMiniJPWebhookContext

    plugMiniJPWebhookContext: deviceWebhookContext & {
        powerState: "ON" | "OFF";
    }
    +plugMiniJPWebhookContext | node-switchbot

    Type Alias plugMiniJPWebhookContext

    plugMiniJPWebhookContext: deviceWebhookContext & {
        powerState: "ON" | "OFF";
    }
    diff --git a/docs/types/plugMiniStatus.html b/docs/types/plugMiniStatus.html index a276936c..33103be2 100644 --- a/docs/types/plugMiniStatus.html +++ b/docs/types/plugMiniStatus.html @@ -1 +1 @@ -plugMiniStatus | node-switchbot

    Type Alias plugMiniStatus

    plugMiniStatus: deviceStatus & {
        electricCurrent: Float64Array;
        electricityOfDay: number;
        power: string;
        voltage: Float64Array;
        weight: Float64Array;
    }
    +plugMiniStatus | node-switchbot

    Type Alias plugMiniStatus

    plugMiniStatus: deviceStatus & {
        electricCurrent: Float64Array;
        electricityOfDay: number;
        power: string;
        voltage: Float64Array;
        weight: Float64Array;
    }
    diff --git a/docs/types/plugMiniUSServiceData.html b/docs/types/plugMiniUSServiceData.html index 426e0778..67fb6413 100644 --- a/docs/types/plugMiniUSServiceData.html +++ b/docs/types/plugMiniUSServiceData.html @@ -1 +1 @@ -plugMiniUSServiceData | node-switchbot

    Type Alias plugMiniUSServiceData

    plugMiniUSServiceData: serviceData & {
        currentPower: number;
        delay: boolean;
        model: PlugMiniUS;
        modelFriendlyName: PlugMini;
        modelName: PlugMini;
        overload: boolean;
        state: string;
        syncUtcTime: boolean;
        timer: boolean;
        wifiRssi: number;
    }
    +plugMiniUSServiceData | node-switchbot

    Type Alias plugMiniUSServiceData

    plugMiniUSServiceData: serviceData & {
        currentPower: number;
        delay: boolean;
        model: PlugMiniUS;
        modelFriendlyName: PlugMini;
        modelName: PlugMini;
        overload: boolean;
        state: string;
        syncUtcTime: boolean;
        timer: boolean;
        wifiRssi: number;
    }
    diff --git a/docs/types/plugMiniUSWebhookContext.html b/docs/types/plugMiniUSWebhookContext.html index 075c1486..d9b27bbf 100644 --- a/docs/types/plugMiniUSWebhookContext.html +++ b/docs/types/plugMiniUSWebhookContext.html @@ -1 +1 @@ -plugMiniUSWebhookContext | node-switchbot

    Type Alias plugMiniUSWebhookContext

    plugMiniUSWebhookContext: deviceWebhookContext & {
        powerState: "ON" | "OFF";
    }
    +plugMiniUSWebhookContext | node-switchbot

    Type Alias plugMiniUSWebhookContext

    plugMiniUSWebhookContext: deviceWebhookContext & {
        powerState: "ON" | "OFF";
    }
    diff --git a/docs/types/plugStatus.html b/docs/types/plugStatus.html index ac8697dd..6b7dc444 100644 --- a/docs/types/plugStatus.html +++ b/docs/types/plugStatus.html @@ -1 +1 @@ -plugStatus | node-switchbot

    Type Alias plugStatus

    plugStatus: deviceStatus & {
        power: string;
        version: string;
    }
    +plugStatus | node-switchbot

    Type Alias plugStatus

    plugStatus: deviceStatus & {
        power: string;
        version: string;
    }
    diff --git a/docs/types/plugWebhookContext.html b/docs/types/plugWebhookContext.html index 4376c446..8c24d5e6 100644 --- a/docs/types/plugWebhookContext.html +++ b/docs/types/plugWebhookContext.html @@ -1 +1 @@ -plugWebhookContext | node-switchbot

    Type Alias plugWebhookContext

    plugWebhookContext: deviceWebhookContext & {
        powerState: "ON" | "OFF";
    }
    +plugWebhookContext | node-switchbot

    Type Alias plugWebhookContext

    plugWebhookContext: deviceWebhookContext & {
        powerState: "ON" | "OFF";
    }
    diff --git a/docs/types/relaySwitch1PMServiceData.html b/docs/types/relaySwitch1PMServiceData.html new file mode 100644 index 00000000..b40ff64f --- /dev/null +++ b/docs/types/relaySwitch1PMServiceData.html @@ -0,0 +1 @@ +relaySwitch1PMServiceData | node-switchbot

    Type Alias relaySwitch1PMServiceData

    relaySwitch1PMServiceData: serviceData & {
        current: number;
        mode: boolean;
        model: RelaySwitch1PM;
        modelFriendlyName: RelaySwitch1PM;
        modelName: RelaySwitch1PM;
        power: number;
        sequence_number: number;
        state: boolean;
        voltage: number;
    }
    diff --git a/docs/types/relaySwitch1PlusServiceData.html b/docs/types/relaySwitch1PlusServiceData.html new file mode 100644 index 00000000..2261312b --- /dev/null +++ b/docs/types/relaySwitch1PlusServiceData.html @@ -0,0 +1 @@ +relaySwitch1PlusServiceData | node-switchbot

    Type Alias relaySwitch1PlusServiceData

    relaySwitch1PlusServiceData: serviceData & {
        mode: boolean;
        model: RelaySwitch1Plus;
        modelFriendlyName: RelaySwitch1Plus;
        modelName: RelaySwitch1Plus;
        sequence_number: number;
        state: boolean;
    }
    diff --git a/docs/types/remote.html b/docs/types/remote.html index dd44c85b..692753f6 100644 --- a/docs/types/remote.html +++ b/docs/types/remote.html @@ -1 +1 @@ -remote | node-switchbot

    Type Alias remote

    remote: device & {}
    +remote | node-switchbot

    Type Alias remote

    remote: device & {}
    diff --git a/docs/types/robotVacuumCleanerS1.html b/docs/types/robotVacuumCleanerS1.html index a9866b9b..c3c101d0 100644 --- a/docs/types/robotVacuumCleanerS1.html +++ b/docs/types/robotVacuumCleanerS1.html @@ -1 +1 @@ -robotVacuumCleanerS1 | node-switchbot

    Type Alias robotVacuumCleanerS1

    robotVacuumCleanerS1: device & {}
    +robotVacuumCleanerS1 | node-switchbot

    Type Alias robotVacuumCleanerS1

    robotVacuumCleanerS1: device & {}
    diff --git a/docs/types/robotVacuumCleanerS1Plus.html b/docs/types/robotVacuumCleanerS1Plus.html index d9cd039d..d9d4b3d6 100644 --- a/docs/types/robotVacuumCleanerS1Plus.html +++ b/docs/types/robotVacuumCleanerS1Plus.html @@ -1 +1 @@ -robotVacuumCleanerS1Plus | node-switchbot

    Type Alias robotVacuumCleanerS1Plus

    robotVacuumCleanerS1Plus: device & {}
    +robotVacuumCleanerS1Plus | node-switchbot

    Type Alias robotVacuumCleanerS1Plus

    robotVacuumCleanerS1Plus: device & {}
    diff --git a/docs/types/robotVacuumCleanerS1PlusStatus.html b/docs/types/robotVacuumCleanerS1PlusStatus.html index 1a9a79c6..a877b0a8 100644 --- a/docs/types/robotVacuumCleanerS1PlusStatus.html +++ b/docs/types/robotVacuumCleanerS1PlusStatus.html @@ -1 +1 @@ -robotVacuumCleanerS1PlusStatus | node-switchbot

    Type Alias robotVacuumCleanerS1PlusStatus

    robotVacuumCleanerS1PlusStatus: deviceStatus & {
        battery: number;
        onlineStatus: string;
        workingStatus: string;
    }
    +robotVacuumCleanerS1PlusStatus | node-switchbot

    Type Alias robotVacuumCleanerS1PlusStatus

    robotVacuumCleanerS1PlusStatus: deviceStatus & {
        battery: number;
        onlineStatus: string;
        workingStatus: string;
    }
    diff --git a/docs/types/robotVacuumCleanerS1PlusWebhookContext.html b/docs/types/robotVacuumCleanerS1PlusWebhookContext.html index 3c30ecad..8490d22f 100644 --- a/docs/types/robotVacuumCleanerS1PlusWebhookContext.html +++ b/docs/types/robotVacuumCleanerS1PlusWebhookContext.html @@ -1 +1 @@ -robotVacuumCleanerS1PlusWebhookContext | node-switchbot

    Type Alias robotVacuumCleanerS1PlusWebhookContext

    robotVacuumCleanerS1PlusWebhookContext: deviceWebhookContext & {
        battery: number;
        onlineStatus: "online" | "offline";
        workingStatus:
            | "Standby"
            | "Clearing"
            | "Paused"
            | "GotoChargeBase"
            | "Charging"
            | "ChargeDone"
            | "Dormant"
            | "InTrouble"
            | "InRemoteControl"
            | "InDustCollecting";
    }
    +robotVacuumCleanerS1PlusWebhookContext | node-switchbot

    Type Alias robotVacuumCleanerS1PlusWebhookContext

    robotVacuumCleanerS1PlusWebhookContext: deviceWebhookContext & {
        battery: number;
        onlineStatus: "online" | "offline";
        workingStatus:
            | "Standby"
            | "Clearing"
            | "Paused"
            | "GotoChargeBase"
            | "Charging"
            | "ChargeDone"
            | "Dormant"
            | "InTrouble"
            | "InRemoteControl"
            | "InDustCollecting";
    }
    diff --git a/docs/types/robotVacuumCleanerS1Status.html b/docs/types/robotVacuumCleanerS1Status.html index 842dda10..95991df5 100644 --- a/docs/types/robotVacuumCleanerS1Status.html +++ b/docs/types/robotVacuumCleanerS1Status.html @@ -1 +1 @@ -robotVacuumCleanerS1Status | node-switchbot

    Type Alias robotVacuumCleanerS1Status

    robotVacuumCleanerS1Status: deviceStatus & {
        battery: number;
        onlineStatus: string;
        workingStatus: string;
    }
    +robotVacuumCleanerS1Status | node-switchbot

    Type Alias robotVacuumCleanerS1Status

    robotVacuumCleanerS1Status: deviceStatus & {
        battery: number;
        onlineStatus: string;
        workingStatus: string;
    }
    diff --git a/docs/types/robotVacuumCleanerS1WebhookContext.html b/docs/types/robotVacuumCleanerS1WebhookContext.html index a73ae75e..1c13a0bd 100644 --- a/docs/types/robotVacuumCleanerS1WebhookContext.html +++ b/docs/types/robotVacuumCleanerS1WebhookContext.html @@ -1 +1 @@ -robotVacuumCleanerS1WebhookContext | node-switchbot

    Type Alias robotVacuumCleanerS1WebhookContext

    robotVacuumCleanerS1WebhookContext: deviceWebhookContext & {
        battery: number;
        onlineStatus: "online" | "offline";
        workingStatus:
            | "Standby"
            | "Clearing"
            | "Paused"
            | "GotoChargeBase"
            | "Charging"
            | "ChargeDone"
            | "Dormant"
            | "InTrouble"
            | "InRemoteControl"
            | "InDustCollecting";
    }
    +robotVacuumCleanerS1WebhookContext | node-switchbot

    Type Alias robotVacuumCleanerS1WebhookContext

    robotVacuumCleanerS1WebhookContext: deviceWebhookContext & {
        battery: number;
        onlineStatus: "online" | "offline";
        workingStatus:
            | "Standby"
            | "Clearing"
            | "Paused"
            | "GotoChargeBase"
            | "Charging"
            | "ChargeDone"
            | "Dormant"
            | "InTrouble"
            | "InRemoteControl"
            | "InDustCollecting";
    }
    diff --git a/docs/types/robotVacuumCleanerServiceData.html b/docs/types/robotVacuumCleanerServiceData.html index 7502a4c4..5a60f9c3 100644 --- a/docs/types/robotVacuumCleanerServiceData.html +++ b/docs/types/robotVacuumCleanerServiceData.html @@ -1 +1 @@ -robotVacuumCleanerServiceData | node-switchbot

    Type Alias robotVacuumCleanerServiceData

    robotVacuumCleanerServiceData: serviceData & {
        battery: number;
        model: Unknown;
        modelFriendlyName: Unknown;
        modelName: Unknown;
        state: string;
    }
    +robotVacuumCleanerServiceData | node-switchbot

    Type Alias robotVacuumCleanerServiceData

    robotVacuumCleanerServiceData: serviceData & {
        battery: number;
        model: Unknown;
        modelFriendlyName: Unknown;
        modelName: Unknown;
        state: string;
    }
    diff --git a/docs/types/stripLight.html b/docs/types/stripLight.html index 0d9daceb..ce628bb6 100644 --- a/docs/types/stripLight.html +++ b/docs/types/stripLight.html @@ -1 +1 @@ -stripLight | node-switchbot

    Type Alias stripLight

    stripLight: device & {}
    +stripLight | node-switchbot

    Type Alias stripLight

    stripLight: device & {}
    diff --git a/docs/types/stripLightServiceData.html b/docs/types/stripLightServiceData.html index 7b2a8c83..f7ce42b1 100644 --- a/docs/types/stripLightServiceData.html +++ b/docs/types/stripLightServiceData.html @@ -1 +1 @@ -stripLightServiceData | node-switchbot

    Type Alias stripLightServiceData

    stripLightServiceData: serviceData & {
        blue: number;
        brightness: number;
        color_mode: number;
        delay: number;
        green: number;
        loop_index: number;
        model: StripLight;
        modelFriendlyName: StripLight;
        modelName: StripLight;
        power: boolean;
        preset: number;
        red: number;
        speed: number;
        state: boolean;
    }
    +stripLightServiceData | node-switchbot

    Type Alias stripLightServiceData

    stripLightServiceData: serviceData & {
        blue: number;
        brightness: number;
        color_mode: number;
        delay: number;
        green: number;
        loop_index: number;
        model: StripLight;
        modelFriendlyName: StripLight;
        modelName: StripLight;
        power: boolean;
        preset: number;
        red: number;
        speed: number;
        state: boolean;
    }
    diff --git a/docs/types/stripLightStatus.html b/docs/types/stripLightStatus.html index 287250b5..7edbd7d5 100644 --- a/docs/types/stripLightStatus.html +++ b/docs/types/stripLightStatus.html @@ -1 +1 @@ -stripLightStatus | node-switchbot

    Type Alias stripLightStatus

    stripLightStatus: deviceStatus & {
        brightness: number;
        color: string;
        power: string;
    }
    +stripLightStatus | node-switchbot

    Type Alias stripLightStatus

    stripLightStatus: deviceStatus & {
        brightness: number;
        color: string;
        power: string;
    }
    diff --git a/docs/types/stripLightWebhookContext.html b/docs/types/stripLightWebhookContext.html index 69999371..8582a15e 100644 --- a/docs/types/stripLightWebhookContext.html +++ b/docs/types/stripLightWebhookContext.html @@ -1 +1 @@ -stripLightWebhookContext | node-switchbot

    Type Alias stripLightWebhookContext

    stripLightWebhookContext: deviceWebhookContext & {
        brightness: number;
        color: string;
        powerState: "ON" | "OFF";
    }
    +stripLightWebhookContext | node-switchbot

    Type Alias stripLightWebhookContext

    stripLightWebhookContext: deviceWebhookContext & {
        brightness: number;
        color: string;
        powerState: "ON" | "OFF";
    }
    diff --git a/docs/types/waterLeakDetector.html b/docs/types/waterLeakDetector.html index b6a4f512..6e043897 100644 --- a/docs/types/waterLeakDetector.html +++ b/docs/types/waterLeakDetector.html @@ -1 +1 @@ -waterLeakDetector | node-switchbot

    Type Alias waterLeakDetector

    waterLeakDetector: device & {}
    +waterLeakDetector | node-switchbot

    Type Alias waterLeakDetector

    waterLeakDetector: device & {}
    diff --git a/docs/types/waterLeakDetectorServiceData.html b/docs/types/waterLeakDetectorServiceData.html index 3c129295..c6ac534f 100644 --- a/docs/types/waterLeakDetectorServiceData.html +++ b/docs/types/waterLeakDetectorServiceData.html @@ -1 +1 @@ -waterLeakDetectorServiceData | node-switchbot

    Type Alias waterLeakDetectorServiceData

    waterLeakDetectorServiceData: serviceData & {
        battery: number;
        leak: boolean;
        low_battery: boolean;
        model: Leak;
        modelFriendlyName: Leak;
        modelName: Leak;
        tampered: boolean;
    }
    +waterLeakDetectorServiceData | node-switchbot

    Type Alias waterLeakDetectorServiceData

    waterLeakDetectorServiceData: serviceData & {
        battery: number;
        leak: boolean;
        low_battery: boolean;
        model: Leak;
        modelFriendlyName: Leak;
        modelName: Leak;
        tampered: boolean;
    }
    diff --git a/docs/types/waterLeakDetectorStatus.html b/docs/types/waterLeakDetectorStatus.html index 6595029c..462bc626 100644 --- a/docs/types/waterLeakDetectorStatus.html +++ b/docs/types/waterLeakDetectorStatus.html @@ -1 +1 @@ -waterLeakDetectorStatus | node-switchbot

    Type Alias waterLeakDetectorStatus

    waterLeakDetectorStatus: deviceStatus & {
        battery: number;
        status: 0 | 1;
    }
    +waterLeakDetectorStatus | node-switchbot

    Type Alias waterLeakDetectorStatus

    waterLeakDetectorStatus: deviceStatus & {
        battery: number;
        status: 0 | 1;
    }
    diff --git a/docs/types/waterLeakDetectorWebhookContext.html b/docs/types/waterLeakDetectorWebhookContext.html index e9eaa4c2..c364465d 100644 --- a/docs/types/waterLeakDetectorWebhookContext.html +++ b/docs/types/waterLeakDetectorWebhookContext.html @@ -1 +1 @@ -waterLeakDetectorWebhookContext | node-switchbot

    Type Alias waterLeakDetectorWebhookContext

    waterLeakDetectorWebhookContext: deviceWebhookContext & {
        battery: number;
        detectionState: 0 | 1;
    }
    +waterLeakDetectorWebhookContext | node-switchbot

    Type Alias waterLeakDetectorWebhookContext

    waterLeakDetectorWebhookContext: deviceWebhookContext & {
        battery: number;
        detectionState: 0 | 1;
    }
    diff --git a/package-lock.json b/package-lock.json index d6c51f0e..648696f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,41 +1,40 @@ { "name": "node-switchbot", - "version": "3.3.0", + "version": "3.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "node-switchbot", - "version": "3.3.0", + "version": "3.4.0", "license": "MIT", "dependencies": { "@stoprocent/noble": "^1.15.1", "async-mutex": "^0.5.0", - "undici": "^6.20.1" + "undici": "^6.21.0" }, "devDependencies": { - "@antfu/eslint-config": "^3.8.0", + "@antfu/eslint-config": "^3.9.1", "@types/aes-js": "^3.1.4", "@types/debug": "^4.1.12", "@types/fs-extra": "^11.0.4", "@types/jest": "^29.5.14", "@types/mdast": "^4.0.4", - "@types/node": "^22.8.6", + "@types/node": "^22.9.0", "@types/semver": "^7.5.8", "@types/sinon": "^17.0.3", "@types/source-map-support": "^0.5.10", - "@vitest/coverage-v8": "^2.1.4", - "eslint": "^9.14.0", + "@vitest/coverage-v8": "^2.1.5", + "eslint": "^9.15.0", "eslint-plugin-format": "^0.1.2", "jest": "^29.7.0", "nodemon": "^3.1.7", - "npm-check-updates": "^17.1.9", "shx": "^0.3.4", "sinon": "^19.0.2", "ts-node": "^10.9.2", "typedoc": "^0.26.11", "typescript": "^5.6.3", - "vitest": "^2.1.4" + "vitest": "^2.1.5" }, "engines": { "node": "^20 || ^22" @@ -59,39 +58,39 @@ } }, "node_modules/@antfu/eslint-config": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@antfu/eslint-config/-/eslint-config-3.8.0.tgz", - "integrity": "sha512-O5QSufPHpKTm0wk1OQ5c2mOZVzCqYV3hIDrt5zt+cOWqiG8YXLPkSOD4fFwjomATtOuUbcLUwkcgY5dErM7aIw==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@antfu/eslint-config/-/eslint-config-3.9.1.tgz", + "integrity": "sha512-a/xubkbJ9i6U6jX5ZUB3GeXahhorpMWgDRwdga297ilmadcJFrepBRjGf8SnA+RlPrVRI4cqPdQeQZZKR+Mjiw==", "dev": true, "license": "MIT", "dependencies": { "@antfu/install-pkg": "^0.4.1", "@clack/prompts": "^0.7.0", - "@eslint-community/eslint-plugin-eslint-comments": "^4.4.0", - "@eslint/markdown": "^6.2.0", - "@stylistic/eslint-plugin": "^2.9.0", - "@typescript-eslint/eslint-plugin": "^8.9.0", - "@typescript-eslint/parser": "^8.9.0", - "@vitest/eslint-plugin": "^1.1.7", + "@eslint-community/eslint-plugin-eslint-comments": "^4.4.1", + "@eslint/markdown": "^6.2.1", + "@stylistic/eslint-plugin": "^2.10.1", + "@typescript-eslint/eslint-plugin": "^8.14.0", + "@typescript-eslint/parser": "^8.14.0", + "@vitest/eslint-plugin": "^1.1.10", "eslint-config-flat-gitignore": "^0.3.0", "eslint-flat-config-utils": "^0.4.0", "eslint-merge-processors": "^0.1.0", "eslint-plugin-antfu": "^2.7.0", "eslint-plugin-command": "^0.2.6", - "eslint-plugin-import-x": "^4.3.1", - "eslint-plugin-jsdoc": "^50.4.1", - "eslint-plugin-jsonc": "^2.16.0", - "eslint-plugin-n": "^17.11.1", + "eslint-plugin-import-x": "^4.4.2", + "eslint-plugin-jsdoc": "^50.5.0", + "eslint-plugin-jsonc": "^2.18.1", + "eslint-plugin-n": "^17.13.1", "eslint-plugin-no-only-tests": "^3.3.0", - "eslint-plugin-perfectionist": "^3.9.0", + "eslint-plugin-perfectionist": "^3.9.1", "eslint-plugin-regexp": "^2.6.0", "eslint-plugin-toml": "^0.11.1", "eslint-plugin-unicorn": "^56.0.0", "eslint-plugin-unused-imports": "^4.1.4", - "eslint-plugin-vue": "^9.29.0", - "eslint-plugin-yml": "^1.14.0", + "eslint-plugin-vue": "^9.31.0", + "eslint-plugin-yml": "^1.15.0", "eslint-processor-vue-blocks": "^0.1.2", - "globals": "^15.11.0", + "globals": "^15.12.0", "jsonc-eslint-parser": "^2.4.0", "local-pkg": "^0.5.0", "parse-gitignore": "^2.0.0", @@ -165,6 +164,19 @@ } } }, + "node_modules/@antfu/eslint-config/node_modules/globals": { + "version": "15.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", + "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@antfu/install-pkg": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.4.1.tgz", @@ -1275,9 +1287,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.0.tgz", + "integrity": "sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1314,9 +1326,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", - "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz", + "integrity": "sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1324,9 +1336,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, "license": "MIT", "dependencies": { @@ -1385,9 +1397,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz", - "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", + "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==", "dev": true, "license": "MIT", "engines": { @@ -1421,9 +1433,9 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", - "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz", + "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1486,9 +1498,9 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.0.tgz", - "integrity": "sha512-xnRgu9DxZbkWak/te3fcytNyp8MTbuiZIaueg2rgEvBuN55n04nwLYLU9TX/VVlusc9L2ZNXi99nUFNkHXtr5g==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2158,9 +2170,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.3.tgz", - "integrity": "sha512-ufb2CH2KfBWPJok95frEZZ82LtDl0A6QKTa8MoM+cWwDZvVGl5/jNb79pIhRvAalUu+7LD91VYR0nwRD799HkQ==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.0.tgz", + "integrity": "sha512-e312hTjuM89YLqlcqEs7mSvwhxN5pgXqRobUob7Jsz1wDQlpAb2WTX4jzvrx5NrL1h2SE4fGdHSNyPxbLfzyeA==", "cpu": [ "arm" ], @@ -2172,9 +2184,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.3.tgz", - "integrity": "sha512-iAHpft/eQk9vkWIV5t22V77d90CRofgR2006UiCjHcHJFVI1E0oBkQIAbz+pLtthFw3hWEmVB4ilxGyBf48i2Q==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.0.tgz", + "integrity": "sha512-cBUOny8GNXP++gN00Bo5L04I2oqUEFAU0OSDb+4hqp4/R/pZL/zlGzp7lJkhtPX52Rj+PIe0S8aOqhK4hztxHQ==", "cpu": [ "arm64" ], @@ -2186,9 +2198,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.3.tgz", - "integrity": "sha512-QPW2YmkWLlvqmOa2OwrfqLJqkHm7kJCIMq9kOz40Zo9Ipi40kf9ONG5Sz76zszrmIZZ4hgRIkez69YnTHgEz1w==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.0.tgz", + "integrity": "sha512-aauK2M2ptFQQYdOqbKGYCg1LHlPbm6IxepSnHLLaMIGcd9YBiKRGl2+KtzQL/IkurP+b54EKBkvtZaWXijmzfQ==", "cpu": [ "arm64" ], @@ -2200,9 +2212,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.3.tgz", - "integrity": "sha512-KO0pN5x3+uZm1ZXeIfDqwcvnQ9UEGN8JX5ufhmgH5Lz4ujjZMAnxQygZAVGemFWn+ZZC0FQopruV4lqmGMshow==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.0.tgz", + "integrity": "sha512-VAjOnHUwpvxf3XT33sMpsLGKq24Rz1sTQhLuUicYrV9pxB4TNi0w11qAGPOyR+dQu/iZf88DmEmG0+2Gaqa1gg==", "cpu": [ "x64" ], @@ -2214,9 +2226,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.3.tgz", - "integrity": "sha512-CsC+ZdIiZCZbBI+aRlWpYJMSWvVssPuWqrDy/zi9YfnatKKSLFCe6fjna1grHuo/nVaHG+kiglpRhyBQYRTK4A==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.0.tgz", + "integrity": "sha512-I2eRlZG87gl6WxP6PvSB5bfFA1btE7tWnG6QAoEU/0Gr47f6KaxRwiRfBujHlzkuMPqtpTlSOW4aOEOyMtQqfg==", "cpu": [ "arm64" ], @@ -2228,9 +2240,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.3.tgz", - "integrity": "sha512-F0nqiLThcfKvRQhZEzMIXOQG4EeX61im61VYL1jo4eBxv4aZRmpin6crnBJQ/nWnCsjH5F6J3W6Stdm0mBNqBg==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.0.tgz", + "integrity": "sha512-G05JNYFdjikD/2hJTf1gHdD5KjI2TotjiDn17amHtB5JgwrRF1EA9hJ3TRGIvT3zGXilNWWlR71R/2TT1pXRDg==", "cpu": [ "x64" ], @@ -2242,9 +2254,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.3.tgz", - "integrity": "sha512-KRSFHyE/RdxQ1CSeOIBVIAxStFC/hnBgVcaiCkQaVC+EYDtTe4X7z5tBkFyRoBgUGtB6Xg6t9t2kulnX6wJc6A==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.0.tgz", + "integrity": "sha512-FMXxMZ7qnMULwgdmGSFVlOduAhFyqDPoK1A2Q8HBkzGYX9SMFU3ITKfLdIiCzTaaj/pt1OiEbpF2szUw6Kh++Q==", "cpu": [ "arm" ], @@ -2256,9 +2268,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.3.tgz", - "integrity": "sha512-h6Q8MT+e05zP5BxEKz0vi0DhthLdrNEnspdLzkoFqGwnmOzakEHSlXfVyA4HJ322QtFy7biUAVFPvIDEDQa6rw==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.0.tgz", + "integrity": "sha512-0315TiPsJfOY+jAwEeqxcy9yVcAy/jg99GrMcd/L7CRESzi1vhyLPbnkDnz7giaEttSRf/d3llJYfoC+44Nl3A==", "cpu": [ "arm" ], @@ -2270,9 +2282,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.3.tgz", - "integrity": "sha512-fKElSyXhXIJ9pqiYRqisfirIo2Z5pTTve5K438URf08fsypXrEkVmShkSfM8GJ1aUyvjakT+fn2W7Czlpd/0FQ==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.0.tgz", + "integrity": "sha512-4zCKY5E9djPyHzvoCWIouFsuAvg+dk+rNia8lz1bjKpzKz02QvK4JPHyjcDT8CFR2J/aA98WccCirdDOy+VDWQ==", "cpu": [ "arm64" ], @@ -2284,9 +2296,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.3.tgz", - "integrity": "sha512-YlddZSUk8G0px9/+V9PVilVDC6ydMz7WquxozToozSnfFK6wa6ne1ATUjUvjin09jp34p84milxlY5ikueoenw==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.0.tgz", + "integrity": "sha512-6St9rrPSLbYBbbJAClpU4gmnO7cdZCMMzx2MT0UCIIIevoLAmsCDOAG6t3J/RgN4CPUpdaGr/UnPqQTHZ4oDwA==", "cpu": [ "arm64" ], @@ -2298,9 +2310,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.3.tgz", - "integrity": "sha512-yNaWw+GAO8JjVx3s3cMeG5Esz1cKVzz8PkTJSfYzE5u7A+NvGmbVFEHP+BikTIyYWuz0+DX9kaA3pH9Sqxp69g==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.0.tgz", + "integrity": "sha512-dIBfp8NDrgvwUJxyqFv7501coIba+7xxBJy1gQEF0RGkIKa3Tq0Mh3sF9hmstDLtaMt7gL2aXsCNG9SCKyVVZg==", "cpu": [ "ppc64" ], @@ -2312,9 +2324,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.3.tgz", - "integrity": "sha512-lWKNQfsbpv14ZCtM/HkjCTm4oWTKTfxPmr7iPfp3AHSqyoTz5AgLemYkWLwOBWc+XxBbrU9SCokZP0WlBZM9lA==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.0.tgz", + "integrity": "sha512-Pu7xLHRy+5UjFCKR/vWsbFmiBYUC9993v99YoKWhAgK4VsdNuWHPs17NuCJEtVsZpYCNVPbRyBpQw58Ma8BmeA==", "cpu": [ "riscv64" ], @@ -2326,9 +2338,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.3.tgz", - "integrity": "sha512-HoojGXTC2CgCcq0Woc/dn12wQUlkNyfH0I1ABK4Ni9YXyFQa86Fkt2Q0nqgLfbhkyfQ6003i3qQk9pLh/SpAYw==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.0.tgz", + "integrity": "sha512-2Q9qQnk/eWdvXzzHl22y7tpDHREppFUh7N6cCs70HZEbQSgB7wd/2S/B05SSiyAiIn5BL+fYiASLds5bz0IQFw==", "cpu": [ "s390x" ], @@ -2340,9 +2352,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.3.tgz", - "integrity": "sha512-mnEOh4iE4USSccBOtcrjF5nj+5/zm6NcNhbSEfR3Ot0pxBwvEn5QVUXcuOwwPkapDtGZ6pT02xLoPaNv06w7KQ==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.0.tgz", + "integrity": "sha512-CNnqMZ4Yz0Ga0A75qux7DNChq0P9oAWn2S7yjZPRC+AaEF8Ysw5K/1lzT25/a3reJ4V2abcShIVG+tfZHb1UrQ==", "cpu": [ "x64" ], @@ -2354,9 +2366,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.3.tgz", - "integrity": "sha512-rMTzawBPimBQkG9NKpNHvquIUTQPzrnPxPbCY1Xt+mFkW7pshvyIS5kYgcf74goxXOQk0CP3EoOC1zcEezKXhw==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.0.tgz", + "integrity": "sha512-dS1+eCbbao54XB+wLW6uuwRkChq4L0UfKhd3wvt6s+EN1rTIi24ee5Lk3HfRGq9J2jsRm12/AGKLA0kd82Sp/g==", "cpu": [ "x64" ], @@ -2368,9 +2380,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.3.tgz", - "integrity": "sha512-2lg1CE305xNvnH3SyiKwPVsTVLCg4TmNCF1z7PSHX2uZY2VbUpdkgAllVoISD7JO7zu+YynpWNSKAtOrX3AiuA==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.0.tgz", + "integrity": "sha512-VrYQHY5+Y71OU/uOSRE9lLhph16bbuWGrMwGwZDPxCUXUW5NgLA+K+q0kv7rafHRlnrsZSVcMOkZskzTNnR3ZQ==", "cpu": [ "arm64" ], @@ -2382,9 +2394,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.3.tgz", - "integrity": "sha512-9SjYp1sPyxJsPWuhOCX6F4jUMXGbVVd5obVpoVEi8ClZqo52ViZewA6eFz85y8ezuOA+uJMP5A5zo6Oz4S5rVQ==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.0.tgz", + "integrity": "sha512-LCqk4Xi3e4GzLqaq+QDM7gP5DtJ/RgWMzV3U2brwp/vEz9RTA5YBgIDP69xYfrTXexes6xPsOIquy79+kLifiA==", "cpu": [ "ia32" ], @@ -2396,9 +2408,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.3.tgz", - "integrity": "sha512-HGZgRFFYrMrP3TJlq58nR1xy8zHKId25vhmm5S9jETEfDf6xybPxsavFTJaufe2zgOGYJBskGlj49CwtEuFhWQ==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.0.tgz", + "integrity": "sha512-dj2ZolfViR3chLWwSHID2mBzLLwYvXFldIplR6BSkdACXqAsrcmItKTff4h7enYB3Ugoh0v41WbxijE9HJb1Hw==", "cpu": [ "x64" ], @@ -3077,9 +3089,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.8.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.6.tgz", - "integrity": "sha512-tosuJYKrIqjQIlVCM4PEGxOmyg3FCPa/fViuJChnGeEIhjA46oy8FMVoF9su1/v8PNs2a8Q0iFNyOx0uOF91nw==", + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3166,17 +3178,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz", - "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz", + "integrity": "sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.12.2", - "@typescript-eslint/type-utils": "8.12.2", - "@typescript-eslint/utils": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/type-utils": "8.14.0", + "@typescript-eslint/utils": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -3200,16 +3212,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", - "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.14.0.tgz", + "integrity": "sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "8.12.2", - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/typescript-estree": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "debug": "^4.3.4" }, "engines": { @@ -3229,14 +3241,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", - "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz", + "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2" + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3247,14 +3259,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz", - "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.14.0.tgz", + "integrity": "sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.12.2", - "@typescript-eslint/utils": "8.12.2", + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/utils": "8.14.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -3272,9 +3284,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz", - "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz", + "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==", "dev": true, "license": "MIT", "engines": { @@ -3286,14 +3298,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", - "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", + "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -3315,16 +3327,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz", - "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.14.0.tgz", + "integrity": "sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.12.2", - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/typescript-estree": "8.12.2" + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3338,13 +3350,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", - "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz", + "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/types": "8.14.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -3376,9 +3388,9 @@ "license": "ISC" }, "node_modules/@vitest/coverage-v8": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.4.tgz", - "integrity": "sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.5.tgz", + "integrity": "sha512-/RoopB7XGW7UEkUndRXF87A9CwkoZAJW01pj8/3pgmDVsjMH2IKy6H1A38po9tmUlwhSyYs0az82rbKd9Yaynw==", "dev": true, "license": "MIT", "dependencies": { @@ -3391,7 +3403,7 @@ "istanbul-reports": "^3.1.7", "magic-string": "^0.30.12", "magicast": "^0.3.5", - "std-env": "^3.7.0", + "std-env": "^3.8.0", "test-exclude": "^7.0.1", "tinyrainbow": "^1.2.0" }, @@ -3399,8 +3411,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "2.1.4", - "vitest": "2.1.4" + "@vitest/browser": "2.1.5", + "vitest": "2.1.5" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -3409,9 +3421,9 @@ } }, "node_modules/@vitest/eslint-plugin": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.1.7.tgz", - "integrity": "sha512-pTWGW3y6lH2ukCuuffpan6kFxG6nIuoesbhMiQxskyQMRcCN5t9SXsKrNHvEw3p8wcCsgJoRqFZVkOTn6TjclA==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.1.10.tgz", + "integrity": "sha512-uScH5Kz5v32vvtQYB2iodpoPg2mGASK+VKpjlc2IUgE0+16uZKqVKi2vQxjxJ6sMCQLBs4xhBFZlmZBszsmfKQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -3430,14 +3442,14 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.4.tgz", - "integrity": "sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.5.tgz", + "integrity": "sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.4", - "@vitest/utils": "2.1.4", + "@vitest/spy": "2.1.5", + "@vitest/utils": "2.1.5", "chai": "^5.1.2", "tinyrainbow": "^1.2.0" }, @@ -3446,13 +3458,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.4.tgz", - "integrity": "sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.5.tgz", + "integrity": "sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.4", + "@vitest/spy": "2.1.5", "estree-walker": "^3.0.3", "magic-string": "^0.30.12" }, @@ -3483,9 +3495,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.4.tgz", - "integrity": "sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.5.tgz", + "integrity": "sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==", "dev": true, "license": "MIT", "dependencies": { @@ -3496,13 +3508,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.4.tgz", - "integrity": "sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.5.tgz", + "integrity": "sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.4", + "@vitest/utils": "2.1.5", "pathe": "^1.1.2" }, "funding": { @@ -3510,13 +3522,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.4.tgz", - "integrity": "sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.5.tgz", + "integrity": "sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.4", + "@vitest/pretty-format": "2.1.5", "magic-string": "^0.30.12", "pathe": "^1.1.2" }, @@ -3525,9 +3537,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.4.tgz", - "integrity": "sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.5.tgz", + "integrity": "sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==", "dev": true, "license": "MIT", "dependencies": { @@ -3538,13 +3550,13 @@ } }, "node_modules/@vitest/utils": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.4.tgz", - "integrity": "sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.5.tgz", + "integrity": "sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.4", + "@vitest/pretty-format": "2.1.5", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" }, @@ -4477,9 +4489,9 @@ "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", "devOptional": true, "license": "MIT", "dependencies": { @@ -4826,27 +4838,27 @@ } }, "node_modules/eslint": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz", - "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz", + "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.18.0", - "@eslint/core": "^0.7.0", - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.14.0", - "@eslint/plugin-kit": "^0.2.0", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.15.0", + "@eslint/plugin-kit": "^0.2.3", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.0", + "@humanwhocodes/retry": "^0.4.1", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.5", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.2.0", @@ -4865,8 +4877,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -4970,6 +4981,28 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-json-compat-utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/eslint-json-compat-utils/-/eslint-json-compat-utils-0.2.1.tgz", + "integrity": "sha512-YzEodbDyW8DX8bImKhAcCeu/L31Dd/70Bidx2Qex9OFUtgzXLqtfWL4Hr5fM/aCCB8QUZLuJur0S9k6UfgFkfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esquery": "^1.6.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": "*", + "jsonc-eslint-parser": "^2.4.0" + }, + "peerDependenciesMeta": { + "@eslint/json": { + "optional": true + } + } + }, "node_modules/eslint-merge-processors": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/eslint-merge-processors/-/eslint-merge-processors-0.1.0.tgz", @@ -5067,9 +5100,9 @@ } }, "node_modules/eslint-plugin-import-x": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.4.0.tgz", - "integrity": "sha512-me58aWTjdkPtgmOzPe+uP0bebpN5etH4bJRnYzy85Rn9g/3QyASg6kTCqdwNzyaJRqMI2ii2o8s01P2LZpREHg==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.4.2.tgz", + "integrity": "sha512-mDRXPSLQ0UQZQw91QdG4/qZT6hgeW2MJTczAbgPseUZuPEtIjjdPOolXroRkulnOn3fzj6gNgvk+wchMJiHElg==", "dev": true, "license": "MIT", "dependencies": { @@ -5092,9 +5125,9 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "50.4.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.4.3.tgz", - "integrity": "sha512-uWtwFxGRv6B8sU63HZM5dAGDhgsatb+LONwmILZJhdRALLOkCX2HFZhdL/Kw2ls8SQMAVEfK+LmnEfxInRN8HA==", + "version": "50.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.5.0.tgz", + "integrity": "sha512-xTkshfZrUbiSHXBwZ/9d5ulZ2OcHXxSvm/NPo494H/hadLRJwOq5PMV0EUpMqsb9V+kQo+9BAgi6Z7aJtdBp2A==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -5133,14 +5166,15 @@ } }, "node_modules/eslint-plugin-jsonc": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.16.0.tgz", - "integrity": "sha512-Af/ZL5mgfb8FFNleH6KlO4/VdmDuTqmM+SPnWcdoWywTetv7kq+vQe99UyQb9XO3b0OWLVuTH7H0d/PXYCMdSg==", + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.18.1.tgz", + "integrity": "sha512-6qY8zDpxOwPQNcr8eZ+RxwGX6IPHws5/Qef7aBEjER8rB9+UMB6zQWVIVcbP7xzFmEMHAesNFPe/sIlU4c78dg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "eslint-compat-utils": "^0.5.0", + "eslint-compat-utils": "^0.6.0", + "eslint-json-compat-utils": "^0.2.1", "espree": "^9.6.1", "graphemer": "^1.4.0", "jsonc-eslint-parser": "^2.0.4", @@ -5157,6 +5191,22 @@ "eslint": ">=6.0.0" } }, + "node_modules/eslint-plugin-jsonc/node_modules/eslint-compat-utils": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.0.tgz", + "integrity": "sha512-1vVBdI/HLS6HTHVQCJGlN+LOF0w1Rs/WB9se23mQr84cRM0iMM8PulMFFhQdQ1BvS0cGwjpis4xziI91Rk0l6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, "node_modules/eslint-plugin-jsonc/node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -5202,13 +5252,13 @@ } }, "node_modules/eslint-plugin-n": { - "version": "17.12.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.12.0.tgz", - "integrity": "sha512-zNAtz/erDn0v78bIY3MASSQlyaarV4IOTvP5ldHsqblRFrXriikB6ghkDTkHjUad+nMRrIbOy9euod2azjRfBg==", + "version": "17.13.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.13.2.tgz", + "integrity": "sha512-MhBAKkT01h8cOXcTBTlpuR7bxH5OBUNpUXefsvwSVEy46cY4m/Kzr2osUCQvA3zJFD6KuCeNNDv0+HDuWk/OcA==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", + "@eslint-community/eslint-utils": "^4.4.1", "enhanced-resolve": "^5.17.1", "eslint-plugin-es-x": "^7.8.0", "get-tsconfig": "^4.8.1", @@ -5369,9 +5419,9 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "9.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.30.0.tgz", - "integrity": "sha512-CyqlRgShvljFkOeYK8wN5frh/OGTvkj1S7wlr2Q2pUvwq+X5VYiLd6ZjujpgSgLnys2W8qrBLkXQ41SUYaoPIQ==", + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.31.0.tgz", + "integrity": "sha512-aYMUCgivhz1o4tLkRHj5oq9YgYPM4/EJc0M7TAKRLCUA5OYxRLAhYEVD2nLtTwLyixEFI+/QXSvKU9ESZFgqjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8774,21 +8824,6 @@ "node": ">=0.10.0" } }, - "node_modules/npm-check-updates": { - "version": "17.1.9", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-17.1.9.tgz", - "integrity": "sha512-Gfv5S8NNJKTilM1gesFNYka6bUaBs5LnVyPjApXPQphHijrlLFDMw1uSmwYMZbvJSkLZSOx03e8CHcG0Td5SMA==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "ncu": "build/cli.js", - "npm-check-updates": "build/cli.js" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0", - "npm": ">=8.12.1" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -9815,9 +9850,9 @@ } }, "node_modules/rollup": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.3.tgz", - "integrity": "sha512-HBW896xR5HGmoksbi3JBDtmVzWiPAYqp7wip50hjQ67JbDz61nyoMPdqu1DvVW9asYb2M65Z20ZHsyJCMqMyDg==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.0.tgz", + "integrity": "sha512-nrOD/RrnAMssruS7bPa7MYpEuH6tUpOa43NLtxQiLKem0An8HZyXun5Ndig6JzbkJoIbaKkt85V67VCaQ59GyA==", "dev": true, "license": "MIT", "dependencies": { @@ -9831,24 +9866,24 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.24.3", - "@rollup/rollup-android-arm64": "4.24.3", - "@rollup/rollup-darwin-arm64": "4.24.3", - "@rollup/rollup-darwin-x64": "4.24.3", - "@rollup/rollup-freebsd-arm64": "4.24.3", - "@rollup/rollup-freebsd-x64": "4.24.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.24.3", - "@rollup/rollup-linux-arm-musleabihf": "4.24.3", - "@rollup/rollup-linux-arm64-gnu": "4.24.3", - "@rollup/rollup-linux-arm64-musl": "4.24.3", - "@rollup/rollup-linux-powerpc64le-gnu": "4.24.3", - "@rollup/rollup-linux-riscv64-gnu": "4.24.3", - "@rollup/rollup-linux-s390x-gnu": "4.24.3", - "@rollup/rollup-linux-x64-gnu": "4.24.3", - "@rollup/rollup-linux-x64-musl": "4.24.3", - "@rollup/rollup-win32-arm64-msvc": "4.24.3", - "@rollup/rollup-win32-ia32-msvc": "4.24.3", - "@rollup/rollup-win32-x64-msvc": "4.24.3", + "@rollup/rollup-android-arm-eabi": "4.27.0", + "@rollup/rollup-android-arm64": "4.27.0", + "@rollup/rollup-darwin-arm64": "4.27.0", + "@rollup/rollup-darwin-x64": "4.27.0", + "@rollup/rollup-freebsd-arm64": "4.27.0", + "@rollup/rollup-freebsd-x64": "4.27.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.27.0", + "@rollup/rollup-linux-arm-musleabihf": "4.27.0", + "@rollup/rollup-linux-arm64-gnu": "4.27.0", + "@rollup/rollup-linux-arm64-musl": "4.27.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.27.0", + "@rollup/rollup-linux-riscv64-gnu": "4.27.0", + "@rollup/rollup-linux-s390x-gnu": "4.27.0", + "@rollup/rollup-linux-x64-gnu": "4.27.0", + "@rollup/rollup-linux-x64-musl": "4.27.0", + "@rollup/rollup-win32-arm64-msvc": "4.27.0", + "@rollup/rollup-win32-ia32-msvc": "4.27.0", + "@rollup/rollup-win32-x64-msvc": "4.27.0", "fsevents": "~2.3.2" } }, @@ -10263,9 +10298,9 @@ "license": "MIT" }, "node_modules/std-env": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", "dev": true, "license": "MIT" }, @@ -10491,13 +10526,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -10793,9 +10821,9 @@ "license": "MIT" }, "node_modules/undici": { - "version": "6.20.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.20.1.tgz", - "integrity": "sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.0.tgz", + "integrity": "sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==", "license": "MIT", "engines": { "node": ">=18.17" @@ -11030,9 +11058,9 @@ } }, "node_modules/vite": { - "version": "5.4.10", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", - "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11090,14 +11118,15 @@ } }, "node_modules/vite-node": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.4.tgz", - "integrity": "sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.5.tgz", + "integrity": "sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", "pathe": "^1.1.2", "vite": "^5.0.0" }, @@ -11112,31 +11141,31 @@ } }, "node_modules/vitest": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.4.tgz", - "integrity": "sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.5.tgz", + "integrity": "sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "2.1.4", - "@vitest/mocker": "2.1.4", - "@vitest/pretty-format": "^2.1.4", - "@vitest/runner": "2.1.4", - "@vitest/snapshot": "2.1.4", - "@vitest/spy": "2.1.4", - "@vitest/utils": "2.1.4", + "@vitest/expect": "2.1.5", + "@vitest/mocker": "2.1.5", + "@vitest/pretty-format": "^2.1.5", + "@vitest/runner": "2.1.5", + "@vitest/snapshot": "2.1.5", + "@vitest/spy": "2.1.5", + "@vitest/utils": "2.1.5", "chai": "^5.1.2", "debug": "^4.3.7", "expect-type": "^1.1.0", "magic-string": "^0.30.12", "pathe": "^1.1.2", - "std-env": "^3.7.0", + "std-env": "^3.8.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.1", "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.4", + "vite-node": "2.1.5", "why-is-node-running": "^2.3.0" }, "bin": { @@ -11151,8 +11180,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.4", - "@vitest/ui": "2.1.4", + "@vitest/browser": "2.1.5", + "@vitest/ui": "2.1.5", "happy-dom": "*", "jsdom": "*" }, diff --git a/package.json b/package.json index dd6443a1..91405f7d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "node-switchbot", "type": "module", - "version": "3.3.0", + "version": "3.4.0", "description": "The node-switchbot is a Node.js module which allows you to control your Switchbot Devices through Bluetooth (BLE).", "author": "OpenWonderLabs (https://github.com/OpenWonderLabs)", "license": "MIT", @@ -36,7 +36,6 @@ }, "scripts": { "check": "npm install && npm outdated", - "update": "ncu -u && npm update && npm install", "lint": "eslint src/**/*.ts", "fix": "eslint src/**/*.ts --fix", "watch": "npm run build && npm link && nodemon", @@ -53,33 +52,32 @@ "dependencies": { "@stoprocent/noble": "^1.15.1", "async-mutex": "^0.5.0", - "undici": "^6.20.1" + "undici": "^6.21.0" }, "optionalDependencies": { "@stoprocent/bluetooth-hci-socket": "^1.4.1" }, "devDependencies": { - "@antfu/eslint-config": "^3.8.0", + "@antfu/eslint-config": "^3.9.1", "@types/aes-js": "^3.1.4", "@types/debug": "^4.1.12", "@types/fs-extra": "^11.0.4", "@types/jest": "^29.5.14", "@types/mdast": "^4.0.4", - "@types/node": "^22.8.6", + "@types/node": "^22.9.0", "@types/semver": "^7.5.8", "@types/sinon": "^17.0.3", "@types/source-map-support": "^0.5.10", - "@vitest/coverage-v8": "^2.1.4", - "eslint": "^9.14.0", + "@vitest/coverage-v8": "^2.1.5", + "eslint": "^9.15.0", "eslint-plugin-format": "^0.1.2", "jest": "^29.7.0", "nodemon": "^3.1.7", - "npm-check-updates": "^17.1.9", "shx": "^0.3.4", "sinon": "^19.0.2", "ts-node": "^10.9.2", "typedoc": "^0.26.11", "typescript": "^5.6.3", - "vitest": "^2.1.4" + "vitest": "^2.1.5" } } diff --git a/src/advertising.ts b/src/advertising.ts index 8300dcd1..c525f182 100644 --- a/src/advertising.ts +++ b/src/advertising.ts @@ -21,6 +21,8 @@ import { WoLeak } from './device/woleak.js' import { WoPlugMiniUS } from './device/woplugmini.js' import { WoPlugMiniJP } from './device/woplugmini_jp.js' import { WoPresence } from './device/wopresence.js' +import { WoRelaySwitch1Plus } from './device/worelayswitch1plus.js' +import { WoRelaySwitch1PM } from './device/worelayswitch1pm.js' import { WoSensorTH } from './device/wosensorth.js' import { WoSensorTHPlus } from './device/wosensorthplus.js' import { WoSensorTHPro } from './device/wosensorthpro.js' @@ -155,6 +157,10 @@ export class Advertising { return WoBlindTilt.parseServiceData(serviceData, manufacturerData, emitLog) case SwitchBotBLEModel.Leak: return WoLeak.parseServiceData(serviceData, manufacturerData, emitLog) + case SwitchBotBLEModel.RelaySwitch1PM: + return WoRelaySwitch1PM.parseServiceData(serviceData, manufacturerData, emitLog) + case SwitchBotBLEModel.RelaySwitch1Plus: + return WoRelaySwitch1Plus.parseServiceData(serviceData, manufacturerData, emitLog) default: emitLog('debug', `[parseAdvertising.${model}] return null, model "${model}" not available!`) return null diff --git a/src/device.ts b/src/device.ts index 6ebc1199..cd1c58f8 100644 --- a/src/device.ts +++ b/src/device.ts @@ -159,16 +159,16 @@ export class SwitchbotDevice extends EventEmitter { * @returns A Promise that resolves with the device characteristics. */ public async getCharacteristics(): Promise { - const TIMEOUT_DURATION = 5000; + const TIMEOUT_DURATION = 5000 const timeoutPromise = new Promise((_, reject) => { - setTimeout(() => { - reject(new Error('Failed to discover services and characteristics: TIMEOUT')); - }, TIMEOUT_DURATION); - }); + setTimeout(() => { + reject(new Error('Failed to discover services and characteristics: TIMEOUT')) + }, TIMEOUT_DURATION) + }) try { - const services = await Promise.race([this.discoverServices(), timeoutPromise]) as Noble.Service[]; + const services = await Promise.race([this.discoverServices(), timeoutPromise]) as Noble.Service[] const chars: Chars = { write: null, notify: null, device: null } for (const service of services) { @@ -192,7 +192,7 @@ export class SwitchbotDevice extends EventEmitter { return chars } catch (error) { - throw new Error((error as Error).message || 'An error occurred while discovering characteristics.'); + throw new Error((error as Error).message || 'An error occurred while discovering characteristics.') } } diff --git a/src/device/woblindtilt.ts b/src/device/woblindtilt.ts index 92d5642b..0f19e817 100644 --- a/src/device/woblindtilt.ts +++ b/src/device/woblindtilt.ts @@ -44,7 +44,7 @@ export class WoBlindTilt extends SwitchbotDevice { const lightLevel = (byte6.readUInt8(1) >> 4) & 0b00001111 const calibration = !!(byte6.readUInt8(1) & 0b00000001) const sequenceNumber = byte6.readUInt8(0) - const battery = serviceData.length > 2 ? byte2 & 0b01111111 : null + const battery = serviceData.length > 2 ? byte2 & 0b01111111 : 0 const data: blindTiltServiceData = { model: SwitchBotBLEModel.BlindTilt, diff --git a/src/device/wocurtain.ts b/src/device/wocurtain.ts index 2c580791..bec67621 100644 --- a/src/device/wocurtain.ts +++ b/src/device/wocurtain.ts @@ -82,14 +82,14 @@ export class WoCurtain extends SwitchbotDevice { const inMotion = Boolean(deviceData.readUInt8(0) & 0b10000000) const lightLevel = (deviceData.readUInt8(1) >> 4) & 0b00001111 const deviceChain = deviceData.readUInt8(1) & 0b00000111 - const battery = batteryData !== null ? batteryData & 0b01111111 : null + const battery = batteryData !== null ? batteryData & 0b01111111 : 0 const data: curtain3ServiceData = { model: SwitchBotBLEModel.Curtain3, modelName: SwitchBotBLEModelName.Curtain3, modelFriendlyName: SwitchBotBLEModelFriendlyName.Curtain3, calibration, - battery: battery ?? 0, + battery, inMotion, position: reverse ? 100 - position : position, lightLevel, diff --git a/src/device/worelayswitch1plus.ts b/src/device/worelayswitch1plus.ts new file mode 100644 index 00000000..23da1388 --- /dev/null +++ b/src/device/worelayswitch1plus.ts @@ -0,0 +1,168 @@ +/* Copyright(C) 2024, donavanbecker (https://github.com/donavanbecker). All rights reserved. + * + * worelayswitch1plus.ts: Switchbot BLE API registration. + */ +import type { relaySwitch1PlusServiceData } from '../types/bledevicestatus.js' +import type { NobleTypes } from '../types/types.js' + +import { Buffer } from 'node:buffer' +import { type Cipher, createCipheriv } from 'node:crypto' + +import { SwitchbotDevice } from '../device.js' +import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from '../types/types.js' + +const COMMAND_HEADER = '57' +const COMMAND_GET_CK_IV = `${COMMAND_HEADER}0f2103` +const COMMAND_TURN_OFF = `${COMMAND_HEADER}0f70010000` +const COMMAND_TURN_ON = `${COMMAND_HEADER}0f70010100` +const COMMAND_TOGGLE = `${COMMAND_HEADER}0f70010200` +const COMMAND_GET_VOLTAGE_AND_CURRENT = `${COMMAND_HEADER}0f7106000000` +// const PASSIVE_POLL_INTERVAL = 1 * 60 + +/** + * Class representing a WoRelaySwitch1Plus device. + * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/ + */ +export class WoRelaySwitch1Plus extends SwitchbotDevice { + private _iv: Buffer | null = null + private _cipher: Cipher | null = null + private _keyId: string + private _encryptionKey: Buffer + + constructor(peripheral: NobleTypes['peripheral'], noble: NobleTypes['noble']) { + super(peripheral, noble) + const keyId = peripheral.advertisement.localName?.slice(-2) || '' + const encryptionKey = peripheral.advertisement.localName?.slice(0, 32) || '' + if (keyId.length === 0) { + throw new Error('key_id is missing') + } else if (keyId.length !== 2) { + throw new Error('key_id is invalid') + } + if (encryptionKey.length === 0) { + throw new Error('encryption_key is missing') + } else if (encryptionKey.length !== 32) { + throw new Error('encryption_key is invalid') + } + this._keyId = keyId + this._encryptionKey = Buffer.from(encryptionKey, 'hex') + } + + /** + * Parses the service data for WoRelaySwitch1Plus. + * @param {Buffer} serviceData - The service data buffer. + * @param {Buffer} manufacturerData - The manufacturer data buffer. + * @param {Function} emitLog - The function to emit log messages. + * @returns {Promise} - Parsed service data or null if invalid. + */ + static async parseServiceData( + serviceData: Buffer, + manufacturerData: Buffer, + emitLog: (level: string, message: string) => void, + ): Promise { + if (serviceData.length < 8 || manufacturerData.length === null) { + emitLog('debugerror', `[parseServiceDataForWoRelaySwitch1Plus] Buffer length ${serviceData.length} < 8!`) + return null + } + + const data: relaySwitch1PlusServiceData = { + model: SwitchBotBLEModel.RelaySwitch1Plus, + modelName: SwitchBotBLEModelName.RelaySwitch1Plus, + modelFriendlyName: SwitchBotBLEModelFriendlyName.RelaySwitch1Plus, + mode: true, // for compatibility, useless + state: !!(manufacturerData[7] & 0b10000000), + sequence_number: manufacturerData[6], + } + + return data + } + + async turnOn(): Promise { + const result = await this._sendCommand(COMMAND_TURN_ON) + const ok = this._checkCommandResult(result, 0, new Set([1])) + if (ok) { + this._overrideState({ isOn: true }) + this._fireCallbacks() + } + return ok + } + + async turnOff(): Promise { + const result = await this._sendCommand(COMMAND_TURN_OFF) + const ok = this._checkCommandResult(result, 0, new Set([1])) + if (ok) { + this._overrideState({ isOn: false }) + this._fireCallbacks() + } + return ok + } + + async toggle(): Promise { + const result = await this._sendCommand(COMMAND_TOGGLE) + return this._checkCommandResult(result, 0, new Set([1])) + } + + async getVoltageAndCurrent(): Promise<{ voltage: number, current: number } | null> { + const result = await this._sendCommand(COMMAND_GET_VOLTAGE_AND_CURRENT) + const ok = this._checkCommandResult(result, 0, new Set([1])) + if (ok) { + return { + voltage: result ? (result[9] << 8) + result[10] : 0, + current: result ? (result[11] << 8) + result[12] : 0, + } + } + return null + } + + private async _sendCommand(key: string, retry: number | null = null, encrypt: boolean = true): Promise { + if (!encrypt) { + return await super._sendCommand(`${key.slice(0, 2)}000000${key.slice(2)}`, retry) + } + + const result = await this._ensureEncryptionInitialized() + if (!result) { + return null + } + + const encrypted = key.slice(0, 2) + this._keyId + this._iv!.slice(0, 2).toString('hex') + this._encrypt(key.slice(2)) + const response = await super._sendCommand(encrypted, retry) + return response ? Buffer.concat([response.slice(0, 1), this._decrypt(response.slice(4))]) : null + } + + private async _ensureEncryptionInitialized(): Promise { + if (this._iv !== null) { + return true + } + + const result = await this._sendCommand(COMMAND_GET_CK_IV + this._keyId, null, false) + const ok = this._checkCommandResult(result, 0, new Set([1])) + if (ok) { + this._iv = result!.slice(4) + } + return ok + } + + private _getCipher(): Cipher { + if (this._cipher === null) { + this._cipher = createCipheriv('aes-128-ctr', this._encryptionKey, this._iv!) + } + return this._cipher + } + + private _encrypt(data: string): string { + if (data.length === 0) { + return '' + } + const cipher = this._getCipher() + const encrypted = Buffer.concat([cipher.update(Buffer.from(data, 'hex')), cipher.final()]) + return encrypted.toString('hex') + } + + private _decrypt(data: Buffer): Buffer { + if (data.length === 0) { + return Buffer.alloc(0) + } + const decipher = createCipheriv('aes-128-ctr', this._encryptionKey, this._iv!) + const decrypted = Buffer.concat([decipher.update(data), decipher.final()]) + return decrypted + } +} diff --git a/src/device/worelayswitch1pm.ts b/src/device/worelayswitch1pm.ts new file mode 100644 index 00000000..dac842f8 --- /dev/null +++ b/src/device/worelayswitch1pm.ts @@ -0,0 +1,173 @@ +/* Copyright(C) 2024, donavanbecker (https://github.com/donavanbecker). All rights reserved. + * + * worelayswitch1pm.ts: Switchbot BLE API registration. + */ +import type { Cipher } from 'node:crypto' + +import type { relaySwitch1PMServiceData } from '../types/bledevicestatus.js' +import type { NobleTypes } from '../types/types.js' + +import { Buffer } from 'node:buffer' +import { createCipheriv } from 'node:crypto' + +import { SwitchbotDevice } from '../device.js' +import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from '../types/types.js' + +const COMMAND_HEADER = '57' +const COMMAND_GET_CK_IV = `${COMMAND_HEADER}0f2103` +const COMMAND_TURN_OFF = `${COMMAND_HEADER}0f70010000` +const COMMAND_TURN_ON = `${COMMAND_HEADER}0f70010100` +const COMMAND_TOGGLE = `${COMMAND_HEADER}0f70010200` +const COMMAND_GET_VOLTAGE_AND_CURRENT = `${COMMAND_HEADER}0f7106000000` +// const PASSIVE_POLL_INTERVAL = 1 * 60 + +/** + * Class representing a WoRelaySwitch1PM device. + * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/ + */ +export class WoRelaySwitch1PM extends SwitchbotDevice { + private _iv: Buffer | null = null + private _cipher: Cipher | null = null + private _keyId: string + private _encryptionKey: Buffer + + constructor(peripheral: NobleTypes['peripheral'], noble: NobleTypes['noble']) { + super(peripheral, noble) + const keyId = peripheral.advertisement.localName?.slice(-2) || '' + const encryptionKey = peripheral.advertisement.localName?.slice(0, 32) || '' + if (keyId.length === 0) { + throw new Error('key_id is missing') + } else if (keyId.length !== 2) { + throw new Error('key_id is invalid') + } + if (encryptionKey.length === 0) { + throw new Error('encryption_key is missing') + } else if (encryptionKey.length !== 32) { + throw new Error('encryption_key is invalid') + } + this._keyId = keyId + this._encryptionKey = Buffer.from(encryptionKey, 'hex') + } + + /** + * Parses the service data for WoRelaySwitch1PM. + * @param {Buffer} serviceData - The service data buffer. + * @param {Buffer} manufacturerData - The manufacturer data buffer. + * @param {Function} emitLog - The function to emit log messages. + * @returns {Promise} - Parsed service data or null if invalid. + */ + static async parseServiceData( + serviceData: Buffer, + manufacturerData: Buffer, + emitLog: (level: string, message: string) => void, + ): Promise { + if (serviceData.length < 8 || manufacturerData.length === null) { + emitLog('debugerror', `[parseServiceDataForWoRelaySwitch1PM] Buffer length ${serviceData.length} < 8!`) + return null + } + + const data: relaySwitch1PMServiceData = { + model: SwitchBotBLEModel.RelaySwitch1PM, + modelName: SwitchBotBLEModelName.RelaySwitch1PM, + modelFriendlyName: SwitchBotBLEModelFriendlyName.RelaySwitch1PM, + mode: true, // for compatibility, useless + state: !!(manufacturerData[7] & 0b10000000), + sequence_number: manufacturerData[6], + power: ((manufacturerData[10] << 8) + manufacturerData[11]) / 10, + voltage: 0, + current: 0, + } + + return data + } + + async turnOn(): Promise { + const result = await this._sendCommand(COMMAND_TURN_ON) + const ok = this._checkCommandResult(result, 0, new Set([1])) + if (ok) { + this._overrideState({ isOn: true }) + this._fireCallbacks() + } + return ok + } + + async turnOff(): Promise { + const result = await this._sendCommand(COMMAND_TURN_OFF) + const ok = this._checkCommandResult(result, 0, new Set([1])) + if (ok) { + this._overrideState({ isOn: false }) + this._fireCallbacks() + } + return ok + } + + async toggle(): Promise { + const result = await this._sendCommand(COMMAND_TOGGLE) + return this._checkCommandResult(result, 0, new Set([1])) + } + + async getVoltageAndCurrent(): Promise<{ voltage: number, current: number } | null> { + const result = await this._sendCommand(COMMAND_GET_VOLTAGE_AND_CURRENT) + const ok = this._checkCommandResult(result, 0, new Set([1])) + if (ok) { + return { + voltage: result ? (result[9] << 8) + result[10] : 0, + current: result ? (result[11] << 8) + result[12] : 0, + } + } + return null + } + + private async _sendCommand(key: string, retry: number | null = null, encrypt: boolean = true): Promise { + if (!encrypt) { + return await super._sendCommand(`${key.slice(0, 2)}000000${key.slice(2)}`, retry) + } + + const result = await this._ensureEncryptionInitialized() + if (!result) { + return null + } + + const encrypted = key.slice(0, 2) + this._keyId + this._iv!.slice(0, 2).toString('hex') + this._encrypt(key.slice(2)) + const response = await super._sendCommand(encrypted, retry) + return response ? Buffer.concat([response.slice(0, 1), this._decrypt(response.slice(4))]) : null + } + + private async _ensureEncryptionInitialized(): Promise { + if (this._iv !== null) { + return true + } + + const result = await this._sendCommand(COMMAND_GET_CK_IV + this._keyId, null, false) + const ok = this._checkCommandResult(result, 0, new Set([1])) + if (ok) { + this._iv = result!.slice(4) + } + return ok + } + + private _getCipher(): Cipher { + if (this._cipher === null) { + this._cipher = createCipheriv('aes-128-ctr', this._encryptionKey, this._iv!) + } + return this._cipher + } + + private _encrypt(data: string): string { + if (data.length === 0) { + return '' + } + const cipher = this._getCipher() + const encrypted = Buffer.concat([cipher.update(Buffer.from(data, 'hex')), cipher.final()]) + return encrypted.toString('hex') + } + + private _decrypt(data: Buffer): Buffer { + if (data.length === 0) { + return Buffer.alloc(0) + } + const decipher = createCipheriv('aes-128-ctr', this._encryptionKey, this._iv!) + const decrypted = Buffer.concat([decipher.update(data), decipher.final()]) + return decrypted + } +} diff --git a/src/switchbot-ble.ts b/src/switchbot-ble.ts index fe7d4958..360ed244 100644 --- a/src/switchbot-ble.ts +++ b/src/switchbot-ble.ts @@ -22,6 +22,8 @@ import { WoLeak } from './device/woleak.js' import { WoPlugMiniUS } from './device/woplugmini.js' import { WoPlugMiniJP } from './device/woplugmini_jp.js' import { WoPresence } from './device/wopresence.js' +import { WoRelaySwitch1Plus } from './device/worelayswitch1plus.js' +import { WoRelaySwitch1PM } from './device/worelayswitch1pm.js' import { WoSensorTH } from './device/wosensorth.js' import { WoSensorTHPlus } from './device/wosensorthplus.js' import { WoSensorTHPro } from './device/wosensorthpro.js' @@ -244,6 +246,8 @@ export class SwitchBotBLE extends EventEmitter { case SwitchBotBLEModel.LockPro: return new WoSmartLockPro(peripheral, this.noble) case SwitchBotBLEModel.BlindTilt: return new WoBlindTilt(peripheral, this.noble) case SwitchBotBLEModel.Keypad: return new WoKeypad(peripheral, this.noble) + case SwitchBotBLEModel.RelaySwitch1PM: return new WoRelaySwitch1PM(peripheral, this.noble) + case SwitchBotBLEModel.RelaySwitch1Plus: return new WoRelaySwitch1Plus(peripheral, this.noble) default: return new SwitchbotDevice(peripheral, this.noble) } } diff --git a/src/types/bledevicestatus.ts b/src/types/bledevicestatus.ts index 776d5427..a2a3d7b4 100644 --- a/src/types/bledevicestatus.ts +++ b/src/types/bledevicestatus.ts @@ -171,6 +171,7 @@ export type meterProCO2ServiceData = serviceData & { fahrenheit_mode: boolean humidity: number battery: number + co2: number } export type outdoorMeterServiceData = serviceData & { @@ -229,7 +230,7 @@ export type blindTiltServiceData = serviceData & { modelName: SwitchBotBLEModelName.BlindTilt modelFriendlyName: SwitchBotBLEModelFriendlyName.BlindTilt calibration: boolean - battery: number | null + battery: number inMotion: boolean tilt: number lightLevel: number @@ -328,3 +329,24 @@ export type keypadDetectorServiceData = serviceData & { battery: number low_battery: boolean } + +export type relaySwitch1PMServiceData = serviceData & { + model: SwitchBotBLEModel.RelaySwitch1PM + modelName: SwitchBotBLEModelName.RelaySwitch1PM + modelFriendlyName: SwitchBotBLEModelFriendlyName.RelaySwitch1PM + mode: boolean + state: boolean + sequence_number: number + power: number + voltage: number + current: number +} + +export type relaySwitch1PlusServiceData = serviceData & { + model: SwitchBotBLEModel.RelaySwitch1Plus + modelName: SwitchBotBLEModelName.RelaySwitch1Plus + modelFriendlyName: SwitchBotBLEModelFriendlyName.RelaySwitch1Plus + mode: boolean + state: boolean + sequence_number: number +} diff --git a/src/types/devicestatus.ts b/src/types/devicestatus.ts index 6bdfed0e..0dddee36 100644 --- a/src/types/devicestatus.ts +++ b/src/types/devicestatus.ts @@ -51,6 +51,13 @@ export type meterProStatus = deviceStatus & { humidity: number } +export type meterProCO2Status = deviceStatus & { + temperature: number + battery: number + humidity: number + co2: number +} + export type outdoorMeterStatus = deviceStatus & { battery: number temperature: number diff --git a/src/types/devicewebhookstatus.ts b/src/types/devicewebhookstatus.ts index 44a2897c..bec9c0e2 100644 --- a/src/types/devicewebhookstatus.ts +++ b/src/types/devicewebhookstatus.ts @@ -109,6 +109,13 @@ export type meterProWebhookContext = deviceWebhookContext & { humidity: number } +export type meterProCO2WebhookContext = deviceWebhookContext & { + temperature: number + scale: 'CELSIUS' | 'FAHRENHEIT' + humidity: number + co2: number +} + export type outdoorMeterWebhookContext = deviceWebhookContext & { temperature: number scale: 'CELSIUS' | 'FAHRENHEIT' diff --git a/src/types/types.ts b/src/types/types.ts index bb139ce1..5b7526bd 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -7,7 +7,7 @@ import type { Buffer } from 'node:buffer' import type * as Noble from '@stoprocent/noble' import type { SwitchbotDevice } from '../device.js' -import type { batteryCirculatorFanServiceData, blindTiltServiceData, botServiceData, ceilingLightProServiceData, ceilingLightServiceData, colorBulbServiceData, contactSensorServiceData, curtain3ServiceData, curtainServiceData, hub2ServiceData, humidifierServiceData, keypadDetectorServiceData, lockProServiceData, lockServiceData, meterPlusServiceData, meterProCO2ServiceData, meterProServiceData, meterServiceData, motionSensorServiceData, outdoorMeterServiceData, plugMiniJPServiceData, plugMiniUSServiceData, robotVacuumCleanerServiceData, stripLightServiceData, waterLeakDetectorServiceData } from '../index.js' +import type { batteryCirculatorFanServiceData, blindTiltServiceData, botServiceData, ceilingLightProServiceData, ceilingLightServiceData, colorBulbServiceData, contactSensorServiceData, curtain3ServiceData, curtainServiceData, hub2ServiceData, humidifierServiceData, keypadDetectorServiceData, lockProServiceData, lockServiceData, meterPlusServiceData, meterProCO2ServiceData, meterProServiceData, meterServiceData, motionSensorServiceData, outdoorMeterServiceData, plugMiniJPServiceData, plugMiniUSServiceData, relaySwitch1PlusServiceData, relaySwitch1PMServiceData, robotVacuumCleanerServiceData, stripLightServiceData, waterLeakDetectorServiceData } from '../index.js' export type MacAddress = string @@ -115,6 +115,8 @@ export enum SwitchBotBLEModel { BlindTilt = 'x', Leak = '3', Keypad = 'y', + RelaySwitch1PM = '<', + RelaySwitch1Plus = ';', Unknown = 'Unknown', } @@ -141,6 +143,8 @@ export enum SwitchBotBLEModelName { CeilingLightPro = 'WoCeilingLightPro', Leak = 'WoLeakDetector', Keypad = 'WoKeypad', + RelaySwitch1PM = 'WoRelaySwitch1PM', + RelaySwitch1Plus = 'WoRelaySwitch1Plus', Unknown = 'Unknown', } @@ -167,6 +171,8 @@ export enum SwitchBotBLEModelFriendlyName { CeilingLightPro = 'Ceiling Light Pro', Leak = 'Water Detector', Keypad = 'Keypad', + RelaySwitch1PM = 'Relay Switch 1PM', + RelaySwitch1Plus = 'Relay Switch 1 Plus', Unknown = 'Unknown', } @@ -204,7 +210,7 @@ export interface ad { id: string address: string rssi: number - serviceData: botServiceData | colorBulbServiceData | contactSensorServiceData | curtainServiceData | curtain3ServiceData | stripLightServiceData | lockServiceData | lockProServiceData | meterServiceData | meterPlusServiceData | meterProServiceData | meterProCO2ServiceData | motionSensorServiceData | outdoorMeterServiceData | plugMiniUSServiceData | plugMiniJPServiceData | blindTiltServiceData | ceilingLightServiceData | ceilingLightProServiceData | hub2ServiceData | batteryCirculatorFanServiceData | waterLeakDetectorServiceData | humidifierServiceData | robotVacuumCleanerServiceData | keypadDetectorServiceData + serviceData: botServiceData | colorBulbServiceData | contactSensorServiceData | curtainServiceData | curtain3ServiceData | stripLightServiceData | lockServiceData | lockProServiceData | meterServiceData | meterPlusServiceData | meterProServiceData | meterProCO2ServiceData | motionSensorServiceData | outdoorMeterServiceData | plugMiniUSServiceData | plugMiniJPServiceData | blindTiltServiceData | ceilingLightServiceData | ceilingLightProServiceData | hub2ServiceData | batteryCirculatorFanServiceData | waterLeakDetectorServiceData | humidifierServiceData | robotVacuumCleanerServiceData | keypadDetectorServiceData | relaySwitch1PMServiceData | relaySwitch1PlusServiceData [key: string]: unknown }