diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..7a73a41b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 80da8e5d..d6d1d7bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,29 @@ All notable changes to this project will be documented in this file. This project uses [Semantic Versioning](https://semver.org/) +## [3.6.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v3.6.0) (2025-08-27) + +### What's Changed +- Housekeeping and update dependencies +- **BREAKING**: Fixed compatibility with `@stoprocent/noble` v2.3.4 and `@stoprocent/bluetooth-hci-socket` v2.2.3 +- **Enhancement**: Added comprehensive input validation utilities (`ValidationUtils` class) +- **Enhancement**: Improved error handling with more descriptive error messages +- **Enhancement**: Added command constants to replace magic numbers for better maintainability +- **Enhancement**: Enhanced type safety with proper TypeScript assertions +- **Enhancement**: Improved buffer validation with configurable minimum length +- **Enhancement**: Better resource cleanup in error scenarios with try-catch-finally blocks +- **Enhancement**: Removed deprecated parameter checker in favor of modern validation +- **Fix**: Updated `noble._state` to `noble.state` for compatibility with newer noble versions +- **Fix**: Enhanced NobleTypes interface to properly support newer noble version +- **Code Quality**: Improved JSDoc documentation throughout device classes +- **Code Quality**: Standardized validation across all device classes +- **Docs**: Updated BLE.md and OpenAPI.md for new validation and error handling features +- **Internal**: Refactored device instantiation logic for consistency +- **Internal**: Improved test coverage for validation utilities and error scenarios +- **Chore**: Synced package scripts and documentation with latest development workflow + +**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v3.5.1...v3.6.0 + ## [3.5.1](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v3.5.1) (2025-07-25) ### What's Changed diff --git a/docs/assets/hierarchy.js b/docs/assets/hierarchy.js index 8928e356..8c090936 100644 --- a/docs/assets/hierarchy.js +++ b/docs/assets/hierarchy.js @@ -1 +1 @@ -window.hierarchyData = "eJyVlkFP2zAYQP+Lzx8jn53YTo5jB7aBiFYQB8QhTQy1SBzkOJsQ6n+fomg0LhB7p0rty3u2Gyd+Jbbv3UCKOypQAEV+D8Sqh1bVTvdmIMUrocinD1N1ihRk80e7erft3Tf1W9eKAHnSpiEFUglktC0pSN1Ww6CG0yP0y851LYH5Z1IQNzQn07Un8xdA6p1uG6sMKe4Y45BSCRlK4JgBlwkITkGmCeRJBrmUgIlAQGQCkCYMkPIckKUSMKUCMM0pYMYzQM4koJgQwSWgZAxQ5hIw5ynQyUJRyPs9EMaWU73tv7baNNe6dWvTXGCBKe6BpFT6hbHdBuRjuw17M/S9Z0q32jxe6MddYPBLMtzhmPmd3riqDiVmKMIuE98+WldpE7DPUNguOPXs55Vp1tUTEfbK1B/1+bilAe+4pWFvnmRH3k6HvJ2O8Er5zhsccKcjRjxtSU/9/WqjzNDb6/N1/4GLiCATXuSnenmuAv/kzETIacI8+YWqntbVExEj5rknLtvx8VIb/aNc1x+4iAhL5YeRm01c5GYTEUmpv/6lVYMy6++CAxUTyP2N+ku11cv8NsH1yJKMCGU8+zRUXsanysuIGGfyKNb1LrBoMxMhF0e3bdy2+49NJ7j8MFC24xAXmciIkGQfz6S0fWTH9jGZ/JP52P7sKvA09NmIWM5TP9ZV1l30deDJ8oaFE/T4yft2bXjdFmRECMXRwjmrnwOFCYlQC1w+WBr/gEkz/s+sjVP2oarVcNqsHy3fSP94SSUT03lv+nxX3LjKLe7pte6MRtT3+/1fvJagpQ==" \ No newline at end of file +window.hierarchyData = "eJyVlsFO3DAQht/F56FkbCexc2vpgbYgoi6IA+KQTQxr4U2Q47RCaN+9iqIucQqxe1rt7p/vi0cee16J7TrXk+KOJVQAlek9EKsejKqd7tqeFK+EynT8aKu9IgXZ/Nau3m0791X90rUiQJ5025ACqQAyWEMKUpuq71V/uoh+2rm9ITD9TQri+uZkfPZk+gFIvdOmsaolxR3HDNJEQCoFZDKFPEtAcAqSJiBFCpikCSAyBkgxA6SCAjIuADlyQC4ZYJpTwIzlgDkmgLlggGKMSGSAMhdAE86AYiKBjhTKKAPKx69c4v0BCMdstvTb7ovRbXOtjVtb9iwWWPIBSJoI3zCYbQA+mG0EV/rcM6WNbh8v9OMu8PLzZNiTeZvjtjvrWlfVIcUUCtPzLPHpg3WVbgP0KRSmC049+nnVNuvoMRHmSuq/9fmwpQHusKURXJEuuSzIZWHu2EwL8F6HwHsdAUbG/gEHS7HXEbUY295Df7vaqLbv7PX5Ov8tFyMR/g75oV6eq8AemTIRcMb9Fr1Q1dM6ekxEgDlyD1ya4fFSt/p7uY5/y8VIJHtXcrOJk9xsIiRp7te/tKpX7fqt85aKEGQs9wQ/lalepnsL1yXzZIQox+RDUXkZryovY2SCLWT7zgWKNmUi4GKxbePa7j+aTiJ7V1CaoY+TjMkYUf7+SkrbRXpsF9aMQ8ZHmrOrwGnoZyNkmEhftq+su+jqwMlyjEUolifv8dlw3WbJCBGji8I5q58DhjESgeaLMn3WthysftDKrgtmwRiNxI8019XWBFpymQ4LxyF+Jmz8EZ2m2V+Jbp2yD1Wt+tNmfTg/Jv0BnSFj44TM/Ct+gm1c5Wa9uuadohH2w+HwB3cNBpI=" \ No newline at end of file diff --git a/docs/assets/main.js b/docs/assets/main.js index 2363f64c..19bbb7a7 100644 --- a/docs/assets/main.js +++ b/docs/assets/main.js @@ -1,9 +1,9 @@ "use strict"; -window.translations={"copy":"Copy","copied":"Copied!","normally_hidden":"This member is normally hidden due to your filter settings.","hierarchy_expand":"Expand","hierarchy_collapse":"Collapse","folder":"Folder","kind_1":"Project","kind_2":"Module","kind_4":"Namespace","kind_8":"Enumeration","kind_16":"Enumeration Member","kind_32":"Variable","kind_64":"Function","kind_128":"Class","kind_256":"Interface","kind_512":"Constructor","kind_1024":"Property","kind_2048":"Method","kind_4096":"Call Signature","kind_8192":"Index Signature","kind_16384":"Constructor Signature","kind_32768":"Parameter","kind_65536":"Type Literal","kind_131072":"Type Parameter","kind_262144":"Accessor","kind_524288":"Get Signature","kind_1048576":"Set Signature","kind_2097152":"Type Alias","kind_4194304":"Reference","kind_8388608":"Document"}; -"use strict";(()=>{var De=Object.create;var le=Object.defineProperty;var Fe=Object.getOwnPropertyDescriptor;var Ne=Object.getOwnPropertyNames;var Ve=Object.getPrototypeOf,Be=Object.prototype.hasOwnProperty;var qe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var je=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ne(e))!Be.call(t,i)&&i!==n&&le(t,i,{get:()=>e[i],enumerable:!(r=Fe(e,i))||r.enumerable});return t};var $e=(t,e,n)=>(n=t!=null?De(Ve(t)):{},je(e||!t||!t.__esModule?le(n,"default",{value:t,enumerable:!0}):n,t));var pe=qe((de,he)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,c],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[c+1]*i[d+1],c+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}s.str.length==1&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),m=s.str.charAt(1),p;m in s.node.edges?p=s.node.edges[m]:(p=new t.TokenSet,s.node.edges[m]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof de=="object"?he.exports=n():e.lunr=n()}(this,function(){return t})})()});window.translations||={copy:"Copy",copied:"Copied!",normally_hidden:"This member is normally hidden due to your filter settings.",hierarchy_expand:"Expand",hierarchy_collapse:"Collapse",folder:"Folder",kind_1:"Project",kind_2:"Module",kind_4:"Namespace",kind_8:"Enumeration",kind_16:"Enumeration Member",kind_32:"Variable",kind_64:"Function",kind_128:"Class",kind_256:"Interface",kind_512:"Constructor",kind_1024:"Property",kind_2048:"Method",kind_4096:"Call Signature",kind_8192:"Index Signature",kind_16384:"Constructor Signature",kind_32768:"Parameter",kind_65536:"Type Literal",kind_131072:"Type Parameter",kind_262144:"Accessor",kind_524288:"Get Signature",kind_1048576:"Set Signature",kind_2097152:"Type Alias",kind_4194304:"Reference",kind_8388608:"Document"};var ce=[];function G(t,e){ce.push({selector:e,constructor:t})}var J=class{alwaysVisibleMember=null;constructor(){this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){ce.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!ze(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function ze(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var ue=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var ge=$e(pe(),1);async function A(t){let e=Uint8Array.from(atob(t),s=>s.charCodeAt(0)),r=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")),i=await new Response(r).text();return JSON.parse(i)}async function fe(t,e){if(!window.searchData)return;let n=await A(window.searchData);t.data=n,t.index=ge.Index.load(n.index),e.classList.remove("loading"),e.classList.add("ready")}function ve(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:document.documentElement.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{fe(e,t)}),fe(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");i.addEventListener("mouseup",()=>{re(t)}),r.addEventListener("focus",()=>t.classList.add("has-focus")),We(t,i,r,e)}function We(t,e,n,r){n.addEventListener("input",ue(()=>{Ue(t,e,n,r)},200)),n.addEventListener("keydown",i=>{i.key=="Enter"?Je(e,t):i.key=="ArrowUp"?(me(e,n,-1),i.preventDefault()):i.key==="ArrowDown"&&(me(e,n,1),i.preventDefault())}),document.body.addEventListener("keypress",i=>{i.altKey||i.ctrlKey||i.metaKey||!n.matches(":focus")&&i.key==="/"&&(i.preventDefault(),n.focus())}),document.body.addEventListener("keyup",i=>{t.classList.contains("has-focus")&&(i.key==="Escape"||!e.matches(":focus-within")&&!n.matches(":focus"))&&(n.blur(),re(t))})}function re(t){t.classList.remove("has-focus")}function Ue(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ye(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ye(l.parent,i)}.${d}`);let m=document.createElement("li");m.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=c+d,m.append(p),p.addEventListener("focus",()=>{e.querySelector(".current")?.classList.remove("current"),m.classList.add("current")}),e.appendChild(m)}}function me(t,e,n){let r=t.querySelector(".current");if(!r)r=t.querySelector(n==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let i=r;if(n===1)do i=i.nextElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);else do i=i.previousElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);i?(r.classList.remove("current"),i.classList.add("current")):n===-1&&(r.classList.remove("current"),e.focus())}}function Je(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),re(e)}}function ye(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(ne(t.substring(s,o)),`${ne(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ne(t.substring(s))),i.join("")}var Ge={"&":"&","<":"<",">":">","'":"'",'"':"""};function ne(t){return t.replace(/[&<>"'"]/g,e=>Ge[e])}var I=class{el;app;constructor(e){this.el=e.el,this.app=e.app}};var H="mousedown",Ee="mousemove",B="mouseup",X={x:0,y:0},xe=!1,ie=!1,Xe=!1,D=!1,be=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(be?"is-mobile":"not-mobile");be&&"ontouchstart"in document.documentElement&&(Xe=!0,H="touchstart",Ee="touchmove",B="touchend");document.addEventListener(H,t=>{ie=!0,D=!1;let e=H=="touchstart"?t.targetTouches[0]:t;X.y=e.pageY||0,X.x=e.pageX||0});document.addEventListener(Ee,t=>{if(ie&&!D){let e=H=="touchstart"?t.targetTouches[0]:t,n=X.x-(e.pageX||0),r=X.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ie=!1});document.addEventListener("click",t=>{xe&&(t.preventDefault(),t.stopImmediatePropagation(),xe=!1)});var Y=class extends I{active;className;constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(H,n=>this.onDocumentPointerDown(n)),document.addEventListener(B,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var se;try{se=localStorage}catch{se={getItem(){return null},setItem(){}}}var C=se;var Le=document.head.appendChild(document.createElement("style"));Le.dataset.for="filters";var Z=class extends I{key;value;constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),Le.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=C.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){C.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var oe=new Map,ae=class{open;accordions=[];key;constructor(e,n){this.key=e,this.open=n}add(e){this.accordions.push(e),e.open=this.open,e.addEventListener("toggle",()=>{this.toggle(e.open)})}toggle(e){for(let n of this.accordions)n.open=e;C.setItem(this.key,e.toString())}},K=class extends I{constructor(e){super(e);let n=this.el.querySelector("summary"),r=n.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)});let i=`tsd-accordion-${n.dataset.key??n.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`,s;if(oe.has(i))s=oe.get(i);else{let o=C.getItem(i),a=o?o==="true":this.el.open;s=new ae(i,a),oe.set(i,s)}s.add(this.el)}};function Se(t){let e=C.getItem("tsd-theme")||"os";t.value=e,we(e),t.addEventListener("change",()=>{C.setItem("tsd-theme",t.value),we(t.value)})}function we(t){document.documentElement.dataset.theme=t}var ee;function Ce(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Te),Te())}async function Te(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let e=await A(window.navigationData);ee=document.documentElement.dataset.base,ee.endsWith("/")||(ee+="/"),t.innerHTML="";for(let n of e)Ie(n,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Ie(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',ke(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let c of t.children)Ie(c,l,i)}else ke(t,r,t.class)}function ke(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));if(r.href=ee+t.path,n&&(r.className=n),location.pathname===r.pathname&&!r.href.includes("#")&&r.classList.add("current"),t.kind){let i=window.translations[`kind_${t.kind}`].replaceAll('"',""");r.innerHTML=``}r.appendChild(document.createElement("span")).textContent=t.text}else{let r=e.appendChild(document.createElement("span")),i=window.translations.folder.replaceAll('"',""");r.innerHTML=``,r.appendChild(document.createElement("span")).textContent=t.text}}var te=document.documentElement.dataset.base;te.endsWith("/")||(te+="/");function Pe(){document.querySelector(".tsd-full-hierarchy")?Ye():document.querySelector(".tsd-hierarchy")&&Ze()}function Ye(){document.addEventListener("click",r=>{let i=r.target;for(;i.parentElement&&i.parentElement.tagName!="LI";)i=i.parentElement;i.dataset.dropdown&&(i.dataset.dropdown=String(i.dataset.dropdown!=="true"))});let t=new Map,e=new Set;for(let r of document.querySelectorAll(".tsd-full-hierarchy [data-refl]")){let i=r.querySelector("ul");t.has(r.dataset.refl)?e.add(r.dataset.refl):i&&t.set(r.dataset.refl,i)}for(let r of e)n(r);function n(r){let i=t.get(r).cloneNode(!0);i.querySelectorAll("[id]").forEach(s=>{s.removeAttribute("id")}),i.querySelectorAll("[data-dropdown]").forEach(s=>{s.dataset.dropdown="false"});for(let s of document.querySelectorAll(`[data-refl="${r}"]`)){let o=tt(),a=s.querySelector("ul");s.insertBefore(o,a),o.dataset.dropdown=String(!!a),a||s.appendChild(i.cloneNode(!0))}}}function Ze(){let t=document.getElementById("tsd-hierarchy-script");t&&(t.addEventListener("load",Qe),Qe())}async function Qe(){let t=document.querySelector(".tsd-panel.tsd-hierarchy:has(h4 a)");if(!t||!window.hierarchyData)return;let e=+t.dataset.refl,n=await A(window.hierarchyData),r=t.querySelector("ul"),i=document.createElement("ul");if(i.classList.add("tsd-hierarchy"),Ke(i,n,e),r.querySelectorAll("li").length==i.querySelectorAll("li").length)return;let s=document.createElement("span");s.classList.add("tsd-hierarchy-toggle"),s.textContent=window.translations.hierarchy_expand,t.querySelector("h4 a")?.insertAdjacentElement("afterend",s),s.insertAdjacentText("beforebegin",", "),s.addEventListener("click",()=>{s.textContent===window.translations.hierarchy_expand?(r.insertAdjacentElement("afterend",i),r.remove(),s.textContent=window.translations.hierarchy_collapse):(i.insertAdjacentElement("afterend",r),i.remove(),s.textContent=window.translations.hierarchy_expand)})}function Ke(t,e,n){let r=e.roots.filter(i=>et(e,i,n));for(let i of r)t.appendChild(_e(e,i,n))}function _e(t,e,n,r=new Set){if(r.has(e))return;r.add(e);let i=t.reflections[e],s=document.createElement("li");if(s.classList.add("tsd-hierarchy-item"),e===n){let o=s.appendChild(document.createElement("span"));o.textContent=i.name,o.classList.add("tsd-hierarchy-target")}else{for(let a of i.uniqueNameParents||[]){let l=t.reflections[a],c=s.appendChild(document.createElement("a"));c.textContent=l.name,c.href=te+l.url,c.className=l.class+" tsd-signature-type",s.append(document.createTextNode("."))}let o=s.appendChild(document.createElement("a"));o.textContent=t.reflections[e].name,o.href=te+i.url,o.className=i.class+" tsd-signature-type"}if(i.children){let o=s.appendChild(document.createElement("ul"));o.classList.add("tsd-hierarchy");for(let a of i.children){let l=_e(t,a,n,r);l&&o.appendChild(l)}}return r.delete(e),s}function et(t,e,n){if(e===n)return!0;let r=new Set,i=[t.reflections[e]];for(;i.length;){let s=i.pop();if(!r.has(s)){r.add(s);for(let o of s.children||[]){if(o===n)return!0;i.push(t.reflections[o])}}}return!1}function tt(){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("width","20"),t.setAttribute("height","20"),t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.innerHTML='',t}G(Y,"a[data-toggle]");G(K,".tsd-accordion");G(Z,".tsd-filter-item input[type=checkbox]");var Oe=document.getElementById("tsd-theme");Oe&&Se(Oe);var nt=new J;Object.defineProperty(window,"app",{value:nt});ve();Ce();Pe();})(); +window.translations={"copy":"Copy","copied":"Copied!","normally_hidden":"This member is normally hidden due to your filter settings.","hierarchy_expand":"Expand","hierarchy_collapse":"Collapse","folder":"Folder","search_index_not_available":"The search index is not available","search_no_results_found_for_0":"No results found for {0}","kind_1":"Project","kind_2":"Module","kind_4":"Namespace","kind_8":"Enumeration","kind_16":"Enumeration Member","kind_32":"Variable","kind_64":"Function","kind_128":"Class","kind_256":"Interface","kind_512":"Constructor","kind_1024":"Property","kind_2048":"Method","kind_4096":"Call Signature","kind_8192":"Index Signature","kind_16384":"Constructor Signature","kind_32768":"Parameter","kind_65536":"Type Literal","kind_131072":"Type Parameter","kind_262144":"Accessor","kind_524288":"Get Signature","kind_1048576":"Set Signature","kind_2097152":"Type Alias","kind_4194304":"Reference","kind_8388608":"Document"}; +"use strict";(()=>{var Ke=Object.create;var he=Object.defineProperty;var Ge=Object.getOwnPropertyDescriptor;var Ze=Object.getOwnPropertyNames;var Xe=Object.getPrototypeOf,Ye=Object.prototype.hasOwnProperty;var et=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var tt=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ze(e))!Ye.call(t,i)&&i!==n&&he(t,i,{get:()=>e[i],enumerable:!(r=Ge(e,i))||r.enumerable});return t};var nt=(t,e,n)=>(n=t!=null?Ke(Xe(t)):{},tt(e||!t||!t.__esModule?he(n,"default",{value:t,enumerable:!0}):n,t));var ye=et((me,ge)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,l],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(oc?d+=2:a==c&&(n+=r[l+1]*i[d+1],l+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}if(s.str.length==0&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}s.str.length==1&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),f=s.str.charAt(1),p;f in s.node.edges?p=s.node.edges[f]:(p=new t.TokenSet,s.node.edges[f]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),c=0;c1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof me=="object"?ge.exports=n():e.lunr=n()}(this,function(){return t})})()});var M,G={getItem(){return null},setItem(){}},K;try{K=localStorage,M=K}catch{K=G,M=G}var S={getItem:t=>M.getItem(t),setItem:(t,e)=>M.setItem(t,e),disableWritingLocalStorage(){M=G},disable(){localStorage.clear(),M=G},enable(){M=K}};window.TypeDoc||={disableWritingLocalStorage(){S.disableWritingLocalStorage()},disableLocalStorage:()=>{S.disable()},enableLocalStorage:()=>{S.enable()}};window.translations||={copy:"Copy",copied:"Copied!",normally_hidden:"This member is normally hidden due to your filter settings.",hierarchy_expand:"Expand",hierarchy_collapse:"Collapse",search_index_not_available:"The search index is not available",search_no_results_found_for_0:"No results found for {0}",folder:"Folder",kind_1:"Project",kind_2:"Module",kind_4:"Namespace",kind_8:"Enumeration",kind_16:"Enumeration Member",kind_32:"Variable",kind_64:"Function",kind_128:"Class",kind_256:"Interface",kind_512:"Constructor",kind_1024:"Property",kind_2048:"Method",kind_4096:"Call Signature",kind_8192:"Index Signature",kind_16384:"Constructor Signature",kind_32768:"Parameter",kind_65536:"Type Literal",kind_131072:"Type Parameter",kind_262144:"Accessor",kind_524288:"Get Signature",kind_1048576:"Set Signature",kind_2097152:"Type Alias",kind_4194304:"Reference",kind_8388608:"Document"};var pe=[];function X(t,e){pe.push({selector:e,constructor:t})}var Z=class{alwaysVisibleMember=null;constructor(){this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){pe.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!rt(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function rt(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var fe=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var Ie=nt(ye(),1);async function R(t){let e=Uint8Array.from(atob(t),s=>s.charCodeAt(0)),r=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")),i=await new Response(r).text();return JSON.parse(i)}var Y="closing",ae="tsd-overlay";function it(){let t=Math.abs(window.innerWidth-document.documentElement.clientWidth);document.body.style.overflow="hidden",document.body.style.paddingRight=`${t}px`}function st(){document.body.style.removeProperty("overflow"),document.body.style.removeProperty("padding-right")}function xe(t,e){t.addEventListener("animationend",()=>{t.classList.contains(Y)&&(t.classList.remove(Y),document.getElementById(ae)?.remove(),t.close(),st())}),t.addEventListener("cancel",n=>{n.preventDefault(),ve(t)}),e?.closeOnClick&&document.addEventListener("click",n=>{t.open&&!t.contains(n.target)&&ve(t)},!0)}function Ee(t){if(t.open)return;let e=document.createElement("div");e.id=ae,document.body.appendChild(e),t.showModal(),it()}function ve(t){if(!t.open)return;document.getElementById(ae)?.classList.add(Y),t.classList.add(Y)}var I=class{el;app;constructor(e){this.el=e.el,this.app=e.app}};var be=document.head.appendChild(document.createElement("style"));be.dataset.for="filters";var le={};function we(t){for(let e of t.split(/\s+/))if(le.hasOwnProperty(e)&&!le[e])return!0;return!1}var ee=class extends I{key;value;constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),be.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=S.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){S.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),le[`tsd-is-${this.el.name}`]=this.value,this.app.filterChanged(),this.app.updateIndexVisibility()}};var Le=0;async function Se(t,e){if(!window.searchData)return;let n=await R(window.searchData);t.data=n,t.index=Ie.Index.load(n.index),e.innerHTML=""}function _e(){let t=document.getElementById("tsd-search-trigger"),e=document.getElementById("tsd-search"),n=document.getElementById("tsd-search-input"),r=document.getElementById("tsd-search-results"),i=document.getElementById("tsd-search-script"),s=document.getElementById("tsd-search-status");if(!(t&&e&&n&&r&&i&&s))throw new Error("Search controls missing");let o={base:document.documentElement.dataset.base};o.base.endsWith("/")||(o.base+="/"),i.addEventListener("error",()=>{let a=window.translations.search_index_not_available;Pe(s,a)}),i.addEventListener("load",()=>{Se(o,s)}),Se(o,s),ot({trigger:t,searchEl:e,results:r,field:n,status:s},o)}function ot(t,e){let{field:n,results:r,searchEl:i,status:s,trigger:o}=t;xe(i,{closeOnClick:!0});function a(){Ee(i),n.setSelectionRange(0,n.value.length)}o.addEventListener("click",a),n.addEventListener("input",fe(()=>{at(r,n,s,e)},200)),n.addEventListener("keydown",l=>{if(r.childElementCount===0||l.ctrlKey||l.metaKey||l.altKey)return;let d=n.getAttribute("aria-activedescendant"),f=d?document.getElementById(d):null;if(f){let p=!1,v=!1;switch(l.key){case"Home":case"End":case"ArrowLeft":case"ArrowRight":v=!0;break;case"ArrowDown":case"ArrowUp":p=l.shiftKey;break}(p||v)&&ke(n)}if(!l.shiftKey)switch(l.key){case"Enter":f?.querySelector("a")?.click();break;case"ArrowUp":Te(r,n,f,-1),l.preventDefault();break;case"ArrowDown":Te(r,n,f,1),l.preventDefault();break}});function c(){ke(n)}n.addEventListener("change",c),n.addEventListener("blur",c),n.addEventListener("click",c),document.body.addEventListener("keydown",l=>{if(l.altKey||l.metaKey||l.shiftKey)return;let d=l.ctrlKey&&l.key==="k",f=!l.ctrlKey&&!ut()&&l.key==="/";(d||f)&&(l.preventDefault(),a())})}function at(t,e,n,r){if(!r.index||!r.data)return;t.innerHTML="",n.innerHTML="",Le+=1;let i=e.value.trim(),s;if(i){let a=i.split(" ").map(c=>c.length?`*${c}*`:"").join(" ");s=r.index.search(a).filter(({ref:c})=>{let l=r.data.rows[Number(c)].classes;return!l||!we(l)})}else s=[];if(s.length===0&&i){let a=window.translations.search_no_results_found_for_0.replace("{0}",` "${te(i)}" `);Pe(n,a);return}for(let a=0;ac.score-a.score);let o=Math.min(10,s.length);for(let a=0;a`,f=Ce(c.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(f+=` (score: ${s[a].score.toFixed(2)})`),c.parent&&(f=` + ${Ce(c.parent,i)}.${f}`);let p=document.createElement("li");p.id=`tsd-search:${Le}-${a}`,p.role="option",p.ariaSelected="false",p.classList.value=c.classes??"";let v=document.createElement("a");v.tabIndex=-1,v.href=r.base+c.url,v.innerHTML=d+`${f}`,p.append(v),t.appendChild(p)}}function Te(t,e,n,r){let i;if(r===1?i=n?.nextElementSibling||t.firstElementChild:i=n?.previousElementSibling||t.lastElementChild,i!==n){if(!i||i.role!=="option"){console.error("Option missing");return}i.ariaSelected="true",i.scrollIntoView({behavior:"smooth",block:"nearest"}),e.setAttribute("aria-activedescendant",i.id),n?.setAttribute("aria-selected","false")}}function ke(t){let e=t.getAttribute("aria-activedescendant");(e?document.getElementById(e):null)?.setAttribute("aria-selected","false"),t.setAttribute("aria-activedescendant","")}function Ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(te(t.substring(s,o)),`${te(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(te(t.substring(s))),i.join("")}var lt={"&":"&","<":"<",">":">","'":"'",'"':"""};function te(t){return t.replace(/[&<>"'"]/g,e=>lt[e])}function Pe(t,e){t.innerHTML=e?`
${e}
`:""}var ct=["button","checkbox","file","hidden","image","radio","range","reset","submit"];function ut(){let t=document.activeElement;return t?t.isContentEditable||t.tagName==="TEXTAREA"||t.tagName==="SEARCH"?!0:t.tagName==="INPUT"&&!ct.includes(t.type):!1}var D="mousedown",Me="mousemove",$="mouseup",ne={x:0,y:0},Qe=!1,ce=!1,dt=!1,F=!1,Oe=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(Oe?"is-mobile":"not-mobile");Oe&&"ontouchstart"in document.documentElement&&(dt=!0,D="touchstart",Me="touchmove",$="touchend");document.addEventListener(D,t=>{ce=!0,F=!1;let e=D=="touchstart"?t.targetTouches[0]:t;ne.y=e.pageY||0,ne.x=e.pageX||0});document.addEventListener(Me,t=>{if(ce&&!F){let e=D=="touchstart"?t.targetTouches[0]:t,n=ne.x-(e.pageX||0),r=ne.y-(e.pageY||0);F=Math.sqrt(n*n+r*r)>10}});document.addEventListener($,()=>{ce=!1});document.addEventListener("click",t=>{Qe&&(t.preventDefault(),t.stopImmediatePropagation(),Qe=!1)});var re=class extends I{active;className;constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener($,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(D,n=>this.onDocumentPointerDown(n)),document.addEventListener($,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){F||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!F&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var ue=new Map,de=class{open;accordions=[];key;constructor(e,n){this.key=e,this.open=n}add(e){this.accordions.push(e),e.open=this.open,e.addEventListener("toggle",()=>{this.toggle(e.open)})}toggle(e){for(let n of this.accordions)n.open=e;S.setItem(this.key,e.toString())}},ie=class extends I{constructor(e){super(e);let n=this.el.querySelector("summary"),r=n.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)});let i=`tsd-accordion-${n.dataset.key??n.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`,s;if(ue.has(i))s=ue.get(i);else{let o=S.getItem(i),a=o?o==="true":this.el.open;s=new de(i,a),ue.set(i,s)}s.add(this.el)}};function He(t){let e=S.getItem("tsd-theme")||"os";t.value=e,Ae(e),t.addEventListener("change",()=>{S.setItem("tsd-theme",t.value),Ae(t.value)})}function Ae(t){document.documentElement.dataset.theme=t}var se;function Ne(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Re),Re())}async function Re(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let e=await R(window.navigationData);se=document.documentElement.dataset.base,se.endsWith("/")||(se+="/"),t.innerHTML="";for(let n of e)Be(n,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Be(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',De(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let c=a.appendChild(document.createElement("ul"));c.className="tsd-nested-navigation";for(let l of t.children)Be(l,c,i)}else De(t,r,t.class)}function De(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));if(r.href=se+t.path,n&&(r.className=n),location.pathname===r.pathname&&!r.href.includes("#")&&(r.classList.add("current"),r.ariaCurrent="page"),t.kind){let i=window.translations[`kind_${t.kind}`].replaceAll('"',""");r.innerHTML=``}r.appendChild(Fe(t.text,document.createElement("span")))}else{let r=e.appendChild(document.createElement("span")),i=window.translations.folder.replaceAll('"',""");r.innerHTML=``,r.appendChild(Fe(t.text,document.createElement("span")))}}function Fe(t,e){let n=t.split(/(?<=[^A-Z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[_-])(?=[^_-])/);for(let r=0;r{let i=r.target;for(;i.parentElement&&i.parentElement.tagName!="LI";)i=i.parentElement;i.dataset.dropdown&&(i.dataset.dropdown=String(i.dataset.dropdown!=="true"))});let t=new Map,e=new Set;for(let r of document.querySelectorAll(".tsd-full-hierarchy [data-refl]")){let i=r.querySelector("ul");t.has(r.dataset.refl)?e.add(r.dataset.refl):i&&t.set(r.dataset.refl,i)}for(let r of e)n(r);function n(r){let i=t.get(r).cloneNode(!0);i.querySelectorAll("[id]").forEach(s=>{s.removeAttribute("id")}),i.querySelectorAll("[data-dropdown]").forEach(s=>{s.dataset.dropdown="false"});for(let s of document.querySelectorAll(`[data-refl="${r}"]`)){let o=gt(),a=s.querySelector("ul");s.insertBefore(o,a),o.dataset.dropdown=String(!!a),a||s.appendChild(i.cloneNode(!0))}}}function pt(){let t=document.getElementById("tsd-hierarchy-script");t&&(t.addEventListener("load",Ve),Ve())}async function Ve(){let t=document.querySelector(".tsd-panel.tsd-hierarchy:has(h4 a)");if(!t||!window.hierarchyData)return;let e=+t.dataset.refl,n=await R(window.hierarchyData),r=t.querySelector("ul"),i=document.createElement("ul");if(i.classList.add("tsd-hierarchy"),ft(i,n,e),r.querySelectorAll("li").length==i.querySelectorAll("li").length)return;let s=document.createElement("span");s.classList.add("tsd-hierarchy-toggle"),s.textContent=window.translations.hierarchy_expand,t.querySelector("h4 a")?.insertAdjacentElement("afterend",s),s.insertAdjacentText("beforebegin",", "),s.addEventListener("click",()=>{s.textContent===window.translations.hierarchy_expand?(r.insertAdjacentElement("afterend",i),r.remove(),s.textContent=window.translations.hierarchy_collapse):(i.insertAdjacentElement("afterend",r),i.remove(),s.textContent=window.translations.hierarchy_expand)})}function ft(t,e,n){let r=e.roots.filter(i=>mt(e,i,n));for(let i of r)t.appendChild(je(e,i,n))}function je(t,e,n,r=new Set){if(r.has(e))return;r.add(e);let i=t.reflections[e],s=document.createElement("li");if(s.classList.add("tsd-hierarchy-item"),e===n){let o=s.appendChild(document.createElement("span"));o.textContent=i.name,o.classList.add("tsd-hierarchy-target")}else{for(let a of i.uniqueNameParents||[]){let c=t.reflections[a],l=s.appendChild(document.createElement("a"));l.textContent=c.name,l.href=oe+c.url,l.className=c.class+" tsd-signature-type",s.append(document.createTextNode("."))}let o=s.appendChild(document.createElement("a"));o.textContent=t.reflections[e].name,o.href=oe+i.url,o.className=i.class+" tsd-signature-type"}if(i.children){let o=s.appendChild(document.createElement("ul"));o.classList.add("tsd-hierarchy");for(let a of i.children){let c=je(t,a,n,r);c&&o.appendChild(c)}}return r.delete(e),s}function mt(t,e,n){if(e===n)return!0;let r=new Set,i=[t.reflections[e]];for(;i.length;){let s=i.pop();if(!r.has(s)){r.add(s);for(let o of s.children||[]){if(o===n)return!0;i.push(t.reflections[o])}}}return!1}function gt(){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("width","20"),t.setAttribute("height","20"),t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.innerHTML='',t}X(re,"a[data-toggle]");X(ie,".tsd-accordion");X(ee,".tsd-filter-item input[type=checkbox]");var qe=document.getElementById("tsd-theme");qe&&He(qe);var yt=new Z;Object.defineProperty(window,"app",{value:yt});_e();Ne();$e();"virtualKeyboard"in navigator&&(navigator.virtualKeyboard.overlaysContent=!0);})(); /*! Bundled license information: lunr/lunr.js: diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js index 70c0ba79..44e4f60c 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "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" \ No newline at end of file +window.navigationData = "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" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index c0fd562e..15e9f2e9 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/docs/assets/style.css b/docs/assets/style.css index 2ab8b836..5ba5a2a9 100644 --- a/docs/assets/style.css +++ b/docs/assets/style.css @@ -1,14 +1,33 @@ @layer typedoc { + :root { + --dim-toolbar-contents-height: 2.5rem; + --dim-toolbar-border-bottom-width: 1px; + --dim-header-height: calc( + var(--dim-toolbar-border-bottom-width) + + var(--dim-toolbar-contents-height) + ); + + /* 0rem For mobile; unit is required for calculation in `calc` */ + --dim-container-main-margin-y: 0rem; + + --dim-footer-height: 3.5rem; + + --modal-animation-duration: 0.2s; + } + :root { /* Light */ --light-color-background: #f2f4f8; --light-color-background-secondary: #eff0f1; - --light-color-warning-text: #222; + /* Not to be confused with [:active](https://developer.mozilla.org/en-US/docs/Web/CSS/:active) */ + --light-color-background-active: #d6d8da; --light-color-background-warning: #e6e600; + --light-color-warning-text: #222; --light-color-accent: #c5c7c9; - --light-color-active-menu-item: var(--light-color-accent); + --light-color-active-menu-item: var(--light-color-background-active); --light-color-text: #222; - --light-color-text-aside: #6e6e6e; + --light-color-contrast-text: #000; + --light-color-text-aside: #5e5e5e; --light-color-icon-background: var(--light-color-background); --light-color-icon-text: var(--light-color-text); @@ -56,15 +75,20 @@ --light-external-icon: url("data:image/svg+xml;utf8,"); --light-color-scheme: light; + } + :root { /* Dark */ --dark-color-background: #2b2e33; --dark-color-background-secondary: #1e2024; + /* Not to be confused with [:active](https://developer.mozilla.org/en-US/docs/Web/CSS/:active) */ + --dark-color-background-active: #5d5d6a; --dark-color-background-warning: #bebe00; --dark-color-warning-text: #222; --dark-color-accent: #9096a2; - --dark-color-active-menu-item: #5d5d6a; + --dark-color-active-menu-item: var(--dark-color-background-active); --dark-color-text: #f5f5f5; + --dark-color-contrast-text: #ffffff; --dark-color-text-aside: #dddddd; --dark-color-icon-background: var(--dark-color-background-secondary); @@ -119,11 +143,13 @@ --color-background-secondary: var( --light-color-background-secondary ); + --color-background-active: var(--light-color-background-active); --color-background-warning: var(--light-color-background-warning); --color-warning-text: var(--light-color-warning-text); --color-accent: var(--light-color-accent); --color-active-menu-item: var(--light-color-active-menu-item); --color-text: var(--light-color-text); + --color-contrast-text: var(--light-color-contrast-text); --color-text-aside: var(--light-color-text-aside); --color-icon-background: var(--light-color-icon-background); @@ -179,11 +205,13 @@ --color-background-secondary: var( --dark-color-background-secondary ); + --color-background-active: var(--dark-color-background-active); --color-background-warning: var(--dark-color-background-warning); --color-warning-text: var(--dark-color-warning-text); --color-accent: var(--dark-color-accent); --color-active-menu-item: var(--dark-color-active-menu-item); --color-text: var(--dark-color-text); + --color-contrast-text: var(--dark-color-contrast-text); --color-text-aside: var(--dark-color-text-aside); --color-icon-background: var(--dark-color-icon-background); @@ -233,23 +261,17 @@ } } - html { - color-scheme: var(--color-scheme); - } - - body { - margin: 0; - } - :root[data-theme="light"] { --color-background: var(--light-color-background); --color-background-secondary: var(--light-color-background-secondary); + --color-background-active: var(--light-color-background-active); --color-background-warning: var(--light-color-background-warning); --color-warning-text: var(--light-color-warning-text); --color-icon-background: var(--light-color-icon-background); --color-accent: var(--light-color-accent); --color-active-menu-item: var(--light-color-active-menu-item); --color-text: var(--light-color-text); + --color-contrast-text: var(--light-color-contrast-text); --color-text-aside: var(--light-color-text-aside); --color-icon-text: var(--light-color-icon-text); @@ -299,12 +321,14 @@ :root[data-theme="dark"] { --color-background: var(--dark-color-background); --color-background-secondary: var(--dark-color-background-secondary); + --color-background-active: var(--dark-color-background-active); --color-background-warning: var(--dark-color-background-warning); --color-warning-text: var(--dark-color-warning-text); --color-icon-background: var(--dark-color-icon-background); --color-accent: var(--dark-color-accent); --color-active-menu-item: var(--dark-color-active-menu-item); --color-text: var(--dark-color-text); + --color-contrast-text: var(--dark-color-contrast-text); --color-text-aside: var(--dark-color-text-aside); --color-icon-text: var(--dark-color-icon-text); @@ -351,6 +375,13 @@ --color-scheme: var(--dark-color-scheme); } + html { + color-scheme: var(--color-scheme); + @media (prefers-reduced-motion: no-preference) { + scroll-behavior: smooth; + } + } + *:focus-visible, .tsd-accordion-summary:focus-visible svg { outline: 2px solid var(--color-focus-outline); @@ -421,16 +452,19 @@ border-top: 1px solid var(--color-accent); padding-top: 1rem; padding-bottom: 1rem; - max-height: 3.5rem; + max-height: var(--dim-footer-height); } footer > p { margin: 0 1em; } .container-main { - margin: 0 auto; + margin: var(--dim-container-main-margin-y) auto; /* toolbar, footer, margin */ - min-height: calc(100vh - 41px - 56px - 4rem); + min-height: calc( + 100svh - var(--dim-header-height) - var(--dim-footer-height) - + 2 * var(--dim-container-main-margin-y) + ); } @keyframes fade-in { @@ -450,29 +484,6 @@ opacity: 0; } } - @keyframes fade-in-delayed { - 0% { - opacity: 0; - } - 33% { - opacity: 0; - } - 100% { - opacity: 1; - } - } - @keyframes fade-out-delayed { - 0% { - opacity: 1; - visibility: visible; - } - 66% { - opacity: 0; - } - 100% { - opacity: 0; - } - } @keyframes pop-in-from-right { from { transform: translate(100%, 0); @@ -492,10 +503,12 @@ } body { background: var(--color-background); - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + font-family: + -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; color: var(--color-text); + margin: 0; } a { @@ -514,6 +527,9 @@ a.tsd-anchor-link { color: var(--color-text); } + :target { + scroll-margin-block: calc(var(--dim-header-height) + 0.5rem); + } code, pre { @@ -545,7 +561,8 @@ box-sizing: border-box; } pre:hover > button, - pre > button.visible { + pre > button.visible, + pre > button:focus-visible { opacity: 1; } @@ -555,6 +572,52 @@ border-left: 4px solid gray; } + img { + max-width: 100%; + } + + * { + scrollbar-width: thin; + scrollbar-color: var(--color-accent) var(--color-icon-background); + } + + *::-webkit-scrollbar { + width: 0.75rem; + } + + *::-webkit-scrollbar-track { + background: var(--color-icon-background); + } + + *::-webkit-scrollbar-thumb { + background-color: var(--color-accent); + border-radius: 999rem; + border: 0.25rem solid var(--color-icon-background); + } + + dialog { + border: none; + outline: none; + padding: 0; + background-color: var(--color-background); + } + dialog::backdrop { + display: none; + } + #tsd-overlay { + background-color: rgba(0, 0, 0, 0.5); + position: fixed; + z-index: 9999; + top: 0; + left: 0; + right: 0; + bottom: 0; + animation: fade-in var(--modal-animation-duration) forwards; + } + #tsd-overlay.closing { + animation-name: fade-out; + } + .tsd-typography { line-height: 1.333em; } @@ -629,6 +692,7 @@ .tsd-breadcrumb { margin: 0; + margin-top: 1rem; padding: 0; color: var(--color-text-aside); } @@ -733,7 +797,7 @@ margin-right: 0.5em; border-radius: 0.33em; /* Leaving this at full opacity breaks event listeners on Firefox. - Don't remove unless you know what you're doing. */ + Don't remove unless you know what you're doing. */ opacity: 0.99; } .tsd-filter-input input[type="checkbox"]:focus-visible + svg { @@ -876,7 +940,8 @@ } .tsd-navigation.settings { - margin: 1rem 0; + margin: 0; + margin-bottom: 1rem; } .tsd-navigation > a, .tsd-navigation .tsd-accordion-summary { @@ -898,6 +963,7 @@ .tsd-navigation a.current, .tsd-page-navigation a.current { background: var(--color-active-menu-item); + color: var(--color-contrast-text); } .tsd-navigation a:hover, .tsd-page-navigation a:hover { @@ -931,14 +997,14 @@ margin-left: -1.5rem; } - .tsd-page-navigation-section { - margin-left: 10px; - } .tsd-page-navigation-section > summary { padding: 0.25rem; } + .tsd-page-navigation-section > summary > svg { + margin-right: 0.25rem; + } .tsd-page-navigation-section > div { - margin-left: 20px; + margin-left: 30px; } .tsd-page-navigation ul { padding-left: 1.75rem; @@ -964,6 +1030,10 @@ .tsd-accordion-summary { list-style-type: none; /* hide marker on non-safari */ outline: none; /* broken on safari, so just hide it */ + display: flex; + align-items: center; + gap: 0.25rem; + box-sizing: border-box; } .tsd-accordion-summary::-webkit-details-marker { display: none; /* hide marker on safari */ @@ -986,28 +1056,21 @@ padding-top: 0; padding-bottom: 0; } - .tsd-accordion .tsd-accordion-summary > svg { - margin-left: 0.25rem; - vertical-align: text-top; - } /* * We need to be careful to target the arrow indicating whether the accordion * is open, but not any other SVGs included in the details element. */ - .tsd-accordion:not([open]) > .tsd-accordion-summary > svg:first-child, - .tsd-accordion:not([open]) > .tsd-accordion-summary > h1 > svg:first-child, - .tsd-accordion:not([open]) > .tsd-accordion-summary > h2 > svg:first-child, - .tsd-accordion:not([open]) > .tsd-accordion-summary > h3 > svg:first-child, - .tsd-accordion:not([open]) > .tsd-accordion-summary > h4 > svg:first-child, - .tsd-accordion:not([open]) > .tsd-accordion-summary > h5 > svg:first-child { + .tsd-accordion:not([open]) > .tsd-accordion-summary > svg:first-child { transform: rotate(-90deg); } .tsd-index-content > :not(:first-child) { margin-top: 0.75rem; } - .tsd-index-heading { + .tsd-index-summary { margin-top: 1.5rem; margin-bottom: 0.75rem; + display: flex; + align-content: center; } .tsd-no-select { @@ -1062,117 +1125,104 @@ margin-bottom: 1rem; } - #tsd-search { - transition: background-color 0.2s; + #tsd-search[open] { + animation: fade-in var(--modal-animation-duration) ease-out forwards; } - #tsd-search .title { - position: relative; - z-index: 2; + #tsd-search[open].closing { + animation-name: fade-out; } - #tsd-search .field { - position: absolute; - left: 0; - top: 0; - right: 2.5rem; - height: 100%; - } - #tsd-search .field input { + + /* Avoid setting `display` on closed dialog */ + #tsd-search[open] { + display: flex; + flex-direction: column; + padding: 1rem; + width: 32rem; + max-width: 90vw; + max-height: calc(100vh - env(keyboard-inset-height, 0px) - 25vh); + /* Anchor dialog to top */ + margin-top: 10vh; + border-radius: 6px; + will-change: max-height; + } + #tsd-search-input { box-sizing: border-box; - position: relative; - top: -50px; - z-index: 1; width: 100%; - padding: 0 10px; - opacity: 0; + padding: 0 0.625rem; /* 10px */ outline: 0; - border: 0; - background: transparent; + border: 2px solid var(--color-accent); + background-color: transparent; color: var(--color-text); + border-radius: 4px; + height: 2.5rem; + flex: 0 0 auto; + font-size: 0.875rem; + transition: border-color 0.2s, background-color 0.2s; } - #tsd-search .field label { - position: absolute; - overflow: hidden; - right: -40px; + #tsd-search-input:focus-visible { + background-color: var(--color-background-active); + border-color: transparent; + color: var(--color-contrast-text); } - #tsd-search .field input, - #tsd-search .title, - #tsd-toolbar-links a { - transition: opacity 0.2s; + #tsd-search-input::placeholder { + color: inherit; + opacity: 0.8; } - #tsd-search .results { - position: absolute; - visibility: hidden; - top: 40px; - width: 100%; + #tsd-search-results { margin: 0; padding: 0; list-style: none; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); + flex: 1 1 auto; + display: flex; + flex-direction: column; + overflow-y: auto; + } + #tsd-search-results:not(:empty) { + margin-top: 0.5rem; } - #tsd-search .results li { + #tsd-search-results > li { background-color: var(--color-background); - line-height: initial; - padding: 4px; + line-height: 1.5; + box-sizing: border-box; + border-radius: 4px; } - #tsd-search .results li:nth-child(even) { + #tsd-search-results > li:nth-child(even) { background-color: var(--color-background-secondary); } - #tsd-search .results li.state { - display: none; - } - #tsd-search .results li.current:not(.no-results), - #tsd-search .results li:hover:not(.no-results) { - background-color: var(--color-accent); + #tsd-search-results > li:is(:hover, [aria-selected="true"]) { + background-color: var(--color-background-active); + color: var(--color-contrast-text); } - #tsd-search .results a { + /* It's important that this takes full size of parent `li`, to capture a click on `li` */ + #tsd-search-results > li > a { display: flex; align-items: center; - padding: 0.25rem; + padding: 0.5rem 0.25rem; box-sizing: border-box; + width: 100%; } - #tsd-search .results a:before { - top: 10px; + #tsd-search-results > li > a > .text { + flex: 1 1 auto; + min-width: 0; + overflow-wrap: anywhere; } - #tsd-search .results span.parent { + #tsd-search-results > li > a .parent { color: var(--color-text-aside); - font-weight: normal; - } - #tsd-search.has-focus { - background-color: var(--color-accent); - } - #tsd-search.has-focus .field input { - top: 0; - opacity: 1; - } - #tsd-search.has-focus .title, - #tsd-search.has-focus #tsd-toolbar-links a { - z-index: 0; - opacity: 0; - } - #tsd-search.has-focus .results { - visibility: visible; - } - #tsd-search.loading .results li.state.loading { - display: block; } - #tsd-search.failure .results li.state.failure { - display: block; - } - - #tsd-toolbar-links { - position: absolute; - top: 0; - right: 2rem; - height: 100%; - display: flex; - align-items: center; - justify-content: flex-end; + #tsd-search-results > li > a mark { + color: inherit; + background-color: inherit; + font-weight: bold; } - #tsd-toolbar-links a { - margin-left: 1.5rem; + #tsd-search-status { + flex: 1; + display: grid; + place-content: center; + text-align: center; + overflow-wrap: anywhere; } - #tsd-toolbar-links a:hover { - text-decoration: underline; + #tsd-search-status:not(:empty) { + min-height: 6rem; } .tsd-signature { @@ -1257,78 +1307,52 @@ width: 100%; color: var(--color-text); background: var(--color-background-secondary); - border-bottom: 1px var(--color-accent) solid; + border-bottom: var(--dim-toolbar-border-bottom-width) + var(--color-accent) solid; transition: transform 0.3s ease-in-out; } .tsd-page-toolbar a { color: var(--color-text); - text-decoration: none; - } - .tsd-page-toolbar a.title { - font-weight: bold; } - .tsd-page-toolbar a.title:hover { - text-decoration: underline; - } - .tsd-page-toolbar .tsd-toolbar-contents { + .tsd-toolbar-contents { display: flex; - justify-content: space-between; - height: 2.5rem; + align-items: center; + height: var(--dim-toolbar-contents-height); margin: 0 auto; } - .tsd-page-toolbar .table-cell { - position: relative; - white-space: nowrap; - line-height: 40px; - } - .tsd-page-toolbar .table-cell:first-child { - width: 100%; + .tsd-toolbar-contents > .title { + font-weight: bold; + margin-right: auto; } - .tsd-page-toolbar .tsd-toolbar-icon { - box-sizing: border-box; - line-height: 0; - padding: 12px 0; + #tsd-toolbar-links { + display: flex; + align-items: center; + gap: 1.5rem; + margin-right: 1rem; } .tsd-widget { + box-sizing: border-box; display: inline-block; - overflow: hidden; opacity: 0.8; - height: 40px; - transition: - opacity 0.1s, - background-color 0.2s; - vertical-align: bottom; + height: 2.5rem; + width: 2.5rem; + transition: opacity 0.1s, background-color 0.1s; + text-align: center; cursor: pointer; + border: none; + background-color: transparent; } .tsd-widget:hover { opacity: 0.9; } - .tsd-widget.active { + .tsd-widget:active { opacity: 1; background-color: var(--color-accent); } - .tsd-widget.no-caption { - width: 40px; - } - .tsd-widget.no-caption:before { - margin: 0; - } - - .tsd-widget.options, - .tsd-widget.menu { + #tsd-toolbar-menu-trigger { display: none; } - input[type="checkbox"] + .tsd-widget:before { - background-position: -120px 0; - } - input[type="checkbox"]:checked + .tsd-widget:before { - background-position: -160px 0; - } - - img { - max-width: 100%; - } .tsd-member-summary-name { display: inline-flex; @@ -1342,6 +1366,7 @@ align-items: center; margin-left: 0.5rem; color: var(--color-text); + vertical-align: middle; } .tsd-anchor-icon svg { @@ -1351,7 +1376,8 @@ } .tsd-member-summary-name:hover > .tsd-anchor-icon svg, - .tsd-anchor-link:hover > .tsd-anchor-icon svg { + .tsd-anchor-link:hover > .tsd-anchor-icon svg, + .tsd-anchor-icon:focus-visible svg { visibility: visible; } @@ -1437,41 +1463,26 @@ color: var(--color-text); } - * { - scrollbar-width: thin; - scrollbar-color: var(--color-accent) var(--color-icon-background); - } - - *::-webkit-scrollbar { - width: 0.75rem; - } - - *::-webkit-scrollbar-track { - background: var(--color-icon-background); - } - - *::-webkit-scrollbar-thumb { - background-color: var(--color-accent); - border-radius: 999rem; - border: 0.25rem solid var(--color-icon-background); - } - /* mobile */ @media (max-width: 769px) { - .tsd-widget.options, - .tsd-widget.menu { + #tsd-toolbar-menu-trigger { display: inline-block; + /* temporary fix to vertically align, for compatibility */ + line-height: 2.5; + } + #tsd-toolbar-links { + display: none; } .container-main { display: flex; } - html .col-content { + .col-content { float: none; max-width: 100%; width: 100%; } - html .col-sidebar { + .col-sidebar { position: fixed !important; overflow-y: auto; -webkit-overflow-scrolling: touch; @@ -1486,10 +1497,10 @@ background-color: var(--color-background); transform: translate(100%, 0); } - html .col-sidebar > *:last-child { + .col-sidebar > *:last-child { padding-bottom: 20px; } - html .overlay { + .overlay { content: ""; display: block; position: fixed; @@ -1536,9 +1547,6 @@ .has-menu .tsd-navigation { max-height: 100%; } - #tsd-toolbar-links { - display: none; - } .tsd-navigation .tsd-nav-link { display: flex; } @@ -1550,7 +1558,11 @@ display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); grid-template-areas: "sidebar content"; - margin: 2rem auto; + --dim-container-main-margin-y: 2rem; + } + + .tsd-breadcrumb { + margin-top: 0; } .col-sidebar { @@ -1563,11 +1575,15 @@ } @media (min-width: 770px) and (max-width: 1399px) { .col-sidebar { - max-height: calc(100vh - 2rem - 42px); + max-height: calc( + 100vh - var(--dim-header-height) - var(--dim-footer-height) - + 2 * var(--dim-container-main-margin-y) + ); overflow: auto; position: sticky; - top: 42px; - padding-top: 1rem; + top: calc( + var(--dim-header-height) + var(--dim-container-main-margin-y) + ); } .site-menu { margin-top: 1rem; @@ -1577,10 +1593,11 @@ /* two sidebars */ @media (min-width: 1200px) { .container-main { - grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax( - 0, - 20rem - ); + grid-template-columns: + minmax(0, 1fr) minmax(0, 2.5fr) minmax( + 0, + 20rem + ); grid-template-areas: "sidebar content toc"; } @@ -1597,15 +1614,20 @@ } .site-menu { - margin-top: 1rem; + margin-top: 0rem; } .page-menu, .site-menu { - max-height: calc(100vh - 2rem - 42px); + max-height: calc( + 100vh - var(--dim-header-height) - var(--dim-footer-height) - + 2 * var(--dim-container-main-margin-y) + ); overflow: auto; position: sticky; - top: 42px; + top: calc( + var(--dim-header-height) + var(--dim-container-main-margin-y) + ); } } } diff --git a/docs/classes/Advertising.html b/docs/classes/Advertising.html index b028ea19..9bccb9f9 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

Methods

Constructors

Methods

  • Parses the advertisement data coming from SwitchBot device.

    +Advertising | node-switchbot
    node-switchbot
      Preparing search index...

      Class Advertising

      Represents the advertising data parser for SwitchBot devices.

      +
      Index

      Constructors

      Methods

      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 @@

        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 @@

        Returns Promise<any>

        • The parsed service data.
        -
      +
    diff --git a/docs/classes/ErrorUtils.html b/docs/classes/ErrorUtils.html new file mode 100644 index 00000000..7a32dd17 --- /dev/null +++ b/docs/classes/ErrorUtils.html @@ -0,0 +1,25 @@ +ErrorUtils | node-switchbot
    node-switchbot
      Preparing search index...

      Class ErrorUtils

      Enhanced error handling utilities.

      +
      Index

      Constructors

      Methods

      • Creates a command error with context.

        +

        Parameters

        • command: string

          The command that failed

          +
        • deviceId: string

          The device ID

          +
        • Optionalcause: Error

          The underlying cause

          +

        Returns Error

        A descriptive command error

        +
      • Creates a connection error with context.

        +

        Parameters

        • deviceId: string

          The device ID that failed to connect

          +
        • Optionalcause: Error

          The underlying cause of the connection failure

          +

        Returns Error

        A descriptive connection error

        +
      • Creates a timeout error with context.

        +

        Parameters

        • operation: string

          The operation that timed out

          +
        • timeoutMs: number

          The timeout duration in milliseconds

          +

        Returns Error

        A descriptive timeout error

        +
      • Wraps an async operation with timeout and enhanced error handling.

        +

        Type Parameters

        • T

        Parameters

        • operation: Promise<T>

          The async operation to wrap

          +
        • timeoutMs: number

          Timeout in milliseconds

          +
        • operationName: string

          Name of the operation for error messages

          +

        Returns Promise<T>

        Promise that resolves with the operation result or rejects with timeout

        +
      diff --git a/docs/classes/ParameterChecker.html b/docs/classes/ParameterChecker.html new file mode 100644 index 00000000..ee81e285 --- /dev/null +++ b/docs/classes/ParameterChecker.html @@ -0,0 +1,69 @@ +ParameterChecker | node-switchbot
      node-switchbot
        Preparing search index...

        Class ParameterChecker

        Hierarchy

        • EventEmitter
          • ParameterChecker
        Index

        Constructors

        • Parameters

          • Optionaloptions: EventEmitterOptions

          Returns ParameterChecker

        Accessors

        Methods

        • Checks if the specified object contains valid values based on the provided rules.

          +

          Parameters

          • obj: Record<string, unknown>

            Object including parameters you want to check.

            +
          • rules: Record<string, Rule>

            Object including rules for the parameters.

            +
          • Optionalrequired: boolean = false

            Flag whether the obj is required or not.

            +

          Returns Promise<boolean>

            +
          • Resolves to true if the value is valid, false otherwise.
          • +
          +
        • Checks if the value is an array.

          +

          Parameters

          • value: unknown

            The value to check.

            +
          • rule: Rule

            The rule object containing validation criteria.

            +
          • Optionalname: string = 'value'

            The parameter name.

            +

          Returns Promise<boolean>

            +
          • Resolves to true if the value is valid, false otherwise.
          • +
          +
        • Checks if the value is a boolean.

          +

          Parameters

          • value: unknown

            The value to check.

            +
          • rule: Rule

            The rule object containing validation criteria.

            +
          • Optionalname: string = 'value'

            The parameter name.

            +

          Returns Promise<boolean>

            +
          • Resolves to true if the value is valid, false otherwise.
          • +
          +
        • Checks if the value is a float.

          +

          Parameters

          • value: unknown

            The value to check.

            +
          • rule: Rule

            The rule object containing validation criteria.

            +
          • Optionalname: string = 'value'

            The parameter name.

            +

          Returns Promise<boolean>

            +
          • Resolves to true if the value is valid, false otherwise.
          • +
          +
        • Checks if the value is an integer.

          +

          Parameters

          • value: unknown

            The value to check.

            +
          • rule: Rule

            The rule object containing validation criteria.

            +
          • Optionalname: string = 'value'

            The parameter name.

            +

          Returns Promise<boolean>

            +
          • Resolves to true if the value is valid, false otherwise.
          • +
          +
        • Checks if the value is an object.

          +

          Parameters

          • value: unknown

            The value to check.

            +
          • rule: Rule

            The rule object containing validation criteria.

            +
          • Optionalname: string = 'value'

            The parameter name.

            +

          Returns Promise<boolean>

            +
          • Resolves to true if the value is valid, false otherwise.
          • +
          +
        • Checks if the value is specified (not undefined).

          +

          Parameters

          • value: unknown

            The value to check.

            +

          Returns boolean

            +
          • True if the value is specified, false otherwise.
          • +
          +
        • Checks if the value is a string.

          +

          Parameters

          • value: unknown

            The value to check.

            +
          • rule: Rule

            The rule object containing validation criteria.

            +
          • Optionalname: string = 'value'

            The parameter name.

            +

          Returns Promise<boolean>

            +
          • Resolves to true if the value is valid, false otherwise.
          • +
          +
        diff --git a/docs/classes/SwitchBotBLE.html b/docs/classes/SwitchBotBLE.html index 6f40f042..e197a323 100644 --- a/docs/classes/SwitchBotBLE.html +++ b/docs/classes/SwitchBotBLE.html @@ -1,41 +1,39 @@ -SwitchBotBLE | node-switchbot

        Class SwitchBotBLE

        SwitchBotBLE class to interact with SwitchBot devices.

        -

        Hierarchy

        • EventEmitter
          • SwitchBotBLE

        Constructors

        Properties

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

        Methods

        • Discovers Switchbot devices with enhanced error handling and logging.

          Parameters

          • params: Params = {}

            The discovery parameters.

          Returns Promise<SwitchbotDevice[]>

          A Promise that resolves with an array of discovered Switchbot devices.

          -
        • 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.

          Parameters

          • Optionalparams: Params = {}

            Optional parameters.

          Returns Promise<void>

          • Resolves when scanning starts successfully.
          -
        • Stops scanning for SwitchBot devices.

          Returns Promise<void>

          • Resolves when scanning stops successfully.
          -
        • Validates the parameters.

          Parameters

          • params: Params

            The parameters to validate.

          • schema: Record<string, unknown>

            The schema to validate against.

          Returns Promise<void>

          • Resolves if parameters are valid, otherwise throws an error.
          -
        • Waits for the specified time.

          Parameters

          • msec: number

            The time to wait in milliseconds.

          Returns Promise<void>

          • Resolves after the specified time.
          -
        +
        diff --git a/docs/classes/SwitchBotOpenAPI.html b/docs/classes/SwitchBotOpenAPI.html index aae2d239..839b3f05 100644 --- a/docs/classes/SwitchBotOpenAPI.html +++ b/docs/classes/SwitchBotOpenAPI.html @@ -1,47 +1,47 @@ -SwitchBotOpenAPI | node-switchbot

        Class SwitchBotOpenAPI

        The SwitchBotOpenAPI class provides methods to interact with the SwitchBot OpenAPI. +SwitchBotOpenAPI | node-switchbot

        node-switchbot
          Preparing search index...

          Class SwitchBotOpenAPI

          The SwitchBotOpenAPI class provides methods to interact with the SwitchBot OpenAPI. It allows you to retrieve device information, control devices, and manage webhooks.

          -
          const switchBotAPI = new SwitchBotOpenAPI('your-token', 'your-secret');

          // Get devices
          switchBotAPI.getDevices().then(response => {
          console.log(response);
          }).catch(error => {
          console.error(error);
          });

          // Control a device
          switchBotAPI.controlDevice('device-id', 'turnOn', 'default').then(response => {
          console.log(response);
          }).catch(error => {
          console.error(error);
          });

          // Setup webhook
          switchBotAPI.setupWebhook('http://your-webhook-url').then(() => {
          console.log('Webhook setup successfully');
          }).catch(error => {
          console.error(error);
          }); +
          const switchBotAPI = new SwitchBotOpenAPI('your-token', 'your-secret');

          // Get devices
          switchBotAPI.getDevices().then(response => {
          console.log(response);
          }).catch(error => {
          console.error(error);
          });

          // Control a device
          switchBotAPI.controlDevice('device-id', 'turnOn', 'default').then(response => {
          console.log(response);
          }).catch(error => {
          console.error(error);
          });

          // Setup webhook
          switchBotAPI.setupWebhook('http://your-webhook-url').then(() => {
          console.log('Webhook setup successfully');
          }).catch(error => {
          console.error(error);
          });
          -

          The API token used for authentication.

          -

          The secret key used for signing requests.

          -

          Hierarchy

          • EventEmitter
            • SwitchBotOpenAPI

          Constructors

          • Creates an instance of the SwitchBot OpenAPI client.

            +

            The API token used for authentication.

            +

            The secret key used for signing requests.

            +

          Hierarchy

          • EventEmitter
            • SwitchBotOpenAPI
          Index

          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.

              -
            • Optionalhostname: string

            Returns SwitchBotOpenAPI

          Properties

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

          Methods

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

            +
          • Optionalhostname: string

          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 ID 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 (default is 'command').

              +
            • commandType: commandType = 'command'

              The type of the command (default is 'command').

            • Optionaltoken: string

              (Optional) The token used for authentication. If not provided, the instance token will be used.

            • Optionalsecret: string

              (Optional) The secret used for authentication. If not provided, the instance secret will be used.

              -

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

            A promise that resolves to an object containing the response body and status code.

            -

            An error if the device control fails.

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

            +

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

          A promise that resolves to an object containing the response body and status code.

          +

          An error if the device control fails.

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

            Parameters

            • url: string

              The URL of the webhook to be deleted.

            • Optionaltoken: string

              (Optional) The token used for authentication. If not provided, the instance token will be used.

            • Optionalsecret: string

              (Optional) The secret used for authentication. If not provided, the instance secret will be used.

            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.

            +

            Will log an error if the deletion fails.

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

            Parameters

            • Optionaltoken: string

              (Optional) The token used for authentication. If not provided, the instance token will be used.

            • Optionalsecret: string

              (Optional) The secret used for authentication. If not provided, the instance secret will be used.

            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.

            +

            Throws an error if the request to get devices fails.

            +
          • Retrieves the status of a specific device.

            Parameters

            • deviceId: string

              The unique identifier of the device.

            • Optionaltoken: string

              (Optional) The token used for authentication. If not provided, the instance token will be used.

            • Optionalsecret: string

              (Optional) The secret used for authentication. If not provided, the instance secret will be used.

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

            A promise that resolves to an object containing the device status and the status code of the request.

            -

            An error if the request fails.

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

            +

            An error if the request fails.

            +
          • 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. @@ -53,5 +53,5 @@
          • Optionaltoken: string

            (Optional) The token used for authentication. If not provided, the instance token will be used.

          • Optionalsecret: string

            (Optional) The secret used for authentication. If not provided, the instance secret will be used.

          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.

          -
          +

          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 b172adf9..3966fcd2 100644 --- a/docs/classes/SwitchbotDevice.html +++ b/docs/classes/SwitchbotDevice.html @@ -1,47 +1,47 @@ -SwitchbotDevice | node-switchbot

          Class SwitchbotDevice

          Represents a Switchbot Device.

          -

          Hierarchy (View Summary)

          Constructors

          Accessors

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

            Returns () => Promise<void>

          • set onConnectHandler(func: () => Promise<void>): void

            Parameters

            • func: () => Promise<void>

            Returns void

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

            Returns () => Promise<void>

          • set onDisconnectHandler(func: () => Promise<void>): void

            Parameters

            • func: () => Promise<void>

            Returns void

          Methods

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

            Parameters

            • reqBuf: Buffer

              The command buffer.

            Returns Promise<Buffer<ArrayBufferLike>>

            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.

            +
          • 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.

            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.

            -
          • Internal method to handle the connection process.

            +
          • Internal method to handle the connection process.

            Returns Promise<void>

            A Promise that resolves when the connection is complete.

            -
          • 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>

          • Sets the device name.

            Parameters

            • name: string

              The new device name.

            Returns Promise<void>

            A Promise that resolves when the name is set.

            -
          • Unsubscribes from the notify characteristic.

            +
          • Unsubscribes from the notify characteristic.

            Returns Promise<void>

            A Promise that resolves when the unsubscription is complete.

            -
          +
          diff --git a/docs/classes/ValidationUtils.html b/docs/classes/ValidationUtils.html new file mode 100644 index 00000000..31c9dc32 --- /dev/null +++ b/docs/classes/ValidationUtils.html @@ -0,0 +1,51 @@ +ValidationUtils | node-switchbot
          node-switchbot
            Preparing search index...

            Class ValidationUtils

            Utility class for comprehensive input validation with improved error messages.

            +
            Index

            Constructors

            Methods

            • Validates buffer and throws descriptive error.

              +

              Parameters

              • buffer: any

                The buffer to validate

                +
              • OptionalexpectedLength: number

                Optional expected length

                +
              • paramName: string = 'buffer'

                The parameter name for error reporting

                +

              Returns asserts buffer is Buffer<ArrayBufferLike>

              When buffer is not a Buffer

              +

              When buffer length doesn't match expected

              +
            • Validates that a value is one of the allowed enum values.

              +

              Type Parameters

              • T

              Parameters

              • value: any

                The value to validate

                +
              • allowedValues: readonly T[]

                Array of allowed values

                +
              • paramName: string = 'value'

                The parameter name for error reporting

                +

              Returns asserts value is T

              When value is not in allowed values

              +
            • Validates MAC address format.

              +

              Parameters

              • address: any

                The MAC address to validate

                +
              • paramName: string = 'address'

                The parameter name for error reporting

                +

              Returns asserts address is string

              When address is not a string

              +

              When address format is invalid

              +
            • Validates percentage value (0-100).

              +

              Parameters

              • value: number

                The value to validate

                +
              • paramName: string = 'value'

                The parameter name for error reporting

                +

              Returns void

              When value is not within valid range

              +

              When value is not a number

              +
            • Validates numeric range with enhanced checks.

              +

              Parameters

              • value: number

                The value to validate

                +
              • min: number

                Minimum allowed value

                +
              • max: number

                Maximum allowed value

                +
              • paramName: string = 'value'

                The parameter name for error reporting

                +
              • mustBeInteger: boolean = false

                Whether the value must be an integer

                +

              Returns void

              When value is not a number

              +

              When value is outside valid range

              +
            • Validates RGB color value (0-255).

              +

              Parameters

              • value: number

                The color value to validate

                +
              • colorName: string = 'color'

                The color name for error reporting

                +

              Returns void

              When value is not within valid range

              +

              When value is not a number

              +
            • Validates string input with comprehensive checks.

              +

              Parameters

              • value: any

                The value to validate

                +
              • paramName: string = 'value'

                The parameter name for error reporting

                +
              • minLength: number = 1

                Minimum required length

                +
              • OptionalmaxLength: number

                Optional maximum length

                +

              Returns asserts value is string

              When value is not a string

              +

              When string length is invalid

              +
            diff --git a/docs/classes/WoAirPurifier.html b/docs/classes/WoAirPurifier.html new file mode 100644 index 00000000..8b296b0c --- /dev/null +++ b/docs/classes/WoAirPurifier.html @@ -0,0 +1,83 @@ +WoAirPurifier | node-switchbot
            node-switchbot
              Preparing search index...

              Class WoAirPurifier

              Class representing a SwitchBot Air Purifier device.

              +

              Hierarchy (View Summary)

              Index

              Constructors

              Accessors

              • get address(): string

                Returns string

              • get connectionState(): string

                Returns string

              • get id(): string

                Returns string

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

                Returns () => Promise<void>

              • set onConnectHandler(func: () => Promise<void>): void

                Parameters

                • func: () => Promise<void>

                Returns void

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

                Returns () => Promise<void>

              • set onDisconnectHandler(func: () => Promise<void>): void

                Parameters

                • func: () => Promise<void>

                Returns void

              Methods

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

                +

                Parameters

                • reqBuf: Buffer

                  The command buffer.

                  +

                Returns Promise<Buffer<ArrayBufferLike>>

                A Promise that resolves with the response buffer.

                +
              • Internal method to handle the connection process.

                +

                Returns Promise<void>

                A Promise that resolves when the connection 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 air purifier with the given byte array.

                +

                Parameters

                • bytes: number[]

                  The byte array to send.

                  +

                Returns Promise<boolean>

                  +
                • Resolves with true if the operation was successful.
                • +
                +
              • Sets the device name.

                +

                Parameters

                • name: string

                  The new device name.

                  +

                Returns Promise<void>

                A Promise that resolves when the name is set.

                +
              • Sets the mode of the air purifier.

                +

                Parameters

                • mode: number

                  The mode value (1-4).

                  +

                Returns Promise<boolean>

                  +
                • Resolves with true if the operation was successful.
                • +
                +
              • Sets the speed of the air purifier.

                +

                Parameters

                • speed: number

                  The speed value (0-100).

                  +

                Returns Promise<boolean>

                  +
                • Resolves with true if the operation was successful.
                • +
                +
              • Turns the air purifier off.

                +

                Returns Promise<boolean>

                  +
                • Resolves with true if the air purifier is turned off.
                • +
                +
              • Turns the air purifier on.

                +

                Returns Promise<boolean>

                  +
                • Resolves with true if the air purifier is turned on.
                • +
                +
              • Parses service data for air purifier devices.

                +

                Parameters

                • serviceData: null | Buffer<ArrayBufferLike>

                  The service data buffer.

                  +
                • manufacturerData: null | Buffer<ArrayBufferLike>

                  The manufacturer data buffer.

                  +
                • OptionalemitLog: (level: string, message: string) => void

                  The function to emit log messages.

                  +

                Returns null | airPurifierServiceData

                  +
                • The parsed service data or null.
                • +
                +
              diff --git a/docs/classes/WoAirPurifierTable.html b/docs/classes/WoAirPurifierTable.html new file mode 100644 index 00000000..3d1853a7 --- /dev/null +++ b/docs/classes/WoAirPurifierTable.html @@ -0,0 +1,83 @@ +WoAirPurifierTable | node-switchbot
              node-switchbot
                Preparing search index...

                Class WoAirPurifierTable

                Class representing a SwitchBot Air Purifier Table device.

                +

                Hierarchy (View Summary)

                Index

                Constructors

                Accessors

                • get address(): string

                  Returns string

                • get connectionState(): string

                  Returns string

                • get id(): string

                  Returns string

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

                  Returns () => Promise<void>

                • set onConnectHandler(func: () => Promise<void>): void

                  Parameters

                  • func: () => Promise<void>

                  Returns void

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

                  Returns () => Promise<void>

                • set onDisconnectHandler(func: () => Promise<void>): void

                  Parameters

                  • func: () => Promise<void>

                  Returns void

                Methods

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

                  +

                  Parameters

                  • reqBuf: Buffer

                    The command buffer.

                    +

                  Returns Promise<Buffer<ArrayBufferLike>>

                  A Promise that resolves with the response buffer.

                  +
                • Internal method to handle the connection process.

                  +

                  Returns Promise<void>

                  A Promise that resolves when the connection 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 air purifier table with the given byte array.

                  +

                  Parameters

                  • bytes: number[]

                    The byte array to send.

                    +

                  Returns Promise<boolean>

                    +
                  • Resolves with true if the operation was successful.
                  • +
                  +
                • Sets the device name.

                  +

                  Parameters

                  • name: string

                    The new device name.

                    +

                  Returns Promise<void>

                  A Promise that resolves when the name is set.

                  +
                • Sets the mode of the air purifier table.

                  +

                  Parameters

                  • mode: number

                    The mode value (1-4).

                    +

                  Returns Promise<boolean>

                    +
                  • Resolves with true if the operation was successful.
                  • +
                  +
                • Sets the speed of the air purifier table.

                  +

                  Parameters

                  • speed: number

                    The speed value (0-100).

                    +

                  Returns Promise<boolean>

                    +
                  • Resolves with true if the operation was successful.
                  • +
                  +
                • Turns the air purifier table off.

                  +

                  Returns Promise<boolean>

                    +
                  • Resolves with true if the air purifier table is turned off.
                  • +
                  +
                • Turns the air purifier table on.

                  +

                  Returns Promise<boolean>

                    +
                  • Resolves with true if the air purifier table is turned on.
                  • +
                  +
                • Parses service data for air purifier table devices.

                  +

                  Parameters

                  • serviceData: null | Buffer<ArrayBufferLike>

                    The service data buffer.

                    +
                  • manufacturerData: null | Buffer<ArrayBufferLike>

                    The manufacturer data buffer.

                    +
                  • OptionalemitLog: (level: string, message: string) => void

                    The function to emit log messages.

                    +

                  Returns null | airPurifierTableServiceData

                    +
                  • The parsed service data or null.
                  • +
                  +
                diff --git a/docs/classes/WoBlindTilt.html b/docs/classes/WoBlindTilt.html index c78eb235..d9728635 100644 --- a/docs/classes/WoBlindTilt.html +++ b/docs/classes/WoBlindTilt.html @@ -1,73 +1,73 @@ -WoBlindTilt | node-switchbot

                Class WoBlindTilt

                Class representing a WoBlindTilt device.

                -

                Hierarchy (View Summary)

                Constructors

                Accessors

                • get address(): string

                  Returns string

                • get connectionState(): string

                  Returns string

                • get id(): string

                  Returns string

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

                  Returns () => Promise<void>

                • set onConnectHandler(func: () => Promise<void>): void

                  Parameters

                  • func: () => Promise<void>

                  Returns void

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

                  Returns () => Promise<void>

                • set onDisconnectHandler(func: () => Promise<void>): void

                  Parameters

                  • func: () => 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>

                • Opens the blind tilt to the fully open position.

                  +

                  Returns Promise<void>

                • Pauses the blind tilt operation.

                  +

                  Returns Promise<void>

                • Runs the blind tilt to the specified position.

                  Parameters

                  • percent: number

                    The target position percentage (0-100).

                  • mode: number

                    The running mode (0 or 1).

                    -

                  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 and manufacturer data for the WoBlindTilt device.

                  +
                • Parses the service data and manufacturer data for the WoBlindTilt device.

                  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.

                    @@ -75,4 +75,4 @@

                  Returns Promise<null | blindTiltServiceData>

                  • The parsed data object or null if the data is invalid.
                  -
                +
                diff --git a/docs/classes/WoBulb.html b/docs/classes/WoBulb.html index 604a314f..0cd16659 100644 --- a/docs/classes/WoBulb.html +++ b/docs/classes/WoBulb.html @@ -1,67 +1,67 @@ -WoBulb | node-switchbot

                Class representing a WoBulb device.

                -

                Hierarchy (View Summary)

                Constructors

                Accessors

                • get address(): string

                  Returns string

                • get connectionState(): string

                  Returns string

                • get id(): string

                  Returns string

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

                  Returns () => Promise<void>

                • set onConnectHandler(func: () => Promise<void>): void

                  Parameters

                  • func: () => Promise<void>

                  Returns void

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

                  Returns () => Promise<void>

                • set onDisconnectHandler(func: () => Promise<void>): void

                  Parameters

                  • func: () => Promise<void>

                  Returns void

                Methods

                • Reads the state of the bulb.

                  Returns Promise<boolean>

                  • Resolves with a boolean indicating whether the bulb is ON (true) or OFF (false).
                  -
                • Sets the brightness of the bulb.

                  +
                • Sets the brightness of the bulb.

                  Parameters

                  • brightness: number

                    The brightness percentage (0-100).

                  Returns Promise<boolean>

                  • Resolves with a boolean indicating whether the operation was successful.
                  -
                • Sets the color temperature of the bulb.

                  +
                • Sets the color temperature of the bulb.

                  Parameters

                  • color_temperature: number

                    The color temperature percentage (0-100).

                  Returns Promise<boolean>

                  • Resolves with a boolean indicating whether the operation was successful.
                  -
                • Sets the device name.

                  +
                • Sets the device name.

                  Parameters

                  • name: string

                    The new device name.

                  Returns Promise<void>

                  A Promise that resolves when the name is set.

                  -
                • Sets the RGB color of the bulb.

                  +
                • Sets the RGB color of the bulb.

                  Parameters

                  • brightness: number

                    The brightness percentage (0-100).

                  • red: number

                    The red color value (0-255).

                  • green: number

                    The green color value (0-255).

                    @@ -69,21 +69,21 @@

                  Returns Promise<boolean>

                  • Resolves with a boolean indicating whether the operation was successful.
                  -
                • Turns off the bulb.

                  Returns Promise<boolean>

                  • Resolves with a boolean indicating whether the bulb is OFF (false).
                  -
                • Turns on the bulb.

                  Returns Promise<boolean>

                  • Resolves with a boolean indicating whether the bulb is ON (true).
                  -
                • Unsubscribes from the notify characteristic.

                  +
                • Parses the service data for WoBulb.

                  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.

                  Returns Promise<null | colorBulbServiceData>

                  • Parsed service data or null if invalid.
                  -
                +
                diff --git a/docs/classes/WoCeilingLight.html b/docs/classes/WoCeilingLight.html index 8b28748b..85f3d2e5 100644 --- a/docs/classes/WoCeilingLight.html +++ b/docs/classes/WoCeilingLight.html @@ -1,75 +1,75 @@ -WoCeilingLight | node-switchbot

                Class WoCeilingLight

                Class representing a WoCeilingLight device.

                -

                Hierarchy (View Summary)

                Constructors

                Accessors

                • get address(): string

                  Returns string

                • get connectionState(): string

                  Returns string

                • get id(): string

                  Returns string

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

                  Returns () => Promise<void>

                • set onConnectHandler(func: () => Promise<void>): void

                  Parameters

                  • func: () => Promise<void>

                  Returns void

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

                  Returns () => Promise<void>

                • set onDisconnectHandler(func: () => Promise<void>): void

                  Parameters

                  • func: () => Promise<void>

                  Returns void

                Methods

                • Sends a command to the ceiling light.

                  Parameters

                  • bytes: number[]

                    The command bytes.

                  Returns Promise<boolean>

                  • Resolves with a boolean indicating whether the operation was successful.
                  -
                • Reads the state of the ceiling light.

                  +
                • Reads the state of the ceiling light.

                  Returns Promise<boolean>

                  • Resolves with a boolean indicating whether the light is ON (true) or OFF (false).
                  -
                • Sets the brightness of the ceiling light.

                  +
                • Sets the brightness of the ceiling light.

                  Parameters

                  • brightness: number

                    The brightness percentage (0-100).

                  Returns Promise<boolean>

                  • Resolves with a boolean indicating whether the operation was successful.
                  -
                • Sets the color temperature of the ceiling light.

                  +
                • Sets the color temperature of the ceiling light.

                  Parameters

                  • color_temperature: number

                    The color temperature percentage (0-100).

                  Returns Promise<boolean>

                  • Resolves with a boolean indicating whether the operation was successful.
                  -
                • Sets the device name.

                  +
                • Sets the device name.

                  Parameters

                  • name: string

                    The new device name.

                  Returns Promise<void>

                  A Promise that resolves when the name is set.

                  -
                • Sets the RGB color of the ceiling light.

                  +
                • Sets the RGB color of the ceiling light.

                  Parameters

                  • brightness: number

                    The brightness percentage (0-100).

                  • red: number

                    The red color value (0-255).

                  • green: number

                    The green color value (0-255).

                    @@ -77,31 +77,31 @@

                  Returns Promise<boolean>

                  • Resolves with a boolean indicating whether the operation was successful.
                  -
                • Sets the state of the ceiling light.

                  +
                • Sets the state of the ceiling light.

                  Parameters

                  • reqByteArray: number[]

                    The request byte array.

                  Returns Promise<boolean>

                  • Resolves with a boolean indicating whether the operation was successful.
                  -
                • Turns off the ceiling light.

                  Returns Promise<boolean>

                  • Resolves with a boolean indicating whether the light is OFF (false).
                  -
                • Turns on the ceiling light.

                  Returns Promise<boolean>

                  • Resolves with a boolean indicating whether the light is ON (true).
                  -
                • Unsubscribes from the notify characteristic.

                  +
                • Parses the service data for WoCeilingLight.

                  Parameters

                  • manufacturerData: Buffer

                    The manufacturer data buffer.

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

                    The function to emit log messages.

                  Returns Promise<null | ceilingLightServiceData>

                  • Parsed service data or null if invalid.
                  -
                • Parses the service data for WoCeilingLight Pro.

                  +
                • Parses the service data for WoCeilingLight Pro.

                  Parameters

                  • manufacturerData: Buffer

                    The manufacturer data buffer.

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

                    The function to emit log messages.

                  Returns Promise<null | ceilingLightProServiceData>

                  • Parsed service data or null if invalid.
                  -
                +
                diff --git a/docs/classes/WoContact.html b/docs/classes/WoContact.html index ac676b87..84fba6a3 100644 --- a/docs/classes/WoContact.html +++ b/docs/classes/WoContact.html @@ -1,52 +1,52 @@ -WoContact | node-switchbot

                Class representing a WoContact device.

                -

                Hierarchy (View Summary)

                Constructors

                Accessors

                • get address(): string

                  Returns string

                • get connectionState(): string

                  Returns string

                • get id(): string

                  Returns string

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

                  Returns () => Promise<void>

                • set onConnectHandler(func: () => Promise<void>): void

                  Parameters

                  • func: () => Promise<void>

                  Returns void

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

                  Returns () => Promise<void>

                • set onDisconnectHandler(func: () => Promise<void>): void

                  Parameters

                  • func: () => Promise<void>

                  Returns void

                Methods

                • 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 WoContact.

                  Parameters

                  • serviceData: Buffer

                    The service data buffer.

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

                    The function to emit log messages.

                  Returns Promise<null | contactSensorServiceData>

                  • Parsed service data or null if invalid.
                  -
                +
                diff --git a/docs/classes/WoCurtain.html b/docs/classes/WoCurtain.html index e51160bd..502eeb14 100644 --- a/docs/classes/WoCurtain.html +++ b/docs/classes/WoCurtain.html @@ -1,67 +1,67 @@ -WoCurtain | node-switchbot

                Class representing a WoCurtain device.

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

                  Parameters

                  • reqBuf: Buffer

                    The command buffer.

                  Returns Promise<Buffer<ArrayBufferLike>>

                  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.

                  -
                • Internal method to handle the connection process.

                  Returns Promise<void>

                  A Promise that resolves when the connection 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>

                • Pauses the curtain.

                  -

                  Returns Promise<void>

                • Runs the curtain to the target position.

                  +

                Returns Promise<void>

                • Pauses the curtain.

                  +

                  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.

                    @@ -69,4 +69,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 45319242..c4937096 100644 --- a/docs/classes/WoHand.html +++ b/docs/classes/WoHand.html @@ -1,62 +1,62 @@ -WoHand | node-switchbot

                Class representing a WoHand device.

                -

                Hierarchy (View Summary)

                Constructors

                Accessors

                • get address(): string

                  Returns string

                • get connectionState(): string

                  Returns string

                • get id(): string

                  Returns string

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

                  Returns () => Promise<void>

                • set onConnectHandler(func: () => Promise<void>): void

                  Parameters

                  • func: () => Promise<void>

                  Returns void

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

                  Returns () => Promise<void>

                • set onDisconnectHandler(func: () => Promise<void>): void

                  Parameters

                  • func: () => Promise<void>

                  Returns void

                Methods

                • Presses the bot.

                  +

                  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.

                  -
                • Turns off the bot.

                  -

                  Returns Promise<void>

                • Turns on the bot.

                  -

                  Returns Promise<void>

                • Turns off the bot.

                  +

                  Returns Promise<void>

                • Turns on the bot.

                  +

                  Returns Promise<void>

                • Moves the bot up.

                  -

                  Returns Promise<void>

                • Parses the service data for WoHand.

                  Parameters

                  • serviceData: Buffer

                    The service data buffer.

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

                    The function to emit log messages.

                  Returns Promise<null | botServiceData>

                  • Parsed service data or null if invalid.
                  -
                +
                diff --git a/docs/classes/WoHub2.html b/docs/classes/WoHub2.html index b09245db..7b7f5f1d 100644 --- a/docs/classes/WoHub2.html +++ b/docs/classes/WoHub2.html @@ -1,52 +1,52 @@ -WoHub2 | node-switchbot

                Class representing a WoHub2 device.

                -

                Hierarchy (View Summary)

                Constructors

                Accessors

                • get address(): string

                  Returns string

                • get connectionState(): string

                  Returns string

                • get id(): string

                  Returns string

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

                  Returns () => Promise<void>

                • set onConnectHandler(func: () => Promise<void>): void

                  Parameters

                  • func: () => Promise<void>

                  Returns void

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

                  Returns () => Promise<void>

                • set onDisconnectHandler(func: () => Promise<void>): void

                  Parameters

                  • func: () => Promise<void>

                  Returns void

                Methods

                • 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 WoHub2.

                  Parameters

                  • manufacturerData: Buffer

                    The manufacturer data buffer.

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

                    The function to emit log messages.

                  Returns Promise<null | hub2ServiceData>

                  • Parsed service data or null if invalid.
                  -
                +
                diff --git a/docs/classes/WoHub3.html b/docs/classes/WoHub3.html new file mode 100644 index 00000000..ff82b313 --- /dev/null +++ b/docs/classes/WoHub3.html @@ -0,0 +1,52 @@ +WoHub3 | node-switchbot
                node-switchbot
                  Preparing search index...

                  Class WoHub3

                  Class representing a WoHub3 device.

                  +

                  Hierarchy (View Summary)

                  Index

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

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

                    +

                    Parameters

                    • reqBuf: Buffer

                      The command buffer.

                      +

                    Returns Promise<Buffer<ArrayBufferLike>>

                    A Promise that resolves with the response buffer.

                    +
                  • Internal method to handle the connection process.

                    +

                    Returns Promise<void>

                    A Promise that resolves when the connection 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.

                    +

                    Parameters

                    • name: string

                      The new device name.

                      +

                    Returns Promise<void>

                    A Promise that resolves when the name is set.

                    +
                  • Parses the service data for WoHub3.

                    +

                    Parameters

                    • manufacturerData: Buffer

                      The manufacturer data buffer.

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

                      The function to emit log messages.

                      +

                    Returns Promise<null | hub3ServiceData>

                      +
                    • Parsed service data or null if invalid.
                    • +
                    +
                  diff --git a/docs/classes/WoHumi.html b/docs/classes/WoHumi.html index b094054a..a69dfe30 100644 --- a/docs/classes/WoHumi.html +++ b/docs/classes/WoHumi.html @@ -1,67 +1,67 @@ -WoHumi | node-switchbot

                  Class representing a WoHumi device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • Sets the humidifier level.

                    Parameters

                    • level: number

                      The level to set (0-100).

                      -

                    Returns Promise<void>

                  • Sets the humidifier to auto mode.

                    -

                    Returns Promise<void>

                  • Sets the device name.

                    +

                  Returns Promise<void>

                  • Sets the humidifier to auto mode.

                    +

                    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.

                    -
                  • Sets the humidifier to manual mode.

                    -

                    Returns Promise<void>

                  • Turns off the humidifier.

                    -

                    Returns Promise<void>

                  • Turns on the humidifier.

                    -

                    Returns Promise<void>

                  • Sets the humidifier to manual mode.

                    +

                    Returns Promise<void>

                  • Turns off the humidifier.

                    +

                    Returns Promise<void>

                  • Turns on the humidifier.

                    +

                    Returns Promise<void>

                  • Parses the service data for WoHumi.

                    Parameters

                    • serviceData: Buffer

                      The service data buffer.

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

                      The function to emit log messages.

                    Returns Promise<null | humidifierServiceData>

                    • Parsed service data or null if invalid.
                    -
                  +
                  diff --git a/docs/classes/WoHumi2.html b/docs/classes/WoHumi2.html index cc8baa87..87fcf257 100644 --- a/docs/classes/WoHumi2.html +++ b/docs/classes/WoHumi2.html @@ -1,67 +1,67 @@ -WoHumi2 | node-switchbot

                  Class representing a WoHumi device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • Sets the humidifier level.

                    Parameters

                    • level: number

                      The level to set (0-100).

                      -

                    Returns Promise<void>

                  • Sets the humidifier to auto mode.

                    -

                    Returns Promise<void>

                  • Sets the device name.

                    +

                  Returns Promise<void>

                  • Sets the humidifier to auto mode.

                    +

                    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.

                    -
                  • Sets the humidifier to manual mode.

                    -

                    Returns Promise<void>

                  • Turns off the humidifier.

                    -

                    Returns Promise<void>

                  • Turns on the humidifier.

                    -

                    Returns Promise<void>

                  • Sets the humidifier to manual mode.

                    +

                    Returns Promise<void>

                  • Turns off the humidifier.

                    +

                    Returns Promise<void>

                  • Turns on the humidifier.

                    +

                    Returns Promise<void>

                  • Parses the service data for WoHumi.

                    Parameters

                    • serviceData: Buffer

                      The service data buffer.

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

                      The function to emit log messages.

                    Returns Promise<null | humidifier2ServiceData>

                    • Parsed service data or null if invalid.
                    -
                  +
                  diff --git a/docs/classes/WoIOSensorTH.html b/docs/classes/WoIOSensorTH.html index 9d5f3109..21958bca 100644 --- a/docs/classes/WoIOSensorTH.html +++ b/docs/classes/WoIOSensorTH.html @@ -1,53 +1,53 @@ -WoIOSensorTH | node-switchbot

                  Class WoIOSensorTH

                  Class representing a WoIOSensorTH device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • 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 WoIOSensorTH.

                    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.

                    Returns Promise<null | outdoorMeterServiceData>

                    • Parsed service data or null if invalid.
                    -
                  +
                  diff --git a/docs/classes/WoKeypad.html b/docs/classes/WoKeypad.html index f515e677..dfd9fdd1 100644 --- a/docs/classes/WoKeypad.html +++ b/docs/classes/WoKeypad.html @@ -1,52 +1,52 @@ -WoKeypad | node-switchbot

                  Class representing a WoKeypad device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • 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 WoKeypad.

                    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.

                    Returns Promise<null | keypadDetectorServiceData>

                    • Parsed service data or null if invalid.
                    -
                  +
                  diff --git a/docs/classes/WoLeak.html b/docs/classes/WoLeak.html index 6f56a61d..5e59b0e9 100644 --- a/docs/classes/WoLeak.html +++ b/docs/classes/WoLeak.html @@ -1,53 +1,53 @@ -WoLeak | node-switchbot

                  Class representing a WoLeak device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • 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 WoLeak.

                    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.

                    Returns Promise<null | waterLeakDetectorServiceData>

                    • Parsed service data or null if invalid.
                    -
                  +
                  diff --git a/docs/classes/WoPlugMiniJP.html b/docs/classes/WoPlugMiniJP.html index e4dad5c4..4f4f7e28 100644 --- a/docs/classes/WoPlugMiniJP.html +++ b/docs/classes/WoPlugMiniJP.html @@ -1,78 +1,78 @@ -WoPlugMiniJP | node-switchbot

                  Class WoPlugMiniJP

                  Class representing a WoPlugMini device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • Operates the plug with the given bytes.

                    Parameters

                    • bytes: number[]

                      The byte array to send to the plug.

                    Returns Promise<boolean>

                    • Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
                    -
                  • Reads the state of the plug.

                    Returns Promise<boolean>

                    • Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
                    -
                  • Sets the device name.

                    +
                  • Sets the device name.

                    Parameters

                    • name: string

                      The new device name.

                    Returns Promise<void>

                    A Promise that resolves when the name is set.

                    -
                  • Toggles the state of the plug.

                    Returns Promise<boolean>

                    • Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
                    -
                  • Turns off the plug.

                    Returns Promise<boolean>

                    • Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
                    -
                  • Turns on the plug.

                    Returns Promise<boolean>

                    • Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
                    -
                  • Unsubscribes from the notify characteristic.

                    +
                  • Parses the service data for WoPlugMini JP.

                    Parameters

                    • manufacturerData: Buffer

                      The manufacturer data buffer.

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

                      The function to emit log messages.

                    Returns Promise<null | plugMiniJPServiceData>

                    • Parsed service data or null if invalid.
                    -
                  +
                  diff --git a/docs/classes/WoPlugMiniUS.html b/docs/classes/WoPlugMiniUS.html index 299e0d74..6a5e1508 100644 --- a/docs/classes/WoPlugMiniUS.html +++ b/docs/classes/WoPlugMiniUS.html @@ -1,78 +1,78 @@ -WoPlugMiniUS | node-switchbot

                  Class WoPlugMiniUS

                  Class representing a WoPlugMini device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • Operates the plug with the given bytes.

                    Parameters

                    • bytes: number[]

                      The byte array to send to the plug.

                    Returns Promise<boolean>

                    • Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
                    -
                  • Reads the state of the plug.

                    Returns Promise<boolean>

                    • Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
                    -
                  • Sets the device name.

                    +
                  • Sets the device name.

                    Parameters

                    • name: string

                      The new device name.

                    Returns Promise<void>

                    A Promise that resolves when the name is set.

                    -
                  • Toggles the state of the plug.

                    Returns Promise<boolean>

                    • Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
                    -
                  • Turns off the plug.

                    Returns Promise<boolean>

                    • Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
                    -
                  • Turns on the plug.

                    Returns Promise<boolean>

                    • Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
                    -
                  • Unsubscribes from the notify characteristic.

                    +
                  • Parses the service data for WoPlugMini US.

                    Parameters

                    • manufacturerData: Buffer

                      The manufacturer data buffer.

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

                      The function to emit log messages.

                    Returns Promise<null | plugMiniUSServiceData>

                    • Parsed service data or null if invalid.
                    -
                  +
                  diff --git a/docs/classes/WoPresence.html b/docs/classes/WoPresence.html index 34cdcfa3..79795424 100644 --- a/docs/classes/WoPresence.html +++ b/docs/classes/WoPresence.html @@ -1,52 +1,52 @@ -WoPresence | node-switchbot

                  Class WoPresence

                  Class representing a WoPresence device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • 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 WoPresence.

                    Parameters

                    • serviceData: Buffer

                      The service data buffer.

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

                      The function to emit log messages.

                    Returns Promise<null | motionSensorServiceData>

                    • Parsed service data or null if invalid.
                    -
                  +
                  diff --git a/docs/classes/WoRelaySwitch1.html b/docs/classes/WoRelaySwitch1.html index c893db2c..ac44a2ed 100644 --- a/docs/classes/WoRelaySwitch1.html +++ b/docs/classes/WoRelaySwitch1.html @@ -1,57 +1,57 @@ -WoRelaySwitch1 | node-switchbot

                  Class WoRelaySwitch1

                  Class representing a WoRelaySwitch1 device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • Sets the device name.

                    Parameters

                    • name: string

                      The new device name.

                    Returns Promise<void>

                    A Promise that resolves when the name is set.

                    -
                  • Turns off the bot.

                    -

                    Returns Promise<void>

                  • Turns on the bot.

                    -

                    Returns Promise<void>

                  • Turns off the bot.

                    +

                    Returns Promise<void>

                  • Turns on the bot.

                    +

                    Returns Promise<void>

                  • Parses the service data for WoRelaySwitch1.

                    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.

                    Returns Promise<null | relaySwitch1ServiceData>

                    • Parsed service data or null if invalid.
                    -
                  +
                  diff --git a/docs/classes/WoRelaySwitch1PM.html b/docs/classes/WoRelaySwitch1PM.html index 50b5585c..1afc16a4 100644 --- a/docs/classes/WoRelaySwitch1PM.html +++ b/docs/classes/WoRelaySwitch1PM.html @@ -1,57 +1,57 @@ -WoRelaySwitch1PM | node-switchbot

                  Class WoRelaySwitch1PM

                  Class representing a WoRelaySwitch1PM device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • Sets the device name.

                    Parameters

                    • name: string

                      The new device name.

                    Returns Promise<void>

                    A Promise that resolves when the name is set.

                    -
                  • Turns off the bot.

                    -

                    Returns Promise<void>

                  • Turns on the bot.

                    -

                    Returns Promise<void>

                  • Turns off the bot.

                    +

                    Returns Promise<void>

                  • Turns on the bot.

                    +

                    Returns Promise<void>

                  • Parses the service data for WoRelaySwitch1PM.

                    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.

                    Returns Promise<null | relaySwitch1PMServiceData>

                    • Parsed service data or null if invalid.
                    -
                  +
                  diff --git a/docs/classes/WoRemote.html b/docs/classes/WoRemote.html index f506924e..93d6df83 100644 --- a/docs/classes/WoRemote.html +++ b/docs/classes/WoRemote.html @@ -1,52 +1,52 @@ -WoRemote | node-switchbot

                  Class representing a WoRemote device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • 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 WoRemote.

                    Parameters

                    • serviceData: Buffer

                      The service data buffer.

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

                      The function to emit log messages.

                    Returns Promise<null | remoteServiceData>

                    • Parsed service data or null if invalid.
                    -
                  +
                  diff --git a/docs/classes/WoSensorTH.html b/docs/classes/WoSensorTH.html index ffa9a4c2..d3c446d7 100644 --- a/docs/classes/WoSensorTH.html +++ b/docs/classes/WoSensorTH.html @@ -1,46 +1,46 @@ -WoSensorTH | node-switchbot

                  Class WoSensorTH

                  Class representing a WoSensorTH device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • Sets the device name.

                    Parameters

                    • name: string

                      The new device name.

                    Returns Promise<void>

                    A Promise that resolves when the name is set.

                    -
                  • Parameters

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

                    Returns Promise<null | meterServiceData>

                  +
                  • Parameters

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

                    Returns Promise<null | meterServiceData>

                  diff --git a/docs/classes/WoSensorTHPlus.html b/docs/classes/WoSensorTHPlus.html index eac3ec60..6c5d5136 100644 --- a/docs/classes/WoSensorTHPlus.html +++ b/docs/classes/WoSensorTHPlus.html @@ -1,46 +1,46 @@ -WoSensorTHPlus | node-switchbot

                  Class WoSensorTHPlus

                  Class representing a WoSensorTH device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • Sets the device name.

                    Parameters

                    • name: string

                      The new device name.

                    Returns Promise<void>

                    A Promise that resolves when the name is set.

                    -
                  • Parameters

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

                    Returns Promise<null | meterPlusServiceData>

                  +
                  • Parameters

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

                    Returns Promise<null | meterPlusServiceData>

                  diff --git a/docs/classes/WoSensorTHPro.html b/docs/classes/WoSensorTHPro.html index caa06dd6..0bbb076f 100644 --- a/docs/classes/WoSensorTHPro.html +++ b/docs/classes/WoSensorTHPro.html @@ -1,46 +1,46 @@ -WoSensorTHPro | node-switchbot

                  Class WoSensorTHPro

                  Class representing a WoSensorTH device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • Sets the device name.

                    Parameters

                    • name: string

                      The new device name.

                    Returns Promise<void>

                    A Promise that resolves when the name is set.

                    -
                  • Parameters

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

                    Returns Promise<null | meterProServiceData>

                  +
                  • Parameters

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

                    Returns Promise<null | meterProServiceData>

                  diff --git a/docs/classes/WoSensorTHProCO2.html b/docs/classes/WoSensorTHProCO2.html index 9534d65b..4b5c2b09 100644 --- a/docs/classes/WoSensorTHProCO2.html +++ b/docs/classes/WoSensorTHProCO2.html @@ -1,46 +1,46 @@ -WoSensorTHProCO2 | node-switchbot

                  Class WoSensorTHProCO2

                  Class representing a WoSensorTH device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • Sets the device name.

                    Parameters

                    • name: string

                      The new device name.

                    Returns Promise<void>

                    A Promise that resolves when the name is set.

                    -
                  • Parameters

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

                    Returns Promise<null | meterProCO2ServiceData>

                  +
                  • Parameters

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

                    Returns Promise<null | meterProCO2ServiceData>

                  diff --git a/docs/classes/WoSmartLock.html b/docs/classes/WoSmartLock.html index 92f0d210..2cbc8bd7 100644 --- a/docs/classes/WoSmartLock.html +++ b/docs/classes/WoSmartLock.html @@ -1,113 +1,113 @@ -WoSmartLock | node-switchbot

                  Class WoSmartLock

                  Class representing a WoSmartLock device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Properties

                  encryption_key: null | Buffer<ArrayBufferLike> = null
                  iv: null | Buffer<ArrayBufferLike> = 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>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • Operates the lock with the given command.

                    Parameters

                    • key: string

                      The command key.

                    • Optionalencrypt: boolean = true

                      Whether to encrypt the command.

                    Returns Promise<Buffer<ArrayBufferLike>>

                    • The response buffer.
                    -
                  • Sets the device name.

                    +
                  • Sets the device name.

                    Parameters

                    • name: string

                      The new device name.

                    Returns Promise<void>

                    A Promise that resolves when the name is set.

                    -
                  • Initializes the encryption key info for valid lock communication.

                    Parameters

                    • keyId: string

                      The key ID.

                    • encryptionKey: string

                      The encryption key.

                      -

                    Returns Promise<void>

                  • Unlocks the Smart Lock.

                    +

                  Returns Promise<void>

                  • Unlocks the Smart Lock.

                    Returns Promise<number>

                    • The result of the unlock operation.
                    -
                  • Unlocks the Smart Lock without unlatching the door.

                    +
                  • Unlocks the Smart Lock without unlatching the door.

                    Returns Promise<number>

                    • The result of the unlock operation.
                    -
                  • Unsubscribes from the notify characteristic.

                    +
                  • Parameters

                    • code: number

                    Returns string

                  • Parameters

                    • code: number

                    Returns string

                  • Parses the service data from the SwitchBot Strip Light.

                    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.

                    Returns Promise<null | lockServiceData>

                    • Parsed service data or null if invalid.
                    -
                  • Parameters

                    • res: Buffer

                    Returns Promise<number>

                  +
                  • Parameters

                    • res: Buffer

                    Returns Promise<number>

                  diff --git a/docs/classes/WoSmartLockPro.html b/docs/classes/WoSmartLockPro.html index 7f9c9782..bb59edfc 100644 --- a/docs/classes/WoSmartLockPro.html +++ b/docs/classes/WoSmartLockPro.html @@ -1,113 +1,113 @@ -WoSmartLockPro | node-switchbot

                  Class WoSmartLockPro

                  Class representing a WoSmartLockPro device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Properties

                  encryption_key: null | Buffer<ArrayBufferLike> = null
                  iv: null | Buffer<ArrayBufferLike> = 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>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • Operates the lock with the given command.

                    Parameters

                    • key: string

                      The command key.

                    • Optionalencrypt: boolean = true

                      Whether to encrypt the command.

                    Returns Promise<Buffer<ArrayBufferLike>>

                    • The response buffer.
                    -
                  • Sets the device name.

                    +
                  • Sets the device name.

                    Parameters

                    • name: string

                      The new device name.

                    Returns Promise<void>

                    A Promise that resolves when the name is set.

                    -
                  • Initializes the encryption key info for valid lock communication.

                    Parameters

                    • keyId: string

                      The key ID.

                    • encryptionKey: string

                      The encryption key.

                      -

                    Returns Promise<void>

                  • Unlocks the Smart Lock.

                    +

                  Returns Promise<void>

                  • Unlocks the Smart Lock.

                    Returns Promise<number>

                    • The result of the unlock operation.
                    -
                  • Unlocks the Smart Lock without unlatching the door.

                    +
                  • Unlocks the Smart Lock without unlatching the door.

                    Returns Promise<number>

                    • The result of the unlock operation.
                    -
                  • Unsubscribes from the notify characteristic.

                    +
                  • Parameters

                    • code: number

                    Returns string

                  • Parameters

                    • code: number

                    Returns string

                  • Parses the service data from the SwitchBot Strip Light.

                    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.

                    Returns Promise<null | lockProServiceData>

                    • Parsed service data or null if invalid.
                    -
                  • Parameters

                    • res: Buffer

                    Returns Promise<number>

                  +
                  • Parameters

                    • res: Buffer

                    Returns Promise<number>

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

                  Class representing a WoStrip device.

                  -

                  Hierarchy (View Summary)

                  Constructors

                  Accessors

                  • get address(): string

                    Returns string

                  • get connectionState(): string

                    Returns string

                  • get id(): string

                    Returns string

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

                    Returns () => Promise<void>

                  • set onConnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

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

                    Returns () => Promise<void>

                  • set onDisconnectHandler(func: () => Promise<void>): void

                    Parameters

                    • func: () => Promise<void>

                    Returns void

                  Methods

                  • Operates the strip light with the given byte array.

                    Parameters

                    • bytes: number[]

                      The byte array to send.

                    Returns Promise<boolean>

                    • Resolves with true if the operation was successful.
                    -
                  • Reads the state of the strip light.

                    +
                  • Reads the state of the strip light.

                    Returns Promise<boolean>

                    • Resolves with true if the strip light is ON, false otherwise.
                    -
                  • Sets the brightness of the strip light.

                    +
                  • Sets the brightness of the strip light.

                    Parameters

                    • brightness: number

                      The brightness percentage (0-100).

                    Returns Promise<boolean>

                    • Resolves with true if the operation was successful.
                    -
                  • Sets the device name.

                    +
                  • Sets the device name.

                    Parameters

                    • name: string

                      The new device name.

                    Returns Promise<void>

                    A Promise that resolves when the name is set.

                    -
                  • Sets the RGB values of the strip light.

                    +
                  • Sets the RGB values of the strip light.

                    Parameters

                    • brightness: number

                      The brightness percentage (0-100).

                    • red: number

                      The red value (0-255).

                    • green: number

                      The green value (0-255).

                      @@ -70,25 +70,25 @@

                    Returns Promise<boolean>

                    • Resolves with true if the operation was successful.
                    -
                  • Sets the state of the strip light.

                    +
                  • Sets the state of the strip light.

                    Parameters

                    • reqByteArray: number[]

                      The request byte array.

                    Returns Promise<boolean>

                    • Resolves with true if the operation was successful.
                    -
                  • Turns the strip light off.

                    Returns Promise<boolean>

                    • Resolves with true if the strip light is OFF.
                    -
                  • Turns the strip light on.

                    Returns Promise<boolean>

                    • Resolves with true if the strip light is ON.
                    -
                  • Unsubscribes from the notify characteristic.

                    +
                  • Parses the service data from the SwitchBot Strip Light.

                    Parameters

                    • serviceData: Buffer

                      The service data buffer.

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

                      The function to emit log messages.

                    Returns Promise<null | stripLightServiceData>

                    • Parsed service data or null if invalid.
                    -
                  +
                  diff --git a/docs/enums/LogLevel.html b/docs/enums/LogLevel.html index df8df730..09e1b6c3 100644 --- a/docs/enums/LogLevel.html +++ b/docs/enums/LogLevel.html @@ -1,10 +1,10 @@ -LogLevel | node-switchbot

                  Enumeration LogLevel

                  Enum for log levels.

                  -

                  Enumeration Members

                  DEBUG: "debug"
                  DEBUGERROR: "debugerror"
                  DEBUGSUCCESS: "debugsuccess"
                  DEBUGWARN: "debugwarn"
                  ERROR: "error"
                  INFO: "info"
                  SUCCESS: "success"
                  WARN: "warn"
                  +LogLevel | node-switchbot
                  node-switchbot
                    Preparing search index...

                    Enumeration LogLevel

                    Enum for log levels.

                    +
                    Index

                    Enumeration Members

                    DEBUG: "debug"
                    DEBUGERROR: "debugerror"
                    DEBUGSUCCESS: "debugsuccess"
                    DEBUGWARN: "debugwarn"
                    ERROR: "error"
                    INFO: "info"
                    SUCCESS: "success"
                    WARN: "warn"
                    diff --git a/docs/enums/SwitchBotBLEModel.html b/docs/enums/SwitchBotBLEModel.html index 4a108bb4..39969a6a 100644 --- a/docs/enums/SwitchBotBLEModel.html +++ b/docs/enums/SwitchBotBLEModel.html @@ -1,29 +1,32 @@ -SwitchBotBLEModel | node-switchbot

                    Enumeration SwitchBotBLEModel

                    Enumeration Members

                    BlindTilt: "x"
                    Bot: "H"
                    CeilingLight: "q"
                    CeilingLightPro: "n"
                    ColorBulb: "u"
                    ContactSensor: "d"
                    Curtain: "c"
                    Curtain3: "{"
                    Hub2: "v"
                    Humidifier: "e"
                    Humidifier2: "#"
                    Keypad: "y"
                    Leak: "&"
                    Lock: "o"
                    LockPro: "$"
                    Meter: "T"
                    MeterPlus: "i"
                    MeterPro: "4"
                    MeterProCO2: "5"
                    MotionSensor: "s"
                    OutdoorMeter: "w"
                    PlugMiniJP: "j"
                    PlugMiniUS: "g"
                    RelaySwitch1: ";"
                    RelaySwitch1PM: "<"
                    Remote: "b"
                    StripLight: "r"
                    Unknown: "Unknown"
                    +SwitchBotBLEModel | node-switchbot
                    node-switchbot
                      Preparing search index...

                      Enumeration SwitchBotBLEModel

                      Index

                      Enumeration Members

                      AirPurifier: "+"
                      AirPurifierTable: "7"
                      BlindTilt: "x"
                      Bot: "H"
                      CeilingLight: "q"
                      CeilingLightPro: "n"
                      ColorBulb: "u"
                      ContactSensor: "d"
                      Curtain: "c"
                      Curtain3: "{"
                      Hub2: "v"
                      Hub3: "V"
                      Humidifier: "e"
                      Humidifier2: "#"
                      Keypad: "y"
                      Leak: "&"
                      Lock: "o"
                      LockPro: "$"
                      Meter: "T"
                      MeterPlus: "i"
                      MeterPro: "4"
                      MeterProCO2: "5"
                      MotionSensor: "s"
                      OutdoorMeter: "w"
                      PlugMiniJP: "j"
                      PlugMiniUS: "g"
                      RelaySwitch1: ";"
                      RelaySwitch1PM: "<"
                      Remote: "b"
                      StripLight: "r"
                      Unknown: "Unknown"
                      diff --git a/docs/enums/SwitchBotBLEModelFriendlyName.html b/docs/enums/SwitchBotBLEModelFriendlyName.html index 9e805c40..a2f79be2 100644 --- a/docs/enums/SwitchBotBLEModelFriendlyName.html +++ b/docs/enums/SwitchBotBLEModelFriendlyName.html @@ -1,30 +1,37 @@ -SwitchBotBLEModelFriendlyName | node-switchbot

                      Enumeration SwitchBotBLEModelFriendlyName

                      Enumeration Members

                      BatteryCirculatorFan: "Battery Circulator Fan"
                      BlindTilt: "Blind Tilt"
                      Bot: "Bot"
                      CeilingLight: "Ceiling Light"
                      CeilingLightPro: "Ceiling Light Pro"
                      CirculatorFan: "Circulator Fan"
                      ColorBulb: "Color Bulb"
                      ContactSensor: "Contact Sensor"
                      Curtain: "Curtain"
                      Curtain3: "Curtain 3"
                      Hub2: "Hub 2"
                      Humidifier: "Humidifier"
                      Humidifier2: "Humidifier2"
                      Keypad: "Keypad"
                      Leak: "Water Detector"
                      Lock: "Lock"
                      LockPro: "Lock Pro"
                      Meter: "Meter"
                      MeterPlus: "Meter Plus"
                      MeterPro: "Meter Pro"
                      MeterProCO2: "Meter Pro CO2"
                      MotionSensor: "Motion Sensor"
                      OutdoorMeter: "Outdoor Meter"
                      PlugMini: "Plug Mini"
                      RelaySwitch1: "Relay Switch 1"
                      RelaySwitch1PM: "Relay Switch 1PM"
                      Remote: "Remote"
                      StripLight: "Strip Light"
                      Unknown: "Unknown"
                      +SwitchBotBLEModelFriendlyName | node-switchbot
                      node-switchbot
                        Preparing search index...

                        Enumeration SwitchBotBLEModelFriendlyName

                        Index

                        Enumeration Members

                        AirPurifier: "Air Purifier"
                        AirPurifierPM2_5: "Air Purifier PM2.5"
                        AirPurifierTable: "Air Purifier Table"
                        AirPurifierTablePM2_5: "Air Purifier Table PM2.5"
                        AirPurifierTableVOC: "Air Purifier Table VOC"
                        AirPurifierVOC: "Air Purifier VOC"
                        BatteryCirculatorFan: "Battery Circulator Fan"
                        BlindTilt: "Blind Tilt"
                        Bot: "Bot"
                        CeilingLight: "Ceiling Light"
                        CeilingLightPro: "Ceiling Light Pro"
                        CirculatorFan: "Circulator Fan"
                        ColorBulb: "Color Bulb"
                        ContactSensor: "Contact Sensor"
                        Curtain: "Curtain"
                        Curtain3: "Curtain 3"
                        Hub2: "Hub 2"
                        Hub3: "Hub 3"
                        Humidifier: "Humidifier"
                        Humidifier2: "Humidifier2"
                        Keypad: "Keypad"
                        Leak: "Water Detector"
                        Lock: "Lock"
                        LockPro: "Lock Pro"
                        Meter: "Meter"
                        MeterPlus: "Meter Plus"
                        MeterPro: "Meter Pro"
                        MeterProCO2: "Meter Pro CO2"
                        MotionSensor: "Motion Sensor"
                        OutdoorMeter: "Outdoor Meter"
                        PlugMini: "Plug Mini"
                        RelaySwitch1: "Relay Switch 1"
                        RelaySwitch1PM: "Relay Switch 1PM"
                        Remote: "Remote"
                        StripLight: "Strip Light"
                        Unknown: "Unknown"
                        diff --git a/docs/enums/SwitchBotBLEModelName.html b/docs/enums/SwitchBotBLEModelName.html index fef7ed11..eccc3c4c 100644 --- a/docs/enums/SwitchBotBLEModelName.html +++ b/docs/enums/SwitchBotBLEModelName.html @@ -1,28 +1,31 @@ -SwitchBotBLEModelName | node-switchbot

                        Enumeration SwitchBotBLEModelName

                        Enumeration Members

                        BlindTilt: "WoBlindTilt"
                        Bot: "WoHand"
                        CeilingLight: "WoCeilingLight"
                        CeilingLightPro: "WoCeilingLightPro"
                        ColorBulb: "WoBulb"
                        ContactSensor: "WoContact"
                        Curtain: "WoCurtain"
                        Curtain3: "WoCurtain3"
                        Hub2: "WoHub2"
                        Humidifier: "WoHumi"
                        Humidifier2: "WoHumi2"
                        Keypad: "WoKeypad"
                        Leak: "WoLeakDetector"
                        Lock: "WoSmartLock"
                        LockPro: "WoSmartLockPro"
                        Meter: "WoSensorTH"
                        MeterPlus: "WoSensorTHPlus"
                        MeterPro: "WoSensorTHP"
                        MeterProCO2: "WoSensorTHPc"
                        MotionSensor: "WoMotion"
                        OutdoorMeter: "WoIOSensorTH"
                        PlugMini: "WoPlugMini"
                        RelaySwitch1: "WoRelaySwitch1Plus"
                        RelaySwitch1PM: "WoRelaySwitch1PM"
                        Remote: "WoRemote"
                        StripLight: "WoStrip"
                        Unknown: "Unknown"
                        +SwitchBotBLEModelName | node-switchbot
                        node-switchbot
                          Preparing search index...

                          Enumeration SwitchBotBLEModelName

                          Index

                          Enumeration Members

                          AirPurifier: "WoAirPurifier"
                          AirPurifierTable: "WoAirPurifierTable"
                          BlindTilt: "WoBlindTilt"
                          Bot: "WoHand"
                          CeilingLight: "WoCeilingLight"
                          CeilingLightPro: "WoCeilingLightPro"
                          ColorBulb: "WoBulb"
                          ContactSensor: "WoContact"
                          Curtain: "WoCurtain"
                          Curtain3: "WoCurtain3"
                          Hub2: "WoHub2"
                          Hub3: "WoHub3"
                          Humidifier: "WoHumi"
                          Humidifier2: "WoHumi2"
                          Keypad: "WoKeypad"
                          Leak: "WoLeakDetector"
                          Lock: "WoSmartLock"
                          LockPro: "WoSmartLockPro"
                          Meter: "WoSensorTH"
                          MeterPlus: "WoSensorTHPlus"
                          MeterPro: "WoSensorTHP"
                          MeterProCO2: "WoSensorTHPc"
                          MotionSensor: "WoMotion"
                          OutdoorMeter: "WoIOSensorTH"
                          PlugMini: "WoPlugMini"
                          RelaySwitch1: "WoRelaySwitch1Plus"
                          RelaySwitch1PM: "WoRelaySwitch1PM"
                          Remote: "WoRemote"
                          StripLight: "WoStrip"
                          Unknown: "Unknown"
                          diff --git a/docs/enums/SwitchBotModel.html b/docs/enums/SwitchBotModel.html index 07f3c0b8..b69fd5fc 100644 --- a/docs/enums/SwitchBotModel.html +++ b/docs/enums/SwitchBotModel.html @@ -1,47 +1,50 @@ -SwitchBotModel | node-switchbot

                          Enumeration SwitchBotModel

                          Enumeration Members

                          BatteryCirculatorFan: "W3800510"
                          BlindTilt: "W2701600"
                          Bot: "SwitchBot S1"
                          CeilingLight: "W2612230/W2612240"
                          CeilingLightPro: "W2612210/W2612220"
                          CirculatorFan: "W3800511"
                          ColorBulb: "W1401400"
                          ContactSensor: "W1201500"
                          Curtain: "W0701600"
                          Curtain3: "W2400000"
                          Hub2: "W3202100"
                          HubMini: "W0202200"
                          HubPlus: "SwitchBot Hub S1"
                          Humidifier: "W0801800"
                          Humidifier2: "WXXXXXXX"
                          IndoorCam: "W1301200"
                          K10: "K10+"
                          K10Pro: "K10+ Pro"
                          Keypad: "W2500010"
                          KeypadTouch: "W2500020"
                          Lock: "W1601700"
                          LockPro: "W3500000"
                          Meter: "SwitchBot MeterTH S1"
                          MeterPlusJP: "W2201500"
                          MeterPlusUS: "W2301500"
                          MeterPro: "W4900000"
                          MeterProCO2: "W4900010"
                          MotionSensor: "W1101500"
                          OutdoorMeter: "W3400010"
                          PanTiltCam: "W1801200"
                          PanTiltCam2K: "W3101100"
                          Plug: "SP11"
                          PlugMiniJP: "W2001400/W2001401"
                          PlugMiniUS: "W1901400/W1901401"
                          RelaySwitch1: "W5502300"
                          RelaySwitch1PM: "W5502310"
                          Remote: "Remote"
                          RobotVacuumCleanerS1: "W3011000"
                          RobotVacuumCleanerS10: "W3211800"
                          RobotVacuumCleanerS1Plus: "W3011010"
                          StripLight: "W1701100"
                          UniversalRemote: "UniversalRemote"
                          Unknown: "Unknown"
                          WaterDetector: "W4402000"
                          WoSweeper: "WoSweeper"
                          WoSweeperMini: "WoSweeperMini"
                          +SwitchBotModel | node-switchbot
                          node-switchbot
                            Preparing search index...

                            Enumeration SwitchBotModel

                            Index

                            Enumeration Members

                            AirPurifier: "W5302300"
                            AirPurifierTable: "W5302310"
                            BatteryCirculatorFan: "W3800510"
                            BlindTilt: "W2701600"
                            Bot: "SwitchBot S1"
                            CeilingLight: "W2612230/W2612240"
                            CeilingLightPro: "W2612210/W2612220"
                            CirculatorFan: "W3800511"
                            ColorBulb: "W1401400"
                            ContactSensor: "W1201500"
                            Curtain: "W0701600"
                            Curtain3: "W2400000"
                            Hub2: "W3202100"
                            Hub3: "W3302100"
                            HubMini: "W0202200"
                            HubPlus: "SwitchBot Hub S1"
                            Humidifier: "W0801800"
                            Humidifier2: "WXXXXXXX"
                            IndoorCam: "W1301200"
                            K10: "K10+"
                            K10Pro: "K10+ Pro"
                            Keypad: "W2500010"
                            KeypadTouch: "W2500020"
                            Lock: "W1601700"
                            LockPro: "W3500000"
                            Meter: "SwitchBot MeterTH S1"
                            MeterPlusJP: "W2201500"
                            MeterPlusUS: "W2301500"
                            MeterPro: "W4900000"
                            MeterProCO2: "W4900010"
                            MotionSensor: "W1101500"
                            OutdoorMeter: "W3400010"
                            PanTiltCam: "W1801200"
                            PanTiltCam2K: "W3101100"
                            Plug: "SP11"
                            PlugMiniJP: "W2001400/W2001401"
                            PlugMiniUS: "W1901400/W1901401"
                            RelaySwitch1: "W5502300"
                            RelaySwitch1PM: "W5502310"
                            Remote: "Remote"
                            RobotVacuumCleanerS1: "W3011000"
                            RobotVacuumCleanerS10: "W3211800"
                            RobotVacuumCleanerS1Plus: "W3011010"
                            StripLight: "W1701100"
                            UniversalRemote: "UniversalRemote"
                            Unknown: "Unknown"
                            WaterDetector: "W4402000"
                            WoSweeper: "WoSweeper"
                            WoSweeperMini: "WoSweeperMini"
                            diff --git a/docs/functions/updateBaseURL.html b/docs/functions/updateBaseURL.html new file mode 100644 index 00000000..620baa0c --- /dev/null +++ b/docs/functions/updateBaseURL.html @@ -0,0 +1,3 @@ +updateBaseURL | node-switchbot
                            node-switchbot
                              Preparing search index...

                              Function updateBaseURL

                              • Updates the base URL for the SwitchBot API endpoints.

                                +

                                Parameters

                                • newBaseURL: string

                                  The new base URL to use.

                                  +

                                Returns void

                              diff --git a/docs/hierarchy.html b/docs/hierarchy.html index a9243d0a..d0bfb664 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -1 +1 @@ -node-switchbot
                              +node-switchbot
                              node-switchbot
                                Preparing search index...
                                diff --git a/docs/index.html b/docs/index.html index ac7c2f89..5969ec3d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,21 +1,21 @@ -node-switchbot

                                node-switchbot

                                +node-switchbot
                                node-switchbot
                                  Preparing search index...

                                  node-switchbot

                                  node-switchbot

                                  -

                                  Node-SwitchBot

                                  npm version +

                                  Node-SwitchBot

                                  npm version npm downloads

                                  The node-switchbot is a Node.js module that allows you to interact with various SwitchBot devices. You can control your SwitchBot (Bot)'s arm, operate your SwitchBot Curtain, and manage your SwitchBot Lock. Additionally, you can monitor temperature and humidity using the SwitchBot Thermometer & Hygrometer (Meter), and check the status of the SwitchBot Motion Sensor and SwitchBot Contact Sensor.

                                  This module now supports both Bluetooth Low Energy (BLE) and the SwitchBot OpenAPI, providing more flexibility and options for interacting with your devices.

                                  Please note that most of this module was developed by referencing the official BLE API and OpenAPI documentation. However, some functionalities were developed through trial and error, so there might be inaccuracies in the information obtained from this module.


                                  -

                                  To install the node-switchbot module within your project, use the following command:

                                  +

                                  To install the node-switchbot module within your project, use the following command:

                                  $ npm install --save node-switchbot
                                   
                                  -

                                  To see a breakdown of how to use the BLE functionality of this project, visit the BLE (Bluetooth Low Energy) documentation.

                                  -

                                  To see a breakdown of how to use the OpenAPI functionality of this project, visit the OpenAPI documentation.

                                  -
                                  +
                                  diff --git a/docs/interfaces/AdvertisementData.html b/docs/interfaces/AdvertisementData.html index 691a9949..94716f40 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<ArrayBufferLike>;
                                      serviceData: null | Buffer<ArrayBufferLike>;
                                  }

                                  Properties

                                  manufacturerData: null | Buffer<ArrayBufferLike>
                                  serviceData: null | Buffer<ArrayBufferLike>
                                  +AdvertisementData | node-switchbot
                                  node-switchbot
                                    Preparing search index...

                                    Interface AdvertisementData

                                    interface AdvertisementData {
                                        manufacturerData: null | Buffer<ArrayBufferLike>;
                                        serviceData: null | Buffer<ArrayBufferLike>;
                                    }
                                    Index

                                    Properties

                                    manufacturerData: null | Buffer<ArrayBufferLike>
                                    serviceData: null | Buffer<ArrayBufferLike>
                                    diff --git a/docs/interfaces/Chars.html b/docs/interfaces/Chars.html index 08720e74..32e10534 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

                                    Properties

                                    device: null | Characteristic
                                    notify: null | Characteristic
                                    write: null | Characteristic
                                    +Chars | node-switchbot
                                    node-switchbot
                                      Preparing search index...

                                      Interface Chars

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

                                      Properties

                                      Properties

                                      device: null | Characteristic
                                      notify: null | Characteristic
                                      write: null | Characteristic
                                      diff --git a/docs/interfaces/ColorLightServiceDataBase.html b/docs/interfaces/ColorLightServiceDataBase.html new file mode 100644 index 00000000..cc3a4040 --- /dev/null +++ b/docs/interfaces/ColorLightServiceDataBase.html @@ -0,0 +1,17 @@ +ColorLightServiceDataBase | node-switchbot
                                      node-switchbot
                                        Preparing search index...

                                        Interface ColorLightServiceDataBase

                                        Base interface for color-controllable devices.

                                        +
                                        interface ColorLightServiceDataBase {
                                            blue: number;
                                            brightness: number;
                                            color_mode: number;
                                            color_temperature: number;
                                            delay: number;
                                            green: number;
                                            loop_index: number;
                                            model: SwitchBotBLEModel;
                                            modelFriendlyName: SwitchBotBLEModelFriendlyName;
                                            modelName: SwitchBotBLEModelName;
                                            power: boolean;
                                            preset: number;
                                            red: number;
                                            speed: number;
                                            state: boolean;
                                        }

                                        Hierarchy

                                        • BLEServiceData
                                          • ColorLightServiceDataBase
                                        Index

                                        Properties

                                        blue: number
                                        brightness: number
                                        color_mode: number
                                        color_temperature: number
                                        delay: number
                                        green: number
                                        loop_index: number
                                        power: boolean
                                        preset: number
                                        red: number
                                        speed: number
                                        state: boolean
                                        diff --git a/docs/interfaces/ErrorObject.html b/docs/interfaces/ErrorObject.html index f0ca5752..9727d5ea 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

                                        Properties

                                        code: string
                                        message: string
                                        +ErrorObject | node-switchbot
                                        node-switchbot
                                          Preparing search index...

                                          Interface ErrorObject

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

                                          Properties

                                          Properties

                                          code: string
                                          message: string
                                          diff --git a/docs/interfaces/LockBaseServiceData.html b/docs/interfaces/LockBaseServiceData.html new file mode 100644 index 00000000..d2fbb70e --- /dev/null +++ b/docs/interfaces/LockBaseServiceData.html @@ -0,0 +1,15 @@ +LockBaseServiceData | node-switchbot
                                          node-switchbot
                                            Preparing search index...

                                            Interface LockBaseServiceData

                                            Base interface for lock-style devices.

                                            +
                                            interface LockBaseServiceData {
                                                auto_lock_paused: boolean;
                                                battery: number;
                                                calibration: boolean;
                                                door_open: boolean;
                                                double_lock_mode: boolean;
                                                model: SwitchBotBLEModel;
                                                modelFriendlyName: SwitchBotBLEModelFriendlyName;
                                                modelName: SwitchBotBLEModelName;
                                                night_latch: boolean;
                                                status: string;
                                                unclosed_alarm: boolean;
                                                unlocked_alarm: boolean;
                                                update_from_secondary_lock: boolean;
                                            }

                                            Hierarchy

                                            • BLEServiceData
                                              • LockBaseServiceData
                                            Index

                                            Properties

                                            auto_lock_paused: boolean
                                            battery: number
                                            calibration: boolean
                                            door_open: boolean
                                            double_lock_mode: boolean
                                            night_latch: boolean
                                            status: string
                                            unclosed_alarm: boolean
                                            unlocked_alarm: boolean
                                            update_from_secondary_lock: boolean
                                            diff --git a/docs/interfaces/NobleTypes.html b/docs/interfaces/NobleTypes.html index 221cc3c2..7bc328df 100644 --- a/docs/interfaces/NobleTypes.html +++ b/docs/interfaces/NobleTypes.html @@ -1,4 +1,3 @@ -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"
                                            +NobleTypes | node-switchbot
                                            node-switchbot
                                              Preparing search index...

                                              Interface NobleTypes

                                              interface NobleTypes {
                                                  noble: Noble;
                                                  peripheral: Peripheral;
                                              }
                                              Index

                                              Properties

                                              Properties

                                              noble: Noble
                                              peripheral: Peripheral
                                              diff --git a/docs/interfaces/Params.html b/docs/interfaces/Params.html index 7059f46d..eaedb7a9 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

                                              Properties

                                              duration?: number
                                              id?: string
                                              model?: string
                                              noble?: __module
                                              quick?: boolean
                                              +Params | node-switchbot
                                              node-switchbot
                                                Preparing search index...

                                                Interface Params

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

                                                Properties

                                                Properties

                                                duration?: number
                                                id?: string
                                                model?: string
                                                noble?: Noble
                                                quick?: boolean
                                                diff --git a/docs/interfaces/PlugMiniServiceDataBase.html b/docs/interfaces/PlugMiniServiceDataBase.html new file mode 100644 index 00000000..422ac444 --- /dev/null +++ b/docs/interfaces/PlugMiniServiceDataBase.html @@ -0,0 +1,12 @@ +PlugMiniServiceDataBase | node-switchbot
                                                node-switchbot
                                                  Preparing search index...

                                                  Interface PlugMiniServiceDataBase

                                                  Base interface for mini plug devices (US/JP share same schema).

                                                  +
                                                  interface PlugMiniServiceDataBase {
                                                      currentPower: number;
                                                      delay: boolean;
                                                      model: SwitchBotBLEModel;
                                                      modelFriendlyName: SwitchBotBLEModelFriendlyName;
                                                      modelName: SwitchBotBLEModelName;
                                                      overload: boolean;
                                                      state: string;
                                                      syncUtcTime: boolean;
                                                      timer: boolean;
                                                      wifiRssi: number;
                                                  }

                                                  Hierarchy

                                                  • BLEServiceData
                                                    • PlugMiniServiceDataBase
                                                  Index

                                                  Properties

                                                  currentPower: number
                                                  delay: boolean
                                                  overload: boolean
                                                  state: string
                                                  syncUtcTime: boolean
                                                  timer: boolean
                                                  wifiRssi: number
                                                  diff --git a/docs/interfaces/PushRequest.html b/docs/interfaces/PushRequest.html new file mode 100644 index 00000000..ba4414bd --- /dev/null +++ b/docs/interfaces/PushRequest.html @@ -0,0 +1,5 @@ +pushRequest | node-switchbot
                                                  node-switchbot
                                                    Preparing search index...

                                                    Interface pushRequest

                                                    Request payload for controlling a device.

                                                    +
                                                    interface pushRequest {
                                                        command: string;
                                                        commandType: commandType;
                                                        parameter: string;
                                                    }
                                                    Index

                                                    Properties

                                                    command: string
                                                    commandType: commandType
                                                    parameter: string
                                                    diff --git a/docs/interfaces/PushResponseBody.html b/docs/interfaces/PushResponseBody.html new file mode 100644 index 00000000..94951fb6 --- /dev/null +++ b/docs/interfaces/PushResponseBody.html @@ -0,0 +1,3 @@ +pushResponseBody | node-switchbot
                                                    node-switchbot
                                                      Preparing search index...

                                                      Interface pushResponseBody

                                                      Body of a device push response.

                                                      +
                                                      interface pushResponseBody {
                                                          commandId: string;
                                                      }
                                                      Index

                                                      Properties

                                                      Properties

                                                      commandId: string
                                                      diff --git a/docs/interfaces/Rule.html b/docs/interfaces/Rule.html index 97f1701e..aae024ec 100644 --- a/docs/interfaces/Rule.html +++ b/docs/interfaces/Rule.html @@ -1,9 +1,9 @@ -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?: unknown[]
                                                      max?: number
                                                      maxBytes?: number
                                                      min?: number
                                                      minBytes?: number
                                                      pattern?: RegExp
                                                      required?: boolean
                                                      type?: "string" | "boolean" | "object" | "float" | "integer" | "array"
                                                      +Rule | node-switchbot
                                                      node-switchbot
                                                        Preparing search index...

                                                        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";
                                                        }
                                                        Index

                                                        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 01d5e307..50b3da1b 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
                                                        node-switchbot
                                                          Preparing search index...

                                                          Interface ServiceData

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

                                                          Indexable

                                                          • [key: string]: unknown
                                                          Index

                                                          Properties

                                                          Properties

                                                          model: string
                                                          diff --git a/docs/interfaces/SwitchBotBLEDevice.html b/docs/interfaces/SwitchBotBLEDevice.html index d1ecbd92..f86718ef 100644 --- a/docs/interfaces/SwitchBotBLEDevice.html +++ b/docs/interfaces/SwitchBotBLEDevice.html @@ -1,23 +1,26 @@ -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
                                                          +SwitchBotBLEDevice | node-switchbot
                                                          node-switchbot
                                                            Preparing search index...

                                                            Interface SwitchBotBLEDevice

                                                            interface SwitchBotBLEDevice {
                                                                AirPurifier: DeviceInfo;
                                                                AirPurifierTable: DeviceInfo;
                                                                BlindTilt: DeviceInfo;
                                                                Bot: DeviceInfo;
                                                                CeilingLight: DeviceInfo;
                                                                CeilingLightPro: DeviceInfo;
                                                                ColorBulb: DeviceInfo;
                                                                ContactSensor: DeviceInfo;
                                                                Curtain: DeviceInfo;
                                                                Curtain3: DeviceInfo;
                                                                Hub2: DeviceInfo;
                                                                Hub3: 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;
                                                            }
                                                            Index

                                                            Properties

                                                            AirPurifier: DeviceInfo
                                                            AirPurifierTable: DeviceInfo
                                                            BlindTilt: DeviceInfo
                                                            Bot: DeviceInfo
                                                            CeilingLight: DeviceInfo
                                                            CeilingLightPro: DeviceInfo
                                                            ColorBulb: DeviceInfo
                                                            ContactSensor: DeviceInfo
                                                            Curtain: DeviceInfo
                                                            Curtain3: DeviceInfo
                                                            Hub2: DeviceInfo
                                                            Hub3: 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/SwitchBotScanner.html b/docs/interfaces/SwitchBotScanner.html new file mode 100644 index 00000000..d539dcdd --- /dev/null +++ b/docs/interfaces/SwitchBotScanner.html @@ -0,0 +1,6 @@ +SwitchBotScanner | node-switchbot
                                                            node-switchbot
                                                              Preparing search index...

                                                              Interface SwitchBotScanner

                                                              BLE discovery and wait methods for SwitchBot devices.

                                                              +
                                                              interface SwitchBotScanner {
                                                                  discover: (
                                                                      args: { duration?: number; id?: string; model: string; quick: boolean },
                                                                  ) => Promise<unknown>;
                                                                  wait: (ms: number) => void;
                                                              }
                                                              Index

                                                              Properties

                                                              Properties

                                                              discover: (
                                                                  args: { duration?: number; id?: string; model: string; quick: boolean },
                                                              ) => Promise<unknown>

                                                              Discover BLE devices based on filter criteria

                                                              +
                                                              wait: (ms: number) => void

                                                              Wait for given milliseconds

                                                              +
                                                              diff --git a/docs/interfaces/TemperatureServiceDataBase.html b/docs/interfaces/TemperatureServiceDataBase.html new file mode 100644 index 00000000..42cda535 --- /dev/null +++ b/docs/interfaces/TemperatureServiceDataBase.html @@ -0,0 +1,10 @@ +TemperatureServiceDataBase | node-switchbot
                                                              node-switchbot
                                                                Preparing search index...

                                                                Interface TemperatureServiceDataBase

                                                                Base interface for temperature-humidity meter devices.

                                                                +
                                                                interface TemperatureServiceDataBase {
                                                                    battery: number;
                                                                    celsius: number;
                                                                    fahrenheit: number;
                                                                    fahrenheit_mode: boolean;
                                                                    humidity: number;
                                                                    model: SwitchBotBLEModel;
                                                                    modelFriendlyName: SwitchBotBLEModelFriendlyName;
                                                                    modelName: SwitchBotBLEModelName;
                                                                }

                                                                Hierarchy

                                                                • BLEServiceData
                                                                  • TemperatureServiceDataBase
                                                                Index

                                                                Properties

                                                                battery: number
                                                                celsius: number
                                                                fahrenheit: number
                                                                fahrenheit_mode: boolean
                                                                humidity: number
                                                                diff --git a/docs/interfaces/WebhookDetail.html b/docs/interfaces/WebhookDetail.html index aa841c6c..4020a251 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: number
                                                                deviceList: string
                                                                enable: boolean
                                                                lastUpdateTime: number
                                                                url: string
                                                                +WebhookDetail | node-switchbot
                                                                node-switchbot
                                                                  Preparing search index...

                                                                  Interface WebhookDetail

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

                                                                  Properties

                                                                  createTime: number
                                                                  deviceList: string
                                                                  enable: boolean
                                                                  lastUpdateTime: number
                                                                  url: string
                                                                  diff --git a/docs/interfaces/ad.html b/docs/interfaces/ad.html index 22c3935b..d8748893 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
                                                                          | outdoorMeterServiceData
                                                                          | motionSensorServiceData
                                                                          | plugMiniUSServiceData
                                                                          | plugMiniJPServiceData
                                                                          | blindTiltServiceData
                                                                          | ceilingLightServiceData
                                                                          | ceilingLightProServiceData
                                                                          | hub2ServiceData
                                                                          | batteryCirculatorFanServiceData
                                                                          | waterLeakDetectorServiceData
                                                                          | humidifierServiceData
                                                                          | humidifier2ServiceData
                                                                          | robotVacuumCleanerServiceData
                                                                          | keypadDetectorServiceData
                                                                          | relaySwitch1ServiceData
                                                                          | relaySwitch1PMServiceData
                                                                          | remoteServiceData;
                                                                      [key: string]: unknown;
                                                                  }

                                                                  Indexable

                                                                  • [key: string]: unknown

                                                                  Properties

                                                                  Properties

                                                                  address: string
                                                                  id: string
                                                                  rssi: number
                                                                  serviceData:
                                                                      | botServiceData
                                                                      | colorBulbServiceData
                                                                      | contactSensorServiceData
                                                                      | curtainServiceData
                                                                      | curtain3ServiceData
                                                                      | stripLightServiceData
                                                                      | lockServiceData
                                                                      | lockProServiceData
                                                                      | meterServiceData
                                                                      | meterPlusServiceData
                                                                      | meterProServiceData
                                                                      | meterProCO2ServiceData
                                                                      | outdoorMeterServiceData
                                                                      | motionSensorServiceData
                                                                      | plugMiniUSServiceData
                                                                      | plugMiniJPServiceData
                                                                      | blindTiltServiceData
                                                                      | ceilingLightServiceData
                                                                      | ceilingLightProServiceData
                                                                      | hub2ServiceData
                                                                      | batteryCirculatorFanServiceData
                                                                      | waterLeakDetectorServiceData
                                                                      | humidifierServiceData
                                                                      | humidifier2ServiceData
                                                                      | robotVacuumCleanerServiceData
                                                                      | keypadDetectorServiceData
                                                                      | relaySwitch1ServiceData
                                                                      | relaySwitch1PMServiceData
                                                                      | remoteServiceData
                                                                  +ad | node-switchbot
                                                                  node-switchbot
                                                                    Preparing search index...

                                                                    Interface ad

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

                                                                    Indexable

                                                                    • [key: string]: unknown
                                                                    Index

                                                                    Properties

                                                                    Properties

                                                                    address: string
                                                                    id: string
                                                                    rssi: number
                                                                    serviceData:
                                                                        | botServiceData
                                                                        | colorBulbServiceData
                                                                        | contactSensorServiceData
                                                                        | curtainServiceData
                                                                        | curtain3ServiceData
                                                                        | stripLightServiceData
                                                                        | lockServiceData
                                                                        | lockProServiceData
                                                                        | meterServiceData
                                                                        | meterPlusServiceData
                                                                        | meterProServiceData
                                                                        | meterProCO2ServiceData
                                                                        | outdoorMeterServiceData
                                                                        | motionSensorServiceData
                                                                        | plugMiniUSServiceData
                                                                        | plugMiniJPServiceData
                                                                        | blindTiltServiceData
                                                                        | ceilingLightServiceData
                                                                        | ceilingLightProServiceData
                                                                        | hub2ServiceData
                                                                        | hub3ServiceData
                                                                        | batteryCirculatorFanServiceData
                                                                        | waterLeakDetectorServiceData
                                                                        | humidifierServiceData
                                                                        | humidifier2ServiceData
                                                                        | robotVacuumCleanerServiceData
                                                                        | keypadDetectorServiceData
                                                                        | relaySwitch1ServiceData
                                                                        | relaySwitch1PMServiceData
                                                                        | remoteServiceData
                                                                        | airPurifierServiceData
                                                                        | airPurifierTableServiceData
                                                                    diff --git a/docs/interfaces/body.html b/docs/interfaces/body.html index 4d76fa6e..62392856 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: deviceList
                                                                    infraredRemoteList: infraredRemoteList
                                                                    +body | node-switchbot
                                                                    node-switchbot
                                                                      Preparing search index...

                                                                      Interface body

                                                                      interface body {
                                                                          deviceList: device[];
                                                                          infraredRemoteList: infraredRemoteList;
                                                                      }
                                                                      Index

                                                                      Properties

                                                                      deviceList: device[]
                                                                      infraredRemoteList: infraredRemoteList
                                                                      diff --git a/docs/interfaces/bodyChange.html b/docs/interfaces/bodyChange.html index bce10983..a0ffaf36 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: string
                                                                      commandType: string
                                                                      parameter: string
                                                                      +bodyChange | node-switchbot
                                                                      node-switchbot
                                                                        Preparing search index...

                                                                        Interface bodyChange

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

                                                                        Properties

                                                                        command: string
                                                                        commandType: string
                                                                        parameter: string
                                                                        diff --git a/docs/interfaces/deleteWebhookResponse.html b/docs/interfaces/deleteWebhookResponse.html index 1df44e35..4791dfb2 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

                                                                        Properties

                                                                        body: object
                                                                        message: string
                                                                        statusCode: number
                                                                        +deleteWebhookResponse | node-switchbot
                                                                        node-switchbot
                                                                          Preparing search index...

                                                                          Interface deleteWebhookResponse

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

                                                                          Properties

                                                                          Properties

                                                                          body: object
                                                                          message: string
                                                                          statusCode: number
                                                                          diff --git a/docs/interfaces/device.html b/docs/interfaces/device.html index 52d4f675..559683a6 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 Summary)

                                                                          Properties

                                                                          deviceId: string
                                                                          deviceName: string
                                                                          deviceType: string
                                                                          enableCloudService: boolean
                                                                          hubDeviceId: string
                                                                          version?: number
                                                                          +device | node-switchbot
                                                                          node-switchbot
                                                                            Preparing search index...

                                                                            Interface device

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

                                                                            Hierarchy (View Summary)

                                                                            Index

                                                                            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 c42854a7..3a27f54f 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
                                                                            node-switchbot
                                                                              Preparing search index...

                                                                              Interface deviceList

                                                                              interface deviceList {
                                                                                  device: device[];
                                                                              }
                                                                              Index

                                                                              Properties

                                                                              Properties

                                                                              device: device[]
                                                                              diff --git a/docs/interfaces/deviceStatus.html b/docs/interfaces/deviceStatus.html index 09359e17..7e33a048 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 Summary)

                                                                              Properties

                                                                              deviceId: string
                                                                              deviceName: string
                                                                              deviceType: string
                                                                              enableCloudService: boolean
                                                                              hubDeviceId: string
                                                                              version: number
                                                                              +deviceStatus | node-switchbot
                                                                              node-switchbot
                                                                                Preparing search index...

                                                                                Interface deviceStatus

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

                                                                                Hierarchy (View Summary)

                                                                                Index

                                                                                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 826acae0..fdd04189 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

                                                                                Properties

                                                                                message: string
                                                                                statusCode: number
                                                                                +deviceStatusRequest | node-switchbot
                                                                                node-switchbot
                                                                                  Preparing search index...

                                                                                  Interface deviceStatusRequest

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

                                                                                  Properties

                                                                                  Properties

                                                                                  message: string
                                                                                  statusCode: number
                                                                                  diff --git a/docs/interfaces/deviceWebhook.html b/docs/interfaces/deviceWebhook.html index a92f7225..97f29e02 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

                                                                                  eventType: string
                                                                                  eventVersion: string
                                                                                  +deviceWebhook | node-switchbot
                                                                                  node-switchbot
                                                                                    Preparing search index...

                                                                                    Interface deviceWebhook

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

                                                                                    Properties

                                                                                    eventType: string
                                                                                    eventVersion: string
                                                                                    diff --git a/docs/interfaces/deviceWebhookContext.html b/docs/interfaces/deviceWebhookContext.html index 4d459118..b295611f 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: string
                                                                                    deviceType: string
                                                                                    timeOfSample: number
                                                                                    +deviceWebhookContext | node-switchbot
                                                                                    node-switchbot
                                                                                      Preparing search index...

                                                                                      Interface deviceWebhookContext

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

                                                                                      Properties

                                                                                      deviceMac: string
                                                                                      deviceType: string
                                                                                      timeOfSample: number
                                                                                      diff --git a/docs/interfaces/devices.html b/docs/interfaces/devices.html index 57654d71..3173ed70 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

                                                                                      Properties

                                                                                      body: body
                                                                                      message: string
                                                                                      statusCode: number
                                                                                      +devices | node-switchbot
                                                                                      node-switchbot
                                                                                        Preparing search index...

                                                                                        Interface devices

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

                                                                                        Properties

                                                                                        Properties

                                                                                        body: body
                                                                                        message: string
                                                                                        statusCode: number
                                                                                        diff --git a/docs/interfaces/infraredRemoteList.html b/docs/interfaces/infraredRemoteList.html index db55c87c..2da5d5e0 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
                                                                                        node-switchbot
                                                                                          Preparing search index...

                                                                                          Interface infraredRemoteList

                                                                                          interface infraredRemoteList {
                                                                                              device: irdevice[];
                                                                                          }
                                                                                          Index

                                                                                          Properties

                                                                                          Properties

                                                                                          device: irdevice[]
                                                                                          diff --git a/docs/interfaces/irdevice.html b/docs/interfaces/irdevice.html index c331cf6e..53715ad9 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?: string
                                                                                          deviceName: string
                                                                                          hubDeviceId: string
                                                                                          remoteType: string
                                                                                          +irdevice | node-switchbot
                                                                                          node-switchbot
                                                                                            Preparing search index...

                                                                                            Interface irdevice

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

                                                                                            Properties

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

                                                                                            Interface pushResponse

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

                                                                                            Properties

                                                                                            Properties

                                                                                            body: { commandId: string }
                                                                                            message: string
                                                                                            statusCode: number
                                                                                            +pushResponse | node-switchbot
                                                                                            node-switchbot
                                                                                              Preparing search index...

                                                                                              Interface pushResponse

                                                                                              Response from a device control (push) request.

                                                                                              +
                                                                                              interface pushResponse {
                                                                                                  body: pushResponseBody;
                                                                                                  message: string;
                                                                                                  statusCode: number;
                                                                                              }
                                                                                              Index

                                                                                              Properties

                                                                                              Properties

                                                                                              message: string
                                                                                              statusCode: number
                                                                                              diff --git a/docs/interfaces/queryWebhookResponse.html b/docs/interfaces/queryWebhookResponse.html index 5e2d181c..4893b6dc 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

                                                                                              Properties

                                                                                              message: string
                                                                                              statusCode: number
                                                                                              +queryWebhookResponse | node-switchbot
                                                                                              node-switchbot
                                                                                                Preparing search index...

                                                                                                Interface queryWebhookResponse

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

                                                                                                Properties

                                                                                                Properties

                                                                                                message: string
                                                                                                statusCode: number
                                                                                                diff --git a/docs/interfaces/setupWebhookResponse.html b/docs/interfaces/setupWebhookResponse.html index 7b660153..a4e0fcd0 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

                                                                                                Properties

                                                                                                body: object
                                                                                                message: string
                                                                                                statusCode: number
                                                                                                +setupWebhookResponse | node-switchbot
                                                                                                node-switchbot
                                                                                                  Preparing search index...

                                                                                                  Interface setupWebhookResponse

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

                                                                                                  Properties

                                                                                                  Properties

                                                                                                  body: object
                                                                                                  message: string
                                                                                                  statusCode: number
                                                                                                  diff --git a/docs/interfaces/switchbot.html b/docs/interfaces/switchbot.html deleted file mode 100644 index 1822ae26..00000000 --- a/docs/interfaces/switchbot.html +++ /dev/null @@ -1,3 +0,0 @@ -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
                                                                                                  diff --git a/docs/interfaces/updateWebhookResponse.html b/docs/interfaces/updateWebhookResponse.html index 10802315..8ca6e9d8 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

                                                                                                  Properties

                                                                                                  body: object
                                                                                                  message: string
                                                                                                  statusCode: number
                                                                                                  +updateWebhookResponse | node-switchbot
                                                                                                  node-switchbot
                                                                                                    Preparing search index...

                                                                                                    Interface updateWebhookResponse

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

                                                                                                    Properties

                                                                                                    Properties

                                                                                                    body: object
                                                                                                    message: string
                                                                                                    statusCode: number
                                                                                                    diff --git a/docs/interfaces/webhookRequest.html b/docs/interfaces/webhookRequest.html index 41eeb76a..94bf89af 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

                                                                                                    Properties

                                                                                                    action: string
                                                                                                    deviceList: string
                                                                                                    url: string
                                                                                                    +webhookRequest | node-switchbot
                                                                                                    node-switchbot
                                                                                                      Preparing search index...

                                                                                                      Interface webhookRequest

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

                                                                                                      Properties

                                                                                                      Properties

                                                                                                      action: string
                                                                                                      deviceList: string
                                                                                                      url: string
                                                                                                      diff --git a/docs/modules.html b/docs/modules.html index b51c79fd..698e9fd6 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -1 +1 @@ -node-switchbot

                                                                                                      node-switchbot

                                                                                                      Enumerations

                                                                                                      LogLevel
                                                                                                      SwitchBotBLEModel
                                                                                                      SwitchBotBLEModelFriendlyName
                                                                                                      SwitchBotBLEModelName
                                                                                                      SwitchBotModel

                                                                                                      Classes

                                                                                                      Advertising
                                                                                                      SwitchBotBLE
                                                                                                      SwitchbotDevice
                                                                                                      SwitchBotOpenAPI
                                                                                                      WoBlindTilt
                                                                                                      WoBulb
                                                                                                      WoCeilingLight
                                                                                                      WoContact
                                                                                                      WoCurtain
                                                                                                      WoHand
                                                                                                      WoHub2
                                                                                                      WoHumi
                                                                                                      WoHumi2
                                                                                                      WoIOSensorTH
                                                                                                      WoKeypad
                                                                                                      WoLeak
                                                                                                      WoPlugMiniJP
                                                                                                      WoPlugMiniUS
                                                                                                      WoPresence
                                                                                                      WoRelaySwitch1
                                                                                                      WoRelaySwitch1PM
                                                                                                      WoRemote
                                                                                                      WoSensorTH
                                                                                                      WoSensorTHPlus
                                                                                                      WoSensorTHPro
                                                                                                      WoSensorTHProCO2
                                                                                                      WoSmartLock
                                                                                                      WoSmartLockPro
                                                                                                      WoStrip

                                                                                                      Interfaces

                                                                                                      ad
                                                                                                      AdvertisementData
                                                                                                      body
                                                                                                      bodyChange
                                                                                                      Chars
                                                                                                      deleteWebhookResponse
                                                                                                      device
                                                                                                      deviceList
                                                                                                      devices
                                                                                                      deviceStatus
                                                                                                      deviceStatusRequest
                                                                                                      deviceWebhook
                                                                                                      deviceWebhookContext
                                                                                                      ErrorObject
                                                                                                      infraredRemoteList
                                                                                                      irdevice
                                                                                                      NobleTypes
                                                                                                      Params
                                                                                                      pushResponse
                                                                                                      queryWebhookResponse
                                                                                                      Rule
                                                                                                      ServiceData
                                                                                                      setupWebhookResponse
                                                                                                      switchbot
                                                                                                      SwitchBotBLEDevice
                                                                                                      updateWebhookResponse
                                                                                                      WebhookDetail
                                                                                                      webhookRequest

                                                                                                      Type Aliases

                                                                                                      batteryCirculatorFan
                                                                                                      batteryCirculatorFanServiceData
                                                                                                      batteryCirculatorFanStatus
                                                                                                      batteryCirculatorFanWebhookContext
                                                                                                      blindTilt
                                                                                                      blindTiltServiceData
                                                                                                      blindTiltStatus
                                                                                                      blindTiltWebhookContext
                                                                                                      bot
                                                                                                      botServiceData
                                                                                                      botStatus
                                                                                                      botWebhookContext
                                                                                                      ceilingLight
                                                                                                      ceilingLightPro
                                                                                                      ceilingLightProServiceData
                                                                                                      ceilingLightProStatus
                                                                                                      ceilingLightProWebhookContext
                                                                                                      ceilingLightServiceData
                                                                                                      ceilingLightStatus
                                                                                                      ceilingLightWebhookContext
                                                                                                      circulatorFanStatus
                                                                                                      circulatorFanWebhookContext
                                                                                                      colorBulb
                                                                                                      colorBulbServiceData
                                                                                                      colorBulbStatus
                                                                                                      colorBulbWebhookContext
                                                                                                      contactSensor
                                                                                                      contactSensorServiceData
                                                                                                      contactSensorStatus
                                                                                                      contactSensorWebhookContext
                                                                                                      curtain
                                                                                                      curtain3
                                                                                                      curtain3ServiceData
                                                                                                      curtain3WebhookContext
                                                                                                      curtainServiceData
                                                                                                      curtainStatus
                                                                                                      curtainWebhookContext
                                                                                                      floorCleaningRobotS10
                                                                                                      floorCleaningRobotS10Status
                                                                                                      floorCleaningRobotS10WebhookContext
                                                                                                      hub2
                                                                                                      hub2ServiceData
                                                                                                      hub2Status
                                                                                                      hub2WebhookContext
                                                                                                      humidifier
                                                                                                      humidifier2ServiceData
                                                                                                      humidifier2Status
                                                                                                      humidifier2WebhookContext
                                                                                                      humidifierServiceData
                                                                                                      humidifierStatus
                                                                                                      humidifierWebhookContext
                                                                                                      indoorCam
                                                                                                      indoorCameraWebhookContext
                                                                                                      keypad
                                                                                                      keypadDetectorServiceData
                                                                                                      keypadTouch
                                                                                                      keypadTouchWebhookContext
                                                                                                      keypadWebhookContext
                                                                                                      lock
                                                                                                      lockPro
                                                                                                      lockProServiceData
                                                                                                      lockProStatus
                                                                                                      lockProWebhookContext
                                                                                                      lockServiceData
                                                                                                      lockStatus
                                                                                                      lockWebhookContext
                                                                                                      MacAddress
                                                                                                      meter
                                                                                                      meterPlus
                                                                                                      meterPlusServiceData
                                                                                                      meterPlusStatus
                                                                                                      meterPlusWebhookContext
                                                                                                      meterPro
                                                                                                      meterProCO2ServiceData
                                                                                                      meterProCO2Status
                                                                                                      meterProCO2WebhookContext
                                                                                                      meterProServiceData
                                                                                                      meterProStatus
                                                                                                      meterProWebhookContext
                                                                                                      meterServiceData
                                                                                                      meterStatus
                                                                                                      meterWebhookContext
                                                                                                      motionSensor
                                                                                                      motionSensorServiceData
                                                                                                      motionSensorStatus
                                                                                                      motionSensorWebhookContext
                                                                                                      onadvertisement
                                                                                                      ondiscover
                                                                                                      outdoorMeter
                                                                                                      outdoorMeterServiceData
                                                                                                      outdoorMeterStatus
                                                                                                      outdoorMeterWebhookContext
                                                                                                      pantiltCam
                                                                                                      pantiltCam2k
                                                                                                      panTiltCamWebhookContext
                                                                                                      plug
                                                                                                      plugMini
                                                                                                      plugMiniJPServiceData
                                                                                                      plugMiniJPWebhookContext
                                                                                                      plugMiniStatus
                                                                                                      plugMiniUSServiceData
                                                                                                      plugMiniUSWebhookContext
                                                                                                      plugStatus
                                                                                                      plugWebhookContext
                                                                                                      relaySwitch1Context
                                                                                                      relaySwitch1PMContext
                                                                                                      relaySwitch1PMServiceData
                                                                                                      relaySwitch1PMStatus
                                                                                                      relaySwitch1ServiceData
                                                                                                      relaySwitch1Status
                                                                                                      remote
                                                                                                      remoteServiceData
                                                                                                      robotVacuumCleanerS1
                                                                                                      robotVacuumCleanerS1Plus
                                                                                                      robotVacuumCleanerS1PlusStatus
                                                                                                      robotVacuumCleanerS1PlusWebhookContext
                                                                                                      robotVacuumCleanerS1Status
                                                                                                      robotVacuumCleanerS1WebhookContext
                                                                                                      robotVacuumCleanerServiceData
                                                                                                      stripLight
                                                                                                      stripLightServiceData
                                                                                                      stripLightStatus
                                                                                                      stripLightWebhookContext
                                                                                                      waterLeakDetector
                                                                                                      waterLeakDetectorServiceData
                                                                                                      waterLeakDetectorStatus
                                                                                                      waterLeakDetectorWebhookContext
                                                                                                      +node-switchbot
                                                                                                      node-switchbot
                                                                                                        Preparing search index...

                                                                                                          node-switchbot

                                                                                                          Enumerations

                                                                                                          LogLevel
                                                                                                          SwitchBotBLEModel
                                                                                                          SwitchBotBLEModelFriendlyName
                                                                                                          SwitchBotBLEModelName
                                                                                                          SwitchBotModel

                                                                                                          Classes

                                                                                                          Advertising
                                                                                                          ErrorUtils
                                                                                                          ParameterChecker
                                                                                                          SwitchBotBLE
                                                                                                          SwitchbotDevice
                                                                                                          SwitchBotOpenAPI
                                                                                                          ValidationUtils
                                                                                                          WoAirPurifier
                                                                                                          WoAirPurifierTable
                                                                                                          WoBlindTilt
                                                                                                          WoBulb
                                                                                                          WoCeilingLight
                                                                                                          WoContact
                                                                                                          WoCurtain
                                                                                                          WoHand
                                                                                                          WoHub2
                                                                                                          WoHub3
                                                                                                          WoHumi
                                                                                                          WoHumi2
                                                                                                          WoIOSensorTH
                                                                                                          WoKeypad
                                                                                                          WoLeak
                                                                                                          WoPlugMiniJP
                                                                                                          WoPlugMiniUS
                                                                                                          WoPresence
                                                                                                          WoRelaySwitch1
                                                                                                          WoRelaySwitch1PM
                                                                                                          WoRemote
                                                                                                          WoSensorTH
                                                                                                          WoSensorTHPlus
                                                                                                          WoSensorTHPro
                                                                                                          WoSensorTHProCO2
                                                                                                          WoSmartLock
                                                                                                          WoSmartLockPro
                                                                                                          WoStrip

                                                                                                          Interfaces

                                                                                                          AdvertisementData
                                                                                                          body
                                                                                                          bodyChange
                                                                                                          Chars
                                                                                                          ColorLightServiceDataBase
                                                                                                          deleteWebhookResponse
                                                                                                          device
                                                                                                          deviceList
                                                                                                          devices
                                                                                                          deviceStatus
                                                                                                          deviceStatusRequest
                                                                                                          deviceWebhook
                                                                                                          deviceWebhookContext
                                                                                                          ErrorObject
                                                                                                          infraredRemoteList
                                                                                                          irdevice
                                                                                                          LockBaseServiceData
                                                                                                          NobleTypes
                                                                                                          Params
                                                                                                          PlugMiniServiceDataBase
                                                                                                          pushRequest
                                                                                                          pushResponse
                                                                                                          pushResponseBody
                                                                                                          queryWebhookResponse
                                                                                                          Rule
                                                                                                          ServiceData
                                                                                                          setupWebhookResponse
                                                                                                          SwitchBotBLEDevice
                                                                                                          SwitchBotScanner
                                                                                                          TemperatureServiceDataBase
                                                                                                          updateWebhookResponse
                                                                                                          WebhookDetail
                                                                                                          webhookRequest

                                                                                                          Type Aliases

                                                                                                          airPurifier
                                                                                                          airPurifierPM25WebhookContext
                                                                                                          airPurifierServiceData
                                                                                                          airPurifierStatus
                                                                                                          airPurifierTable
                                                                                                          airPurifierTablePM25WebhookContext
                                                                                                          airPurifierTableServiceData
                                                                                                          airPurifierTableStatus
                                                                                                          airPurifierTableVOC
                                                                                                          airPurifierTableVOCStatus
                                                                                                          airPurifierTableVOCWebhookContext
                                                                                                          airPurifierTableWebhookContext
                                                                                                          airPurifierVOC
                                                                                                          airPurifierVOCStatus
                                                                                                          airPurifierVOCWebhookContext
                                                                                                          airPurifierWebhookContext
                                                                                                          batteryCirculatorFan
                                                                                                          batteryCirculatorFanServiceData
                                                                                                          batteryCirculatorFanStatus
                                                                                                          batteryCirculatorFanWebhookContext
                                                                                                          BLEDeviceServiceData
                                                                                                          blindTilt
                                                                                                          blindTiltServiceData
                                                                                                          blindTiltStatus
                                                                                                          blindTiltWebhookContext
                                                                                                          bot
                                                                                                          botServiceData
                                                                                                          botStatus
                                                                                                          botWebhookContext
                                                                                                          ceilingLight
                                                                                                          ceilingLightPro
                                                                                                          ceilingLightProServiceData
                                                                                                          ceilingLightProStatus
                                                                                                          ceilingLightProWebhookContext
                                                                                                          ceilingLightServiceData
                                                                                                          ceilingLightStatus
                                                                                                          ceilingLightWebhookContext
                                                                                                          circulatorFanStatus
                                                                                                          circulatorFanWebhookContext
                                                                                                          colorBulb
                                                                                                          colorBulbServiceData
                                                                                                          colorBulbStatus
                                                                                                          colorBulbWebhookContext
                                                                                                          commandType
                                                                                                          contactSensor
                                                                                                          contactSensorServiceData
                                                                                                          contactSensorStatus
                                                                                                          contactSensorWebhookContext
                                                                                                          curtain
                                                                                                          curtain3
                                                                                                          curtain3ServiceData
                                                                                                          curtain3WebhookContext
                                                                                                          curtainServiceData
                                                                                                          curtainStatus
                                                                                                          curtainWebhookContext
                                                                                                          floorCleaningRobotS10
                                                                                                          floorCleaningRobotS10Status
                                                                                                          floorCleaningRobotS10WebhookContext
                                                                                                          hub2
                                                                                                          hub2ServiceData
                                                                                                          hub2Status
                                                                                                          hub2WebhookContext
                                                                                                          hub3ServiceData
                                                                                                          humidifier
                                                                                                          humidifier2ServiceData
                                                                                                          humidifier2Status
                                                                                                          humidifier2WebhookContext
                                                                                                          humidifierServiceData
                                                                                                          humidifierStatus
                                                                                                          humidifierWebhookContext
                                                                                                          IndoorCam
                                                                                                          indoorCameraWebhookContext
                                                                                                          keypad
                                                                                                          keypadDetectorServiceData
                                                                                                          keypadTouch
                                                                                                          keypadTouchWebhookContext
                                                                                                          keypadWebhookContext
                                                                                                          lock
                                                                                                          lockPro
                                                                                                          lockProServiceData
                                                                                                          lockProStatus
                                                                                                          lockProWebhookContext
                                                                                                          lockServiceData
                                                                                                          lockStatus
                                                                                                          lockWebhookContext
                                                                                                          MacAddress
                                                                                                          meter
                                                                                                          meterPlus
                                                                                                          meterPlusServiceData
                                                                                                          meterPlusStatus
                                                                                                          meterPlusWebhookContext
                                                                                                          meterPro
                                                                                                          meterProCO2ServiceData
                                                                                                          meterProCO2Status
                                                                                                          meterProCO2WebhookContext
                                                                                                          meterProServiceData
                                                                                                          meterProStatus
                                                                                                          meterProWebhookContext
                                                                                                          meterServiceData
                                                                                                          meterStatus
                                                                                                          meterWebhookContext
                                                                                                          motionSensor
                                                                                                          motionSensorServiceData
                                                                                                          motionSensorStatus
                                                                                                          motionSensorWebhookContext
                                                                                                          onadvertisement
                                                                                                          ondiscover
                                                                                                          outdoorMeter
                                                                                                          outdoorMeterServiceData
                                                                                                          outdoorMeterStatus
                                                                                                          outdoorMeterWebhookContext
                                                                                                          pantiltCam
                                                                                                          pantiltCam2k
                                                                                                          panTiltCamWebhookContext
                                                                                                          plug
                                                                                                          plugMini
                                                                                                          plugMiniJPServiceData
                                                                                                          plugMiniJPWebhookContext
                                                                                                          plugMiniStatus
                                                                                                          plugMiniUSServiceData
                                                                                                          plugMiniUSWebhookContext
                                                                                                          plugStatus
                                                                                                          plugWebhookContext
                                                                                                          relaySwitch1Context
                                                                                                          relaySwitch1PMContext
                                                                                                          relaySwitch1PMServiceData
                                                                                                          relaySwitch1PMStatus
                                                                                                          relaySwitch1ServiceData
                                                                                                          relaySwitch1Status
                                                                                                          remote
                                                                                                          remoteServiceData
                                                                                                          robotVacuumCleanerS1
                                                                                                          robotVacuumCleanerS1Plus
                                                                                                          robotVacuumCleanerS1PlusStatus
                                                                                                          robotVacuumCleanerS1PlusWebhookContext
                                                                                                          robotVacuumCleanerS1Status
                                                                                                          robotVacuumCleanerS1WebhookContext
                                                                                                          robotVacuumCleanerServiceData
                                                                                                          stripLight
                                                                                                          stripLightServiceData
                                                                                                          stripLightStatus
                                                                                                          stripLightWebhookContext
                                                                                                          waterLeakDetector
                                                                                                          waterLeakDetectorServiceData
                                                                                                          waterLeakDetectorStatus
                                                                                                          waterLeakDetectorWebhookContext

                                                                                                          Variables

                                                                                                          parameterChecker
                                                                                                          urls

                                                                                                          Functions

                                                                                                          updateBaseURL
                                                                                                          diff --git a/docs/types/BLEDeviceServiceData.html b/docs/types/BLEDeviceServiceData.html new file mode 100644 index 00000000..d1e53334 --- /dev/null +++ b/docs/types/BLEDeviceServiceData.html @@ -0,0 +1 @@ +BLEDeviceServiceData | node-switchbot
                                                                                                          node-switchbot
                                                                                                            Preparing search index...

                                                                                                            Type Alias BLEDeviceServiceData

                                                                                                            BLEDeviceServiceData:
                                                                                                                | airPurifierServiceData
                                                                                                                | airPurifierTableServiceData
                                                                                                                | batteryCirculatorFanServiceData
                                                                                                                | blindTiltServiceData
                                                                                                                | botServiceData
                                                                                                                | ceilingLightServiceData
                                                                                                                | ceilingLightProServiceData
                                                                                                                | colorBulbServiceData
                                                                                                                | contactSensorServiceData
                                                                                                                | curtain3ServiceData
                                                                                                                | curtainServiceData
                                                                                                                | hub2ServiceData
                                                                                                                | hub3ServiceData
                                                                                                                | keypadDetectorServiceData
                                                                                                                | lockProServiceData
                                                                                                                | lockServiceData
                                                                                                                | meterPlusServiceData
                                                                                                                | meterProCO2ServiceData
                                                                                                                | meterProServiceData
                                                                                                                | meterServiceData
                                                                                                                | motionSensorServiceData
                                                                                                                | outdoorMeterServiceData
                                                                                                                | plugMiniJPServiceData
                                                                                                                | plugMiniUSServiceData
                                                                                                                | relaySwitch1PMServiceData
                                                                                                                | relaySwitch1ServiceData
                                                                                                                | remoteServiceData
                                                                                                                | robotVacuumCleanerServiceData
                                                                                                                | stripLightServiceData
                                                                                                                | waterLeakDetectorServiceData
                                                                                                                | humidifier2ServiceData
                                                                                                                | humidifierServiceData
                                                                                                            diff --git a/docs/types/CommandType.html b/docs/types/CommandType.html new file mode 100644 index 00000000..f6d5b4d5 --- /dev/null +++ b/docs/types/CommandType.html @@ -0,0 +1,2 @@ +commandType | node-switchbot
                                                                                                            node-switchbot
                                                                                                              Preparing search index...

                                                                                                              Type Alias commandType

                                                                                                              commandType: "command" | "customize"

                                                                                                              Allowed command types for device control.

                                                                                                              +
                                                                                                              diff --git a/docs/types/MacAddress.html b/docs/types/MacAddress.html index a24f0658..73587243 100644 --- a/docs/types/MacAddress.html +++ b/docs/types/MacAddress.html @@ -1 +1 @@ -MacAddress | node-switchbot

                                                                                                              Type Alias MacAddress

                                                                                                              MacAddress: string
                                                                                                              +MacAddress | node-switchbot
                                                                                                              node-switchbot
                                                                                                                Preparing search index...

                                                                                                                Type Alias MacAddress

                                                                                                                MacAddress: string
                                                                                                                diff --git a/docs/types/airPurifier.html b/docs/types/airPurifier.html new file mode 100644 index 00000000..0b9522c2 --- /dev/null +++ b/docs/types/airPurifier.html @@ -0,0 +1 @@ +airPurifier | node-switchbot
                                                                                                                node-switchbot
                                                                                                                  Preparing search index...

                                                                                                                  Type Alias airPurifier

                                                                                                                  airPurifier: device
                                                                                                                  diff --git a/docs/types/airPurifierPM25WebhookContext.html b/docs/types/airPurifierPM25WebhookContext.html new file mode 100644 index 00000000..c379793f --- /dev/null +++ b/docs/types/airPurifierPM25WebhookContext.html @@ -0,0 +1 @@ +airPurifierPM25WebhookContext | node-switchbot
                                                                                                                  node-switchbot
                                                                                                                    Preparing search index...

                                                                                                                    Type Alias airPurifierPM25WebhookContext

                                                                                                                    airPurifierPM25WebhookContext: deviceWebhookContext & {
                                                                                                                        childLock: number;
                                                                                                                        mode: number;
                                                                                                                        power: string;
                                                                                                                    }
                                                                                                                    diff --git a/docs/types/airPurifierServiceData.html b/docs/types/airPurifierServiceData.html new file mode 100644 index 00000000..6a2dc986 --- /dev/null +++ b/docs/types/airPurifierServiceData.html @@ -0,0 +1 @@ +airPurifierServiceData | node-switchbot
                                                                                                                    node-switchbot
                                                                                                                      Preparing search index...

                                                                                                                      Type Alias airPurifierServiceData

                                                                                                                      airPurifierServiceData: BLEServiceData & {
                                                                                                                          aqi_level: string;
                                                                                                                          child_lock: boolean;
                                                                                                                          err_code: number;
                                                                                                                          filter_element_working_time: number;
                                                                                                                          isAqiValid: boolean;
                                                                                                                          isOn: boolean;
                                                                                                                          mode: string | null;
                                                                                                                          model: AirPurifier;
                                                                                                                          modelFriendlyName: AirPurifier;
                                                                                                                          modelName: AirPurifier;
                                                                                                                          sequence_number: number;
                                                                                                                          speed: number;
                                                                                                                      }
                                                                                                                      diff --git a/docs/types/airPurifierStatus.html b/docs/types/airPurifierStatus.html new file mode 100644 index 00000000..61ebdc4f --- /dev/null +++ b/docs/types/airPurifierStatus.html @@ -0,0 +1 @@ +airPurifierStatus | node-switchbot
                                                                                                                      node-switchbot
                                                                                                                        Preparing search index...

                                                                                                                        Type Alias airPurifierStatus

                                                                                                                        airPurifierStatus: deviceStatus & {
                                                                                                                            childLock: number;
                                                                                                                            mode: number;
                                                                                                                            power: string;
                                                                                                                            version: string;
                                                                                                                        }
                                                                                                                        diff --git a/docs/types/airPurifierTable.html b/docs/types/airPurifierTable.html new file mode 100644 index 00000000..831b3735 --- /dev/null +++ b/docs/types/airPurifierTable.html @@ -0,0 +1 @@ +airPurifierTable | node-switchbot
                                                                                                                        node-switchbot
                                                                                                                          Preparing search index...

                                                                                                                          Type Alias airPurifierTable

                                                                                                                          airPurifierTable: device
                                                                                                                          diff --git a/docs/types/airPurifierTablePM25WebhookContext.html b/docs/types/airPurifierTablePM25WebhookContext.html new file mode 100644 index 00000000..e741d1a5 --- /dev/null +++ b/docs/types/airPurifierTablePM25WebhookContext.html @@ -0,0 +1 @@ +airPurifierTablePM25WebhookContext | node-switchbot
                                                                                                                          node-switchbot
                                                                                                                            Preparing search index...

                                                                                                                            Type Alias airPurifierTablePM25WebhookContext

                                                                                                                            airPurifierTablePM25WebhookContext: deviceWebhookContext & {
                                                                                                                                childLock: number;
                                                                                                                                mode: number;
                                                                                                                                power: string;
                                                                                                                            }
                                                                                                                            diff --git a/docs/types/airPurifierTableServiceData.html b/docs/types/airPurifierTableServiceData.html new file mode 100644 index 00000000..a1d1e23e --- /dev/null +++ b/docs/types/airPurifierTableServiceData.html @@ -0,0 +1 @@ +airPurifierTableServiceData | node-switchbot
                                                                                                                            node-switchbot
                                                                                                                              Preparing search index...

                                                                                                                              Type Alias airPurifierTableServiceData

                                                                                                                              airPurifierTableServiceData: BLEServiceData & {
                                                                                                                                  aqi_level: string;
                                                                                                                                  child_lock: boolean;
                                                                                                                                  err_code: number;
                                                                                                                                  filter_element_working_time: number;
                                                                                                                                  isAqiValid: boolean;
                                                                                                                                  isOn: boolean;
                                                                                                                                  mode: string | null;
                                                                                                                                  model: AirPurifierTable;
                                                                                                                                  modelFriendlyName: AirPurifierTable;
                                                                                                                                  modelName: AirPurifierTable;
                                                                                                                                  sequence_number: number;
                                                                                                                                  speed: number;
                                                                                                                              }
                                                                                                                              diff --git a/docs/types/airPurifierTableStatus.html b/docs/types/airPurifierTableStatus.html new file mode 100644 index 00000000..0e7d1fbc --- /dev/null +++ b/docs/types/airPurifierTableStatus.html @@ -0,0 +1 @@ +airPurifierTableStatus | node-switchbot
                                                                                                                              node-switchbot
                                                                                                                                Preparing search index...

                                                                                                                                Type Alias airPurifierTableStatus

                                                                                                                                airPurifierTableStatus: deviceStatus & {
                                                                                                                                    childLock: number;
                                                                                                                                    mode: number;
                                                                                                                                    power: string;
                                                                                                                                    version: string;
                                                                                                                                }
                                                                                                                                diff --git a/docs/types/airPurifierTableVOC.html b/docs/types/airPurifierTableVOC.html new file mode 100644 index 00000000..bb7586b4 --- /dev/null +++ b/docs/types/airPurifierTableVOC.html @@ -0,0 +1 @@ +airPurifierTableVOC | node-switchbot
                                                                                                                                node-switchbot
                                                                                                                                  Preparing search index...

                                                                                                                                  Type Alias airPurifierTableVOC

                                                                                                                                  airPurifierTableVOC: device
                                                                                                                                  diff --git a/docs/types/airPurifierTableVOCStatus.html b/docs/types/airPurifierTableVOCStatus.html new file mode 100644 index 00000000..a7a6b7b5 --- /dev/null +++ b/docs/types/airPurifierTableVOCStatus.html @@ -0,0 +1 @@ +airPurifierTableVOCStatus | node-switchbot
                                                                                                                                  node-switchbot
                                                                                                                                    Preparing search index...

                                                                                                                                    Type Alias airPurifierTableVOCStatus

                                                                                                                                    airPurifierTableVOCStatus: deviceStatus & {
                                                                                                                                        childLock: number;
                                                                                                                                        mode: number;
                                                                                                                                        power: string;
                                                                                                                                        version: string;
                                                                                                                                    }
                                                                                                                                    diff --git a/docs/types/airPurifierTableVOCWebhookContext.html b/docs/types/airPurifierTableVOCWebhookContext.html new file mode 100644 index 00000000..d847701d --- /dev/null +++ b/docs/types/airPurifierTableVOCWebhookContext.html @@ -0,0 +1 @@ +airPurifierTableVOCWebhookContext | node-switchbot
                                                                                                                                    node-switchbot
                                                                                                                                      Preparing search index...

                                                                                                                                      Type Alias airPurifierTableVOCWebhookContext

                                                                                                                                      airPurifierTableVOCWebhookContext: deviceWebhookContext & {
                                                                                                                                          childLock: number;
                                                                                                                                          mode: number;
                                                                                                                                          power: string;
                                                                                                                                      }
                                                                                                                                      diff --git a/docs/types/airPurifierTableWebhookContext.html b/docs/types/airPurifierTableWebhookContext.html new file mode 100644 index 00000000..8b7bd4d1 --- /dev/null +++ b/docs/types/airPurifierTableWebhookContext.html @@ -0,0 +1 @@ +airPurifierTableWebhookContext | node-switchbot
                                                                                                                                      node-switchbot
                                                                                                                                        Preparing search index...

                                                                                                                                        Type Alias airPurifierTableWebhookContext

                                                                                                                                        airPurifierTableWebhookContext: deviceWebhookContext & {
                                                                                                                                            childLock: number;
                                                                                                                                            mode: number;
                                                                                                                                            power: string;
                                                                                                                                        }
                                                                                                                                        diff --git a/docs/types/airPurifierVOC.html b/docs/types/airPurifierVOC.html new file mode 100644 index 00000000..d697e905 --- /dev/null +++ b/docs/types/airPurifierVOC.html @@ -0,0 +1 @@ +airPurifierVOC | node-switchbot
                                                                                                                                        node-switchbot
                                                                                                                                          Preparing search index...

                                                                                                                                          Type Alias airPurifierVOC

                                                                                                                                          airPurifierVOC: device
                                                                                                                                          diff --git a/docs/types/airPurifierVOCStatus.html b/docs/types/airPurifierVOCStatus.html new file mode 100644 index 00000000..de2944d8 --- /dev/null +++ b/docs/types/airPurifierVOCStatus.html @@ -0,0 +1 @@ +airPurifierVOCStatus | node-switchbot
                                                                                                                                          node-switchbot
                                                                                                                                            Preparing search index...

                                                                                                                                            Type Alias airPurifierVOCStatus

                                                                                                                                            airPurifierVOCStatus: deviceStatus & {
                                                                                                                                                childLock: number;
                                                                                                                                                mode: number;
                                                                                                                                                power: string;
                                                                                                                                                version: string;
                                                                                                                                            }
                                                                                                                                            diff --git a/docs/types/airPurifierVOCWebhookContext.html b/docs/types/airPurifierVOCWebhookContext.html new file mode 100644 index 00000000..19af6228 --- /dev/null +++ b/docs/types/airPurifierVOCWebhookContext.html @@ -0,0 +1 @@ +airPurifierVOCWebhookContext | node-switchbot
                                                                                                                                            node-switchbot
                                                                                                                                              Preparing search index...

                                                                                                                                              Type Alias airPurifierVOCWebhookContext

                                                                                                                                              airPurifierVOCWebhookContext: deviceWebhookContext & {
                                                                                                                                                  childLock: number;
                                                                                                                                                  mode: number;
                                                                                                                                                  power: string;
                                                                                                                                              }
                                                                                                                                              diff --git a/docs/types/airPurifierWebhookContext.html b/docs/types/airPurifierWebhookContext.html new file mode 100644 index 00000000..0e4beec4 --- /dev/null +++ b/docs/types/airPurifierWebhookContext.html @@ -0,0 +1 @@ +airPurifierWebhookContext | node-switchbot
                                                                                                                                              node-switchbot
                                                                                                                                                Preparing search index...

                                                                                                                                                Type Alias airPurifierWebhookContext

                                                                                                                                                airPurifierWebhookContext: deviceWebhookContext & {
                                                                                                                                                    childLock: number;
                                                                                                                                                    mode: number;
                                                                                                                                                    power: string;
                                                                                                                                                }
                                                                                                                                                diff --git a/docs/types/batteryCirculatorFan.html b/docs/types/batteryCirculatorFan.html index 59dc8560..6187933d 100644 --- a/docs/types/batteryCirculatorFan.html +++ b/docs/types/batteryCirculatorFan.html @@ -1 +1 @@ -batteryCirculatorFan | node-switchbot

                                                                                                                                                Type Alias batteryCirculatorFan

                                                                                                                                                batteryCirculatorFan: device & {}
                                                                                                                                                +batteryCirculatorFan | node-switchbot
                                                                                                                                                node-switchbot
                                                                                                                                                  Preparing search index...

                                                                                                                                                  Type Alias batteryCirculatorFan

                                                                                                                                                  batteryCirculatorFan: device
                                                                                                                                                  diff --git a/docs/types/batteryCirculatorFanServiceData.html b/docs/types/batteryCirculatorFanServiceData.html index 9c53c8c9..c40776fd 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
                                                                                                                                                  node-switchbot
                                                                                                                                                    Preparing search index...

                                                                                                                                                    Type Alias batteryCirculatorFanServiceData

                                                                                                                                                    batteryCirculatorFanServiceData: BLEServiceData & {
                                                                                                                                                        fanSpeed: number;
                                                                                                                                                        model: Unknown;
                                                                                                                                                        modelFriendlyName: Unknown;
                                                                                                                                                        modelName: Unknown;
                                                                                                                                                        state: string;
                                                                                                                                                    }
                                                                                                                                                    diff --git a/docs/types/batteryCirculatorFanStatus.html b/docs/types/batteryCirculatorFanStatus.html index a68aaa8f..4820de82 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;
                                                                                                                                                        version: string;
                                                                                                                                                        verticalOscillation: string;
                                                                                                                                                    }
                                                                                                                                                    +batteryCirculatorFanStatus | node-switchbot
                                                                                                                                                    node-switchbot
                                                                                                                                                      Preparing search index...

                                                                                                                                                      Type Alias batteryCirculatorFanStatus

                                                                                                                                                      batteryCirculatorFanStatus: deviceStatus & {
                                                                                                                                                          battery: number;
                                                                                                                                                          chargingStatus: string;
                                                                                                                                                          fanSpeed: number;
                                                                                                                                                          mode: "direct" | "natural" | "sleep" | "baby";
                                                                                                                                                          nightStatus: number;
                                                                                                                                                          oscillation: string;
                                                                                                                                                          power: string;
                                                                                                                                                          version: string;
                                                                                                                                                          verticalOscillation: string;
                                                                                                                                                      }
                                                                                                                                                      diff --git a/docs/types/batteryCirculatorFanWebhookContext.html b/docs/types/batteryCirculatorFanWebhookContext.html index 9118b7e7..eee595f8 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
                                                                                                                                                      node-switchbot
                                                                                                                                                        Preparing search index...

                                                                                                                                                        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 ecf0cbff..69b0525c 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
                                                                                                                                                        node-switchbot
                                                                                                                                                          Preparing search index...

                                                                                                                                                          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 17bde8f4..448aa079 100644 --- a/docs/types/blindTiltServiceData.html +++ b/docs/types/blindTiltServiceData.html @@ -1 +1 @@ -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;
                                                                                                                                                          }
                                                                                                                                                          +blindTiltServiceData | node-switchbot
                                                                                                                                                          node-switchbot
                                                                                                                                                            Preparing search index...

                                                                                                                                                            Type Alias blindTiltServiceData

                                                                                                                                                            blindTiltServiceData: BLEServiceData & {
                                                                                                                                                                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 7f576c26..90c89501 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
                                                                                                                                                            node-switchbot
                                                                                                                                                              Preparing search index...

                                                                                                                                                              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 06e37dbf..7cd073e6 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
                                                                                                                                                              node-switchbot
                                                                                                                                                                Preparing search index...

                                                                                                                                                                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 467010e6..076d8404 100644 --- a/docs/types/bot.html +++ b/docs/types/bot.html @@ -1 +1 @@ -bot | node-switchbot

                                                                                                                                                                Type Alias bot

                                                                                                                                                                bot: device & {}
                                                                                                                                                                +bot | node-switchbot
                                                                                                                                                                node-switchbot
                                                                                                                                                                  Preparing search index...

                                                                                                                                                                  Type Alias bot

                                                                                                                                                                  bot: device
                                                                                                                                                                  diff --git a/docs/types/botServiceData.html b/docs/types/botServiceData.html index a196e311..dcf9d07d 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
                                                                                                                                                                  node-switchbot
                                                                                                                                                                    Preparing search index...

                                                                                                                                                                    Type Alias botServiceData

                                                                                                                                                                    botServiceData: BLEServiceData & {
                                                                                                                                                                        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 914be20b..a0fc0342 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
                                                                                                                                                                    node-switchbot
                                                                                                                                                                      Preparing search index...

                                                                                                                                                                      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 f537bac4..4885e9c4 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
                                                                                                                                                                      node-switchbot
                                                                                                                                                                        Preparing search index...

                                                                                                                                                                        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 59b677db..5fcabef7 100644 --- a/docs/types/ceilingLight.html +++ b/docs/types/ceilingLight.html @@ -1 +1 @@ -ceilingLight | node-switchbot

                                                                                                                                                                        Type Alias ceilingLight

                                                                                                                                                                        ceilingLight: device & {}
                                                                                                                                                                        +ceilingLight | node-switchbot
                                                                                                                                                                        node-switchbot
                                                                                                                                                                          Preparing search index...

                                                                                                                                                                          Type Alias ceilingLight

                                                                                                                                                                          ceilingLight: device
                                                                                                                                                                          diff --git a/docs/types/ceilingLightPro.html b/docs/types/ceilingLightPro.html index af8b8ae2..5e710b22 100644 --- a/docs/types/ceilingLightPro.html +++ b/docs/types/ceilingLightPro.html @@ -1 +1 @@ -ceilingLightPro | node-switchbot

                                                                                                                                                                          Type Alias ceilingLightPro

                                                                                                                                                                          ceilingLightPro: device & {}
                                                                                                                                                                          +ceilingLightPro | node-switchbot
                                                                                                                                                                          node-switchbot
                                                                                                                                                                            Preparing search index...

                                                                                                                                                                            Type Alias ceilingLightPro

                                                                                                                                                                            ceilingLightPro: device
                                                                                                                                                                            diff --git a/docs/types/ceilingLightProServiceData.html b/docs/types/ceilingLightProServiceData.html index 546f567b..d25e3e57 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
                                                                                                                                                                            node-switchbot
                                                                                                                                                                              Preparing search index...

                                                                                                                                                                              Type Alias ceilingLightProServiceData

                                                                                                                                                                              ceilingLightProServiceData: BLEServiceData & {
                                                                                                                                                                                  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 80813737..8e2d7e2d 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
                                                                                                                                                                              node-switchbot
                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                Type Alias ceilingLightProStatus

                                                                                                                                                                                ceilingLightProStatus: deviceStatus & {
                                                                                                                                                                                    brightness: number;
                                                                                                                                                                                    colorTemperature: number;
                                                                                                                                                                                    power: boolean;
                                                                                                                                                                                }
                                                                                                                                                                                diff --git a/docs/types/ceilingLightProWebhookContext.html b/docs/types/ceilingLightProWebhookContext.html index 9bd2bb83..7f683ff2 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
                                                                                                                                                                                node-switchbot
                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                  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 6e49987b..db992e46 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
                                                                                                                                                                                  node-switchbot
                                                                                                                                                                                    Preparing search index...

                                                                                                                                                                                    Type Alias ceilingLightServiceData

                                                                                                                                                                                    ceilingLightServiceData: BLEServiceData & {
                                                                                                                                                                                        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 6a549a73..b2a79efb 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
                                                                                                                                                                                    node-switchbot
                                                                                                                                                                                      Preparing search index...

                                                                                                                                                                                      Type Alias ceilingLightStatus

                                                                                                                                                                                      ceilingLightStatus: deviceStatus & {
                                                                                                                                                                                          brightness: number;
                                                                                                                                                                                          colorTemperature: number;
                                                                                                                                                                                          power: boolean;
                                                                                                                                                                                      }
                                                                                                                                                                                      diff --git a/docs/types/ceilingLightWebhookContext.html b/docs/types/ceilingLightWebhookContext.html index 3740b02a..90637276 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
                                                                                                                                                                                      node-switchbot
                                                                                                                                                                                        Preparing search index...

                                                                                                                                                                                        Type Alias ceilingLightWebhookContext

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

                                                                                                                                                                                        Type Alias circulatorFanStatus

                                                                                                                                                                                        circulatorFanStatus: deviceStatus & {
                                                                                                                                                                                            fanSpeed: number;
                                                                                                                                                                                            mode: "direct" | "natural" | "sleep" | "baby";
                                                                                                                                                                                            nightStatus: number;
                                                                                                                                                                                            oscillation: string;
                                                                                                                                                                                            power: string;
                                                                                                                                                                                            version: string;
                                                                                                                                                                                            verticalOscillation: string;
                                                                                                                                                                                        }
                                                                                                                                                                                        +circulatorFanStatus | node-switchbot
                                                                                                                                                                                        node-switchbot
                                                                                                                                                                                          Preparing search index...

                                                                                                                                                                                          Type Alias circulatorFanStatus

                                                                                                                                                                                          circulatorFanStatus: deviceStatus & {
                                                                                                                                                                                              fanSpeed: number;
                                                                                                                                                                                              mode: "direct" | "natural" | "sleep" | "baby";
                                                                                                                                                                                              nightStatus: number;
                                                                                                                                                                                              oscillation: string;
                                                                                                                                                                                              power: string;
                                                                                                                                                                                              version: string;
                                                                                                                                                                                              verticalOscillation: string;
                                                                                                                                                                                          }
                                                                                                                                                                                          diff --git a/docs/types/circulatorFanWebhookContext.html b/docs/types/circulatorFanWebhookContext.html index c48c0526..94d12014 100644 --- a/docs/types/circulatorFanWebhookContext.html +++ b/docs/types/circulatorFanWebhookContext.html @@ -1 +1 @@ -circulatorFanWebhookContext | node-switchbot

                                                                                                                                                                                          Type Alias circulatorFanWebhookContext

                                                                                                                                                                                          circulatorFanWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                              battery: number;
                                                                                                                                                                                              fanSpeed: number;
                                                                                                                                                                                              mode: "direct" | "natural" | "sleep" | "baby";
                                                                                                                                                                                              nightStatus: "off" | 1 | 2;
                                                                                                                                                                                              oscillation: "on" | "off";
                                                                                                                                                                                              powerState: "ON" | "OFF";
                                                                                                                                                                                              version: string;
                                                                                                                                                                                              verticalOscillation: "on" | "off";
                                                                                                                                                                                          }
                                                                                                                                                                                          +circulatorFanWebhookContext | node-switchbot
                                                                                                                                                                                          node-switchbot
                                                                                                                                                                                            Preparing search index...

                                                                                                                                                                                            Type Alias circulatorFanWebhookContext

                                                                                                                                                                                            circulatorFanWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                battery: number;
                                                                                                                                                                                                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/colorBulb.html b/docs/types/colorBulb.html index 65266f88..d410d00e 100644 --- a/docs/types/colorBulb.html +++ b/docs/types/colorBulb.html @@ -1 +1 @@ -colorBulb | node-switchbot

                                                                                                                                                                                            Type Alias colorBulb

                                                                                                                                                                                            colorBulb: device & {}
                                                                                                                                                                                            +colorBulb | node-switchbot
                                                                                                                                                                                            node-switchbot
                                                                                                                                                                                              Preparing search index...

                                                                                                                                                                                              Type Alias colorBulb

                                                                                                                                                                                              colorBulb: device
                                                                                                                                                                                              diff --git a/docs/types/colorBulbServiceData.html b/docs/types/colorBulbServiceData.html index 6e25646b..f2eefcf4 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
                                                                                                                                                                                              node-switchbot
                                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                                Type Alias colorBulbServiceData

                                                                                                                                                                                                colorBulbServiceData: ColorLightServiceDataBase & {
                                                                                                                                                                                                    model: ColorBulb;
                                                                                                                                                                                                    modelFriendlyName: ColorBulb;
                                                                                                                                                                                                    modelName: ColorBulb;
                                                                                                                                                                                                }
                                                                                                                                                                                                diff --git a/docs/types/colorBulbStatus.html b/docs/types/colorBulbStatus.html index cf54b614..569bb87e 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
                                                                                                                                                                                                node-switchbot
                                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                                  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 bed74f8f..c9f9258d 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
                                                                                                                                                                                                  node-switchbot
                                                                                                                                                                                                    Preparing search index...

                                                                                                                                                                                                    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 45621b9f..c37d4baa 100644 --- a/docs/types/contactSensor.html +++ b/docs/types/contactSensor.html @@ -1 +1 @@ -contactSensor | node-switchbot

                                                                                                                                                                                                    Type Alias contactSensor

                                                                                                                                                                                                    contactSensor: device & {}
                                                                                                                                                                                                    +contactSensor | node-switchbot
                                                                                                                                                                                                    node-switchbot
                                                                                                                                                                                                      Preparing search index...

                                                                                                                                                                                                      Type Alias contactSensor

                                                                                                                                                                                                      contactSensor: device
                                                                                                                                                                                                      diff --git a/docs/types/contactSensorServiceData.html b/docs/types/contactSensorServiceData.html index 5c277901..4705a186 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
                                                                                                                                                                                                      node-switchbot
                                                                                                                                                                                                        Preparing search index...

                                                                                                                                                                                                        Type Alias contactSensorServiceData

                                                                                                                                                                                                        contactSensorServiceData: BLEServiceData & {
                                                                                                                                                                                                            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 1a772719..c6464d78 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
                                                                                                                                                                                                        node-switchbot
                                                                                                                                                                                                          Preparing search index...

                                                                                                                                                                                                          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 eba4215f..dd90dcb7 100644 --- a/docs/types/contactSensorWebhookContext.html +++ b/docs/types/contactSensorWebhookContext.html @@ -1 +1 @@ -contactSensorWebhookContext | node-switchbot

                                                                                                                                                                                                          Type Alias contactSensorWebhookContext

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

                                                                                                                                                                                                            Type Alias contactSensorWebhookContext

                                                                                                                                                                                                            contactSensorWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                battery: number;
                                                                                                                                                                                                                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 c2639afa..1a996fb9 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
                                                                                                                                                                                                            node-switchbot
                                                                                                                                                                                                              Preparing search index...

                                                                                                                                                                                                              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 efba7553..75b84bef 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
                                                                                                                                                                                                              node-switchbot
                                                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                                                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 0c344724..8830daa6 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
                                                                                                                                                                                                                node-switchbot
                                                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                                                  Type Alias curtain3ServiceData

                                                                                                                                                                                                                  curtain3ServiceData: BLEServiceData & {
                                                                                                                                                                                                                      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 73c9406f..61aadd65 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
                                                                                                                                                                                                                  node-switchbot
                                                                                                                                                                                                                    Preparing search index...

                                                                                                                                                                                                                    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 df0e5b13..1d7cc4a1 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
                                                                                                                                                                                                                    node-switchbot
                                                                                                                                                                                                                      Preparing search index...

                                                                                                                                                                                                                      Type Alias curtainServiceData

                                                                                                                                                                                                                      curtainServiceData: BLEServiceData & {
                                                                                                                                                                                                                          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 6f42acc6..706862c3 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
                                                                                                                                                                                                                      node-switchbot
                                                                                                                                                                                                                        Preparing search index...

                                                                                                                                                                                                                        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 a8214c90..05cdb235 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
                                                                                                                                                                                                                        node-switchbot
                                                                                                                                                                                                                          Preparing search index...

                                                                                                                                                                                                                          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 32d5c86a..41845dcf 100644 --- a/docs/types/floorCleaningRobotS10.html +++ b/docs/types/floorCleaningRobotS10.html @@ -1 +1 @@ -floorCleaningRobotS10 | node-switchbot

                                                                                                                                                                                                                          Type Alias floorCleaningRobotS10

                                                                                                                                                                                                                          floorCleaningRobotS10: device & {}
                                                                                                                                                                                                                          +floorCleaningRobotS10 | node-switchbot
                                                                                                                                                                                                                          node-switchbot
                                                                                                                                                                                                                            Preparing search index...

                                                                                                                                                                                                                            Type Alias floorCleaningRobotS10

                                                                                                                                                                                                                            floorCleaningRobotS10: device
                                                                                                                                                                                                                            diff --git a/docs/types/floorCleaningRobotS10Status.html b/docs/types/floorCleaningRobotS10Status.html index 2e5f6563..326d315c 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
                                                                                                                                                                                                                            node-switchbot
                                                                                                                                                                                                                              Preparing search index...

                                                                                                                                                                                                                              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 1b1e7c75..5bc6cf1d 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
                                                                                                                                                                                                                              node-switchbot
                                                                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                                                                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 9f0e6a88..91f6cb6c 100644 --- a/docs/types/hub2.html +++ b/docs/types/hub2.html @@ -1 +1 @@ -hub2 | node-switchbot

                                                                                                                                                                                                                                Type Alias hub2

                                                                                                                                                                                                                                hub2: device & {}
                                                                                                                                                                                                                                +hub2 | node-switchbot
                                                                                                                                                                                                                                node-switchbot
                                                                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                                                                  Type Alias hub2

                                                                                                                                                                                                                                  hub2: device
                                                                                                                                                                                                                                  diff --git a/docs/types/hub2ServiceData.html b/docs/types/hub2ServiceData.html index c3c56591..97bae20a 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
                                                                                                                                                                                                                                  node-switchbot
                                                                                                                                                                                                                                    Preparing search index...

                                                                                                                                                                                                                                    Type Alias hub2ServiceData

                                                                                                                                                                                                                                    hub2ServiceData: BLEServiceData & {
                                                                                                                                                                                                                                        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 1f95e6ff..547a6584 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
                                                                                                                                                                                                                                    node-switchbot
                                                                                                                                                                                                                                      Preparing search index...

                                                                                                                                                                                                                                      Type Alias hub2Status

                                                                                                                                                                                                                                      hub2Status: deviceStatus & {
                                                                                                                                                                                                                                          humidity: number;
                                                                                                                                                                                                                                          lightLevel: number;
                                                                                                                                                                                                                                          temperature: number;
                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                      diff --git a/docs/types/hub2WebhookContext.html b/docs/types/hub2WebhookContext.html index 8a2476c8..ee3410d8 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
                                                                                                                                                                                                                                      node-switchbot
                                                                                                                                                                                                                                        Preparing search index...

                                                                                                                                                                                                                                        Type Alias hub2WebhookContext

                                                                                                                                                                                                                                        hub2WebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                            humidity: number;
                                                                                                                                                                                                                                            lightLevel: number;
                                                                                                                                                                                                                                            scale: "CELSIUS" | "FAHRENHEIT";
                                                                                                                                                                                                                                            temperature: number;
                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                        diff --git a/docs/types/hub3ServiceData.html b/docs/types/hub3ServiceData.html new file mode 100644 index 00000000..a7684244 --- /dev/null +++ b/docs/types/hub3ServiceData.html @@ -0,0 +1 @@ +hub3ServiceData | node-switchbot
                                                                                                                                                                                                                                        node-switchbot
                                                                                                                                                                                                                                          Preparing search index...

                                                                                                                                                                                                                                          Type Alias hub3ServiceData

                                                                                                                                                                                                                                          hub3ServiceData: BLEServiceData & {
                                                                                                                                                                                                                                              celsius: number;
                                                                                                                                                                                                                                              fahrenheit: number;
                                                                                                                                                                                                                                              fahrenheit_mode: boolean;
                                                                                                                                                                                                                                              humidity: number;
                                                                                                                                                                                                                                              lightLevel: number;
                                                                                                                                                                                                                                              model: Hub3;
                                                                                                                                                                                                                                              modelFriendlyName: Hub3;
                                                                                                                                                                                                                                              modelName: Hub3;
                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                          diff --git a/docs/types/humidifier.html b/docs/types/humidifier.html index 339ee067..8294f3d1 100644 --- a/docs/types/humidifier.html +++ b/docs/types/humidifier.html @@ -1 +1 @@ -humidifier | node-switchbot

                                                                                                                                                                                                                                          Type Alias humidifier

                                                                                                                                                                                                                                          humidifier: device & {}
                                                                                                                                                                                                                                          +humidifier | node-switchbot
                                                                                                                                                                                                                                          node-switchbot
                                                                                                                                                                                                                                            Preparing search index...

                                                                                                                                                                                                                                            Type Alias humidifier

                                                                                                                                                                                                                                            humidifier: device
                                                                                                                                                                                                                                            diff --git a/docs/types/humidifier2ServiceData.html b/docs/types/humidifier2ServiceData.html index 3ff3c5da..f76ed02b 100644 --- a/docs/types/humidifier2ServiceData.html +++ b/docs/types/humidifier2ServiceData.html @@ -1 +1 @@ -humidifier2ServiceData | node-switchbot

                                                                                                                                                                                                                                            Type Alias humidifier2ServiceData

                                                                                                                                                                                                                                            humidifier2ServiceData: serviceData & {
                                                                                                                                                                                                                                                autoMode: boolean;
                                                                                                                                                                                                                                                childLock: boolean;
                                                                                                                                                                                                                                                filterAlert: boolean;
                                                                                                                                                                                                                                                filterMissing: boolean;
                                                                                                                                                                                                                                                filterRunTime: number;
                                                                                                                                                                                                                                                humidity: number;
                                                                                                                                                                                                                                                model: Humidifier2;
                                                                                                                                                                                                                                                modelFriendlyName: Humidifier2;
                                                                                                                                                                                                                                                modelName: Humidifier2;
                                                                                                                                                                                                                                                onState: boolean;
                                                                                                                                                                                                                                                overHumidifyProtection: boolean;
                                                                                                                                                                                                                                                percentage: number;
                                                                                                                                                                                                                                                tankRemoved: boolean;
                                                                                                                                                                                                                                                temperature: number;
                                                                                                                                                                                                                                                tiltedAlert: boolean;
                                                                                                                                                                                                                                                waterLevel: number;
                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                            +humidifier2ServiceData | node-switchbot
                                                                                                                                                                                                                                            node-switchbot
                                                                                                                                                                                                                                              Preparing search index...

                                                                                                                                                                                                                                              Type Alias humidifier2ServiceData

                                                                                                                                                                                                                                              humidifier2ServiceData: BLEServiceData & {
                                                                                                                                                                                                                                                  autoMode: boolean;
                                                                                                                                                                                                                                                  childLock: boolean;
                                                                                                                                                                                                                                                  filterAlert: boolean;
                                                                                                                                                                                                                                                  filterMissing: boolean;
                                                                                                                                                                                                                                                  filterRunTime: number;
                                                                                                                                                                                                                                                  humidity: number;
                                                                                                                                                                                                                                                  model: Humidifier2;
                                                                                                                                                                                                                                                  modelFriendlyName: Humidifier2;
                                                                                                                                                                                                                                                  modelName: Humidifier2;
                                                                                                                                                                                                                                                  onState: boolean;
                                                                                                                                                                                                                                                  overHumidifyProtection: boolean;
                                                                                                                                                                                                                                                  percentage: number;
                                                                                                                                                                                                                                                  tankRemoved: boolean;
                                                                                                                                                                                                                                                  temperature: number;
                                                                                                                                                                                                                                                  tiltedAlert: boolean;
                                                                                                                                                                                                                                                  waterLevel: number;
                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                              diff --git a/docs/types/humidifier2Status.html b/docs/types/humidifier2Status.html index 0c23323a..d75f2b16 100644 --- a/docs/types/humidifier2Status.html +++ b/docs/types/humidifier2Status.html @@ -1 +1 @@ -humidifier2Status | node-switchbot

                                                                                                                                                                                                                                              Type Alias humidifier2Status

                                                                                                                                                                                                                                              humidifier2Status: deviceStatus & {
                                                                                                                                                                                                                                                  auto: boolean;
                                                                                                                                                                                                                                                  childLock: boolean;
                                                                                                                                                                                                                                                  humidity: number;
                                                                                                                                                                                                                                                  lackWater: boolean;
                                                                                                                                                                                                                                                  nebulizationEfficiency: number;
                                                                                                                                                                                                                                                  power: string;
                                                                                                                                                                                                                                                  sound: boolean;
                                                                                                                                                                                                                                                  temperature: number;
                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                              +humidifier2Status | node-switchbot
                                                                                                                                                                                                                                              node-switchbot
                                                                                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                                                                                Type Alias humidifier2Status

                                                                                                                                                                                                                                                humidifier2Status: deviceStatus & {
                                                                                                                                                                                                                                                    auto: boolean;
                                                                                                                                                                                                                                                    childLock: boolean;
                                                                                                                                                                                                                                                    humidity: number;
                                                                                                                                                                                                                                                    lackWater: boolean;
                                                                                                                                                                                                                                                    nebulizationEfficiency: number;
                                                                                                                                                                                                                                                    power: string;
                                                                                                                                                                                                                                                    sound: boolean;
                                                                                                                                                                                                                                                    temperature: number;
                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                diff --git a/docs/types/humidifier2WebhookContext.html b/docs/types/humidifier2WebhookContext.html index 6e50b557..bf94c43b 100644 --- a/docs/types/humidifier2WebhookContext.html +++ b/docs/types/humidifier2WebhookContext.html @@ -1 +1 @@ -humidifier2WebhookContext | node-switchbot

                                                                                                                                                                                                                                                Type Alias humidifier2WebhookContext

                                                                                                                                                                                                                                                humidifier2WebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                    humidity: number;
                                                                                                                                                                                                                                                    scale: "CELSIUS" | "FAHRENHEIT";
                                                                                                                                                                                                                                                    temperature: number;
                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                +humidifier2WebhookContext | node-switchbot
                                                                                                                                                                                                                                                node-switchbot
                                                                                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                                                                                  Type Alias humidifier2WebhookContext

                                                                                                                                                                                                                                                  humidifier2WebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                      humidity: number;
                                                                                                                                                                                                                                                      scale: "CELSIUS" | "FAHRENHEIT";
                                                                                                                                                                                                                                                      temperature: number;
                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                  diff --git a/docs/types/humidifierServiceData.html b/docs/types/humidifierServiceData.html index cc2afa74..b15f9ae8 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
                                                                                                                                                                                                                                                  node-switchbot
                                                                                                                                                                                                                                                    Preparing search index...

                                                                                                                                                                                                                                                    Type Alias humidifierServiceData

                                                                                                                                                                                                                                                    humidifierServiceData: BLEServiceData & {
                                                                                                                                                                                                                                                        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 faeb673f..54c56e61 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
                                                                                                                                                                                                                                                    node-switchbot
                                                                                                                                                                                                                                                      Preparing search index...

                                                                                                                                                                                                                                                      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 dd71481e..44b62bbe 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
                                                                                                                                                                                                                                                      node-switchbot
                                                                                                                                                                                                                                                        Preparing search index...

                                                                                                                                                                                                                                                        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 3a34af8b..8177f205 100644 --- a/docs/types/indoorCam.html +++ b/docs/types/indoorCam.html @@ -1 +1 @@ -indoorCam | node-switchbot

                                                                                                                                                                                                                                                        Type Alias indoorCam

                                                                                                                                                                                                                                                        indoorCam: device & {}
                                                                                                                                                                                                                                                        +IndoorCam | node-switchbot
                                                                                                                                                                                                                                                        node-switchbot
                                                                                                                                                                                                                                                          Preparing search index...

                                                                                                                                                                                                                                                          Type Alias IndoorCam

                                                                                                                                                                                                                                                          IndoorCam: device
                                                                                                                                                                                                                                                          diff --git a/docs/types/indoorCameraWebhookContext.html b/docs/types/indoorCameraWebhookContext.html index c5b49c3b..fa9d1b2d 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
                                                                                                                                                                                                                                                          node-switchbot
                                                                                                                                                                                                                                                            Preparing search index...

                                                                                                                                                                                                                                                            Type Alias indoorCameraWebhookContext

                                                                                                                                                                                                                                                            indoorCameraWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                detectionState: "DETECTED";
                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                            diff --git a/docs/types/keypad.html b/docs/types/keypad.html index e46c1a60..be4f1e84 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
                                                                                                                                                                                                                                                            node-switchbot
                                                                                                                                                                                                                                                              Preparing search index...

                                                                                                                                                                                                                                                              Type Alias keypad

                                                                                                                                                                                                                                                              keypad: device & { keyList: keyList; lockDeviceId: string; remoteType: string }
                                                                                                                                                                                                                                                              diff --git a/docs/types/keypadDetectorServiceData.html b/docs/types/keypadDetectorServiceData.html index d77328bf..a2ce976f 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
                                                                                                                                                                                                                                                              node-switchbot
                                                                                                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                                                                                                Type Alias keypadDetectorServiceData

                                                                                                                                                                                                                                                                keypadDetectorServiceData: BLEServiceData & {
                                                                                                                                                                                                                                                                    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 b2d39879..1f54a5d1 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
                                                                                                                                                                                                                                                                node-switchbot
                                                                                                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                                                                                                  Type Alias keypadTouch

                                                                                                                                                                                                                                                                  keypadTouch: device & {
                                                                                                                                                                                                                                                                      keyList: keyList;
                                                                                                                                                                                                                                                                      lockDeviceId: string;
                                                                                                                                                                                                                                                                      remoteType: string;
                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                  diff --git a/docs/types/keypadTouchWebhookContext.html b/docs/types/keypadTouchWebhookContext.html index 106bf1fd..299c602c 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
                                                                                                                                                                                                                                                                  node-switchbot
                                                                                                                                                                                                                                                                    Preparing search index...

                                                                                                                                                                                                                                                                    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 714cdb35..010867c5 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
                                                                                                                                                                                                                                                                    node-switchbot
                                                                                                                                                                                                                                                                      Preparing search index...

                                                                                                                                                                                                                                                                      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 ce823e58..228439ea 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
                                                                                                                                                                                                                                                                      node-switchbot
                                                                                                                                                                                                                                                                        Preparing search index...

                                                                                                                                                                                                                                                                        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 c7c53d19..94f6704f 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
                                                                                                                                                                                                                                                                        node-switchbot
                                                                                                                                                                                                                                                                          Preparing search index...

                                                                                                                                                                                                                                                                          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 52186c1a..f55b9177 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
                                                                                                                                                                                                                                                                          node-switchbot
                                                                                                                                                                                                                                                                            Preparing search index...

                                                                                                                                                                                                                                                                            Type Alias lockProServiceData

                                                                                                                                                                                                                                                                            lockProServiceData: LockBaseServiceData & {
                                                                                                                                                                                                                                                                                model: LockPro;
                                                                                                                                                                                                                                                                                modelFriendlyName: LockPro;
                                                                                                                                                                                                                                                                                modelName: LockPro;
                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                            diff --git a/docs/types/lockProStatus.html b/docs/types/lockProStatus.html index 50d930bd..6b6e01c1 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
                                                                                                                                                                                                                                                                            node-switchbot
                                                                                                                                                                                                                                                                              Preparing search index...

                                                                                                                                                                                                                                                                              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 32981e85..1ac07466 100644 --- a/docs/types/lockProWebhookContext.html +++ b/docs/types/lockProWebhookContext.html @@ -1 +1 @@ -lockProWebhookContext | node-switchbot

                                                                                                                                                                                                                                                                              Type Alias lockProWebhookContext

                                                                                                                                                                                                                                                                              lockProWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                  battery: number;
                                                                                                                                                                                                                                                                                  lockState: "UNLOCKED" | "LOCKED" | "JAMMED";
                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                              +lockProWebhookContext | node-switchbot
                                                                                                                                                                                                                                                                              node-switchbot
                                                                                                                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                                                                                                                Type Alias lockProWebhookContext

                                                                                                                                                                                                                                                                                lockProWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                    battery: number;
                                                                                                                                                                                                                                                                                    lockState: "UNLOCKED" | "LOCKED" | "JAMMED";
                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                diff --git a/docs/types/lockServiceData.html b/docs/types/lockServiceData.html index 49564b89..82a69c38 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
                                                                                                                                                                                                                                                                                node-switchbot
                                                                                                                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                                                                                                                  Type Alias lockServiceData

                                                                                                                                                                                                                                                                                  lockServiceData: LockBaseServiceData & {
                                                                                                                                                                                                                                                                                      model: Lock;
                                                                                                                                                                                                                                                                                      modelFriendlyName: Lock;
                                                                                                                                                                                                                                                                                      modelName: Lock;
                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                  diff --git a/docs/types/lockStatus.html b/docs/types/lockStatus.html index 6213cfe0..3865a5a1 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
                                                                                                                                                                                                                                                                                  node-switchbot
                                                                                                                                                                                                                                                                                    Preparing search index...

                                                                                                                                                                                                                                                                                    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 88c98eb8..631865a4 100644 --- a/docs/types/lockWebhookContext.html +++ b/docs/types/lockWebhookContext.html @@ -1 +1 @@ -lockWebhookContext | node-switchbot

                                                                                                                                                                                                                                                                                    Type Alias lockWebhookContext

                                                                                                                                                                                                                                                                                    lockWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                        battery: number;
                                                                                                                                                                                                                                                                                        lockState: "UNLOCKED" | "LOCKED" | "JAMMED";
                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                    +lockWebhookContext | node-switchbot
                                                                                                                                                                                                                                                                                    node-switchbot
                                                                                                                                                                                                                                                                                      Preparing search index...

                                                                                                                                                                                                                                                                                      Type Alias lockWebhookContext

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

                                                                                                                                                                                                                                                                                      Type Alias meter

                                                                                                                                                                                                                                                                                      meter: device & {}
                                                                                                                                                                                                                                                                                      +meter | node-switchbot
                                                                                                                                                                                                                                                                                      node-switchbot
                                                                                                                                                                                                                                                                                        Preparing search index...

                                                                                                                                                                                                                                                                                        Type Alias meter

                                                                                                                                                                                                                                                                                        meter: device
                                                                                                                                                                                                                                                                                        diff --git a/docs/types/meterPlus.html b/docs/types/meterPlus.html index b9ea1a3d..5ef543b0 100644 --- a/docs/types/meterPlus.html +++ b/docs/types/meterPlus.html @@ -1 +1 @@ -meterPlus | node-switchbot

                                                                                                                                                                                                                                                                                        Type Alias meterPlus

                                                                                                                                                                                                                                                                                        meterPlus: device & {}
                                                                                                                                                                                                                                                                                        +meterPlus | node-switchbot
                                                                                                                                                                                                                                                                                        node-switchbot
                                                                                                                                                                                                                                                                                          Preparing search index...

                                                                                                                                                                                                                                                                                          Type Alias meterPlus

                                                                                                                                                                                                                                                                                          meterPlus: device
                                                                                                                                                                                                                                                                                          diff --git a/docs/types/meterPlusServiceData.html b/docs/types/meterPlusServiceData.html index a40acf36..4ddfe5bc 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
                                                                                                                                                                                                                                                                                          node-switchbot
                                                                                                                                                                                                                                                                                            Preparing search index...

                                                                                                                                                                                                                                                                                            Type Alias meterPlusServiceData

                                                                                                                                                                                                                                                                                            meterPlusServiceData: TemperatureServiceDataBase & {
                                                                                                                                                                                                                                                                                                model: MeterPlus;
                                                                                                                                                                                                                                                                                                modelFriendlyName: MeterPlus;
                                                                                                                                                                                                                                                                                                modelName: MeterPlus;
                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                            diff --git a/docs/types/meterPlusStatus.html b/docs/types/meterPlusStatus.html index d7c18539..01bba776 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
                                                                                                                                                                                                                                                                                            node-switchbot
                                                                                                                                                                                                                                                                                              Preparing search index...

                                                                                                                                                                                                                                                                                              Type Alias meterPlusStatus

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

                                                                                                                                                                                                                                                                                              Type Alias meterPlusWebhookContext

                                                                                                                                                                                                                                                                                              meterPlusWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                  battery: number;
                                                                                                                                                                                                                                                                                                  humidity: number;
                                                                                                                                                                                                                                                                                                  scale: "CELSIUS" | "FAHRENHEIT";
                                                                                                                                                                                                                                                                                                  temperature: number;
                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                              +meterPlusWebhookContext | node-switchbot
                                                                                                                                                                                                                                                                                              node-switchbot
                                                                                                                                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                                                                                                                                Type Alias meterPlusWebhookContext

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

                                                                                                                                                                                                                                                                                                Type Alias meterPro

                                                                                                                                                                                                                                                                                                meterPro: device & {}
                                                                                                                                                                                                                                                                                                +meterPro | node-switchbot
                                                                                                                                                                                                                                                                                                node-switchbot
                                                                                                                                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                                                                                                                                  Type Alias meterPro

                                                                                                                                                                                                                                                                                                  meterPro: device
                                                                                                                                                                                                                                                                                                  diff --git a/docs/types/meterProCO2ServiceData.html b/docs/types/meterProCO2ServiceData.html index 3cfafe10..358a9048 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;
                                                                                                                                                                                                                                                                                                      co2: number;
                                                                                                                                                                                                                                                                                                      fahrenheit: number;
                                                                                                                                                                                                                                                                                                      fahrenheit_mode: boolean;
                                                                                                                                                                                                                                                                                                      humidity: number;
                                                                                                                                                                                                                                                                                                      model: MeterProCO2;
                                                                                                                                                                                                                                                                                                      modelFriendlyName: MeterProCO2;
                                                                                                                                                                                                                                                                                                      modelName: MeterProCO2;
                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                  +meterProCO2ServiceData | node-switchbot
                                                                                                                                                                                                                                                                                                  node-switchbot
                                                                                                                                                                                                                                                                                                    Preparing search index...

                                                                                                                                                                                                                                                                                                    Type Alias meterProCO2ServiceData

                                                                                                                                                                                                                                                                                                    meterProCO2ServiceData: TemperatureServiceDataBase & {
                                                                                                                                                                                                                                                                                                        co2: number;
                                                                                                                                                                                                                                                                                                        model: MeterProCO2;
                                                                                                                                                                                                                                                                                                        modelFriendlyName: MeterProCO2;
                                                                                                                                                                                                                                                                                                        modelName: MeterProCO2;
                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                    diff --git a/docs/types/meterProCO2Status.html b/docs/types/meterProCO2Status.html index c597e912..bb7df66c 100644 --- a/docs/types/meterProCO2Status.html +++ b/docs/types/meterProCO2Status.html @@ -1 +1 @@ -meterProCO2Status | node-switchbot

                                                                                                                                                                                                                                                                                                    Type Alias meterProCO2Status

                                                                                                                                                                                                                                                                                                    meterProCO2Status: deviceStatus & {
                                                                                                                                                                                                                                                                                                        battery: number;
                                                                                                                                                                                                                                                                                                        CO2: number;
                                                                                                                                                                                                                                                                                                        humidity: number;
                                                                                                                                                                                                                                                                                                        temperature: number;
                                                                                                                                                                                                                                                                                                        version: string;
                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                    +meterProCO2Status | node-switchbot
                                                                                                                                                                                                                                                                                                    node-switchbot
                                                                                                                                                                                                                                                                                                      Preparing search index...

                                                                                                                                                                                                                                                                                                      Type Alias meterProCO2Status

                                                                                                                                                                                                                                                                                                      meterProCO2Status: deviceStatus & {
                                                                                                                                                                                                                                                                                                          battery: number;
                                                                                                                                                                                                                                                                                                          CO2: number;
                                                                                                                                                                                                                                                                                                          humidity: number;
                                                                                                                                                                                                                                                                                                          temperature: number;
                                                                                                                                                                                                                                                                                                          version: string;
                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                      diff --git a/docs/types/meterProCO2WebhookContext.html b/docs/types/meterProCO2WebhookContext.html index 3bc38cae..e57ab934 100644 --- a/docs/types/meterProCO2WebhookContext.html +++ b/docs/types/meterProCO2WebhookContext.html @@ -1 +1 @@ -meterProCO2WebhookContext | node-switchbot

                                                                                                                                                                                                                                                                                                      Type Alias meterProCO2WebhookContext

                                                                                                                                                                                                                                                                                                      meterProCO2WebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                          battery: number;
                                                                                                                                                                                                                                                                                                          CO2: number;
                                                                                                                                                                                                                                                                                                          humidity: number;
                                                                                                                                                                                                                                                                                                          scale: "CELSIUS" | "FAHRENHEIT";
                                                                                                                                                                                                                                                                                                          temperature: number;
                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                      +meterProCO2WebhookContext | node-switchbot
                                                                                                                                                                                                                                                                                                      node-switchbot
                                                                                                                                                                                                                                                                                                        Preparing search index...

                                                                                                                                                                                                                                                                                                        Type Alias meterProCO2WebhookContext

                                                                                                                                                                                                                                                                                                        meterProCO2WebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                            battery: number;
                                                                                                                                                                                                                                                                                                            CO2: number;
                                                                                                                                                                                                                                                                                                            humidity: number;
                                                                                                                                                                                                                                                                                                            scale: "CELSIUS" | "FAHRENHEIT";
                                                                                                                                                                                                                                                                                                            temperature: number;
                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                        diff --git a/docs/types/meterProServiceData.html b/docs/types/meterProServiceData.html index ff05e568..28591a85 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
                                                                                                                                                                                                                                                                                                        node-switchbot
                                                                                                                                                                                                                                                                                                          Preparing search index...

                                                                                                                                                                                                                                                                                                          Type Alias meterProServiceData

                                                                                                                                                                                                                                                                                                          meterProServiceData: TemperatureServiceDataBase & {
                                                                                                                                                                                                                                                                                                              model: MeterPro;
                                                                                                                                                                                                                                                                                                              modelFriendlyName: MeterPro;
                                                                                                                                                                                                                                                                                                              modelName: MeterPro;
                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                          diff --git a/docs/types/meterProStatus.html b/docs/types/meterProStatus.html index b7e08b50..79bfbdc4 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;
                                                                                                                                                                                                                                                                                                              version: string;
                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                          +meterProStatus | node-switchbot
                                                                                                                                                                                                                                                                                                          node-switchbot
                                                                                                                                                                                                                                                                                                            Preparing search index...

                                                                                                                                                                                                                                                                                                            Type Alias meterProStatus

                                                                                                                                                                                                                                                                                                            meterProStatus: deviceStatus & {
                                                                                                                                                                                                                                                                                                                battery: number;
                                                                                                                                                                                                                                                                                                                humidity: number;
                                                                                                                                                                                                                                                                                                                temperature: number;
                                                                                                                                                                                                                                                                                                                version: string;
                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                            diff --git a/docs/types/meterProWebhookContext.html b/docs/types/meterProWebhookContext.html index 170bdbc7..0b2fdfd9 100644 --- a/docs/types/meterProWebhookContext.html +++ b/docs/types/meterProWebhookContext.html @@ -1 +1 @@ -meterProWebhookContext | node-switchbot

                                                                                                                                                                                                                                                                                                            Type Alias meterProWebhookContext

                                                                                                                                                                                                                                                                                                            meterProWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                                battery: number;
                                                                                                                                                                                                                                                                                                                humidity: number;
                                                                                                                                                                                                                                                                                                                scale: "CELSIUS" | "FAHRENHEIT";
                                                                                                                                                                                                                                                                                                                temperature: number;
                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                            +meterProWebhookContext | node-switchbot
                                                                                                                                                                                                                                                                                                            node-switchbot
                                                                                                                                                                                                                                                                                                              Preparing search index...

                                                                                                                                                                                                                                                                                                              Type Alias meterProWebhookContext

                                                                                                                                                                                                                                                                                                              meterProWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                                  battery: number;
                                                                                                                                                                                                                                                                                                                  humidity: number;
                                                                                                                                                                                                                                                                                                                  scale: "CELSIUS" | "FAHRENHEIT";
                                                                                                                                                                                                                                                                                                                  temperature: number;
                                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                                              diff --git a/docs/types/meterServiceData.html b/docs/types/meterServiceData.html index 16d6730e..f383a3df 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
                                                                                                                                                                                                                                                                                                              node-switchbot
                                                                                                                                                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                                                                                                                                                Type Alias meterServiceData

                                                                                                                                                                                                                                                                                                                meterServiceData: TemperatureServiceDataBase & {
                                                                                                                                                                                                                                                                                                                    model: Meter;
                                                                                                                                                                                                                                                                                                                    modelFriendlyName: Meter;
                                                                                                                                                                                                                                                                                                                    modelName: Meter;
                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                diff --git a/docs/types/meterStatus.html b/docs/types/meterStatus.html index 4979528f..f6053c09 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
                                                                                                                                                                                                                                                                                                                node-switchbot
                                                                                                                                                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                                                                                                                                                  Type Alias meterStatus

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

                                                                                                                                                                                                                                                                                                                  Type Alias meterWebhookContext

                                                                                                                                                                                                                                                                                                                  meterWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                                      battery: number;
                                                                                                                                                                                                                                                                                                                      humidity: number;
                                                                                                                                                                                                                                                                                                                      scale: "CELSIUS" | "FAHRENHEIT";
                                                                                                                                                                                                                                                                                                                      temperature: number;
                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                  +meterWebhookContext | node-switchbot
                                                                                                                                                                                                                                                                                                                  node-switchbot
                                                                                                                                                                                                                                                                                                                    Preparing search index...

                                                                                                                                                                                                                                                                                                                    Type Alias meterWebhookContext

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

                                                                                                                                                                                                                                                                                                                    Type Alias motionSensor

                                                                                                                                                                                                                                                                                                                    motionSensor: device & {}
                                                                                                                                                                                                                                                                                                                    +motionSensor | node-switchbot
                                                                                                                                                                                                                                                                                                                    node-switchbot
                                                                                                                                                                                                                                                                                                                      Preparing search index...

                                                                                                                                                                                                                                                                                                                      Type Alias motionSensor

                                                                                                                                                                                                                                                                                                                      motionSensor: device
                                                                                                                                                                                                                                                                                                                      diff --git a/docs/types/motionSensorServiceData.html b/docs/types/motionSensorServiceData.html index ef820690..78766285 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
                                                                                                                                                                                                                                                                                                                      node-switchbot
                                                                                                                                                                                                                                                                                                                        Preparing search index...

                                                                                                                                                                                                                                                                                                                        Type Alias motionSensorServiceData

                                                                                                                                                                                                                                                                                                                        motionSensorServiceData: BLEServiceData & {
                                                                                                                                                                                                                                                                                                                            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 9078cbdd..bef1fde0 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
                                                                                                                                                                                                                                                                                                                        node-switchbot
                                                                                                                                                                                                                                                                                                                          Preparing search index...

                                                                                                                                                                                                                                                                                                                          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 b08e2221..8bf82890 100644 --- a/docs/types/motionSensorWebhookContext.html +++ b/docs/types/motionSensorWebhookContext.html @@ -1 +1 @@ -motionSensorWebhookContext | node-switchbot

                                                                                                                                                                                                                                                                                                                          Type Alias motionSensorWebhookContext

                                                                                                                                                                                                                                                                                                                          motionSensorWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                                              battery: number;
                                                                                                                                                                                                                                                                                                                              detectionState: "NOT_DETECTED" | "DETECTED";
                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                          +motionSensorWebhookContext | node-switchbot
                                                                                                                                                                                                                                                                                                                          node-switchbot
                                                                                                                                                                                                                                                                                                                            Preparing search index...

                                                                                                                                                                                                                                                                                                                            Type Alias motionSensorWebhookContext

                                                                                                                                                                                                                                                                                                                            motionSensorWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                                                battery: number;
                                                                                                                                                                                                                                                                                                                                detectionState: "NOT_DETECTED" | "DETECTED";
                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                            diff --git a/docs/types/onadvertisement.html b/docs/types/onadvertisement.html index 1414376d..62fc098f 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

                                                                                                                                                                                                                                                                                                                            Type declaration

                                                                                                                                                                                                                                                                                                                              • (ad: ad): Promise<void> | void
                                                                                                                                                                                                                                                                                                                              • Parameters

                                                                                                                                                                                                                                                                                                                                Returns Promise<void> | void

                                                                                                                                                                                                                                                                                                                            +onadvertisement | node-switchbot
                                                                                                                                                                                                                                                                                                                            node-switchbot
                                                                                                                                                                                                                                                                                                                              Preparing search index...

                                                                                                                                                                                                                                                                                                                              Type Alias onadvertisement

                                                                                                                                                                                                                                                                                                                              onadvertisement: (ad: ad) => Promise<void> | void

                                                                                                                                                                                                                                                                                                                              Type Declaration

                                                                                                                                                                                                                                                                                                                                • (ad: ad): Promise<void> | void
                                                                                                                                                                                                                                                                                                                                • Parameters

                                                                                                                                                                                                                                                                                                                                  Returns Promise<void> | void

                                                                                                                                                                                                                                                                                                                              diff --git a/docs/types/ondiscover.html b/docs/types/ondiscover.html index fb212b01..ec5c3255 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

                                                                                                                                                                                                                                                                                                                              Type declaration

                                                                                                                                                                                                                                                                                                                              +ondiscover | node-switchbot
                                                                                                                                                                                                                                                                                                                              node-switchbot
                                                                                                                                                                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                                                                                                                                                                Type Alias ondiscover

                                                                                                                                                                                                                                                                                                                                ondiscover: (device: SwitchbotDevice) => Promise<void> | void

                                                                                                                                                                                                                                                                                                                                Type Declaration

                                                                                                                                                                                                                                                                                                                                diff --git a/docs/types/outdoorMeter.html b/docs/types/outdoorMeter.html index 889304a9..724a9c6c 100644 --- a/docs/types/outdoorMeter.html +++ b/docs/types/outdoorMeter.html @@ -1 +1 @@ -outdoorMeter | node-switchbot

                                                                                                                                                                                                                                                                                                                                Type Alias outdoorMeter

                                                                                                                                                                                                                                                                                                                                outdoorMeter: device & {}
                                                                                                                                                                                                                                                                                                                                +outdoorMeter | node-switchbot
                                                                                                                                                                                                                                                                                                                                node-switchbot
                                                                                                                                                                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                                                                                                                                                                  Type Alias outdoorMeter

                                                                                                                                                                                                                                                                                                                                  outdoorMeter: device
                                                                                                                                                                                                                                                                                                                                  diff --git a/docs/types/outdoorMeterServiceData.html b/docs/types/outdoorMeterServiceData.html index 46a36026..b5fbbb23 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
                                                                                                                                                                                                                                                                                                                                  node-switchbot
                                                                                                                                                                                                                                                                                                                                    Preparing search index...

                                                                                                                                                                                                                                                                                                                                    Type Alias outdoorMeterServiceData

                                                                                                                                                                                                                                                                                                                                    outdoorMeterServiceData: TemperatureServiceDataBase & {
                                                                                                                                                                                                                                                                                                                                        model: OutdoorMeter;
                                                                                                                                                                                                                                                                                                                                        modelFriendlyName: OutdoorMeter;
                                                                                                                                                                                                                                                                                                                                        modelName: OutdoorMeter;
                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                    diff --git a/docs/types/outdoorMeterStatus.html b/docs/types/outdoorMeterStatus.html index 4cd8eb08..44785d5a 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
                                                                                                                                                                                                                                                                                                                                    node-switchbot
                                                                                                                                                                                                                                                                                                                                      Preparing search index...

                                                                                                                                                                                                                                                                                                                                      Type Alias outdoorMeterStatus

                                                                                                                                                                                                                                                                                                                                      outdoorMeterStatus: deviceStatus & {
                                                                                                                                                                                                                                                                                                                                          battery: number;
                                                                                                                                                                                                                                                                                                                                          humidity: number;
                                                                                                                                                                                                                                                                                                                                          temperature: number;
                                                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                                                      diff --git a/docs/types/outdoorMeterWebhookContext.html b/docs/types/outdoorMeterWebhookContext.html index 5b4aaf23..6ef3a48b 100644 --- a/docs/types/outdoorMeterWebhookContext.html +++ b/docs/types/outdoorMeterWebhookContext.html @@ -1 +1 @@ -outdoorMeterWebhookContext | node-switchbot

                                                                                                                                                                                                                                                                                                                                      Type Alias outdoorMeterWebhookContext

                                                                                                                                                                                                                                                                                                                                      outdoorMeterWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                                                          battery: number;
                                                                                                                                                                                                                                                                                                                                          humidity: number;
                                                                                                                                                                                                                                                                                                                                          scale: "CELSIUS" | "FAHRENHEIT";
                                                                                                                                                                                                                                                                                                                                          temperature: number;
                                                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                                                      +outdoorMeterWebhookContext | node-switchbot
                                                                                                                                                                                                                                                                                                                                      node-switchbot
                                                                                                                                                                                                                                                                                                                                        Preparing search index...

                                                                                                                                                                                                                                                                                                                                        Type Alias outdoorMeterWebhookContext

                                                                                                                                                                                                                                                                                                                                        outdoorMeterWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                                                            battery: number;
                                                                                                                                                                                                                                                                                                                                            humidity: number;
                                                                                                                                                                                                                                                                                                                                            scale: "CELSIUS" | "FAHRENHEIT";
                                                                                                                                                                                                                                                                                                                                            temperature: number;
                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                        diff --git a/docs/types/panTiltCamWebhookContext.html b/docs/types/panTiltCamWebhookContext.html index bbfe7801..4b37c834 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
                                                                                                                                                                                                                                                                                                                                        node-switchbot
                                                                                                                                                                                                                                                                                                                                          Preparing search index...

                                                                                                                                                                                                                                                                                                                                          Type Alias panTiltCamWebhookContext

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

                                                                                                                                                                                                                                                                                                                                          Type Alias pantiltCam

                                                                                                                                                                                                                                                                                                                                          pantiltCam: device & {}
                                                                                                                                                                                                                                                                                                                                          +pantiltCam | node-switchbot
                                                                                                                                                                                                                                                                                                                                          node-switchbot
                                                                                                                                                                                                                                                                                                                                            Preparing search index...

                                                                                                                                                                                                                                                                                                                                            Type Alias pantiltCam

                                                                                                                                                                                                                                                                                                                                            pantiltCam: device
                                                                                                                                                                                                                                                                                                                                            diff --git a/docs/types/pantiltCam2k.html b/docs/types/pantiltCam2k.html index 16857032..e41f2050 100644 --- a/docs/types/pantiltCam2k.html +++ b/docs/types/pantiltCam2k.html @@ -1 +1 @@ -pantiltCam2k | node-switchbot

                                                                                                                                                                                                                                                                                                                                            Type Alias pantiltCam2k

                                                                                                                                                                                                                                                                                                                                            pantiltCam2k: device & {}
                                                                                                                                                                                                                                                                                                                                            +pantiltCam2k | node-switchbot
                                                                                                                                                                                                                                                                                                                                            node-switchbot
                                                                                                                                                                                                                                                                                                                                              Preparing search index...

                                                                                                                                                                                                                                                                                                                                              Type Alias pantiltCam2k

                                                                                                                                                                                                                                                                                                                                              pantiltCam2k: device
                                                                                                                                                                                                                                                                                                                                              diff --git a/docs/types/plug.html b/docs/types/plug.html index e5357782..fb509eab 100644 --- a/docs/types/plug.html +++ b/docs/types/plug.html @@ -1 +1 @@ -plug | node-switchbot

                                                                                                                                                                                                                                                                                                                                              Type Alias plug

                                                                                                                                                                                                                                                                                                                                              plug: device & {}
                                                                                                                                                                                                                                                                                                                                              +plug | node-switchbot
                                                                                                                                                                                                                                                                                                                                              node-switchbot
                                                                                                                                                                                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                                                                                                                                                                                Type Alias plug

                                                                                                                                                                                                                                                                                                                                                plug: device
                                                                                                                                                                                                                                                                                                                                                diff --git a/docs/types/plugMini.html b/docs/types/plugMini.html index 5a79faea..8d5d2920 100644 --- a/docs/types/plugMini.html +++ b/docs/types/plugMini.html @@ -1 +1 @@ -plugMini | node-switchbot

                                                                                                                                                                                                                                                                                                                                                Type Alias plugMini

                                                                                                                                                                                                                                                                                                                                                plugMini: device & {}
                                                                                                                                                                                                                                                                                                                                                +plugMini | node-switchbot
                                                                                                                                                                                                                                                                                                                                                node-switchbot
                                                                                                                                                                                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                                                                                                                                                                                  Type Alias plugMini

                                                                                                                                                                                                                                                                                                                                                  plugMini: device
                                                                                                                                                                                                                                                                                                                                                  diff --git a/docs/types/plugMiniJPServiceData.html b/docs/types/plugMiniJPServiceData.html index 077fff3b..0c8592ba 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
                                                                                                                                                                                                                                                                                                                                                  node-switchbot
                                                                                                                                                                                                                                                                                                                                                    Preparing search index...

                                                                                                                                                                                                                                                                                                                                                    Type Alias plugMiniJPServiceData

                                                                                                                                                                                                                                                                                                                                                    plugMiniJPServiceData: PlugMiniServiceDataBase & {
                                                                                                                                                                                                                                                                                                                                                        model: PlugMiniJP;
                                                                                                                                                                                                                                                                                                                                                        modelFriendlyName: PlugMini;
                                                                                                                                                                                                                                                                                                                                                        modelName: PlugMini;
                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                    diff --git a/docs/types/plugMiniJPWebhookContext.html b/docs/types/plugMiniJPWebhookContext.html index 9a01f3e1..e2962c8a 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
                                                                                                                                                                                                                                                                                                                                                    node-switchbot
                                                                                                                                                                                                                                                                                                                                                      Preparing search index...

                                                                                                                                                                                                                                                                                                                                                      Type Alias plugMiniJPWebhookContext

                                                                                                                                                                                                                                                                                                                                                      plugMiniJPWebhookContext: deviceWebhookContext & { powerState: "ON" | "OFF" }
                                                                                                                                                                                                                                                                                                                                                      diff --git a/docs/types/plugMiniStatus.html b/docs/types/plugMiniStatus.html index 113fa216..54897e4f 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
                                                                                                                                                                                                                                                                                                                                                      node-switchbot
                                                                                                                                                                                                                                                                                                                                                        Preparing search index...

                                                                                                                                                                                                                                                                                                                                                        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 1dcff841..94ed494b 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
                                                                                                                                                                                                                                                                                                                                                        node-switchbot
                                                                                                                                                                                                                                                                                                                                                          Preparing search index...

                                                                                                                                                                                                                                                                                                                                                          Type Alias plugMiniUSServiceData

                                                                                                                                                                                                                                                                                                                                                          plugMiniUSServiceData: PlugMiniServiceDataBase & {
                                                                                                                                                                                                                                                                                                                                                              model: PlugMiniUS;
                                                                                                                                                                                                                                                                                                                                                              modelFriendlyName: PlugMini;
                                                                                                                                                                                                                                                                                                                                                              modelName: PlugMini;
                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                          diff --git a/docs/types/plugMiniUSWebhookContext.html b/docs/types/plugMiniUSWebhookContext.html index 6dbc645b..dfd7b360 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
                                                                                                                                                                                                                                                                                                                                                          node-switchbot
                                                                                                                                                                                                                                                                                                                                                            Preparing search index...

                                                                                                                                                                                                                                                                                                                                                            Type Alias plugMiniUSWebhookContext

                                                                                                                                                                                                                                                                                                                                                            plugMiniUSWebhookContext: deviceWebhookContext & { powerState: "ON" | "OFF" }
                                                                                                                                                                                                                                                                                                                                                            diff --git a/docs/types/plugStatus.html b/docs/types/plugStatus.html index 7600a436..12ce3bfb 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
                                                                                                                                                                                                                                                                                                                                                            node-switchbot
                                                                                                                                                                                                                                                                                                                                                              Preparing search index...

                                                                                                                                                                                                                                                                                                                                                              Type Alias plugStatus

                                                                                                                                                                                                                                                                                                                                                              plugStatus: deviceStatus & { power: string; version: string }
                                                                                                                                                                                                                                                                                                                                                              diff --git a/docs/types/plugWebhookContext.html b/docs/types/plugWebhookContext.html index 9695b36f..7b5ef8fa 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
                                                                                                                                                                                                                                                                                                                                                              node-switchbot
                                                                                                                                                                                                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                Type Alias plugWebhookContext

                                                                                                                                                                                                                                                                                                                                                                plugWebhookContext: deviceWebhookContext & { powerState: "ON" | "OFF" }
                                                                                                                                                                                                                                                                                                                                                                diff --git a/docs/types/relaySwitch1Context.html b/docs/types/relaySwitch1Context.html index 169890fb..ce882a67 100644 --- a/docs/types/relaySwitch1Context.html +++ b/docs/types/relaySwitch1Context.html @@ -1 +1 @@ -relaySwitch1Context | node-switchbot

                                                                                                                                                                                                                                                                                                                                                                Type Alias relaySwitch1Context

                                                                                                                                                                                                                                                                                                                                                                relaySwitch1Context: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                                                                                    online: boolean;
                                                                                                                                                                                                                                                                                                                                                                    overTemperature: boolean;
                                                                                                                                                                                                                                                                                                                                                                    switchStatus: 0 | 1;
                                                                                                                                                                                                                                                                                                                                                                    version: string;
                                                                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                                                                +relaySwitch1Context | node-switchbot
                                                                                                                                                                                                                                                                                                                                                                node-switchbot
                                                                                                                                                                                                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                  Type Alias relaySwitch1Context

                                                                                                                                                                                                                                                                                                                                                                  relaySwitch1Context: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                                                                                      online: boolean;
                                                                                                                                                                                                                                                                                                                                                                      overTemperature: boolean;
                                                                                                                                                                                                                                                                                                                                                                      switchStatus: 0 | 1;
                                                                                                                                                                                                                                                                                                                                                                      version: string;
                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                  diff --git a/docs/types/relaySwitch1PMContext.html b/docs/types/relaySwitch1PMContext.html index 053b5c96..388fb073 100644 --- a/docs/types/relaySwitch1PMContext.html +++ b/docs/types/relaySwitch1PMContext.html @@ -1 +1 @@ -relaySwitch1PMContext | node-switchbot

                                                                                                                                                                                                                                                                                                                                                                  Type Alias relaySwitch1PMContext

                                                                                                                                                                                                                                                                                                                                                                  relaySwitch1PMContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                                                                                      online: boolean;
                                                                                                                                                                                                                                                                                                                                                                      overload: boolean;
                                                                                                                                                                                                                                                                                                                                                                      overTemperature: boolean;
                                                                                                                                                                                                                                                                                                                                                                      switchStatus: 0 | 1;
                                                                                                                                                                                                                                                                                                                                                                      version: string;
                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                  +relaySwitch1PMContext | node-switchbot
                                                                                                                                                                                                                                                                                                                                                                  node-switchbot
                                                                                                                                                                                                                                                                                                                                                                    Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                    Type Alias relaySwitch1PMContext

                                                                                                                                                                                                                                                                                                                                                                    relaySwitch1PMContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                                                                                        online: boolean;
                                                                                                                                                                                                                                                                                                                                                                        overload: boolean;
                                                                                                                                                                                                                                                                                                                                                                        overTemperature: boolean;
                                                                                                                                                                                                                                                                                                                                                                        switchStatus: 0 | 1;
                                                                                                                                                                                                                                                                                                                                                                        version: string;
                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                    diff --git a/docs/types/relaySwitch1PMServiceData.html b/docs/types/relaySwitch1PMServiceData.html index 902a2d8b..6f2aaa25 100644 --- a/docs/types/relaySwitch1PMServiceData.html +++ b/docs/types/relaySwitch1PMServiceData.html @@ -1 +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;
                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                    +relaySwitch1PMServiceData | node-switchbot
                                                                                                                                                                                                                                                                                                                                                                    node-switchbot
                                                                                                                                                                                                                                                                                                                                                                      Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                      Type Alias relaySwitch1PMServiceData

                                                                                                                                                                                                                                                                                                                                                                      relaySwitch1PMServiceData: BLEServiceData & {
                                                                                                                                                                                                                                                                                                                                                                          current: number;
                                                                                                                                                                                                                                                                                                                                                                          mode: boolean;
                                                                                                                                                                                                                                                                                                                                                                          model: RelaySwitch1PM;
                                                                                                                                                                                                                                                                                                                                                                          modelFriendlyName: RelaySwitch1PM;
                                                                                                                                                                                                                                                                                                                                                                          modelName: RelaySwitch1PM;
                                                                                                                                                                                                                                                                                                                                                                          power: number;
                                                                                                                                                                                                                                                                                                                                                                          sequence_number: number;
                                                                                                                                                                                                                                                                                                                                                                          state: boolean;
                                                                                                                                                                                                                                                                                                                                                                          voltage: number;
                                                                                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                                                                                      diff --git a/docs/types/relaySwitch1PMStatus.html b/docs/types/relaySwitch1PMStatus.html index d32e7bc7..bb0e94e9 100644 --- a/docs/types/relaySwitch1PMStatus.html +++ b/docs/types/relaySwitch1PMStatus.html @@ -1 +1 @@ -relaySwitch1PMStatus | node-switchbot

                                                                                                                                                                                                                                                                                                                                                                      Type Alias relaySwitch1PMStatus

                                                                                                                                                                                                                                                                                                                                                                      relaySwitch1PMStatus: deviceStatus & {
                                                                                                                                                                                                                                                                                                                                                                          electricCurrent: number;
                                                                                                                                                                                                                                                                                                                                                                          power: number;
                                                                                                                                                                                                                                                                                                                                                                          switchStatus: 0 | 1;
                                                                                                                                                                                                                                                                                                                                                                          usedElectricity: number;
                                                                                                                                                                                                                                                                                                                                                                          version: string;
                                                                                                                                                                                                                                                                                                                                                                          voltage: number;
                                                                                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                                                                                      +relaySwitch1PMStatus | node-switchbot
                                                                                                                                                                                                                                                                                                                                                                      node-switchbot
                                                                                                                                                                                                                                                                                                                                                                        Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                        Type Alias relaySwitch1PMStatus

                                                                                                                                                                                                                                                                                                                                                                        relaySwitch1PMStatus: deviceStatus & {
                                                                                                                                                                                                                                                                                                                                                                            electricCurrent: number;
                                                                                                                                                                                                                                                                                                                                                                            power: number;
                                                                                                                                                                                                                                                                                                                                                                            switchStatus: 0 | 1;
                                                                                                                                                                                                                                                                                                                                                                            usedElectricity: number;
                                                                                                                                                                                                                                                                                                                                                                            version: string;
                                                                                                                                                                                                                                                                                                                                                                            voltage: number;
                                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                                        diff --git a/docs/types/relaySwitch1ServiceData.html b/docs/types/relaySwitch1ServiceData.html index 56724c8d..6e21ec43 100644 --- a/docs/types/relaySwitch1ServiceData.html +++ b/docs/types/relaySwitch1ServiceData.html @@ -1 +1 @@ -relaySwitch1ServiceData | node-switchbot

                                                                                                                                                                                                                                                                                                                                                                        Type Alias relaySwitch1ServiceData

                                                                                                                                                                                                                                                                                                                                                                        relaySwitch1ServiceData: serviceData & {
                                                                                                                                                                                                                                                                                                                                                                            mode: boolean;
                                                                                                                                                                                                                                                                                                                                                                            model: RelaySwitch1;
                                                                                                                                                                                                                                                                                                                                                                            modelFriendlyName: RelaySwitch1;
                                                                                                                                                                                                                                                                                                                                                                            modelName: RelaySwitch1;
                                                                                                                                                                                                                                                                                                                                                                            sequence_number: number;
                                                                                                                                                                                                                                                                                                                                                                            state: boolean;
                                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                                        +relaySwitch1ServiceData | node-switchbot
                                                                                                                                                                                                                                                                                                                                                                        node-switchbot
                                                                                                                                                                                                                                                                                                                                                                          Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                          Type Alias relaySwitch1ServiceData

                                                                                                                                                                                                                                                                                                                                                                          relaySwitch1ServiceData: BLEServiceData & {
                                                                                                                                                                                                                                                                                                                                                                              mode: boolean;
                                                                                                                                                                                                                                                                                                                                                                              model: RelaySwitch1;
                                                                                                                                                                                                                                                                                                                                                                              modelFriendlyName: RelaySwitch1;
                                                                                                                                                                                                                                                                                                                                                                              modelName: RelaySwitch1;
                                                                                                                                                                                                                                                                                                                                                                              sequence_number: number;
                                                                                                                                                                                                                                                                                                                                                                              state: boolean;
                                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                                          diff --git a/docs/types/relaySwitch1Status.html b/docs/types/relaySwitch1Status.html index 6ae32679..e93fd7f9 100644 --- a/docs/types/relaySwitch1Status.html +++ b/docs/types/relaySwitch1Status.html @@ -1 +1 @@ -relaySwitch1Status | node-switchbot

                                                                                                                                                                                                                                                                                                                                                                          Type Alias relaySwitch1Status

                                                                                                                                                                                                                                                                                                                                                                          relaySwitch1Status: deviceStatus & { switchStatus: 0 | 1; version: string }
                                                                                                                                                                                                                                                                                                                                                                          +relaySwitch1Status | node-switchbot
                                                                                                                                                                                                                                                                                                                                                                          node-switchbot
                                                                                                                                                                                                                                                                                                                                                                            Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                            Type Alias relaySwitch1Status

                                                                                                                                                                                                                                                                                                                                                                            relaySwitch1Status: deviceStatus & { switchStatus: 0 | 1; version: string }
                                                                                                                                                                                                                                                                                                                                                                            diff --git a/docs/types/remote.html b/docs/types/remote.html index aa0a23c3..3c9ecf47 100644 --- a/docs/types/remote.html +++ b/docs/types/remote.html @@ -1 +1 @@ -remote | node-switchbot

                                                                                                                                                                                                                                                                                                                                                                            Type Alias remote

                                                                                                                                                                                                                                                                                                                                                                            remote: device & {}
                                                                                                                                                                                                                                                                                                                                                                            +remote | node-switchbot
                                                                                                                                                                                                                                                                                                                                                                            node-switchbot
                                                                                                                                                                                                                                                                                                                                                                              Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                              Type Alias remote

                                                                                                                                                                                                                                                                                                                                                                              remote: device
                                                                                                                                                                                                                                                                                                                                                                              diff --git a/docs/types/remoteServiceData.html b/docs/types/remoteServiceData.html index 763f1e6c..b76ef595 100644 --- a/docs/types/remoteServiceData.html +++ b/docs/types/remoteServiceData.html @@ -1 +1 @@ -remoteServiceData | node-switchbot

                                                                                                                                                                                                                                                                                                                                                                              Type Alias remoteServiceData

                                                                                                                                                                                                                                                                                                                                                                              remoteServiceData: serviceData & {
                                                                                                                                                                                                                                                                                                                                                                                  battery: number;
                                                                                                                                                                                                                                                                                                                                                                                  model: Remote;
                                                                                                                                                                                                                                                                                                                                                                                  modelFriendlyName: Remote;
                                                                                                                                                                                                                                                                                                                                                                                  modelName: Remote;
                                                                                                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                                                                                                              +remoteServiceData | node-switchbot
                                                                                                                                                                                                                                                                                                                                                                              node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                Type Alias remoteServiceData

                                                                                                                                                                                                                                                                                                                                                                                remoteServiceData: BLEServiceData & {
                                                                                                                                                                                                                                                                                                                                                                                    battery: number;
                                                                                                                                                                                                                                                                                                                                                                                    model: Remote;
                                                                                                                                                                                                                                                                                                                                                                                    modelFriendlyName: Remote;
                                                                                                                                                                                                                                                                                                                                                                                    modelName: Remote;
                                                                                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                                                                                diff --git a/docs/types/robotVacuumCleanerS1.html b/docs/types/robotVacuumCleanerS1.html index b675965f..144ee60b 100644 --- a/docs/types/robotVacuumCleanerS1.html +++ b/docs/types/robotVacuumCleanerS1.html @@ -1 +1 @@ -robotVacuumCleanerS1 | node-switchbot

                                                                                                                                                                                                                                                                                                                                                                                Type Alias robotVacuumCleanerS1

                                                                                                                                                                                                                                                                                                                                                                                robotVacuumCleanerS1: device & {}
                                                                                                                                                                                                                                                                                                                                                                                +robotVacuumCleanerS1 | node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                  Type Alias robotVacuumCleanerS1

                                                                                                                                                                                                                                                                                                                                                                                  robotVacuumCleanerS1: device
                                                                                                                                                                                                                                                                                                                                                                                  diff --git a/docs/types/robotVacuumCleanerS1Plus.html b/docs/types/robotVacuumCleanerS1Plus.html index 9f70f978..d4cdcdec 100644 --- a/docs/types/robotVacuumCleanerS1Plus.html +++ b/docs/types/robotVacuumCleanerS1Plus.html @@ -1 +1 @@ -robotVacuumCleanerS1Plus | node-switchbot

                                                                                                                                                                                                                                                                                                                                                                                  Type Alias robotVacuumCleanerS1Plus

                                                                                                                                                                                                                                                                                                                                                                                  robotVacuumCleanerS1Plus: device & {}
                                                                                                                                                                                                                                                                                                                                                                                  +robotVacuumCleanerS1Plus | node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                  node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                    Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                    Type Alias robotVacuumCleanerS1Plus

                                                                                                                                                                                                                                                                                                                                                                                    robotVacuumCleanerS1Plus: device
                                                                                                                                                                                                                                                                                                                                                                                    diff --git a/docs/types/robotVacuumCleanerS1PlusStatus.html b/docs/types/robotVacuumCleanerS1PlusStatus.html index f4e599ce..e8684cfa 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
                                                                                                                                                                                                                                                                                                                                                                                    node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                      Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                      Type Alias robotVacuumCleanerS1PlusStatus

                                                                                                                                                                                                                                                                                                                                                                                      robotVacuumCleanerS1PlusStatus: deviceStatus & {
                                                                                                                                                                                                                                                                                                                                                                                          battery: number;
                                                                                                                                                                                                                                                                                                                                                                                          onlineStatus: string;
                                                                                                                                                                                                                                                                                                                                                                                          workingStatus: string;
                                                                                                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                                                                                                      diff --git a/docs/types/robotVacuumCleanerS1PlusWebhookContext.html b/docs/types/robotVacuumCleanerS1PlusWebhookContext.html index 3c71e558..44be7bda 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
                                                                                                                                                                                                                                                                                                                                                                                      node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                        Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                        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 1c365f5d..63038340 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
                                                                                                                                                                                                                                                                                                                                                                                        node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                          Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                          Type Alias robotVacuumCleanerS1Status

                                                                                                                                                                                                                                                                                                                                                                                          robotVacuumCleanerS1Status: deviceStatus & {
                                                                                                                                                                                                                                                                                                                                                                                              battery: number;
                                                                                                                                                                                                                                                                                                                                                                                              onlineStatus: string;
                                                                                                                                                                                                                                                                                                                                                                                              workingStatus: string;
                                                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                                                          diff --git a/docs/types/robotVacuumCleanerS1WebhookContext.html b/docs/types/robotVacuumCleanerS1WebhookContext.html index 4db18452..b0e1e438 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
                                                                                                                                                                                                                                                                                                                                                                                          node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                            Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                            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 4edf2069..b902f186 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
                                                                                                                                                                                                                                                                                                                                                                                            node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                              Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                              Type Alias robotVacuumCleanerServiceData

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

                                                                                                                                                                                                                                                                                                                                                                                              Type Alias stripLight

                                                                                                                                                                                                                                                                                                                                                                                              stripLight: device & {}
                                                                                                                                                                                                                                                                                                                                                                                              +stripLight | node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                              node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                                Type Alias stripLight

                                                                                                                                                                                                                                                                                                                                                                                                stripLight: device
                                                                                                                                                                                                                                                                                                                                                                                                diff --git a/docs/types/stripLightServiceData.html b/docs/types/stripLightServiceData.html index 4d27921c..6249d73d 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
                                                                                                                                                                                                                                                                                                                                                                                                node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                                  Type Alias stripLightServiceData

                                                                                                                                                                                                                                                                                                                                                                                                  stripLightServiceData: ColorLightServiceDataBase & {
                                                                                                                                                                                                                                                                                                                                                                                                      model: StripLight;
                                                                                                                                                                                                                                                                                                                                                                                                      modelFriendlyName: StripLight;
                                                                                                                                                                                                                                                                                                                                                                                                      modelName: StripLight;
                                                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                                                  diff --git a/docs/types/stripLightStatus.html b/docs/types/stripLightStatus.html index 44c4ae7f..d272f3ee 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
                                                                                                                                                                                                                                                                                                                                                                                                  node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                                    Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                                    Type Alias stripLightStatus

                                                                                                                                                                                                                                                                                                                                                                                                    stripLightStatus: deviceStatus & {
                                                                                                                                                                                                                                                                                                                                                                                                        brightness: number;
                                                                                                                                                                                                                                                                                                                                                                                                        color: string;
                                                                                                                                                                                                                                                                                                                                                                                                        power: string;
                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                    diff --git a/docs/types/stripLightWebhookContext.html b/docs/types/stripLightWebhookContext.html index 4d7602e9..3940f056 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
                                                                                                                                                                                                                                                                                                                                                                                                    node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                                      Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                                      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 70189b39..6159059b 100644 --- a/docs/types/waterLeakDetector.html +++ b/docs/types/waterLeakDetector.html @@ -1 +1 @@ -waterLeakDetector | node-switchbot

                                                                                                                                                                                                                                                                                                                                                                                                      Type Alias waterLeakDetector

                                                                                                                                                                                                                                                                                                                                                                                                      waterLeakDetector: device & {}
                                                                                                                                                                                                                                                                                                                                                                                                      +waterLeakDetector | node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                                      node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                                        Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                                        Type Alias waterLeakDetector

                                                                                                                                                                                                                                                                                                                                                                                                        waterLeakDetector: device
                                                                                                                                                                                                                                                                                                                                                                                                        diff --git a/docs/types/waterLeakDetectorServiceData.html b/docs/types/waterLeakDetectorServiceData.html index 023b4b9b..8f6cf3bd 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
                                                                                                                                                                                                                                                                                                                                                                                                        node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                                          Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                                          Type Alias waterLeakDetectorServiceData

                                                                                                                                                                                                                                                                                                                                                                                                          waterLeakDetectorServiceData: BLEServiceData & {
                                                                                                                                                                                                                                                                                                                                                                                                              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 aa7002d9..bdaed7c5 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
                                                                                                                                                                                                                                                                                                                                                                                                          node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                                            Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                                            Type Alias waterLeakDetectorStatus

                                                                                                                                                                                                                                                                                                                                                                                                            waterLeakDetectorStatus: deviceStatus & { battery: number; status: 0 | 1 }
                                                                                                                                                                                                                                                                                                                                                                                                            diff --git a/docs/types/waterLeakDetectorWebhookContext.html b/docs/types/waterLeakDetectorWebhookContext.html index 796ccbb2..e794c8de 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
                                                                                                                                                                                                                                                                                                                                                                                                            node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                                              Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                                              Type Alias waterLeakDetectorWebhookContext

                                                                                                                                                                                                                                                                                                                                                                                                              waterLeakDetectorWebhookContext: deviceWebhookContext & {
                                                                                                                                                                                                                                                                                                                                                                                                                  battery: number;
                                                                                                                                                                                                                                                                                                                                                                                                                  detectionState: 0 | 1;
                                                                                                                                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                                                                                                                                              diff --git a/docs/variables/parameterChecker.html b/docs/variables/parameterChecker.html new file mode 100644 index 00000000..d1cd65a8 --- /dev/null +++ b/docs/variables/parameterChecker.html @@ -0,0 +1 @@ +parameterChecker | node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                                              node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                                                Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                                                Variable parameterCheckerConst

                                                                                                                                                                                                                                                                                                                                                                                                                parameterChecker: ParameterChecker = ...
                                                                                                                                                                                                                                                                                                                                                                                                                diff --git a/docs/variables/urls.html b/docs/variables/urls.html new file mode 100644 index 00000000..e5fde9b9 --- /dev/null +++ b/docs/variables/urls.html @@ -0,0 +1 @@ +urls | node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                                                node-switchbot
                                                                                                                                                                                                                                                                                                                                                                                                                  Preparing search index...

                                                                                                                                                                                                                                                                                                                                                                                                                  Variable urlsConst

                                                                                                                                                                                                                                                                                                                                                                                                                  urls: {
                                                                                                                                                                                                                                                                                                                                                                                                                      get baseURL(): string;
                                                                                                                                                                                                                                                                                                                                                                                                                      get deleteWebhook(): string;
                                                                                                                                                                                                                                                                                                                                                                                                                      get devicesURL(): string;
                                                                                                                                                                                                                                                                                                                                                                                                                      get queryWebhook(): string;
                                                                                                                                                                                                                                                                                                                                                                                                                      get setupWebhook(): string;
                                                                                                                                                                                                                                                                                                                                                                                                                      get updateWebhook(): string;
                                                                                                                                                                                                                                                                                                                                                                                                                  } = ...

                                                                                                                                                                                                                                                                                                                                                                                                                  Type Declaration

                                                                                                                                                                                                                                                                                                                                                                                                                  • get baseURL(): string
                                                                                                                                                                                                                                                                                                                                                                                                                  • get deleteWebhook(): string
                                                                                                                                                                                                                                                                                                                                                                                                                  • get devicesURL(): string
                                                                                                                                                                                                                                                                                                                                                                                                                  • get queryWebhook(): string
                                                                                                                                                                                                                                                                                                                                                                                                                  • get setupWebhook(): string
                                                                                                                                                                                                                                                                                                                                                                                                                  • get updateWebhook(): string
                                                                                                                                                                                                                                                                                                                                                                                                                  diff --git a/eslint.config.js b/eslint.config.js index 6fd1113f..87e504d9 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -10,8 +10,6 @@ export default antfu( }, rules: { 'curly': ['error', 'multi-line'], - 'import/extensions': ['error', 'ignorePackages'], - 'import/order': 0, 'jsdoc/check-alignment': 'error', 'jsdoc/check-line-alignment': 'error', 'perfectionist/sort-exports': 'error', diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 04cb13c7..00000000 --- a/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -export const preset = 'ts-jest'; -export const testEnvironment = 'node'; -export const testMatch = ['**/?(*.)+(spec|test).[jt]s?(x)']; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 67701e32..b0243257 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,42 +1,44 @@ { "name": "node-switchbot", - "version": "3.5.1", + "version": "3.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "node-switchbot", - "version": "3.5.1", + "version": "3.6.0", "license": "MIT", "dependencies": { - "@stoprocent/noble": "^1.19.1", + "@stoprocent/noble": "^2.3.5", "async-mutex": "^0.5.0", - "undici": "7.4.0" + "undici": "^7.15.0" }, "devDependencies": { - "@antfu/eslint-config": "^4.4.0", + "@antfu/eslint-config": "^5.2.1", "@types/aes-js": "^3.1.4", "@types/debug": "^4.1.12", "@types/fs-extra": "^11.0.4", "@types/mdast": "^4.0.4", - "@types/node": "^22.13.9", - "@types/semver": "^7.5.8", + "@types/node": "^24.3.0", + "@types/semver": "^7.7.0", "@types/source-map-support": "^0.5.10", - "@vitest/coverage-v8": "^3.0.7", - "eslint": "^9.21.0", + "@vitest/coverage-v8": "^3.2.4", + "eslint": "^9.34.0", "eslint-plugin-format": "^1.0.1", - "nodemon": "^3.1.9", - "shx": "^0.3.4", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-import-x": "^4.16.1", + "nodemon": "^3.1.10", + "shx": "^0.4.0", "ts-node": "^10.9.2", - "typedoc": "^0.27.9", - "typescript": "^5.8.2", - "vitest": "^3.0.7" + "typedoc": "^0.28.11", + "typescript": "^5.9.2", + "vitest": "^3.2.4" }, "engines": { "node": "^20 || ^22 || ^24" }, "optionalDependencies": { - "@stoprocent/bluetooth-hci-socket": "^1.5.2" + "@stoprocent/bluetooth-hci-socket": "^2.2.3" } }, "node_modules/@ampproject/remapping": { @@ -54,46 +56,47 @@ } }, "node_modules/@antfu/eslint-config": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@antfu/eslint-config/-/eslint-config-4.4.0.tgz", - "integrity": "sha512-UqZ517Gc6fjjcjHz4e1cDsBX6juixDxIDOpPpn9h6qIcrzTBq3Hc2RfBcU3GYuLrhsmGanmEdtCd0tSg2gJ+cg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@antfu/eslint-config/-/eslint-config-5.2.1.tgz", + "integrity": "sha512-EG/5kwDci1PFKSwAPMEMHDA/VYJFn0TAqwXLdnmE7zuFcaug3EGih7UOWmapMfL59Hqq6jbomaUHN31aVnL8NA==", "dev": true, "license": "MIT", "dependencies": { - "@antfu/install-pkg": "^1.0.0", - "@clack/prompts": "^0.10.0", - "@eslint-community/eslint-plugin-eslint-comments": "^4.4.1", - "@eslint/markdown": "^6.2.2", - "@stylistic/eslint-plugin": "^4.1.0", - "@typescript-eslint/eslint-plugin": "^8.25.0", - "@typescript-eslint/parser": "^8.25.0", - "@vitest/eslint-plugin": "^1.1.36", - "ansis": "^3.17.0", + "@antfu/install-pkg": "^1.1.0", + "@clack/prompts": "^0.11.0", + "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0", + "@eslint/markdown": "^7.1.0", + "@stylistic/eslint-plugin": "^5.2.3", + "@typescript-eslint/eslint-plugin": "^8.39.0", + "@typescript-eslint/parser": "^8.39.0", + "@vitest/eslint-plugin": "^1.3.4", + "ansis": "^4.1.0", "cac": "^6.7.14", "eslint-config-flat-gitignore": "^2.1.0", - "eslint-flat-config-utils": "^2.0.1", + "eslint-flat-config-utils": "^2.1.1", "eslint-merge-processors": "^2.0.0", - "eslint-plugin-antfu": "^3.1.0", - "eslint-plugin-command": "^3.1.0", - "eslint-plugin-import-x": "^4.6.1", - "eslint-plugin-jsdoc": "^50.6.3", - "eslint-plugin-jsonc": "^2.19.1", - "eslint-plugin-n": "^17.16.1", + "eslint-plugin-antfu": "^3.1.1", + "eslint-plugin-command": "^3.3.1", + "eslint-plugin-import-lite": "^0.3.0", + "eslint-plugin-jsdoc": "^52.0.4", + "eslint-plugin-jsonc": "^2.20.1", + "eslint-plugin-n": "^17.21.3", "eslint-plugin-no-only-tests": "^3.3.0", - "eslint-plugin-perfectionist": "^4.9.0", - "eslint-plugin-regexp": "^2.7.0", + "eslint-plugin-perfectionist": "^4.15.0", + "eslint-plugin-pnpm": "^1.1.0", + "eslint-plugin-regexp": "^2.10.0", "eslint-plugin-toml": "^0.12.0", - "eslint-plugin-unicorn": "^57.0.0", + "eslint-plugin-unicorn": "^60.0.0", "eslint-plugin-unused-imports": "^4.1.4", - "eslint-plugin-vue": "^9.32.0", - "eslint-plugin-yml": "^1.17.0", + "eslint-plugin-vue": "^10.4.0", + "eslint-plugin-yml": "^1.18.0", "eslint-processor-vue-blocks": "^2.0.0", - "globals": "^16.0.0", + "globals": "^16.3.0", "jsonc-eslint-parser": "^2.4.0", - "local-pkg": "^1.1.0", + "local-pkg": "^1.1.1", "parse-gitignore": "^2.0.0", "toml-eslint-parser": "^0.10.0", - "vue-eslint-parser": "^9.4.3", + "vue-eslint-parser": "^10.2.0", "yaml-eslint-parser": "^1.3.0" }, "bin": { @@ -103,17 +106,20 @@ "url": "https://github.com/sponsors/antfu" }, "peerDependencies": { - "@eslint-react/eslint-plugin": "^1.19.0", + "@eslint-react/eslint-plugin": "^1.38.4", + "@next/eslint-plugin-next": "^15.4.0-canary.115", "@prettier/plugin-xml": "^3.4.1", "@unocss/eslint-plugin": ">=0.50.0", "astro-eslint-parser": "^1.0.2", "eslint": "^9.10.0", "eslint-plugin-astro": "^1.2.0", "eslint-plugin-format": ">=0.1.0", - "eslint-plugin-react-hooks": "^5.0.0", - "eslint-plugin-react-refresh": "^0.4.4", + "eslint-plugin-jsx-a11y": ">=6.10.2", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.19", "eslint-plugin-solid": "^0.14.3", "eslint-plugin-svelte": ">=2.35.1", + "eslint-plugin-vuejs-accessibility": "^2.4.1", "prettier-plugin-astro": "^0.14.0", "prettier-plugin-slidev": "^1.0.5", "svelte-eslint-parser": ">=0.37.0" @@ -122,6 +128,9 @@ "@eslint-react/eslint-plugin": { "optional": true }, + "@next/eslint-plugin-next": { + "optional": true + }, "@prettier/plugin-xml": { "optional": true }, @@ -137,6 +146,9 @@ "eslint-plugin-format": { "optional": true }, + "eslint-plugin-jsx-a11y": { + "optional": true + }, "eslint-plugin-react-hooks": { "optional": true }, @@ -149,6 +161,9 @@ "eslint-plugin-svelte": { "optional": true }, + "eslint-plugin-vuejs-accessibility": { + "optional": true + }, "prettier-plugin-astro": { "optional": true }, @@ -160,33 +175,62 @@ } } }, - "node_modules/@antfu/install-pkg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.0.0.tgz", - "integrity": "sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==", + "node_modules/@antfu/eslint-config/node_modules/eslint-plugin-unused-imports": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz", + "integrity": "sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==", "dev": true, "license": "MIT", - "dependencies": { - "package-manager-detector": "^0.2.8", - "tinyexec": "^0.3.2" + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", + "eslint": "^9.0.0 || ^8.0.0" }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } } }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "node_modules/@antfu/eslint-config/node_modules/eslint-plugin-vue": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.4.0.tgz", + "integrity": "sha512-K6tP0dW8FJVZLQxa2S7LcE1lLw3X8VvB3t887Q6CLrFVxHYBXGANbXvwNzYIu6Ughx1bSJ5BDT0YB3ybPT39lw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=6.9.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "vue-eslint-parser": "^10.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/parser": { + "optional": true + } + } + }, + "node_modules/@antfu/install-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "package-manager-detector": "^1.3.0", + "tinyexec": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, "node_modules/@babel/helper-string-parser": { @@ -200,9 +244,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "license": "MIT", "engines": { @@ -250,9 +294,9 @@ } }, "node_modules/@clack/core": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.4.1.tgz", - "integrity": "sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.5.0.tgz", + "integrity": "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==", "dev": true, "license": "MIT", "dependencies": { @@ -261,13 +305,13 @@ } }, "node_modules/@clack/prompts": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.10.0.tgz", - "integrity": "sha512-H3rCl6CwW1NdQt9rE3n373t7o5cthPv7yUoxF2ytZvyvlJv89C5RYMJu83Hed8ODgys5vpBU0GKxIRG83jd8NQ==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.11.0.tgz", + "integrity": "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==", "dev": true, "license": "MIT", "dependencies": { - "@clack/core": "0.4.1", + "@clack/core": "0.5.0", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } @@ -317,14 +361,47 @@ "dev": true, "license": "MIT" }, + "node_modules/@emnapi/core": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz", + "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", + "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz", + "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.50.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.50.0.tgz", - "integrity": "sha512-+zZymuVLH6zVwXPtCAtC+bDymxmEwEqDftdAK+f407IF1bnX49anIxvBhCA1AqUIfD6egj1jM1vUnSuijjNyYg==", + "version": "0.50.2", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.50.2.tgz", + "integrity": "sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==", "dev": true, "license": "MIT", "dependencies": { - "@types/eslint": "^9.6.1", "@types/estree": "^1.0.6", "@typescript-eslint/types": "^8.11.0", "comment-parser": "1.4.1", @@ -336,9 +413,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", - "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", "cpu": [ "ppc64" ], @@ -353,9 +430,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", - "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", "cpu": [ "arm" ], @@ -370,9 +447,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", - "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", "cpu": [ "arm64" ], @@ -387,9 +464,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", - "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", "cpu": [ "x64" ], @@ -404,9 +481,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", - "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", "cpu": [ "arm64" ], @@ -421,9 +498,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", - "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", "cpu": [ "x64" ], @@ -438,9 +515,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", - "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", "cpu": [ "arm64" ], @@ -455,9 +532,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", - "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", "cpu": [ "x64" ], @@ -472,9 +549,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", - "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", "cpu": [ "arm" ], @@ -489,9 +566,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", - "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", "cpu": [ "arm64" ], @@ -506,9 +583,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", - "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", "cpu": [ "ia32" ], @@ -523,9 +600,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", - "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", "cpu": [ "loong64" ], @@ -540,9 +617,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", - "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", "cpu": [ "mips64el" ], @@ -557,9 +634,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", - "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", "cpu": [ "ppc64" ], @@ -574,9 +651,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", - "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", "cpu": [ "riscv64" ], @@ -591,9 +668,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", - "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", "cpu": [ "s390x" ], @@ -608,9 +685,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", - "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", "cpu": [ "x64" ], @@ -625,9 +702,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", - "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", "cpu": [ "arm64" ], @@ -642,9 +719,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", - "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", "cpu": [ "x64" ], @@ -659,9 +736,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", - "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", "cpu": [ "arm64" ], @@ -676,9 +753,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", - "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", "cpu": [ "x64" ], @@ -692,10 +769,27 @@ "node": ">=18" } }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", - "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", "cpu": [ "x64" ], @@ -710,9 +804,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", - "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", "cpu": [ "arm64" ], @@ -727,9 +821,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", - "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", "cpu": [ "ia32" ], @@ -744,9 +838,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", - "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", "cpu": [ "x64" ], @@ -761,9 +855,9 @@ } }, "node_modules/@eslint-community/eslint-plugin-eslint-comments": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.4.1.tgz", - "integrity": "sha512-lb/Z/MzbTf7CaVYM9WCFNQZ4L1yi3ev2fsFPF99h31ljhSEyUoyEsKsNWiU+qD1glbYTDJdqgyaLKtyTkkqtuQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.5.0.tgz", + "integrity": "sha512-MAhuTKlr4y/CE3WYX26raZjy+I/kS2PLKSzvfmDCGrBLTFHOYwqROZdr4XwPgXwX3K9rjzMr4pSmUWGnzsUyMg==", "dev": true, "license": "MIT", "dependencies": { @@ -781,9 +875,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, "license": "MIT", "dependencies": { @@ -841,9 +935,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", - "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -856,9 +950,9 @@ } }, "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -879,10 +973,20 @@ "node": "*" } }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/core": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", - "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -893,9 +997,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz", - "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -917,9 +1021,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -954,26 +1058,35 @@ } }, "node_modules/@eslint/js": { - "version": "9.21.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz", - "integrity": "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==", + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.34.0.tgz", + "integrity": "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==", "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, "node_modules/@eslint/markdown": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-6.2.2.tgz", - "integrity": "sha512-U0/KgzI9BVUuHDQ9M2fuVgB0QZ1fSyzwm8jKmHr1dlsLHGHYzoeIA9yqLMdTbV3ivZfp6rTdt6zqre3TfNExUQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-7.1.0.tgz", + "integrity": "sha512-Y+X1B1j+/zupKDVJfkKc8uYMjQkGzfnd8lt7vK3y8x9Br6H5dBuhAfFrQ6ff7HAMm/1BwgecyEiRFkYCWPRxmA==", "dev": true, "license": "MIT", + "workspaces": [ + "examples/*" + ], "dependencies": { - "@eslint/core": "^0.10.0", - "@eslint/plugin-kit": "^0.2.5", + "@eslint/core": "^0.15.1", + "@eslint/plugin-kit": "^0.3.4", + "github-slugger": "^2.0.0", "mdast-util-from-markdown": "^2.0.2", - "mdast-util-gfm": "^3.0.0", + "mdast-util-frontmatter": "^2.0.1", + "mdast-util-gfm": "^3.1.0", + "micromark-extension-frontmatter": "^2.0.0", "micromark-extension-gfm": "^3.0.0" }, "engines": { @@ -991,42 +1104,31 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", - "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.12.0", + "@eslint/core": "^0.15.2", "levn": "^0.4.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", - "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/@gerrit0/mini-shiki": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-1.24.1.tgz", - "integrity": "sha512-PNP/Gjv3VqU7z7DjRgO3F9Ok5frTKqtpV+LJW1RzMcr2zpRk0ulhEWnbcNGXzPC7BZyWMIHrkfQX2GZRfxrn6Q==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.9.1.tgz", + "integrity": "sha512-quvtbDhNf528BkMHQQd8xGJMpmA5taDZuex/JDF8ETEjS2iypXzr1hnEUVh+lTUyffFJ0JCxysUsiuUoEGIz/Q==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/engine-oniguruma": "^1.24.0", - "@shikijs/types": "^1.24.0", - "@shikijs/vscode-textmate": "^9.3.0" + "@shikijs/engine-oniguruma": "^3.9.1", + "@shikijs/langs": "^3.9.1", + "@shikijs/themes": "^3.9.1", + "@shikijs/types": "^3.9.1", + "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/@humanfs/core": { @@ -1261,6 +1363,19 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1324,9 +1439,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.9.tgz", - "integrity": "sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", + "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", "cpu": [ "arm" ], @@ -1338,9 +1453,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.9.tgz", - "integrity": "sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", + "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", "cpu": [ "arm64" ], @@ -1352,9 +1467,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz", - "integrity": "sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", + "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", "cpu": [ "arm64" ], @@ -1366,9 +1481,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz", - "integrity": "sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", + "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", "cpu": [ "x64" ], @@ -1380,9 +1495,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.9.tgz", - "integrity": "sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", + "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", "cpu": [ "arm64" ], @@ -1394,9 +1509,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.9.tgz", - "integrity": "sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", + "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", "cpu": [ "x64" ], @@ -1408,9 +1523,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.9.tgz", - "integrity": "sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", + "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", "cpu": [ "arm" ], @@ -1422,9 +1537,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.9.tgz", - "integrity": "sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", + "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", "cpu": [ "arm" ], @@ -1436,9 +1551,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz", - "integrity": "sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", + "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", "cpu": [ "arm64" ], @@ -1450,9 +1565,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz", - "integrity": "sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", + "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", "cpu": [ "arm64" ], @@ -1464,9 +1579,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.9.tgz", - "integrity": "sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", + "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", "cpu": [ "loong64" ], @@ -1478,9 +1593,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.9.tgz", - "integrity": "sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", + "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", "cpu": [ "ppc64" ], @@ -1492,9 +1607,23 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.9.tgz", - "integrity": "sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", + "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", + "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", "cpu": [ "riscv64" ], @@ -1506,9 +1635,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.9.tgz", - "integrity": "sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", + "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", "cpu": [ "s390x" ], @@ -1520,9 +1649,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz", - "integrity": "sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", + "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", "cpu": [ "x64" ], @@ -1534,9 +1663,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz", - "integrity": "sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", + "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", "cpu": [ "x64" ], @@ -1548,9 +1677,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz", - "integrity": "sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", + "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", "cpu": [ "arm64" ], @@ -1562,9 +1691,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.9.tgz", - "integrity": "sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", + "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", "cpu": [ "ia32" ], @@ -1576,9 +1705,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz", - "integrity": "sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", + "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", "cpu": [ "x64" ], @@ -1589,6 +1718,13 @@ "win32" ] }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, "node_modules/@serialport/binding-mock": { "version": "10.2.2", "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-10.2.2.tgz", @@ -1880,38 +2016,58 @@ "optional": true }, "node_modules/@shikijs/engine-oniguruma": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.24.0.tgz", - "integrity": "sha512-Eua0qNOL73Y82lGA4GF5P+G2+VXX9XnuUxkiUuwcxQPH4wom+tE39kZpBFXfUuwNYxHSkrSxpB1p4kyRW0moSg==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.9.1.tgz", + "integrity": "sha512-WPlL/xqviwS3te4unSGGGfflKsuHLMI6tPdNYvgz/IygcBT6UiwDFSzjBKyebwi5GGSlXsjjdoJLIBnAplmEZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.9.1", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.9.1.tgz", + "integrity": "sha512-Vyy2Yv9PP3Veh3VSsIvNncOR+O93wFsNYgN2B6cCCJlS7H9SKFYc55edsqernsg8WT/zam1cfB6llJsQWLnVhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.9.1" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.9.1.tgz", + "integrity": "sha512-zAykkGECNICCMXpKeVvq04yqwaSuAIvrf8MjsU5bzskfg4XreU+O0B5wdNCYRixoB9snd3YlZ373WV5E/g5T9A==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "1.24.0", - "@shikijs/vscode-textmate": "^9.3.0" + "@shikijs/types": "3.9.1" } }, "node_modules/@shikijs/types": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.24.0.tgz", - "integrity": "sha512-aptbEuq1Pk88DMlCe+FzXNnBZ17LCiLIGWAeCWhoFDzia5Q5Krx3DgnULLiouSdd6+LUM39XwXGppqYE0Ghtug==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.9.1.tgz", + "integrity": "sha512-rqM3T7a0iM1oPKz9iaH/cVgNX9Vz1HERcUcXJ94/fulgVdwqfnhXzGxO4bLrAnh/o5CPLy3IcYedogfV+Ns0Qg==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/vscode-textmate": "^9.3.0", + "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "node_modules/@shikijs/vscode-textmate": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.0.tgz", - "integrity": "sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", "dev": true, "license": "MIT" }, "node_modules/@stoprocent/bluetooth-hci-socket": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@stoprocent/bluetooth-hci-socket/-/bluetooth-hci-socket-1.5.2.tgz", - "integrity": "sha512-O1xOpI5Xf5/VzGlf2Gm9sxrERIKXH0b9h/3BY26xPOAbOk7u6sC+m15cYyUc4GJmcL7UElSSF3QHw+qzvtvQSA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@stoprocent/bluetooth-hci-socket/-/bluetooth-hci-socket-2.2.3.tgz", + "integrity": "sha512-aQmCkEaybqH7B1K6k2oJoZTf03g3PzmZFfi9+NHDiNVPi2Mbet4Mf86gVNEnctaG5aS9743zEMxSunWOzpt3MQ==", "hasInstallScript": true, "license": "MIT", "optional": true, @@ -1925,8 +2081,8 @@ "dependencies": { "async": "^3.2.6", "debug": "^4.3.7", - "node-addon-api": "^8.1.0", - "node-gyp-build": "^4.8.1", + "node-addon-api": "^8.3.1", + "node-gyp-build": "^4.8.4", "patch-package": "^8.0.0", "serialport": "^12.0.0" }, @@ -1935,14 +2091,13 @@ } }, "node_modules/@stoprocent/noble": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@stoprocent/noble/-/noble-1.19.1.tgz", - "integrity": "sha512-hgtb7WC1na1HSoJ51IVJZEq8f0cnlI4M+F5tjPcadQV06NPV0V8UoUM57pRZOpYn54qOPccOBc2E+IrpJOn2gQ==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@stoprocent/noble/-/noble-2.3.5.tgz", + "integrity": "sha512-zV2MPYskNwGKx8i62OtdkHKjThhaPHnPvynxHrUAzco4qX4p69nhW7fsGXaUPJN3x9MsGJFk96Vvzmn3EcwR5A==", "hasInstallScript": true, "license": "MIT", "dependencies": { "debug": "^4.3.7", - "napi-thread-safe-callback": "^0.0.6", "node-addon-api": "^8.1.0", "node-gyp-build": "^4.8.1" }, @@ -1950,21 +2105,22 @@ "node": ">=14" }, "optionalDependencies": { - "@stoprocent/bluetooth-hci-socket": "^1.5.2" + "@stoprocent/bluetooth-hci-socket": "^2.2.3" } }, "node_modules/@stylistic/eslint-plugin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-4.2.0.tgz", - "integrity": "sha512-8hXezgz7jexGHdo5WN6JBEIPHCSFyyU4vgbxevu4YLVS5vl+sxqAAGyXSzfNDyR6xMNSH5H1x67nsXcYMOHtZA==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.2.3.tgz", + "integrity": "sha512-oY7GVkJGVMI5benlBDCaRrSC1qPasafyv5dOBLLv5MTilMGnErKhO6ziEfodDDIZbo5QxPUNW360VudJOFODMw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^8.23.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/types": "^8.38.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", "estraverse": "^5.3.0", - "picomatch": "^4.0.2" + "picomatch": "^4.0.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2001,6 +2157,17 @@ "dev": true, "license": "MIT" }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", + "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/aes-js": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/aes-js/-/aes-js-3.1.4.tgz", @@ -2008,6 +2175,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/chai": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*" + } + }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", @@ -2018,28 +2195,17 @@ "@types/ms": "*" } }, - "node_modules/@types/doctrine": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.9.tgz", - "integrity": "sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==", + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true, "license": "MIT" }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, @@ -2071,6 +2237,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/jsonfile": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", @@ -2099,26 +2272,19 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.13.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", - "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", + "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~7.10.0" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", "dev": true, "license": "MIT" }, @@ -2147,21 +2313,21 @@ "optional": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.0.tgz", - "integrity": "sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.41.0.tgz", + "integrity": "sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.26.0", - "@typescript-eslint/type-utils": "8.26.0", - "@typescript-eslint/utils": "8.26.0", - "@typescript-eslint/visitor-keys": "8.26.0", + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/type-utils": "8.41.0", + "@typescript-eslint/utils": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^7.0.0", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2171,22 +2337,32 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "@typescript-eslint/parser": "^8.41.0", "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.0.tgz", - "integrity": "sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.41.0.tgz", + "integrity": "sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.26.0", - "@typescript-eslint/types": "8.26.0", - "@typescript-eslint/typescript-estree": "8.26.0", - "@typescript-eslint/visitor-keys": "8.26.0", + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "debug": "^4.3.4" }, "engines": { @@ -2198,38 +2374,78 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.41.0.tgz", + "integrity": "sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.41.0", + "@typescript-eslint/types": "^8.41.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz", - "integrity": "sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.41.0.tgz", + "integrity": "sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.26.0", - "@typescript-eslint/visitor-keys": "8.26.0" + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz", + "integrity": "sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==", + "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.0.tgz", - "integrity": "sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.41.0.tgz", + "integrity": "sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.26.0", - "@typescript-eslint/utils": "8.26.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/utils": "8.41.0", "debug": "^4.3.4", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2240,13 +2456,13 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.0.tgz", - "integrity": "sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.41.0.tgz", + "integrity": "sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==", "dev": true, "license": "MIT", "engines": { @@ -2258,20 +2474,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz", - "integrity": "sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.41.0.tgz", + "integrity": "sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.26.0", - "@typescript-eslint/visitor-keys": "8.26.0", + "@typescript-eslint/project-service": "8.41.0", + "@typescript-eslint/tsconfig-utils": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2281,20 +2499,20 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.0.tgz", - "integrity": "sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.41.0.tgz", + "integrity": "sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.26.0", - "@typescript-eslint/types": "8.26.0", - "@typescript-eslint/typescript-estree": "8.26.0" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2305,18 +2523,18 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz", - "integrity": "sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.41.0.tgz", + "integrity": "sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.26.0", - "eslint-visitor-keys": "^4.2.0" + "@typescript-eslint/types": "8.41.0", + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2326,47 +2544,319 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@vitest/coverage-v8": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.0.7.tgz", - "integrity": "sha512-Av8WgBJLTrfLOer0uy3CxjlVuWK4CzcLBndW1Nm2vI+3hZ2ozHututkfc7Blu1u6waeQ7J8gzPK/AsBRnWA5mQ==", + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@bcoe/v8-coverage": "^1.0.2", - "debug": "^4.4.0", - "istanbul-lib-coverage": "^3.2.2", - "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^5.0.6", - "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.17", - "magicast": "^0.3.5", - "std-env": "^3.8.0", - "test-exclude": "^7.0.1", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@vitest/browser": "3.0.7", - "vitest": "3.0.7" - }, - "peerDependenciesMeta": { - "@vitest/browser": { - "optional": true - } - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@vitest/eslint-plugin": { - "version": "1.1.36", - "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.1.36.tgz", - "integrity": "sha512-IjBV/fcL9NJRxGw221ieaDsqKqj8qUo7rvSupDxMjTXyhsCusHC6M+jFUNqBp4PCkYFcf5bjrKxeZoCEWoPxig==", - "dev": true, - "license": "MIT", + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vitest/coverage-v8": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.4.tgz", + "integrity": "sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^1.0.2", + "ast-v8-to-istanbul": "^0.3.3", + "debug": "^4.4.1", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.17", + "magicast": "^0.3.5", + "std-env": "^3.9.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "3.2.4", + "vitest": "3.2.4" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "node_modules/@vitest/eslint-plugin": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.3.4.tgz", + "integrity": "sha512-EOg8d0jn3BAiKnR55WkFxmxfWA3nmzrbIIuOXyTe6A72duryNgyU+bdBEauA97Aab3ho9kLmAwgPX63Ckj4QEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.24.1" + }, "peerDependencies": { - "@typescript-eslint/utils": "^8.24.0", "eslint": ">= 8.57.0", "typescript": ">= 5.0.0", "vitest": "*" @@ -2381,14 +2871,15 @@ } }, "node_modules/@vitest/expect": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.7.tgz", - "integrity": "sha512-QP25f+YJhzPfHrHfYHtvRn+uvkCFCqFtW9CktfBxmB+25QqWsx7VB2As6f4GmwllHLDhXNHvqedwhvMmSnNmjw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.7", - "@vitest/utils": "3.0.7", + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" }, @@ -2397,13 +2888,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.7.tgz", - "integrity": "sha512-qui+3BLz9Eonx4EAuR/i+QlCX6AUZ35taDQgwGkK/Tw6/WgwodSrjN1X2xf69IA/643ZX5zNKIn2svvtZDrs4w==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.7", + "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -2412,7 +2903,7 @@ }, "peerDependencies": { "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0" + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "peerDependenciesMeta": { "msw": { @@ -2434,9 +2925,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.7.tgz", - "integrity": "sha512-CiRY0BViD/V8uwuEzz9Yapyao+M9M008/9oMOSQydwbwb+CMokEq3XVaF3XK/VWaOK0Jm9z7ENhybg70Gtxsmg==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -2447,27 +2938,28 @@ } }, "node_modules/@vitest/runner": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.7.tgz", - "integrity": "sha512-WeEl38Z0S2ZcuRTeyYqaZtm4e26tq6ZFqh5y8YD9YxfWuu0OFiGFUbnxNynwLjNRHPsXyee2M9tV7YxOTPZl2g==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "3.0.7", - "pathe": "^2.0.3" + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.7.tgz", - "integrity": "sha512-eqTUryJWQN0Rtf5yqCGTQWsCFOQe4eNz5Twsu21xYEcnFJtMU5XvmG0vgebhdLlrHQTSq5p8vWHJIeJQV8ovsA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.7", + "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" }, @@ -2476,27 +2968,27 @@ } }, "node_modules/@vitest/spy": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.7.tgz", - "integrity": "sha512-4T4WcsibB0B6hrKdAZTM37ekuyFZt2cGbEGd2+L0P8ov15J1/HUsUaqkXEQPNAWr4BtPPe1gI+FYfMHhEKfR8w==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", "dev": true, "license": "MIT", "dependencies": { - "tinyspy": "^3.0.2" + "tinyspy": "^4.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.7.tgz", - "integrity": "sha512-xePVpCRfooFX3rANQjwoditoXgWb1MaFbzmGuPP59MK6i13mrnDw/yEIyJudLeW6/38mCNcwCiJIGmpDPibAIg==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.7", - "loupe": "^3.1.3", + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" }, "funding": { @@ -2577,9 +3069,9 @@ "optional": true }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -2656,9 +3148,9 @@ } }, "node_modules/ansis": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", - "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.1.0.tgz", + "integrity": "sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==", "dev": true, "license": "ISC", "engines": { @@ -2716,23 +3208,177 @@ "dev": true, "license": "Python-2.0" }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/ast-v8-to-istanbul": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.3.tgz", + "integrity": "sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "estree-walker": "^3.0.3", + "js-tokens": "^9.0.1" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "license": "MIT", "optional": true }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/async-mutex": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", @@ -2752,6 +3398,22 @@ "node": ">= 4.0.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2803,9 +3465,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", "dev": true, "funding": [ { @@ -2823,10 +3485,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -2836,9 +3498,9 @@ } }, "node_modules/builtin-modules": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-4.0.0.tgz", - "integrity": "sha512-p1n8zyCkt1BVrKNFymOHjcDSAl7oq/gUvfgULv2EblgpPVQlQr9yHnWjg9IJ2MhfwPqiYqMMrr01OY7yQoK2yA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-5.0.0.tgz", + "integrity": "sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==", "dev": true, "license": "MIT", "engines": { @@ -2859,17 +3521,47 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "devOptional": true, "license": "MIT", - "optional": true, "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -2889,9 +3581,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001702", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", - "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", "dev": true, "funding": [ { @@ -2921,9 +3613,9 @@ } }, "node_modules/chai": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", - "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.1.tgz", + "integrity": "sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==", "dev": true, "license": "MIT", "dependencies": { @@ -2934,7 +3626,7 @@ "pathval": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/chalk": { @@ -2954,6 +3646,13 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true, + "license": "MIT" + }, "node_modules/character-entities": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", @@ -3014,9 +3713,9 @@ } }, "node_modules/ci-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz", - "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -3097,13 +3796,13 @@ "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", - "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "version": "3.44.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.44.0.tgz", + "integrity": "sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.4" + "browserslist": "^4.25.1" }, "funding": { "type": "opencollective", @@ -3145,10 +3844,64 @@ "node": ">=4" } }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -3163,9 +3916,9 @@ } }, "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3197,8 +3950,8 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "devOptional": true, "license": "MIT", - "optional": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -3211,6 +3964,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -3236,16 +4007,31 @@ } }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/eastasianwidth": { @@ -3256,9 +4042,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.112", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.112.tgz", - "integrity": "sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==", + "version": "1.5.191", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.191.tgz", + "integrity": "sha512-xcwe9ELcuxYLUFqZZxL19Z6HVKcvNkIwhbHUz7L3us6u12yR+7uY89dSl570f/IqNthx8dAw3tojG7i4Ni4tDA==", "dev": true, "license": "ISC" }, @@ -3269,10 +4055,20 @@ "dev": true, "license": "MIT" }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enhanced-resolve": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", - "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", + "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3296,15 +4092,81 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "get-intrinsic": "^1.2.4" + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "devOptional": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -3313,64 +4175,125 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "devOptional": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, "license": "MIT" }, - "node_modules/esbuild": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", - "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", - "dev": true, - "hasInstallScript": true, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "devOptional": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "dependencies": { + "es-errors": "^1.3.0" }, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.0", - "@esbuild/android-arm": "0.25.0", - "@esbuild/android-arm64": "0.25.0", - "@esbuild/android-x64": "0.25.0", - "@esbuild/darwin-arm64": "0.25.0", - "@esbuild/darwin-x64": "0.25.0", - "@esbuild/freebsd-arm64": "0.25.0", - "@esbuild/freebsd-x64": "0.25.0", - "@esbuild/linux-arm": "0.25.0", - "@esbuild/linux-arm64": "0.25.0", - "@esbuild/linux-ia32": "0.25.0", - "@esbuild/linux-loong64": "0.25.0", - "@esbuild/linux-mips64el": "0.25.0", - "@esbuild/linux-ppc64": "0.25.0", - "@esbuild/linux-riscv64": "0.25.0", - "@esbuild/linux-s390x": "0.25.0", - "@esbuild/linux-x64": "0.25.0", - "@esbuild/netbsd-arm64": "0.25.0", - "@esbuild/netbsd-x64": "0.25.0", - "@esbuild/openbsd-arm64": "0.25.0", - "@esbuild/openbsd-x64": "0.25.0", - "@esbuild/sunos-x64": "0.25.0", - "@esbuild/win32-arm64": "0.25.0", - "@esbuild/win32-ia32": "0.25.0", - "@esbuild/win32-x64": "0.25.0" + "node": ">= 0.4" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.8", + "@esbuild/android-arm": "0.25.8", + "@esbuild/android-arm64": "0.25.8", + "@esbuild/android-x64": "0.25.8", + "@esbuild/darwin-arm64": "0.25.8", + "@esbuild/darwin-x64": "0.25.8", + "@esbuild/freebsd-arm64": "0.25.8", + "@esbuild/freebsd-x64": "0.25.8", + "@esbuild/linux-arm": "0.25.8", + "@esbuild/linux-arm64": "0.25.8", + "@esbuild/linux-ia32": "0.25.8", + "@esbuild/linux-loong64": "0.25.8", + "@esbuild/linux-mips64el": "0.25.8", + "@esbuild/linux-ppc64": "0.25.8", + "@esbuild/linux-riscv64": "0.25.8", + "@esbuild/linux-s390x": "0.25.8", + "@esbuild/linux-x64": "0.25.8", + "@esbuild/netbsd-arm64": "0.25.8", + "@esbuild/netbsd-x64": "0.25.8", + "@esbuild/openbsd-arm64": "0.25.8", + "@esbuild/openbsd-x64": "0.25.8", + "@esbuild/openharmony-arm64": "0.25.8", + "@esbuild/sunos-x64": "0.25.8", + "@esbuild/win32-arm64": "0.25.8", + "@esbuild/win32-ia32": "0.25.8", + "@esbuild/win32-x64": "0.25.8" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -3391,19 +4314,20 @@ } }, "node_modules/eslint": { - "version": "9.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.21.0.tgz", - "integrity": "sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==", + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.34.0.tgz", + "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.2", - "@eslint/core": "^0.12.0", - "@eslint/eslintrc": "^3.3.0", - "@eslint/js": "9.21.0", - "@eslint/plugin-kit": "^0.2.7", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.34.0", + "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -3414,9 +4338,9 @@ "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.2.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3451,9 +4375,9 @@ } }, "node_modules/eslint-compat-utils": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.5.tgz", + "integrity": "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3483,13 +4407,13 @@ } }, "node_modules/eslint-flat-config-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eslint-flat-config-utils/-/eslint-flat-config-utils-2.0.1.tgz", - "integrity": "sha512-brf0eAgQ6JlKj3bKfOTuuI7VcCZvi8ZCD1MMTVoEvS/d38j8cByZViLFALH/36+eqB17ukmfmKq3bWzGvizejA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/eslint-flat-config-utils/-/eslint-flat-config-utils-2.1.1.tgz", + "integrity": "sha512-K8eaPkBemHkfbYsZH7z4lZ/tt6gNSsVh535Wh9W9gQBS2WjvfUbbVr2NZR3L1yiRCLuOEimYfPxCxODczD4Opg==", "dev": true, "license": "MIT", "dependencies": { - "pathe": "^2.0.2" + "pathe": "^2.0.3" }, "funding": { "url": "https://github.com/sponsors/antfu" @@ -3511,6 +4435,31 @@ "eslint": ">=8.40.0" } }, + "node_modules/eslint-import-context": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz", + "integrity": "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-tsconfig": "^4.10.1", + "stable-hash-x": "^0.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-context" + }, + "peerDependencies": { + "unrs-resolver": "^1.0.0" + }, + "peerDependenciesMeta": { + "unrs-resolver": { + "optional": true + } + } + }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", @@ -3568,6 +4517,34 @@ "eslint": "*" } }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/eslint-parser-plain": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/eslint-parser-plain/-/eslint-parser-plain-0.1.1.tgz", @@ -3576,9 +4553,9 @@ "license": "MIT" }, "node_modules/eslint-plugin-antfu": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-antfu/-/eslint-plugin-antfu-3.1.0.tgz", - "integrity": "sha512-BKlJcpIG8OGyU5JwQCdyTGaLuRgItheEYinhNroCx3bcuz2bCSYK0eNzJvPy2TY8yyz0uSSRxr5KHuQ1WOdOKg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-antfu/-/eslint-plugin-antfu-3.1.1.tgz", + "integrity": "sha512-7Q+NhwLfHJFvopI2HBZbSxWXngTwBLKxW1AGXLr2lEGxcEIK/AsDs8pn8fvIizl5aZjBbVbVK5ujmMpBe4Tvdg==", "dev": true, "license": "MIT", "funding": { @@ -3589,13 +4566,13 @@ } }, "node_modules/eslint-plugin-command": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-command/-/eslint-plugin-command-3.1.0.tgz", - "integrity": "sha512-KLgxB8NMQ0iL7iwehyeqWVE7MaqRPwLTGW4d2CXYOj5tt4j6yU/hiNxQ/35FLq4SnMhv+tpE6FCvYbV4VS+BLw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-command/-/eslint-plugin-command-3.3.1.tgz", + "integrity": "sha512-fBVTXQ2y48TVLT0+4A6PFINp7GcdIailHAXbvPBixE7x+YpYnNQhFZxTdvnb+aWk+COgNebQKen/7m4dmgyWAw==", "dev": true, "license": "MIT", "dependencies": { - "@es-joy/jsdoccomment": "^0.50.0" + "@es-joy/jsdoccomment": "^0.50.2" }, "funding": { "url": "https://github.com/sponsors/antfu" @@ -3626,6 +4603,22 @@ "eslint": ">=8" } }, + "node_modules/eslint-plugin-es-x/node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, "node_modules/eslint-plugin-format": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-format/-/eslint-plugin-format-1.0.1.tgz", @@ -3648,90 +4641,201 @@ "eslint": "^8.40.0 || ^9.0.0" } }, - "node_modules/eslint-plugin-import-x": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.6.1.tgz", - "integrity": "sha512-wluSUifMIb7UfwWXqx7Yx0lE/SGCcGXECLx/9bCmbY2nneLwvAZ4vkd1IXDjPKFvdcdUgr1BaRnaRpx3k2+Pfw==", + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", "dependencies": { - "@types/doctrine": "^0.0.9", - "@typescript-eslint/scope-manager": "^8.1.0", - "@typescript-eslint/utils": "^8.1.0", - "debug": "^4.3.4", - "doctrine": "^3.0.0", - "enhanced-resolve": "^5.17.1", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "get-tsconfig": "^4.7.3", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", - "minimatch": "^9.0.3", - "semver": "^7.6.3", - "stable-hash": "^0.0.4", - "tslib": "^2.6.3" + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import-lite": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-lite/-/eslint-plugin-import-lite-0.3.0.tgz", + "integrity": "sha512-dkNBAL6jcoCsXZsQ/Tt2yXmMDoNt5NaBh/U7yvccjiK8cai6Ay+MK77bMykmqQA2bTF6lngaLCDij6MTO3KkvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/types": "^8.34.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" + "eslint": ">=9.0.0", + "typescript": ">=4.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-import-x": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.16.1.tgz", + "integrity": "sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "^8.35.0", + "comment-parser": "^1.4.1", + "debug": "^4.4.1", + "eslint-import-context": "^0.1.9", + "is-glob": "^4.0.3", + "minimatch": "^9.0.3 || ^10.0.1", + "semver": "^7.7.2", + "stable-hash-x": "^0.2.0", + "unrs-resolver": "^1.9.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-import-x" + }, + "peerDependencies": { + "@typescript-eslint/utils": "^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "eslint-import-resolver-node": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/utils": { + "optional": true + }, + "eslint-import-resolver-node": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-jsdoc": { - "version": "50.6.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.6.3.tgz", - "integrity": "sha512-NxbJyt1M5zffPcYZ8Nb53/8nnbIScmiLAMdoe0/FAszwb7lcSiX3iYBTsuF7RV84dZZJC8r3NghomrUXsmWvxQ==", + "version": "52.0.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-52.0.4.tgz", + "integrity": "sha512-be5OzGlLExvcK13Il3noU7/v7WmAQGenTmCaBKf1pwVtPOb6X+PGFVnJad0QhMj4KKf45XjE4hbsBxv25q1fTg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@es-joy/jsdoccomment": "~0.49.0", + "@es-joy/jsdoccomment": "~0.52.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", - "debug": "^4.3.6", + "debug": "^4.4.1", "escape-string-regexp": "^4.0.0", - "espree": "^10.1.0", + "espree": "^10.4.0", "esquery": "^1.6.0", - "parse-imports": "^2.1.1", - "semver": "^7.6.3", - "spdx-expression-parse": "^4.0.0", - "synckit": "^0.9.1" + "parse-imports-exports": "^0.2.4", + "semver": "^7.7.2", + "spdx-expression-parse": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=20.11.0" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-jsdoc/node_modules/@es-joy/jsdoccomment": { - "version": "0.49.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz", - "integrity": "sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==", + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.52.0.tgz", + "integrity": "sha512-BXuN7BII+8AyNtn57euU2Yxo9yA/KUDNzrpXyi3pfqKmBhhysR6ZWOebFh3vyPoqA3/j1SOvGgucElMGwlXing==", "dev": true, "license": "MIT", "dependencies": { + "@types/estree": "^1.0.8", + "@typescript-eslint/types": "^8.34.1", "comment-parser": "1.4.1", "esquery": "^1.6.0", "jsdoc-type-pratt-parser": "~4.1.0" }, "engines": { - "node": ">=16" + "node": ">=20.11.0" } }, "node_modules/eslint-plugin-jsonc": { - "version": "2.19.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.19.1.tgz", - "integrity": "sha512-MmlAOaZK1+Lg7YoCZPGRjb88ZjT+ct/KTsvcsbZdBm+w8WMzGx+XEmexk0m40P1WV9G2rFV7X3klyRGRpFXEjA==", + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.20.1.tgz", + "integrity": "sha512-gUzIwQHXx7ZPypUoadcyRi4WbHW2TPixDr0kqQ4miuJBU0emJmyGTlnaT3Og9X2a8R1CDayN9BFSq5weGWbTng==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "eslint-compat-utils": "^0.6.0", + "@eslint-community/eslint-utils": "^4.5.1", + "eslint-compat-utils": "^0.6.4", "eslint-json-compat-utils": "^0.2.1", - "espree": "^9.6.1", + "espree": "^9.6.1 || ^10.3.0", "graphemer": "^1.4.0", - "jsonc-eslint-parser": "^2.0.4", + "jsonc-eslint-parser": "^2.4.0", "natural-compare": "^1.4.0", - "synckit": "^0.6.0" + "synckit": "^0.6.2 || ^0.7.3 || ^0.11.5" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3743,81 +4847,51 @@ "eslint": ">=6.0.0" } }, - "node_modules/eslint-plugin-jsonc/node_modules/eslint-compat-utils": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.4.tgz", - "integrity": "sha512-/u+GQt8NMfXO8w17QendT4gvO5acfxQsAKirAt0LVxDnr2N8YLCVbregaNc/Yhp7NM128DwCaRvr8PLDfeNkQw==", + "node_modules/eslint-plugin-jsonc/node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "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", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-jsonc/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://opencollective.com/pkgr" } }, "node_modules/eslint-plugin-jsonc/node_modules/synckit": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.6.2.tgz", - "integrity": "sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", "dev": true, "license": "MIT", "dependencies": { - "tslib": "^2.3.1" + "@pkgr/core": "^0.2.9" }, "engines": { - "node": ">=12.20" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" } }, "node_modules/eslint-plugin-n": { - "version": "17.16.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.16.2.tgz", - "integrity": "sha512-iQM5Oj+9o0KaeLoObJC/uxNGpktZCkYiTTBo8PkRWq3HwNcRxwpvSDFjBhQ5+HLJzBTy+CLDC5+bw0Z5GyhlOQ==", + "version": "17.21.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.21.3.tgz", + "integrity": "sha512-MtxYjDZhMQgsWRm/4xYLL0i2EhusWT7itDxlJ80l1NND2AL2Vi5Mvneqv/ikG9+zpran0VsVRXTEHrpLmUZRNw==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.1", + "@eslint-community/eslint-utils": "^4.5.0", "enhanced-resolve": "^5.17.1", "eslint-plugin-es-x": "^7.8.0", "get-tsconfig": "^4.8.1", "globals": "^15.11.0", + "globrex": "^0.1.2", "ignore": "^5.3.2", - "minimatch": "^9.0.5", - "semver": "^7.6.3" + "semver": "^7.6.3", + "ts-declaration-location": "^1.0.6" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3853,32 +4927,60 @@ } }, "node_modules/eslint-plugin-perfectionist": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.9.0.tgz", - "integrity": "sha512-76lDfJnonOcXGW3bEXuqhEGId0LrOlvIE1yLHvK/eKMMPOc0b43KchAIR2Bdbqlg+LPXU5/Q+UzuzkO+cWHT6w==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.15.0.tgz", + "integrity": "sha512-pC7PgoXyDnEXe14xvRUhBII8A3zRgggKqJFx2a82fjrItDs1BSI7zdZnQtM2yQvcyod6/ujmzb7ejKPx8lZTnw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "^8.24.0", - "@typescript-eslint/utils": "^8.24.0", + "@typescript-eslint/types": "^8.34.1", + "@typescript-eslint/utils": "^8.34.1", "natural-orderby": "^5.0.0" }, "engines": { "node": "^18.0.0 || >=20.0.0" }, "peerDependencies": { - "eslint": ">=8.0.0" + "eslint": ">=8.45.0" } }, - "node_modules/eslint-plugin-regexp": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-2.7.0.tgz", - "integrity": "sha512-U8oZI77SBtH8U3ulZ05iu0qEzIizyEDXd+BWHvyVxTOjGwcDcvy/kEpgFG4DYca2ByRLiVPFZ2GeH7j1pdvZTA==", + "node_modules/eslint-plugin-pnpm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-pnpm/-/eslint-plugin-pnpm-1.1.0.tgz", + "integrity": "sha512-sL93w0muBtjnogzk/loDsxzMbmXQOLP5Blw3swLDBXZgfb+qQI73bPcUbjVR+ZL+K62vGJdErV+43i3r5DsZPg==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.11.0", + "find-up-simple": "^1.0.1", + "jsonc-eslint-parser": "^2.4.0", + "pathe": "^2.0.3", + "pnpm-workspace-yaml": "1.1.0", + "tinyglobby": "^0.2.14", + "yaml-eslint-parser": "^1.3.0" + }, + "peerDependencies": { + "eslint": "^9.0.0" + } + }, + "node_modules/eslint-plugin-regexp": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-2.10.0.tgz", + "integrity": "sha512-ovzQT8ESVn5oOe5a7gIDPD5v9bCSjIFJu57sVPDqgPRXicQzOnYfFN21WoQBQF18vrhT5o7UMKFwJQVVjyJ0ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", "comment-parser": "^1.4.0", "jsdoc-type-pratt-parser": "^4.0.0", "refa": "^0.12.1", @@ -3914,141 +5016,46 @@ "eslint": ">=6.0.0" } }, - "node_modules/eslint-plugin-toml/node_modules/eslint-compat-utils": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.4.tgz", - "integrity": "sha512-/u+GQt8NMfXO8w17QendT4gvO5acfxQsAKirAt0LVxDnr2N8YLCVbregaNc/Yhp7NM128DwCaRvr8PLDfeNkQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, "node_modules/eslint-plugin-unicorn": { - "version": "57.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-57.0.0.tgz", - "integrity": "sha512-zUYYa6zfNdTeG9BISWDlcLmz16c+2Ck2o5ZDHh0UzXJz3DEP7xjmlVDTzbyV0W+XksgZ0q37WEWzN2D2Ze+g9Q==", + "version": "60.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-60.0.0.tgz", + "integrity": "sha512-QUzTefvP8stfSXsqKQ+vBQSEsXIlAiCduS/V1Em+FKgL9c21U/IIm20/e3MFy1jyCf14tHAhqC1sX8OTy6VUCg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "@eslint-community/eslint-utils": "^4.4.1", - "ci-info": "^4.1.0", + "@babel/helper-validator-identifier": "^7.27.1", + "@eslint-community/eslint-utils": "^4.7.0", + "@eslint/plugin-kit": "^0.3.3", + "change-case": "^5.4.4", + "ci-info": "^4.3.0", "clean-regexp": "^1.0.0", - "core-js-compat": "^3.40.0", + "core-js-compat": "^3.44.0", "esquery": "^1.6.0", - "globals": "^15.15.0", + "find-up-simple": "^1.0.1", + "globals": "^16.3.0", "indent-string": "^5.0.0", - "is-builtin-module": "^4.0.0", + "is-builtin-module": "^5.0.0", "jsesc": "^3.1.0", "pluralize": "^8.0.0", - "read-package-up": "^11.0.0", "regexp-tree": "^0.1.27", "regjsparser": "^0.12.0", - "semver": "^7.7.1", + "semver": "^7.7.2", "strip-indent": "^4.0.0" }, "engines": { - "node": ">=18.18" + "node": "^20.10.0 || >=21.0.0" }, "funding": { "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" }, "peerDependencies": { - "eslint": ">=9.20.0" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-unused-imports": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz", - "integrity": "sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", - "eslint": "^9.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-vue": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.32.0.tgz", - "integrity": "sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "globals": "^13.24.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.15", - "semver": "^7.6.3", - "vue-eslint-parser": "^9.4.3", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-vue/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-vue/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "eslint": ">=9.29.0" } }, "node_modules/eslint-plugin-yml": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.17.0.tgz", - "integrity": "sha512-Q3LXFRnNpGYAK/PM0BY1Xs0IY1xTLfM0kC986nNQkx1l8tOGz+YS50N6wXkAJkrBpeUN9OxEMB7QJ+9MTDAqIQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.18.0.tgz", + "integrity": "sha512-9NtbhHRN2NJa/s3uHchO3qVVZw0vyOIvWlXWGaKCr/6l3Go62wsvJK5byiI6ZoYztDsow4GnS69BZD3GnqH3hA==", "dev": true, "license": "MIT", "dependencies": { @@ -4068,22 +5075,6 @@ "eslint": ">=6.0.0" } }, - "node_modules/eslint-plugin-yml/node_modules/eslint-compat-utils": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.4.tgz", - "integrity": "sha512-/u+GQt8NMfXO8w17QendT4gvO5acfxQsAKirAt0LVxDnr2N8YLCVbregaNc/Yhp7NM128DwCaRvr8PLDfeNkQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, "node_modules/eslint-processor-vue-blocks": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/eslint-processor-vue-blocks/-/eslint-processor-vue-blocks-2.0.0.tgz", @@ -4099,9 +5090,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4116,9 +5107,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4128,19 +5119,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/@eslint/core": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", - "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4166,15 +5144,15 @@ } }, "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.14.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4237,10 +5215,102 @@ "node": ">=0.10.0" } }, - "node_modules/expect-type": { + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/execa/node_modules/shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.0.tgz", - "integrity": "sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/expect-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", + "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4322,6 +5392,35 @@ "reusify": "^1.0.4" } }, + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -4409,6 +5508,22 @@ "dev": true, "license": "ISC" }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/foreground-child": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", @@ -4439,6 +5554,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -4459,8 +5583,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "devOptional": true, - "license": "ISC" + "license": "ISC", + "optional": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -4487,18 +5611,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -4507,60 +5632,147 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-tsconfig": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", - "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "devOptional": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": "*" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "devOptional": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "dev": true, + "license": "ISC" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, "license": "MIT", + "optional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4570,8 +5782,8 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, "license": "ISC", + "optional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4580,9 +5792,9 @@ } }, "node_modules/globals": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz", - "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==", + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", + "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", "dev": true, "license": "MIT", "engines": { @@ -4592,14 +5804,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4619,6 +5855,19 @@ "dev": true, "license": "MIT" }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4633,8 +5882,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "devOptional": true, "license": "MIT", - "optional": true, "dependencies": { "es-define-property": "^1.0.0" }, @@ -4643,11 +5892,14 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, "license": "MIT", - "optional": true, + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -4656,11 +5908,27 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "devOptional": true, "license": "MIT", - "optional": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { "node": ">= 0.4" }, @@ -4681,19 +5949,6 @@ "node": ">= 0.4" } }, - "node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -4758,26 +6013,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/index-to-position": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-0.1.2.tgz", - "integrity": "sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "devOptional": true, "license": "ISC", + "optional": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4787,8 +6029,23 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "devOptional": true, - "license": "ISC" + "license": "ISC", + "optional": true + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/interpret": { "version": "1.4.0", @@ -4800,6 +6057,60 @@ "node": ">= 0.10" } }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -4813,14 +6124,31 @@ "node": ">=8" } }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-builtin-module": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-4.0.0.tgz", - "integrity": "sha512-rWP3AMAalQSesXO8gleROyL2iKU73SX5Er66losQn9rWOWL4Gef0a/xOEOVqjWGMuR2vHG3FJ8UUmT700O8oFg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-5.0.0.tgz", + "integrity": "sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==", "dev": true, "license": "MIT", "dependencies": { - "builtin-modules": "^4.0.0" + "builtin-modules": "^5.0.0" }, "engines": { "node": ">=18.20" @@ -4829,10 +6157,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -4845,6 +6186,41 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -4871,6 +6247,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -4881,6 +6273,25 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -4891,17 +6302,215 @@ "is-extglob": "^2.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "devOptional": true, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, "engines": { - "node": ">=0.12.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-wsl": { @@ -4921,8 +6530,8 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT", - "optional": true + "devOptional": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", @@ -5002,9 +6611,9 @@ } }, "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", "dev": true, "license": "MIT" }, @@ -5084,6 +6693,19 @@ "dev": true, "license": "MIT" }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/jsonc-eslint-parser": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", @@ -5261,9 +6883,9 @@ } }, "node_modules/loupe": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", - "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.0.tgz", + "integrity": "sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==", "dev": true, "license": "MIT" }, @@ -5355,6 +6977,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mdast-util-find-and-replace": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", @@ -5410,10 +7042,42 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-frontmatter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "escape-string-regexp": "^5.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mdast-util-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", - "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5449,9 +7113,9 @@ } }, "node_modules/mdast-util-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5586,9 +7250,9 @@ } }, "node_modules/micromark": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", - "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", "dev": true, "funding": [ { @@ -5622,9 +7286,9 @@ } }, "node_modules/micromark-core-commonmark": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", - "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", "dev": true, "funding": [ { @@ -5656,6 +7320,23 @@ "micromark-util-types": "^2.0.0" } }, + "node_modules/micromark-extension-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/micromark-extension-gfm": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", @@ -6120,9 +7801,9 @@ } }, "node_modules/micromark-util-subtokenize": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.4.tgz", - "integrity": "sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", "dev": true, "funding": [ { @@ -6160,9 +7841,9 @@ "license": "MIT" }, "node_modules/micromark-util-types": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", - "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", "dev": true, "funding": [ { @@ -6288,9 +7969,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -6306,11 +7987,21 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/napi-thread-safe-callback": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/napi-thread-safe-callback/-/napi-thread-safe-callback-0.0.6.tgz", - "integrity": "sha512-X7uHCOCdY4u0yamDxDrv3jF2NtYc8A1nvPzBQgvpoSX+WB3jAe2cVNsY448V1ucq7Whf9Wdy02HEUoLW5rJKWg==", - "license": "ISC" + "node_modules/napi-postinstall": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.2.tgz", + "integrity": "sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } }, "node_modules/natural-compare": { "version": "1.4.0", @@ -6329,19 +8020,26 @@ "node": ">=18" } }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, "node_modules/node-addon-api": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.2.1.tgz", - "integrity": "sha512-vmEOvxwiH8tlOcv4SyE8RH34rI5/nWVaigUeAUPawC6f0+HoDthwI0vkMu4tbtsZrXq6QXFfrkhjofzKEs5tpA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", + "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", "license": "MIT", "engines": { "node": "^18 || ^20 || >= 21" } }, "node_modules/node-gyp-build": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", - "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", "license": "MIT", "bin": { "node-gyp-build": "bin.js", @@ -6357,9 +8055,9 @@ "license": "MIT" }, "node_modules/nodemon": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.9.tgz", - "integrity": "sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", + "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", "dev": true, "license": "MIT", "dependencies": { @@ -6432,29 +8130,37 @@ "node": ">=4" } }, - "node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "license": "MIT", "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "path-key": "^2.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, "node_modules/nth-check": { @@ -6470,16 +8176,103 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "devOptional": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" } }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -6535,6 +8328,34 @@ "node": ">=0.10.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -6575,9 +8396,9 @@ "license": "BlueOak-1.0.0" }, "node_modules/package-manager-detector": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.8.tgz", - "integrity": "sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz", + "integrity": "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==", "dev": true, "license": "MIT" }, @@ -6604,37 +8425,22 @@ "node": ">=14" } }, - "node_modules/parse-imports": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz", - "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==", + "node_modules/parse-imports-exports": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz", + "integrity": "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==", "dev": true, - "license": "Apache-2.0 AND MIT", + "license": "MIT", "dependencies": { - "es-module-lexer": "^1.5.3", - "slashes": "^3.0.12" - }, - "engines": { - "node": ">= 18" + "parse-statements": "1.0.11" } }, - "node_modules/parse-json": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", - "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", + "node_modules/parse-statements": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz", + "integrity": "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "index-to-position": "^0.1.2", - "type-fest": "^4.7.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, "node_modules/patch-package": { "version": "8.0.0", @@ -6707,8 +8513,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "devOptional": true, "license": "MIT", + "optional": true, "engines": { "node": ">=0.10.0" } @@ -6755,9 +8561,9 @@ "license": "MIT" }, "node_modules/pathval": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", - "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", "dev": true, "license": "MIT", "engines": { @@ -6772,9 +8578,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -6796,20 +8602,50 @@ "pathe": "^2.0.3" } }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pnpm-workspace-yaml": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pnpm-workspace-yaml/-/pnpm-workspace-yaml-1.1.0.tgz", + "integrity": "sha512-OWUzBxtitpyUV0fBYYwLAfWxn3mSzVbVB7cwgNaHvTTU9P0V2QHjyaY5i7f1hEiT9VeKsNH1Skfhe2E3lx/zhA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT", + "dependencies": { + "yaml": "^2.8.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -6827,7 +8663,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -6895,6 +8731,17 @@ "dev": true, "license": "MIT" }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -6953,44 +8800,6 @@ ], "license": "MIT" }, - "node_modules/read-package-up": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", - "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up-simple": "^1.0.0", - "read-pkg": "^9.0.0", - "type-fest": "^4.6.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.3", - "normalize-package-data": "^6.0.0", - "parse-json": "^8.0.0", - "type-fest": "^4.6.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -7042,6 +8851,29 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexp-ast-analysis": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.7.1.tgz", @@ -7066,6 +8898,27 @@ "regexp-tree": "bin/regexp-tree" } }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regjsparser": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", @@ -7093,19 +8946,22 @@ } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7156,13 +9012,13 @@ } }, "node_modules/rollup": { - "version": "4.34.9", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.9.tgz", - "integrity": "sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", + "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -7172,25 +9028,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.34.9", - "@rollup/rollup-android-arm64": "4.34.9", - "@rollup/rollup-darwin-arm64": "4.34.9", - "@rollup/rollup-darwin-x64": "4.34.9", - "@rollup/rollup-freebsd-arm64": "4.34.9", - "@rollup/rollup-freebsd-x64": "4.34.9", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.9", - "@rollup/rollup-linux-arm-musleabihf": "4.34.9", - "@rollup/rollup-linux-arm64-gnu": "4.34.9", - "@rollup/rollup-linux-arm64-musl": "4.34.9", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.9", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.9", - "@rollup/rollup-linux-riscv64-gnu": "4.34.9", - "@rollup/rollup-linux-s390x-gnu": "4.34.9", - "@rollup/rollup-linux-x64-gnu": "4.34.9", - "@rollup/rollup-linux-x64-musl": "4.34.9", - "@rollup/rollup-win32-arm64-msvc": "4.34.9", - "@rollup/rollup-win32-ia32-msvc": "4.34.9", - "@rollup/rollup-win32-x64-msvc": "4.34.9", + "@rollup/rollup-android-arm-eabi": "4.45.1", + "@rollup/rollup-android-arm64": "4.45.1", + "@rollup/rollup-darwin-arm64": "4.45.1", + "@rollup/rollup-darwin-x64": "4.45.1", + "@rollup/rollup-freebsd-arm64": "4.45.1", + "@rollup/rollup-freebsd-x64": "4.45.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", + "@rollup/rollup-linux-arm-musleabihf": "4.45.1", + "@rollup/rollup-linux-arm64-gnu": "4.45.1", + "@rollup/rollup-linux-arm64-musl": "4.45.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-musl": "4.45.1", + "@rollup/rollup-linux-s390x-gnu": "4.45.1", + "@rollup/rollup-linux-x64-gnu": "4.45.1", + "@rollup/rollup-linux-x64-musl": "4.45.1", + "@rollup/rollup-win32-arm64-msvc": "4.45.1", + "@rollup/rollup-win32-ia32-msvc": "4.45.1", + "@rollup/rollup-win32-x64-msvc": "4.45.1", "fsevents": "~2.3.2" } }, @@ -7218,6 +9075,61 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/scslre": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.3.0.tgz", @@ -7234,9 +9146,9 @@ } }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "devOptional": true, "license": "ISC", "bin": { @@ -7304,8 +9216,8 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "devOptional": true, "license": "MIT", - "optional": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -7318,6 +9230,37 @@ "node": ">= 0.4" } }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7342,13 +9285,14 @@ } }, "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.9.2.tgz", + "integrity": "sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "glob": "^7.0.0", + "execa": "^1.0.0", + "fast-glob": "^3.3.2", "interpret": "^1.0.0", "rechoir": "^0.6.2" }, @@ -7356,24 +9300,100 @@ "shjs": "bin/shjs" }, "engines": { - "node": ">=4" + "node": ">=18" } }, "node_modules/shx": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", - "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.4.0.tgz", + "integrity": "sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA==", "dev": true, "license": "MIT", "dependencies": { - "minimist": "^1.2.3", - "shelljs": "^0.8.5" + "minimist": "^1.2.8", + "shelljs": "^0.9.2" }, "bin": { "shx": "lib/cli.js" }, "engines": { - "node": ">=6" + "node": ">=18" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/siginfo": { @@ -7383,6 +9403,13 @@ "dev": true, "license": "ISC" }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -7403,13 +9430,6 @@ "dev": true, "license": "MIT" }, - "node_modules/slashes": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", - "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==", - "dev": true, - "license": "ISC" - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -7430,28 +9450,6 @@ "node": ">=0.10.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-correct/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, "node_modules/spdx-exceptions": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", @@ -7471,18 +9469,21 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.20", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", - "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true, "license": "CC0-1.0" }, - "node_modules/stable-hash": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", - "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "node_modules/stable-hash-x": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz", + "integrity": "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } }, "node_modules/stackback": { "version": "0.0.2", @@ -7492,12 +9493,26 @@ "license": "MIT" }, "node_modules/std-env": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.1.tgz", - "integrity": "sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", "dev": true, "license": "MIT" }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -7526,7 +9541,66 @@ "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { @@ -7556,6 +9630,26 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", @@ -7585,6 +9679,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7629,9 +9736,9 @@ } }, "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", "dev": true, "license": "MIT", "engines": { @@ -7682,16 +9789,33 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", + "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", "dev": true, "license": "MIT" }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/tinypool": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", - "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", "dev": true, "license": "MIT", "engines": { @@ -7709,9 +9833,9 @@ } }, "node_modules/tinyspy": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", - "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", + "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", "dev": true, "license": "MIT", "engines": { @@ -7784,9 +9908,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "license": "MIT", "engines": { @@ -7796,6 +9920,29 @@ "typescript": ">=4.8.4" } }, + "node_modules/ts-declaration-location": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ts-declaration-location/-/ts-declaration-location-1.0.7.tgz", + "integrity": "sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==", + "dev": true, + "funding": [ + { + "type": "ko-fi", + "url": "https://ko-fi.com/rebeccastevens" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/ts-declaration-location" + } + ], + "license": "BSD-3-Clause", + "dependencies": { + "picomatch": "^4.0.2" + }, + "peerDependencies": { + "typescript": ">=4.0.0" + } + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -7850,6 +9997,19 @@ "node": ">=0.3.1" } }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -7869,46 +10029,112 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.37.0.tgz", - "integrity": "sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==", + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, "engines": { - "node": ">=16" + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typedoc": { - "version": "0.27.9", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.27.9.tgz", - "integrity": "sha512-/z585740YHURLl9DN2jCWe6OW7zKYm6VoQ93H0sxZ1cwHQEQrUn5BJrEnkWhfzUdyO+BLGjnKUZ9iz9hKloFDw==", + "version": "0.28.11", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.11.tgz", + "integrity": "sha512-1FqgrrUYGNuE3kImAiEDgAVVVacxdO4ZVTKbiOVDGkoeSB4sNwQaDpa8mta+Lw5TEzBFmGXzsg0I1NLRIoaSFw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@gerrit0/mini-shiki": "^1.24.0", + "@gerrit0/mini-shiki": "^3.9.0", "lunr": "^2.3.9", "markdown-it": "^14.1.0", "minimatch": "^9.0.5", - "yaml": "^2.6.1" + "yaml": "^2.8.0" }, "bin": { "typedoc": "bin/typedoc" }, "engines": { - "node": ">= 18" + "node": ">= 18", + "pnpm": ">= 10" }, "peerDependencies": { - "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x" + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x" } }, "node_modules/typescript": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, "license": "Apache-2.0", "bin": { @@ -7933,6 +10159,25 @@ "dev": true, "license": "MIT" }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -7941,34 +10186,21 @@ "license": "MIT" }, "node_modules/undici": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.4.0.tgz", - "integrity": "sha512-PUQM3/es3noM24oUn10u3kNNap0AbxESOmnssmW+dOi9yGwlUSi5nTNYl3bNbTkWOF8YZDkx2tCmj9OtQ3iGGw==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.15.0.tgz", + "integrity": "sha512-7oZJCPvvMvTd0OlqWsIxTuItTpJBpU1tcbVl24FMn3xt3+VSunwUasmfPJRE57oNO1KsZ4PgA1xTdAX4hq8NyQ==", "license": "MIT", "engines": { "node": ">=20.18.1" } }, "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", "dev": true, "license": "MIT" }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/unist-util-is": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", @@ -8038,6 +10270,41 @@ "node": ">= 10.0.0" } }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -8109,44 +10376,25 @@ "dev": true, "license": "MIT" }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, "node_modules/vite": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.0.tgz", - "integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", - "postcss": "^8.5.3", - "rollup": "^4.30.1" + "fdir": "^6.4.6", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -8155,14 +10403,14 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", - "less": "*", + "less": "^4.0.0", "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" @@ -8204,17 +10452,17 @@ } }, "node_modules/vite-node": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.7.tgz", - "integrity": "sha512-2fX0QwX4GkkkpULXdT1Pf4q0tC1i1lFOyseKoonavXUNlQ77KpW2XqBGGNIm/J4Ows4KxgGJzDguYVPKwG/n5A==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.4.0", - "es-module-lexer": "^1.6.0", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", - "vite": "^5.0.0 || ^6.0.0" + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" @@ -8227,31 +10475,34 @@ } }, "node_modules/vitest": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.7.tgz", - "integrity": "sha512-IP7gPK3LS3Fvn44x30X1dM9vtawm0aesAa2yBIZ9vQf+qB69NXC5776+Qmcr7ohUXIQuLhk7xQR0aSUIDPqavg==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "3.0.7", - "@vitest/mocker": "3.0.7", - "@vitest/pretty-format": "^3.0.7", - "@vitest/runner": "3.0.7", - "@vitest/snapshot": "3.0.7", - "@vitest/spy": "3.0.7", - "@vitest/utils": "3.0.7", + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", "chai": "^5.2.0", - "debug": "^4.4.0", - "expect-type": "^1.1.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", - "std-env": "^3.8.0", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", - "tinypool": "^1.0.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", - "vite": "^5.0.0 || ^6.0.0", - "vite-node": "3.0.7", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "bin": { @@ -8267,8 +10518,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.0.7", - "@vitest/ui": "3.0.7", + "@vitest/browser": "3.2.4", + "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, @@ -8296,93 +10547,140 @@ } } }, + "node_modules/vitest/node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, "node_modules/vue-eslint-parser": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", - "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz", + "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" + "debug": "^4.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.6.0", + "semver": "^7.6.3" }, "engines": { - "node": "^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { - "eslint": ">=6.0.0" + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/vue-eslint-parser/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vue-eslint-parser/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "devOptional": true, - "license": "ISC", + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/why-is-node-running": { @@ -8449,16 +10747,16 @@ } }, "node_modules/yaml": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", - "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", "devOptional": true, "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" } }, "node_modules/yaml-eslint-parser": { diff --git a/package.json b/package.json index 01bdd621..34935a6b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "node-switchbot", "type": "module", - "version": "3.5.1", + "version": "3.6.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", @@ -51,30 +51,32 @@ }, "readmeFilename": "README.md", "dependencies": { - "@stoprocent/noble": "^1.19.1", + "@stoprocent/noble": "^2.3.5", "async-mutex": "^0.5.0", - "undici": "7.4.0" + "undici": "^7.15.0" }, "optionalDependencies": { - "@stoprocent/bluetooth-hci-socket": "^1.5.2" + "@stoprocent/bluetooth-hci-socket": "^2.2.3" }, "devDependencies": { - "@antfu/eslint-config": "^4.4.0", + "@antfu/eslint-config": "^5.2.1", "@types/aes-js": "^3.1.4", "@types/debug": "^4.1.12", "@types/fs-extra": "^11.0.4", "@types/mdast": "^4.0.4", - "@types/node": "^22.13.9", - "@types/semver": "^7.5.8", + "@types/node": "^24.3.0", + "@types/semver": "^7.7.0", "@types/source-map-support": "^0.5.10", - "@vitest/coverage-v8": "^3.0.7", - "eslint": "^9.21.0", + "@vitest/coverage-v8": "^3.2.4", + "eslint": "^9.34.0", "eslint-plugin-format": "^1.0.1", - "nodemon": "^3.1.9", - "shx": "^0.3.4", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-import-x": "^4.16.1", + "nodemon": "^3.1.10", + "shx": "^0.4.0", "ts-node": "^10.9.2", - "typedoc": "^0.27.9", - "typescript": "^5.8.2", - "vitest": "^3.0.7" + "typedoc": "^0.28.11", + "typescript": "^5.9.2", + "vitest": "^3.2.4" } } diff --git a/src/device.test.ts b/src/device.test.ts new file mode 100644 index 00000000..0629cb85 --- /dev/null +++ b/src/device.test.ts @@ -0,0 +1,178 @@ +import { Buffer } from 'node:buffer' + +import { describe, expect, it } from 'vitest' + +import { ErrorUtils, LogLevel, ValidationUtils } from './device.js' + +describe('validationUtils', () => { + describe('validatePercentage', () => { + it('should accept valid percentages', () => { + expect(() => ValidationUtils.validatePercentage(0)).not.toThrow() + expect(() => ValidationUtils.validatePercentage(50)).not.toThrow() + expect(() => ValidationUtils.validatePercentage(100)).not.toThrow() + }) + + it('should reject invalid percentages', () => { + expect(() => ValidationUtils.validatePercentage(-1)).toThrow('must be between 0 and 100') + expect(() => ValidationUtils.validatePercentage(101)).toThrow('must be between 0 and 100') + expect(() => ValidationUtils.validatePercentage(Number.NaN)).toThrow('must be a valid number') + }) + + it('should reject non-numbers', () => { + expect(() => ValidationUtils.validatePercentage('50' as any)).toThrow('must be a valid number') + expect(() => ValidationUtils.validatePercentage(null as any)).toThrow('must be a valid number') + }) + }) + + describe('validateRGB', () => { + it('should accept valid RGB values', () => { + expect(() => ValidationUtils.validateRGB(0)).not.toThrow() + expect(() => ValidationUtils.validateRGB(128)).not.toThrow() + expect(() => ValidationUtils.validateRGB(255)).not.toThrow() + }) + + it('should reject invalid RGB values', () => { + expect(() => ValidationUtils.validateRGB(-1)).toThrow('must be an integer between 0 and 255') + expect(() => ValidationUtils.validateRGB(256)).toThrow('must be an integer between 0 and 255') + expect(() => ValidationUtils.validateRGB(128.5)).toThrow('must be an integer between 0 and 255') + }) + }) + + describe('validateBuffer', () => { + it('should accept valid buffers', () => { + const buffer = Buffer.from([1, 2, 3]) + expect(() => ValidationUtils.validateBuffer(buffer)).not.toThrow() + expect(() => ValidationUtils.validateBuffer(buffer, 3)).not.toThrow() + }) + + it('should reject non-buffers', () => { + expect(() => ValidationUtils.validateBuffer('not a buffer' as any)).toThrow('must be a Buffer instance') + expect(() => ValidationUtils.validateBuffer(null as any)).toThrow('must be a Buffer instance') + }) + + it('should validate buffer length', () => { + const buffer = Buffer.from([1, 2, 3]) + expect(() => ValidationUtils.validateBuffer(buffer, 2)).toThrow('must have exactly 2 bytes') + expect(() => ValidationUtils.validateBuffer(buffer, 4)).toThrow('must have exactly 4 bytes') + }) + }) + + describe('validateString', () => { + it('should accept valid strings', () => { + expect(() => ValidationUtils.validateString('hello')).not.toThrow() + expect(() => ValidationUtils.validateString('test', 'param', 1, 10)).not.toThrow() + }) + + it('should reject non-strings', () => { + expect(() => ValidationUtils.validateString(123 as any)).toThrow('must be a string') + expect(() => ValidationUtils.validateString(null as any)).toThrow('must be a string') + }) + + it('should validate string length', () => { + expect(() => ValidationUtils.validateString('')).toThrow('must have at least 1 character') + expect(() => ValidationUtils.validateString('too long', 'param', 1, 5)).toThrow('must have at most 5 character') + }) + }) + + describe('validateRange', () => { + it('should accept values in range', () => { + expect(() => ValidationUtils.validateRange(5, 0, 10)).not.toThrow() + expect(() => ValidationUtils.validateRange(0, 0, 10)).not.toThrow() + expect(() => ValidationUtils.validateRange(10, 0, 10)).not.toThrow() + }) + + it('should reject values out of range', () => { + expect(() => ValidationUtils.validateRange(-1, 0, 10)).toThrow('must be between 0 and 10') + expect(() => ValidationUtils.validateRange(11, 0, 10)).toThrow('must be between 0 and 10') + }) + + it('should validate integers when required', () => { + expect(() => ValidationUtils.validateRange(5, 0, 10, 'value', true)).not.toThrow() + expect(() => ValidationUtils.validateRange(5.5, 0, 10, 'value', true)).toThrow('must be an integer') + }) + }) + + describe('validateMacAddress', () => { + it('should accept valid MAC addresses', () => { + expect(() => ValidationUtils.validateMacAddress('AA:BB:CC:DD:EE:FF')).not.toThrow() + expect(() => ValidationUtils.validateMacAddress('aa:bb:cc:dd:ee:ff')).not.toThrow() + expect(() => ValidationUtils.validateMacAddress('AA-BB-CC-DD-EE-FF')).not.toThrow() + expect(() => ValidationUtils.validateMacAddress('aabbccddeeff')).not.toThrow() + }) + + it('should reject invalid MAC addresses', () => { + expect(() => ValidationUtils.validateMacAddress('invalid')).toThrow('must be a valid MAC address format') + expect(() => ValidationUtils.validateMacAddress('GG:BB:CC:DD:EE:FF')).toThrow('must be a valid MAC address format') + }) + }) + + describe('validateEnum', () => { + it('should accept valid enum values', () => { + const allowed = ['red', 'green', 'blue'] as const + expect(() => ValidationUtils.validateEnum('red', allowed)).not.toThrow() + expect(() => ValidationUtils.validateEnum('green', allowed)).not.toThrow() + }) + + it('should reject invalid enum values', () => { + const allowed = ['red', 'green', 'blue'] as const + expect(() => ValidationUtils.validateEnum('yellow', allowed)).toThrow('must be one of: red, green, blue') + }) + }) +}) + +describe('errorUtils', () => { + describe('createTimeoutError', () => { + it('should create descriptive timeout errors', () => { + const error = ErrorUtils.createTimeoutError('connect', 5000) + expect(error.message).toBe('Operation \'connect\' timed out after 5000ms') + }) + }) + + describe('createConnectionError', () => { + it('should create connection errors with device context', () => { + const error = ErrorUtils.createConnectionError('device123') + expect(error.message).toBe('Failed to connect to device device123') + }) + + it('should include cause if provided', () => { + const cause = new Error('Network unavailable') + const error = ErrorUtils.createConnectionError('device123', cause) + expect(error.message).toBe('Failed to connect to device device123: Network unavailable') + }) + }) + + describe('createCommandError', () => { + it('should create command errors with context', () => { + const error = ErrorUtils.createCommandError('turnOn', 'device123') + expect(error.message).toBe('Command \'turnOn\' failed for device device123') + }) + }) + + describe('withTimeout', () => { + it('should resolve when operation completes within timeout', async () => { + const fastOperation = Promise.resolve('success') + const result = await ErrorUtils.withTimeout(fastOperation, 1000, 'test') + expect(result).toBe('success') + }) + + it('should reject when operation exceeds timeout', async () => { + const slowOperation = new Promise(resolve => setTimeout(resolve, 100)) + await expect(ErrorUtils.withTimeout(slowOperation, 50, 'test')) + .rejects + .toThrow('Operation \'test\' timed out after 50ms') + }) + }) +}) + +describe('logLevel', () => { + it('should export all log levels', () => { + expect(LogLevel.SUCCESS).toBe('success') + expect(LogLevel.DEBUGSUCCESS).toBe('debugsuccess') + expect(LogLevel.WARN).toBe('warn') + expect(LogLevel.DEBUGWARN).toBe('debugwarn') + expect(LogLevel.ERROR).toBe('error') + expect(LogLevel.DEBUGERROR).toBe('debugerror') + expect(LogLevel.DEBUG).toBe('debug') + expect(LogLevel.INFO).toBe('info') + }) +}) diff --git a/src/device.ts b/src/device.ts index 3e8f4db5..8cbd9629 100644 --- a/src/device.ts +++ b/src/device.ts @@ -2,24 +2,90 @@ * * device.ts: Switchbot BLE API registration. */ -import type * as Noble from '@stoprocent/noble' +import type { Characteristic, Noble, Peripheral, Service } from '@stoprocent/noble' -import type { batteryCirculatorFanServiceData, blindTiltServiceData, botServiceData, ceilingLightProServiceData, ceilingLightServiceData, colorBulbServiceData, contactSensorServiceData, curtain3ServiceData, curtainServiceData, hub2ServiceData, humidifier2ServiceData, humidifierServiceData, keypadDetectorServiceData, lockProServiceData, lockServiceData, meterPlusServiceData, meterProCO2ServiceData, meterProServiceData, meterServiceData, motionSensorServiceData, outdoorMeterServiceData, plugMiniJPServiceData, plugMiniUSServiceData, relaySwitch1PMServiceData, relaySwitch1ServiceData, remoteServiceData, robotVacuumCleanerServiceData, stripLightServiceData, waterLeakDetectorServiceData } from './types/bledevicestatus.js' +import type { airPurifierServiceData, airPurifierTableServiceData, batteryCirculatorFanServiceData, blindTiltServiceData, botServiceData, ceilingLightProServiceData, ceilingLightServiceData, colorBulbServiceData, contactSensorServiceData, curtain3ServiceData, curtainServiceData, hub2ServiceData, hub3ServiceData, humidifier2ServiceData, humidifierServiceData, keypadDetectorServiceData, lockProServiceData, lockServiceData, meterPlusServiceData, meterProCO2ServiceData, meterProServiceData, meterServiceData, motionSensorServiceData, outdoorMeterServiceData, plugMiniJPServiceData, plugMiniUSServiceData, relaySwitch1PMServiceData, relaySwitch1ServiceData, remoteServiceData, robotVacuumCleanerServiceData, stripLightServiceData, waterLeakDetectorServiceData } from './types/ble.js' import { Buffer } from 'node:buffer' import * as Crypto from 'node:crypto' import { EventEmitter } from 'node:events' -import { parameterChecker } from './parameter-checker.js' import { CHAR_UUID_DEVICE, CHAR_UUID_NOTIFY, CHAR_UUID_WRITE, READ_TIMEOUT_MSEC, SERV_UUID_PRIMARY, WoSmartLockCommands, WoSmartLockProCommands, WRITE_TIMEOUT_MSEC } from './settings.js' -const HUMIDIFIER_COMMAND_HEADER = '5701' -const TURN_ON_KEY = `${HUMIDIFIER_COMMAND_HEADER}0101` -const TURN_OFF_KEY = `${HUMIDIFIER_COMMAND_HEADER}0102` -const INCREASE_KEY = `${HUMIDIFIER_COMMAND_HEADER}0103` -const DECREASE_KEY = `${HUMIDIFIER_COMMAND_HEADER}0104` -const SET_AUTO_MODE_KEY = `${HUMIDIFIER_COMMAND_HEADER}0105` -const SET_MANUAL_MODE_KEY = `${HUMIDIFIER_COMMAND_HEADER}0106` +/** + * Command constants for various SwitchBot devices. + * Using readonly arrays to ensure immutability and better type safety. + */ +const DEVICE_COMMANDS = { + BLIND_TILT: { + OPEN: [0x57, 0x0F, 0x45, 0x01, 0x05, 0xFF, 0x32] as const, + CLOSE_UP: [0x57, 0x0F, 0x45, 0x01, 0x05, 0xFF, 0x64] as const, + CLOSE_DOWN: [0x57, 0x0F, 0x45, 0x01, 0x05, 0xFF, 0x00] as const, + PAUSE: [0x57, 0x0F, 0x45, 0x01, 0x00, 0xFF] as const, + }, + BULB: { + BASE: [0x57, 0x0F, 0x47, 0x01] as const, + READ_STATE: [0x57, 0x0F, 0x48, 0x01] as const, + TURN_ON: [0x01, 0x01] as const, + TURN_OFF: [0x01, 0x02] as const, + SET_BRIGHTNESS: [0x02, 0x14] as const, + SET_COLOR_TEMP: [0x02, 0x17] as const, + SET_RGB: [0x02, 0x12] as const, + }, + HUMIDIFIER: { + HEADER: '5701' as const, + TURN_ON: '570101' as const, + TURN_OFF: '570102' as const, + INCREASE: '570103' as const, + DECREASE: '570104' as const, + SET_AUTO_MODE: '570105' as const, + SET_MANUAL_MODE: '570106' as const, + }, + AIR_PURIFIER: { + TURN_ON: [0x57, 0x01, 0x01] as const, + TURN_OFF: [0x57, 0x01, 0x02] as const, + SET_MODE: [0x57, 0x02] as const, + SET_SPEED: [0x57, 0x03] as const, + }, + // Common commands used across multiple devices + COMMON: { + POWER_ON: [0x57, 0x01, 0x01] as const, + POWER_OFF: [0x57, 0x01, 0x02] as const, + }, +} as const + +/** + * Air quality level constants for air purifier devices. + */ +const AIR_QUALITY_LEVELS = { + EXCELLENT: 'excellent', + GOOD: 'good', + FAIR: 'fair', + POOR: 'poor', +} as const + +/** + * Air purifier mode constants. + */ +const AIR_PURIFIER_MODES = { + MANUAL: 'manual', + AUTO: 'auto', + SLEEP: 'sleep', + LEVEL_1: 'level_1', + LEVEL_2: 'level_2', + LEVEL_3: 'level_3', +} as const + +// Legacy constants for backward compatibility +const BLIND_TILT_COMMANDS = DEVICE_COMMANDS.BLIND_TILT +const BULB_COMMANDS = DEVICE_COMMANDS.BULB +const HUMIDIFIER_COMMAND_HEADER = DEVICE_COMMANDS.HUMIDIFIER.HEADER +const TURN_ON_KEY = DEVICE_COMMANDS.HUMIDIFIER.TURN_ON +const TURN_OFF_KEY = DEVICE_COMMANDS.HUMIDIFIER.TURN_OFF +const INCREASE_KEY = DEVICE_COMMANDS.HUMIDIFIER.INCREASE +const DECREASE_KEY = DEVICE_COMMANDS.HUMIDIFIER.DECREASE +const SET_AUTO_MODE_KEY = DEVICE_COMMANDS.HUMIDIFIER.SET_AUTO_MODE +const SET_MANUAL_MODE_KEY = DEVICE_COMMANDS.HUMIDIFIER.SET_MANUAL_MODE export type MacAddress = string @@ -27,7 +93,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 | humidifier2ServiceData | robotVacuumCleanerServiceData | keypadDetectorServiceData | relaySwitch1PMServiceData | relaySwitch1ServiceData | remoteServiceData + serviceData: airPurifierServiceData | airPurifierTableServiceData | botServiceData | colorBulbServiceData | contactSensorServiceData | curtainServiceData | curtain3ServiceData | stripLightServiceData | lockServiceData | lockProServiceData | meterServiceData | meterPlusServiceData | meterProServiceData | meterProCO2ServiceData | motionSensorServiceData | outdoorMeterServiceData | plugMiniUSServiceData | plugMiniJPServiceData | blindTiltServiceData | ceilingLightServiceData | ceilingLightProServiceData | hub2ServiceData | hub3ServiceData | batteryCirculatorFanServiceData | waterLeakDetectorServiceData | humidifierServiceData | humidifier2ServiceData | robotVacuumCleanerServiceData | keypadDetectorServiceData | relaySwitch1PMServiceData | relaySwitch1ServiceData | remoteServiceData [key: string]: unknown } @@ -52,6 +118,7 @@ export declare interface SwitchBotBLEDevice { MeterPro: DeviceInfo MeterProCO2: DeviceInfo Hub2: DeviceInfo + Hub3: DeviceInfo OutdoorMeter: DeviceInfo MotionSensor: DeviceInfo ContactSensor: DeviceInfo @@ -65,12 +132,15 @@ export declare interface SwitchBotBLEDevice { CeilingLightPro: DeviceInfo BlindTilt: DeviceInfo Unknown: DeviceInfo + AirPurifier: DeviceInfo + AirPurifierTable: DeviceInfo } export enum SwitchBotModel { HubMini = 'W0202200', HubPlus = 'SwitchBot Hub S1', Hub2 = 'W3202100', + Hub3 = 'W3302100', Bot = 'SwitchBot S1', Curtain = 'W0701600', Curtain3 = 'W2400000', @@ -114,6 +184,8 @@ export enum SwitchBotModel { RelaySwitch1 = 'W5502300', RelaySwitch1PM = 'W5502310', Unknown = 'Unknown', + AirPurifier = 'W5302300', + AirPurifierTable = 'W5302310', } export enum SwitchBotBLEModel { @@ -127,6 +199,7 @@ export enum SwitchBotBLEModel { MeterPro = '4', MeterProCO2 = '5', Hub2 = 'v', + Hub3 = 'V', OutdoorMeter = 'w', MotionSensor = 's', ContactSensor = 'd', @@ -145,11 +218,14 @@ export enum SwitchBotBLEModel { RelaySwitch1PM = '<', Remote = 'b', Unknown = 'Unknown', + AirPurifier = '+', + AirPurifierTable = '7', } export enum SwitchBotBLEModelName { Bot = 'WoHand', Hub2 = 'WoHub2', + Hub3 = 'WoHub3', ColorBulb = 'WoBulb', Curtain = 'WoCurtain', Curtain3 = 'WoCurtain3', @@ -174,12 +250,15 @@ export enum SwitchBotBLEModelName { RelaySwitch1 = 'WoRelaySwitch1Plus', RelaySwitch1PM = 'WoRelaySwitch1PM', Remote = 'WoRemote', + AirPurifier = 'WoAirPurifier', + AirPurifierTable = 'WoAirPurifierTable', Unknown = 'Unknown', } export enum SwitchBotBLEModelFriendlyName { Bot = 'Bot', Hub2 = 'Hub 2', + Hub3 = 'Hub 3', ColorBulb = 'Color Bulb', Curtain = 'Curtain', Curtain3 = 'Curtain 3', @@ -206,7 +285,13 @@ export enum SwitchBotBLEModelFriendlyName { RelaySwitch1 = 'Relay Switch 1', RelaySwitch1PM = 'Relay Switch 1PM', Remote = 'Remote', + AirPurifier = 'Air Purifier', + AirPurifierTable = 'Air Purifier Table', Unknown = 'Unknown', + AirPurifierVOC = 'Air Purifier VOC', + AirPurifierTableVOC = 'Air Purifier Table VOC', + AirPurifierPM2_5 = 'Air Purifier PM2.5', + AirPurifierTablePM2_5 = 'Air Purifier Table PM2.5', } export interface Params { @@ -214,7 +299,7 @@ export interface Params { model?: string id?: string quick?: boolean - noble?: typeof Noble + noble?: Noble } export interface ErrorObject { @@ -223,15 +308,14 @@ export interface ErrorObject { } export interface Chars { - write: Noble.Characteristic | null - notify: Noble.Characteristic | null - device: Noble.Characteristic | null + write: Characteristic | null + notify: Characteristic | null + device: Characteristic | null } export interface NobleTypes { - noble: typeof Noble - state: 'unknown' | 'resetting' | 'unsupported' | 'unauthorized' | 'poweredOff' | 'poweredOn' - peripheral: Noble.Peripheral + noble: Noble + peripheral: Peripheral } export interface ServiceData { @@ -269,11 +353,208 @@ export enum LogLevel { INFO = 'info', } +/** + * Utility class for comprehensive input validation with improved error messages. + */ +export class ValidationUtils { + /** + * Validates percentage value (0-100). + * @param value - The value to validate + * @param paramName - The parameter name for error reporting + * @throws {RangeError} When value is not within valid range + * @throws {TypeError} When value is not a number + */ + static validatePercentage(value: number, paramName: string = 'value'): void { + if (typeof value !== 'number' || Number.isNaN(value)) { + throw new TypeError(`${paramName} must be a valid number, got: ${value}`) + } + if (value < 0 || value > 100) { + throw new RangeError(`${paramName} must be between 0 and 100 inclusive, got: ${value}`) + } + } + + /** + * Validates RGB color value (0-255). + * @param value - The color value to validate + * @param colorName - The color name for error reporting + * @throws {RangeError} When value is not within valid range + * @throws {TypeError} When value is not a number + */ + static validateRGB(value: number, colorName: string = 'color'): void { + if (typeof value !== 'number' || Number.isNaN(value)) { + throw new TypeError(`${colorName} must be a valid number, got: ${value}`) + } + if (!Number.isInteger(value) || value < 0 || value > 255) { + throw new RangeError(`${colorName} must be an integer between 0 and 255 inclusive, got: ${value}`) + } + } + + /** + * Validates buffer and throws descriptive error. + * @param buffer - The buffer to validate + * @param expectedLength - Optional expected length + * @param paramName - The parameter name for error reporting + * @throws {TypeError} When buffer is not a Buffer + * @throws {RangeError} When buffer length doesn't match expected + */ + static validateBuffer(buffer: any, expectedLength?: number, paramName: string = 'buffer'): asserts buffer is Buffer { + if (!Buffer.isBuffer(buffer)) { + throw new TypeError(`${paramName} must be a Buffer instance, got: ${typeof buffer}`) + } + if (expectedLength !== undefined && buffer.length !== expectedLength) { + throw new RangeError(`${paramName} must have exactly ${expectedLength} bytes, got: ${buffer.length} bytes`) + } + } + + /** + * Validates string input with comprehensive checks. + * @param value - The value to validate + * @param paramName - The parameter name for error reporting + * @param minLength - Minimum required length + * @param maxLength - Optional maximum length + * @throws {TypeError} When value is not a string + * @throws {RangeError} When string length is invalid + */ + static validateString( + value: any, + paramName: string = 'value', + minLength: number = 1, + maxLength?: number, + ): asserts value is string { + if (typeof value !== 'string') { + throw new TypeError(`${paramName} must be a string, got: ${typeof value}`) + } + if (value.length < minLength) { + throw new RangeError(`${paramName} must have at least ${minLength} character(s), got: ${value.length}`) + } + if (maxLength !== undefined && value.length > maxLength) { + throw new RangeError(`${paramName} must have at most ${maxLength} character(s), got: ${value.length}`) + } + } + + /** + * Validates numeric range with enhanced checks. + * @param value - The value to validate + * @param min - Minimum allowed value + * @param max - Maximum allowed value + * @param paramName - The parameter name for error reporting + * @param mustBeInteger - Whether the value must be an integer + * @throws {TypeError} When value is not a number + * @throws {RangeError} When value is outside valid range + */ + static validateRange( + value: number, + min: number, + max: number, + paramName: string = 'value', + mustBeInteger: boolean = false, + ): void { + if (typeof value !== 'number' || Number.isNaN(value)) { + throw new TypeError(`${paramName} must be a valid number, got: ${value}`) + } + if (mustBeInteger && !Number.isInteger(value)) { + throw new TypeError(`${paramName} must be an integer, got: ${value}`) + } + if (value < min || value > max) { + throw new RangeError(`${paramName} must be between ${min} and ${max} inclusive, got: ${value}`) + } + } + + /** + * Validates MAC address format. + * @param address - The MAC address to validate + * @param paramName - The parameter name for error reporting + * @throws {TypeError} When address is not a string + * @throws {Error} When address format is invalid + */ + static validateMacAddress(address: any, paramName: string = 'address'): asserts address is string { + if (typeof address !== 'string') { + throw new TypeError(`${paramName} must be a string`) + } + const macRegex = /^(?:[0-9A-F]{2}[:-]){5}[0-9A-F]{2}$|^[0-9A-F]{12}$/i + if (!macRegex.test(address)) { + throw new Error(`${paramName} must be a valid MAC address format, got: ${address}`) + } + } + + /** + * Validates that a value is one of the allowed enum values. + * @param value - The value to validate + * @param allowedValues - Array of allowed values + * @param paramName - The parameter name for error reporting + * @throws {Error} When value is not in allowed values + */ + static validateEnum(value: any, allowedValues: readonly T[], paramName: string = 'value'): asserts value is T { + if (!allowedValues.includes(value)) { + throw new Error(`${paramName} must be one of: ${allowedValues.join(', ')}, got: ${value}`) + } + } +} + +/** + * Enhanced error handling utilities. + */ +export class ErrorUtils { + /** + * Creates a timeout error with context. + * @param operation - The operation that timed out + * @param timeoutMs - The timeout duration in milliseconds + * @returns A descriptive timeout error + */ + static createTimeoutError(operation: string, timeoutMs: number): Error { + return new Error(`Operation '${operation}' timed out after ${timeoutMs}ms`) + } + + /** + * Creates a connection error with context. + * @param deviceId - The device ID that failed to connect + * @param cause - The underlying cause of the connection failure + * @returns A descriptive connection error + */ + static createConnectionError(deviceId: string, cause?: Error): Error { + const message = `Failed to connect to device ${deviceId}` + return cause ? new Error(`${message}: ${cause.message}`) : new Error(message) + } + + /** + * Creates a command error with context. + * @param command - The command that failed + * @param deviceId - The device ID + * @param cause - The underlying cause + * @returns A descriptive command error + */ + static createCommandError(command: string, deviceId: string, cause?: Error): Error { + const message = `Command '${command}' failed for device ${deviceId}` + return cause ? new Error(`${message}: ${cause.message}`) : new Error(message) + } + + /** + * Wraps an async operation with timeout and enhanced error handling. + * @param operation - The async operation to wrap + * @param timeoutMs - Timeout in milliseconds + * @param operationName - Name of the operation for error messages + * @returns Promise that resolves with the operation result or rejects with timeout + */ + static async withTimeout( + operation: Promise, + timeoutMs: number, + operationName: string, + ): Promise { + const timeoutPromise = new Promise((_, reject) => { + setTimeout(() => { + reject(this.createTimeoutError(operationName, timeoutMs)) + }, timeoutMs) + }) + + return Promise.race([operation, timeoutPromise]) + } +} + /** * Represents a Switchbot Device. */ export class SwitchbotDevice extends EventEmitter { - private noble: NobleTypes['noble'] + private noble: Noble private peripheral: NobleTypes['peripheral'] private characteristics: Chars | null = null private deviceId!: string @@ -283,16 +564,16 @@ export class SwitchbotDevice extends EventEmitter { private deviceFriendlyName!: SwitchBotBLEModelFriendlyName private explicitlyConnected = false private isConnected = false - private onNotify: (buf: Buffer) => void = () => {} - private onDisconnect: () => Promise = async () => {} - private onConnect: () => Promise = async () => {} + private onNotify: (buf: Buffer) => void = () => { } + private onDisconnect: () => Promise = async () => { } + private onConnect: () => Promise = async () => { } /** * Initializes a new instance of the SwitchbotDevice class. * @param peripheral The peripheral object from noble. * @param noble The Noble object. */ - constructor(peripheral: NobleTypes['peripheral'], noble: NobleTypes['noble']) { + constructor(peripheral: NobleTypes['peripheral'], noble: Noble) { super() this.peripheral = peripheral this.noble = noble @@ -380,8 +661,8 @@ export class SwitchbotDevice extends EventEmitter { * @returns A Promise that resolves when the connection is complete. */ public async internalConnect(): Promise { - if (this.noble._state !== 'poweredOn') { - throw new Error(`The Bluetooth status is ${this.noble._state}, not poweredOn.`) + if (this.noble.state !== 'poweredOn') { + throw new Error(`The Bluetooth status is ${this.noble.state}, not poweredOn.`) } const state = this.connectionState @@ -423,7 +704,7 @@ export class SwitchbotDevice extends EventEmitter { }) try { - const services = await Promise.race([this.discoverServices(), timeoutPromise]) as Noble.Service[] + const services = await Promise.race([this.discoverServices(), timeoutPromise]) as NobleTypes['peripheral']['services'] const chars: Chars = { write: null, notify: null, device: null } for (const service of services) { @@ -455,7 +736,7 @@ export class SwitchbotDevice extends EventEmitter { * Discovers the device services. * @returns A Promise that resolves with the list of services. */ - public async discoverServices(): Promise { + public async discoverServices(): Promise { try { const services = await this.peripheral.discoverServicesAsync([]) const primaryServices = services.filter(s => s.uuid === SERV_UUID_PRIMARY) @@ -474,8 +755,9 @@ export class SwitchbotDevice extends EventEmitter { * @param service The service to discover characteristics for. * @returns A Promise that resolves with the list of characteristics. */ - private async discoverCharacteristics(service: Noble.Service): Promise { - return await service.discoverCharacteristicsAsync([]) + // Discover characteristics without extra async/await + private discoverCharacteristics(service: Service): Promise { + return service.discoverCharacteristicsAsync([]) } /** @@ -540,12 +822,18 @@ export class SwitchbotDevice extends EventEmitter { */ async getDeviceName(): Promise { await this.internalConnect() - if (!this.characteristics?.device) { - throw new Error(`The device does not support the characteristic UUID 0x${CHAR_UUID_DEVICE}.`) + try { + if (!this.characteristics?.device) { + throw new Error(`Characteristic ${CHAR_UUID_DEVICE} not supported`) + } + const buf = await this.readCharacteristic(this.characteristics.device) + return buf.toString('utf8') + } catch (error: any) { + const deviceContext = `device ${this.deviceId || 'unknown'}` + throw ErrorUtils.createCommandError('getDeviceName', deviceContext, error) + } finally { + await this.internalDisconnect() } - const buf = await this.readCharacteristic(this.characteristics.device) - await this.internalDisconnect() - return buf.toString('utf8') } /** @@ -554,23 +842,26 @@ export class SwitchbotDevice extends EventEmitter { * @returns A Promise that resolves when the name is set. */ async setDeviceName(name: string): Promise { - const valid = parameterChecker.check( - { name }, - { name: { required: true, type: 'string', minBytes: 1, maxBytes: 100 } }, - true, - ) + ValidationUtils.validateString(name, 'name', 1) - if (!valid) { - throw new Error(parameterChecker.error!.message) + // Additional validation for device name length + const nameBuffer = Buffer.from(name, 'utf8') + if (nameBuffer.length > 100) { + throw new RangeError('Device name cannot exceed 100 bytes when encoded as UTF-8') } - const buf = Buffer.from(name, 'utf8') await this.internalConnect() - if (!this.characteristics?.device) { - throw new Error(`The device does not support the characteristic UUID 0x${CHAR_UUID_DEVICE}.`) + try { + if (!this.characteristics?.device) { + throw new Error(`Characteristic ${CHAR_UUID_DEVICE} not supported`) + } + await this.writeCharacteristic(this.characteristics.device, nameBuffer) + } catch (error: any) { + const deviceContext = `device ${this.deviceId || 'unknown'}` + throw ErrorUtils.createCommandError('setDeviceName', deviceContext, error) + } finally { + await this.internalDisconnect() } - await this.writeCharacteristic(this.characteristics.device, buf) - await this.internalDisconnect() } /** @@ -579,20 +870,24 @@ export class SwitchbotDevice extends EventEmitter { * @returns A Promise that resolves with the response buffer. */ async command(reqBuf: Buffer): Promise { - if (!Buffer.isBuffer(reqBuf)) { - throw new TypeError('The specified data is not acceptable for writing.') - } + ValidationUtils.validateBuffer(reqBuf, undefined, 'reqBuf') await this.internalConnect() if (!this.characteristics?.write) { - throw new Error('No characteristics available.') + throw new Error('No write characteristic available for command execution') } - await this.writeCharacteristic(this.characteristics.write, reqBuf) - const resBuf = await this.waitForCommandResponse() - await this.internalDisconnect() - - return resBuf + try { + await this.writeCharacteristic(this.characteristics.write, reqBuf) + const resBuf = await this.waitForCommandResponse() + return resBuf + } catch (error: any) { + const deviceContext = `device ${this.deviceId || 'unknown'}` + // Use ErrorUtils for enriched error context + throw ErrorUtils.createCommandError('execute command', deviceContext, error) + } finally { + await this.internalDisconnect() + } } /** @@ -620,42 +915,41 @@ export class SwitchbotDevice extends EventEmitter { } /** - * Reads data from a characteristic with a timeout. + * Reads data from a characteristic with enhanced timeout and error handling. * @param char The characteristic to read from. * @returns A Promise that resolves with the data buffer. */ - private async readCharacteristic(char: Noble.Characteristic): Promise { - const timer = setTimeout(() => { - throw new Error('READ_TIMEOUT') - }, READ_TIMEOUT_MSEC) - + private async readCharacteristic(char: Characteristic): Promise { try { - const result = await char.readAsync() - clearTimeout(timer) - return result + return await ErrorUtils.withTimeout( + char.readAsync(), + READ_TIMEOUT_MSEC, + `read characteristic ${char.uuid}`, + ) } catch (error) { - clearTimeout(timer) - throw error + const deviceContext = `device ${this.deviceId || 'unknown'}` + throw ErrorUtils.createCommandError(`read characteristic ${char.uuid}`, deviceContext, error as Error) } } /** - * Writes data to a characteristic with a timeout. + * Writes data to a characteristic with enhanced timeout and error handling. * @param char The characteristic to write to. * @param buf The data buffer. * @returns A Promise that resolves when the write is complete. */ - private async writeCharacteristic(char: Noble.Characteristic, buf: Buffer): Promise { - const timer = setTimeout(() => { - throw new Error('WRITE_TIMEOUT') - }, WRITE_TIMEOUT_MSEC) + private async writeCharacteristic(char: Characteristic, buf: Buffer): Promise { + ValidationUtils.validateBuffer(buf, undefined, 'write buffer') try { - await char.writeAsync(buf, false) - clearTimeout(timer) + return await ErrorUtils.withTimeout( + char.writeAsync(buf, false), + WRITE_TIMEOUT_MSEC, + `write to characteristic ${char.uuid}`, + ) } catch (error) { - clearTimeout(timer) - throw error + const deviceContext = `device ${this.deviceId || 'unknown'}` + throw ErrorUtils.createCommandError(`write to characteristic ${char.uuid}`, deviceContext, error as Error) } } } @@ -664,7 +958,7 @@ export class SwitchbotDevice extends EventEmitter { * Represents the advertising data parser for SwitchBot devices. */ export class Advertising { - constructor() {} + constructor() { } /** * Parses the advertisement data coming from SwitchBot device. @@ -720,10 +1014,11 @@ export class Advertising { * Validates if the buffer is a valid Buffer object with a minimum length. * * @param {any} buffer - The buffer to validate. + * @param {number} minLength - The minimum required length. * @returns {boolean} - True if the buffer is valid, false otherwise. */ - private static validateBuffer(buffer: any): boolean { - return buffer && Buffer.isBuffer(buffer) && buffer.length >= 3 + private static validateBuffer(buffer: any, minLength: number = 3): boolean { + return buffer && Buffer.isBuffer(buffer) && buffer.length >= minLength } /** @@ -761,8 +1056,14 @@ export class Advertising { return WoSensorTHProCO2.parseServiceData(serviceData, manufacturerData, emitLog) case SwitchBotBLEModel.Hub2: return WoHub2.parseServiceData(manufacturerData, emitLog) + case SwitchBotBLEModel.Hub3: + return WoHub3.parseServiceData(manufacturerData, emitLog) case SwitchBotBLEModel.OutdoorMeter: return WoIOSensorTH.parseServiceData(serviceData, manufacturerData, emitLog) + case SwitchBotBLEModel.AirPurifier: + return WoAirPurifier.parseServiceData(serviceData, manufacturerData, emitLog) + case SwitchBotBLEModel.AirPurifierTable: + return WoAirPurifierTable.parseServiceData(serviceData, manufacturerData, emitLog) case SwitchBotBLEModel.MotionSensor: return WoPresence.parseServiceData(serviceData, emitLog) case SwitchBotBLEModel.ContactSensor: @@ -879,7 +1180,7 @@ export class WoBlindTilt extends SwitchbotDevice { * @returns {Promise} */ async open(): Promise { - await this.operateBlindTilt([0x57, 0x0F, 0x45, 0x01, 0x05, 0xFF, 0x32]) + await this.operateBlindTilt([...BLIND_TILT_COMMANDS.OPEN]) } /** @@ -887,7 +1188,7 @@ export class WoBlindTilt extends SwitchbotDevice { * @returns {Promise} */ async closeUp(): Promise { - await this.operateBlindTilt([0x57, 0x0F, 0x45, 0x01, 0x05, 0xFF, 0x64]) + await this.operateBlindTilt([...BLIND_TILT_COMMANDS.CLOSE_UP]) } /** @@ -895,7 +1196,7 @@ export class WoBlindTilt extends SwitchbotDevice { * @returns {Promise} */ async closeDown(): Promise { - await this.operateBlindTilt([0x57, 0x0F, 0x45, 0x01, 0x05, 0xFF, 0x00]) + await this.operateBlindTilt([...BLIND_TILT_COMMANDS.CLOSE_DOWN]) } /** @@ -985,7 +1286,7 @@ export class WoBlindTilt extends SwitchbotDevice { * @returns {Promise} */ async pause(): Promise { - await this.operateBlindTilt([0x57, 0x0F, 0x45, 0x01, 0x00, 0xFF]) + await this.operateBlindTilt([...BLIND_TILT_COMMANDS.PAUSE]) } /** @@ -995,13 +1296,11 @@ export class WoBlindTilt extends SwitchbotDevice { * @returns {Promise} */ async runToPos(percent: number, mode: number): Promise { - if (typeof percent !== 'number' || percent < 0 || percent > 100) { - throw new RangeError('Percent must be a number between 0 and 100') - } - if (typeof mode !== 'number' || mode < 0 || mode > 1) { - throw new RangeError('Mode must be a number between 0 and 1') - } - await this.operateBlindTilt([0x57, 0x0F, 0x45, 0x01, 0x05, mode, percent]) + ValidationUtils.validatePercentage(percent, 'percent') + ValidationUtils.validateRange(mode, 0, 1, 'mode', true) + + const adjustedPercent = this.reverse ? 100 - percent : percent + await this.operateBlindTilt([0x57, 0x0F, 0x45, 0x01, 0x05, mode, adjustedPercent]) } /** @@ -1088,7 +1387,7 @@ export class WoBulb extends SwitchbotDevice { * @returns {Promise} - Resolves with a boolean indicating whether the bulb is ON (true) or OFF (false). */ async readState(): Promise { - return this.operateBulb([0x57, 0x0F, 0x48, 0x01]) + return this.operateBulb([...BULB_COMMANDS.READ_STATE]) } /** @@ -1098,8 +1397,7 @@ export class WoBulb extends SwitchbotDevice { * @private */ public async setState(reqByteArray: number[]): Promise { - const base = [0x57, 0x0F, 0x47, 0x01] - return this.operateBulb(base.concat(reqByteArray)) + return this.operateBulb([...BULB_COMMANDS.BASE, ...reqByteArray]) } /** @@ -1107,7 +1405,7 @@ export class WoBulb extends SwitchbotDevice { * @returns {Promise} - Resolves with a boolean indicating whether the bulb is ON (true). */ async turnOn(): Promise { - return this.setState([0x01, 0x01]) + return this.setState([...BULB_COMMANDS.TURN_ON]) } /** @@ -1115,7 +1413,7 @@ export class WoBulb extends SwitchbotDevice { * @returns {Promise} - Resolves with a boolean indicating whether the bulb is OFF (false). */ async turnOff(): Promise { - return this.setState([0x01, 0x02]) + return this.setState([...BULB_COMMANDS.TURN_OFF]) } /** @@ -1124,10 +1422,8 @@ export class WoBulb extends SwitchbotDevice { * @returns {Promise} - Resolves with a boolean indicating whether the operation was successful. */ async setBrightness(brightness: number): Promise { - if (brightness < 0 || brightness > 100) { - throw new RangeError('Brightness must be between 0 and 100') - } - return this.setState([0x02, 0x14, brightness]) + ValidationUtils.validatePercentage(brightness, 'brightness') + return this.setState([...BULB_COMMANDS.SET_BRIGHTNESS, brightness]) } /** @@ -1136,10 +1432,8 @@ export class WoBulb extends SwitchbotDevice { * @returns {Promise} - Resolves with a boolean indicating whether the operation was successful. */ async setColorTemperature(color_temperature: number): Promise { - if (color_temperature < 0 || color_temperature > 100) { - throw new RangeError('Color temperature must be between 0 and 100') - } - return this.setState([0x02, 0x17, color_temperature]) + ValidationUtils.validatePercentage(color_temperature, 'color_temperature') + return this.setState([...BULB_COMMANDS.SET_COLOR_TEMP, color_temperature]) } /** @@ -1151,10 +1445,11 @@ export class WoBulb extends SwitchbotDevice { * @returns {Promise} - Resolves with a boolean indicating whether the operation was successful. */ async setRGB(brightness: number, red: number, green: number, blue: number): Promise { - if (brightness < 0 || brightness > 100 || red < 0 || red > 255 || green < 0 || green > 255 || blue < 0 || blue > 255) { - throw new RangeError('Invalid RGB or brightness values') - } - return this.setState([0x02, 0x12, brightness, red, green, blue]) + ValidationUtils.validatePercentage(brightness, 'brightness') + ValidationUtils.validateRGB(red, 'red') + ValidationUtils.validateRGB(green, 'green') + ValidationUtils.validateRGB(blue, 'blue') + return this.setState([...BULB_COMMANDS.SET_RGB, brightness, red, green, blue]) } /** @@ -1722,6 +2017,52 @@ export class WoHub2 extends SwitchbotDevice { } } +/** + * Class representing a WoHub3 device. + * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/meter.md + */ +export class WoHub3 extends SwitchbotDevice { + /** + * Parses the service data for WoHub3. + * @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( + manufacturerData: Buffer, + emitLog: (level: string, message: string) => void, + ): Promise { + if (manufacturerData.length !== 16) { + emitLog('debugerror', `[parseServiceDataForWoHub3] Buffer length ${manufacturerData.length} !== 16!`) + return null + } + + const [byte0, byte1, byte2, , , , , , , , , , byte12] = manufacturerData + + const tempSign = byte1 & 0b10000000 ? 1 : -1 + const tempC = tempSign * ((byte1 & 0b01111111) + (byte0 & 0b00001111) / 10) + const tempF = Math.round(((tempC * 9) / 5 + 32) * 10) / 10 + const lightLevel = byte12 & 0b11111 + + const data: hub3ServiceData = { + model: SwitchBotBLEModel.Hub3, + modelName: SwitchBotBLEModelName.Hub3, + modelFriendlyName: SwitchBotBLEModelFriendlyName.Hub3, + celsius: tempC, + fahrenheit: tempF, + fahrenheit_mode: !!(byte2 & 0b10000000), + humidity: byte2 & 0b01111111, + lightLevel, + } + + return data + } + + constructor(peripheral: NobleTypes['peripheral'], noble: NobleTypes['noble']) { + super(peripheral, noble) + } +} + /** * Class representing a WoHumi device. * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/tree/latest/devicetypes @@ -2791,8 +3132,7 @@ export class WoSensorTHProCO2 extends SwitchbotDevice { battery: byte2 & 0b01111111, co2: byte6, } as meterProCO2ServiceData - } - else { + } else { const [mdByte10, mdByte11, mdByte12] = [ manufacturerData.readUInt8(10), manufacturerData.readUInt8(11), @@ -3299,6 +3639,7 @@ export class WoStrip extends SwitchbotDevice { red: byte3, green: byte4, blue: byte5, + color_temperature: 0, // Add a default value or extract from serviceData if available delay: byte8 & 0b10000000, preset: byte8 & 0b00001000, color_mode: byte8 & 0b00000111, @@ -3403,3 +3744,303 @@ export class WoStrip extends SwitchbotDevice { } } } + +/** + * Class representing a SwitchBot Air Purifier device. + * @extends SwitchbotDevice + */ +export class WoAirPurifier extends SwitchbotDevice { + /** + * Parses service data for air purifier devices. + * @param {Buffer | null} serviceData - The service data buffer. + * @param {Buffer | null} manufacturerData - The manufacturer data buffer. + * @param {Function} emitLog - The function to emit log messages. + * @returns {airPurifierServiceData | null} - The parsed service data or null. + */ + static parseServiceData(serviceData: Buffer | null, manufacturerData: Buffer | null, emitLog?: (level: string, message: string) => void): airPurifierServiceData | null { + if (!manufacturerData || manufacturerData.length < 14) { + return null + } + + const deviceData = manufacturerData.subarray(6) + + if (deviceData.length < 8) { + return null + } + + const sequenceNumber = deviceData[0] + const isOn = Boolean(deviceData[1] & 0b10000000) + const mode = deviceData[1] & 0b00000111 + const isAqiValid = Boolean(deviceData[2] & 0b00000100) + const childLock = Boolean(deviceData[2] & 0b00000010) + const speed = deviceData[3] & 0b01111111 + const aqiLevelRaw = (deviceData[4] & 0b00000110) >> 1 + const workTime = (deviceData[5] << 8) | deviceData[6] + const errCode = deviceData[7] + + // Map AQI level to string using the defined constant + const aqiLevelValues = [ + AIR_QUALITY_LEVELS.EXCELLENT, + AIR_QUALITY_LEVELS.GOOD, + AIR_QUALITY_LEVELS.FAIR, + AIR_QUALITY_LEVELS.POOR, + ] + const aqiLevel = aqiLevelValues[aqiLevelRaw] || 'unknown' + + // Determine mode based on mode value and speed + let modeString: string | null = null + if (mode === 1) { + if (speed >= 0 && speed <= 33) { + modeString = AIR_PURIFIER_MODES.LEVEL_1 + } else if (speed >= 34 && speed <= 66) { + modeString = AIR_PURIFIER_MODES.LEVEL_2 + } else { + modeString = AIR_PURIFIER_MODES.LEVEL_3 + } + } else if (mode > 1 && mode <= 4) { + const modeMap = [null, null, 'auto', 'sleep', 'manual'] + modeString = modeMap[mode + 2] || null + } + + if (emitLog) { + emitLog('debug', `Air Purifier Service Data: isOn=${isOn}, mode=${modeString}, speed=${speed}, AQI=${aqiLevel}`) + } + + return { + model: SwitchBotBLEModel.AirPurifier, + modelName: SwitchBotBLEModelName.AirPurifier, + modelFriendlyName: SwitchBotBLEModelFriendlyName.AirPurifier, + isOn, + mode: modeString, + isAqiValid, + child_lock: childLock, + speed, + aqi_level: aqiLevel, + filter_element_working_time: workTime, + err_code: errCode, + sequence_number: sequenceNumber, + } + } + + /** + * Sets the state of the air purifier. + * @param {number[]} reqByteArray - The request byte array. + * @returns {Promise} - Resolves with a boolean indicating whether the operation was successful. + * @private + */ + public async setState(reqByteArray: number[]): Promise { + return this.operateAirPurifier(reqByteArray) + } + + /** + * Turns the air purifier on. + * @returns {Promise} - Resolves with true if the air purifier is turned on. + */ + async turnOn(): Promise { + return this.setState([...DEVICE_COMMANDS.AIR_PURIFIER.TURN_ON]) + } + + /** + * Turns the air purifier off. + * @returns {Promise} - Resolves with true if the air purifier is turned off. + */ + async turnOff(): Promise { + return this.setState([...DEVICE_COMMANDS.AIR_PURIFIER.TURN_OFF]) + } + + /** + * Sets the speed of the air purifier. + * @param {number} speed - The speed value (0-100). + * @returns {Promise} - Resolves with true if the operation was successful. + */ + async setSpeed(speed: number): Promise { + if (typeof speed !== 'number' || speed < 0 || speed > 100) { + throw new TypeError(`Invalid speed value: ${speed}`) + } + return this.setState([...DEVICE_COMMANDS.AIR_PURIFIER.SET_SPEED, speed]) + } + + /** + * Sets the mode of the air purifier. + * @param {number} mode - The mode value (1-4). + * @returns {Promise} - Resolves with true if the operation was successful. + */ + async setMode(mode: number): Promise { + if (typeof mode !== 'number' || mode < 1 || mode > 4) { + throw new TypeError(`Invalid mode value: ${mode}`) + } + return this.setState([...DEVICE_COMMANDS.AIR_PURIFIER.SET_MODE, mode]) + } + + /** + * Operates the air purifier with the given byte array. + * @public + * @param {number[]} bytes - The byte array to send. + * @returns {Promise} - Resolves with true if the operation was successful. + */ + public async operateAirPurifier(bytes: number[]): Promise { + const req_buf = Buffer.from(bytes) + const res_buf = await this.command(req_buf) + + if (res_buf.length !== 2) { + throw new Error(`Expecting a 2-byte response, got instead: 0x${res_buf.toString('hex')}`) + } + + const code = res_buf.readUInt8(1) + if (code === 0x00 || code === 0x80) { + return code === 0x80 + } else { + throw new Error(`The device returned an error: 0x${res_buf.toString('hex')}`) + } + } +} + +/** + * Class representing a SwitchBot Air Purifier Table device. + * @extends SwitchbotDevice + */ +export class WoAirPurifierTable extends SwitchbotDevice { + /** + * Parses service data for air purifier table devices. + * @param {Buffer | null} serviceData - The service data buffer. + * @param {Buffer | null} manufacturerData - The manufacturer data buffer. + * @param {Function} emitLog - The function to emit log messages. + * @returns {airPurifierTableServiceData | null} - The parsed service data or null. + */ + static parseServiceData(serviceData: Buffer | null, manufacturerData: Buffer | null, emitLog?: (level: string, message: string) => void): airPurifierTableServiceData | null { + if (!manufacturerData || manufacturerData.length < 14) { + return null + } + + const deviceData = manufacturerData.subarray(6) + + if (deviceData.length < 8) { + return null + } + + const sequenceNumber = deviceData[0] + const isOn = Boolean(deviceData[1] & 0b10000000) + const mode = deviceData[1] & 0b00000111 + const isAqiValid = Boolean(deviceData[2] & 0b00000100) + const childLock = Boolean(deviceData[2] & 0b00000010) + const speed = deviceData[3] & 0b01111111 + const aqiLevelRaw = (deviceData[4] & 0b00000110) >> 1 + const workTime = (deviceData[5] << 8) | deviceData[6] + const errCode = deviceData[7] + + // Map AQI level to string using the defined constant + const aqiLevelValues = [ + AIR_QUALITY_LEVELS.EXCELLENT, + AIR_QUALITY_LEVELS.GOOD, + AIR_QUALITY_LEVELS.FAIR, + AIR_QUALITY_LEVELS.POOR, + ] + const aqiLevel = aqiLevelValues[aqiLevelRaw] || 'unknown' + + // Determine mode based on mode value and speed + let modeString: string | null = null + if (mode === 1) { + if (speed >= 0 && speed <= 33) { + modeString = AIR_PURIFIER_MODES.LEVEL_1 + } else if (speed >= 34 && speed <= 66) { + modeString = AIR_PURIFIER_MODES.LEVEL_2 + } else { + modeString = AIR_PURIFIER_MODES.LEVEL_3 + } + } else if (mode > 1 && mode <= 4) { + const modeMap = [null, null, 'auto', 'sleep', 'manual'] + modeString = modeMap[mode + 2] || null + } + + if (emitLog) { + emitLog('debug', `Air Purifier Table Service Data: isOn=${isOn}, mode=${modeString}, speed=${speed}, AQI=${aqiLevel}`) + } + + return { + model: SwitchBotBLEModel.AirPurifierTable, + modelName: SwitchBotBLEModelName.AirPurifierTable, + modelFriendlyName: SwitchBotBLEModelFriendlyName.AirPurifierTable, + isOn, + mode: modeString, + isAqiValid, + child_lock: childLock, + speed, + aqi_level: aqiLevel, + filter_element_working_time: workTime, + err_code: errCode, + sequence_number: sequenceNumber, + } + } + + /** + * Sets the state of the air purifier table. + * @param {number[]} reqByteArray - The request byte array. + * @returns {Promise} - Resolves with a boolean indicating whether the operation was successful. + * @private + */ + public async setState(reqByteArray: number[]): Promise { + return this.operateAirPurifierTable(reqByteArray) + } + + /** + * Turns the air purifier table on. + * @returns {Promise} - Resolves with true if the air purifier table is turned on. + */ + async turnOn(): Promise { + return this.setState([...DEVICE_COMMANDS.AIR_PURIFIER.TURN_ON]) + } + + /** + * Turns the air purifier table off. + * @returns {Promise} - Resolves with true if the air purifier table is turned off. + */ + async turnOff(): Promise { + return this.setState([...DEVICE_COMMANDS.AIR_PURIFIER.TURN_OFF]) + } + + /** + * Sets the speed of the air purifier table. + * @param {number} speed - The speed value (0-100). + * @returns {Promise} - Resolves with true if the operation was successful. + */ + async setSpeed(speed: number): Promise { + if (typeof speed !== 'number' || speed < 0 || speed > 100) { + throw new TypeError(`Invalid speed value: ${speed}`) + } + return this.setState([...DEVICE_COMMANDS.AIR_PURIFIER.SET_SPEED, speed]) + } + + /** + * Sets the mode of the air purifier table. + * @param {number} mode - The mode value (1-4). + * @returns {Promise} - Resolves with true if the operation was successful. + */ + async setMode(mode: number): Promise { + if (typeof mode !== 'number' || mode < 1 || mode > 4) { + throw new TypeError(`Invalid mode value: ${mode}`) + } + return this.setState([...DEVICE_COMMANDS.AIR_PURIFIER.SET_MODE, mode]) + } + + /** + * Operates the air purifier table with the given byte array. + * @public + * @param {number[]} bytes - The byte array to send. + * @returns {Promise} - Resolves with true if the operation was successful. + */ + public async operateAirPurifierTable(bytes: number[]): Promise { + const req_buf = Buffer.from(bytes) + const res_buf = await this.command(req_buf) + + if (res_buf.length !== 2) { + throw new Error(`Expecting a 2-byte response, got instead: 0x${res_buf.toString('hex')}`) + } + + const code = res_buf.readUInt8(1) + if (code === 0x00 || code === 0x80) { + return code === 0x80 + } else { + throw new Error(`The device returned an error: 0x${res_buf.toString('hex')}`) + } + } +} diff --git a/src/index.ts b/src/index.ts index 246bb317..0e675c89 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,13 +2,13 @@ * * index.ts: Switchbot BLE API registration. */ +// Primary module exports export * from './device.js' +export { ParameterChecker, parameterChecker } from './parameter-checker.js' +export { updateBaseURL, urls } from './settings.js' export * from './switchbot-ble.js' export * from './switchbot-openapi.js' -export * from './types/bledevicestatus.js' -export * from './types/devicelist.js' -export * from './types/devicepush.js' -export * from './types/deviceresponse.js' -export * from './types/devicestatus.js' -export * from './types/devicewebhookstatus.js' -export * from './types/irdevicelist.js' + +// Type definitions +export * from './types/ble.js' +export * from './types/openapi.js' diff --git a/src/parameter-checker.test.ts b/src/parameter-checker.test.ts new file mode 100644 index 00000000..8226739b --- /dev/null +++ b/src/parameter-checker.test.ts @@ -0,0 +1,65 @@ +import type { Rule } from './device.js' + +import { describe, expect, it } from 'vitest' + +import { ParameterChecker } from './parameter-checker.js' + +describe('parameterChecker', () => { + it('should pass with empty rules and no required object', async () => { + const checker = new ParameterChecker() + const result = await checker.check({}, {}, false) + expect(result).toBe(true) + expect(checker.error).toBeNull() + }) + + it('should fail when required object is missing', async () => { + const checker = new ParameterChecker() + const result = await checker.check(undefined as any, {}, true) + expect(result).toBe(false) + expect(checker.error?.code).toBe('MISSING_REQUIRED') + }) + + it('should fail when required field is missing', async () => { + const checker = new ParameterChecker() + const rules: Record = { + name: { type: 'string', required: true }, + } + const result = await checker.check({}, rules) + expect(result).toBe(false) + expect(checker.error?.code).toBe('MISSING_REQUIRED') + }) + + it('should fail on type mismatch for integer', async () => { + const checker = new ParameterChecker() + const rules: Record = { + age: { type: 'integer', required: true }, + } + const result = await checker.check({ age: 25.5 }, rules) + expect(result).toBe(false) + expect(checker.error?.code).toBe('TYPE_INVALID') + }) + + it('should enforce float min and max', async () => { + const checker = new ParameterChecker() + const rules: Record = { + temperature: { type: 'float', min: 0, max: 100 }, + } + let result = await checker.check({ temperature: -5 }, rules) + expect(result).toBe(false) + expect(checker.error?.code).toBe('VALUE_UNDERFLOW') + + result = await checker.check({ temperature: 150 }, rules) + expect(result).toBe(false) + expect(checker.error?.code).toBe('VALUE_OVERFLOW') + }) + + it('should ignore extra parameters', async () => { + const checker = new ParameterChecker() + const rules: Record = { + id: { type: 'integer' }, + } + const result = await checker.check({ id: 1, extra: 'ignored' }, rules) + expect(result).toBe(true) + expect(checker.error).toBeNull() + }) +}) diff --git a/src/parameter-checker.ts b/src/parameter-checker.ts index 68f069b4..72ee998c 100644 --- a/src/parameter-checker.ts +++ b/src/parameter-checker.ts @@ -9,6 +9,15 @@ import { EventEmitter } from 'node:events' export class ParameterChecker extends EventEmitter { private _error: ErrorObject | null = null + // Mapping of type names to checker methods + private readonly typeCheckers: Record Promise> = { + float: this.isFloat.bind(this), + integer: this.isInteger.bind(this), + boolean: this.isBoolean.bind(this), + array: this.isArray.bind(this), + object: this.isObject.bind(this), + string: this.isString.bind(this), + } /** * Emits a log event with the specified log level and message. @@ -16,7 +25,7 @@ export class ParameterChecker extends EventEmitter { * @param level - The severity level of the log (e.g., 'info', 'warn', 'error'). * @param message - The log message to be emitted. */ - private async emitLog(level: string, message: string): Promise { + private emitLog(level: string, message: string): void { this.emit('log', { level, message }) } @@ -76,25 +85,23 @@ export class ParameterChecker extends EventEmitter { continue } - const typeCheckers: Record Promise> = { - float: this.isFloat.bind(this), - integer: this.isInteger.bind(this), - boolean: this.isBoolean.bind(this), - array: this.isArray.bind(this), - object: this.isObject.bind(this), - string: this.isString.bind(this), - } - - const checker = rule.type && typeCheckers[rule.type] + const checker = rule.type && this.typeCheckers[rule.type] if (checker) { if (!(await checker(value, rule, name))) { return false } } else { - this._error = { code: 'TYPE_UNKNOWN', message: `The rule specified for the \`${name}\` includes an unknown type: ${rule.type}` } + // Unknown type specified in rule + this.emitLog('error', `Unknown type "${rule.type}" in rule for parameter "${name}"`) + this._error = { code: 'TYPE_UNKNOWN', message: `Unknown type "${rule.type}" for parameter "${name}"` } return false } } + // Warn about extra parameters not defined in rules + const extra = Object.keys(obj).filter(key => !(key in rules)) + if (extra.length) { + this.emitLog('warn', `Ignoring extra parameters: ${extra.join(', ')}`) + } this.emitLog('debug', 'All checks passed.') return true diff --git a/src/settings.test.ts b/src/settings.test.ts index 49fd8039..7dcf29cc 100644 --- a/src/settings.test.ts +++ b/src/settings.test.ts @@ -7,6 +7,7 @@ import { COMMAND_TIMEOUT_MSEC, READ_TIMEOUT_MSEC, SERV_UUID_PRIMARY, + updateBaseURL, urls, WoSmartLockCommands, WoSmartLockProCommands, @@ -66,4 +67,17 @@ describe('switchBot API Settings', () => { expect(WoSmartLockCommands.ENABLE_NOTIFICATIONS).toBe('570e01001e00008101') expect(WoSmartLockCommands.DISABLE_NOTIFICATIONS).toBe('570e00') }) + + it('should update URLs when baseURL is changed', () => { + const original = urls.baseURL + const custom = 'https://custom.api' + updateBaseURL(custom) + expect(urls.devicesURL).toBe(`${custom}/v1.1/devices`) + expect(urls.setupWebhook).toBe(`${custom}/v1.1/webhook/setupWebhook`) + expect(urls.queryWebhook).toBe(`${custom}/v1.1/webhook/queryWebhook`) + expect(urls.updateWebhook).toBe(`${custom}/v1.1/webhook/updateWebhook`) + expect(urls.deleteWebhook).toBe(`${custom}/v1.1/webhook/deleteWebhook`) + // restore original baseURL + updateBaseURL(original) + }) }) diff --git a/src/settings.ts b/src/settings.ts index b0d7ae5c..c4a497d0 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -5,11 +5,10 @@ */ let baseURL = 'https://api.switch-bot.com' -let devicesURL = `${baseURL}/v1.1/devices` -let setupWebhook = `${baseURL}/v1.1/webhook/setupWebhook` -let queryWebhook = `${baseURL}/v1.1/webhook/queryWebhook` -let updateWebhook = `${baseURL}/v1.1/webhook/updateWebhook` -let deleteWebhook = `${baseURL}/v1.1/webhook/deleteWebhook` +// API version used for endpoint paths +const API_VERSION = '/v1.1' + +// URLs are generated dynamically via getters below /** * Updates the base URL for the SwitchBot API endpoints. @@ -17,20 +16,27 @@ let deleteWebhook = `${baseURL}/v1.1/webhook/deleteWebhook` */ export function updateBaseURL(newBaseURL: string): void { baseURL = newBaseURL - devicesURL = `${baseURL}/v1.1/devices` - setupWebhook = `${baseURL}/v1.1/webhook/setupWebhook` - queryWebhook = `${baseURL}/v1.1/webhook/queryWebhook` - updateWebhook = `${baseURL}/v1.1/webhook/updateWebhook` - deleteWebhook = `${baseURL}/v1.1/webhook/deleteWebhook` } export const urls = { - get baseURL() { return baseURL }, - get devicesURL() { return devicesURL }, - get setupWebhook() { return setupWebhook }, - get queryWebhook() { return queryWebhook }, - get updateWebhook() { return updateWebhook }, - get deleteWebhook() { return deleteWebhook }, + get baseURL() { + return baseURL + }, + get devicesURL() { + return `${baseURL}${API_VERSION}/devices` + }, + get setupWebhook() { + return `${baseURL}${API_VERSION}/webhook/setupWebhook` + }, + get queryWebhook() { + return `${baseURL}${API_VERSION}/webhook/queryWebhook` + }, + get updateWebhook() { + return `${baseURL}${API_VERSION}/webhook/updateWebhook` + }, + get deleteWebhook() { + return `${baseURL}${API_VERSION}/webhook/deleteWebhook` + }, } /** diff --git a/src/switchbot-ble.test.ts b/src/switchbot-ble.test.ts new file mode 100644 index 00000000..7d1bd2c9 --- /dev/null +++ b/src/switchbot-ble.test.ts @@ -0,0 +1,35 @@ +import { describe, expect, it } from 'vitest' + +import { LogLevel, SwitchBotBLE } from './switchbot-ble' + +describe('switchBotBLE', () => { + describe('constructor', () => { + it('should create an instance without parameters', () => { + const switchbot = new SwitchBotBLE() + expect(switchbot).toBeInstanceOf(SwitchBotBLE) + expect(switchbot.nobleInitialized).toBeInstanceOf(Promise) + }) + + it('should create an instance with parameters', () => { + const params = { duration: 5000 } + const switchbot = new SwitchBotBLE(params) + expect(switchbot).toBeInstanceOf(SwitchBotBLE) + expect(switchbot.nobleInitialized).toBeInstanceOf(Promise) + }) + }) + + it('should emit log events asynchronously', async () => { + const sw = new SwitchBotBLE() + // Listen for a single 'log' event + const eventPromise = new Promise<{ level: string, message: string }>((resolve) => { + sw.once('log', (event) => { + resolve(event) + }) + }) + sw.log(LogLevel.INFO, 'test message') + const event = (await eventPromise) as { level: string, message: string } + expect(event.level).toBe('info') + expect(event.message).toBe('test message') + expect(event.message).toBe('test message') + }) +}) diff --git a/src/switchbot-ble.ts b/src/switchbot-ble.ts index 8ae5986c..82eb79f9 100644 --- a/src/switchbot-ble.ts +++ b/src/switchbot-ble.ts @@ -6,7 +6,7 @@ import type { ad, NobleTypes, onadvertisement, ondiscover, Params, Rule } from ' import { EventEmitter } from 'node:events' -import { Advertising, SwitchBotBLEModel, SwitchbotDevice, WoBlindTilt, WoBulb, WoCeilingLight, WoContact, WoCurtain, WoHand, WoHub2, WoHumi, WoHumi2, WoIOSensorTH, WoKeypad, WoLeak, WoPlugMiniJP, WoPlugMiniUS, WoPresence, WoRelaySwitch1, WoRelaySwitch1PM, WoRemote, WoSensorTH, WoSensorTHPlus, WoSensorTHPro, WoSensorTHProCO2, WoSmartLock, WoSmartLockPro, WoStrip } from './device.js' +import { Advertising, LogLevel, SwitchBotBLEModel, SwitchbotDevice, WoBlindTilt, WoBulb, WoCeilingLight, WoContact, WoCurtain, WoHand, WoHub2, WoHumi, WoHumi2, WoIOSensorTH, WoKeypad, WoLeak, WoPlugMiniJP, WoPlugMiniUS, WoPresence, WoRelaySwitch1, WoRelaySwitch1PM, WoRemote, WoSensorTH, WoSensorTHPlus, WoSensorTHPro, WoSensorTHProCO2, WoSmartLock, WoSmartLockPro, WoStrip } from './device.js' import { parameterChecker } from './parameter-checker.js' import { DEFAULT_DISCOVERY_DURATION, PRIMARY_SERVICE_UUID_LIST } from './settings.js' @@ -14,7 +14,7 @@ import { DEFAULT_DISCOVERY_DURATION, PRIMARY_SERVICE_UUID_LIST } from './setting * SwitchBotBLE class to interact with SwitchBot devices. */ export class SwitchBotBLE extends EventEmitter { - public ready: Promise + public nobleInitialized: Promise public noble: any ondiscover?: ondiscover onadvertisement?: onadvertisement @@ -26,7 +26,7 @@ export class SwitchBotBLE extends EventEmitter { */ constructor(params?: Params) { super() - this.ready = this.initialize(params) + this.nobleInitialized = this.initialize(params) } /** @@ -35,8 +35,12 @@ export class SwitchBotBLE extends EventEmitter { * @param level - The severity level of the log (e.g., 'info', 'warn', 'error'). * @param message - The log message to be emitted. */ - public async log(level: string, message: string): Promise { - this.emit('log', { level, message }) + /** + * Emits a log event with a defined LogLevel. + */ + public log(level: LogLevel, message: string): void { + // Emit log events asynchronously with level and message as separate args + setTimeout(() => this.emit('log', { level, message }), 0) } /** @@ -52,8 +56,15 @@ export class SwitchBotBLE extends EventEmitter { } else { this.noble = (await import('@stoprocent/noble')).default } + + try { + await this.noble.waitForPoweredOnAsync() + this.log(LogLevel.DEBUG, 'Noble powered on') + } catch (e: any) { + this.log(LogLevel.ERROR, `Failed waiting for powered on: ${JSON.stringify(e.message ?? e)}`) + } } catch (e: any) { - this.log('error', `Failed to import noble: ${JSON.stringify(e.message ?? e)}`) + this.log(LogLevel.ERROR, `Failed to import noble: ${JSON.stringify(e.message ?? e)}`) } } @@ -67,46 +78,13 @@ export class SwitchBotBLE extends EventEmitter { public async validate(params: Params, schema: Record): Promise { const valid = parameterChecker.check(params as Record, schema as Record, false) if (!valid) { - this.log('error', `parameterChecker: ${JSON.stringify(parameterChecker.error!.message)}`) + this.log(LogLevel.ERROR, `parameterChecker: ${JSON.stringify(parameterChecker.error!.message)}`) throw new Error(parameterChecker.error!.message) } } /** - * Waits for the noble object to be powered on. - * - * @returns {Promise} - Resolves when the noble object is powered on. - */ - private async waitForPowerOn(): Promise { - await this.ready - if (this.noble && this.noble._state === 'poweredOn') { - return - } - - return new Promise((resolve, reject) => { - this.noble?.once('stateChange', (state: NobleTypes['state']) => { - switch (state) { - case 'unsupported': - case 'unauthorized': - case 'poweredOff': - reject(new Error(`Failed to initialize the Noble object: ${state}`)) - break - case 'resetting': - case 'unknown': - reject(new Error(`Adapter is not ready: ${state}`)) - break - case 'poweredOn': - resolve() - break - default: - reject(new Error(`Unknown state: ${state}`)) - } - }) - }) - } - - /** - * Discovers Switchbot devices. + * Discovers Switchbot devices with enhanced error handling and logging. * @param params The discovery parameters. * @returns A Promise that resolves with an array of discovered Switchbot devices. */ @@ -119,10 +97,8 @@ export class SwitchBotBLE extends EventEmitter { quick: { required: false, type: 'boolean' }, }) - await this.waitForPowerOn() - if (!this.noble) { - throw new Error('noble failed to initialize') + throw new Error('Noble BLE library failed to initialize properly') } const p = { @@ -132,10 +108,18 @@ export class SwitchBotBLE extends EventEmitter { quick: !!params.quick, } + this.log(LogLevel.DEBUG, `Starting discovery with parameters: ${JSON.stringify(p)}`) + const peripherals: Record = {} let timer: NodeJS.Timeout + let isDiscoveryActive = true const finishDiscovery = async () => { + if (!isDiscoveryActive) { + return Object.values(peripherals) + } + + isDiscoveryActive = false if (timer) { clearTimeout(timer) } @@ -143,46 +127,72 @@ export class SwitchBotBLE extends EventEmitter { this.noble.removeAllListeners('discover') try { await this.noble.stopScanningAsync() - this.log('debug', 'Stopped Scanning for SwitchBot BLE devices.') + this.log(LogLevel.DEBUG, 'Successfully stopped scanning for SwitchBot BLE devices') } catch (e: any) { - this.log('error', `discover stopScanningAsync error: ${JSON.stringify(e.message ?? e)}`) + this.log(LogLevel.ERROR, `Failed to stop scanning: ${JSON.stringify(e.message ?? e)}`) } } + const devices = Object.values(peripherals) - if (devices.length === 0) { - this.log('warn', 'No devices found during discovery.') - } + const deviceCount = devices.length + this.log( + deviceCount > 0 ? LogLevel.INFO : LogLevel.WARN, + `Discovery completed. Found ${deviceCount} device${deviceCount !== 1 ? 's' : ''}`, + ) + return devices } return new Promise((resolve, reject) => { this.noble.on('discover', async (peripheral: NobleTypes['peripheral']) => { - const device = await this.createDevice(peripheral, p.id, p.model as SwitchBotBLEModel) - if (!device) { - return - } - peripherals[device.id!] = device + try { + const device = await this.createDevice(peripheral, p.id, p.model as SwitchBotBLEModel) + if (!device) { + return + } - if (this.ondiscover) { - this.ondiscover(device) - } - if (p.quick) { - resolve(await finishDiscovery()) + if (peripherals[device.id!]) { + this.log(LogLevel.DEBUG, `Device ${device.id} already discovered, skipping duplicate`) + return + } + + peripherals[device.id!] = device + this.log(LogLevel.DEBUG, `Discovered device: ${device.friendlyName} (${device.id}) at ${device.address}`) + + if (this.ondiscover) { + try { + await this.ondiscover(device) + } catch (e: any) { + this.log(LogLevel.ERROR, `Error in ondiscover callback: ${e.message ?? e}`) + } + } + + if (p.quick) { + this.log(LogLevel.DEBUG, 'Quick discovery mode: stopping after first device found') + resolve(await finishDiscovery()) + } + } catch (e: any) { + this.log(LogLevel.ERROR, `Error processing discovered device: ${e.message ?? e}`) } }) + // Start scanning with timeout handling this.noble.startScanningAsync(PRIMARY_SERVICE_UUID_LIST, false) .then(() => { + this.log(LogLevel.DEBUG, `Started scanning for ${p.duration}ms`) timer = setTimeout(async () => { const result = await finishDiscovery() if (result.length === 0) { - reject(new Error('No devices found during discovery.')) + reject(new Error(`No SwitchBot devices found after ${p.duration}ms discovery timeout`)) } else { resolve(result) } }, p.duration) }) - .catch(reject) + .catch((error) => { + this.log(LogLevel.ERROR, `Failed to start scanning: ${error.message ?? error}`) + reject(new Error(`Failed to start BLE scanning: ${error.message ?? error}`)) + }) }) } @@ -195,7 +205,7 @@ export class SwitchBotBLE extends EventEmitter { * @returns {Promise} - The device object or null. */ private async createDevice(peripheral: NobleTypes['peripheral'], id: ad['id'], model: SwitchBotBLEModel): Promise { - const ad = await Advertising.parse(peripheral, this.log.bind(this)) + const ad = await Advertising.parse(peripheral, (level: string, message: string) => this.log(level as LogLevel, message)) if (ad && await this.filterAd(ad, id, model) && this.noble) { switch (ad.serviceData.model) { case SwitchBotBLEModel.Bot: return new WoHand(peripheral, this.noble) @@ -259,38 +269,46 @@ export class SwitchBotBLE extends EventEmitter { * @returns {Promise} - Resolves when scanning starts successfully. */ public async startScan(params: Params = {}): Promise { - await this.ready + await this.nobleInitialized await this.validate(params, { model: { required: false, type: 'string', enum: Object.values(SwitchBotBLEModel) }, id: { required: false, type: 'string', min: 12, max: 17 }, }) - await this.waitForPowerOn() - if (!this.noble) { throw new Error('noble object failed to initialize') } const p = { model: params.model || '', id: params.id || '' } + this.noble.removeAllListeners('discover') + this.noble.on('discover', async (peripheral: NobleTypes['peripheral']) => { - const ad = await Advertising.parse(peripheral, this.log.bind(this)) - this.emit('debug', `Advertisement: ${ad}`) - this.emit('debug', `Filter ID: ${p.id}`) - this.emit('debug', `Filter Model: ${p.model}`) - if (ad && await this.filterAd(ad, p.id, p.model)) { - this.emit('debug', `Advertisement passed filter: ${ad}`) - if (this.onadvertisement) { - this.onadvertisement(ad) + try { + const ad = await Advertising.parse(peripheral, (level: string, message: string) => this.log(level as LogLevel, message)) + this.log(LogLevel.DEBUG, `Advertisement: ${JSON.stringify(ad)}`) + this.log(LogLevel.DEBUG, `Filter ID: ${p.id}`) + this.log(LogLevel.DEBUG, `Filter Model: ${p.model}`) + if (ad && await this.filterAd(ad, p.id, p.model)) { + this.log(LogLevel.DEBUG, `Advertisement passed filter: ${JSON.stringify(ad)}`) + if (this.onadvertisement) { + try { + await this.onadvertisement(ad) + } catch (e: any) { + this.log(LogLevel.ERROR, `Error in onadvertisement callback: ${e.message ?? e}`) + } + } } + } catch (e: any) { + this.log(LogLevel.ERROR, `Error parsing advertisement: ${e.message ?? e}`) } }) try { await this.noble.startScanningAsync(PRIMARY_SERVICE_UUID_LIST, true) - this.log('debug', 'Started Scanning for SwitchBot BLE devices.') + this.log(LogLevel.DEBUG, 'Started Scanning for SwitchBot BLE devices.') } catch (e: any) { - this.log('error', `startScanningAsync error: ${JSON.stringify(e.message ?? e)}`) + this.log(LogLevel.ERROR, `startScanningAsync error: ${JSON.stringify(e.message ?? e)}`) } } @@ -307,9 +325,9 @@ export class SwitchBotBLE extends EventEmitter { this.noble.removeAllListeners('discover') try { await this.noble.stopScanningAsync() - this.log('debug', 'Stopped Scanning for SwitchBot BLE devices.') + this.log(LogLevel.DEBUG, 'Stopped Scanning for SwitchBot BLE devices.') } catch (e: any) { - this.log('error', `stopScanningAsync error: ${JSON.stringify(e.message ?? e)}`) + this.log(LogLevel.ERROR, `stopScanningAsync error: ${JSON.stringify(e.message ?? e)}`) } } @@ -328,4 +346,4 @@ export class SwitchBotBLE extends EventEmitter { } } -export { SwitchbotDevice } +export { LogLevel, SwitchbotDevice } diff --git a/src/switchbot-openapi.test.ts b/src/switchbot-openapi.test.ts new file mode 100644 index 00000000..1a86775e --- /dev/null +++ b/src/switchbot-openapi.test.ts @@ -0,0 +1,46 @@ +/* eslint-disable import/order */ +/* eslint-disable */ +import { afterEach, beforeEach, describe, expect, it, vi, type Mock } from 'vitest' + +// Mock undici.request in ESM via module mock +vi.mock('undici', async () => { + const actual = await vi.importActual('undici') + return { ...actual, request: vi.fn() } +}) +import * as undici from 'undici' + +// Alias the mocked request function +const requestMock = undici.request as Mock + +import { SwitchBotOpenAPI } from './switchbot-openapi' + +describe('switchBotOpenAPI', () => { + beforeEach(() => { + // Reset module-level undici.request mock + requestMock.mockReset() + }) + + afterEach(() => { + vi.resetAllMocks() + }) + + it('controlDevice should send correct request and parse response', async () => { + const fakeBody = { json: vi.fn().mockResolvedValue({ commandId: 'abc123' }) } + const statusCode = 200 + requestMock.mockResolvedValue({ body: fakeBody, statusCode }) + + const api = new SwitchBotOpenAPI('my-token', 'my-secret') + const result = await api.controlDevice('dev123', 'turnOn', 'default') + + expect(requestMock).toHaveBeenCalledWith( + expect.stringContaining('/dev123/commands'), + expect.objectContaining({ + method: 'POST', + headers: expect.any(Object), + body: JSON.stringify({ command: 'turnOn', parameter: 'default', commandType: 'command' }), + }), + ) + expect(result.response).toEqual({ commandId: 'abc123' }) + expect(result.statusCode).toBe(statusCode) + }) +}) diff --git a/src/switchbot-openapi.ts b/src/switchbot-openapi.ts index 0c446505..aa1f5757 100644 --- a/src/switchbot-openapi.ts +++ b/src/switchbot-openapi.ts @@ -4,10 +4,7 @@ */ import type { IncomingMessage, Server, ServerResponse } from 'node:http' -import type { pushResponse } from './types/devicepush.js' -import type { devices } from './types/deviceresponse.js' -import type { deviceStatus, deviceStatusRequest } from './types/devicestatus.js' -import type { deleteWebhookResponse, queryWebhookResponse, setupWebhookResponse, updateWebhookResponse } from './types/devicewebhookstatus.js' +import type { commandType, deleteWebhookResponse, devices, deviceStatus, deviceStatusRequest, pushRequest, pushResponseBody, queryWebhookResponse, setupWebhookResponse, updateWebhookResponse } from './types/openapi.js' import crypto, { randomUUID } from 'node:crypto' import { EventEmitter } from 'node:events' @@ -65,7 +62,6 @@ class APIError extends Error { export class SwitchBotOpenAPI extends EventEmitter { private token: string private secret: string - private baseURL: string webhookEventListener?: Server | null = null @@ -79,9 +75,10 @@ export class SwitchBotOpenAPI extends EventEmitter { super() this.token = token this.secret = secret - this.emitLog('info', `Token: ${token}, Secret: ${secret}`) - this.baseURL = urls.baseURL - + // Log instance creation and token (secret is hidden) + this.emitLog('info', 'SwitchBotOpenAPI instance created') + this.emitLog('debug', `Token: ${token}`) + // Update baseURL if custom hostname provided if (hostname) { updateBaseURL(hostname) } @@ -162,20 +159,28 @@ export class SwitchBotOpenAPI extends EventEmitter { * @returns A promise that resolves to an object containing the response body and status code. * @throws An error if the device control fails. */ - async controlDevice(deviceId: string, command: string, parameter: string, commandType: string = 'command', token?: string, secret?: string): Promise<{ response: pushResponse['body'], statusCode: pushResponse['statusCode'] }> { + async controlDevice( + deviceId: string, + command: string, + parameter: string, + commandType: commandType = 'command', + token?: string, + secret?: string, + ): Promise<{ response: pushResponseBody, statusCode: number }> { try { const configToken = token || this.token const configSecret = secret || this.secret - const { body, statusCode } = await request(`${urls.devicesURL}/${deviceId}/commands`, { - method: 'POST', - headers: this.generateHeaders(configToken, configSecret), - body: JSON.stringify({ - command, - parameter, - commandType, - }), - }) - const response = await body.json() as pushResponse['body'] + // Build request payload + const payload: pushRequest = { command, parameter, commandType } + const { body, statusCode } = await request( + `${urls.devicesURL}/${deviceId}/commands`, + { + method: 'POST', + headers: this.generateHeaders(configToken, configSecret), + body: JSON.stringify(payload), + }, + ) + const response = (await body.json()) as pushResponseBody this.emitLog('debug', `Controlled device: ${deviceId} with command: ${command} and parameter: ${parameter}`) this.emitLog('debug', `statusCode: ${statusCode}`) return { response, statusCode } @@ -205,7 +210,7 @@ export class SwitchBotOpenAPI extends EventEmitter { return { response, statusCode } } catch (error: any) { this.emitLog('error', `Failed to get device status: ${error.message}`) - throw new Error(`Failed to get device status: ${error.message}`) + throw new APIError(`Failed to get device status: ${error.message}`, error.statusCode) } } @@ -227,6 +232,11 @@ export class SwitchBotOpenAPI extends EventEmitter { */ async setupWebhook(url: string, token?: string, secret?: string): Promise { try { + // Close existing listener if any to avoid port conflicts + if (this.webhookEventListener) { + this.webhookEventListener.close() + this.webhookEventListener = null + } const xurl = new URL(url) const port = Number(xurl.port) const path = xurl.pathname @@ -357,6 +367,11 @@ export class SwitchBotOpenAPI extends EventEmitter { await this.emitLog('error', `Failed to delete webhook. HTTP:${statusCode} API:${response?.statusCode} message:${response?.message}`) } else { await this.emitLog('info', 'Unregistered webhook to close listening.') + // Close listener server + if (this.webhookEventListener) { + this.webhookEventListener.close() + this.webhookEventListener = null + } } } catch (e: any) { await this.emitLog('error', `Failed to delete webhook, Error: ${e.message ?? e}`) diff --git a/src/types/ble-guards.test.ts b/src/types/ble-guards.test.ts new file mode 100644 index 00000000..db2a0ec4 --- /dev/null +++ b/src/types/ble-guards.test.ts @@ -0,0 +1,67 @@ +import type { ceilingLightServiceData, colorBulbServiceData, meterServiceData } from './ble' + +import { describe, expect, it } from 'vitest' + +import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from '../device' +import { isServiceDataOfModel } from './ble-guards' + +describe('ble service data guards', () => { + it('identifies colorBulbServiceData correctly', () => { + const sample: colorBulbServiceData = { + model: SwitchBotBLEModel.ColorBulb, + modelName: SwitchBotBLEModelName.ColorBulb, + modelFriendlyName: SwitchBotBLEModelFriendlyName.ColorBulb, + color_temperature: 3000, + power: true, + state: false, + red: 255, + green: 200, + blue: 150, + brightness: 50, + delay: 0, + preset: 1, + color_mode: 0, + speed: 10, + loop_index: 0, + } + expect(isServiceDataOfModel(sample, SwitchBotBLEModel.ColorBulb)).toBe(true) + expect(isServiceDataOfModel(sample, SwitchBotBLEModel.CeilingLight)).toBe(false) + }) + + it('identifies ceilingLightServiceData correctly', () => { + const sample: ceilingLightServiceData = { + model: SwitchBotBLEModel.CeilingLight, + modelName: SwitchBotBLEModelName.CeilingLight, + modelFriendlyName: SwitchBotBLEModelFriendlyName.CeilingLight, + color_temperature: 3500, + power: false, + state: true, + red: 100, + green: 150, + blue: 200, + brightness: 75, + delay: 5, + preset: 2, + color_mode: 1, + speed: 5, + loop_index: 1, + } + expect(isServiceDataOfModel(sample, SwitchBotBLEModel.CeilingLight)).toBe(true) + expect(isServiceDataOfModel(sample, SwitchBotBLEModel.Meter)).toBe(false) + }) + + it('identifies meterServiceData correctly', () => { + const sample: meterServiceData = { + model: SwitchBotBLEModel.Meter, + modelName: SwitchBotBLEModelName.Meter, + modelFriendlyName: SwitchBotBLEModelFriendlyName.Meter, + celsius: 22.5, + fahrenheit: 72.5, + fahrenheit_mode: false, + humidity: 45, + battery: 90, + } + expect(isServiceDataOfModel(sample, SwitchBotBLEModel.Meter)).toBe(true) + expect(isServiceDataOfModel(sample, SwitchBotBLEModel.ColorBulb)).toBe(false) + }) +}) diff --git a/src/types/ble-guards.ts b/src/types/ble-guards.ts new file mode 100644 index 00000000..b4635d74 --- /dev/null +++ b/src/types/ble-guards.ts @@ -0,0 +1,15 @@ +import type { SwitchBotBLEModel } from '../device' +import type { BLEDeviceServiceData } from './ble.js' + +/** + * Generic type guard for BLE device service data by model. + * @param data The BLE service data object. + * @param model The SwitchBotBLEModel enum to check against. + * @returns True if data.model matches, and narrows to the specific service data type. + */ +export function isServiceDataOfModel( + data: BLEDeviceServiceData, + model: M, +): data is Extract { + return data.model === model +} diff --git a/src/types/bledevicestatus.ts b/src/types/ble.ts similarity index 61% rename from src/types/bledevicestatus.ts rename to src/types/ble.ts index 4c022639..0948a86f 100644 --- a/src/types/bledevicestatus.ts +++ b/src/types/ble.ts @@ -4,30 +4,28 @@ */ import type { MacAddress, SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from '../device.js' -export interface switchbot { - discover: (arg0: { duration?: any, model: string, quick: boolean, id?: MacAddress }) => Promise - wait: (arg0: number) => any +/** + * BLE discovery and wait methods for SwitchBot devices. + */ +export interface SwitchBotScanner { + /** Discover BLE devices based on filter criteria */ + discover: (args: { duration?: number, model: string, quick: boolean, id?: MacAddress }) => Promise + /** Wait for given milliseconds */ + wait: (ms: number) => void } -interface serviceData { +/** + * Common service data across BLE devices. + */ +interface BLEServiceData { model: SwitchBotBLEModel modelName: SwitchBotBLEModelName modelFriendlyName: SwitchBotBLEModelFriendlyName } - -export type botServiceData = serviceData & { - model: SwitchBotBLEModel.Bot - modelName: SwitchBotBLEModelName.Bot - modelFriendlyName: SwitchBotBLEModelFriendlyName.Bot - mode: boolean - state: boolean - battery: number -} - -export type colorBulbServiceData = serviceData & { - model: SwitchBotBLEModel.ColorBulb - modelName: SwitchBotBLEModelName.ColorBulb - modelFriendlyName: SwitchBotBLEModelFriendlyName.ColorBulb +/** + * Base interface for color-controllable devices. + */ +export interface ColorLightServiceDataBase extends BLEServiceData { color_temperature: number power: boolean state: boolean @@ -42,7 +40,62 @@ export type colorBulbServiceData = serviceData & { loop_index: number } -export type contactSensorServiceData = serviceData & { +/** + * Base interface for temperature-humidity meter devices. + */ +export interface TemperatureServiceDataBase extends BLEServiceData { + celsius: number + fahrenheit: number + fahrenheit_mode: boolean + humidity: number + battery: number +} + +/** + * Base interface for mini plug devices (US/JP share same schema). + */ +export interface PlugMiniServiceDataBase extends BLEServiceData { + state: string + delay: boolean + timer: boolean + syncUtcTime: boolean + wifiRssi: number + overload: boolean + currentPower: number +} + +/** + * Base interface for lock-style devices. + */ +export interface LockBaseServiceData extends BLEServiceData { + battery: number + calibration: boolean + status: string + update_from_secondary_lock: boolean + door_open: boolean + double_lock_mode: boolean + unclosed_alarm: boolean + unlocked_alarm: boolean + auto_lock_paused: boolean + night_latch: boolean +} + +export type botServiceData = BLEServiceData & { + model: SwitchBotBLEModel.Bot + modelName: SwitchBotBLEModelName.Bot + modelFriendlyName: SwitchBotBLEModelFriendlyName.Bot + mode: boolean + state: boolean + battery: number +} + +export type colorBulbServiceData = ColorLightServiceDataBase & { + model: SwitchBotBLEModel.ColorBulb + modelName: SwitchBotBLEModelName.ColorBulb + modelFriendlyName: SwitchBotBLEModelFriendlyName.ColorBulb +} + +export type contactSensorServiceData = BLEServiceData & { model: SwitchBotBLEModel.ContactSensor modelName: SwitchBotBLEModelName.ContactSensor modelFriendlyName: SwitchBotBLEModelFriendlyName.ContactSensor @@ -56,7 +109,7 @@ export type contactSensorServiceData = serviceData & { doorState: string } -export type curtainServiceData = serviceData & { +export type curtainServiceData = BLEServiceData & { model: SwitchBotBLEModel.Curtain modelName: SwitchBotBLEModelName.Curtain modelFriendlyName: SwitchBotBLEModelFriendlyName.Curtain @@ -68,7 +121,7 @@ export type curtainServiceData = serviceData & { deviceChain: number } -export type curtain3ServiceData = serviceData & { +export type curtain3ServiceData = BLEServiceData & { model: SwitchBotBLEModel.Curtain3 modelName: SwitchBotBLEModelName.Curtain3 modelFriendlyName: SwitchBotBLEModelFriendlyName.Curtain3 @@ -80,112 +133,56 @@ export type curtain3ServiceData = serviceData & { deviceChain: number } -export type stripLightServiceData = serviceData & { +export type stripLightServiceData = ColorLightServiceDataBase & { model: SwitchBotBLEModel.StripLight modelName: SwitchBotBLEModelName.StripLight modelFriendlyName: SwitchBotBLEModelFriendlyName.StripLight - power: boolean - state: boolean - red: number - green: number - blue: number - brightness: number - delay: number - preset: number - color_mode: number - speed: number - loop_index: number } -export type lockServiceData = serviceData & { +export type lockServiceData = LockBaseServiceData & { model: SwitchBotBLEModel.Lock modelName: SwitchBotBLEModelName.Lock modelFriendlyName: SwitchBotBLEModelFriendlyName.Lock - battery: number - calibration: boolean - status: string - update_from_secondary_lock: boolean - door_open: boolean - double_lock_mode: boolean - unclosed_alarm: boolean - unlocked_alarm: boolean - auto_lock_paused: boolean - night_latch: boolean } -export type lockProServiceData = serviceData & { +export type lockProServiceData = LockBaseServiceData & { model: SwitchBotBLEModel.LockPro modelName: SwitchBotBLEModelName.LockPro modelFriendlyName: SwitchBotBLEModelFriendlyName.LockPro - battery: number - calibration: boolean - status: string - update_from_secondary_lock: boolean - door_open: boolean - double_lock_mode: boolean - unclosed_alarm: boolean - unlocked_alarm: boolean - auto_lock_paused: boolean - night_latch: boolean } -export type meterServiceData = serviceData & { +export type meterServiceData = TemperatureServiceDataBase & { model: SwitchBotBLEModel.Meter modelName: SwitchBotBLEModelName.Meter modelFriendlyName: SwitchBotBLEModelFriendlyName.Meter - celsius: number - fahrenheit: number - fahrenheit_mode: boolean - humidity: number - battery: number } -export type meterPlusServiceData = serviceData & { +export type meterPlusServiceData = TemperatureServiceDataBase & { model: SwitchBotBLEModel.MeterPlus modelName: SwitchBotBLEModelName.MeterPlus modelFriendlyName: SwitchBotBLEModelFriendlyName.MeterPlus - celsius: number - fahrenheit: number - fahrenheit_mode: boolean - humidity: number - battery: number } -export type meterProServiceData = serviceData & { +export type meterProServiceData = TemperatureServiceDataBase & { model: SwitchBotBLEModel.MeterPro modelName: SwitchBotBLEModelName.MeterPro modelFriendlyName: SwitchBotBLEModelFriendlyName.MeterPro - celsius: number - fahrenheit: number - fahrenheit_mode: boolean - humidity: number - battery: number } -export type meterProCO2ServiceData = serviceData & { +export type meterProCO2ServiceData = TemperatureServiceDataBase & { model: SwitchBotBLEModel.MeterProCO2 modelName: SwitchBotBLEModelName.MeterProCO2 modelFriendlyName: SwitchBotBLEModelFriendlyName.MeterProCO2 - celsius: number - fahrenheit: number - fahrenheit_mode: boolean - humidity: number - battery: number co2: number } -export type outdoorMeterServiceData = serviceData & { +export type outdoorMeterServiceData = TemperatureServiceDataBase & { model: SwitchBotBLEModel.OutdoorMeter modelName: SwitchBotBLEModelName.OutdoorMeter modelFriendlyName: SwitchBotBLEModelFriendlyName.OutdoorMeter - celsius: number - fahrenheit: number - fahrenheit_mode: boolean - humidity: number - battery: number } -export type motionSensorServiceData = serviceData & { +export type motionSensorServiceData = BLEServiceData & { model: SwitchBotBLEModel.MotionSensor modelName: SwitchBotBLEModelName.MotionSensor modelFriendlyName: SwitchBotBLEModelFriendlyName.MotionSensor @@ -199,33 +196,19 @@ export type motionSensorServiceData = serviceData & { is_light: boolean } -export type plugMiniUSServiceData = serviceData & { +export type plugMiniUSServiceData = PlugMiniServiceDataBase & { model: SwitchBotBLEModel.PlugMiniUS modelName: SwitchBotBLEModelName.PlugMini modelFriendlyName: SwitchBotBLEModelFriendlyName.PlugMini - state: string - delay: boolean - timer: boolean - syncUtcTime: boolean - wifiRssi: number - overload: boolean - currentPower: number } -export type plugMiniJPServiceData = serviceData & { +export type plugMiniJPServiceData = PlugMiniServiceDataBase & { model: SwitchBotBLEModel.PlugMiniJP modelName: SwitchBotBLEModelName.PlugMini modelFriendlyName: SwitchBotBLEModelFriendlyName.PlugMini - state: string - delay: boolean - timer: boolean - syncUtcTime: boolean - wifiRssi: number - overload: boolean - currentPower: number } -export type blindTiltServiceData = serviceData & { +export type blindTiltServiceData = BLEServiceData & { model: SwitchBotBLEModel.BlindTilt modelName: SwitchBotBLEModelName.BlindTilt modelFriendlyName: SwitchBotBLEModelFriendlyName.BlindTilt @@ -237,7 +220,7 @@ export type blindTiltServiceData = serviceData & { sequenceNumber: number } -export type ceilingLightServiceData = serviceData & { +export type ceilingLightServiceData = BLEServiceData & { model: SwitchBotBLEModel.CeilingLight modelName: SwitchBotBLEModelName.CeilingLight modelFriendlyName: SwitchBotBLEModelFriendlyName.CeilingLight @@ -255,7 +238,7 @@ export type ceilingLightServiceData = serviceData & { loop_index: number } -export type ceilingLightProServiceData = serviceData & { +export type ceilingLightProServiceData = BLEServiceData & { model: SwitchBotBLEModel.CeilingLightPro modelName: SwitchBotBLEModelName.CeilingLightPro modelFriendlyName: SwitchBotBLEModelFriendlyName.CeilingLightPro @@ -273,7 +256,7 @@ export type ceilingLightProServiceData = serviceData & { loop_index: number } -export type hub2ServiceData = serviceData & { +export type hub2ServiceData = BLEServiceData & { model: SwitchBotBLEModel.Hub2 modelName: SwitchBotBLEModelName.Hub2 modelFriendlyName: SwitchBotBLEModelFriendlyName.Hub2 @@ -284,7 +267,18 @@ export type hub2ServiceData = serviceData & { lightLevel: number } -export type batteryCirculatorFanServiceData = serviceData & { +export type hub3ServiceData = BLEServiceData & { + model: SwitchBotBLEModel.Hub3 + modelName: SwitchBotBLEModelName.Hub3 + modelFriendlyName: SwitchBotBLEModelFriendlyName.Hub3 + celsius: number + fahrenheit: number + fahrenheit_mode: boolean + humidity: number + lightLevel: number +} + +export type batteryCirculatorFanServiceData = BLEServiceData & { model: SwitchBotBLEModel.Unknown modelName: SwitchBotBLEModelName.Unknown modelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown @@ -292,7 +286,7 @@ export type batteryCirculatorFanServiceData = serviceData & { fanSpeed: number } -export type waterLeakDetectorServiceData = serviceData & { +export type waterLeakDetectorServiceData = BLEServiceData & { model: SwitchBotBLEModel.Leak modelName: SwitchBotBLEModelName.Leak modelFriendlyName: SwitchBotBLEModelFriendlyName.Leak @@ -302,7 +296,7 @@ export type waterLeakDetectorServiceData = serviceData & { low_battery: boolean } -export type humidifierServiceData = serviceData & { +export type humidifierServiceData = BLEServiceData & { model: SwitchBotBLEModel.Humidifier modelName: SwitchBotBLEModelName.Humidifier modelFriendlyName: SwitchBotBLEModelFriendlyName.Humidifier @@ -312,7 +306,7 @@ export type humidifierServiceData = serviceData & { humidity: number } -export type humidifier2ServiceData = serviceData & { +export type humidifier2ServiceData = BLEServiceData & { model: SwitchBotBLEModel.Humidifier2 modelName: SwitchBotBLEModelName.Humidifier2 modelFriendlyName: SwitchBotBLEModelFriendlyName.Humidifier2 @@ -331,7 +325,7 @@ export type humidifier2ServiceData = serviceData & { waterLevel: number } -export type robotVacuumCleanerServiceData = serviceData & { +export type robotVacuumCleanerServiceData = BLEServiceData & { model: SwitchBotBLEModel.Unknown modelName: SwitchBotBLEModelName.Unknown modelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown @@ -339,7 +333,7 @@ export type robotVacuumCleanerServiceData = serviceData & { battery: number } -export type keypadDetectorServiceData = serviceData & { +export type keypadDetectorServiceData = BLEServiceData & { model: SwitchBotBLEModel.Keypad modelName: SwitchBotBLEModelName.Keypad modelFriendlyName: SwitchBotBLEModelFriendlyName.Keypad @@ -349,7 +343,7 @@ export type keypadDetectorServiceData = serviceData & { low_battery: boolean } -export type relaySwitch1ServiceData = serviceData & { +export type relaySwitch1ServiceData = BLEServiceData & { model: SwitchBotBLEModel.RelaySwitch1 modelName: SwitchBotBLEModelName.RelaySwitch1 modelFriendlyName: SwitchBotBLEModelFriendlyName.RelaySwitch1 @@ -358,7 +352,7 @@ export type relaySwitch1ServiceData = serviceData & { sequence_number: number } -export type relaySwitch1PMServiceData = serviceData & { +export type relaySwitch1PMServiceData = BLEServiceData & { model: SwitchBotBLEModel.RelaySwitch1PM modelName: SwitchBotBLEModelName.RelaySwitch1PM modelFriendlyName: SwitchBotBLEModelFriendlyName.RelaySwitch1PM @@ -370,9 +364,73 @@ export type relaySwitch1PMServiceData = serviceData & { current: number } -export type remoteServiceData = serviceData & { +export type remoteServiceData = BLEServiceData & { model: SwitchBotBLEModel.Remote modelName: SwitchBotBLEModelName.Remote modelFriendlyName: SwitchBotBLEModelFriendlyName.Remote battery: number } + +export type airPurifierServiceData = BLEServiceData & { + model: SwitchBotBLEModel.AirPurifier + modelName: SwitchBotBLEModelName.AirPurifier + modelFriendlyName: SwitchBotBLEModelFriendlyName.AirPurifier + isOn: boolean + mode: string | null + isAqiValid: boolean + child_lock: boolean + speed: number + aqi_level: string + filter_element_working_time: number + err_code: number + sequence_number: number +} + +export type airPurifierTableServiceData = BLEServiceData & { + model: SwitchBotBLEModel.AirPurifierTable + modelName: SwitchBotBLEModelName.AirPurifierTable + modelFriendlyName: SwitchBotBLEModelFriendlyName.AirPurifierTable + isOn: boolean + mode: string | null + isAqiValid: boolean + child_lock: boolean + speed: number + aqi_level: string + filter_element_working_time: number + err_code: number + sequence_number: number +} + +export type BLEDeviceServiceData + = | airPurifierServiceData + | airPurifierTableServiceData + | batteryCirculatorFanServiceData + | blindTiltServiceData + | botServiceData + | ceilingLightServiceData + | ceilingLightProServiceData + | colorBulbServiceData + | contactSensorServiceData + | curtain3ServiceData + | curtainServiceData + | hub2ServiceData + | hub3ServiceData + | keypadDetectorServiceData + | lockProServiceData + | lockServiceData + | meterPlusServiceData + | meterProCO2ServiceData + | meterProServiceData + | meterServiceData + | motionSensorServiceData + | outdoorMeterServiceData + | plugMiniJPServiceData + | plugMiniUSServiceData + | relaySwitch1PMServiceData + | relaySwitch1ServiceData + | remoteServiceData + | robotVacuumCleanerServiceData + | stripLightServiceData + | waterLeakDetectorServiceData + | humidifier2ServiceData + | humidifierServiceData diff --git a/src/types/devicelist.ts b/src/types/devicelist.ts deleted file mode 100644 index 3ab2b97d..00000000 --- a/src/types/devicelist.ts +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright(C) 2017-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved. - * - * devicelist.ts: @switchbot/homebridge-switchbot platform class. - */ -export interface deviceList { - device: device[] -} - -export interface device { - deviceId: string - deviceName: string - deviceType: string - enableCloudService: boolean - hubDeviceId: string - version?: number -} - -export type bot = device & {} - -export type curtain = device & { - curtainDevicesIds: string[] - calibrate: boolean - group: boolean - master: boolean - openDirection: string -} - -export type curtain3 = device & { - curtainDevicesIds: string[] - calibrate: boolean - group: boolean - master: boolean - openDirection?: string -} - -export type hub2 = device & {} - -export type meter = device & {} - -export type meterPlus = device & {} - -export type meterPro = device & {} - -export type outdoorMeter = device & {} - -export type lock = device & { - group: boolean - master: boolean - groupName: string - lockDevicesIds: string[] -} - -export type lockPro = device & { - group: boolean - master: boolean - groupName: string - lockDevicesIds: string[] -} - -export type keypad = device & { - remoteType: string - lockDeviceId: string - keyList: keyList -} - -export type keypadTouch = device & { - remoteType: string - lockDeviceId: string - keyList: keyList -} - -interface keyList { - id: number - name: string - type: string - password: string - iv: string - status: string - createTime: number -} - -export type remote = device & {} - -export type motionSensor = device & {} - -export type contactSensor = device & {} - -export type waterLeakDetector = device & {} - -export type ceilingLight = device & {} - -export type ceilingLightPro = device & {} - -export type plug = device & {} - -export type plugMini = device & {} - -export type stripLight = device & {} - -export type colorBulb = device & {} - -export type robotVacuumCleanerS1 = device & {} - -export type robotVacuumCleanerS1Plus = device & {} - -export type floorCleaningRobotS10 = device & {} - -export type humidifier = device & {} - -export type indoorCam = device & {} - -export type pantiltCam = device & {} - -export type pantiltCam2k = device & {} - -export type blindTilt = device & { - blindTiltDevicesIds: string[] - calibrate: boolean - group: boolean - master: boolean - direction: string - slidePosition: number -} - -export type batteryCirculatorFan = device & {} diff --git a/src/types/devicepush.ts b/src/types/devicepush.ts deleted file mode 100644 index e5530374..00000000 --- a/src/types/devicepush.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* Copyright(C) 2017-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved. - * - * pushbody.ts: @switchbot/homebridge-switchbot platform class. - */ -export interface bodyChange { - command: string - parameter: string - commandType: string -} - -export interface pushResponse { - statusCode: number - body: { - commandId: string - } - message: string -} diff --git a/src/types/deviceresponse.ts b/src/types/deviceresponse.ts deleted file mode 100644 index c7f86595..00000000 --- a/src/types/deviceresponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright(C) 2017-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved. - * - * deviceresponse.ts: @switchbot/homebridge-switchbot platform class. - */ -import type { deviceList } from './devicelist.js' -import type { infraredRemoteList } from './irdevicelist.js' - -// json response from SwitchBot API -export interface devices { - statusCode: number - message: string - body: body -} - -export interface body { - deviceList: deviceList - infraredRemoteList: infraredRemoteList -} diff --git a/src/types/devicestatus.ts b/src/types/devicestatus.ts deleted file mode 100644 index 8651ca74..00000000 --- a/src/types/devicestatus.ts +++ /dev/null @@ -1,229 +0,0 @@ -/* Copyright(C) 2017-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved. - * - * devicestatus.ts: @switchbot/homebridge-switchbot platform class. - */ -import type { device } from './devicelist.js' - -export interface deviceStatusRequest { - statusCode: number - message: string - body: deviceStatus -} - -export interface deviceStatus extends device { - // properties on all devices - deviceId: string - deviceType: string - hubDeviceId: string - version: number -}; - -export type botStatus = deviceStatus & { - power: string - battery: number - mode: 'pressMode' | 'switchMode' | 'customizeMode' -} - -export type curtainStatus = deviceStatus & { - calibrate: boolean - group: boolean - moving: boolean - battery: number - slidePosition: number - lightLevel?: 'bright' | 'dim' -} - -export type meterStatus = deviceStatus & { - temperature: number - battery: number - humidity: number -} - -export type meterPlusStatus = deviceStatus & { - temperature: number - battery: number - humidity: number -} - -export type meterProStatus = deviceStatus & { - temperature: number - battery: number - humidity: number - version: string -} - -export type meterProCO2Status = deviceStatus & { - temperature: number - battery: number - humidity: number - version: string - CO2: number -} - -export type outdoorMeterStatus = deviceStatus & { - battery: number - temperature: number - humidity: number -} - -export type lockStatus = deviceStatus & { - lockState: string - doorState: string - moveDetected: boolean - battery: number -} - -export type lockProStatus = deviceStatus & { - lockState: string - doorState: string - moveDetected: boolean - battery: number -} - -export type motionSensorStatus = deviceStatus & { - battery: number - moveDetected: boolean - brightness: 'bright' | 'dim' -} - -export type contactSensorStatus = deviceStatus & { - battery: number - moveDetected: boolean - openState: 'open' | 'close' | 'timeOutNotClose' - brightness: 'bright' | 'dim' -} - -export type waterLeakDetectorStatus = deviceStatus & { - battery: number - status: 0 /* dry */ | 1 /* leak detected */ -} - -export type ceilingLightStatus = deviceStatus & { - power: boolean - brightness: number - colorTemperature: number -} - -export type ceilingLightProStatus = deviceStatus & { - power: boolean - brightness: number - colorTemperature: number -} - -export type plugStatus = deviceStatus & { - power: string - version: string -} - -export type plugMiniStatus = deviceStatus & { - voltage: Float64Array - weight: Float64Array - electricityOfDay: number - electricCurrent: Float64Array - power: string -} - -export type stripLightStatus = deviceStatus & { - power: string - brightness: number - color: string -} - -export type colorBulbStatus = deviceStatus & { - power: string - brightness: number - color: string - colorTemperature: number -} - -export type robotVacuumCleanerS1Status = deviceStatus & { - workingStatus: string - onlineStatus: string - battery: number -} - -export type robotVacuumCleanerS1PlusStatus = deviceStatus & { - workingStatus: string - onlineStatus: string - battery: number -} - -export type floorCleaningRobotS10Status = deviceStatus & { - workingStatus: string - onlineStatus: string - battery: number - waterBaseBattery: number - taskType: string -} - -export type humidifierStatus = deviceStatus & { - power: string - humidity: number - temperature: number - nebulizationEfficiency: number - auto: boolean - childLock: boolean - sound: boolean - lackWater: boolean -} - -export type humidifier2Status = deviceStatus & { - power: string - humidity: number - temperature: number - nebulizationEfficiency: number - auto: boolean - childLock: boolean - sound: boolean - lackWater: boolean -} - -export type blindTiltStatus = deviceStatus & { - calibrate: boolean - battery: number - direction: string - slidePosition: string - lightLevel?: 'bright' | 'dim' -} - -export type hub2Status = deviceStatus & { - temperature: number - lightLevel: number - humidity: number -} - -export type batteryCirculatorFanStatus = deviceStatus & { - mode: 'direct' | 'natural' | 'sleep' | 'baby' - version: string - battery: number - power: string - nightStatus: number - oscillation: string - verticalOscillation: string - chargingStatus: string - fanSpeed: number -} - -export type circulatorFanStatus = deviceStatus & { - mode: 'direct' | 'natural' | 'sleep' | 'baby' - version: string - power: string - nightStatus: number - oscillation: string - verticalOscillation: string - fanSpeed: number -} - -export type relaySwitch1Status = deviceStatus & { - switchStatus: 0 | 1 - version: string -} - -export type relaySwitch1PMStatus = deviceStatus & { - switchStatus: 0 | 1 - voltage: number - version: string - power: number - usedElectricity: number - electricCurrent: number -} diff --git a/src/types/devicewebhookstatus.ts b/src/types/devicewebhookstatus.ts deleted file mode 100644 index 82322aab..00000000 --- a/src/types/devicewebhookstatus.ts +++ /dev/null @@ -1,283 +0,0 @@ -/* Copyright(C) 2017-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved. - * - * devicewebhookstatus.ts: @switchbot/homebridge-switchbot platform class. - */ -export interface webhookRequest { - action: string - url: string - deviceList: string -} - -export interface setupWebhookResponse { - statusCode: number - body: object - message: string -} - -export interface queryWebhookResponse { - statusCode: number - body: WebhookDetail[] - message: string -} - -export interface WebhookDetail { - url: string - createTime: number - lastUpdateTime: number - deviceList: string - enable: boolean -} - -export interface updateWebhookResponse { - statusCode: number - body: object - message: string -} - -export interface deleteWebhookResponse { - statusCode: number - body: object - message: string -} - -interface deviceWebhook { - eventType: string - eventVersion: string - context: deviceWebhookContext -} - -export { deviceWebhook } - -export interface deviceWebhookContext { - // properties on all devices - deviceMac: string - deviceType: string - timeOfSample: number -} - -export type botWebhookContext = deviceWebhookContext & { - power: string // "on"or"off" - battery: number - deviceMode: 'pressMode' | 'switchMode' | 'customizeMode' -} - -export type curtainWebhookContext = deviceWebhookContext & { - calibrate: boolean - group: boolean - slidePosition: number // 0~100 - battery: number -} - -export type curtain3WebhookContext = deviceWebhookContext & { - calibrate: boolean - group: boolean - slidePosition: number // 0~100 - battery: number -} - -export type motionSensorWebhookContext = deviceWebhookContext & { - detectionState: 'NOT_DETECTED' | 'DETECTED' - battery: number // 0~100 -} - -export type contactSensorWebhookContext = deviceWebhookContext & { - detectionState: 'NOT_DETECTED' | 'DETECTED' - battery: number // 0~100 - doorMode: 'IN_DOOR' | 'OUT_DOOR' - brightness: 'dim' | 'bright' - openState: 'open' | 'close' | 'timeOutNotClose' -} - -export type waterLeakDetectorWebhookContext = deviceWebhookContext & { - detectionState: 0 | 1 - battery: number // 0~100 -} - -export type meterWebhookContext = deviceWebhookContext & { - temperature: number - battery: number // 0~100 - scale: 'CELSIUS' | 'FAHRENHEIT' - humidity: number -} - -export type meterPlusWebhookContext = deviceWebhookContext & { - temperature: number - battery: number // 0~100 - scale: 'CELSIUS' | 'FAHRENHEIT' - humidity: number -} - -export type meterProWebhookContext = deviceWebhookContext & { - temperature: number - battery: number // 0~100 - scale: 'CELSIUS' | 'FAHRENHEIT' - humidity: number -} - -export type meterProCO2WebhookContext = deviceWebhookContext & { - temperature: number - battery: number // 0~100 - scale: 'CELSIUS' | 'FAHRENHEIT' - humidity: number - CO2: number -} - -export type outdoorMeterWebhookContext = deviceWebhookContext & { - temperature: number - battery: number // 0~100 - scale: 'CELSIUS' | 'FAHRENHEIT' - humidity: number -} - -export type lockWebhookContext = deviceWebhookContext & { - lockState: 'UNLOCKED' | 'LOCKED' | 'JAMMED' - battery: number // 0~100 -} - -export type lockProWebhookContext = deviceWebhookContext & { - lockState: 'UNLOCKED' | 'LOCKED' | 'JAMMED' - battery: number // 0~100 -} - -export type indoorCameraWebhookContext = deviceWebhookContext & { - detectionState: 'DETECTED' -} - -export type panTiltCamWebhookContext = deviceWebhookContext & { - detectionState: 'DETECTED' -} - -export type colorBulbWebhookContext = deviceWebhookContext & { - powerState: 'ON' | 'OFF' - brightness: number - color: string // RGB 255:255:255 - colorTemperature: number // 2700~6500 -} - -export type stripLightWebhookContext = deviceWebhookContext & { - powerState: 'ON' | 'OFF' - brightness: number - color: string // RGB 255:255:255 -} - -export type plugWebhookContext = deviceWebhookContext & { - powerState: 'ON' | 'OFF' -} - -export type plugMiniUSWebhookContext = deviceWebhookContext & { - powerState: 'ON' | 'OFF' -} - -export type plugMiniJPWebhookContext = deviceWebhookContext & { - powerState: 'ON' | 'OFF' -} - -export type robotVacuumCleanerS1WebhookContext = deviceWebhookContext & { - workingStatus: 'Standby' | 'Clearing' | 'Paused' | 'GotoChargeBase' | 'Charging' | 'ChargeDone' | 'Dormant' | 'InTrouble' | 'InRemoteControl' | 'InDustCollecting' - onlineStatus: 'online' | 'offline' - battery: number // 0~100 -} - -export type robotVacuumCleanerS1PlusWebhookContext = deviceWebhookContext & { - workingStatus: 'Standby' | 'Clearing' | 'Paused' | 'GotoChargeBase' | 'Charging' | 'ChargeDone' | 'Dormant' | 'InTrouble' | 'InRemoteControl' | 'InDustCollecting' - onlineStatus: 'online' | 'offline' - battery: number // 0~100 -} - -export type floorCleaningRobotS10WebhookContext = deviceWebhookContext & { - workingStatus: 'Standby' | 'Clearing' | 'Paused' | 'GotoChargeBase' | 'Charging' | 'ChargeDone' | 'Dormant' | 'InTrouble' | 'InRemoteControl' | 'InDustCollecting' - onlineStatus: 'online' | 'offline' - battery: number // 0~100 - waterBaseBattery: number // 0~100 - taskType: 'standBy' | 'explore' | 'cleanAll' | 'cleanArea' | 'cleanRoom' | 'fillWater' | 'deepWashing' | 'backToCharge' | 'markingWaterBase' | 'drying' | 'collectDust' | 'remoteControl' | 'cleanWithExplorer' | 'fillWaterForHumi' | 'markingHumi' -} - -export type ceilingLightWebhookContext = deviceWebhookContext & { - powerState: 'ON' | 'OFF' - brightness: number - colorTemperature: number // 2700~6500 -} - -export type ceilingLightProWebhookContext = deviceWebhookContext & { - powerState: 'ON' | 'OFF' - brightness: number - colorTemperature: number // 2700~6500 -} - -export type keypadWebhookContext = deviceWebhookContext & { - eventName: 'createKey' | 'deleteKey' - commandId: string - result: 'success' | 'failed' | 'timeout' -} - -export type keypadTouchWebhookContext = deviceWebhookContext & { - eventName: 'createKey' | 'deleteKey' - commandId: string - result: 'success' | 'failed' | 'timeout' -} - -export type hub2WebhookContext = deviceWebhookContext & { - temperature: number - humidity: number - lightLevel: number - scale: 'CELSIUS' | 'FAHRENHEIT' -} - -export type batteryCirculatorFanWebhookContext = deviceWebhookContext & { - mode: 'direct' | 'natural' | 'sleep' | 'baby' - version: string - battery: number - powerState: 'ON' | 'OFF' - nightStatus: 'off' | 1 | 2 - oscillation: 'on' | 'off' - verticalOscillation: 'on' | 'off' - chargingStatus: 'charging' | 'uncharged' - fanSpeed: number // 1~100 -} - -export type circulatorFanWebhookContext = deviceWebhookContext & { - mode: 'direct' | 'natural' | 'sleep' | 'baby' - version: string - battery: number - powerState: 'ON' | 'OFF' - nightStatus: 'off' | 1 | 2 - oscillation: 'on' | 'off' - verticalOscillation: 'on' | 'off' - fanSpeed: number // 1~100 -} - -export type blindTiltWebhookContext = deviceWebhookContext & { - version: string - calibrate: boolean - group: boolean - direction: string - slidePosition: number // 0~100 - battery: number -} - -export type humidifierWebhookContext = deviceWebhookContext & { - temperature: number - humidity: number - scale: 'CELSIUS' | 'FAHRENHEIT' -} - -export type humidifier2WebhookContext = deviceWebhookContext & { - temperature: number - humidity: number - scale: 'CELSIUS' | 'FAHRENHEIT' -} - -export type relaySwitch1Context = deviceWebhookContext & { - online: boolean - overTemperature: boolean - switchStatus: 0 | 1 - version: string -} - -export type relaySwitch1PMContext = deviceWebhookContext & { - online: boolean - overTemperature: boolean - switchStatus: 0 | 1 - overload: boolean - version: string -} diff --git a/src/types/irdevicelist.ts b/src/types/irdevicelist.ts deleted file mode 100644 index 91d6acc1..00000000 --- a/src/types/irdevicelist.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* Copyright(C) 2017-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved. - * - * irdevicelist.ts: ds7@switchbot/homebridge-switchbot platform class. - */ -export interface infraredRemoteList { - device: irdevice[] -} - -export interface irdevice { - deviceId?: string - deviceName: string - remoteType: string - hubDeviceId: string -} diff --git a/src/types/openapi.ts b/src/types/openapi.ts new file mode 100644 index 00000000..c0d6e15b --- /dev/null +++ b/src/types/openapi.ts @@ -0,0 +1,760 @@ +/* Copyright(C) 2017-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved. + * + * openapi.ts: Aggregated types for SwitchBot OpenAPI and IR interfaces. + */ +export interface deviceList { + device: device[] +} + +export interface device { + deviceId: string + deviceName: string + deviceType: string + enableCloudService: boolean + hubDeviceId: string + version?: number +} + +export type bot = device + +export type curtain = device & { + curtainDevicesIds: string[] + calibrate: boolean + group: boolean + master: boolean + openDirection: string +} + +export type curtain3 = device & { + curtainDevicesIds: string[] + calibrate: boolean + group: boolean + master: boolean + openDirection?: string +} + +export type hub2 = device + +export type meter = device + +export type meterPlus = device + +export type meterPro = device + +export type outdoorMeter = device + +export type lock = device & { + group: boolean + master: boolean + groupName: string + lockDevicesIds: string[] +} + +export type lockPro = device & { + group: boolean + master: boolean + groupName: string + lockDevicesIds: string[] +} + +export type keypad = device & { + remoteType: string + lockDeviceId: string + keyList: keyList +} + +export type keypadTouch = device & { + remoteType: string + lockDeviceId: string + keyList: keyList +} + +interface keyList { + id: number + name: string + type: string + password: string + iv: string + status: string + createTime: number +} + +export type remote = device + +export type motionSensor = device + +export type contactSensor = device + +export type waterLeakDetector = device + +export type ceilingLight = device + +export type ceilingLightPro = device + +export type plug = device + +export type plugMini = device + +export type airPurifier = device + +export type airPurifierTable = device + +export type airPurifierVOC = device + +export type airPurifierTableVOC = device + +export type stripLight = device + +export type colorBulb = device + +export type robotVacuumCleanerS1 = device + +export type robotVacuumCleanerS1Plus = device + +export type floorCleaningRobotS10 = device + +export type humidifier = device + +export type IndoorCam = device + +export type pantiltCam = device + +export type pantiltCam2k = device + +export type blindTilt = device & { + blindTiltDevicesIds: string[] + calibrate: boolean + group: boolean + master: boolean + direction: string + slidePosition: number +} + +export type batteryCirculatorFan = device + +/** + * Allowed command types for device control. + */ +export type commandType = 'command' | 'customize' + +/** + * Request payload for controlling a device. + */ +export interface pushRequest { + command: string + parameter: string + commandType: commandType +} + +/** + * Body of a device push response. + */ +export interface pushResponseBody { + commandId: string +} + +/** + * Response from a device control (push) request. + */ +export interface pushResponse { + statusCode: number + body: pushResponseBody + message: string +} + +export interface bodyChange { + command: string + parameter: string + commandType: string +} + +// json response from SwitchBot API +export interface devices { + statusCode: number + message: string + body: body +} + +export interface body { + deviceList: device[] + infraredRemoteList: infraredRemoteList +} + +export interface deviceStatusRequest { + statusCode: number + message: string + body: deviceStatus +} + +export interface deviceStatus extends device { + // properties on all devices + deviceId: string + deviceType: string + hubDeviceId: string + version: number +}; + +export type botStatus = deviceStatus & { + power: string + battery: number + mode: 'pressMode' | 'switchMode' | 'customizeMode' +} + +export type curtainStatus = deviceStatus & { + calibrate: boolean + group: boolean + moving: boolean + battery: number + slidePosition: number + lightLevel?: 'bright' | 'dim' +} + +export type meterStatus = deviceStatus & { + temperature: number + battery: number + humidity: number +} + +export type meterPlusStatus = deviceStatus & { + temperature: number + battery: number + humidity: number +} + +export type meterProStatus = deviceStatus & { + temperature: number + battery: number + humidity: number + version: string +} + +export type meterProCO2Status = deviceStatus & { + temperature: number + battery: number + humidity: number + version: string + CO2: number +} + +export type outdoorMeterStatus = deviceStatus & { + battery: number + temperature: number + humidity: number +} + +export type lockStatus = deviceStatus & { + lockState: string + doorState: string + moveDetected: boolean + battery: number +} + +export type lockProStatus = deviceStatus & { + lockState: string + doorState: string + moveDetected: boolean + battery: number +} + +export type motionSensorStatus = deviceStatus & { + battery: number + moveDetected: boolean + brightness: 'bright' | 'dim' +} + +export type contactSensorStatus = deviceStatus & { + battery: number + moveDetected: boolean + openState: 'open' | 'close' | 'timeOutNotClose' + brightness: 'bright' | 'dim' +} + +export type waterLeakDetectorStatus = deviceStatus & { + battery: number + status: 0 /* dry */ | 1 /* leak detected */ +} + +export type ceilingLightStatus = deviceStatus & { + power: boolean + brightness: number + colorTemperature: number +} + +export type ceilingLightProStatus = deviceStatus & { + power: boolean + brightness: number + colorTemperature: number +} + +export type plugStatus = deviceStatus & { + power: string + version: string +} + +export type plugMiniStatus = deviceStatus & { + voltage: Float64Array + weight: Float64Array + electricityOfDay: number + electricCurrent: Float64Array + power: string +} + +export type stripLightStatus = deviceStatus & { + power: string + brightness: number + color: string +} + +export type colorBulbStatus = deviceStatus & { + power: string + brightness: number + color: string + colorTemperature: number +} + +export type robotVacuumCleanerS1Status = deviceStatus & { + workingStatus: string + onlineStatus: string + battery: number +} + +export type robotVacuumCleanerS1PlusStatus = deviceStatus & { + workingStatus: string + onlineStatus: string + battery: number +} + +export type floorCleaningRobotS10Status = deviceStatus & { + workingStatus: string + onlineStatus: string + battery: number + waterBaseBattery: number + taskType: string +} + +export type humidifierStatus = deviceStatus & { + power: string + humidity: number + temperature: number + nebulizationEfficiency: number + auto: boolean + childLock: boolean + sound: boolean + lackWater: boolean +} + +export type humidifier2Status = deviceStatus & { + power: string + humidity: number + temperature: number + nebulizationEfficiency: number + auto: boolean + childLock: boolean + sound: boolean + lackWater: boolean +} + +export type blindTiltStatus = deviceStatus & { + calibrate: boolean + battery: number + direction: string + slidePosition: string + lightLevel?: 'bright' | 'dim' +} + +export type hub2Status = deviceStatus & { + temperature: number + lightLevel: number + humidity: number +} + +export type batteryCirculatorFanStatus = deviceStatus & { + mode: 'direct' | 'natural' | 'sleep' | 'baby' + version: string + battery: number + power: string + nightStatus: number + oscillation: string + verticalOscillation: string + chargingStatus: string + fanSpeed: number +} + +export type circulatorFanStatus = deviceStatus & { + mode: 'direct' | 'natural' | 'sleep' | 'baby' + version: string + power: string + nightStatus: number + oscillation: string + verticalOscillation: string + fanSpeed: number +} + +export type relaySwitch1Status = deviceStatus & { + switchStatus: 0 | 1 + version: string +} + +export type relaySwitch1PMStatus = deviceStatus & { + switchStatus: 0 | 1 + voltage: number + version: string + power: number + usedElectricity: number + electricCurrent: number +} + +export type airPurifierStatus = deviceStatus & { + power: string + mode: number + childLock: number + version: string +} + +export type airPurifierTableStatus = deviceStatus & { + power: string + mode: number + childLock: number + version: string +} + +export type airPurifierVOCStatus = deviceStatus & { + power: string + mode: number + childLock: number + version: string +} + +export type airPurifierTableVOCStatus = deviceStatus & { + power: string + mode: number + childLock: number + version: string +} + +export interface webhookRequest { + action: string + url: string + deviceList: string +} + +export interface setupWebhookResponse { + statusCode: number + body: object + message: string +} + +export interface queryWebhookResponse { + statusCode: number + body: WebhookDetail[] + message: string +} + +export interface WebhookDetail { + url: string + createTime: number + lastUpdateTime: number + deviceList: string + enable: boolean +} + +export interface updateWebhookResponse { + statusCode: number + body: object + message: string +} + +export interface deleteWebhookResponse { + statusCode: number + body: object + message: string +} + +interface deviceWebhook { + eventType: string + eventVersion: string + context: deviceWebhookContext +} + +export { deviceWebhook } + +export interface deviceWebhookContext { + // properties on all devices + deviceMac: string + deviceType: string + timeOfSample: number +} + +export type botWebhookContext = deviceWebhookContext & { + power: string // "on"or"off" + battery: number + deviceMode: 'pressMode' | 'switchMode' | 'customizeMode' +} + +export type curtainWebhookContext = deviceWebhookContext & { + calibrate: boolean + group: boolean + slidePosition: number // 0~100 + battery: number +} + +export type curtain3WebhookContext = deviceWebhookContext & { + calibrate: boolean + group: boolean + slidePosition: number // 0~100 + battery: number +} + +export type motionSensorWebhookContext = deviceWebhookContext & { + detectionState: 'NOT_DETECTED' | 'DETECTED' + battery: number // 0~100 +} + +export type contactSensorWebhookContext = deviceWebhookContext & { + detectionState: 'NOT_DETECTED' | 'DETECTED' + battery: number // 0~100 + doorMode: 'IN_DOOR' | 'OUT_DOOR' + brightness: 'dim' | 'bright' + openState: 'open' | 'close' | 'timeOutNotClose' +} + +export type waterLeakDetectorWebhookContext = deviceWebhookContext & { + detectionState: 0 | 1 + battery: number // 0~100 +} + +export type meterWebhookContext = deviceWebhookContext & { + temperature: number + battery: number // 0~100 + scale: 'CELSIUS' | 'FAHRENHEIT' + humidity: number +} + +export type meterPlusWebhookContext = deviceWebhookContext & { + temperature: number + battery: number // 0~100 + scale: 'CELSIUS' | 'FAHRENHEIT' + humidity: number +} + +export type meterProWebhookContext = deviceWebhookContext & { + temperature: number + battery: number // 0~100 + scale: 'CELSIUS' | 'FAHRENHEIT' + humidity: number +} + +export type meterProCO2WebhookContext = deviceWebhookContext & { + temperature: number + battery: number // 0~100 + scale: 'CELSIUS' | 'FAHRENHEIT' + humidity: number + CO2: number +} + +export type outdoorMeterWebhookContext = deviceWebhookContext & { + temperature: number + battery: number // 0~100 + scale: 'CELSIUS' | 'FAHRENHEIT' + humidity: number +} + +export type lockWebhookContext = deviceWebhookContext & { + lockState: 'UNLOCKED' | 'LOCKED' | 'JAMMED' + battery: number // 0~100 +} + +export type lockProWebhookContext = deviceWebhookContext & { + lockState: 'UNLOCKED' | 'LOCKED' | 'JAMMED' + battery: number // 0~100 +} + +export type indoorCameraWebhookContext = deviceWebhookContext & { + detectionState: 'DETECTED' +} + +export type panTiltCamWebhookContext = deviceWebhookContext & { + detectionState: 'DETECTED' +} + +export type colorBulbWebhookContext = deviceWebhookContext & { + powerState: 'ON' | 'OFF' + brightness: number + color: string // RGB 255:255:255 + colorTemperature: number // 2700~6500 +} + +export type stripLightWebhookContext = deviceWebhookContext & { + powerState: 'ON' | 'OFF' + brightness: number + color: string // RGB 255:255:255 +} + +export type plugWebhookContext = deviceWebhookContext & { + powerState: 'ON' | 'OFF' +} + +export type plugMiniUSWebhookContext = deviceWebhookContext & { + powerState: 'ON' | 'OFF' +} + +export type plugMiniJPWebhookContext = deviceWebhookContext & { + powerState: 'ON' | 'OFF' +} + +export type robotVacuumCleanerS1WebhookContext = deviceWebhookContext & { + workingStatus: 'Standby' | 'Clearing' | 'Paused' | 'GotoChargeBase' | 'Charging' | 'ChargeDone' | 'Dormant' | 'InTrouble' | 'InRemoteControl' | 'InDustCollecting' + onlineStatus: 'online' | 'offline' + battery: number // 0~100 +} + +export type robotVacuumCleanerS1PlusWebhookContext = deviceWebhookContext & { + workingStatus: 'Standby' | 'Clearing' | 'Paused' | 'GotoChargeBase' | 'Charging' | 'ChargeDone' | 'Dormant' | 'InTrouble' | 'InRemoteControl' | 'InDustCollecting' + onlineStatus: 'online' | 'offline' + battery: number // 0~100 +} + +export type floorCleaningRobotS10WebhookContext = deviceWebhookContext & { + workingStatus: 'Standby' | 'Clearing' | 'Paused' | 'GotoChargeBase' | 'Charging' | 'ChargeDone' | 'Dormant' | 'InTrouble' | 'InRemoteControl' | 'InDustCollecting' + onlineStatus: 'online' | 'offline' + battery: number // 0~100 + waterBaseBattery: number // 0~100 + taskType: 'standBy' | 'explore' | 'cleanAll' | 'cleanArea' | 'cleanRoom' | 'fillWater' | 'deepWashing' | 'backToCharge' | 'markingWaterBase' | 'drying' | 'collectDust' | 'remoteControl' | 'cleanWithExplorer' | 'fillWaterForHumi' | 'markingHumi' +} + +export type ceilingLightWebhookContext = deviceWebhookContext & { + powerState: 'ON' | 'OFF' + brightness: number + colorTemperature: number // 2700~6500 +} + +export type ceilingLightProWebhookContext = deviceWebhookContext & { + powerState: 'ON' | 'OFF' + brightness: number + colorTemperature: number // 2700~6500 +} + +export type keypadWebhookContext = deviceWebhookContext & { + eventName: 'createKey' | 'deleteKey' + commandId: string + result: 'success' | 'failed' | 'timeout' +} + +export type keypadTouchWebhookContext = deviceWebhookContext & { + eventName: 'createKey' | 'deleteKey' + commandId: string + result: 'success' | 'failed' | 'timeout' +} + +export type hub2WebhookContext = deviceWebhookContext & { + temperature: number + humidity: number + lightLevel: number + scale: 'CELSIUS' | 'FAHRENHEIT' +} + +export type batteryCirculatorFanWebhookContext = deviceWebhookContext & { + mode: 'direct' | 'natural' | 'sleep' | 'baby' + version: string + battery: number + powerState: 'ON' | 'OFF' + nightStatus: 'off' | 1 | 2 + oscillation: 'on' | 'off' + verticalOscillation: 'on' | 'off' + chargingStatus: 'charging' | 'uncharged' + fanSpeed: number // 1~100 +} + +export type circulatorFanWebhookContext = deviceWebhookContext & { + mode: 'direct' | 'natural' | 'sleep' | 'baby' + version: string + battery: number + powerState: 'ON' | 'OFF' + nightStatus: 'off' | 1 | 2 + oscillation: 'on' | 'off' + verticalOscillation: 'on' | 'off' + fanSpeed: number // 1~100 +} + +export type blindTiltWebhookContext = deviceWebhookContext & { + version: string + calibrate: boolean + group: boolean + direction: string + slidePosition: number // 0~100 + battery: number +} + +export type humidifierWebhookContext = deviceWebhookContext & { + temperature: number + humidity: number + scale: 'CELSIUS' | 'FAHRENHEIT' +} + +export type humidifier2WebhookContext = deviceWebhookContext & { + temperature: number + humidity: number + scale: 'CELSIUS' | 'FAHRENHEIT' +} + +export type relaySwitch1Context = deviceWebhookContext & { + online: boolean + overTemperature: boolean + switchStatus: 0 | 1 + version: string +} + +export type relaySwitch1PMContext = deviceWebhookContext & { + online: boolean + overTemperature: boolean + switchStatus: 0 | 1 + overload: boolean + version: string +} + +export type airPurifierVOCWebhookContext = deviceWebhookContext & { + power: string + mode: number + childLock: number +} + +export type airPurifierTableVOCWebhookContext = deviceWebhookContext & { + power: string + mode: number + childLock: number +} + +export type airPurifierPM25WebhookContext = deviceWebhookContext & { + power: string + mode: number + childLock: number +} + +export type airPurifierTablePM25WebhookContext = deviceWebhookContext & { + power: string + mode: number + childLock: number +} + +export type airPurifierWebhookContext = deviceWebhookContext & { + power: string + mode: number + childLock: number +} + +export type airPurifierTableWebhookContext = deviceWebhookContext & { + power: string + mode: number + childLock: number +} + +export interface infraredRemoteList { + device: irdevice[] +} + +export interface irdevice { + deviceId?: string + deviceName: string + remoteType: string + hubDeviceId: string +}