From 6c996a5b98561b079e5f8dcb08acc5cb3ee8e8d8 Mon Sep 17 00:00:00 2001
From: Marin Karamihalev <marin.karamihalev@iopsys.eu>
Date: Thu, 17 Dec 2020 14:33:50 +0100
Subject: [PATCH] Documentation!

---
 docs/assets/css/main.css                      |   1 +
 docs/assets/images/icons.png                  | Bin 0 -> 9615 bytes
 docs/assets/images/icons@2x.png               | Bin 0 -> 28144 bytes
 docs/assets/images/widgets.png                | Bin 0 -> 480 bytes
 docs/assets/images/widgets@2x.png             | Bin 0 -> 855 bytes
 docs/assets/js/main.js                        |  51 ++
 docs/assets/js/search.json                    |   1 +
 docs/globals.html                             | 140 ++++
 docs/index.html                               | 237 ++++++
 docs/interfaces/_types_d_.addmessage.html     | 304 ++++++++
 docs/interfaces/_types_d_.basemessage.html    | 320 ++++++++
 docs/interfaces/_types_d_.connectevents.html  | 258 ++++++
 docs/interfaces/_types_d_.deletemessage.html  | 312 ++++++++
 docs/interfaces/_types_d_.device.html         | 649 ++++++++++++++++
 docs/interfaces/_types_d_.deviceerror.html    | 281 +++++++
 docs/interfaces/_types_d_.encodeargs.html     | 309 ++++++++
 docs/interfaces/_types_d_.errormessage.html   | 312 ++++++++
 docs/interfaces/_types_d_.getmessage.html     | 304 ++++++++
 docs/interfaces/_types_d_.initresult.html     | 258 ++++++
 docs/interfaces/_types_d_.mqttrequest.html    | 277 +++++++
 docs/interfaces/_types_d_.operatemessage.html | 304 ++++++++
 docs/interfaces/_types_d_.protocol.html       | 403 ++++++++++
 docs/interfaces/_types_d_.protocolargs.html   | 309 ++++++++
 docs/interfaces/_types_d_.protocolevents.html | 279 +++++++
 docs/interfaces/_types_d_.setmessage.html     | 312 ++++++++
 docs/modules/_config_.html                    | 106 +++
 docs/modules/_index_.html                     | 734 ++++++++++++++++++
 docs/modules/_lib_.html                       | 310 ++++++++
 docs/modules/_protocol_index_.html            | 520 +++++++++++++
 ...rotocol_js_usp_protobuf_protomessage_.html | 416 ++++++++++
 docs/modules/_protocol_lib_.html              | 422 ++++++++++
 docs/modules/_types_d_.html                   | 422 ++++++++++
 package-lock.json                             | 177 ++++-
 package.json                                  |   4 +-
 src/index.ts                                  |  62 +-
 src/lib.ts                                    |   6 +-
 src/protocol/index.ts                         |  11 +
 src/protocol/js-usp-protobuf/protoMessage.ts  |   7 +
 src/protocol/lib.ts                           |   6 +-
 src/testy.ts                                  |  36 +-
 src/types.d.ts                                | 137 +++-
 tsconfig.json                                 |   7 +-
 42 files changed, 8941 insertions(+), 63 deletions(-)
 create mode 100644 docs/assets/css/main.css
 create mode 100644 docs/assets/images/icons.png
 create mode 100644 docs/assets/images/icons@2x.png
 create mode 100644 docs/assets/images/widgets.png
 create mode 100644 docs/assets/images/widgets@2x.png
 create mode 100644 docs/assets/js/main.js
 create mode 100644 docs/assets/js/search.json
 create mode 100644 docs/globals.html
 create mode 100644 docs/index.html
 create mode 100644 docs/interfaces/_types_d_.addmessage.html
 create mode 100644 docs/interfaces/_types_d_.basemessage.html
 create mode 100644 docs/interfaces/_types_d_.connectevents.html
 create mode 100644 docs/interfaces/_types_d_.deletemessage.html
 create mode 100644 docs/interfaces/_types_d_.device.html
 create mode 100644 docs/interfaces/_types_d_.deviceerror.html
 create mode 100644 docs/interfaces/_types_d_.encodeargs.html
 create mode 100644 docs/interfaces/_types_d_.errormessage.html
 create mode 100644 docs/interfaces/_types_d_.getmessage.html
 create mode 100644 docs/interfaces/_types_d_.initresult.html
 create mode 100644 docs/interfaces/_types_d_.mqttrequest.html
 create mode 100644 docs/interfaces/_types_d_.operatemessage.html
 create mode 100644 docs/interfaces/_types_d_.protocol.html
 create mode 100644 docs/interfaces/_types_d_.protocolargs.html
 create mode 100644 docs/interfaces/_types_d_.protocolevents.html
 create mode 100644 docs/interfaces/_types_d_.setmessage.html
 create mode 100644 docs/modules/_config_.html
 create mode 100644 docs/modules/_index_.html
 create mode 100644 docs/modules/_lib_.html
 create mode 100644 docs/modules/_protocol_index_.html
 create mode 100644 docs/modules/_protocol_js_usp_protobuf_protomessage_.html
 create mode 100644 docs/modules/_protocol_lib_.html
 create mode 100644 docs/modules/_types_d_.html

diff --git a/docs/assets/css/main.css b/docs/assets/css/main.css
new file mode 100644
index 0000000..3c0dcab
--- /dev/null
+++ b/docs/assets/css/main.css
@@ -0,0 +1 @@
+/*! normalize.css v1.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;font-family:sans-serif}button,input,select,textarea{font-family:sans-serif}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4,.tsd-index-panel h3{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:1em 40px}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}p,pre{margin:1em 0}code,kbd,pre,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:80%}sub{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;top:-0.5em}sub{bottom:-0.25em}dl,menu,ol,ul{margin:1em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ul,nav ol{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure,form{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0;white-space:normal;*margin-left:-7px}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button]{-webkit-appearance:button;cursor:pointer;*overflow:visible}input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;*overflow:visible}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0;*height:13px;*width:13px}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}.hljs{display:inline-block;padding:.5em;background:#fff;color:#000}.hljs-comment,.hljs-annotation,.hljs-template_comment,.diff .hljs-header,.hljs-chunk,.apache .hljs-cbracket{color:green}.hljs-keyword,.hljs-id,.hljs-built_in,.css .smalltalk .hljs-class,.hljs-winutils,.bash .hljs-variable,.tex .hljs-command,.hljs-request,.hljs-status,.nginx .hljs-title{color:blue}.xml .hljs-tag{color:blue}.xml .hljs-tag .hljs-value{color:blue}.hljs-string,.hljs-title,.hljs-parent,.hljs-tag .hljs-value,.hljs-rules .hljs-value{color:#a31515}.ruby .hljs-symbol{color:#a31515}.ruby .hljs-symbol .hljs-string{color:#a31515}.hljs-template_tag,.django .hljs-variable,.hljs-addition,.hljs-flow,.hljs-stream,.apache .hljs-tag,.hljs-date,.tex .hljs-formula,.coffeescript .hljs-attribute{color:#a31515}.ruby .hljs-string,.hljs-decorator,.hljs-filter .hljs-argument,.hljs-localvars,.hljs-array,.hljs-attr_selector,.hljs-pseudo,.hljs-pi,.hljs-doctype,.hljs-deletion,.hljs-envvar,.hljs-shebang,.hljs-preprocessor,.hljs-pragma,.userType,.apache .hljs-sqbracket,.nginx .hljs-built_in,.tex .hljs-special,.hljs-prompt{color:#2b91af}.hljs-phpdoc,.hljs-javadoc,.hljs-xmlDocTag{color:gray}.vhdl .hljs-typename{font-weight:bold}.vhdl .hljs-string{color:#666}.vhdl .hljs-literal{color:#a31515}.vhdl .hljs-attribute{color:#00b0e8}.xml .hljs-attribute{color:red}ul.tsd-descriptions>li>:first-child,.tsd-panel>:first-child,.col>:first-child,.col-11>:first-child,.col-10>:first-child,.col-9>:first-child,.col-8>:first-child,.col-7>:first-child,.col-6>:first-child,.col-5>:first-child,.col-4>:first-child,.col-3>:first-child,.col-2>:first-child,.col-1>:first-child,ul.tsd-descriptions>li>:first-child>:first-child,.tsd-panel>:first-child>:first-child,.col>:first-child>:first-child,.col-11>:first-child>:first-child,.col-10>:first-child>:first-child,.col-9>:first-child>:first-child,.col-8>:first-child>:first-child,.col-7>:first-child>:first-child,.col-6>:first-child>:first-child,.col-5>:first-child>:first-child,.col-4>:first-child>:first-child,.col-3>:first-child>:first-child,.col-2>:first-child>:first-child,.col-1>:first-child>:first-child,ul.tsd-descriptions>li>:first-child>:first-child>:first-child,.tsd-panel>:first-child>:first-child>:first-child,.col>:first-child>:first-child>:first-child,.col-11>:first-child>:first-child>:first-child,.col-10>:first-child>:first-child>:first-child,.col-9>:first-child>:first-child>:first-child,.col-8>:first-child>:first-child>:first-child,.col-7>:first-child>:first-child>:first-child,.col-6>:first-child>:first-child>:first-child,.col-5>:first-child>:first-child>:first-child,.col-4>:first-child>:first-child>:first-child,.col-3>:first-child>:first-child>:first-child,.col-2>:first-child>:first-child>:first-child,.col-1>:first-child>:first-child>:first-child{margin-top:0}ul.tsd-descriptions>li>:last-child,.tsd-panel>:last-child,.col>:last-child,.col-11>:last-child,.col-10>:last-child,.col-9>:last-child,.col-8>:last-child,.col-7>:last-child,.col-6>:last-child,.col-5>:last-child,.col-4>:last-child,.col-3>:last-child,.col-2>:last-child,.col-1>:last-child,ul.tsd-descriptions>li>:last-child>:last-child,.tsd-panel>:last-child>:last-child,.col>:last-child>:last-child,.col-11>:last-child>:last-child,.col-10>:last-child>:last-child,.col-9>:last-child>:last-child,.col-8>:last-child>:last-child,.col-7>:last-child>:last-child,.col-6>:last-child>:last-child,.col-5>:last-child>:last-child,.col-4>:last-child>:last-child,.col-3>:last-child>:last-child,.col-2>:last-child>:last-child,.col-1>:last-child>:last-child,ul.tsd-descriptions>li>:last-child>:last-child>:last-child,.tsd-panel>:last-child>:last-child>:last-child,.col>:last-child>:last-child>:last-child,.col-11>:last-child>:last-child>:last-child,.col-10>:last-child>:last-child>:last-child,.col-9>:last-child>:last-child>:last-child,.col-8>:last-child>:last-child>:last-child,.col-7>:last-child>:last-child>:last-child,.col-6>:last-child>:last-child>:last-child,.col-5>:last-child>:last-child>:last-child,.col-4>:last-child>:last-child>:last-child,.col-3>:last-child>:last-child>:last-child,.col-2>:last-child>:last-child>:last-child,.col-1>:last-child>:last-child>:last-child{margin-bottom:0}.container{max-width:1200px;margin:0 auto;padding:0 40px}@media(max-width: 640px){.container{padding:0 20px}}.container-main{padding-bottom:200px}.row{display:flex;position:relative;margin:0 -10px}.row:after{visibility:hidden;display:block;content:"";clear:both;height:0}.col,.col-11,.col-10,.col-9,.col-8,.col-7,.col-6,.col-5,.col-4,.col-3,.col-2,.col-1{box-sizing:border-box;float:left;padding:0 10px}.col-1{width:8.3333333333%}.offset-1{margin-left:8.3333333333%}.col-2{width:16.6666666667%}.offset-2{margin-left:16.6666666667%}.col-3{width:25%}.offset-3{margin-left:25%}.col-4{width:33.3333333333%}.offset-4{margin-left:33.3333333333%}.col-5{width:41.6666666667%}.offset-5{margin-left:41.6666666667%}.col-6{width:50%}.offset-6{margin-left:50%}.col-7{width:58.3333333333%}.offset-7{margin-left:58.3333333333%}.col-8{width:66.6666666667%}.offset-8{margin-left:66.6666666667%}.col-9{width:75%}.offset-9{margin-left:75%}.col-10{width:83.3333333333%}.offset-10{margin-left:83.3333333333%}.col-11{width:91.6666666667%}.offset-11{margin-left:91.6666666667%}.tsd-kind-icon{display:block;position:relative;padding-left:20px;text-indent:-20px}.tsd-kind-icon:before{content:"";display:inline-block;vertical-align:middle;width:17px;height:17px;margin:0 3px 2px 0;background-image:url(../images/icons.png)}@media(-webkit-min-device-pixel-ratio: 1.5),(min-resolution: 144dpi){.tsd-kind-icon:before{background-image:url(../images/icons@2x.png);background-size:238px 204px}}.tsd-signature.tsd-kind-icon:before{background-position:0 -153px}.tsd-kind-object-literal>.tsd-kind-icon:before{background-position:0px -17px}.tsd-kind-object-literal.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -17px}.tsd-kind-object-literal.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -17px}.tsd-kind-class>.tsd-kind-icon:before{background-position:0px -34px}.tsd-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -34px}.tsd-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -34px}.tsd-kind-class.tsd-has-type-parameter>.tsd-kind-icon:before{background-position:0px -51px}.tsd-kind-class.tsd-has-type-parameter.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -51px}.tsd-kind-class.tsd-has-type-parameter.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -51px}.tsd-kind-interface>.tsd-kind-icon:before{background-position:0px -68px}.tsd-kind-interface.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -68px}.tsd-kind-interface.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -68px}.tsd-kind-interface.tsd-has-type-parameter>.tsd-kind-icon:before{background-position:0px -85px}.tsd-kind-interface.tsd-has-type-parameter.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -85px}.tsd-kind-interface.tsd-has-type-parameter.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -85px}.tsd-kind-namespace>.tsd-kind-icon:before{background-position:0px -102px}.tsd-kind-namespace.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -102px}.tsd-kind-namespace.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -102px}.tsd-kind-module>.tsd-kind-icon:before{background-position:0px -102px}.tsd-kind-module.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -102px}.tsd-kind-module.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -102px}.tsd-kind-enum>.tsd-kind-icon:before{background-position:0px -119px}.tsd-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -119px}.tsd-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -119px}.tsd-kind-enum-member>.tsd-kind-icon:before{background-position:0px -136px}.tsd-kind-enum-member.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -136px}.tsd-kind-enum-member.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -136px}.tsd-kind-signature>.tsd-kind-icon:before{background-position:0px -153px}.tsd-kind-signature.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -153px}.tsd-kind-signature.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -153px}.tsd-kind-type-alias>.tsd-kind-icon:before{background-position:0px -170px}.tsd-kind-type-alias.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -170px}.tsd-kind-type-alias.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -170px}.tsd-kind-type-alias.tsd-has-type-parameter>.tsd-kind-icon:before{background-position:0px -187px}.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -187px}.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -187px}.tsd-kind-variable>.tsd-kind-icon:before{background-position:-136px -0px}.tsd-kind-variable.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -0px}.tsd-kind-variable.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -0px}.tsd-kind-variable.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -0px}.tsd-kind-variable.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -0px}.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -0px}.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -0px}.tsd-kind-variable.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -0px}.tsd-kind-variable.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -0px}.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -0px}.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -0px}.tsd-kind-variable.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -0px}.tsd-kind-variable.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -0px}.tsd-kind-property>.tsd-kind-icon:before{background-position:-136px -0px}.tsd-kind-property.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -0px}.tsd-kind-property.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -0px}.tsd-kind-property.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -0px}.tsd-kind-property.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -0px}.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -0px}.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -0px}.tsd-kind-property.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -0px}.tsd-kind-property.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -0px}.tsd-kind-property.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -0px}.tsd-kind-property.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -0px}.tsd-kind-property.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -0px}.tsd-kind-property.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -0px}.tsd-kind-get-signature>.tsd-kind-icon:before{background-position:-136px -17px}.tsd-kind-get-signature.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -17px}.tsd-kind-get-signature.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -17px}.tsd-kind-get-signature.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -17px}.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -17px}.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -17px}.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -17px}.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -17px}.tsd-kind-get-signature.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -17px}.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -17px}.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -17px}.tsd-kind-get-signature.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -17px}.tsd-kind-get-signature.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -17px}.tsd-kind-set-signature>.tsd-kind-icon:before{background-position:-136px -34px}.tsd-kind-set-signature.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -34px}.tsd-kind-set-signature.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -34px}.tsd-kind-set-signature.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -34px}.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -34px}.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -34px}.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -34px}.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -34px}.tsd-kind-set-signature.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -34px}.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -34px}.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -34px}.tsd-kind-set-signature.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -34px}.tsd-kind-set-signature.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -34px}.tsd-kind-accessor>.tsd-kind-icon:before{background-position:-136px -51px}.tsd-kind-accessor.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -51px}.tsd-kind-accessor.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -51px}.tsd-kind-accessor.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -51px}.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -51px}.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -51px}.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -51px}.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -51px}.tsd-kind-accessor.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -51px}.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -51px}.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -51px}.tsd-kind-accessor.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -51px}.tsd-kind-accessor.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -51px}.tsd-kind-function>.tsd-kind-icon:before{background-position:-136px -68px}.tsd-kind-function.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -68px}.tsd-kind-function.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-function.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -68px}.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -68px}.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -68px}.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -68px}.tsd-kind-function.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-function.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -68px}.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -68px}.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-function.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -68px}.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -68px}.tsd-kind-method>.tsd-kind-icon:before{background-position:-136px -68px}.tsd-kind-method.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -68px}.tsd-kind-method.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-method.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -68px}.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -68px}.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -68px}.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -68px}.tsd-kind-method.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-method.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -68px}.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -68px}.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-method.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -68px}.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -68px}.tsd-kind-call-signature>.tsd-kind-icon:before{background-position:-136px -68px}.tsd-kind-call-signature.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -68px}.tsd-kind-call-signature.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-call-signature.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -68px}.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -68px}.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -68px}.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -68px}.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-call-signature.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -68px}.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -68px}.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-call-signature.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -68px}.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -68px}.tsd-kind-function.tsd-has-type-parameter>.tsd-kind-icon:before{background-position:-136px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -85px}.tsd-kind-method.tsd-has-type-parameter>.tsd-kind-icon:before{background-position:-136px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -85px}.tsd-kind-constructor>.tsd-kind-icon:before{background-position:-136px -102px}.tsd-kind-constructor.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -102px}.tsd-kind-constructor.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -102px}.tsd-kind-constructor.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -102px}.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -102px}.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -102px}.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -102px}.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -102px}.tsd-kind-constructor.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -102px}.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -102px}.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -102px}.tsd-kind-constructor.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -102px}.tsd-kind-constructor.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -102px}.tsd-kind-constructor-signature>.tsd-kind-icon:before{background-position:-136px -102px}.tsd-kind-constructor-signature.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -102px}.tsd-kind-constructor-signature.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -102px}.tsd-kind-index-signature>.tsd-kind-icon:before{background-position:-136px -119px}.tsd-kind-index-signature.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -119px}.tsd-kind-index-signature.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -119px}.tsd-kind-index-signature.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -119px}.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -119px}.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -119px}.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -119px}.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -119px}.tsd-kind-index-signature.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -119px}.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -119px}.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -119px}.tsd-kind-index-signature.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -119px}.tsd-kind-index-signature.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -119px}.tsd-kind-event>.tsd-kind-icon:before{background-position:-136px -136px}.tsd-kind-event.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -136px}.tsd-kind-event.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -136px}.tsd-kind-event.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -136px}.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -136px}.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -136px}.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -136px}.tsd-kind-event.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -136px}.tsd-kind-event.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -136px}.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -136px}.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -136px}.tsd-kind-event.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -136px}.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -136px}.tsd-is-static>.tsd-kind-icon:before{background-position:-136px -153px}.tsd-is-static.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -153px}.tsd-is-static.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -153px}.tsd-is-static.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -153px}.tsd-is-static.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -153px}.tsd-is-static.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -153px}.tsd-is-static.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -153px}.tsd-is-static.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -153px}.tsd-is-static.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -153px}.tsd-is-static.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -153px}.tsd-is-static.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -153px}.tsd-is-static.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -153px}.tsd-is-static.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -153px}.tsd-is-static.tsd-kind-function>.tsd-kind-icon:before{background-position:-136px -170px}.tsd-is-static.tsd-kind-function.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -170px}.tsd-is-static.tsd-kind-function.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -170px}.tsd-is-static.tsd-kind-method>.tsd-kind-icon:before{background-position:-136px -170px}.tsd-is-static.tsd-kind-method.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -170px}.tsd-is-static.tsd-kind-method.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -170px}.tsd-is-static.tsd-kind-call-signature>.tsd-kind-icon:before{background-position:-136px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -170px}.tsd-is-static.tsd-kind-event>.tsd-kind-icon:before{background-position:-136px -187px}.tsd-is-static.tsd-kind-event.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -187px}.tsd-is-static.tsd-kind-event.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -187px}@keyframes fade-in{from{opacity:0}to{opacity:1}}@keyframes fade-out{from{opacity:1;visibility:visible}to{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 shift-to-left{from{transform:translate(0, 0)}to{transform:translate(-25%, 0)}}@keyframes unshift-to-left{from{transform:translate(-25%, 0)}to{transform:translate(0, 0)}}@keyframes pop-in-from-right{from{transform:translate(100%, 0)}to{transform:translate(0, 0)}}@keyframes pop-out-to-right{from{transform:translate(0, 0);visibility:visible}to{transform:translate(100%, 0)}}body{background:#fdfdfd;font-family:"Segoe UI",sans-serif;font-size:16px;color:#222}a{color:#4da6ff;text-decoration:none}a:hover{text-decoration:underline}code,pre{font-family:Menlo,Monaco,Consolas,"Courier New",monospace;padding:.2em;margin:0;font-size:14px;background-color:rgba(0,0,0,.04)}pre{padding:10px}pre code{padding:0;font-size:100%;background-color:transparent}.tsd-typography{line-height:1.333em}.tsd-typography ul{list-style:square;padding:0 0 0 20px;margin:0}.tsd-typography h4,.tsd-typography .tsd-index-panel h3,.tsd-index-panel .tsd-typography h3,.tsd-typography h5,.tsd-typography h6{font-size:1em;margin:0}.tsd-typography h5,.tsd-typography h6{font-weight:normal}.tsd-typography p,.tsd-typography ul,.tsd-typography ol{margin:1em 0}@media(min-width: 901px)and (max-width: 1024px){html.default .col-content{width:72%}html.default .col-menu{width:28%}html.default .tsd-navigation{padding-left:10px}}@media(max-width: 900px){html.default .col-content{float:none;width:100%}html.default .col-menu{position:fixed !important;overflow:auto;-webkit-overflow-scrolling:touch;z-index:1024;top:0 !important;bottom:0 !important;left:auto !important;right:0 !important;width:100%;padding:20px 20px 0 0;max-width:450px;visibility:hidden;background-color:#fff;transform:translate(100%, 0)}html.default .col-menu>*:last-child{padding-bottom:20px}html.default .overlay{content:"";display:block;position:fixed;z-index:1023;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.75);visibility:hidden}html.default.to-has-menu .overlay{animation:fade-in .4s}html.default.to-has-menu header,html.default.to-has-menu footer,html.default.to-has-menu .col-content{animation:shift-to-left .4s}html.default.to-has-menu .col-menu{animation:pop-in-from-right .4s}html.default.from-has-menu .overlay{animation:fade-out .4s}html.default.from-has-menu header,html.default.from-has-menu footer,html.default.from-has-menu .col-content{animation:unshift-to-left .4s}html.default.from-has-menu .col-menu{animation:pop-out-to-right .4s}html.default.has-menu body{overflow:hidden}html.default.has-menu .overlay{visibility:visible}html.default.has-menu header,html.default.has-menu footer,html.default.has-menu .col-content{transform:translate(-25%, 0)}html.default.has-menu .col-menu{visibility:visible;transform:translate(0, 0)}}.tsd-page-title{padding:70px 0 20px 0;margin:0 0 40px 0;background:#fff;box-shadow:0 0 5px rgba(0,0,0,.35)}.tsd-page-title h1{margin:0}.tsd-breadcrumb{margin:0;padding:0;color:#707070}.tsd-breadcrumb a{color:#707070;text-decoration:none}.tsd-breadcrumb a:hover{text-decoration:underline}.tsd-breadcrumb li{display:inline}.tsd-breadcrumb li:after{content:" / "}html.minimal .container{margin:0}html.minimal .container-main{padding-top:50px;padding-bottom:0}html.minimal .content-wrap{padding-left:300px}html.minimal .tsd-navigation{position:fixed !important;overflow:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box;z-index:1;left:0;top:40px;bottom:0;width:300px;padding:20px;margin:0}html.minimal .tsd-member .tsd-member{margin-left:0}html.minimal .tsd-page-toolbar{position:fixed;z-index:2}html.minimal #tsd-filter .tsd-filter-group{right:0;transform:none}html.minimal footer{background-color:transparent}html.minimal footer .container{padding:0}html.minimal .tsd-generator{padding:0}@media(max-width: 900px){html.minimal .tsd-navigation{display:none}html.minimal .content-wrap{padding-left:0}}dl.tsd-comment-tags{overflow:hidden}dl.tsd-comment-tags dt{float:left;padding:1px 5px;margin:0 10px 0 0;border-radius:4px;border:1px solid #707070;color:#707070;font-size:.8em;font-weight:normal}dl.tsd-comment-tags dd{margin:0 0 10px 0}dl.tsd-comment-tags dd:before,dl.tsd-comment-tags dd:after{display:table;content:" "}dl.tsd-comment-tags dd pre,dl.tsd-comment-tags dd:after{clear:both}dl.tsd-comment-tags p{margin:0}.tsd-panel.tsd-comment .lead{font-size:1.1em;line-height:1.333em;margin-bottom:2em}.tsd-panel.tsd-comment .lead:last-child{margin-bottom:0}.toggle-protected .tsd-is-private{display:none}.toggle-public .tsd-is-private,.toggle-public .tsd-is-protected,.toggle-public .tsd-is-private-protected{display:none}.toggle-inherited .tsd-is-inherited{display:none}.toggle-only-exported .tsd-is-not-exported{display:none}.toggle-externals .tsd-is-external{display:none}#tsd-filter{position:relative;display:inline-block;height:40px;vertical-align:bottom}.no-filter #tsd-filter{display:none}#tsd-filter .tsd-filter-group{display:inline-block;height:40px;vertical-align:bottom;white-space:nowrap}#tsd-filter input{display:none}@media(max-width: 900px){#tsd-filter .tsd-filter-group{display:block;position:absolute;top:40px;right:20px;height:auto;background-color:#fff;visibility:hidden;transform:translate(50%, 0);box-shadow:0 0 4px rgba(0,0,0,.25)}.has-options #tsd-filter .tsd-filter-group{visibility:visible}.to-has-options #tsd-filter .tsd-filter-group{animation:fade-in .2s}.from-has-options #tsd-filter .tsd-filter-group{animation:fade-out .2s}#tsd-filter label,#tsd-filter .tsd-select{display:block;padding-right:20px}}footer{border-top:1px solid #eee;background-color:#fff}footer.with-border-bottom{border-bottom:1px solid #eee}footer .tsd-legend-group{font-size:0}footer .tsd-legend{display:inline-block;width:25%;padding:0;font-size:16px;list-style:none;line-height:1.333em;vertical-align:top}@media(max-width: 900px){footer .tsd-legend{width:50%}}.tsd-hierarchy{list-style:square;padding:0 0 0 20px;margin:0}.tsd-hierarchy .target{font-weight:bold}.tsd-index-panel .tsd-index-content{margin-bottom:-30px !important}.tsd-index-panel .tsd-index-section{margin-bottom:30px !important}.tsd-index-panel h3{margin:0 -20px 10px -20px;padding:0 20px 10px 20px;border-bottom:1px solid #eee}.tsd-index-panel ul.tsd-index-list{-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3;-webkit-column-gap:20px;-moz-column-gap:20px;-ms-column-gap:20px;-o-column-gap:20px;column-gap:20px;padding:0;list-style:none;line-height:1.333em}@media(max-width: 900px){.tsd-index-panel ul.tsd-index-list{-webkit-column-count:1;-moz-column-count:1;-ms-column-count:1;-o-column-count:1;column-count:1}}@media(min-width: 901px)and (max-width: 1024px){.tsd-index-panel ul.tsd-index-list{-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}}.tsd-index-panel ul.tsd-index-list li{-webkit-page-break-inside:avoid;-moz-page-break-inside:avoid;-ms-page-break-inside:avoid;-o-page-break-inside:avoid;page-break-inside:avoid}.tsd-index-panel a,.tsd-index-panel .tsd-parent-kind-module a{color:#9600ff}.tsd-index-panel .tsd-parent-kind-interface a{color:#647f1b}.tsd-index-panel .tsd-parent-kind-enum a{color:#937210}.tsd-index-panel .tsd-parent-kind-class a{color:#0672de}.tsd-index-panel .tsd-kind-module a{color:#9600ff}.tsd-index-panel .tsd-kind-interface a{color:#647f1b}.tsd-index-panel .tsd-kind-enum a{color:#937210}.tsd-index-panel .tsd-kind-class a{color:#0672de}.tsd-index-panel .tsd-is-private a{color:#707070}.tsd-flag{display:inline-block;padding:1px 5px;border-radius:4px;color:#fff;background-color:#707070;text-indent:0;font-size:14px;font-weight:normal}.tsd-anchor{position:absolute;top:-100px}.tsd-member{position:relative}.tsd-member .tsd-anchor+h3{margin-top:0;margin-bottom:0;border-bottom:none}.tsd-navigation{margin:0 0 0 40px}.tsd-navigation a{display:block;padding-top:2px;padding-bottom:2px;border-left:2px solid transparent;color:#222;text-decoration:none;transition:border-left-color .1s}.tsd-navigation a:hover{text-decoration:underline}.tsd-navigation ul{margin:0;padding:0;list-style:none}.tsd-navigation li{padding:0}.tsd-navigation.primary{padding-bottom:40px}.tsd-navigation.primary a{display:block;padding-top:6px;padding-bottom:6px}.tsd-navigation.primary ul li a{padding-left:5px}.tsd-navigation.primary ul li li a{padding-left:25px}.tsd-navigation.primary ul li li li a{padding-left:45px}.tsd-navigation.primary ul li li li li a{padding-left:65px}.tsd-navigation.primary ul li li li li li a{padding-left:85px}.tsd-navigation.primary ul li li li li li li a{padding-left:105px}.tsd-navigation.primary>ul{border-bottom:1px solid #eee}.tsd-navigation.primary li{border-top:1px solid #eee}.tsd-navigation.primary li.current>a{font-weight:bold}.tsd-navigation.primary li.label span{display:block;padding:20px 0 6px 5px;color:#707070}.tsd-navigation.primary li.globals+li>span,.tsd-navigation.primary li.globals+li>a{padding-top:20px}.tsd-navigation.secondary{max-height:calc(100vh - 1rem - 40px);overflow:auto;position:-webkit-sticky;position:sticky;top:calc(.5rem + 40px);transition:.3s}.tsd-navigation.secondary.tsd-navigation--toolbar-hide{max-height:calc(100vh - 1rem);top:.5rem}.tsd-navigation.secondary ul{transition:opacity .2s}.tsd-navigation.secondary ul li a{padding-left:25px}.tsd-navigation.secondary ul li li a{padding-left:45px}.tsd-navigation.secondary ul li li li a{padding-left:65px}.tsd-navigation.secondary ul li li li li a{padding-left:85px}.tsd-navigation.secondary ul li li li li li a{padding-left:105px}.tsd-navigation.secondary ul li li li li li li a{padding-left:125px}.tsd-navigation.secondary ul.current a{border-left-color:#eee}.tsd-navigation.secondary li.focus>a,.tsd-navigation.secondary ul.current li.focus>a{border-left-color:#000}.tsd-navigation.secondary li.current{margin-top:20px;margin-bottom:20px;border-left-color:#eee}.tsd-navigation.secondary li.current>a{font-weight:bold}@media(min-width: 901px){.menu-sticky-wrap{position:static}}.tsd-panel{margin:20px 0;padding:20px;background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.25)}.tsd-panel:empty{display:none}.tsd-panel>h1,.tsd-panel>h2,.tsd-panel>h3{margin:1.5em -20px 10px -20px;padding:0 20px 10px 20px;border-bottom:1px solid #eee}.tsd-panel>h1.tsd-before-signature,.tsd-panel>h2.tsd-before-signature,.tsd-panel>h3.tsd-before-signature{margin-bottom:0;border-bottom:0}.tsd-panel table{display:block;width:100%;overflow:auto;margin-top:10px;word-break:normal;word-break:keep-all}.tsd-panel table th{font-weight:bold}.tsd-panel table th,.tsd-panel table td{padding:6px 13px;border:1px solid #ddd}.tsd-panel table tr{background-color:#fff;border-top:1px solid #ccc}.tsd-panel table tr:nth-child(2n){background-color:#f8f8f8}.tsd-panel-group{margin:60px 0}.tsd-panel-group>h1,.tsd-panel-group>h2,.tsd-panel-group>h3{padding-left:20px;padding-right:20px}#tsd-search{transition:background-color .2s}#tsd-search .title{position:relative;z-index:2}#tsd-search .field{position:absolute;left:0;top:0;right:40px;height:40px}#tsd-search .field input{box-sizing:border-box;position:relative;top:-50px;z-index:1;width:100%;padding:0 10px;opacity:0;outline:0;border:0;background:transparent;color:#222}#tsd-search .field label{position:absolute;overflow:hidden;right:-40px}#tsd-search .field input,#tsd-search .title{transition:opacity .2s}#tsd-search .results{position:absolute;visibility:hidden;top:40px;width:100%;margin:0;padding:0;list-style:none;box-shadow:0 0 4px rgba(0,0,0,.25)}#tsd-search .results li{padding:0 10px;background-color:#fdfdfd}#tsd-search .results li:nth-child(even){background-color:#fff}#tsd-search .results li.state{display:none}#tsd-search .results li.current,#tsd-search .results li:hover{background-color:#eee}#tsd-search .results a{display:block}#tsd-search .results a:before{top:10px}#tsd-search .results span.parent{color:#707070;font-weight:normal}#tsd-search.has-focus{background-color:#eee}#tsd-search.has-focus .field input{top:0;opacity:1}#tsd-search.has-focus .title{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-signature{margin:0 0 1em 0;padding:10px;border:1px solid #eee;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:14px;overflow-x:auto}.tsd-signature.tsd-kind-icon{padding-left:30px}.tsd-signature.tsd-kind-icon:before{top:10px;left:10px}.tsd-panel>.tsd-signature{margin-left:-20px;margin-right:-20px;border-width:1px 0}.tsd-panel>.tsd-signature.tsd-kind-icon{padding-left:40px}.tsd-panel>.tsd-signature.tsd-kind-icon:before{left:20px}.tsd-signature-symbol{color:#707070;font-weight:normal}.tsd-signature-type{font-style:italic;font-weight:normal}.tsd-signatures{padding:0;margin:0 0 1em 0;border:1px solid #eee}.tsd-signatures .tsd-signature{margin:0;border-width:1px 0 0 0;transition:background-color .1s}.tsd-signatures .tsd-signature:first-child{border-top-width:0}.tsd-signatures .tsd-signature.current{background-color:#eee}.tsd-signatures.active>.tsd-signature{cursor:pointer}.tsd-panel>.tsd-signatures{margin-left:-20px;margin-right:-20px;border-width:1px 0}.tsd-panel>.tsd-signatures .tsd-signature.tsd-kind-icon{padding-left:40px}.tsd-panel>.tsd-signatures .tsd-signature.tsd-kind-icon:before{left:20px}.tsd-panel>a.anchor+.tsd-signatures{border-top-width:0;margin-top:-20px}ul.tsd-descriptions{position:relative;overflow:hidden;padding:0;list-style:none}ul.tsd-descriptions.active>.tsd-description{display:none}ul.tsd-descriptions.active>.tsd-description.current{display:block}ul.tsd-descriptions.active>.tsd-description.fade-in{animation:fade-in-delayed .3s}ul.tsd-descriptions.active>.tsd-description.fade-out{animation:fade-out-delayed .3s;position:absolute;display:block;top:0;left:0;right:0;opacity:0;visibility:hidden}ul.tsd-descriptions h4,ul.tsd-descriptions .tsd-index-panel h3,.tsd-index-panel ul.tsd-descriptions h3{font-size:16px;margin:1em 0 .5em 0}ul.tsd-parameters,ul.tsd-type-parameters{list-style:square;margin:0;padding-left:20px}ul.tsd-parameters>li.tsd-parameter-signature,ul.tsd-type-parameters>li.tsd-parameter-signature{list-style:none;margin-left:-20px}ul.tsd-parameters h5,ul.tsd-type-parameters h5{font-size:16px;margin:1em 0 .5em 0}ul.tsd-parameters .tsd-comment,ul.tsd-type-parameters .tsd-comment{margin-top:-0.5em}.tsd-sources{font-size:14px;color:#707070;margin:0 0 1em 0}.tsd-sources a{color:#707070;text-decoration:underline}.tsd-sources ul,.tsd-sources p{margin:0 !important}.tsd-sources ul{list-style:none;padding:0}.tsd-page-toolbar{position:fixed;z-index:1;top:0;left:0;width:100%;height:40px;color:#333;background:#fff;border-bottom:1px solid #eee;transition:transform .3s linear}.tsd-page-toolbar a{color:#333;text-decoration:none}.tsd-page-toolbar a.title{font-weight:bold}.tsd-page-toolbar a.title:hover{text-decoration:underline}.tsd-page-toolbar .table-wrap{display:table;width:100%;height:40px}.tsd-page-toolbar .table-cell{display:table-cell;position:relative;white-space:nowrap;line-height:40px}.tsd-page-toolbar .table-cell:first-child{width:100%}.tsd-page-toolbar--hide{transform:translateY(-100%)}.tsd-select .tsd-select-list li:before,.tsd-select .tsd-select-label:before,.tsd-widget:before{content:"";display:inline-block;width:40px;height:40px;margin:0 -8px 0 0;background-image:url(../images/widgets.png);background-repeat:no-repeat;text-indent:-1024px;vertical-align:bottom}@media(-webkit-min-device-pixel-ratio: 1.5),(min-resolution: 144dpi){.tsd-select .tsd-select-list li:before,.tsd-select .tsd-select-label:before,.tsd-widget:before{background-image:url(../images/widgets@2x.png);background-size:320px 40px}}.tsd-widget{display:inline-block;overflow:hidden;opacity:.6;height:40px;transition:opacity .1s,background-color .2s;vertical-align:bottom;cursor:pointer}.tsd-widget:hover{opacity:.8}.tsd-widget.active{opacity:1;background-color:#eee}.tsd-widget.no-caption{width:40px}.tsd-widget.no-caption:before{margin:0}.tsd-widget.search:before{background-position:0 0}.tsd-widget.menu:before{background-position:-40px 0}.tsd-widget.options:before{background-position:-80px 0}.tsd-widget.options,.tsd-widget.menu{display:none}@media(max-width: 900px){.tsd-widget.options,.tsd-widget.menu{display:inline-block}}input[type=checkbox]+.tsd-widget:before{background-position:-120px 0}input[type=checkbox]:checked+.tsd-widget:before{background-position:-160px 0}.tsd-select{position:relative;display:inline-block;height:40px;transition:opacity .1s,background-color .2s;vertical-align:bottom;cursor:pointer}.tsd-select .tsd-select-label{opacity:.6;transition:opacity .2s}.tsd-select .tsd-select-label:before{background-position:-240px 0}.tsd-select.active .tsd-select-label{opacity:.8}.tsd-select.active .tsd-select-list{visibility:visible;opacity:1;transition-delay:0s}.tsd-select .tsd-select-list{position:absolute;visibility:hidden;top:40px;left:0;margin:0;padding:0;opacity:0;list-style:none;box-shadow:0 0 4px rgba(0,0,0,.25);transition:visibility 0s .2s,opacity .2s}.tsd-select .tsd-select-list li{padding:0 20px 0 0;background-color:#fdfdfd}.tsd-select .tsd-select-list li:before{background-position:40px 0}.tsd-select .tsd-select-list li:nth-child(even){background-color:#fff}.tsd-select .tsd-select-list li:hover{background-color:#eee}.tsd-select .tsd-select-list li.selected:before{background-position:-200px 0}@media(max-width: 900px){.tsd-select .tsd-select-list{top:0;left:auto;right:100%;margin-right:-5px}.tsd-select .tsd-select-label:before{background-position:-280px 0}}img{max-width:100%}
diff --git a/docs/assets/images/icons.png b/docs/assets/images/icons.png
new file mode 100644
index 0000000000000000000000000000000000000000..3836d5fe46e48bbe186116855aae879c23935327
GIT binary patch
literal 9615
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

literal 0
HcmV?d00001

diff --git a/docs/assets/images/icons@2x.png b/docs/assets/images/icons@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a209e2f6d7f915cc9cb6fe7a4264c8be4db87b0
GIT binary patch
literal 28144
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

literal 0
HcmV?d00001

diff --git a/docs/assets/images/widgets.png b/docs/assets/images/widgets.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7380532ac1b45400620011c37c4dcb7aec27a4c
GIT binary patch
literal 480
zcmeAS@N?(olHy`uVBq!ia0y~yV02($V9?-TVPIfT^?bdEfq`+kr;B4q1>@UWfomT-
z@U%W;PE-&%<fPH!6v5Fdz}9LYz~-dD;-tXSax*3MZ10qNb}G}7R{nq9?pC`&>!-%#
zU00_wF~EV1iO$!6kmg%K&EC_?O=E8Me+V^QEv45I>FT-oR?zFvz-xw{Z=GYW_5awq
zG;Qy+S=V0+3(l#NJ-#G)Q|+!_|F_=Cwi7&1{^qatuZ913uCT>1vli6cUi(7e{ehZF
zhRJHaa^LqyMsL2$oV?@f@#c-~8?{(@7xW&{Y`CUh@Mo4<fBWz0+u|DK7P5<SKZsqu
zU+lml#RP_2m2Y)Z1pU2L-+O#NKP`#%!f%eeu+(~$<D3h6cl19=Vfg;{+|9C$^9mn5
zFJKXNkam;rbY|H8_s^k6;?l2$-+Om#cU&xcuzt&~+k!T3R!zAZ%!Jw*@_tu(?DlBq
zdXUGP+}NYI^4so&jjJv1OrLON{uUdi9q-c*xmum97rd){LQ3t2l$yhmwTs{T7w&X7
zIH$Dho%lr-gJ)959Qz*x3#RnWp8qIMYHDf7?|^%MBV6WBSkJ3a?{=VgWd=M{85kHE
Y>UCzQ&wLp6h65z(>FVdQ&MBb@0G%$)mH+?%

literal 0
HcmV?d00001

diff --git a/docs/assets/images/widgets@2x.png b/docs/assets/images/widgets@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..4bbbd57272f3b28f47527d4951ad10f950b8ad43
GIT binary patch
literal 855
zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sU<lw~W?*30x5-4Dfq}s|z$e6&fpoB#)$Jq$
z1A|~mkY6yv{r~#|6bjx8^d~ep7@S`}KWc{a76t~UL!K^<Ar*{o4mN_!Z&>hmrT9uF
z5EFrC%-wu*u5jDK1;&vaE$6@2-}1@`{eOFdZO)=k)+u>0IyZW9lIHx?XKBcox`%0d
z%k{+{tqw~FFR|cL;}YNc@8iVl#UHIMpUHoA^2mwqnQLQs(#)RkGO6;f(1}auwrKG^
zW8cx7suy;<?8mhOo%J6=_MDscqxs9;M$3<lQ}%!753<`~ag1exHp`!o`|@4aXEHfN
znQhMXWO(>mYt9dkU)T0GaWTJc&6Hbj%q)}td>M1XHNg)LrtRcj;ozqkt;&4h<Ml3n
zBh?D7I~$_K0~&Z#R;RFBdU8FO$!&7t-p!ShMJ^OGIqa5M{3d>HgJ8s&IjkMa4j*!r
zxL(Q=)1#)j;5kb}nWfuJ`%R&f8qS`%xny2tgfhePsY{m2HYCfMu%6k`pk;Zictt$-
z&vb@O`UVrt7gnhDR5AUU#js*c;U|H4!J&V$brW9udfY6NeAwI7FfX{qcNL4yqpRE=
zdPP~r|4Y0Iew+1hTl|>k;(vf8C4RCOV|Rsa=*R9hM^-b%ScgsPJ-Hce<Fq3~{$$^8
zd#Nh%$8I&N&ZDiDkM7Nkx|S++@vY`InSGp`R!qALZ@yyHd1PvQ;cu|ehkwCyc(UuZ
zC%$>a^5DekFln{j`d^u*eU#Zc=T@Br<NIBj4_wWkC7w7~@1n`5`#bk4_lu8STZ*z?
z7wV)>H!N7J!W+ai?QJZ>TK|H1!J@o8-`Tu)l;7MD_-)YS=6Cj5oyvXQ5Q*cncBZ~$
z%6f9;&cA?5FWI;_D!w&_xZaYE5VJM^uu<p@Ti?X)9Y2E08NVLi_=?BIw^8`pS$@^E
z3yZ}6bbkBz%OPuRquN1BfBXJaKX?0SD}Tn_yysBeQfIK&_-+5R2mh|i+&vKdy7<KU
uZx0;U7#J85ChY%eyAPC65J{7Pf#HGL^w082Tp|HpAYo5eKbLh*2~7Zc7+j_R

literal 0
HcmV?d00001

diff --git a/docs/assets/js/main.js b/docs/assets/js/main.js
new file mode 100644
index 0000000..c2190a9
--- /dev/null
+++ b/docs/assets/js/main.js
@@ -0,0 +1,51 @@
+!function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=2)}([function(e,t,r){var n,i;
+/**
+ * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9
+ * Copyright (C) 2020 Oliver Nightingale
+ * @license MIT
+ */!function(){var s,o,a,u,l,c,h,d,f,p,y,m,v,g,x,w,L,E,b,S,k,Q,O,P,T,_,C=function(e){var t=new C.Builder;return t.pipeline.add(C.trimmer,C.stopWordFilter,C.stemmer),t.searchPipeline.add(C.stemmer),e.call(t,t),t.build()};C.version="2.3.9"
+/*!
+ * lunr.utils
+ * Copyright (C) 2020 Oliver Nightingale
+ */,C.utils={},C.utils.warn=(s=this,function(e){s.console&&console.warn&&console.warn(e)}),C.utils.asString=function(e){return null==e?"":e.toString()},C.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),r=Object.keys(e),n=0;n<r.length;n++){var i=r[n],s=e[i];if(Array.isArray(s))t[i]=s.slice();else{if("string"!=typeof s&&"number"!=typeof s&&"boolean"!=typeof s)throw new TypeError("clone is not deep and does not support nested objects");t[i]=s}}return t},C.FieldRef=function(e,t,r){this.docRef=e,this.fieldName=t,this._stringValue=r},C.FieldRef.joiner="/",C.FieldRef.fromString=function(e){var t=e.indexOf(C.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var r=e.slice(0,t),n=e.slice(t+1);return new C.FieldRef(n,r,e)},C.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+C.FieldRef.joiner+this.docRef),this._stringValue}
+/*!
+ * lunr.Set
+ * Copyright (C) 2020 Oliver Nightingale
+ */,C.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},C.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},C.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},C.Set.prototype.contains=function(e){return!!this.elements[e]},C.Set.prototype.intersect=function(e){var t,r,n,i=[];if(e===C.Set.complete)return this;if(e===C.Set.empty)return e;this.length<e.length?(t=this,r=e):(t=e,r=this),n=Object.keys(t.elements);for(var s=0;s<n.length;s++){var o=n[s];o in r.elements&&i.push(o)}return new C.Set(i)},C.Set.prototype.union=function(e){return e===C.Set.complete?C.Set.complete:e===C.Set.empty?this:new C.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},C.idf=function(e,t){var r=0;for(var n in e)"_index"!=n&&(r+=Object.keys(e[n]).length);var i=(t-r+.5)/(r+.5);return Math.log(1+Math.abs(i))},C.Token=function(e,t){this.str=e||"",this.metadata=t||{}},C.Token.prototype.toString=function(){return this.str},C.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},C.Token.prototype.clone=function(e){return e=e||function(e){return e},new C.Token(e(this.str,this.metadata),this.metadata)}
+/*!
+ * lunr.tokenizer
+ * Copyright (C) 2020 Oliver Nightingale
+ */,C.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new C.Token(C.utils.asString(e).toLowerCase(),C.utils.clone(t))}));for(var r=e.toString().toLowerCase(),n=r.length,i=[],s=0,o=0;s<=n;s++){var a=s-o;if(r.charAt(s).match(C.tokenizer.separator)||s==n){if(a>0){var u=C.utils.clone(t)||{};u.position=[o,a],u.index=i.length,i.push(new C.Token(r.slice(o,s),u))}o=s+1}}return i},C.tokenizer.separator=/[\s\-]+/
+/*!
+ * lunr.Pipeline
+ * Copyright (C) 2020 Oliver Nightingale
+ */,C.Pipeline=function(){this._stack=[]},C.Pipeline.registeredFunctions=Object.create(null),C.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&C.utils.warn("Overwriting existing registered function: "+t),e.label=t,C.Pipeline.registeredFunctions[e.label]=e},C.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||C.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},C.Pipeline.load=function(e){var t=new C.Pipeline;return e.forEach((function(e){var r=C.Pipeline.registeredFunctions[e];if(!r)throw new Error("Cannot load unregistered function: "+e);t.add(r)})),t},C.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach((function(e){C.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},C.Pipeline.prototype.after=function(e,t){C.Pipeline.warnIfFunctionNotRegistered(t);var r=this._stack.indexOf(e);if(-1==r)throw new Error("Cannot find existingFn");r+=1,this._stack.splice(r,0,t)},C.Pipeline.prototype.before=function(e,t){C.Pipeline.warnIfFunctionNotRegistered(t);var r=this._stack.indexOf(e);if(-1==r)throw new Error("Cannot find existingFn");this._stack.splice(r,0,t)},C.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},C.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r<t;r++){for(var n=this._stack[r],i=[],s=0;s<e.length;s++){var o=n(e[s],s,e);if(null!=o&&""!==o)if(Array.isArray(o))for(var a=0;a<o.length;a++)i.push(o[a]);else i.push(o)}e=i}return e},C.Pipeline.prototype.runString=function(e,t){var r=new C.Token(e,t);return this.run([r]).map((function(e){return e.toString()}))},C.Pipeline.prototype.reset=function(){this._stack=[]},C.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return C.Pipeline.warnIfFunctionNotRegistered(e),e.label}))}
+/*!
+ * lunr.Vector
+ * Copyright (C) 2020 Oliver Nightingale
+ */,C.Vector=function(e){this._magnitude=0,this.elements=e||[]},C.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,r=this.elements.length/2,n=r-t,i=Math.floor(n/2),s=this.elements[2*i];n>1&&(s<e&&(t=i),s>e&&(r=i),s!=e);)n=r-t,i=t+Math.floor(n/2),s=this.elements[2*i];return s==e||s>e?2*i:s<e?2*(i+1):void 0},C.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},C.Vector.prototype.upsert=function(e,t,r){this._magnitude=0;var n=this.positionForIndex(e);this.elements[n]==e?this.elements[n+1]=r(this.elements[n+1],t):this.elements.splice(n,0,e,t)},C.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,r=1;r<t;r+=2){var n=this.elements[r];e+=n*n}return this._magnitude=Math.sqrt(e)},C.Vector.prototype.dot=function(e){for(var t=0,r=this.elements,n=e.elements,i=r.length,s=n.length,o=0,a=0,u=0,l=0;u<i&&l<s;)(o=r[u])<(a=n[l])?u+=2:o>a?l+=2:o==a&&(t+=r[u+1]*n[l+1],u+=2,l+=2);return t},C.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},C.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t<this.elements.length;t+=2,r++)e[r]=this.elements[t];return e},C.Vector.prototype.toJSON=function(){return this.elements}
+/*!
+ * lunr.stemmer
+ * Copyright (C) 2020 Oliver Nightingale
+ * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
+ */,C.stemmer=(o={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},a={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},u="[aeiouy]",l="[^aeiou][^aeiouy]*",c=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),h=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),d=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),f=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),p=/^(.+?)(ss|i)es$/,y=/^(.+?)([^s])s$/,m=/^(.+?)eed$/,v=/^(.+?)(ed|ing)$/,g=/.$/,x=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),L=new RegExp("^"+l+u+"[^aeiouwxy]$"),E=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,S=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,k=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,Q=/^(.+?)(s|t)(ion)$/,O=/^(.+?)e$/,P=/ll$/,T=new RegExp("^"+l+u+"[^aeiouwxy]$"),_=function(e){var t,r,n,i,s,u,l;if(e.length<3)return e;if("y"==(n=e.substr(0,1))&&(e=n.toUpperCase()+e.substr(1)),s=y,(i=p).test(e)?e=e.replace(i,"$1$2"):s.test(e)&&(e=e.replace(s,"$1$2")),s=v,(i=m).test(e)){var _=i.exec(e);(i=c).test(_[1])&&(i=g,e=e.replace(i,""))}else s.test(e)&&(t=(_=s.exec(e))[1],(s=f).test(t)&&(u=w,l=L,(s=x).test(e=t)?e+="e":u.test(e)?(i=g,e=e.replace(i,"")):l.test(e)&&(e+="e")));return(i=E).test(e)&&(e=(t=(_=i.exec(e))[1])+"i"),(i=b).test(e)&&(t=(_=i.exec(e))[1],r=_[2],(i=c).test(t)&&(e=t+o[r])),(i=S).test(e)&&(t=(_=i.exec(e))[1],r=_[2],(i=c).test(t)&&(e=t+a[r])),s=Q,(i=k).test(e)?(t=(_=i.exec(e))[1],(i=h).test(t)&&(e=t)):s.test(e)&&(t=(_=s.exec(e))[1]+_[2],(s=h).test(t)&&(e=t)),(i=O).test(e)&&(t=(_=i.exec(e))[1],s=d,u=T,((i=h).test(t)||s.test(t)&&!u.test(t))&&(e=t)),s=h,(i=P).test(e)&&s.test(e)&&(i=g,e=e.replace(i,"")),"y"==n&&(e=n.toLowerCase()+e.substr(1)),e},function(e){return e.update(_)}),C.Pipeline.registerFunction(C.stemmer,"stemmer")
+/*!
+ * lunr.stopWordFilter
+ * Copyright (C) 2020 Oliver Nightingale
+ */,C.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},C.stopWordFilter=C.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),C.Pipeline.registerFunction(C.stopWordFilter,"stopWordFilter")
+/*!
+ * lunr.trimmer
+ * Copyright (C) 2020 Oliver Nightingale
+ */,C.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},C.Pipeline.registerFunction(C.trimmer,"trimmer")
+/*!
+ * lunr.TokenSet
+ * Copyright (C) 2020 Oliver Nightingale
+ */,C.TokenSet=function(){this.final=!1,this.edges={},this.id=C.TokenSet._nextId,C.TokenSet._nextId+=1},C.TokenSet._nextId=1,C.TokenSet.fromArray=function(e){for(var t=new C.TokenSet.Builder,r=0,n=e.length;r<n;r++)t.insert(e[r]);return t.finish(),t.root},C.TokenSet.fromClause=function(e){return"editDistance"in e?C.TokenSet.fromFuzzyString(e.term,e.editDistance):C.TokenSet.fromString(e.term)},C.TokenSet.fromFuzzyString=function(e,t){for(var r=new C.TokenSet,n=[{node:r,editsRemaining:t,str:e}];n.length;){var i=n.pop();if(i.str.length>0){var s,o=i.str.charAt(0);o in i.node.edges?s=i.node.edges[o]:(s=new C.TokenSet,i.node.edges[o]=s),1==i.str.length&&(s.final=!0),n.push({node:s,editsRemaining:i.editsRemaining,str:i.str.slice(1)})}if(0!=i.editsRemaining){if("*"in i.node.edges)var a=i.node.edges["*"];else{a=new C.TokenSet;i.node.edges["*"]=a}if(0==i.str.length&&(a.final=!0),n.push({node:a,editsRemaining:i.editsRemaining-1,str:i.str}),i.str.length>1&&n.push({node:i.node,editsRemaining:i.editsRemaining-1,str:i.str.slice(1)}),1==i.str.length&&(i.node.final=!0),i.str.length>=1){if("*"in i.node.edges)var u=i.node.edges["*"];else{u=new C.TokenSet;i.node.edges["*"]=u}1==i.str.length&&(u.final=!0),n.push({node:u,editsRemaining:i.editsRemaining-1,str:i.str.slice(1)})}if(i.str.length>1){var l,c=i.str.charAt(0),h=i.str.charAt(1);h in i.node.edges?l=i.node.edges[h]:(l=new C.TokenSet,i.node.edges[h]=l),1==i.str.length&&(l.final=!0),n.push({node:l,editsRemaining:i.editsRemaining-1,str:c+i.str.slice(2)})}}}return r},C.TokenSet.fromString=function(e){for(var t=new C.TokenSet,r=t,n=0,i=e.length;n<i;n++){var s=e[n],o=n==i-1;if("*"==s)t.edges[s]=t,t.final=o;else{var a=new C.TokenSet;a.final=o,t.edges[s]=a,t=a}}return r},C.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var r=t.pop(),n=Object.keys(r.node.edges),i=n.length;r.node.final&&(r.prefix.charAt(0),e.push(r.prefix));for(var s=0;s<i;s++){var o=n[s];t.push({prefix:r.prefix.concat(o),node:r.node.edges[o]})}}return e},C.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),r=t.length,n=0;n<r;n++){var i=t[n];e=e+i+this.edges[i].id}return e},C.TokenSet.prototype.intersect=function(e){for(var t=new C.TokenSet,r=void 0,n=[{qNode:e,output:t,node:this}];n.length;){r=n.pop();for(var i=Object.keys(r.qNode.edges),s=i.length,o=Object.keys(r.node.edges),a=o.length,u=0;u<s;u++)for(var l=i[u],c=0;c<a;c++){var h=o[c];if(h==l||"*"==l){var d=r.node.edges[h],f=r.qNode.edges[l],p=d.final&&f.final,y=void 0;h in r.output.edges?(y=r.output.edges[h]).final=y.final||p:((y=new C.TokenSet).final=p,r.output.edges[h]=y),n.push({qNode:f,output:y,node:d})}}}return t},C.TokenSet.Builder=function(){this.previousWord="",this.root=new C.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},C.TokenSet.Builder.prototype.insert=function(e){var t,r=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var n=0;n<e.length&&n<this.previousWord.length&&e[n]==this.previousWord[n];n++)r++;this.minimize(r),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(n=r;n<e.length;n++){var i=new C.TokenSet,s=e[n];t.edges[s]=i,this.uncheckedNodes.push({parent:t,char:s,child:i}),t=i}t.final=!0,this.previousWord=e},C.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},C.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var r=this.uncheckedNodes[t],n=r.child.toString();n in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[n]:(r.child._str=n,this.minimizedNodes[n]=r.child),this.uncheckedNodes.pop()}}
+/*!
+ * lunr.Index
+ * Copyright (C) 2020 Oliver Nightingale
+ */,C.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},C.Index.prototype.search=function(e){return this.query((function(t){new C.QueryParser(e,t).parse()}))},C.Index.prototype.query=function(e){for(var t=new C.Query(this.fields),r=Object.create(null),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=0;a<this.fields.length;a++)n[this.fields[a]]=new C.Vector;e.call(t,t);for(a=0;a<t.clauses.length;a++){var u=t.clauses[a],l=null,c=C.Set.empty;l=u.usePipeline?this.pipeline.runString(u.term,{fields:u.fields}):[u.term];for(var h=0;h<l.length;h++){var d=l[h];u.term=d;var f=C.TokenSet.fromClause(u),p=this.tokenSet.intersect(f).toArray();if(0===p.length&&u.presence===C.Query.presence.REQUIRED){for(var y=0;y<u.fields.length;y++){s[R=u.fields[y]]=C.Set.empty}break}for(var m=0;m<p.length;m++){var v=p[m],g=this.invertedIndex[v],x=g._index;for(y=0;y<u.fields.length;y++){var w=g[R=u.fields[y]],L=Object.keys(w),E=v+"/"+R,b=new C.Set(L);if(u.presence==C.Query.presence.REQUIRED&&(c=c.union(b),void 0===s[R]&&(s[R]=C.Set.complete)),u.presence!=C.Query.presence.PROHIBITED){if(n[R].upsert(x,u.boost,(function(e,t){return e+t})),!i[E]){for(var S=0;S<L.length;S++){var k,Q=L[S],O=new C.FieldRef(Q,R),P=w[Q];void 0===(k=r[O])?r[O]=new C.MatchData(v,R,P):k.add(v,R,P)}i[E]=!0}}else void 0===o[R]&&(o[R]=C.Set.empty),o[R]=o[R].union(b)}}}if(u.presence===C.Query.presence.REQUIRED)for(y=0;y<u.fields.length;y++){s[R=u.fields[y]]=s[R].intersect(c)}}var T=C.Set.complete,_=C.Set.empty;for(a=0;a<this.fields.length;a++){var R;s[R=this.fields[a]]&&(T=T.intersect(s[R])),o[R]&&(_=_.union(o[R]))}var I=Object.keys(r),j=[],F=Object.create(null);if(t.isNegated()){I=Object.keys(this.fieldVectors);for(a=0;a<I.length;a++){O=I[a];var N=C.FieldRef.fromString(O);r[O]=new C.MatchData}}for(a=0;a<I.length;a++){var D=(N=C.FieldRef.fromString(I[a])).docRef;if(T.contains(D)&&!_.contains(D)){var A,z=this.fieldVectors[N],q=n[N.fieldName].similarity(z);if(void 0!==(A=F[D]))A.score+=q,A.matchData.combine(r[N]);else{var V={ref:D,score:q,matchData:r[N]};F[D]=V,j.push(V)}}}return j.sort((function(e,t){return t.score-e.score}))},C.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:C.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},C.Index.load=function(e){var t={},r={},n=e.fieldVectors,i=Object.create(null),s=e.invertedIndex,o=new C.TokenSet.Builder,a=C.Pipeline.load(e.pipeline);e.version!=C.version&&C.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+C.version+"' does not match serialized index '"+e.version+"'");for(var u=0;u<n.length;u++){var l=(h=n[u])[0],c=h[1];r[l]=new C.Vector(c)}for(u=0;u<s.length;u++){var h,d=(h=s[u])[0],f=h[1];o.insert(d),i[d]=f}return o.finish(),t.fields=e.fields,t.fieldVectors=r,t.invertedIndex=i,t.tokenSet=o.root,t.pipeline=a,new C.Index(t)}
+/*!
+ * lunr.Builder
+ * Copyright (C) 2020 Oliver Nightingale
+ */,C.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=C.tokenizer,this.pipeline=new C.Pipeline,this.searchPipeline=new C.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},C.Builder.prototype.ref=function(e){this._ref=e},C.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},C.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},C.Builder.prototype.k1=function(e){this._k1=e},C.Builder.prototype.add=function(e,t){var r=e[this._ref],n=Object.keys(this._fields);this._documents[r]=t||{},this.documentCount+=1;for(var i=0;i<n.length;i++){var s=n[i],o=this._fields[s].extractor,a=o?o(e):e[s],u=this.tokenizer(a,{fields:[s]}),l=this.pipeline.run(u),c=new C.FieldRef(r,s),h=Object.create(null);this.fieldTermFrequencies[c]=h,this.fieldLengths[c]=0,this.fieldLengths[c]+=l.length;for(var d=0;d<l.length;d++){var f=l[d];if(null==h[f]&&(h[f]=0),h[f]+=1,null==this.invertedIndex[f]){var p=Object.create(null);p._index=this.termIndex,this.termIndex+=1;for(var y=0;y<n.length;y++)p[n[y]]=Object.create(null);this.invertedIndex[f]=p}null==this.invertedIndex[f][s][r]&&(this.invertedIndex[f][s][r]=Object.create(null));for(var m=0;m<this.metadataWhitelist.length;m++){var v=this.metadataWhitelist[m],g=f.metadata[v];null==this.invertedIndex[f][s][r][v]&&(this.invertedIndex[f][s][r][v]=[]),this.invertedIndex[f][s][r][v].push(g)}}}},C.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,r={},n={},i=0;i<t;i++){var s=C.FieldRef.fromString(e[i]),o=s.fieldName;n[o]||(n[o]=0),n[o]+=1,r[o]||(r[o]=0),r[o]+=this.fieldLengths[s]}var a=Object.keys(this._fields);for(i=0;i<a.length;i++){var u=a[i];r[u]=r[u]/n[u]}this.averageFieldLength=r},C.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),r=t.length,n=Object.create(null),i=0;i<r;i++){for(var s=C.FieldRef.fromString(t[i]),o=s.fieldName,a=this.fieldLengths[s],u=new C.Vector,l=this.fieldTermFrequencies[s],c=Object.keys(l),h=c.length,d=this._fields[o].boost||1,f=this._documents[s.docRef].boost||1,p=0;p<h;p++){var y,m,v,g=c[p],x=l[g],w=this.invertedIndex[g]._index;void 0===n[g]?(y=C.idf(this.invertedIndex[g],this.documentCount),n[g]=y):y=n[g],m=y*((this._k1+1)*x)/(this._k1*(1-this._b+this._b*(a/this.averageFieldLength[o]))+x),m*=d,m*=f,v=Math.round(1e3*m)/1e3,u.insert(w,v)}e[s]=u}this.fieldVectors=e},C.Builder.prototype.createTokenSet=function(){this.tokenSet=C.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},C.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new C.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},C.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},C.MatchData=function(e,t,r){for(var n=Object.create(null),i=Object.keys(r||{}),s=0;s<i.length;s++){var o=i[s];n[o]=r[o].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=n)},C.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),r=0;r<t.length;r++){var n=t[r],i=Object.keys(e.metadata[n]);null==this.metadata[n]&&(this.metadata[n]=Object.create(null));for(var s=0;s<i.length;s++){var o=i[s],a=Object.keys(e.metadata[n][o]);null==this.metadata[n][o]&&(this.metadata[n][o]=Object.create(null));for(var u=0;u<a.length;u++){var l=a[u];null==this.metadata[n][o][l]?this.metadata[n][o][l]=e.metadata[n][o][l]:this.metadata[n][o][l]=this.metadata[n][o][l].concat(e.metadata[n][o][l])}}}},C.MatchData.prototype.add=function(e,t,r){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=r);if(t in this.metadata[e])for(var n=Object.keys(r),i=0;i<n.length;i++){var s=n[i];s in this.metadata[e][t]?this.metadata[e][t][s]=this.metadata[e][t][s].concat(r[s]):this.metadata[e][t][s]=r[s]}else this.metadata[e][t]=r},C.Query=function(e){this.clauses=[],this.allFields=e},C.Query.wildcard=new String("*"),C.Query.wildcard.NONE=0,C.Query.wildcard.LEADING=1,C.Query.wildcard.TRAILING=2,C.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},C.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=C.Query.wildcard.NONE),e.wildcard&C.Query.wildcard.LEADING&&e.term.charAt(0)!=C.Query.wildcard&&(e.term="*"+e.term),e.wildcard&C.Query.wildcard.TRAILING&&e.term.slice(-1)!=C.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=C.Query.presence.OPTIONAL),this.clauses.push(e),this},C.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=C.Query.presence.PROHIBITED)return!1;return!0},C.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,C.utils.clone(t))}),this),this;var r=t||{};return r.term=e.toString(),this.clause(r),this},C.QueryParseError=function(e,t,r){this.name="QueryParseError",this.message=e,this.start=t,this.end=r},C.QueryParseError.prototype=new Error,C.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},C.QueryLexer.prototype.run=function(){for(var e=C.QueryLexer.lexText;e;)e=e(this)},C.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,r=this.pos,n=0;n<this.escapeCharPositions.length;n++)r=this.escapeCharPositions[n],e.push(this.str.slice(t,r)),t=r+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},C.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},C.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},C.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return C.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},C.QueryLexer.prototype.width=function(){return this.pos-this.start},C.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},C.QueryLexer.prototype.backup=function(){this.pos-=1},C.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=C.QueryLexer.EOS&&this.backup()},C.QueryLexer.prototype.more=function(){return this.pos<this.length},C.QueryLexer.EOS="EOS",C.QueryLexer.FIELD="FIELD",C.QueryLexer.TERM="TERM",C.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",C.QueryLexer.BOOST="BOOST",C.QueryLexer.PRESENCE="PRESENCE",C.QueryLexer.lexField=function(e){return e.backup(),e.emit(C.QueryLexer.FIELD),e.ignore(),C.QueryLexer.lexText},C.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(C.QueryLexer.TERM)),e.ignore(),e.more())return C.QueryLexer.lexText},C.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(C.QueryLexer.EDIT_DISTANCE),C.QueryLexer.lexText},C.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(C.QueryLexer.BOOST),C.QueryLexer.lexText},C.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(C.QueryLexer.TERM)},C.QueryLexer.termSeparator=C.tokenizer.separator,C.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==C.QueryLexer.EOS)return C.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return C.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(C.QueryLexer.TERM),C.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(C.QueryLexer.TERM),C.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(C.QueryLexer.PRESENCE),C.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(C.QueryLexer.PRESENCE),C.QueryLexer.lexText;if(t.match(C.QueryLexer.termSeparator))return C.QueryLexer.lexTerm}else e.escapeCharacter()}},C.QueryParser=function(e,t){this.lexer=new C.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},C.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=C.QueryParser.parseClause;e;)e=e(this);return this.query},C.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},C.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},C.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},C.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case C.QueryLexer.PRESENCE:return C.QueryParser.parsePresence;case C.QueryLexer.FIELD:return C.QueryParser.parseField;case C.QueryLexer.TERM:return C.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(r+=" with value '"+t.str+"'"),new C.QueryParseError(r,t.start,t.end)}},C.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=C.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=C.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+t.str+"'";throw new C.QueryParseError(r,t.start,t.end)}var n=e.peekLexeme();if(null==n){r="expecting term or field, found nothing";throw new C.QueryParseError(r,t.start,t.end)}switch(n.type){case C.QueryLexer.FIELD:return C.QueryParser.parseField;case C.QueryLexer.TERM:return C.QueryParser.parseTerm;default:r="expecting term or field, found '"+n.type+"'";throw new C.QueryParseError(r,n.start,n.end)}}},C.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var r=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),n="unrecognised field '"+t.str+"', possible fields: "+r;throw new C.QueryParseError(n,t.start,t.end)}e.currentClause.fields=[t.str];var i=e.peekLexeme();if(null==i){n="expecting term, found nothing";throw new C.QueryParseError(n,t.start,t.end)}switch(i.type){case C.QueryLexer.TERM:return C.QueryParser.parseTerm;default:n="expecting term, found '"+i.type+"'";throw new C.QueryParseError(n,i.start,i.end)}}},C.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(null!=r)switch(r.type){case C.QueryLexer.TERM:return e.nextClause(),C.QueryParser.parseTerm;case C.QueryLexer.FIELD:return e.nextClause(),C.QueryParser.parseField;case C.QueryLexer.EDIT_DISTANCE:return C.QueryParser.parseEditDistance;case C.QueryLexer.BOOST:return C.QueryParser.parseBoost;case C.QueryLexer.PRESENCE:return e.nextClause(),C.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+r.type+"'";throw new C.QueryParseError(n,r.start,r.end)}else e.nextClause()}},C.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var n="edit distance must be numeric";throw new C.QueryParseError(n,t.start,t.end)}e.currentClause.editDistance=r;var i=e.peekLexeme();if(null!=i)switch(i.type){case C.QueryLexer.TERM:return e.nextClause(),C.QueryParser.parseTerm;case C.QueryLexer.FIELD:return e.nextClause(),C.QueryParser.parseField;case C.QueryLexer.EDIT_DISTANCE:return C.QueryParser.parseEditDistance;case C.QueryLexer.BOOST:return C.QueryParser.parseBoost;case C.QueryLexer.PRESENCE:return e.nextClause(),C.QueryParser.parsePresence;default:n="Unexpected lexeme type '"+i.type+"'";throw new C.QueryParseError(n,i.start,i.end)}else e.nextClause()}},C.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var n="boost must be numeric";throw new C.QueryParseError(n,t.start,t.end)}e.currentClause.boost=r;var i=e.peekLexeme();if(null!=i)switch(i.type){case C.QueryLexer.TERM:return e.nextClause(),C.QueryParser.parseTerm;case C.QueryLexer.FIELD:return e.nextClause(),C.QueryParser.parseField;case C.QueryLexer.EDIT_DISTANCE:return C.QueryParser.parseEditDistance;case C.QueryLexer.BOOST:return C.QueryParser.parseBoost;case C.QueryLexer.PRESENCE:return e.nextClause(),C.QueryParser.parsePresence;default:n="Unexpected lexeme type '"+i.type+"'";throw new C.QueryParseError(n,i.start,i.end)}else e.nextClause()}},void 0===(i="function"==typeof(n=function(){return C})?n.call(t,r,t,e):n)||(e.exports=i)}()},function(e,t,r){},function(e,t,r){"use strict";r.r(t);var n=[];function i(e,t){n.push({selector:t,constructor:e})}var s,o,a=function(){function e(){this.createComponents(document.body)}return e.prototype.createComponents=function(e){n.forEach((function(t){e.querySelectorAll(t.selector).forEach((function(e){e.dataset.hasInstance||(new t.constructor({el:e}),e.dataset.hasInstance=String(!0))}))}))},e}(),u=function(e){this.el=e.el},l=r(0),c=(s=function(e,t){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}s(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});!function(e){e[e.Idle=0]="Idle",e[e.Loading=1]="Loading",e[e.Ready=2]="Ready",e[e.Failure=3]="Failure"}(o||(o={}));var h=function(e){function t(t){var r=e.call(this,t)||this;r.query="",r.loadingState=o.Idle,r.hasFocus=!1,r.preventPress=!1,r.data=null,r.index=null,r.resultClicked=!1;var n=document.querySelector("#tsd-search-field"),i=document.querySelector(".results");if(!n||!i)throw new Error("The input field or the result list wrapper are not found");return r.field=n,r.results=i,r.base=r.el.dataset.base+"/",r.bindEvents(),r}return c(t,e),t.prototype.loadIndex=function(){var e=this;if(this.loadingState==o.Idle&&!this.data){setTimeout((function(){e.loadingState==o.Idle&&e.setLoadingState(o.Loading)}),500);var t=this.el.dataset.index;t?fetch(t).then((function(e){if(!e.ok)throw new Error("The search index is missing");return e.json()})).then((function(t){e.data=t,e.index=l.Index.load(t.index),e.setLoadingState(o.Ready)})).catch((function(t){console.error(t),e.setLoadingState(o.Failure)})):this.setLoadingState(o.Failure)}},t.prototype.updateResults=function(){if(this.loadingState==o.Ready&&(this.results.textContent="",this.query&&this.index&&this.data)){var e=this.index.search("*"+this.query+"*");0===e.length&&(e=this.index.search("*"+this.query+"~1*"));for(var t=0,r=Math.min(10,e.length);t<r;t++){var n=this.data.rows[Number(e[t].ref)],i=n.name.replace(new RegExp(this.query,"i"),(function(e){return"<b>"+e+"</b>"})),s=n.parent||"";(s=s.replace(new RegExp(this.query,"i"),(function(e){return"<b>"+e+"</b>"})))&&(i='<span class="parent">'+s+".</span>"+i);var a=document.createElement("li");a.classList.value=n.classes,a.innerHTML='\n                    <a href="'+(this.base+n.url)+'" class="tsd-kind-icon">'+i+"</a>\n                ",this.results.appendChild(a)}}},t.prototype.setLoadingState=function(e){this.loadingState!=e&&(this.el.classList.remove(o[this.loadingState].toLowerCase()),this.loadingState=e,this.el.classList.add(o[this.loadingState].toLowerCase()),this.updateResults())},t.prototype.setHasFocus=function(e){this.hasFocus!=e&&(this.hasFocus=e,this.el.classList.toggle("has-focus"),e?(this.setQuery(""),this.field.value=""):this.field.value=this.query)},t.prototype.setQuery=function(e){this.query=e.trim(),this.updateResults()},t.prototype.setCurrentResult=function(e){var t=this.results.querySelector(".current");if(t){var r=1==e?t.nextElementSibling:t.previousElementSibling;r&&(t.classList.remove("current"),r.classList.add("current"))}else(t=this.results.querySelector(1==e?"li:first-child":"li:last-child"))&&t.classList.add("current")},t.prototype.gotoCurrentResult=function(){var e=this.results.querySelector(".current");if(e||(e=this.results.querySelector("li:first-child")),e){var t=e.querySelector("a");t&&(window.location.href=t.href),this.field.blur()}},t.prototype.bindEvents=function(){var e=this;this.results.addEventListener("mousedown",(function(){e.resultClicked=!0})),this.results.addEventListener("mouseup",(function(){e.resultClicked=!1,e.setHasFocus(!1)})),this.field.addEventListener("focusin",(function(){e.setHasFocus(!0),e.loadIndex()})),this.field.addEventListener("focusout",(function(){e.resultClicked?e.resultClicked=!1:setTimeout((function(){return e.setHasFocus(!1)}),100)})),this.field.addEventListener("input",(function(){e.setQuery(e.field.value)})),this.field.addEventListener("keydown",(function(t){13==t.keyCode||27==t.keyCode||38==t.keyCode||40==t.keyCode?(e.preventPress=!0,t.preventDefault(),13==t.keyCode?e.gotoCurrentResult():27==t.keyCode?e.field.blur():38==t.keyCode?e.setCurrentResult(-1):40==t.keyCode&&e.setCurrentResult(1)):e.preventPress=!1})),this.field.addEventListener("keypress",(function(t){e.preventPress&&t.preventDefault()})),document.body.addEventListener("keydown",(function(t){t.altKey||t.ctrlKey||t.metaKey||!e.hasFocus&&t.keyCode>47&&t.keyCode<112&&e.field.focus()}))},t}(u),d=function(){function e(){this.listeners={}}return e.prototype.addEventListener=function(e,t){e in this.listeners||(this.listeners[e]=[]),this.listeners[e].push(t)},e.prototype.removeEventListener=function(e,t){if(e in this.listeners)for(var r=this.listeners[e],n=0,i=r.length;n<i;n++)if(r[n]===t)return void r.splice(n,1)},e.prototype.dispatchEvent=function(e){if(!(e.type in this.listeners))return!0;for(var t=this.listeners[e.type].slice(),r=0,n=t.length;r<n;r++)t[r].call(this,e);return!e.defaultPrevented},e}(),f=function(e,t){void 0===t&&(t=100);var r=Date.now();return function(){for(var n=[],i=0;i<arguments.length;i++)n[i]=arguments[i];r+t-Date.now()<0&&(e.apply(void 0,n),r=Date.now())}},p=function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),y=function(e){function t(){var t=e.call(this)||this;return t.scrollTop=0,t.lastY=0,t.width=0,t.height=0,t.showToolbar=!0,t.toolbar=document.querySelector(".tsd-page-toolbar"),t.secondaryNav=document.querySelector(".tsd-navigation.secondary"),window.addEventListener("scroll",f((function(){return t.onScroll()}),10)),window.addEventListener("resize",f((function(){return t.onResize()}),10)),t.onResize(),t.onScroll(),t}return p(t,e),t.prototype.triggerResize=function(){var e=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(e)},t.prototype.onResize=function(){this.width=window.innerWidth||0,this.height=window.innerHeight||0;var e=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(e)},t.prototype.onScroll=function(){this.scrollTop=window.scrollY||0;var e=new CustomEvent("scroll",{detail:{scrollTop:this.scrollTop}});this.dispatchEvent(e),this.hideShowToolbar()},t.prototype.hideShowToolbar=function(){var e=this.showToolbar;this.showToolbar=this.lastY>=this.scrollTop||0===this.scrollTop,e!==this.showToolbar&&(this.toolbar.classList.toggle("tsd-page-toolbar--hide"),this.secondaryNav.classList.toggle("tsd-navigation--toolbar-hide")),this.lastY=this.scrollTop},t.instance=new t,t}(d),m=function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),v=function(e){function t(t){var r=e.call(this,t)||this;return r.anchors=[],r.index=-1,y.instance.addEventListener("resize",(function(){return r.onResize()})),y.instance.addEventListener("scroll",(function(e){return r.onScroll(e)})),r.createAnchors(),r}return m(t,e),t.prototype.createAnchors=function(){var e=this,t=window.location.href;-1!=t.indexOf("#")&&(t=t.substr(0,t.indexOf("#"))),this.el.querySelectorAll("a").forEach((function(r){var n=r.href;if(-1!=n.indexOf("#")&&n.substr(0,t.length)==t){var i=n.substr(n.indexOf("#")+1),s=document.querySelector("a.tsd-anchor[name="+i+"]"),o=r.parentNode;s&&o&&e.anchors.push({link:o,anchor:s,position:0})}})),this.onResize()},t.prototype.onResize=function(){for(var e,t=0,r=this.anchors.length;t<r;t++){var n=(e=this.anchors[t]).anchor.getBoundingClientRect();e.position=n.top+document.body.scrollTop}this.anchors.sort((function(e,t){return e.position-t.position}));var i=new CustomEvent("scroll",{detail:{scrollTop:y.instance.scrollTop}});this.onScroll(i)},t.prototype.onScroll=function(e){for(var t=e.detail.scrollTop+5,r=this.anchors,n=r.length-1,i=this.index;i>-1&&r[i].position>t;)i-=1;for(;i<n&&r[i+1].position<t;)i+=1;this.index!=i&&(this.index>-1&&this.anchors[this.index].link.classList.remove("focus"),this.index=i,this.index>-1&&this.anchors[this.index].link.classList.add("focus"))},t}(u),g=function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),x=function(){function e(e,t){this.signature=e,this.description=t}return e.prototype.addClass=function(e){return this.signature.classList.add(e),this.description.classList.add(e),this},e.prototype.removeClass=function(e){return this.signature.classList.remove(e),this.description.classList.remove(e),this},e}(),w=function(e){function t(t){var r=e.call(this,t)||this;return r.groups=[],r.index=-1,r.createGroups(),r.container&&(r.el.classList.add("active"),Array.from(r.el.children).forEach((function(e){e.addEventListener("touchstart",(function(e){return r.onClick(e)})),e.addEventListener("click",(function(e){return r.onClick(e)}))})),r.container.classList.add("active"),r.setIndex(0)),r}return g(t,e),t.prototype.setIndex=function(e){if(e<0&&(e=0),e>this.groups.length-1&&(e=this.groups.length-1),this.index!=e){var t=this.groups[e];if(this.index>-1){var r=this.groups[this.index];r.removeClass("current").addClass("fade-out"),t.addClass("current"),t.addClass("fade-in"),y.instance.triggerResize(),setTimeout((function(){r.removeClass("fade-out"),t.removeClass("fade-in")}),300)}else t.addClass("current"),y.instance.triggerResize();this.index=e}},t.prototype.createGroups=function(){var e=this.el.children;if(!(e.length<2)){this.container=this.el.nextElementSibling;var t=this.container.children;this.groups=[];for(var r=0;r<e.length;r++)this.groups.push(new x(e[r],t[r]))}},t.prototype.onClick=function(e){var t=this;this.groups.forEach((function(r,n){r.signature===e.currentTarget&&t.setIndex(n)}))},t}(u),L="mousedown",E="mousemove",b="mouseup",S={x:0,y:0},k=!1,Q=!1,O=!1,P=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(P?"is-mobile":"not-mobile"),P&&"ontouchstart"in document.documentElement&&(!0,L="touchstart",E="touchmove",b="touchend"),document.addEventListener(L,(function(e){Q=!0,O=!1;var t="touchstart"==L?e.targetTouches[0]:e;S.y=t.pageY||0,S.x=t.pageX||0})),document.addEventListener(E,(function(e){if(Q&&!O){var t="touchstart"==L?e.targetTouches[0]:e,r=S.x-(t.pageX||0),n=S.y-(t.pageY||0);O=Math.sqrt(r*r+n*n)>10}})),document.addEventListener(b,(function(){Q=!1})),document.addEventListener("click",(function(e){k&&(e.preventDefault(),e.stopImmediatePropagation(),k=!1)}));var T=function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),_=function(e){function t(t){var r=e.call(this,t)||this;return r.className=r.el.dataset.toggle||"",r.el.addEventListener(b,(function(e){return r.onPointerUp(e)})),r.el.addEventListener("click",(function(e){return e.preventDefault()})),document.addEventListener(L,(function(e){return r.onDocumentPointerDown(e)})),document.addEventListener(b,(function(e){return r.onDocumentPointerUp(e)})),r}return T(t,e),t.prototype.setActive=function(e){if(this.active!=e){this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);var t=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(t),setTimeout((function(){return document.documentElement.classList.remove(t)}),500)}},t.prototype.onPointerUp=function(e){O||(this.setActive(!0),e.preventDefault())},t.prototype.onDocumentPointerDown=function(e){if(this.active){if(e.target.closest(".col-menu, .tsd-filter-group"))return;this.setActive(!1)}},t.prototype.onDocumentPointerUp=function(e){var t=this;if(!O&&this.active&&e.target.closest(".col-menu")){var r=e.target.closest("a");if(r){var n=window.location.href;-1!=n.indexOf("#")&&(n=n.substr(0,n.indexOf("#"))),r.href.substr(0,n.length)==n&&setTimeout((function(){return t.setActive(!1)}),250)}}},t}(u),C=function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),R=function(){function e(e,t){this.key=e,this.value=t,this.defaultValue=t,this.initialize(),window.localStorage[this.key]&&this.setValue(this.fromLocalStorage(window.localStorage[this.key]))}return e.prototype.initialize=function(){},e.prototype.setValue=function(e){if(this.value!=e){var t=this.value;this.value=e,window.localStorage[this.key]=this.toLocalStorage(e),this.handleValueChange(t,e)}},e}(),I=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return C(t,e),t.prototype.initialize=function(){var e=this,t=document.querySelector("#tsd-filter-"+this.key);t&&(this.checkbox=t,this.checkbox.addEventListener("change",(function(){e.setValue(e.checkbox.checked)})))},t.prototype.handleValueChange=function(e,t){this.checkbox&&(this.checkbox.checked=this.value,document.documentElement.classList.toggle("toggle-"+this.key,this.value!=this.defaultValue))},t.prototype.fromLocalStorage=function(e){return"true"==e},t.prototype.toLocalStorage=function(e){return e?"true":"false"},t}(R),j=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return C(t,e),t.prototype.initialize=function(){var e=this;document.documentElement.classList.add("toggle-"+this.key+this.value);var t=document.querySelector("#tsd-filter-"+this.key);if(t){this.select=t;var r=function(){e.select.classList.add("active")};this.select.addEventListener(L,r),this.select.addEventListener("mouseover",r),this.select.addEventListener("mouseleave",(function(){e.select.classList.remove("active")})),this.select.querySelectorAll("li").forEach((function(r){r.addEventListener(b,(function(r){t.classList.remove("active"),e.setValue(r.target.dataset.value||"")}))})),document.addEventListener(L,(function(t){e.select.contains(t.target)||e.select.classList.remove("active")}))}},t.prototype.handleValueChange=function(e,t){this.select.querySelectorAll("li.selected").forEach((function(e){e.classList.remove("selected")}));var r=this.select.querySelector('li[data-value="'+t+'"]'),n=this.select.querySelector(".tsd-select-label");r&&n&&(r.classList.add("selected"),n.textContent=r.textContent),document.documentElement.classList.remove("toggle-"+e),document.documentElement.classList.add("toggle-"+t)},t.prototype.fromLocalStorage=function(e){return e},t.prototype.toLocalStorage=function(e){return e},t}(R),F=function(e){function t(t){var r=e.call(this,t)||this;return r.optionVisibility=new j("visibility","private"),r.optionInherited=new I("inherited",!0),r.optionExternals=new I("externals",!0),r.optionOnlyExported=new I("only-exported",!1),r}return C(t,e),t.isSupported=function(){try{return void 0!==window.localStorage}catch(e){return!1}},t}(u);r(1);i(h,"#tsd-search"),i(v,".menu-highlight"),i(w,".tsd-signatures"),i(_,"a[data-toggle]"),F.isSupported()?i(F,"#tsd-filter"):document.documentElement.classList.add("no-filter");var N=new a;Object.defineProperty(window,"app",{value:N})}]);
\ No newline at end of file
diff --git a/docs/assets/js/search.json b/docs/assets/js/search.json
new file mode 100644
index 0000000..41d4f8e
--- /dev/null
+++ b/docs/assets/js/search.json
@@ -0,0 +1 @@
+{"kinds":{"1":"Module","32":"Variable","64":"Function","256":"Interface","1024":"Property","65536":"Type literal","4194304":"Type alias"},"rows":[{"id":0,"kind":1,"name":"\"protocol/js-usp-protobuf/protoMessage\"","url":"modules/_protocol_js_usp_protobuf_protomessage_.html","classes":"tsd-kind-module"},{"id":1,"kind":32,"name":"rootRecord","url":"modules/_protocol_js_usp_protobuf_protomessage_.html#rootrecord","classes":"tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/js-usp-protobuf/protoMessage\""},{"id":2,"kind":32,"name":"rootMsg","url":"modules/_protocol_js_usp_protobuf_protomessage_.html#rootmsg","classes":"tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/js-usp-protobuf/protoMessage\""},{"id":3,"kind":32,"name":"Header","url":"modules/_protocol_js_usp_protobuf_protomessage_.html#header","classes":"tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/js-usp-protobuf/protoMessage\""},{"id":4,"kind":64,"name":"init","url":"modules/_protocol_js_usp_protobuf_protomessage_.html#init","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"protocol/js-usp-protobuf/protoMessage\""},{"id":5,"kind":64,"name":"makeGetMessage","url":"modules/_protocol_js_usp_protobuf_protomessage_.html#makegetmessage","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"protocol/js-usp-protobuf/protoMessage\""},{"id":6,"kind":64,"name":"makeDeleteMessage","url":"modules/_protocol_js_usp_protobuf_protomessage_.html#makedeletemessage","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"protocol/js-usp-protobuf/protoMessage\""},{"id":7,"kind":64,"name":"makeSetMessage","url":"modules/_protocol_js_usp_protobuf_protomessage_.html#makesetmessage","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"protocol/js-usp-protobuf/protoMessage\""},{"id":8,"kind":64,"name":"makeAddMessage","url":"modules/_protocol_js_usp_protobuf_protomessage_.html#makeaddmessage","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"protocol/js-usp-protobuf/protoMessage\""},{"id":9,"kind":64,"name":"makeOperateMessage","url":"modules/_protocol_js_usp_protobuf_protomessage_.html#makeoperatemessage","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"protocol/js-usp-protobuf/protoMessage\""},{"id":10,"kind":64,"name":"decode","url":"modules/_protocol_js_usp_protobuf_protomessage_.html#decode","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"protocol/js-usp-protobuf/protoMessage\""},{"id":11,"kind":1,"name":"\"protocol/lib\"","url":"modules/_protocol_lib_.html","classes":"tsd-kind-module"},{"id":12,"kind":32,"name":"digitRe","url":"modules/_protocol_lib_.html#digitre","classes":"tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/lib\""},{"id":13,"kind":32,"name":"digitDotRe","url":"modules/_protocol_lib_.html#digitdotre","classes":"tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/lib\""},{"id":14,"kind":64,"name":"isDigit","url":"modules/_protocol_lib_.html#isdigit","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/lib\""},{"id":15,"kind":64,"name":"firstIsIndex","url":"modules/_protocol_lib_.html#firstisindex","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/lib\""},{"id":16,"kind":64,"name":"unflatten","url":"modules/_protocol_lib_.html#unflatten","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"protocol/lib\""},{"id":17,"kind":64,"name":"search","url":"modules/_protocol_lib_.html#search","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"protocol/lib\""},{"id":18,"kind":64,"name":"_searchAll","url":"modules/_protocol_lib_.html#_searchall","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/lib\""},{"id":19,"kind":64,"name":"searchAll","url":"modules/_protocol_lib_.html#searchall","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"protocol/lib\""},{"id":20,"kind":64,"name":"unwrapObject","url":"modules/_protocol_lib_.html#unwrapobject","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"protocol/lib\""},{"id":21,"kind":64,"name":"unwrapArray","url":"modules/_protocol_lib_.html#unwraparray","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"protocol/lib\""},{"id":22,"kind":1,"name":"\"protocol/index\"","url":"modules/_protocol_index_.html","classes":"tsd-kind-module"},{"id":23,"kind":64,"name":"encodeGet","url":"modules/_protocol_index_.html#encodeget","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/index\""},{"id":24,"kind":64,"name":"encodeSet","url":"modules/_protocol_index_.html#encodeset","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/index\""},{"id":25,"kind":64,"name":"encodeOperate","url":"modules/_protocol_index_.html#encodeoperate","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/index\""},{"id":26,"kind":64,"name":"extractType","url":"modules/_protocol_index_.html#extracttype","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/index\""},{"id":27,"kind":64,"name":"decodeGet","url":"modules/_protocol_index_.html#decodeget","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/index\""},{"id":28,"kind":64,"name":"decode","url":"modules/_protocol_index_.html#decode","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/index\""},{"id":29,"kind":64,"name":"encodeAdd","url":"modules/_protocol_index_.html#encodeadd","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/index\""},{"id":30,"kind":64,"name":"encodeDelete","url":"modules/_protocol_index_.html#encodedelete","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/index\""},{"id":31,"kind":64,"name":"encode","url":"modules/_protocol_index_.html#encode","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"protocol/index\""},{"id":32,"kind":64,"name":"connect","url":"modules/_protocol_index_.html#connect","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"protocol/index\""},{"id":33,"kind":64,"name":"mqtt","url":"modules/_protocol_index_.html#mqtt","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"protocol/index\""},{"id":34,"kind":1,"name":"\"lib\"","url":"modules/_lib_.html","classes":"tsd-kind-module"},{"id":35,"kind":64,"name":"timer","url":"modules/_lib_.html#timer","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"lib\""},{"id":36,"kind":64,"name":"loopTimer","url":"modules/_lib_.html#looptimer","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"lib\""},{"id":37,"kind":64,"name":"makeRouter","url":"modules/_lib_.html#makerouter","classes":"tsd-kind-function tsd-parent-kind-module","parent":"\"lib\""},{"id":38,"kind":1,"name":"\"index\"","url":"modules/_index_.html","classes":"tsd-kind-module"},{"id":39,"kind":64,"name":"addDot","url":"modules/_index_.html#adddot","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":40,"kind":64,"name":"splitReference","url":"modules/_index_.html#splitreference","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":41,"kind":64,"name":"resolveReferences","url":"modules/_index_.html#resolvereferences","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":42,"kind":64,"name":"throwMsgError","url":"modules/_index_.html#throwmsgerror","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":43,"kind":64,"name":"throwError","url":"modules/_index_.html#throwerror","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":44,"kind":64,"name":"isReference","url":"modules/_index_.html#isreference","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":45,"kind":64,"name":"isError","url":"modules/_index_.html#iserror","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":46,"kind":64,"name":"isPromiseResult","url":"modules/_index_.html#ispromiseresult","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":47,"kind":32,"name":"commandsWithReturnValue","url":"modules/_index_.html#commandswithreturnvalue","classes":"tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":48,"kind":64,"name":"decode","url":"modules/_index_.html#decode","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":49,"kind":64,"name":"handleSend","url":"modules/_index_.html#handlesend","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":50,"kind":64,"name":"makeGet","url":"modules/_index_.html#makeget","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":51,"kind":64,"name":"makeSet","url":"modules/_index_.html#makeset","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":52,"kind":64,"name":"makeAdd","url":"modules/_index_.html#makeadd","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":53,"kind":64,"name":"makeDel","url":"modules/_index_.html#makedel","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":54,"kind":64,"name":"makeOperate","url":"modules/_index_.html#makeoperate","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":55,"kind":64,"name":"connect","url":"modules/_index_.html#connect","classes":"tsd-kind-function tsd-parent-kind-module tsd-is-not-exported","parent":"\"index\""},{"id":56,"kind":1,"name":"\"types.d\"","url":"modules/_types_d_.html","classes":"tsd-kind-module"},{"id":57,"kind":256,"name":"ConnectEvents","url":"interfaces/_types_d_.connectevents.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":58,"kind":1024,"name":"onTimeout","url":"interfaces/_types_d_.connectevents.html#ontimeout","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".ConnectEvents"},{"id":59,"kind":256,"name":"Device","url":"interfaces/_types_d_.device.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":60,"kind":1024,"name":"get","url":"interfaces/_types_d_.device.html#get","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".Device"},{"id":61,"kind":65536,"name":"__type","url":"interfaces/_types_d_.device.html#get.__type-3","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".Device.get"},{"id":62,"kind":1024,"name":"set","url":"interfaces/_types_d_.device.html#set","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".Device"},{"id":63,"kind":65536,"name":"__type","url":"interfaces/_types_d_.device.html#set.__type-8","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".Device.set"},{"id":64,"kind":1024,"name":"operate","url":"interfaces/_types_d_.device.html#operate","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".Device"},{"id":65,"kind":65536,"name":"__type","url":"interfaces/_types_d_.device.html#operate.__type-5","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".Device.operate"},{"id":66,"kind":1024,"name":"add","url":"interfaces/_types_d_.device.html#add","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".Device"},{"id":67,"kind":65536,"name":"__type","url":"interfaces/_types_d_.device.html#add.__type","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".Device.add"},{"id":68,"kind":1024,"name":"del","url":"interfaces/_types_d_.device.html#del","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".Device"},{"id":69,"kind":65536,"name":"__type","url":"interfaces/_types_d_.device.html#del.__type-1","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".Device.del"},{"id":70,"kind":1024,"name":"resolve","url":"interfaces/_types_d_.device.html#resolve","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".Device"},{"id":71,"kind":65536,"name":"__type","url":"interfaces/_types_d_.device.html#resolve.__type-6","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".Device.resolve"},{"id":72,"kind":1024,"name":"disconnect","url":"interfaces/_types_d_.device.html#disconnect","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".Device"},{"id":73,"kind":65536,"name":"__type","url":"interfaces/_types_d_.device.html#disconnect.__type-2","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".Device.disconnect"},{"id":74,"kind":1024,"name":"id","url":"interfaces/_types_d_.device.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".Device"},{"id":75,"kind":65536,"name":"__type","url":"interfaces/_types_d_.device.html#id.__type-4","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".Device.id"},{"id":76,"kind":1024,"name":"roles","url":"interfaces/_types_d_.device.html#roles","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".Device"},{"id":77,"kind":65536,"name":"__type","url":"interfaces/_types_d_.device.html#roles.__type-7","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".Device.roles"},{"id":78,"kind":256,"name":"EncodeArgs","url":"interfaces/_types_d_.encodeargs.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":79,"kind":1024,"name":"path","url":"interfaces/_types_d_.encodeargs.html#path","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".EncodeArgs"},{"id":80,"kind":1024,"name":"paths","url":"interfaces/_types_d_.encodeargs.html#paths","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".EncodeArgs"},{"id":81,"kind":1024,"name":"value","url":"interfaces/_types_d_.encodeargs.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".EncodeArgs"},{"id":82,"kind":1024,"name":"input","url":"interfaces/_types_d_.encodeargs.html#input","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".EncodeArgs"},{"id":83,"kind":1024,"name":"action","url":"interfaces/_types_d_.encodeargs.html#action","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".EncodeArgs"},{"id":84,"kind":256,"name":"DeviceError","url":"interfaces/_types_d_.deviceerror.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":85,"kind":1024,"name":"type","url":"interfaces/_types_d_.deviceerror.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".DeviceError"},{"id":86,"kind":1024,"name":"reason","url":"interfaces/_types_d_.deviceerror.html#reason","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".DeviceError"},{"id":87,"kind":1024,"name":"path","url":"interfaces/_types_d_.deviceerror.html#path","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".DeviceError"},{"id":88,"kind":256,"name":"BaseMessage","url":"interfaces/_types_d_.basemessage.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":89,"kind":1024,"name":"id","url":"interfaces/_types_d_.basemessage.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".BaseMessage"},{"id":90,"kind":1024,"name":"type","url":"interfaces/_types_d_.basemessage.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".BaseMessage"},{"id":91,"kind":1024,"name":"path","url":"interfaces/_types_d_.basemessage.html#path","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".BaseMessage"},{"id":92,"kind":1024,"name":"data","url":"interfaces/_types_d_.basemessage.html#data","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".BaseMessage"},{"id":93,"kind":65536,"name":"__type","url":"interfaces/_types_d_.basemessage.html#data.__type","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".BaseMessage.data"},{"id":94,"kind":256,"name":"ErrorMessage","url":"interfaces/_types_d_.errormessage.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":95,"kind":1024,"name":"type","url":"interfaces/_types_d_.errormessage.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite","parent":"\"types.d\".ErrorMessage"},{"id":96,"kind":1024,"name":"data","url":"interfaces/_types_d_.errormessage.html#data","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite","parent":"\"types.d\".ErrorMessage"},{"id":97,"kind":65536,"name":"__type","url":"interfaces/_types_d_.errormessage.html#data.__type","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".ErrorMessage.data"},{"id":98,"kind":32,"name":"reason","url":"interfaces/_types_d_.errormessage.html#data.__type.reason","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"\"types.d\".ErrorMessage.data.__type"},{"id":99,"kind":1024,"name":"id","url":"interfaces/_types_d_.errormessage.html#id","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"\"types.d\".ErrorMessage"},{"id":100,"kind":1024,"name":"path","url":"interfaces/_types_d_.errormessage.html#path","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"\"types.d\".ErrorMessage"},{"id":101,"kind":256,"name":"GetMessage","url":"interfaces/_types_d_.getmessage.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":102,"kind":1024,"name":"type","url":"interfaces/_types_d_.getmessage.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite","parent":"\"types.d\".GetMessage"},{"id":103,"kind":1024,"name":"data","url":"interfaces/_types_d_.getmessage.html#data","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite","parent":"\"types.d\".GetMessage"},{"id":104,"kind":1024,"name":"id","url":"interfaces/_types_d_.getmessage.html#id","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"\"types.d\".GetMessage"},{"id":105,"kind":1024,"name":"path","url":"interfaces/_types_d_.getmessage.html#path","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"\"types.d\".GetMessage"},{"id":106,"kind":256,"name":"SetMessage","url":"interfaces/_types_d_.setmessage.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":107,"kind":1024,"name":"type","url":"interfaces/_types_d_.setmessage.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite","parent":"\"types.d\".SetMessage"},{"id":108,"kind":1024,"name":"data","url":"interfaces/_types_d_.setmessage.html#data","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite","parent":"\"types.d\".SetMessage"},{"id":109,"kind":65536,"name":"__type","url":"interfaces/_types_d_.setmessage.html#data.__type","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".SetMessage.data"},{"id":110,"kind":32,"name":"updated","url":"interfaces/_types_d_.setmessage.html#data.__type.updated","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"\"types.d\".SetMessage.data.__type"},{"id":111,"kind":1024,"name":"id","url":"interfaces/_types_d_.setmessage.html#id","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"\"types.d\".SetMessage"},{"id":112,"kind":1024,"name":"path","url":"interfaces/_types_d_.setmessage.html#path","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"\"types.d\".SetMessage"},{"id":113,"kind":256,"name":"OperateMessage","url":"interfaces/_types_d_.operatemessage.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":114,"kind":1024,"name":"type","url":"interfaces/_types_d_.operatemessage.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite","parent":"\"types.d\".OperateMessage"},{"id":115,"kind":1024,"name":"data","url":"interfaces/_types_d_.operatemessage.html#data","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite","parent":"\"types.d\".OperateMessage"},{"id":116,"kind":1024,"name":"id","url":"interfaces/_types_d_.operatemessage.html#id","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"\"types.d\".OperateMessage"},{"id":117,"kind":1024,"name":"path","url":"interfaces/_types_d_.operatemessage.html#path","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"\"types.d\".OperateMessage"},{"id":118,"kind":256,"name":"AddMessage","url":"interfaces/_types_d_.addmessage.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":119,"kind":1024,"name":"type","url":"interfaces/_types_d_.addmessage.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite","parent":"\"types.d\".AddMessage"},{"id":120,"kind":1024,"name":"data","url":"interfaces/_types_d_.addmessage.html#data","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite","parent":"\"types.d\".AddMessage"},{"id":121,"kind":1024,"name":"id","url":"interfaces/_types_d_.addmessage.html#id","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"\"types.d\".AddMessage"},{"id":122,"kind":1024,"name":"path","url":"interfaces/_types_d_.addmessage.html#path","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"\"types.d\".AddMessage"},{"id":123,"kind":256,"name":"DeleteMessage","url":"interfaces/_types_d_.deletemessage.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":124,"kind":1024,"name":"type","url":"interfaces/_types_d_.deletemessage.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite","parent":"\"types.d\".DeleteMessage"},{"id":125,"kind":1024,"name":"data","url":"interfaces/_types_d_.deletemessage.html#data","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite","parent":"\"types.d\".DeleteMessage"},{"id":126,"kind":65536,"name":"__type","url":"interfaces/_types_d_.deletemessage.html#data.__type","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".DeleteMessage.data"},{"id":127,"kind":32,"name":"deleted","url":"interfaces/_types_d_.deletemessage.html#data.__type.deleted","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"\"types.d\".DeleteMessage.data.__type"},{"id":128,"kind":1024,"name":"id","url":"interfaces/_types_d_.deletemessage.html#id","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"\"types.d\".DeleteMessage"},{"id":129,"kind":1024,"name":"path","url":"interfaces/_types_d_.deletemessage.html#path","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"\"types.d\".DeleteMessage"},{"id":130,"kind":256,"name":"ProtocolArgs","url":"interfaces/_types_d_.protocolargs.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":131,"kind":1024,"name":"onMessage","url":"interfaces/_types_d_.protocolargs.html#onmessage","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".ProtocolArgs"},{"id":132,"kind":65536,"name":"__type","url":"interfaces/_types_d_.protocolargs.html#onmessage.__type-1","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".ProtocolArgs.onMessage"},{"id":133,"kind":1024,"name":"onError","url":"interfaces/_types_d_.protocolargs.html#onerror","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".ProtocolArgs"},{"id":134,"kind":65536,"name":"__type","url":"interfaces/_types_d_.protocolargs.html#onerror.__type","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".ProtocolArgs.onError"},{"id":135,"kind":256,"name":"InitResult","url":"interfaces/_types_d_.initresult.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":136,"kind":1024,"name":"timeout","url":"interfaces/_types_d_.initresult.html#timeout","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".InitResult"},{"id":137,"kind":256,"name":"Protocol","url":"interfaces/_types_d_.protocol.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":138,"kind":1024,"name":"init","url":"interfaces/_types_d_.protocol.html#init","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".Protocol"},{"id":139,"kind":65536,"name":"__type","url":"interfaces/_types_d_.protocol.html#init.__type-2","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".Protocol.init"},{"id":140,"kind":1024,"name":"close","url":"interfaces/_types_d_.protocol.html#close","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".Protocol"},{"id":141,"kind":65536,"name":"__type","url":"interfaces/_types_d_.protocol.html#close.__type","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".Protocol.close"},{"id":142,"kind":1024,"name":"send","url":"interfaces/_types_d_.protocol.html#send","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".Protocol"},{"id":143,"kind":65536,"name":"__type","url":"interfaces/_types_d_.protocol.html#send.__type-3","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".Protocol.send"},{"id":144,"kind":1024,"name":"encode","url":"interfaces/_types_d_.protocol.html#encode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".Protocol"},{"id":145,"kind":65536,"name":"__type","url":"interfaces/_types_d_.protocol.html#encode.__type-1","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".Protocol.encode"},{"id":146,"kind":256,"name":"ProtocolEvents","url":"interfaces/_types_d_.protocolevents.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":147,"kind":1024,"name":"onMessage","url":"interfaces/_types_d_.protocolevents.html#onmessage","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".ProtocolEvents"},{"id":148,"kind":65536,"name":"__type","url":"interfaces/_types_d_.protocolevents.html#onmessage.__type","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"\"types.d\".ProtocolEvents.onMessage"},{"id":149,"kind":256,"name":"MQTTRequest","url":"interfaces/_types_d_.mqttrequest.html","classes":"tsd-kind-interface tsd-parent-kind-module","parent":"\"types.d\""},{"id":150,"kind":1024,"name":"id","url":"interfaces/_types_d_.mqttrequest.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".MQTTRequest"},{"id":151,"kind":1024,"name":"data","url":"interfaces/_types_d_.mqttrequest.html#data","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"\"types.d\".MQTTRequest"},{"id":152,"kind":4194304,"name":"PromiseResult","url":"modules/_types_d_.html#promiseresult","classes":"tsd-kind-type-alias tsd-parent-kind-module","parent":"\"types.d\""},{"id":153,"kind":65536,"name":"__type","url":"modules/_types_d_.html#promiseresult.__type-1","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"\"types.d\".PromiseResult"},{"id":154,"kind":32,"name":"resolve","url":"modules/_types_d_.html#promiseresult.__type-1.resolve","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"\"types.d\".PromiseResult.__type"},{"id":155,"kind":32,"name":"reject","url":"modules/_types_d_.html#promiseresult.__type-1.reject","classes":"tsd-kind-variable tsd-parent-kind-type-literal","parent":"\"types.d\".PromiseResult.__type"},{"id":156,"kind":4194304,"name":"Router","url":"modules/_types_d_.html#router","classes":"tsd-kind-type-alias tsd-parent-kind-module","parent":"\"types.d\""},{"id":157,"kind":4194304,"name":"SendFn","url":"modules/_types_d_.html#sendfn","classes":"tsd-kind-type-alias tsd-parent-kind-module","parent":"\"types.d\""},{"id":158,"kind":65536,"name":"__type","url":"modules/_types_d_.html#sendfn.__type-2","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"\"types.d\".SendFn"},{"id":159,"kind":4194304,"name":"Role","url":"modules/_types_d_.html#role","classes":"tsd-kind-type-alias tsd-parent-kind-module","parent":"\"types.d\""},{"id":160,"kind":4194304,"name":"JSObject","url":"modules/_types_d_.html#jsobject","classes":"tsd-kind-type-alias tsd-parent-kind-module","parent":"\"types.d\""},{"id":161,"kind":65536,"name":"__type","url":"modules/_types_d_.html#jsobject.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"\"types.d\".JSObject"},{"id":162,"kind":4194304,"name":"CommandType","url":"modules/_types_d_.html#commandtype","classes":"tsd-kind-type-alias tsd-parent-kind-module","parent":"\"types.d\""},{"id":163,"kind":4194304,"name":"MessageType","url":"modules/_types_d_.html#messagetype","classes":"tsd-kind-type-alias tsd-parent-kind-module","parent":"\"types.d\""},{"id":164,"kind":4194304,"name":"JSType","url":"modules/_types_d_.html#jstype","classes":"tsd-kind-type-alias tsd-parent-kind-module","parent":"\"types.d\""},{"id":165,"kind":4194304,"name":"USPMessage","url":"modules/_types_d_.html#uspmessage","classes":"tsd-kind-type-alias tsd-parent-kind-module","parent":"\"types.d\""}],"index":{"version":"2.3.9","fields":["name","parent"],"fieldVectors":[["name/0",[0,14.835,1,14.835,2,14.835]],["parent/0",[]],["name/1",[3,47.356]],["parent/1",[0,1.553,1,1.553,2,1.553]],["name/2",[4,47.356]],["parent/2",[0,1.553,1,1.553,2,1.553]],["name/3",[5,47.356]],["parent/3",[0,1.553,1,1.553,2,1.553]],["name/4",[6,42.223]],["parent/4",[0,1.553,1,1.553,2,1.553]],["name/5",[7,47.356]],["parent/5",[0,1.553,1,1.553,2,1.553]],["name/6",[8,47.356]],["parent/6",[0,1.553,1,1.553,2,1.553]],["name/7",[9,47.356]],["parent/7",[0,1.553,1,1.553,2,1.553]],["name/8",[10,47.356]],["parent/8",[0,1.553,1,1.553,2,1.553]],["name/9",[11,47.356]],["parent/9",[0,1.553,1,1.553,2,1.553]],["name/10",[12,38.841]],["parent/10",[0,1.553,1,1.553,2,1.553]],["name/11",[13,26.887]],["parent/11",[]],["name/12",[14,47.356]],["parent/12",[13,2.764]],["name/13",[15,47.356]],["parent/13",[13,2.764]],["name/14",[16,47.356]],["parent/14",[13,2.764]],["name/15",[17,47.356]],["parent/15",[13,2.764]],["name/16",[18,47.356]],["parent/16",[13,2.764]],["name/17",[19,47.356]],["parent/17",[13,2.764]],["name/18",[20,47.356]],["parent/18",[13,2.764]],["name/19",[21,47.356]],["parent/19",[13,2.764]],["name/20",[22,47.356]],["parent/20",[13,2.764]],["name/21",[23,47.356]],["parent/21",[13,2.764]],["name/22",[24,26.05]],["parent/22",[]],["name/23",[25,47.356]],["parent/23",[24,2.677]],["name/24",[26,47.356]],["parent/24",[24,2.677]],["name/25",[27,47.356]],["parent/25",[24,2.677]],["name/26",[28,47.356]],["parent/26",[24,2.677]],["name/27",[29,47.356]],["parent/27",[24,2.677]],["name/28",[12,38.841]],["parent/28",[24,2.677]],["name/29",[30,47.356]],["parent/29",[24,2.677]],["name/30",[31,47.356]],["parent/30",[24,2.677]],["name/31",[32,42.223]],["parent/31",[24,2.677]],["name/32",[33,42.223]],["parent/32",[24,2.677]],["name/33",[34,47.356]],["parent/33",[24,2.677]],["name/34",[35,36.316]],["parent/34",[]],["name/35",[36,47.356]],["parent/35",[35,3.733]],["name/36",[37,47.356]],["parent/36",[35,3.733]],["name/37",[38,47.356]],["parent/37",[35,3.733]],["name/38",[39,22.11]],["parent/38",[]],["name/39",[40,47.356]],["parent/39",[39,2.273]],["name/40",[41,47.356]],["parent/40",[39,2.273]],["name/41",[42,47.356]],["parent/41",[39,2.273]],["name/42",[43,47.356]],["parent/42",[39,2.273]],["name/43",[44,47.356]],["parent/43",[39,2.273]],["name/44",[45,47.356]],["parent/44",[39,2.273]],["name/45",[46,47.356]],["parent/45",[39,2.273]],["name/46",[47,47.356]],["parent/46",[39,2.273]],["name/47",[48,47.356]],["parent/47",[39,2.273]],["name/48",[12,38.841]],["parent/48",[39,2.273]],["name/49",[49,47.356]],["parent/49",[39,2.273]],["name/50",[50,47.356]],["parent/50",[39,2.273]],["name/51",[51,47.356]],["parent/51",[39,2.273]],["name/52",[52,47.356]],["parent/52",[39,2.273]],["name/53",[53,47.356]],["parent/53",[39,2.273]],["name/54",[54,47.356]],["parent/54",[39,2.273]],["name/55",[33,42.223]],["parent/55",[39,2.273]],["name/56",[55,18.499]],["parent/56",[]],["name/57",[56,47.356]],["parent/57",[55,1.901]],["name/58",[57,47.356]],["parent/58",[58,4.867]],["name/59",[59,47.356]],["parent/59",[55,1.901]],["name/60",[60,47.356]],["parent/60",[61,2.961]],["name/61",[62,19.706]],["parent/61",[63,4.867]],["name/62",[64,47.356]],["parent/62",[61,2.961]],["name/63",[62,19.706]],["parent/63",[65,4.867]],["name/64",[66,47.356]],["parent/64",[61,2.961]],["name/65",[62,19.706]],["parent/65",[67,4.867]],["name/66",[68,47.356]],["parent/66",[61,2.961]],["name/67",[62,19.706]],["parent/67",[69,4.867]],["name/68",[70,47.356]],["parent/68",[61,2.961]],["name/69",[62,19.706]],["parent/69",[71,4.867]],["name/70",[72,42.223]],["parent/70",[61,2.961]],["name/71",[62,19.706]],["parent/71",[73,4.867]],["name/72",[74,47.356]],["parent/72",[61,2.961]],["name/73",[62,19.706]],["parent/73",[75,4.867]],["name/74",[76,28.807]],["parent/74",[61,2.961]],["name/75",[62,19.706]],["parent/75",[77,4.867]],["name/76",[78,47.356]],["parent/76",[61,2.961]],["name/77",[62,19.706]],["parent/77",[79,4.867]],["name/78",[80,47.356]],["parent/78",[55,1.901]],["name/79",[81,28.807]],["parent/79",[82,3.525]],["name/80",[83,47.356]],["parent/80",[82,3.525]],["name/81",[84,47.356]],["parent/81",[82,3.525]],["name/82",[85,47.356]],["parent/82",[82,3.525]],["name/83",[86,47.356]],["parent/83",[82,3.525]],["name/84",[87,47.356]],["parent/84",[55,1.901]],["name/85",[88,29.925]],["parent/85",[89,3.992]],["name/86",[90,42.223]],["parent/86",[89,3.992]],["name/87",[81,28.807]],["parent/87",[89,3.992]],["name/88",[91,47.356]],["parent/88",[55,1.901]],["name/89",[76,28.807]],["parent/89",[92,3.733]],["name/90",[88,29.925]],["parent/90",[92,3.733]],["name/91",[81,28.807]],["parent/91",[92,3.733]],["name/92",[93,29.925]],["parent/92",[92,3.733]],["name/93",[62,19.706]],["parent/93",[94,4.867]],["name/94",[95,47.356]],["parent/94",[55,1.901]],["name/95",[88,29.925]],["parent/95",[96,3.733]],["name/96",[93,29.925]],["parent/96",[96,3.733]],["name/97",[62,19.706]],["parent/97",[97,4.867]],["name/98",[90,42.223]],["parent/98",[98,4.867]],["name/99",[76,28.807]],["parent/99",[96,3.733]],["name/100",[81,28.807]],["parent/100",[96,3.733]],["name/101",[99,47.356]],["parent/101",[55,1.901]],["name/102",[88,29.925]],["parent/102",[100,3.733]],["name/103",[93,29.925]],["parent/103",[100,3.733]],["name/104",[76,28.807]],["parent/104",[100,3.733]],["name/105",[81,28.807]],["parent/105",[100,3.733]],["name/106",[101,47.356]],["parent/106",[55,1.901]],["name/107",[88,29.925]],["parent/107",[102,3.733]],["name/108",[93,29.925]],["parent/108",[102,3.733]],["name/109",[62,19.706]],["parent/109",[103,4.867]],["name/110",[104,47.356]],["parent/110",[105,4.867]],["name/111",[76,28.807]],["parent/111",[102,3.733]],["name/112",[81,28.807]],["parent/112",[102,3.733]],["name/113",[106,47.356]],["parent/113",[55,1.901]],["name/114",[88,29.925]],["parent/114",[107,3.733]],["name/115",[93,29.925]],["parent/115",[107,3.733]],["name/116",[76,28.807]],["parent/116",[107,3.733]],["name/117",[81,28.807]],["parent/117",[107,3.733]],["name/118",[108,47.356]],["parent/118",[55,1.901]],["name/119",[88,29.925]],["parent/119",[109,3.733]],["name/120",[93,29.925]],["parent/120",[109,3.733]],["name/121",[76,28.807]],["parent/121",[109,3.733]],["name/122",[81,28.807]],["parent/122",[109,3.733]],["name/123",[110,47.356]],["parent/123",[55,1.901]],["name/124",[88,29.925]],["parent/124",[111,3.733]],["name/125",[93,29.925]],["parent/125",[111,3.733]],["name/126",[62,19.706]],["parent/126",[112,4.867]],["name/127",[113,47.356]],["parent/127",[114,4.867]],["name/128",[76,28.807]],["parent/128",[111,3.733]],["name/129",[81,28.807]],["parent/129",[111,3.733]],["name/130",[115,47.356]],["parent/130",[55,1.901]],["name/131",[116,42.223]],["parent/131",[117,4.34]],["name/132",[62,19.706]],["parent/132",[118,4.867]],["name/133",[119,47.356]],["parent/133",[117,4.34]],["name/134",[62,19.706]],["parent/134",[120,4.867]],["name/135",[121,47.356]],["parent/135",[55,1.901]],["name/136",[122,47.356]],["parent/136",[123,4.867]],["name/137",[124,47.356]],["parent/137",[55,1.901]],["name/138",[6,42.223]],["parent/138",[125,3.733]],["name/139",[62,19.706]],["parent/139",[126,4.867]],["name/140",[127,47.356]],["parent/140",[125,3.733]],["name/141",[62,19.706]],["parent/141",[128,4.867]],["name/142",[129,47.356]],["parent/142",[125,3.733]],["name/143",[62,19.706]],["parent/143",[130,4.867]],["name/144",[32,42.223]],["parent/144",[125,3.733]],["name/145",[62,19.706]],["parent/145",[131,4.867]],["name/146",[132,47.356]],["parent/146",[55,1.901]],["name/147",[116,42.223]],["parent/147",[133,4.867]],["name/148",[62,19.706]],["parent/148",[134,4.867]],["name/149",[135,47.356]],["parent/149",[55,1.901]],["name/150",[76,28.807]],["parent/150",[136,4.34]],["name/151",[93,29.925]],["parent/151",[136,4.34]],["name/152",[137,47.356]],["parent/152",[55,1.901]],["name/153",[62,19.706]],["parent/153",[138,4.867]],["name/154",[72,42.223]],["parent/154",[139,4.34]],["name/155",[140,47.356]],["parent/155",[139,4.34]],["name/156",[141,47.356]],["parent/156",[55,1.901]],["name/157",[142,47.356]],["parent/157",[55,1.901]],["name/158",[62,19.706]],["parent/158",[143,4.867]],["name/159",[144,47.356]],["parent/159",[55,1.901]],["name/160",[145,47.356]],["parent/160",[55,1.901]],["name/161",[62,19.706]],["parent/161",[146,4.867]],["name/162",[147,47.356]],["parent/162",[55,1.901]],["name/163",[148,47.356]],["parent/163",[55,1.901]],["name/164",[149,47.356]],["parent/164",[55,1.901]],["name/165",[150,47.356]],["parent/165",[55,1.901]]],"invertedIndex":[["__type",{"_index":62,"name":{"61":{},"63":{},"65":{},"67":{},"69":{},"71":{},"73":{},"75":{},"77":{},"93":{},"97":{},"109":{},"126":{},"132":{},"134":{},"139":{},"141":{},"143":{},"145":{},"148":{},"153":{},"158":{},"161":{}},"parent":{}}],["_searchall",{"_index":20,"name":{"18":{}},"parent":{}}],["action",{"_index":86,"name":{"83":{}},"parent":{}}],["add",{"_index":68,"name":{"66":{}},"parent":{}}],["adddot",{"_index":40,"name":{"39":{}},"parent":{}}],["addmessage",{"_index":108,"name":{"118":{}},"parent":{}}],["basemessage",{"_index":91,"name":{"88":{}},"parent":{}}],["close",{"_index":127,"name":{"140":{}},"parent":{}}],["commandswithreturnvalue",{"_index":48,"name":{"47":{}},"parent":{}}],["commandtype",{"_index":147,"name":{"162":{}},"parent":{}}],["connect",{"_index":33,"name":{"32":{},"55":{}},"parent":{}}],["connectevents",{"_index":56,"name":{"57":{}},"parent":{}}],["data",{"_index":93,"name":{"92":{},"96":{},"103":{},"108":{},"115":{},"120":{},"125":{},"151":{}},"parent":{}}],["decode",{"_index":12,"name":{"10":{},"28":{},"48":{}},"parent":{}}],["decodeget",{"_index":29,"name":{"27":{}},"parent":{}}],["del",{"_index":70,"name":{"68":{}},"parent":{}}],["deleted",{"_index":113,"name":{"127":{}},"parent":{}}],["deletemessage",{"_index":110,"name":{"123":{}},"parent":{}}],["device",{"_index":59,"name":{"59":{}},"parent":{}}],["deviceerror",{"_index":87,"name":{"84":{}},"parent":{}}],["digitdotre",{"_index":15,"name":{"13":{}},"parent":{}}],["digitre",{"_index":14,"name":{"12":{}},"parent":{}}],["disconnect",{"_index":74,"name":{"72":{}},"parent":{}}],["encode",{"_index":32,"name":{"31":{},"144":{}},"parent":{}}],["encodeadd",{"_index":30,"name":{"29":{}},"parent":{}}],["encodeargs",{"_index":80,"name":{"78":{}},"parent":{}}],["encodedelete",{"_index":31,"name":{"30":{}},"parent":{}}],["encodeget",{"_index":25,"name":{"23":{}},"parent":{}}],["encodeoperate",{"_index":27,"name":{"25":{}},"parent":{}}],["encodeset",{"_index":26,"name":{"24":{}},"parent":{}}],["errormessage",{"_index":95,"name":{"94":{}},"parent":{}}],["extracttype",{"_index":28,"name":{"26":{}},"parent":{}}],["firstisindex",{"_index":17,"name":{"15":{}},"parent":{}}],["get",{"_index":60,"name":{"60":{}},"parent":{}}],["getmessage",{"_index":99,"name":{"101":{}},"parent":{}}],["handlesend",{"_index":49,"name":{"49":{}},"parent":{}}],["header",{"_index":5,"name":{"3":{}},"parent":{}}],["id",{"_index":76,"name":{"74":{},"89":{},"99":{},"104":{},"111":{},"116":{},"121":{},"128":{},"150":{}},"parent":{}}],["index",{"_index":39,"name":{"38":{}},"parent":{"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{}}}],["init",{"_index":6,"name":{"4":{},"138":{}},"parent":{}}],["initresult",{"_index":121,"name":{"135":{}},"parent":{}}],["input",{"_index":85,"name":{"82":{}},"parent":{}}],["isdigit",{"_index":16,"name":{"14":{}},"parent":{}}],["iserror",{"_index":46,"name":{"45":{}},"parent":{}}],["ispromiseresult",{"_index":47,"name":{"46":{}},"parent":{}}],["isreference",{"_index":45,"name":{"44":{}},"parent":{}}],["jsobject",{"_index":145,"name":{"160":{}},"parent":{}}],["jstype",{"_index":149,"name":{"164":{}},"parent":{}}],["lib",{"_index":35,"name":{"34":{}},"parent":{"35":{},"36":{},"37":{}}}],["looptimer",{"_index":37,"name":{"36":{}},"parent":{}}],["makeadd",{"_index":52,"name":{"52":{}},"parent":{}}],["makeaddmessage",{"_index":10,"name":{"8":{}},"parent":{}}],["makedel",{"_index":53,"name":{"53":{}},"parent":{}}],["makedeletemessage",{"_index":8,"name":{"6":{}},"parent":{}}],["makeget",{"_index":50,"name":{"50":{}},"parent":{}}],["makegetmessage",{"_index":7,"name":{"5":{}},"parent":{}}],["makeoperate",{"_index":54,"name":{"54":{}},"parent":{}}],["makeoperatemessage",{"_index":11,"name":{"9":{}},"parent":{}}],["makerouter",{"_index":38,"name":{"37":{}},"parent":{}}],["makeset",{"_index":51,"name":{"51":{}},"parent":{}}],["makesetmessage",{"_index":9,"name":{"7":{}},"parent":{}}],["messagetype",{"_index":148,"name":{"163":{}},"parent":{}}],["mqtt",{"_index":34,"name":{"33":{}},"parent":{}}],["mqttrequest",{"_index":135,"name":{"149":{}},"parent":{}}],["onerror",{"_index":119,"name":{"133":{}},"parent":{}}],["onmessage",{"_index":116,"name":{"131":{},"147":{}},"parent":{}}],["ontimeout",{"_index":57,"name":{"58":{}},"parent":{}}],["operate",{"_index":66,"name":{"64":{}},"parent":{}}],["operatemessage",{"_index":106,"name":{"113":{}},"parent":{}}],["path",{"_index":81,"name":{"79":{},"87":{},"91":{},"100":{},"105":{},"112":{},"117":{},"122":{},"129":{}},"parent":{}}],["paths",{"_index":83,"name":{"80":{}},"parent":{}}],["promiseresult",{"_index":137,"name":{"152":{}},"parent":{}}],["protobuf/protomessage",{"_index":2,"name":{"0":{}},"parent":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{}}}],["protocol",{"_index":124,"name":{"137":{}},"parent":{}}],["protocol/index",{"_index":24,"name":{"22":{}},"parent":{"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{}}}],["protocol/js",{"_index":0,"name":{"0":{}},"parent":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{}}}],["protocol/lib",{"_index":13,"name":{"11":{}},"parent":{"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{}}}],["protocolargs",{"_index":115,"name":{"130":{}},"parent":{}}],["protocolevents",{"_index":132,"name":{"146":{}},"parent":{}}],["reason",{"_index":90,"name":{"86":{},"98":{}},"parent":{}}],["reject",{"_index":140,"name":{"155":{}},"parent":{}}],["resolve",{"_index":72,"name":{"70":{},"154":{}},"parent":{}}],["resolvereferences",{"_index":42,"name":{"41":{}},"parent":{}}],["role",{"_index":144,"name":{"159":{}},"parent":{}}],["roles",{"_index":78,"name":{"76":{}},"parent":{}}],["rootmsg",{"_index":4,"name":{"2":{}},"parent":{}}],["rootrecord",{"_index":3,"name":{"1":{}},"parent":{}}],["router",{"_index":141,"name":{"156":{}},"parent":{}}],["search",{"_index":19,"name":{"17":{}},"parent":{}}],["searchall",{"_index":21,"name":{"19":{}},"parent":{}}],["send",{"_index":129,"name":{"142":{}},"parent":{}}],["sendfn",{"_index":142,"name":{"157":{}},"parent":{}}],["set",{"_index":64,"name":{"62":{}},"parent":{}}],["setmessage",{"_index":101,"name":{"106":{}},"parent":{}}],["splitreference",{"_index":41,"name":{"40":{}},"parent":{}}],["throwerror",{"_index":44,"name":{"43":{}},"parent":{}}],["throwmsgerror",{"_index":43,"name":{"42":{}},"parent":{}}],["timeout",{"_index":122,"name":{"136":{}},"parent":{}}],["timer",{"_index":36,"name":{"35":{}},"parent":{}}],["type",{"_index":88,"name":{"85":{},"90":{},"95":{},"102":{},"107":{},"114":{},"119":{},"124":{}},"parent":{}}],["types.d",{"_index":55,"name":{"56":{}},"parent":{"57":{},"59":{},"78":{},"84":{},"88":{},"94":{},"101":{},"106":{},"113":{},"118":{},"123":{},"130":{},"135":{},"137":{},"146":{},"149":{},"152":{},"156":{},"157":{},"159":{},"160":{},"162":{},"163":{},"164":{},"165":{}}}],["types.d\".addmessage",{"_index":109,"name":{},"parent":{"119":{},"120":{},"121":{},"122":{}}}],["types.d\".basemessage",{"_index":92,"name":{},"parent":{"89":{},"90":{},"91":{},"92":{}}}],["types.d\".basemessage.data",{"_index":94,"name":{},"parent":{"93":{}}}],["types.d\".connectevents",{"_index":58,"name":{},"parent":{"58":{}}}],["types.d\".deletemessage",{"_index":111,"name":{},"parent":{"124":{},"125":{},"128":{},"129":{}}}],["types.d\".deletemessage.data",{"_index":112,"name":{},"parent":{"126":{}}}],["types.d\".deletemessage.data.__type",{"_index":114,"name":{},"parent":{"127":{}}}],["types.d\".device",{"_index":61,"name":{},"parent":{"60":{},"62":{},"64":{},"66":{},"68":{},"70":{},"72":{},"74":{},"76":{}}}],["types.d\".device.add",{"_index":69,"name":{},"parent":{"67":{}}}],["types.d\".device.del",{"_index":71,"name":{},"parent":{"69":{}}}],["types.d\".device.disconnect",{"_index":75,"name":{},"parent":{"73":{}}}],["types.d\".device.get",{"_index":63,"name":{},"parent":{"61":{}}}],["types.d\".device.id",{"_index":77,"name":{},"parent":{"75":{}}}],["types.d\".device.operate",{"_index":67,"name":{},"parent":{"65":{}}}],["types.d\".device.resolve",{"_index":73,"name":{},"parent":{"71":{}}}],["types.d\".device.roles",{"_index":79,"name":{},"parent":{"77":{}}}],["types.d\".device.set",{"_index":65,"name":{},"parent":{"63":{}}}],["types.d\".deviceerror",{"_index":89,"name":{},"parent":{"85":{},"86":{},"87":{}}}],["types.d\".encodeargs",{"_index":82,"name":{},"parent":{"79":{},"80":{},"81":{},"82":{},"83":{}}}],["types.d\".errormessage",{"_index":96,"name":{},"parent":{"95":{},"96":{},"99":{},"100":{}}}],["types.d\".errormessage.data",{"_index":97,"name":{},"parent":{"97":{}}}],["types.d\".errormessage.data.__type",{"_index":98,"name":{},"parent":{"98":{}}}],["types.d\".getmessage",{"_index":100,"name":{},"parent":{"102":{},"103":{},"104":{},"105":{}}}],["types.d\".initresult",{"_index":123,"name":{},"parent":{"136":{}}}],["types.d\".jsobject",{"_index":146,"name":{},"parent":{"161":{}}}],["types.d\".mqttrequest",{"_index":136,"name":{},"parent":{"150":{},"151":{}}}],["types.d\".operatemessage",{"_index":107,"name":{},"parent":{"114":{},"115":{},"116":{},"117":{}}}],["types.d\".promiseresult",{"_index":138,"name":{},"parent":{"153":{}}}],["types.d\".promiseresult.__type",{"_index":139,"name":{},"parent":{"154":{},"155":{}}}],["types.d\".protocol",{"_index":125,"name":{},"parent":{"138":{},"140":{},"142":{},"144":{}}}],["types.d\".protocol.close",{"_index":128,"name":{},"parent":{"141":{}}}],["types.d\".protocol.encode",{"_index":131,"name":{},"parent":{"145":{}}}],["types.d\".protocol.init",{"_index":126,"name":{},"parent":{"139":{}}}],["types.d\".protocol.send",{"_index":130,"name":{},"parent":{"143":{}}}],["types.d\".protocolargs",{"_index":117,"name":{},"parent":{"131":{},"133":{}}}],["types.d\".protocolargs.onerror",{"_index":120,"name":{},"parent":{"134":{}}}],["types.d\".protocolargs.onmessage",{"_index":118,"name":{},"parent":{"132":{}}}],["types.d\".protocolevents",{"_index":133,"name":{},"parent":{"147":{}}}],["types.d\".protocolevents.onmessage",{"_index":134,"name":{},"parent":{"148":{}}}],["types.d\".sendfn",{"_index":143,"name":{},"parent":{"158":{}}}],["types.d\".setmessage",{"_index":102,"name":{},"parent":{"107":{},"108":{},"111":{},"112":{}}}],["types.d\".setmessage.data",{"_index":103,"name":{},"parent":{"109":{}}}],["types.d\".setmessage.data.__type",{"_index":105,"name":{},"parent":{"110":{}}}],["unflatten",{"_index":18,"name":{"16":{}},"parent":{}}],["unwraparray",{"_index":23,"name":{"21":{}},"parent":{}}],["unwrapobject",{"_index":22,"name":{"20":{}},"parent":{}}],["updated",{"_index":104,"name":{"110":{}},"parent":{}}],["usp",{"_index":1,"name":{"0":{}},"parent":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{}}}],["uspmessage",{"_index":150,"name":{"165":{}},"parent":{}}],["value",{"_index":84,"name":{"81":{}},"parent":{}}]],"pipeline":[]}}
\ No newline at end of file
diff --git a/docs/globals.html b/docs/globals.html
new file mode 100644
index 0000000..a798c6d
--- /dev/null
+++ b/docs/globals.html
@@ -0,0 +1,140 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="assets/js/search.json" data-base=".">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="globals.html">Globals</a>
+				</li>
+			</ul>
+			<h1>usp-js</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Modules</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-module tsd-is-external"><a href="modules/_config_.html" class="tsd-kind-icon">&quot;config&quot;</a></li>
+								<li class="tsd-kind-module"><a href="modules/_index_.html" class="tsd-kind-icon">&quot;index&quot;</a></li>
+								<li class="tsd-kind-module"><a href="modules/_lib_.html" class="tsd-kind-icon">&quot;lib&quot;</a></li>
+								<li class="tsd-kind-module"><a href="modules/_protocol_index_.html" class="tsd-kind-icon">&quot;protocol/index&quot;</a></li>
+								<li class="tsd-kind-module"><a href="modules/_protocol_js_usp_protobuf_protomessage_.html" class="tsd-kind-icon">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a></li>
+								<li class="tsd-kind-module"><a href="modules/_protocol_lib_.html" class="tsd-kind-icon">&quot;protocol/lib&quot;</a></li>
+								<li class="tsd-kind-module"><a href="modules/_types_d_.html" class="tsd-kind-icon">&quot;types.d&quot;</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals current ">
+						<a href="globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..e6ceced
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,237 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="assets/js/search.json" data-base=".">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="globals.html">Globals</a>
+				</li>
+			</ul>
+			<h1>usp-js</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<div class="tsd-panel tsd-typography">
+				<a href="#usp-js" id="usp-js" style="color: inherit; text-decoration: none;">
+					<h1>usp-js</h1>
+				</a>
+				<p>Helper library for easy usp communication using mqtt over tcp or ws.</p>
+				<p><a href="https://usp-data-models.broadband-forum.org/tr-181-2-13-0-usp.html">USP Reference</a></p>
+				<a href="#installation" id="installation" style="color: inherit; text-decoration: none;">
+					<h1>Installation</h1>
+				</a>
+				<p><code>npm install usp-js</code></p>
+				<a href="#usage" id="usage" style="color: inherit; text-decoration: none;">
+					<h1>Usage</h1>
+				</a>
+				<pre><code class="language-javascript"><span class="hljs-keyword">const</span> connect = <span class="hljs-built_in">require</span>(<span class="hljs-string">&quot;usp-js&quot;</span>).default
+
+<span class="hljs-keyword">const</span> run = <span class="hljs-keyword">async</span> () =&gt; {
+  <span class="hljs-comment">// Connect</span>
+  <span class="hljs-keyword">const</span> usp = <span class="hljs-keyword">await</span> connect({
+    <span class="hljs-attr">host</span>: <span class="hljs-string">&quot;192.168.1.1&quot;</span>,
+    <span class="hljs-attr">username</span>: <span class="hljs-string">&quot;admin&quot;</span>,
+    <span class="hljs-attr">password</span>: <span class="hljs-string">&quot;admin&quot;</span>
+  });
+
+  <span class="hljs-comment">// Get property</span>
+  <span class="hljs-keyword">await</span> usp.get(<span class="hljs-string">&quot;Device.WiFi.&quot;</span>).then(<span class="hljs-built_in">console</span>.log);
+
+  <span class="hljs-comment">// Disconnect</span>
+  <span class="hljs-keyword">await</span> usp.disconnect();
+};
+
+run();</code></pre>
+				<a href="#api" id="api" style="color: inherit; text-decoration: none;">
+					<h1>API</h1>
+				</a>
+				<ul>
+					<li><p>Connect</p>
+						<pre><code class="language-javascript"><span class="hljs-comment">// options are based on https://github.com/mqttjs/MQTT.js#mqttconnecturl-options</span>
+<span class="hljs-keyword">const</span> usp = <span class="hljs-keyword">await</span> connect(options);</code></pre>
+					</li>
+					<li><p>Get</p>
+						<ul>
+							<li><p>get object - all object end with a dot</p>
+								<pre><code class="language-javascript"><span class="hljs-keyword">await</span> usp.get(<span class="hljs-string">&quot;Device.Time.&quot;</span>);
+<span class="hljs-comment">// =&gt; {</span>
+<span class="hljs-comment">//   &quot;CurrentLocalTime&quot;: &quot;2020-12-15T12:33:19Z&quot;,</span>
+<span class="hljs-comment">//   &quot;Enable&quot;: true,</span>
+<span class="hljs-comment">//   ...</span>
+<span class="hljs-comment">// }</span></code></pre>
+							</li>
+							<li><p>get property</p>
+								<pre><code class="language-javascript"><span class="hljs-keyword">await</span> usp.get(<span class="hljs-string">&quot;Device.Time.CurrentLocalTime&quot;</span>); <span class="hljs-comment">// =&gt; &quot;2020-12-15T12:33:19Z&quot;</span></code></pre>
+							</li>
+							<li><p>get multiple paths</p>
+								<pre><code class="language-javascript"><span class="hljs-keyword">await</span> usp.get([<span class="hljs-string">&quot;Device.WiFi.Radio.1.&quot;</span>, <span class="hljs-string">&quot;Device.WiFi.Radio.2.&quot;</span>]);
+<span class="hljs-comment">// =&gt; [</span>
+<span class="hljs-comment">// { ... },</span>
+<span class="hljs-comment">// { ... }</span>
+<span class="hljs-comment">// ]</span></code></pre>
+							</li>
+							<li><p>get using pattern</p>
+								<pre><code class="language-javascript"><span class="hljs-keyword">await</span> usp.get(<span class="hljs-string">&#x27;Device.Ethernet.Interface.[Alias==&quot;WAN&quot;].CurrentBitRate&#x27;</span>); <span class="hljs-comment">// =&gt; 0</span></code></pre>
+							</li>
+							<li><p>resolve references in get</p>
+								<pre><code class="language-javascript"><span class="hljs-keyword">await</span> usp.get(<span class="hljs-string">&quot;Device.WiFi.Radio.1.&quot;</span>).then(usp.resolve); <span class="hljs-comment">// =&gt; { ... }</span>
+<span class="hljs-comment">// or if deeper resolution is needed (be careful when using level, going above 3 often causes an infinite reference loop)</span>
+<span class="hljs-keyword">await</span> usp.get(<span class="hljs-string">&quot;Device.WiFi.Radio.1.&quot;</span>).then(<span class="hljs-function"><span class="hljs-params">msg</span> =&gt;</span> usp.resolve(msg, <span class="hljs-number">3</span> <span class="hljs-comment">/* level - defaults to 1 */</span>)); <span class="hljs-comment">// =&gt; { ... } </span></code></pre>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul>
+					<li><p>Set</p>
+						<ul>
+							<li><p>set object - does not need to have all attributes, but some may be required (check USP Reference)</p>
+								<pre><code class="language-javascript"><span class="hljs-keyword">await</span> usp.set(<span class="hljs-string">&quot;Device.WiFi.Radio.1.&quot;</span>, { <span class="hljs-attr">Name</span>: <span class="hljs-string">&quot;radio-1&quot;</span> }); <span class="hljs-comment">// =&gt; void</span></code></pre>
+							</li>
+							<li><p>set property</p>
+								<pre><code class="language-javascript"><span class="hljs-keyword">await</span> usp.set(<span class="hljs-string">&quot;Device.WiFi.Radio.1.Name&quot;</span>, <span class="hljs-string">&quot;radio-1&quot;</span>); <span class="hljs-comment">// =&gt; void</span></code></pre>
+							</li>
+						</ul>
+					</li>
+					<li><p>Operate - WIP (response message not working yet)</p>
+						<ul>
+							<li><p>operate without no arguments</p>
+								<pre><code class="language-javascript"><span class="hljs-keyword">await</span> usp.operate(<span class="hljs-string">&quot;Device.SelfTestDiagnostics()&quot;</span>);</code></pre>
+							</li>
+							<li><p>operate with arguments (for required args check USP Reference)</p>
+								<pre><code class="language-javascript"><span class="hljs-keyword">await</span> usp.operate(<span class="hljs-string">&quot;Device.IP.Diagnostics.IPPing()&quot;</span>, { <span class="hljs-attr">Host</span>: <span class="hljs-string">&quot;iopsys.eu&quot;</span> });</code></pre>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul>
+					<li><p>Add</p>
+						<ul>
+							<li><p>add with no arguments - adds a new default object</p>
+								<pre><code class="language-javascript"><span class="hljs-keyword">await</span> usp.add(<span class="hljs-string">&quot;Device.NAT.PortMapping.&quot;</span>);  <span class="hljs-comment">// =&gt; &quot;Device.NAT.PortMapping.3.&quot;</span></code></pre>
+							</li>
+							<li><p>add with arguments - adds a new object with provided values</p>
+								<pre><code class="language-javascript"><span class="hljs-keyword">await</span> usp.add(<span class="hljs-string">&quot;Device.NAT.PortMapping.&quot;</span>, {
+<span class="hljs-attr">Description</span>: <span class="hljs-string">&quot;webserver1-set&quot;</span>,
+<span class="hljs-attr">ExternalPort</span>: <span class="hljs-string">&quot;80&quot;</span>,
+<span class="hljs-attr">Protocol</span>: <span class="hljs-string">&quot;TCP&quot;</span>,
+<span class="hljs-attr">Interface</span>: <span class="hljs-string">&quot;Device.IP.Interface.1&quot;</span>,
+<span class="hljs-attr">Enable</span>: <span class="hljs-string">&quot;true&quot;</span>,
+<span class="hljs-attr">InternalClient</span>: <span class="hljs-string">&quot;192.168.1.125&quot;</span>,
+<span class="hljs-attr">InternalPort</span>: <span class="hljs-string">&quot;5000&quot;</span>,
+}); <span class="hljs-comment">// =&gt; &quot;Device.NAT.PortMapping.4.&quot;</span></code></pre>
+							</li>
+						</ul>
+					</li>
+					<li><p>Delete</p>
+						<pre><code class="language-javascript"><span class="hljs-keyword">await</span> usp.del(<span class="hljs-string">&quot;Device.NAT.PortMapping.4.&quot;</span>); <span class="hljs-comment">// =&gt; void</span></code></pre>
+					</li>
+				</ul>
+			</div>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.addmessage.html b/docs/interfaces/_types_d_.addmessage.html
new file mode 100644
index 0000000..fb956db
--- /dev/null
+++ b/docs/interfaces/_types_d_.addmessage.html
@@ -0,0 +1,304 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>AddMessage | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.addmessage.html">AddMessage</a>
+				</li>
+			</ul>
+			<h1>Interface AddMessage</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Add Message</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<a href="_types_d_.basemessage.html" class="tsd-signature-type">BaseMessage</a>
+						<ul class="tsd-hierarchy">
+							<li>
+								<span class="target">AddMessage</span>
+							</li>
+						</ul>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite"><a href="_types_d_.addmessage.html#data" class="tsd-kind-icon">data</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="_types_d_.addmessage.html#id" class="tsd-kind-icon">id</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="_types_d_.addmessage.html#path" class="tsd-kind-icon">path</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite"><a href="_types_d_.addmessage.html#type" class="tsd-kind-icon">type</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+					<a name="data" class="tsd-anchor"></a>
+					<h3>data</h3>
+					<div class="tsd-signature tsd-kind-icon">data<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<p>Overrides <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#data">data</a></p>
+						<ul>
+							<li>Defined in types.d.ts:159</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+					<a name="id" class="tsd-anchor"></a>
+					<h3>id</h3>
+					<div class="tsd-signature tsd-kind-icon">id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<p>Inherited from <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#id">id</a></p>
+						<ul>
+							<li>Defined in types.d.ts:127</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+					<a name="path" class="tsd-anchor"></a>
+					<h3>path</h3>
+					<div class="tsd-signature tsd-kind-icon">path<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<p>Inherited from <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#path">path</a></p>
+						<ul>
+							<li>Defined in types.d.ts:129</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+					<a name="type" class="tsd-anchor"></a>
+					<h3>type</h3>
+					<div class="tsd-signature tsd-kind-icon">type<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"add"</span></div>
+					<aside class="tsd-sources">
+						<p>Overrides <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#type">type</a></p>
+						<ul>
+							<li>Defined in types.d.ts:158</li>
+						</ul>
+					</aside>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+								<a href="_types_d_.addmessage.html#data" class="tsd-kind-icon">data</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+								<a href="_types_d_.addmessage.html#id" class="tsd-kind-icon">id</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+								<a href="_types_d_.addmessage.html#path" class="tsd-kind-icon">path</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+								<a href="_types_d_.addmessage.html#type" class="tsd-kind-icon">type</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.basemessage.html b/docs/interfaces/_types_d_.basemessage.html
new file mode 100644
index 0000000..266c2d2
--- /dev/null
+++ b/docs/interfaces/_types_d_.basemessage.html
@@ -0,0 +1,320 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>BaseMessage | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.basemessage.html">BaseMessage</a>
+				</li>
+			</ul>
+			<h1>Interface BaseMessage</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Base Message passed between protocol and api</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<span class="target">BaseMessage</span>
+						<ul class="tsd-hierarchy">
+							<li>
+								<a href="_types_d_.errormessage.html" class="tsd-signature-type">ErrorMessage</a>
+							</li>
+							<li>
+								<a href="_types_d_.getmessage.html" class="tsd-signature-type">GetMessage</a>
+							</li>
+							<li>
+								<a href="_types_d_.setmessage.html" class="tsd-signature-type">SetMessage</a>
+							</li>
+							<li>
+								<a href="_types_d_.operatemessage.html" class="tsd-signature-type">OperateMessage</a>
+							</li>
+							<li>
+								<a href="_types_d_.addmessage.html" class="tsd-signature-type">AddMessage</a>
+							</li>
+							<li>
+								<a href="_types_d_.deletemessage.html" class="tsd-signature-type">DeleteMessage</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.basemessage.html#data" class="tsd-kind-icon">data</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.basemessage.html#id" class="tsd-kind-icon">id</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.basemessage.html#path" class="tsd-kind-icon">path</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.basemessage.html#type" class="tsd-kind-icon">type</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="data" class="tsd-anchor"></a>
+					<h3>data</h3>
+					<div class="tsd-signature tsd-kind-icon">data<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{}</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:130</li>
+						</ul>
+					</aside>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="id" class="tsd-anchor"></a>
+					<h3>id</h3>
+					<div class="tsd-signature tsd-kind-icon">id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:127</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="path" class="tsd-anchor"></a>
+					<h3>path</h3>
+					<div class="tsd-signature tsd-kind-icon">path<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:129</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="type" class="tsd-anchor"></a>
+					<h3>type</h3>
+					<div class="tsd-signature tsd-kind-icon">type<span class="tsd-signature-symbol">:</span> <a href="../modules/_types_d_.html#messagetype" class="tsd-signature-type">MessageType</a></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:128</li>
+						</ul>
+					</aside>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.basemessage.html#data" class="tsd-kind-icon">data</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.basemessage.html#id" class="tsd-kind-icon">id</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.basemessage.html#path" class="tsd-kind-icon">path</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.basemessage.html#type" class="tsd-kind-icon">type</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.connectevents.html b/docs/interfaces/_types_d_.connectevents.html
new file mode 100644
index 0000000..1a7e813
--- /dev/null
+++ b/docs/interfaces/_types_d_.connectevents.html
@@ -0,0 +1,258 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>ConnectEvents | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.connectevents.html">ConnectEvents</a>
+				</li>
+			</ul>
+			<h1>Interface ConnectEvents</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Connection lifecycle event handlers</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<span class="target">ConnectEvents</span>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.connectevents.html#ontimeout" class="tsd-kind-icon">on<wbr>Timeout</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="ontimeout" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagOptional">Optional</span> on<wbr>Timeout</h3>
+					<div class="tsd-signature tsd-kind-icon">on<wbr>Timeout<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">)</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:16</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Handler for idle timeout</p>
+						</div>
+					</div>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.connectevents.html#ontimeout" class="tsd-kind-icon">on<wbr>Timeout</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.deletemessage.html b/docs/interfaces/_types_d_.deletemessage.html
new file mode 100644
index 0000000..66cafd6
--- /dev/null
+++ b/docs/interfaces/_types_d_.deletemessage.html
@@ -0,0 +1,312 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>DeleteMessage | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.deletemessage.html">DeleteMessage</a>
+				</li>
+			</ul>
+			<h1>Interface DeleteMessage</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Delete Message</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<a href="_types_d_.basemessage.html" class="tsd-signature-type">BaseMessage</a>
+						<ul class="tsd-hierarchy">
+							<li>
+								<span class="target">DeleteMessage</span>
+							</li>
+						</ul>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite"><a href="_types_d_.deletemessage.html#data" class="tsd-kind-icon">data</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="_types_d_.deletemessage.html#id" class="tsd-kind-icon">id</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="_types_d_.deletemessage.html#path" class="tsd-kind-icon">path</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite"><a href="_types_d_.deletemessage.html#type" class="tsd-kind-icon">type</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+					<a name="data" class="tsd-anchor"></a>
+					<h3>data</h3>
+					<div class="tsd-signature tsd-kind-icon">data<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>deleted<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">true</span><span class="tsd-signature-symbol"> }</span></div>
+					<aside class="tsd-sources">
+						<p>Overrides <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#data">data</a></p>
+						<ul>
+							<li>Defined in types.d.ts:164</li>
+						</ul>
+					</aside>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter">
+								<h5>deleted<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">true</span></h5>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+					<a name="id" class="tsd-anchor"></a>
+					<h3>id</h3>
+					<div class="tsd-signature tsd-kind-icon">id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<p>Inherited from <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#id">id</a></p>
+						<ul>
+							<li>Defined in types.d.ts:127</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+					<a name="path" class="tsd-anchor"></a>
+					<h3>path</h3>
+					<div class="tsd-signature tsd-kind-icon">path<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<p>Inherited from <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#path">path</a></p>
+						<ul>
+							<li>Defined in types.d.ts:129</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+					<a name="type" class="tsd-anchor"></a>
+					<h3>type</h3>
+					<div class="tsd-signature tsd-kind-icon">type<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"delete"</span></div>
+					<aside class="tsd-sources">
+						<p>Overrides <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#type">type</a></p>
+						<ul>
+							<li>Defined in types.d.ts:163</li>
+						</ul>
+					</aside>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+								<a href="_types_d_.deletemessage.html#data" class="tsd-kind-icon">data</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+								<a href="_types_d_.deletemessage.html#id" class="tsd-kind-icon">id</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+								<a href="_types_d_.deletemessage.html#path" class="tsd-kind-icon">path</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+								<a href="_types_d_.deletemessage.html#type" class="tsd-kind-icon">type</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.device.html b/docs/interfaces/_types_d_.device.html
new file mode 100644
index 0000000..bf06945
--- /dev/null
+++ b/docs/interfaces/_types_d_.device.html
@@ -0,0 +1,649 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>Device | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.device.html">Device</a>
+				</li>
+			</ul>
+			<h1>Interface Device</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Device API</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<span class="target">Device</span>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.device.html#add" class="tsd-kind-icon">add</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.device.html#del" class="tsd-kind-icon">del</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.device.html#disconnect" class="tsd-kind-icon">disconnect</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.device.html#get" class="tsd-kind-icon">get</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.device.html#id" class="tsd-kind-icon">id</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.device.html#operate" class="tsd-kind-icon">operate</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.device.html#resolve" class="tsd-kind-icon">resolve</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.device.html#roles" class="tsd-kind-icon">roles</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.device.html#set" class="tsd-kind-icon">set</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="add" class="tsd-anchor"></a>
+					<h3>add</h3>
+					<div class="tsd-signature tsd-kind-icon">add<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, values<span class="tsd-signature-symbol">?: </span><a href="../modules/_types_d_.html#jsobject" class="tsd-signature-type">JSObject</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:64</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Add object to path</p>
+						</div>
+						<dl class="tsd-comment-tags">
+							<dt>param</dt>
+							<dd><p>Path to add to (e.g. &quot;Device.NAT.PortMapping.&quot;)</p>
+							</dd>
+							<dt>param</dt>
+							<dd><p>Optional object to add (if skipped will use default values)</p>
+							</dd>
+							<dt>returns</dt>
+							<dd><p>Full path of new object</p>
+								<pre><code><span class="hljs-keyword">await</span> usp.<span class="hljs-keyword">add</span>(<span class="hljs-string">&quot;Device.NAT.PortMapping.&quot;</span>)</code></pre>
+							</dd>
+						</dl>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, values<span class="tsd-signature-symbol">?: </span><a href="../modules/_types_d_.html#jsobject" class="tsd-signature-type">JSObject</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-parameters-title">Parameters</h4>
+										<ul class="tsd-parameters">
+											<li>
+												<h5>path: <span class="tsd-signature-type">string</span></h5>
+											</li>
+											<li>
+												<h5><span class="tsd-flag ts-flagOptional">Optional</span> values: <a href="../modules/_types_d_.html#jsobject" class="tsd-signature-type">JSObject</a></h5>
+											</li>
+										</ul>
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="del" class="tsd-anchor"></a>
+					<h3>del</h3>
+					<div class="tsd-signature tsd-kind-icon">del<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:73</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Delete object at path</p>
+						</div>
+						<dl class="tsd-comment-tags">
+							<dt>param</dt>
+							<dd><p>Full path to delete (e.g. &quot;Device.NAT.PortMapping.1.&quot;)</p>
+								<pre><code><span class="hljs-selector-tag">await</span> <span class="hljs-selector-tag">usp</span><span class="hljs-selector-class">.del</span>(&quot;<span class="hljs-selector-tag">Device</span><span class="hljs-selector-class">.NAT</span><span class="hljs-selector-class">.PortMapping</span>.1.&quot;)</code></pre>
+							</dd>
+						</dl>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-parameters-title">Parameters</h4>
+										<ul class="tsd-parameters">
+											<li>
+												<h5>path: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5>
+											</li>
+										</ul>
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="disconnect" class="tsd-anchor"></a>
+					<h3>disconnect</h3>
+					<div class="tsd-signature tsd-kind-icon">disconnect<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:91</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Disconenct from device</p>
+							<pre><code>await usp.<span class="hljs-built_in">disconnect</span>()</code></pre>
+						</div>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="get" class="tsd-anchor"></a>
+					<h3>get</h3>
+					<div class="tsd-signature tsd-kind-icon">get<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:30</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Get value at path</p>
+						</div>
+						<dl class="tsd-comment-tags">
+							<dt>param</dt>
+							<dd><p>Location of value (e.g. &quot;Device.DeviceInfo.&quot;)</p>
+								<pre><code><span class="hljs-keyword">await</span> usp.<span class="hljs-keyword">get</span>(<span class="hljs-string">&quot;Device.WiFi.Radio.1.&quot;</span>)
+<span class="hljs-comment">// or</span>
+<span class="hljs-keyword">await</span> usp.<span class="hljs-keyword">get</span>([<span class="hljs-string">&quot;Device.WiFi.Radio.1.&quot;</span>, <span class="hljs-string">&quot;Device.WiFi.Radio.2.&quot;</span>])</code></pre>
+							</dd>
+						</dl>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-parameters-title">Parameters</h4>
+										<ul class="tsd-parameters">
+											<li>
+												<h5>path: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5>
+											</li>
+										</ul>
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="id" class="tsd-anchor"></a>
+					<h3>id</h3>
+					<div class="tsd-signature tsd-kind-icon">id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:94</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Connection id</p>
+						</div>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="operate" class="tsd-anchor"></a>
+					<h3>operate</h3>
+					<div class="tsd-signature tsd-kind-icon">operate<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, input<span class="tsd-signature-symbol">?: </span><a href="../modules/_types_d_.html#jsobject" class="tsd-signature-type">JSObject</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:53</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Execute a command</p>
+						</div>
+						<dl class="tsd-comment-tags">
+							<dt>param</dt>
+							<dd><p>Full path of command (e.g. &quot;Device.SelfTestDiagnostics()&quot;)</p>
+							</dd>
+							<dt>param</dt>
+							<dd><p>Optional input to the command</p>
+								<pre><code><span class="hljs-keyword">await</span> usp.operate(<span class="hljs-string">&quot;Device.SelfTestDiagnostics()&quot;</span>)</code></pre>
+							</dd>
+						</dl>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, input<span class="tsd-signature-symbol">?: </span><a href="../modules/_types_d_.html#jsobject" class="tsd-signature-type">JSObject</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-parameters-title">Parameters</h4>
+										<ul class="tsd-parameters">
+											<li>
+												<h5>path: <span class="tsd-signature-type">string</span></h5>
+											</li>
+											<li>
+												<h5><span class="tsd-flag ts-flagOptional">Optional</span> input: <a href="../modules/_types_d_.html#jsobject" class="tsd-signature-type">JSObject</a></h5>
+											</li>
+										</ul>
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="resolve" class="tsd-anchor"></a>
+					<h3>resolve</h3>
+					<div class="tsd-signature tsd-kind-icon">resolve<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>msg<span class="tsd-signature-symbol">: </span><a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a>, level<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:83</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Resolve references in message</p>
+						</div>
+						<dl class="tsd-comment-tags">
+							<dt>param</dt>
+							<dd><p>Message with reference in it</p>
+							</dd>
+							<dt>param</dt>
+							<dd><p>Optional level of nesting to resolve to (avoid using high numbers)</p>
+								<pre><code><span class="hljs-selector-tag">await</span> <span class="hljs-selector-tag">usp</span><span class="hljs-selector-class">.get</span>(&quot;<span class="hljs-selector-tag">Device</span><span class="hljs-selector-class">.WiFi</span><span class="hljs-selector-class">.Radio</span>.1.&quot;)<span class="hljs-selector-class">.then</span>(<span class="hljs-selector-tag">device</span><span class="hljs-selector-class">.resolve</span>)</code></pre>
+							</dd>
+						</dl>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>msg<span class="tsd-signature-symbol">: </span><a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a>, level<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-parameters-title">Parameters</h4>
+										<ul class="tsd-parameters">
+											<li>
+												<h5>msg: <a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a></h5>
+											</li>
+											<li>
+												<h5><span class="tsd-flag ts-flagDefault value">Default value</span> level: <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> = 1</span></h5>
+											</li>
+										</ul>
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="roles" class="tsd-anchor"></a>
+					<h3>roles</h3>
+					<div class="tsd-signature tsd-kind-icon">roles<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><a href="../modules/_types_d_.html#role" class="tsd-signature-type">Role</a><span class="tsd-signature-symbol">[]</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:97</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Roles of current session</p>
+						</div>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../modules/_types_d_.html#role" class="tsd-signature-type">Role</a><span class="tsd-signature-symbol">[]</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-returns-title">Returns <a href="../modules/_types_d_.html#role" class="tsd-signature-type">Role</a><span class="tsd-signature-symbol">[]</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="set" class="tsd-anchor"></a>
+					<h3>set</h3>
+					<div class="tsd-signature tsd-kind-icon">set<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, value<span class="tsd-signature-symbol">: </span><a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:42</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Set value at path</p>
+						</div>
+						<dl class="tsd-comment-tags">
+							<dt>param</dt>
+							<dd><p>Location of value (e.g. &quot;Device.DeviceInfo.&quot;)</p>
+							</dd>
+							<dt>param</dt>
+							<dd><p>Value to assign</p>
+								<pre><code><span class="hljs-selector-tag">await</span> <span class="hljs-selector-tag">usp</span><span class="hljs-selector-class">.set</span>(&quot;<span class="hljs-selector-tag">Device</span><span class="hljs-selector-class">.WiFi</span><span class="hljs-selector-class">.Radio</span>.1.&quot;, { <span class="hljs-attribute">Name</span>: <span class="hljs-string">&quot;radio-1&quot;</span> })
+// <span class="hljs-selector-tag">or</span>
+<span class="hljs-selector-tag">await</span> <span class="hljs-selector-tag">usp</span><span class="hljs-selector-class">.set</span>(&quot;<span class="hljs-selector-tag">Device</span><span class="hljs-selector-class">.WiFi</span><span class="hljs-selector-class">.Radio</span>.1<span class="hljs-selector-class">.Name</span>&quot;, &quot;<span class="hljs-selector-tag">radio-1</span>&quot;)</code></pre>
+							</dd>
+						</dl>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, value<span class="tsd-signature-symbol">: </span><a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-parameters-title">Parameters</h4>
+										<ul class="tsd-parameters">
+											<li>
+												<h5>path: <span class="tsd-signature-type">string</span></h5>
+											</li>
+											<li>
+												<h5>value: <a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a></h5>
+											</li>
+										</ul>
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.device.html#add" class="tsd-kind-icon">add</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.device.html#del" class="tsd-kind-icon">del</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.device.html#disconnect" class="tsd-kind-icon">disconnect</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.device.html#get" class="tsd-kind-icon">get</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.device.html#id" class="tsd-kind-icon">id</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.device.html#operate" class="tsd-kind-icon">operate</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.device.html#resolve" class="tsd-kind-icon">resolve</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.device.html#roles" class="tsd-kind-icon">roles</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.device.html#set" class="tsd-kind-icon">set</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.deviceerror.html b/docs/interfaces/_types_d_.deviceerror.html
new file mode 100644
index 0000000..ddf14d2
--- /dev/null
+++ b/docs/interfaces/_types_d_.deviceerror.html
@@ -0,0 +1,281 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>DeviceError | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.deviceerror.html">DeviceError</a>
+				</li>
+			</ul>
+			<h1>Interface DeviceError</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>User error message</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<span class="target">DeviceError</span>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.deviceerror.html#path" class="tsd-kind-icon">path</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.deviceerror.html#reason" class="tsd-kind-icon">reason</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.deviceerror.html#type" class="tsd-kind-icon">type</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="path" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagOptional">Optional</span> path</h3>
+					<div class="tsd-signature tsd-kind-icon">path<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:123</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="reason" class="tsd-anchor"></a>
+					<h3>reason</h3>
+					<div class="tsd-signature tsd-kind-icon">reason<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:122</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="type" class="tsd-anchor"></a>
+					<h3>type</h3>
+					<div class="tsd-signature tsd-kind-icon">type<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"error"</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:121</li>
+						</ul>
+					</aside>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.deviceerror.html#path" class="tsd-kind-icon">path</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.deviceerror.html#reason" class="tsd-kind-icon">reason</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.deviceerror.html#type" class="tsd-kind-icon">type</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.encodeargs.html b/docs/interfaces/_types_d_.encodeargs.html
new file mode 100644
index 0000000..e689bdc
--- /dev/null
+++ b/docs/interfaces/_types_d_.encodeargs.html
@@ -0,0 +1,309 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>EncodeArgs | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.encodeargs.html">EncodeArgs</a>
+				</li>
+			</ul>
+			<h1>Interface EncodeArgs</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Arguments for encoding commands</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<span class="target">EncodeArgs</span>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.encodeargs.html#action" class="tsd-kind-icon">action</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.encodeargs.html#input" class="tsd-kind-icon">input</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.encodeargs.html#path" class="tsd-kind-icon">path</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.encodeargs.html#paths" class="tsd-kind-icon">paths</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.encodeargs.html#value" class="tsd-kind-icon">value</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="action" class="tsd-anchor"></a>
+					<h3>action</h3>
+					<div class="tsd-signature tsd-kind-icon">action<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:106</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="input" class="tsd-anchor"></a>
+					<h3>input</h3>
+					<div class="tsd-signature tsd-kind-icon">input<span class="tsd-signature-symbol">:</span> <a href="../modules/_types_d_.html#jsobject" class="tsd-signature-type">JSObject</a></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:105</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="path" class="tsd-anchor"></a>
+					<h3>path</h3>
+					<div class="tsd-signature tsd-kind-icon">path<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:102</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="paths" class="tsd-anchor"></a>
+					<h3>paths</h3>
+					<div class="tsd-signature tsd-kind-icon">paths<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:103</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="value" class="tsd-anchor"></a>
+					<h3>value</h3>
+					<div class="tsd-signature tsd-kind-icon">value<span class="tsd-signature-symbol">:</span> <a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:104</li>
+						</ul>
+					</aside>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.encodeargs.html#action" class="tsd-kind-icon">action</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.encodeargs.html#input" class="tsd-kind-icon">input</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.encodeargs.html#path" class="tsd-kind-icon">path</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.encodeargs.html#paths" class="tsd-kind-icon">paths</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.encodeargs.html#value" class="tsd-kind-icon">value</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.errormessage.html b/docs/interfaces/_types_d_.errormessage.html
new file mode 100644
index 0000000..f186633
--- /dev/null
+++ b/docs/interfaces/_types_d_.errormessage.html
@@ -0,0 +1,312 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>ErrorMessage | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.errormessage.html">ErrorMessage</a>
+				</li>
+			</ul>
+			<h1>Interface ErrorMessage</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Error message</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<a href="_types_d_.basemessage.html" class="tsd-signature-type">BaseMessage</a>
+						<ul class="tsd-hierarchy">
+							<li>
+								<span class="target">ErrorMessage</span>
+							</li>
+						</ul>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite"><a href="_types_d_.errormessage.html#data" class="tsd-kind-icon">data</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="_types_d_.errormessage.html#id" class="tsd-kind-icon">id</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="_types_d_.errormessage.html#path" class="tsd-kind-icon">path</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite"><a href="_types_d_.errormessage.html#type" class="tsd-kind-icon">type</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+					<a name="data" class="tsd-anchor"></a>
+					<h3>data</h3>
+					<div class="tsd-signature tsd-kind-icon">data<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>reason<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span></div>
+					<aside class="tsd-sources">
+						<p>Overrides <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#data">data</a></p>
+						<ul>
+							<li>Defined in types.d.ts:135</li>
+						</ul>
+					</aside>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter">
+								<h5>reason<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+					<a name="id" class="tsd-anchor"></a>
+					<h3>id</h3>
+					<div class="tsd-signature tsd-kind-icon">id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<p>Inherited from <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#id">id</a></p>
+						<ul>
+							<li>Defined in types.d.ts:127</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+					<a name="path" class="tsd-anchor"></a>
+					<h3>path</h3>
+					<div class="tsd-signature tsd-kind-icon">path<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<p>Inherited from <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#path">path</a></p>
+						<ul>
+							<li>Defined in types.d.ts:129</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+					<a name="type" class="tsd-anchor"></a>
+					<h3>type</h3>
+					<div class="tsd-signature tsd-kind-icon">type<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"error"</span></div>
+					<aside class="tsd-sources">
+						<p>Overrides <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#type">type</a></p>
+						<ul>
+							<li>Defined in types.d.ts:134</li>
+						</ul>
+					</aside>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+								<a href="_types_d_.errormessage.html#data" class="tsd-kind-icon">data</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+								<a href="_types_d_.errormessage.html#id" class="tsd-kind-icon">id</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+								<a href="_types_d_.errormessage.html#path" class="tsd-kind-icon">path</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+								<a href="_types_d_.errormessage.html#type" class="tsd-kind-icon">type</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.getmessage.html b/docs/interfaces/_types_d_.getmessage.html
new file mode 100644
index 0000000..03f3dd7
--- /dev/null
+++ b/docs/interfaces/_types_d_.getmessage.html
@@ -0,0 +1,304 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>GetMessage | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.getmessage.html">GetMessage</a>
+				</li>
+			</ul>
+			<h1>Interface GetMessage</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Get Message</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<a href="_types_d_.basemessage.html" class="tsd-signature-type">BaseMessage</a>
+						<ul class="tsd-hierarchy">
+							<li>
+								<span class="target">GetMessage</span>
+							</li>
+						</ul>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite"><a href="_types_d_.getmessage.html#data" class="tsd-kind-icon">data</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="_types_d_.getmessage.html#id" class="tsd-kind-icon">id</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="_types_d_.getmessage.html#path" class="tsd-kind-icon">path</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite"><a href="_types_d_.getmessage.html#type" class="tsd-kind-icon">type</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+					<a name="data" class="tsd-anchor"></a>
+					<h3>data</h3>
+					<div class="tsd-signature tsd-kind-icon">data<span class="tsd-signature-symbol">:</span> <a href="../modules/_types_d_.html#jstype" class="tsd-signature-type">JSType</a></div>
+					<aside class="tsd-sources">
+						<p>Overrides <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#data">data</a></p>
+						<ul>
+							<li>Defined in types.d.ts:142</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+					<a name="id" class="tsd-anchor"></a>
+					<h3>id</h3>
+					<div class="tsd-signature tsd-kind-icon">id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<p>Inherited from <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#id">id</a></p>
+						<ul>
+							<li>Defined in types.d.ts:127</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+					<a name="path" class="tsd-anchor"></a>
+					<h3>path</h3>
+					<div class="tsd-signature tsd-kind-icon">path<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<p>Inherited from <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#path">path</a></p>
+						<ul>
+							<li>Defined in types.d.ts:129</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+					<a name="type" class="tsd-anchor"></a>
+					<h3>type</h3>
+					<div class="tsd-signature tsd-kind-icon">type<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"get"</span></div>
+					<aside class="tsd-sources">
+						<p>Overrides <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#type">type</a></p>
+						<ul>
+							<li>Defined in types.d.ts:141</li>
+						</ul>
+					</aside>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+								<a href="_types_d_.getmessage.html#data" class="tsd-kind-icon">data</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+								<a href="_types_d_.getmessage.html#id" class="tsd-kind-icon">id</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+								<a href="_types_d_.getmessage.html#path" class="tsd-kind-icon">path</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+								<a href="_types_d_.getmessage.html#type" class="tsd-kind-icon">type</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.initresult.html b/docs/interfaces/_types_d_.initresult.html
new file mode 100644
index 0000000..089dccb
--- /dev/null
+++ b/docs/interfaces/_types_d_.initresult.html
@@ -0,0 +1,258 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>InitResult | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.initresult.html">InitResult</a>
+				</li>
+			</ul>
+			<h1>Interface InitResult</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Results of initialiazing protocol</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<span class="target">InitResult</span>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.initresult.html#timeout" class="tsd-kind-icon">timeout</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="timeout" class="tsd-anchor"></a>
+					<h3>timeout</h3>
+					<div class="tsd-signature tsd-kind-icon">timeout<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:187</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Session timeout in seconds</p>
+						</div>
+					</div>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.initresult.html#timeout" class="tsd-kind-icon">timeout</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.mqttrequest.html b/docs/interfaces/_types_d_.mqttrequest.html
new file mode 100644
index 0000000..bc068ec
--- /dev/null
+++ b/docs/interfaces/_types_d_.mqttrequest.html
@@ -0,0 +1,277 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>MQTTRequest | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.mqttrequest.html">MQTTRequest</a>
+				</li>
+			</ul>
+			<h1>Interface MQTTRequest</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Mqtt message structure</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<span class="target">MQTTRequest</span>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.mqttrequest.html#data" class="tsd-kind-icon">data</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.mqttrequest.html#id" class="tsd-kind-icon">id</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="data" class="tsd-anchor"></a>
+					<h3>data</h3>
+					<div class="tsd-signature tsd-kind-icon">data<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:216</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Message data</p>
+						</div>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="id" class="tsd-anchor"></a>
+					<h3>id</h3>
+					<div class="tsd-signature tsd-kind-icon">id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:214</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Message id</p>
+						</div>
+					</div>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.mqttrequest.html#data" class="tsd-kind-icon">data</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.mqttrequest.html#id" class="tsd-kind-icon">id</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.operatemessage.html b/docs/interfaces/_types_d_.operatemessage.html
new file mode 100644
index 0000000..7c84baf
--- /dev/null
+++ b/docs/interfaces/_types_d_.operatemessage.html
@@ -0,0 +1,304 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>OperateMessage | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.operatemessage.html">OperateMessage</a>
+				</li>
+			</ul>
+			<h1>Interface OperateMessage</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Operate Message</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<a href="_types_d_.basemessage.html" class="tsd-signature-type">BaseMessage</a>
+						<ul class="tsd-hierarchy">
+							<li>
+								<span class="target">OperateMessage</span>
+							</li>
+						</ul>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite"><a href="_types_d_.operatemessage.html#data" class="tsd-kind-icon">data</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="_types_d_.operatemessage.html#id" class="tsd-kind-icon">id</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="_types_d_.operatemessage.html#path" class="tsd-kind-icon">path</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite"><a href="_types_d_.operatemessage.html#type" class="tsd-kind-icon">type</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+					<a name="data" class="tsd-anchor"></a>
+					<h3>data</h3>
+					<div class="tsd-signature tsd-kind-icon">data<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">JSValue</span></div>
+					<aside class="tsd-sources">
+						<p>Overrides <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#data">data</a></p>
+						<ul>
+							<li>Defined in types.d.ts:154</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+					<a name="id" class="tsd-anchor"></a>
+					<h3>id</h3>
+					<div class="tsd-signature tsd-kind-icon">id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<p>Inherited from <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#id">id</a></p>
+						<ul>
+							<li>Defined in types.d.ts:127</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+					<a name="path" class="tsd-anchor"></a>
+					<h3>path</h3>
+					<div class="tsd-signature tsd-kind-icon">path<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<p>Inherited from <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#path">path</a></p>
+						<ul>
+							<li>Defined in types.d.ts:129</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+					<a name="type" class="tsd-anchor"></a>
+					<h3>type</h3>
+					<div class="tsd-signature tsd-kind-icon">type<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"operate"</span></div>
+					<aside class="tsd-sources">
+						<p>Overrides <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#type">type</a></p>
+						<ul>
+							<li>Defined in types.d.ts:153</li>
+						</ul>
+					</aside>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+								<a href="_types_d_.operatemessage.html#data" class="tsd-kind-icon">data</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+								<a href="_types_d_.operatemessage.html#id" class="tsd-kind-icon">id</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+								<a href="_types_d_.operatemessage.html#path" class="tsd-kind-icon">path</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+								<a href="_types_d_.operatemessage.html#type" class="tsd-kind-icon">type</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.protocol.html b/docs/interfaces/_types_d_.protocol.html
new file mode 100644
index 0000000..28018e3
--- /dev/null
+++ b/docs/interfaces/_types_d_.protocol.html
@@ -0,0 +1,403 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>Protocol | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.protocol.html">Protocol</a>
+				</li>
+			</ul>
+			<h1>Interface Protocol</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Protocol interface</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<span class="target">Protocol</span>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.protocol.html#close" class="tsd-kind-icon">close</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.protocol.html#encode" class="tsd-kind-icon">encode</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.protocol.html#init" class="tsd-kind-icon">init</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.protocol.html#send" class="tsd-kind-icon">send</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="close" class="tsd-anchor"></a>
+					<h3>close</h3>
+					<div class="tsd-signature tsd-kind-icon">close<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:195</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Close connection</p>
+						</div>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="encode" class="tsd-anchor"></a>
+					<h3>encode</h3>
+					<div class="tsd-signature tsd-kind-icon">encode<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>command<span class="tsd-signature-symbol">: </span><a href="../modules/_types_d_.html#commandtype" class="tsd-signature-type">CommandType</a>, args<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.encodeargs.html" class="tsd-signature-type">EncodeArgs</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-symbol">{ </span>data<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:199</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Encode message</p>
+						</div>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>command<span class="tsd-signature-symbol">: </span><a href="../modules/_types_d_.html#commandtype" class="tsd-signature-type">CommandType</a>, args<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.encodeargs.html" class="tsd-signature-type">EncodeArgs</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>data<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-parameters-title">Parameters</h4>
+										<ul class="tsd-parameters">
+											<li>
+												<h5>command: <a href="../modules/_types_d_.html#commandtype" class="tsd-signature-type">CommandType</a></h5>
+											</li>
+											<li>
+												<h5>args: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.encodeargs.html" class="tsd-signature-type">EncodeArgs</a><span class="tsd-signature-symbol">&gt;</span></h5>
+											</li>
+										</ul>
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">{ </span>data<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span></h4>
+										<ul class="tsd-parameters">
+											<li class="tsd-parameter">
+												<h5>data<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5>
+											</li>
+											<li class="tsd-parameter">
+												<h5>id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5>
+											</li>
+										</ul>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="init" class="tsd-anchor"></a>
+					<h3>init</h3>
+					<div class="tsd-signature tsd-kind-icon">init<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.initresult.html" class="tsd-signature-type">InitResult</a><span class="tsd-signature-symbol">&gt;</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:193</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Initialize protocol</p>
+						</div>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.initresult.html" class="tsd-signature-type">InitResult</a><span class="tsd-signature-symbol">&gt;</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.initresult.html" class="tsd-signature-type">InitResult</a><span class="tsd-signature-symbol">&gt;</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="send" class="tsd-anchor"></a>
+					<h3>send</h3>
+					<div class="tsd-signature tsd-kind-icon">send<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>__namedParameters<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>any<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">void</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:197</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Send message</p>
+						</div>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>__namedParameters<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>any<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-parameters-title">Parameters</h4>
+										<ul class="tsd-parameters">
+											<li>
+												<h5>__namedParameters: <span class="tsd-signature-symbol">{ </span>any<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol"> }</span></h5>
+												<ul class="tsd-parameters">
+													<li class="tsd-parameter">
+														<h5>any<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5>
+													</li>
+												</ul>
+											</li>
+										</ul>
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.protocol.html#close" class="tsd-kind-icon">close</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.protocol.html#encode" class="tsd-kind-icon">encode</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.protocol.html#init" class="tsd-kind-icon">init</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.protocol.html#send" class="tsd-kind-icon">send</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.protocolargs.html b/docs/interfaces/_types_d_.protocolargs.html
new file mode 100644
index 0000000..79ab668
--- /dev/null
+++ b/docs/interfaces/_types_d_.protocolargs.html
@@ -0,0 +1,309 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>ProtocolArgs | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.protocolargs.html">ProtocolArgs</a>
+				</li>
+			</ul>
+			<h1>Interface ProtocolArgs</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Protocol event handlers</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<span class="target">ProtocolArgs</span>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.protocolargs.html#onerror" class="tsd-kind-icon">on<wbr>Error</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.protocolargs.html#onmessage" class="tsd-kind-icon">on<wbr>Message</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="onerror" class="tsd-anchor"></a>
+					<h3>on<wbr>Error</h3>
+					<div class="tsd-signature tsd-kind-icon">on<wbr>Error<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>err<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">void</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:181</li>
+						</ul>
+					</aside>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>err<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-parameters-title">Parameters</h4>
+										<ul class="tsd-parameters">
+											<li>
+												<h5>err: <span class="tsd-signature-type">any</span></h5>
+											</li>
+										</ul>
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="onmessage" class="tsd-anchor"></a>
+					<h3>on<wbr>Message</h3>
+					<div class="tsd-signature tsd-kind-icon">on<wbr>Message<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>msg<span class="tsd-signature-symbol">: </span><a href="../modules/_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">void</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:180</li>
+						</ul>
+					</aside>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>msg<span class="tsd-signature-symbol">: </span><a href="../modules/_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-parameters-title">Parameters</h4>
+										<ul class="tsd-parameters">
+											<li>
+												<h5>msg: <a href="../modules/_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a></h5>
+											</li>
+										</ul>
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.protocolargs.html#onerror" class="tsd-kind-icon">on<wbr>Error</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.protocolargs.html#onmessage" class="tsd-kind-icon">on<wbr>Message</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.protocolevents.html b/docs/interfaces/_types_d_.protocolevents.html
new file mode 100644
index 0000000..02fa867
--- /dev/null
+++ b/docs/interfaces/_types_d_.protocolevents.html
@@ -0,0 +1,279 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>ProtocolEvents | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.protocolevents.html">ProtocolEvents</a>
+				</li>
+			</ul>
+			<h1>Interface ProtocolEvents</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Protocol event handlers</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<span class="target">ProtocolEvents</span>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface"><a href="_types_d_.protocolevents.html#onmessage" class="tsd-kind-icon">on<wbr>Message</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
+					<a name="onmessage" class="tsd-anchor"></a>
+					<h3>on<wbr>Message</h3>
+					<div class="tsd-signature tsd-kind-icon">on<wbr>Message<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>resp<span class="tsd-signature-symbol">: </span><a href="../modules/_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">void</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:208</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Handler for message event</p>
+						</div>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-property">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>resp<span class="tsd-signature-symbol">: </span><a href="../modules/_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-parameters-title">Parameters</h4>
+										<ul class="tsd-parameters">
+											<li>
+												<h5>resp: <a href="../modules/_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a></h5>
+											</li>
+										</ul>
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface">
+								<a href="_types_d_.protocolevents.html#onmessage" class="tsd-kind-icon">on<wbr>Message</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/interfaces/_types_d_.setmessage.html b/docs/interfaces/_types_d_.setmessage.html
new file mode 100644
index 0000000..7c17d6b
--- /dev/null
+++ b/docs/interfaces/_types_d_.setmessage.html
@@ -0,0 +1,312 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>SetMessage | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+				<li>
+					<a href="_types_d_.setmessage.html">SetMessage</a>
+				</li>
+			</ul>
+			<h1>Interface SetMessage</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel tsd-comment">
+				<div class="tsd-comment tsd-typography">
+					<div class="lead">
+						<p>Set Message</p>
+					</div>
+				</div>
+			</section>
+			<section class="tsd-panel tsd-hierarchy">
+				<h3>Hierarchy</h3>
+				<ul class="tsd-hierarchy">
+					<li>
+						<a href="_types_d_.basemessage.html" class="tsd-signature-type">BaseMessage</a>
+						<ul class="tsd-hierarchy">
+							<li>
+								<span class="target">SetMessage</span>
+							</li>
+						</ul>
+					</li>
+				</ul>
+			</section>
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Properties</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite"><a href="_types_d_.setmessage.html#data" class="tsd-kind-icon">data</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="_types_d_.setmessage.html#id" class="tsd-kind-icon">id</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-inherited"><a href="_types_d_.setmessage.html#path" class="tsd-kind-icon">path</a></li>
+								<li class="tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite"><a href="_types_d_.setmessage.html#type" class="tsd-kind-icon">type</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Properties</h2>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+					<a name="data" class="tsd-anchor"></a>
+					<h3>data</h3>
+					<div class="tsd-signature tsd-kind-icon">data<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>updated<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">true</span><span class="tsd-signature-symbol"> }</span></div>
+					<aside class="tsd-sources">
+						<p>Overrides <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#data">data</a></p>
+						<ul>
+							<li>Defined in types.d.ts:147</li>
+						</ul>
+					</aside>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter">
+								<h5>updated<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">true</span></h5>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+					<a name="id" class="tsd-anchor"></a>
+					<h3>id</h3>
+					<div class="tsd-signature tsd-kind-icon">id<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<p>Inherited from <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#id">id</a></p>
+						<ul>
+							<li>Defined in types.d.ts:127</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+					<a name="path" class="tsd-anchor"></a>
+					<h3>path</h3>
+					<div class="tsd-signature tsd-kind-icon">path<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
+					<aside class="tsd-sources">
+						<p>Inherited from <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#path">path</a></p>
+						<ul>
+							<li>Defined in types.d.ts:129</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+					<a name="type" class="tsd-anchor"></a>
+					<h3>type</h3>
+					<div class="tsd-signature tsd-kind-icon">type<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"set"</span></div>
+					<aside class="tsd-sources">
+						<p>Overrides <a href="_types_d_.basemessage.html">BaseMessage</a>.<a href="_types_d_.basemessage.html#type">type</a></p>
+						<ul>
+							<li>Defined in types.d.ts:146</li>
+						</ul>
+					</aside>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="../modules/_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="../modules/_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+				</ul>
+				<ul class="current">
+					<li class="current tsd-kind-interface tsd-parent-kind-module">
+						<a href="_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+						<ul>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+								<a href="_types_d_.setmessage.html#data" class="tsd-kind-icon">data</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+								<a href="_types_d_.setmessage.html#id" class="tsd-kind-icon">id</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-inherited">
+								<a href="_types_d_.setmessage.html#path" class="tsd-kind-icon">path</a>
+							</li>
+							<li class=" tsd-kind-property tsd-parent-kind-interface tsd-is-overwrite">
+								<a href="_types_d_.setmessage.html#type" class="tsd-kind-icon">type</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				<ul class="after-current">
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="../modules/_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/modules/_config_.html b/docs/modules/_config_.html
new file mode 100644
index 0000000..0c3548d
--- /dev/null
+++ b/docs/modules/_config_.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>&quot;config&quot; | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="_config_.html">&quot;config&quot;</a>
+				</li>
+			</ul>
+			<h1>Module &quot;config&quot;</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/modules/_index_.html b/docs/modules/_index_.html
new file mode 100644
index 0000000..28578f5
--- /dev/null
+++ b/docs/modules/_index_.html
@@ -0,0 +1,734 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>&quot;index&quot; | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="_index_.html">&quot;index&quot;</a>
+				</li>
+			</ul>
+			<h1>Module &quot;index&quot;</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section tsd-is-not-exported">
+							<h3>Variables</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#commandswithreturnvalue" class="tsd-kind-icon">commands<wbr>With<wbr>Return<wbr>Value</a></li>
+							</ul>
+						</section>
+						<section class="tsd-index-section tsd-is-not-exported">
+							<h3>Functions</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#adddot" class="tsd-kind-icon">add<wbr>Dot</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#connect" class="tsd-kind-icon">connect</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#decode" class="tsd-kind-icon">decode</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#handlesend" class="tsd-kind-icon">handle<wbr>Send</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#iserror" class="tsd-kind-icon">is<wbr>Error</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#ispromiseresult" class="tsd-kind-icon">is<wbr>Promise<wbr>Result</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#isreference" class="tsd-kind-icon">is<wbr>Reference</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#makeadd" class="tsd-kind-icon">make<wbr>Add</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#makedel" class="tsd-kind-icon">make<wbr>Del</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#makeget" class="tsd-kind-icon">make<wbr>Get</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#makeoperate" class="tsd-kind-icon">make<wbr>Operate</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#makeset" class="tsd-kind-icon">make<wbr>Set</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#resolvereferences" class="tsd-kind-icon">resolve<wbr>References</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#splitreference" class="tsd-kind-icon">split<wbr>Reference</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#throwerror" class="tsd-kind-icon">throw<wbr>Error</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_index_.html#throwmsgerror" class="tsd-kind-icon">throw<wbr>Msg<wbr>Error</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group tsd-is-not-exported">
+				<h2>Variables</h2>
+				<section class="tsd-panel tsd-member tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported">
+					<a name="commandswithreturnvalue" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> commands<wbr>With<wbr>Return<wbr>Value</h3>
+					<div class="tsd-signature tsd-kind-icon">commands<wbr>With<wbr>Return<wbr>Value<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> = [&quot;get&quot;, &quot;operate&quot;, &quot;add&quot;]</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in index.ts:87</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Set of commands which have a return value</p>
+						</div>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group tsd-is-not-exported">
+				<h2>Functions</h2>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="adddot" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> add<wbr>Dot</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">add<wbr>Dot<span class="tsd-signature-symbol">(</span>s<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:9</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Add dot to the end of a string if it does not have one</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>s: <span class="tsd-signature-type">string</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="connect" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> connect</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">connect<span class="tsd-signature-symbol">(</span>opts<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">IClientOptions</span>, events<span class="tsd-signature-symbol">?: </span><a href="../interfaces/_types_d_.connectevents.html" class="tsd-signature-type">ConnectEvents</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/_types_d_.device.html" class="tsd-signature-type">Device</a><span class="tsd-signature-symbol">&gt;</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:159</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Connect to device</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>opts: <span class="tsd-signature-type">IClientOptions</span></h5>
+									<div class="tsd-comment tsd-typography">
+										<div class="lead">
+											<p>Connection options</p>
+										</div>
+									</div>
+								</li>
+								<li>
+									<h5><span class="tsd-flag ts-flagDefault value">Default value</span> events: <a href="../interfaces/_types_d_.connectevents.html" class="tsd-signature-type">ConnectEvents</a><span class="tsd-signature-symbol"> = {}</span></h5>
+									<div class="tsd-comment tsd-typography">
+										<div class="lead">
+											<p>Optional event handlers</p>
+										</div>
+									</div>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/_types_d_.device.html" class="tsd-signature-type">Device</a><span class="tsd-signature-symbol">&gt;</span></h4>
+							<p>A set of functions for interacting with the device</p>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="decode" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> decode</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">decode<span class="tsd-signature-symbol">(</span>msg<span class="tsd-signature-symbol">: </span><a href="_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">void</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:92</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Transform USPMessage to expected response type</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>msg: <a href="_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <a href="_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">void</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="handlesend" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> handle<wbr>Send</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">handle<wbr>Send<span class="tsd-signature-symbol">(</span>msg<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a><span class="tsd-signature-symbol">&gt;</span>, path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">false</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">true</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol"> | </span><a href="_types_d_.html#jsobject" class="tsd-signature-type">JSObject</a><span class="tsd-signature-symbol">&gt;</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:99</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Wrapper function for sending message (decode message and catch errors)</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>msg: <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a><span class="tsd-signature-symbol">&gt;</span></h5>
+								</li>
+								<li>
+									<h5>path: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">false</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">true</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol"> | </span><a href="_types_d_.html#jsobject" class="tsd-signature-type">JSObject</a><span class="tsd-signature-symbol">&gt;</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="iserror" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> is<wbr>Error</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">is<wbr>Error<span class="tsd-signature-symbol">(</span>resp<span class="tsd-signature-symbol">: </span><a href="_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">resp</span><span class="tsd-signature-symbol"> is </span><span class="tsd-signature-type">ErrorMessage</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:75</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Checks if response is an ErrorMessage</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>resp: <a href="_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">resp</span><span class="tsd-signature-symbol"> is </span><span class="tsd-signature-type">ErrorMessage</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="ispromiseresult" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> is<wbr>Promise<wbr>Result</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">is<wbr>Promise<wbr>Result<span class="tsd-signature-symbol">(</span>res<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">res</span><span class="tsd-signature-symbol"> is </span><span class="tsd-signature-type">PromiseResult</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:81</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Checks if value is of type PromiseResult</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>res: <span class="tsd-signature-type">any</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">res</span><span class="tsd-signature-symbol"> is </span><span class="tsd-signature-type">PromiseResult</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="isreference" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> is<wbr>Reference</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">is<wbr>Reference<span class="tsd-signature-symbol">(</span>s<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">boolean</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:70</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Checks if string is reference</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>s: <span class="tsd-signature-type">string</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="makeadd" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> make<wbr>Add</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">make<wbr>Add<span class="tsd-signature-symbol">(</span>send<span class="tsd-signature-symbol">: </span><a href="_types_d_.html#sendfn" class="tsd-signature-type">SendFn</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">(Anonymous function)</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:126</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Make add function</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>send: <a href="_types_d_.html#sendfn" class="tsd-signature-type">SendFn</a></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">(Anonymous function)</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="makedel" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> make<wbr>Del</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">make<wbr>Del<span class="tsd-signature-symbol">(</span>send<span class="tsd-signature-symbol">: </span><a href="_types_d_.html#sendfn" class="tsd-signature-type">SendFn</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">(Anonymous function)</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:132</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Make del function</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>send: <a href="_types_d_.html#sendfn" class="tsd-signature-type">SendFn</a></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">(Anonymous function)</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="makeget" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> make<wbr>Get</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">make<wbr>Get<span class="tsd-signature-symbol">(</span>send<span class="tsd-signature-symbol">: </span><a href="_types_d_.html#sendfn" class="tsd-signature-type">SendFn</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">(Anonymous function)</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:105</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Make get function</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>send: <a href="_types_d_.html#sendfn" class="tsd-signature-type">SendFn</a></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">(Anonymous function)</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="makeoperate" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> make<wbr>Operate</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">make<wbr>Operate<span class="tsd-signature-symbol">(</span>send<span class="tsd-signature-symbol">: </span><a href="_types_d_.html#sendfn" class="tsd-signature-type">SendFn</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">(Anonymous function)</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:141</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Make operate function</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>send: <a href="_types_d_.html#sendfn" class="tsd-signature-type">SendFn</a></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">(Anonymous function)</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="makeset" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> make<wbr>Set</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">make<wbr>Set<span class="tsd-signature-symbol">(</span>send<span class="tsd-signature-symbol">: </span><a href="_types_d_.html#sendfn" class="tsd-signature-type">SendFn</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">(Anonymous function)</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:114</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Make set function</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>send: <a href="_types_d_.html#sendfn" class="tsd-signature-type">SendFn</a></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">(Anonymous function)</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="resolvereferences" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> resolve<wbr>References</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">resolve<wbr>References<span class="tsd-signature-symbol">(</span>msg<span class="tsd-signature-symbol">: </span><a href="_types_d_.html#jstype" class="tsd-signature-type">JSType</a>, get<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span>paths<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span>, level<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:22</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Resolve references in message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>msg: <a href="_types_d_.html#jstype" class="tsd-signature-type">JSType</a></h5>
+									<div class="tsd-comment tsd-typography">
+										<div class="lead">
+											<p>Message containing reference</p>
+										</div>
+									</div>
+								</li>
+								<li>
+									<h5>get: <span class="tsd-signature-symbol">(</span>paths<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span></h5>
+									<div class="tsd-comment tsd-typography">
+										<div class="lead">
+											<p>Function to retrieve value given reference</p>
+										</div>
+									</div>
+									<ul class="tsd-parameters">
+										<li class="tsd-parameter-signature">
+											<ul class="tsd-signatures tsd-kind-type-literal tsd-is-not-exported">
+												<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>paths<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span></li>
+											</ul>
+											<ul class="tsd-descriptions">
+												<li class="tsd-description">
+													<h4 class="tsd-parameters-title">Parameters</h4>
+													<ul class="tsd-parameters">
+														<li>
+															<h5>paths: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5>
+														</li>
+													</ul>
+													<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span></h4>
+												</li>
+											</ul>
+										</li>
+									</ul>
+								</li>
+								<li>
+									<h5>level: <span class="tsd-signature-type">number</span></h5>
+									<div class="tsd-comment tsd-typography">
+										<div class="lead">
+											<p>Number of nest levels to resolve</p>
+										</div>
+									</div>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.html#jstype" class="tsd-signature-type">JSType</a><span class="tsd-signature-symbol">&gt;</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="splitreference" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> split<wbr>Reference</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">split<wbr>Reference<span class="tsd-signature-symbol">(</span>s<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:14</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Split reference string</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>s: <span class="tsd-signature-type">string</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="throwerror" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> throw<wbr>Error</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">throw<wbr>Error<span class="tsd-signature-symbol">(</span>reason<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:60</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Shorthand for throwing generic error</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>reason: <span class="tsd-signature-type">any</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="throwmsgerror" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> throw<wbr>Msg<wbr>Error</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">throw<wbr>Msg<wbr>Error<span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">(Anonymous function)</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in index.ts:47</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Shorthand for throwing message-related error</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>path: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">(Anonymous function)</span></h4>
+						</li>
+					</ul>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#commandswithreturnvalue" class="tsd-kind-icon">commands<wbr>With<wbr>Return<wbr>Value</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#adddot" class="tsd-kind-icon">add<wbr>Dot</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#connect" class="tsd-kind-icon">connect</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#decode" class="tsd-kind-icon">decode</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#handlesend" class="tsd-kind-icon">handle<wbr>Send</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#iserror" class="tsd-kind-icon">is<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#ispromiseresult" class="tsd-kind-icon">is<wbr>Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#isreference" class="tsd-kind-icon">is<wbr>Reference</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#makeadd" class="tsd-kind-icon">make<wbr>Add</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#makedel" class="tsd-kind-icon">make<wbr>Del</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#makeget" class="tsd-kind-icon">make<wbr>Get</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#makeoperate" class="tsd-kind-icon">make<wbr>Operate</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#makeset" class="tsd-kind-icon">make<wbr>Set</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#resolvereferences" class="tsd-kind-icon">resolve<wbr>References</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#splitreference" class="tsd-kind-icon">split<wbr>Reference</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#throwerror" class="tsd-kind-icon">throw<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_index_.html#throwmsgerror" class="tsd-kind-icon">throw<wbr>Msg<wbr>Error</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/modules/_lib_.html b/docs/modules/_lib_.html
new file mode 100644
index 0000000..ebc0403
--- /dev/null
+++ b/docs/modules/_lib_.html
@@ -0,0 +1,310 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>&quot;lib&quot; | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="_lib_.html">&quot;lib&quot;</a>
+				</li>
+			</ul>
+			<h1>Module &quot;lib&quot;</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Functions</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_lib_.html#looptimer" class="tsd-kind-icon">loop<wbr>Timer</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_lib_.html#makerouter" class="tsd-kind-icon">make<wbr>Router</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_lib_.html#timer" class="tsd-kind-icon">timer</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Functions</h2>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="looptimer" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> loop<wbr>Timer</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">loop<wbr>Timer<span class="tsd-signature-symbol">(</span>ms<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span>, callback<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">restart</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in lib.ts:15</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Creates a looping timer that executes the callback unless the returned function is called</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>ms: <span class="tsd-signature-type">number</span></h5>
+								</li>
+								<li>
+									<h5>callback: <span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">void</span></h5>
+									<ul class="tsd-parameters">
+										<li class="tsd-parameter-signature">
+											<ul class="tsd-signatures tsd-kind-type-literal">
+												<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li>
+											</ul>
+											<ul class="tsd-descriptions">
+												<li class="tsd-description">
+													<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
+												</li>
+											</ul>
+										</li>
+									</ul>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">restart</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="makerouter" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> make<wbr>Router</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">make<wbr>Router<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>add<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>get<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol"> }</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in lib.ts:27</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Makes a router for storing resolve/reject for a message</p>
+								</div>
+							</div>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">{ </span>add<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>get<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol"> }</span></h4>
+							<ul class="tsd-parameters">
+								<li class="tsd-parameter">
+									<h5>add<span class="tsd-signature-symbol">: </span>function</h5>
+									<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-type-literal">
+										<li class="tsd-signature tsd-kind-icon">add<span class="tsd-signature-symbol">(</span>id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, data<span class="tsd-signature-symbol">: </span><a href="_types_d_.html#promiseresult" class="tsd-signature-type">PromiseResult</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li>
+									</ul>
+									<ul class="tsd-descriptions">
+										<li class="tsd-description">
+											<aside class="tsd-sources">
+												<ul>
+													<li>Defined in lib.ts:35</li>
+												</ul>
+											</aside>
+											<h4 class="tsd-parameters-title">Parameters</h4>
+											<ul class="tsd-parameters">
+												<li>
+													<h5>id: <span class="tsd-signature-type">string</span></h5>
+												</li>
+												<li>
+													<h5>data: <a href="_types_d_.html#promiseresult" class="tsd-signature-type">PromiseResult</a></h5>
+												</li>
+											</ul>
+											<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
+										</li>
+									</ul>
+								</li>
+								<li class="tsd-parameter">
+									<h5>get<span class="tsd-signature-symbol">: </span>function</h5>
+									<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-type-literal">
+										<li class="tsd-signature tsd-kind-icon">get<span class="tsd-signature-symbol">(</span>id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{}</span></li>
+									</ul>
+									<ul class="tsd-descriptions">
+										<li class="tsd-description">
+											<aside class="tsd-sources">
+												<ul>
+													<li>Defined in lib.ts:30</li>
+												</ul>
+											</aside>
+											<h4 class="tsd-parameters-title">Parameters</h4>
+											<ul class="tsd-parameters">
+												<li>
+													<h5>id: <span class="tsd-signature-type">string</span></h5>
+												</li>
+											</ul>
+											<h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">{}</span></h4>
+											<ul class="tsd-parameters">
+											</ul>
+										</li>
+									</ul>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="timer" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> timer</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">timer<span class="tsd-signature-symbol">(</span>ms<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span>, callback<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">stop</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in lib.ts:4</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Creates a timer that exectues the callback unless the returned function is used</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>ms: <span class="tsd-signature-type">number</span></h5>
+								</li>
+								<li>
+									<h5>callback: <span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">void</span></h5>
+									<ul class="tsd-parameters">
+										<li class="tsd-parameter-signature">
+											<ul class="tsd-signatures tsd-kind-type-literal">
+												<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span></li>
+											</ul>
+											<ul class="tsd-descriptions">
+												<li class="tsd-description">
+													<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
+												</li>
+											</ul>
+										</li>
+									</ul>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">stop</span></h4>
+						</li>
+					</ul>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_lib_.html#looptimer" class="tsd-kind-icon">loop<wbr>Timer</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_lib_.html#makerouter" class="tsd-kind-icon">make<wbr>Router</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_lib_.html#timer" class="tsd-kind-icon">timer</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/modules/_protocol_index_.html b/docs/modules/_protocol_index_.html
new file mode 100644
index 0000000..6af1984
--- /dev/null
+++ b/docs/modules/_protocol_index_.html
@@ -0,0 +1,520 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>&quot;protocol/index&quot; | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="_protocol_index_.html">&quot;protocol/index&quot;</a>
+				</li>
+			</ul>
+			<h1>Module &quot;protocol/index&quot;</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Functions</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_protocol_index_.html#connect" class="tsd-kind-icon">connect</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_index_.html#decode" class="tsd-kind-icon">decode</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_index_.html#decodeget" class="tsd-kind-icon">decode<wbr>Get</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_index_.html#encode" class="tsd-kind-icon">encode</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_index_.html#encodeadd" class="tsd-kind-icon">encode<wbr>Add</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_index_.html#encodedelete" class="tsd-kind-icon">encode<wbr>Delete</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_index_.html#encodeget" class="tsd-kind-icon">encode<wbr>Get</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_index_.html#encodeoperate" class="tsd-kind-icon">encode<wbr>Operate</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_index_.html#encodeset" class="tsd-kind-icon">encode<wbr>Set</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_index_.html#extracttype" class="tsd-kind-icon">extract<wbr>Type</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_protocol_index_.html#mqtt" class="tsd-kind-icon">mqtt</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Functions</h2>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="connect" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> connect</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">connect<span class="tsd-signature-symbol">(</span>opts<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">IClientOptions</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">AsyncMqttClient</span><span class="tsd-signature-symbol">&gt;</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/index.ts:152</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Connect to device</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>opts: <span class="tsd-signature-type">IClientOptions</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">AsyncMqttClient</span><span class="tsd-signature-symbol">&gt;</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="decode" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> decode</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">decode<span class="tsd-signature-symbol">(</span>rawMsg<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/index.ts:72</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Decode message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>rawMsg: <span class="tsd-signature-type">any</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <a href="_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="decodeget" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> decode<wbr>Get</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">decode<wbr>Get<span class="tsd-signature-symbol">(</span>msg<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span>, id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../interfaces/_types_d_.getmessage.html" class="tsd-signature-type">GetMessage</a></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/index.ts:56</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Decode get message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>msg: <span class="tsd-signature-type">any</span></h5>
+								</li>
+								<li>
+									<h5>id: <span class="tsd-signature-type">string</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <a href="../interfaces/_types_d_.getmessage.html" class="tsd-signature-type">GetMessage</a></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="encode" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> encode</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">encode<span class="tsd-signature-symbol">(</span>command<span class="tsd-signature-symbol">: </span><a href="_types_d_.html#commandtype" class="tsd-signature-type">CommandType</a>, args<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/_types_d_.encodeargs.html" class="tsd-signature-type">EncodeArgs</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>data<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/index.ts:133</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Encode message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>command: <a href="_types_d_.html#commandtype" class="tsd-signature-type">CommandType</a></h5>
+								</li>
+								<li>
+									<h5>args: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/_types_d_.encodeargs.html" class="tsd-signature-type">EncodeArgs</a><span class="tsd-signature-symbol">&gt;</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">{ </span>data<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span></h4>
+							<ul class="tsd-parameters">
+								<li class="tsd-parameter">
+									<h5>data<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5>
+								</li>
+								<li class="tsd-parameter">
+									<h5>id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5>
+								</li>
+							</ul>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="encodeadd" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> encode<wbr>Add</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">encode<wbr>Add<span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, input<span class="tsd-signature-symbol">?: </span><a href="_types_d_.html#jsobject" class="tsd-signature-type">JSObject</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../interfaces/_types_d_.mqttrequest.html" class="tsd-signature-type">MQTTRequest</a></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/index.ts:114</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Encode add message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>path: <span class="tsd-signature-type">string</span></h5>
+								</li>
+								<li>
+									<h5><span class="tsd-flag ts-flagOptional">Optional</span> input: <a href="_types_d_.html#jsobject" class="tsd-signature-type">JSObject</a></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <a href="../interfaces/_types_d_.mqttrequest.html" class="tsd-signature-type">MQTTRequest</a></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="encodedelete" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> encode<wbr>Delete</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">encode<wbr>Delete<span class="tsd-signature-symbol">(</span>paths<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../interfaces/_types_d_.mqttrequest.html" class="tsd-signature-type">MQTTRequest</a></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/index.ts:124</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Encode delete message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>paths: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <a href="../interfaces/_types_d_.mqttrequest.html" class="tsd-signature-type">MQTTRequest</a></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="encodeget" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> encode<wbr>Get</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">encode<wbr>Get<span class="tsd-signature-symbol">(</span>paths<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../interfaces/_types_d_.mqttrequest.html" class="tsd-signature-type">MQTTRequest</a></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/index.ts:6</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Encode get message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>paths: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <a href="../interfaces/_types_d_.mqttrequest.html" class="tsd-signature-type">MQTTRequest</a></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="encodeoperate" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> encode<wbr>Operate</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">encode<wbr>Operate<span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, action<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, input<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">object</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../interfaces/_types_d_.mqttrequest.html" class="tsd-signature-type">MQTTRequest</a></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/index.ts:36</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Encode operate message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>path: <span class="tsd-signature-type">string</span></h5>
+								</li>
+								<li>
+									<h5>action: <span class="tsd-signature-type">string</span></h5>
+								</li>
+								<li>
+									<h5><span class="tsd-flag ts-flagOptional">Optional</span> input: <span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">object</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <a href="../interfaces/_types_d_.mqttrequest.html" class="tsd-signature-type">MQTTRequest</a></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="encodeset" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> encode<wbr>Set</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">encode<wbr>Set<span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, value<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../interfaces/_types_d_.mqttrequest.html" class="tsd-signature-type">MQTTRequest</a></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/index.ts:15</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Encode set message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>path: <span class="tsd-signature-type">string</span></h5>
+								</li>
+								<li>
+									<h5>value: <span class="tsd-signature-type">any</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <a href="../interfaces/_types_d_.mqttrequest.html" class="tsd-signature-type">MQTTRequest</a></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="extracttype" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> extract<wbr>Type</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">extract<wbr>Type<span class="tsd-signature-symbol">(</span>msg<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="_types_d_.html#messagetype" class="tsd-signature-type">MessageType</a></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/index.ts:49</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Extract message type</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>msg: <span class="tsd-signature-type">any</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <a href="_types_d_.html#messagetype" class="tsd-signature-type">MessageType</a></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="mqtt" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> mqtt</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">mqtt<span class="tsd-signature-symbol">(</span>opts<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">IClientOptions</span>, events<span class="tsd-signature-symbol">: </span><a href="../interfaces/_types_d_.protocolevents.html" class="tsd-signature-type">ProtocolEvents</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../interfaces/_types_d_.protocol.html" class="tsd-signature-type">Protocol</a></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/index.ts:161</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Generate mqtt protocol</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>opts: <span class="tsd-signature-type">IClientOptions</span></h5>
+								</li>
+								<li>
+									<h5>events: <a href="../interfaces/_types_d_.protocolevents.html" class="tsd-signature-type">ProtocolEvents</a></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <a href="../interfaces/_types_d_.protocol.html" class="tsd-signature-type">Protocol</a></h4>
+						</li>
+					</ul>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_protocol_index_.html#connect" class="tsd-kind-icon">connect</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_index_.html#decode" class="tsd-kind-icon">decode</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_index_.html#decodeget" class="tsd-kind-icon">decode<wbr>Get</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_index_.html#encode" class="tsd-kind-icon">encode</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_index_.html#encodeadd" class="tsd-kind-icon">encode<wbr>Add</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_index_.html#encodedelete" class="tsd-kind-icon">encode<wbr>Delete</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_index_.html#encodeget" class="tsd-kind-icon">encode<wbr>Get</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_index_.html#encodeoperate" class="tsd-kind-icon">encode<wbr>Operate</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_index_.html#encodeset" class="tsd-kind-icon">encode<wbr>Set</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_index_.html#extracttype" class="tsd-kind-icon">extract<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_protocol_index_.html#mqtt" class="tsd-kind-icon">mqtt</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/modules/_protocol_js_usp_protobuf_protomessage_.html b/docs/modules/_protocol_js_usp_protobuf_protomessage_.html
new file mode 100644
index 0000000..6d22cee
--- /dev/null
+++ b/docs/modules/_protocol_js_usp_protobuf_protomessage_.html
@@ -0,0 +1,416 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>&quot;protocol/js-usp-protobuf/protoMessage&quot; | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-usp-protobuf/protoMessage&quot;</a>
+				</li>
+			</ul>
+			<h1>Module &quot;protocol/js-usp-protobuf/protoMessage&quot;</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section tsd-is-not-exported">
+							<h3>Variables</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_js_usp_protobuf_protomessage_.html#header" class="tsd-kind-icon">Header</a></li>
+								<li class="tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_js_usp_protobuf_protomessage_.html#rootmsg" class="tsd-kind-icon">root<wbr>Msg</a></li>
+								<li class="tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_js_usp_protobuf_protomessage_.html#rootrecord" class="tsd-kind-icon">root<wbr>Record</a></li>
+							</ul>
+						</section>
+						<section class="tsd-index-section ">
+							<h3>Functions</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_protocol_js_usp_protobuf_protomessage_.html#decode" class="tsd-kind-icon">decode</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_protocol_js_usp_protobuf_protomessage_.html#init" class="tsd-kind-icon">init</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_protocol_js_usp_protobuf_protomessage_.html#makeaddmessage" class="tsd-kind-icon">make<wbr>Add<wbr>Message</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_protocol_js_usp_protobuf_protomessage_.html#makedeletemessage" class="tsd-kind-icon">make<wbr>Delete<wbr>Message</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_protocol_js_usp_protobuf_protomessage_.html#makegetmessage" class="tsd-kind-icon">make<wbr>Get<wbr>Message</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_protocol_js_usp_protobuf_protomessage_.html#makeoperatemessage" class="tsd-kind-icon">make<wbr>Operate<wbr>Message</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_protocol_js_usp_protobuf_protomessage_.html#makesetmessage" class="tsd-kind-icon">make<wbr>Set<wbr>Message</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group tsd-is-not-exported">
+				<h2>Variables</h2>
+				<section class="tsd-panel tsd-member tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported">
+					<a name="header" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagLet">Let</span> Header</h3>
+					<div class="tsd-signature tsd-kind-icon">Header<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in protocol/js-usp-protobuf/protoMessage.ts:16</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported">
+					<a name="rootmsg" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagLet">Let</span> root<wbr>Msg</h3>
+					<div class="tsd-signature tsd-kind-icon">root<wbr>Msg<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in protocol/js-usp-protobuf/protoMessage.ts:15</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported">
+					<a name="rootrecord" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagLet">Let</span> root<wbr>Record</h3>
+					<div class="tsd-signature tsd-kind-icon">root<wbr>Record<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Root</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in protocol/js-usp-protobuf/protoMessage.ts:14</li>
+						</ul>
+					</aside>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Functions</h2>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="decode" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> decode</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">decode<span class="tsd-signature-symbol">(</span>message<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/js-usp-protobuf/protoMessage.ts:90</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Decode message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>message: <span class="tsd-signature-type">any</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">any</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="init" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> init</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">init<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/js-usp-protobuf/protoMessage.ts:19</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Initialize messages</p>
+								</div>
+							</div>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="makeaddmessage" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> make<wbr>Add<wbr>Message</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">make<wbr>Add<wbr>Message<span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, values<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/js-usp-protobuf/protoMessage.ts:59</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Make add message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>path: <span class="tsd-signature-type">string</span></h5>
+								</li>
+								<li>
+									<h5>values: <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="makedeletemessage" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> make<wbr>Delete<wbr>Message</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">make<wbr>Delete<wbr>Message<span class="tsd-signature-symbol">(</span>paths<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/js-usp-protobuf/protoMessage.ts:34</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Make delete message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>paths: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="makegetmessage" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> make<wbr>Get<wbr>Message</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">make<wbr>Get<wbr>Message<span class="tsd-signature-symbol">(</span>paths<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/js-usp-protobuf/protoMessage.ts:26</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Make get message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>paths: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="makeoperatemessage" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> make<wbr>Operate<wbr>Message</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">make<wbr>Operate<wbr>Message<span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, input<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">object</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/js-usp-protobuf/protoMessage.ts:72</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Make operate message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>path: <span class="tsd-signature-type">string</span></h5>
+								</li>
+								<li>
+									<h5><span class="tsd-flag ts-flagOptional">Optional</span> input: <span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">object</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="makesetmessage" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> make<wbr>Set<wbr>Message</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">make<wbr>Set<wbr>Message<span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span>, values<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/js-usp-protobuf/protoMessage.ts:46</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Make set message</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>path: <span class="tsd-signature-type">string</span></h5>
+								</li>
+								<li>
+									<h5>values: <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></h4>
+						</li>
+					</ul>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html#header" class="tsd-kind-icon">Header</a>
+					</li>
+					<li class=" tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html#rootmsg" class="tsd-kind-icon">root<wbr>Msg</a>
+					</li>
+					<li class=" tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html#rootrecord" class="tsd-kind-icon">root<wbr>Record</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html#decode" class="tsd-kind-icon">decode</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html#init" class="tsd-kind-icon">init</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html#makeaddmessage" class="tsd-kind-icon">make<wbr>Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html#makedeletemessage" class="tsd-kind-icon">make<wbr>Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html#makegetmessage" class="tsd-kind-icon">make<wbr>Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html#makeoperatemessage" class="tsd-kind-icon">make<wbr>Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html#makesetmessage" class="tsd-kind-icon">make<wbr>Set<wbr>Message</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/modules/_protocol_lib_.html b/docs/modules/_protocol_lib_.html
new file mode 100644
index 0000000..ac51604
--- /dev/null
+++ b/docs/modules/_protocol_lib_.html
@@ -0,0 +1,422 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>&quot;protocol/lib&quot; | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+				</li>
+			</ul>
+			<h1>Module &quot;protocol/lib&quot;</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section tsd-is-not-exported">
+							<h3>Variables</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_lib_.html#digitdotre" class="tsd-kind-icon">digit<wbr>Dot<wbr>Re</a></li>
+								<li class="tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_lib_.html#digitre" class="tsd-kind-icon">digit<wbr>Re</a></li>
+							</ul>
+						</section>
+						<section class="tsd-index-section ">
+							<h3>Functions</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_lib_.html#_searchall" class="tsd-kind-icon">_search<wbr>All</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_lib_.html#firstisindex" class="tsd-kind-icon">first<wbr>IsIndex</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module tsd-is-not-exported"><a href="_protocol_lib_.html#isdigit" class="tsd-kind-icon">is<wbr>Digit</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_protocol_lib_.html#search" class="tsd-kind-icon">search</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_protocol_lib_.html#searchall" class="tsd-kind-icon">search<wbr>All</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_protocol_lib_.html#unflatten" class="tsd-kind-icon">unflatten</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_protocol_lib_.html#unwraparray" class="tsd-kind-icon">unwrap<wbr>Array</a></li>
+								<li class="tsd-kind-function tsd-parent-kind-module"><a href="_protocol_lib_.html#unwrapobject" class="tsd-kind-icon">unwrap<wbr>Object</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group tsd-is-not-exported">
+				<h2>Variables</h2>
+				<section class="tsd-panel tsd-member tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported">
+					<a name="digitdotre" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> digit<wbr>Dot<wbr>Re</h3>
+					<div class="tsd-signature tsd-kind-icon">digit<wbr>Dot<wbr>Re<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">RegExp</span><span class="tsd-signature-symbol"> = /^\d+\..*$/</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in protocol/lib.ts:2</li>
+						</ul>
+					</aside>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported">
+					<a name="digitre" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> digit<wbr>Re</h3>
+					<div class="tsd-signature tsd-kind-icon">digit<wbr>Re<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">RegExp</span><span class="tsd-signature-symbol"> = /^\d+$/</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in protocol/lib.ts:1</li>
+						</ul>
+					</aside>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Functions</h2>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="_searchall" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> _search<wbr>All</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">_search<wbr>All<span class="tsd-signature-symbol">(</span>obj<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span>, key<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/lib.ts:37</li>
+								</ul>
+							</aside>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>obj: <span class="tsd-signature-type">any</span></h5>
+								</li>
+								<li>
+									<h5>key: <span class="tsd-signature-type">string</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="firstisindex" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> first<wbr>IsIndex</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">first<wbr>IsIndex<span class="tsd-signature-symbol">(</span>s<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">boolean</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/lib.ts:4</li>
+								</ul>
+							</aside>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>s: <span class="tsd-signature-type">string</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+					<a name="isdigit" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> is<wbr>Digit</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<li class="tsd-signature tsd-kind-icon">is<wbr>Digit<span class="tsd-signature-symbol">(</span>v<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">boolean</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/lib.ts:3</li>
+								</ul>
+							</aside>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>v: <span class="tsd-signature-type">any</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="search" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> search</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">search<span class="tsd-signature-symbol">(</span>obj<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span>, key<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/lib.ts:28</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Find first attribute which has the given key, undefined if not found</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>obj: <span class="tsd-signature-type">any</span></h5>
+								</li>
+								<li>
+									<h5>key: <span class="tsd-signature-type">string</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">any</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="searchall" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> search<wbr>All</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">search<wbr>All<span class="tsd-signature-symbol">(</span>obj<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span>, key<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/lib.ts:46</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Find all attributes which have the given key, empty array if none found</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>obj: <span class="tsd-signature-type">any</span></h5>
+								</li>
+								<li>
+									<h5>key: <span class="tsd-signature-type">string</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="unflatten" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> unflatten</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">unflatten<span class="tsd-signature-symbol">(</span>obj<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{}</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/lib.ts:7</li>
+								</ul>
+							</aside>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>obj: <span class="tsd-signature-type">any</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">{}</span></h4>
+							<ul class="tsd-parameters">
+							</ul>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="unwraparray" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> unwrap<wbr>Array</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">unwrap<wbr>Array<span class="tsd-signature-symbol">(</span>arr<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/lib.ts:58</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Unwraps array with single item</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>arr: <span class="tsd-signature-type">any</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">any</span></h4>
+						</li>
+					</ul>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-module">
+					<a name="unwrapobject" class="tsd-anchor"></a>
+					<h3><span class="tsd-flag ts-flagConst">Const</span> unwrap<wbr>Object</h3>
+					<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module">
+						<li class="tsd-signature tsd-kind-icon">unwrap<wbr>Object<span class="tsd-signature-symbol">(</span>data<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></li>
+					</ul>
+					<ul class="tsd-descriptions">
+						<li class="tsd-description">
+							<aside class="tsd-sources">
+								<ul>
+									<li>Defined in protocol/lib.ts:50</li>
+								</ul>
+							</aside>
+							<div class="tsd-comment tsd-typography">
+								<div class="lead">
+									<p>Unwraps object with single key</p>
+								</div>
+							</div>
+							<h4 class="tsd-parameters-title">Parameters</h4>
+							<ul class="tsd-parameters">
+								<li>
+									<h5>data: <span class="tsd-signature-type">any</span></h5>
+								</li>
+							</ul>
+							<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">any</span></h4>
+						</li>
+					</ul>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_lib_.html#digitdotre" class="tsd-kind-icon">digit<wbr>Dot<wbr>Re</a>
+					</li>
+					<li class=" tsd-kind-variable tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_lib_.html#digitre" class="tsd-kind-icon">digit<wbr>Re</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_lib_.html#_searchall" class="tsd-kind-icon">_search<wbr>All</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_lib_.html#firstisindex" class="tsd-kind-icon">first<wbr>IsIndex</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module tsd-is-not-exported">
+						<a href="_protocol_lib_.html#isdigit" class="tsd-kind-icon">is<wbr>Digit</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_protocol_lib_.html#search" class="tsd-kind-icon">search</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_protocol_lib_.html#searchall" class="tsd-kind-icon">search<wbr>All</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_protocol_lib_.html#unflatten" class="tsd-kind-icon">unflatten</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_protocol_lib_.html#unwraparray" class="tsd-kind-icon">unwrap<wbr>Array</a>
+					</li>
+					<li class=" tsd-kind-function tsd-parent-kind-module">
+						<a href="_protocol_lib_.html#unwrapobject" class="tsd-kind-icon">unwrap<wbr>Object</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/modules/_types_d_.html b/docs/modules/_types_d_.html
new file mode 100644
index 0000000..dab8a37
--- /dev/null
+++ b/docs/modules/_types_d_.html
@@ -0,0 +1,422 @@
+<!doctype html>
+<html class="default no-js">
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>&quot;types.d&quot; | usp-js</title>
+	<meta name="description" content="Documentation for usp-js">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	<link rel="stylesheet" href="../assets/css/main.css">
+</head>
+<body>
+<header>
+	<div class="tsd-page-toolbar">
+		<div class="container">
+			<div class="table-wrap">
+				<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
+					<div class="field">
+						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
+						<input id="tsd-search-field" type="text" />
+					</div>
+					<ul class="results">
+						<li class="state loading">Preparing search index...</li>
+						<li class="state failure">The search index is not available</li>
+					</ul>
+					<a href="../index.html" class="title">usp-js</a>
+				</div>
+				<div class="table-cell" id="tsd-widgets">
+					<div id="tsd-filter">
+						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
+						<div class="tsd-filter-group">
+							<div class="tsd-select" id="tsd-filter-visibility">
+								<span class="tsd-select-label">All</span>
+								<ul class="tsd-select-list">
+									<li data-value="public">Public</li>
+									<li data-value="protected">Public/Protected</li>
+									<li data-value="private" class="selected">All</li>
+								</ul>
+							</div>
+							<input type="checkbox" id="tsd-filter-inherited" checked />
+							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
+							<input type="checkbox" id="tsd-filter-externals" checked />
+							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
+							<input type="checkbox" id="tsd-filter-only-exported" />
+							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
+						</div>
+					</div>
+					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="tsd-page-title">
+		<div class="container">
+			<ul class="tsd-breadcrumb">
+				<li>
+					<a href="../globals.html">Globals</a>
+				</li>
+				<li>
+					<a href="_types_d_.html">&quot;types.d&quot;</a>
+				</li>
+			</ul>
+			<h1>Module &quot;types.d&quot;</h1>
+		</div>
+	</div>
+</header>
+<div class="container container-main">
+	<div class="row">
+		<div class="col-8 col-content">
+			<section class="tsd-panel-group tsd-index-group">
+				<h2>Index</h2>
+				<section class="tsd-panel tsd-index-panel">
+					<div class="tsd-index-content">
+						<section class="tsd-index-section ">
+							<h3>Interfaces</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.device.html" class="tsd-kind-icon">Device</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a></li>
+								<li class="tsd-kind-interface tsd-parent-kind-module"><a href="../interfaces/_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a></li>
+							</ul>
+						</section>
+						<section class="tsd-index-section ">
+							<h3>Type aliases</h3>
+							<ul class="tsd-index-list">
+								<li class="tsd-kind-type-alias tsd-parent-kind-module"><a href="_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a></li>
+								<li class="tsd-kind-type-alias tsd-parent-kind-module"><a href="_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a></li>
+								<li class="tsd-kind-type-alias tsd-parent-kind-module"><a href="_types_d_.html#jstype" class="tsd-kind-icon">JSType</a></li>
+								<li class="tsd-kind-type-alias tsd-parent-kind-module"><a href="_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a></li>
+								<li class="tsd-kind-type-alias tsd-parent-kind-module"><a href="_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a></li>
+								<li class="tsd-kind-type-alias tsd-parent-kind-module"><a href="_types_d_.html#role" class="tsd-kind-icon">Role</a></li>
+								<li class="tsd-kind-type-alias tsd-parent-kind-module"><a href="_types_d_.html#router" class="tsd-kind-icon">Router</a></li>
+								<li class="tsd-kind-type-alias tsd-parent-kind-module"><a href="_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a></li>
+								<li class="tsd-kind-type-alias tsd-parent-kind-module"><a href="_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a></li>
+							</ul>
+						</section>
+					</div>
+				</section>
+			</section>
+			<section class="tsd-panel-group tsd-member-group ">
+				<h2>Type aliases</h2>
+				<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-module">
+					<a name="commandtype" class="tsd-anchor"></a>
+					<h3>Command<wbr>Type</h3>
+					<div class="tsd-signature tsd-kind-icon">Command<wbr>Type<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"get"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"set"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"operate"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"add"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"delete"</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:114</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>USP Commands</p>
+						</div>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-module">
+					<a name="jsobject" class="tsd-anchor"></a>
+					<h3>JSObject</h3>
+					<div class="tsd-signature tsd-kind-icon">JSObject<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{}</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:112</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Representation of JS object</p>
+						</div>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-index-signature">
+								<h5><span class="tsd-signature-symbol">[</span>key: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]: </span><a href="_types_d_.html#jstype" class="tsd-signature-type">JSType</a></h5>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-module">
+					<a name="jstype" class="tsd-anchor"></a>
+					<h3>JSType</h3>
+					<div class="tsd-signature tsd-kind-icon">JSType<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><a href="_types_d_.html#jsobject" class="tsd-signature-type">JSObject</a></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:118</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Represents js types</p>
+						</div>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-module">
+					<a name="messagetype" class="tsd-anchor"></a>
+					<h3>Message<wbr>Type</h3>
+					<div class="tsd-signature tsd-kind-icon">Message<wbr>Type<span class="tsd-signature-symbol">:</span> <a href="_types_d_.html#commandtype" class="tsd-signature-type">CommandType</a><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"error"</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:116</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Message types</p>
+						</div>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-module">
+					<a name="promiseresult" class="tsd-anchor"></a>
+					<h3>Promise<wbr>Result</h3>
+					<div class="tsd-signature tsd-kind-icon">Promise<wbr>Result<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>reject<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">; </span>resolve<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol"> }</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:2</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Stores promise resolve and reject responses</p>
+						</div>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter">
+								<h5>reject<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5>
+							</li>
+							<li class="tsd-parameter">
+								<h5>resolve<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span></h5>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-module">
+					<a name="role" class="tsd-anchor"></a>
+					<h3>Role</h3>
+					<div class="tsd-signature tsd-kind-icon">Role<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"admin"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"user"</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">"none"</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:110</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Session role</p>
+						</div>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-module">
+					<a name="router" class="tsd-anchor"></a>
+					<h3>Router</h3>
+					<div class="tsd-signature tsd-kind-icon">Router<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Map</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><a href="_types_d_.html#promiseresult" class="tsd-signature-type">PromiseResult</a><span class="tsd-signature-symbol">&gt;</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:4</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Routes messages</p>
+						</div>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-module">
+					<a name="sendfn" class="tsd-anchor"></a>
+					<h3>Send<wbr>Fn</h3>
+					<div class="tsd-signature tsd-kind-icon">Send<wbr>Fn<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>command<span class="tsd-signature-symbol">: </span><a href="_types_d_.html#commandtype" class="tsd-signature-type">CommandType</a>, args<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/_types_d_.encodeargs.html" class="tsd-signature-type">EncodeArgs</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a><span class="tsd-signature-symbol">&gt;</span></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:6</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Send Function</p>
+						</div>
+					</div>
+					<div class="tsd-type-declaration">
+						<h4>Type declaration</h4>
+						<ul class="tsd-parameters">
+							<li class="tsd-parameter-signature">
+								<ul class="tsd-signatures tsd-kind-type-literal tsd-parent-kind-type-alias">
+									<li class="tsd-signature tsd-kind-icon"><span class="tsd-signature-symbol">(</span>command<span class="tsd-signature-symbol">: </span><a href="_types_d_.html#commandtype" class="tsd-signature-type">CommandType</a>, args<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/_types_d_.encodeargs.html" class="tsd-signature-type">EncodeArgs</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a><span class="tsd-signature-symbol">&gt;</span></li>
+								</ul>
+								<ul class="tsd-descriptions">
+									<li class="tsd-description">
+										<h4 class="tsd-parameters-title">Parameters</h4>
+										<ul class="tsd-parameters">
+											<li>
+												<h5>command: <a href="_types_d_.html#commandtype" class="tsd-signature-type">CommandType</a></h5>
+											</li>
+											<li>
+												<h5>args: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/_types_d_.encodeargs.html" class="tsd-signature-type">EncodeArgs</a><span class="tsd-signature-symbol">&gt;</span></h5>
+											</li>
+										</ul>
+										<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="_types_d_.html#uspmessage" class="tsd-signature-type">USPMessage</a><span class="tsd-signature-symbol">&gt;</span></h4>
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</div>
+				</section>
+				<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-module">
+					<a name="uspmessage" class="tsd-anchor"></a>
+					<h3>USPMessage</h3>
+					<div class="tsd-signature tsd-kind-icon">USPMessage<span class="tsd-signature-symbol">:</span> <a href="../interfaces/_types_d_.getmessage.html" class="tsd-signature-type">GetMessage</a><span class="tsd-signature-symbol"> | </span><a href="../interfaces/_types_d_.setmessage.html" class="tsd-signature-type">SetMessage</a><span class="tsd-signature-symbol"> | </span><a href="../interfaces/_types_d_.operatemessage.html" class="tsd-signature-type">OperateMessage</a><span class="tsd-signature-symbol"> | </span><a href="../interfaces/_types_d_.addmessage.html" class="tsd-signature-type">AddMessage</a><span class="tsd-signature-symbol"> | </span><a href="../interfaces/_types_d_.deletemessage.html" class="tsd-signature-type">DeleteMessage</a><span class="tsd-signature-symbol"> | </span><a href="../interfaces/_types_d_.errormessage.html" class="tsd-signature-type">ErrorMessage</a></div>
+					<aside class="tsd-sources">
+						<ul>
+							<li>Defined in types.d.ts:170</li>
+						</ul>
+					</aside>
+					<div class="tsd-comment tsd-typography">
+						<div class="lead">
+							<p>Union of Messages</p>
+						</div>
+					</div>
+				</section>
+			</section>
+		</div>
+		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
+			<nav class="tsd-navigation primary">
+				<ul>
+					<li class="globals  ">
+						<a href="../globals.html"><em>Globals</em></a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_index_.html">&quot;index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_lib_.html">&quot;lib&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_index_.html">&quot;protocol/index&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_js_usp_protobuf_protomessage_.html">&quot;protocol/js-<wbr>usp-<wbr>protobuf/proto<wbr>Message&quot;</a>
+					</li>
+					<li class=" tsd-kind-module">
+						<a href="_protocol_lib_.html">&quot;protocol/lib&quot;</a>
+					</li>
+					<li class="current tsd-kind-module">
+						<a href="_types_d_.html">&quot;types.d&quot;</a>
+					</li>
+				</ul>
+			</nav>
+			<nav class="tsd-navigation secondary menu-sticky">
+				<ul class="before-current">
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.addmessage.html" class="tsd-kind-icon">Add<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.basemessage.html" class="tsd-kind-icon">Base<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.connectevents.html" class="tsd-kind-icon">Connect<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.deletemessage.html" class="tsd-kind-icon">Delete<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.device.html" class="tsd-kind-icon">Device</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.deviceerror.html" class="tsd-kind-icon">Device<wbr>Error</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.encodeargs.html" class="tsd-kind-icon">Encode<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.errormessage.html" class="tsd-kind-icon">Error<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.getmessage.html" class="tsd-kind-icon">Get<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.initresult.html" class="tsd-kind-icon">Init<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.mqttrequest.html" class="tsd-kind-icon">MQTTRequest</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.operatemessage.html" class="tsd-kind-icon">Operate<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.protocol.html" class="tsd-kind-icon">Protocol</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.protocolargs.html" class="tsd-kind-icon">Protocol<wbr>Args</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.protocolevents.html" class="tsd-kind-icon">Protocol<wbr>Events</a>
+					</li>
+					<li class=" tsd-kind-interface tsd-parent-kind-module">
+						<a href="../interfaces/_types_d_.setmessage.html" class="tsd-kind-icon">Set<wbr>Message</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="_types_d_.html#commandtype" class="tsd-kind-icon">Command<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="_types_d_.html#jsobject" class="tsd-kind-icon">JSObject</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="_types_d_.html#jstype" class="tsd-kind-icon">JSType</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="_types_d_.html#messagetype" class="tsd-kind-icon">Message<wbr>Type</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="_types_d_.html#promiseresult" class="tsd-kind-icon">Promise<wbr>Result</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="_types_d_.html#role" class="tsd-kind-icon">Role</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="_types_d_.html#router" class="tsd-kind-icon">Router</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="_types_d_.html#sendfn" class="tsd-kind-icon">Send<wbr>Fn</a>
+					</li>
+					<li class=" tsd-kind-type-alias tsd-parent-kind-module">
+						<a href="_types_d_.html#uspmessage" class="tsd-kind-icon">USPMessage</a>
+					</li>
+				</ul>
+			</nav>
+		</div>
+	</div>
+</div>
+<footer class="with-border-bottom">
+	<div class="container">
+		<h2>Legend</h2>
+		<div class="tsd-legend-group">
+			<ul class="tsd-legend">
+				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
+				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
+				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
+			</ul>
+			<ul class="tsd-legend">
+				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
+			</ul>
+		</div>
+	</div>
+</footer>
+<div class="container tsd-generator">
+	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
+</div>
+<div class="overlay"></div>
+<script src="../assets/js/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index b889821..35cccd9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
 {
   "name": "usp-js",
-  "version": "0.0.1",
+  "version": "0.0.4",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
@@ -1759,6 +1759,12 @@
       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
       "dev": true
     },
+    "at-least-node": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+      "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+      "dev": true
+    },
     "atob": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@@ -3861,6 +3867,18 @@
       "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
       "dev": true
     },
+    "fs-extra": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
+      "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
+      "dev": true,
+      "requires": {
+        "at-least-node": "^1.0.0",
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^1.0.0"
+      }
+    },
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -4025,6 +4043,19 @@
       "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
       "dev": true
     },
+    "handlebars": {
+      "version": "4.7.6",
+      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz",
+      "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.5",
+        "neo-async": "^2.6.0",
+        "source-map": "^0.6.1",
+        "uglify-js": "^3.1.4",
+        "wordwrap": "^1.0.0"
+      }
+    },
     "har-schema": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
@@ -4175,6 +4206,12 @@
       "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
       "dev": true
     },
+    "highlight.js": {
+      "version": "10.4.1",
+      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.4.1.tgz",
+      "integrity": "sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg==",
+      "dev": true
+    },
     "hmac-drbg": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
@@ -4363,6 +4400,12 @@
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
     },
+    "interpret": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+      "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+      "dev": true
+    },
     "is-absolute": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
@@ -4796,6 +4839,24 @@
         "minimist": "^1.2.0"
       }
     },
+    "jsonfile": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.6",
+        "universalify": "^2.0.0"
+      },
+      "dependencies": {
+        "universalify": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+          "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+          "dev": true
+        }
+      }
+    },
     "jsprim": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
@@ -4882,6 +4943,21 @@
       "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
       "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
     },
+    "lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "requires": {
+        "yallist": "^4.0.0"
+      }
+    },
+    "lunr": {
+      "version": "2.3.9",
+      "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
+      "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
+      "dev": true
+    },
     "magic-string": {
       "version": "0.22.5",
       "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
@@ -4906,6 +4982,12 @@
         "object-visit": "^1.0.0"
       }
     },
+    "marked": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.7.tgz",
+      "integrity": "sha512-No11hFYcXr/zkBvL6qFmAp1z6BKY3zqLMHny/JN/ey+al7qwCM2+CMBL9BOgqMxZU36fz4cCWfn2poWIf7QRXA==",
+      "dev": true
+    },
     "md5.js": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
@@ -5255,6 +5337,12 @@
         "to-regex": "^3.0.1"
       }
     },
+    "neo-async": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+      "dev": true
+    },
     "nice-try": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
@@ -6750,6 +6838,12 @@
       "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
       "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
     },
+    "progress": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+      "dev": true
+    },
     "protobufjs": {
       "version": "6.10.2",
       "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.2.tgz",
@@ -7011,6 +7105,15 @@
         "picomatch": "^2.2.1"
       }
     },
+    "rechoir": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+      "dev": true,
+      "requires": {
+        "resolve": "^1.1.6"
+      }
+    },
     "regenerate": {
       "version": "1.4.2",
       "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
@@ -7431,6 +7534,17 @@
       "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
       "dev": true
     },
+    "shelljs": {
+      "version": "0.8.4",
+      "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz",
+      "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.0.0",
+        "interpret": "^1.0.0",
+        "rechoir": "^0.6.2"
+      }
+    },
     "signal-exit": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
@@ -8256,12 +8370,55 @@
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
       "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
     },
+    "typedoc": {
+      "version": "0.19.2",
+      "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.19.2.tgz",
+      "integrity": "sha512-oDEg1BLEzi1qvgdQXc658EYgJ5qJLVSeZ0hQ57Eq4JXy6Vj2VX4RVo18qYxRWz75ifAaYuYNBUCnbhjd37TfOg==",
+      "dev": true,
+      "requires": {
+        "fs-extra": "^9.0.1",
+        "handlebars": "^4.7.6",
+        "highlight.js": "^10.2.0",
+        "lodash": "^4.17.20",
+        "lunr": "^2.3.9",
+        "marked": "^1.1.1",
+        "minimatch": "^3.0.0",
+        "progress": "^2.0.3",
+        "semver": "^7.3.2",
+        "shelljs": "^0.8.4",
+        "typedoc-default-themes": "^0.11.4"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "7.3.4",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
+          "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        }
+      }
+    },
+    "typedoc-default-themes": {
+      "version": "0.11.4",
+      "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.11.4.tgz",
+      "integrity": "sha512-Y4Lf+qIb9NTydrexlazAM46SSLrmrQRqWiD52593g53SsmUFioAsMWt8m834J6qsp+7wHRjxCXSZeiiW5cMUdw==",
+      "dev": true
+    },
     "typescript": {
       "version": "4.1.3",
       "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz",
       "integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==",
       "dev": true
     },
+    "uglify-js": {
+      "version": "3.12.1",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.1.tgz",
+      "integrity": "sha512-o8lHP20KjIiQe5b/67Rh68xEGRrc2SRsCuuoYclXXoC74AfSRGblU1HKzJWH3HxPZ+Ort85fWHpSX7KwBUC9CQ==",
+      "dev": true,
+      "optional": true
+    },
     "unc-path-regex": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
@@ -8374,6 +8531,12 @@
         "through2-filter": "^3.0.0"
       }
     },
+    "universalify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
+      "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
+      "dev": true
+    },
     "unquote": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
@@ -8658,6 +8821,12 @@
       "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
       "dev": true
     },
+    "wordwrap": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+      "dev": true
+    },
     "workerpool": {
       "version": "6.0.2",
       "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz",
@@ -8760,6 +8929,12 @@
       "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
       "dev": true
     },
+    "yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
     "yargs": {
       "version": "13.3.2",
       "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
diff --git a/package.json b/package.json
index 786ba82..c045979 100644
--- a/package.json
+++ b/package.json
@@ -8,7 +8,8 @@
     "build": "tsc --outDir build",
     "test": "mocha tests/unit",
     "test:device": "mocha tests/integration",
-    "prepublish": "npm run build"
+    "docs": "npx typedoc",
+    "prepublishOnly": "npm run build && npm run docs"
   },
   "keywords": [],
   "author": "Marin Karamihalev <marin.karamihalev@iopsys.eu> (http://iopsys.eu)",
@@ -20,6 +21,7 @@
   "devDependencies": {
     "mocha": "^8.2.1",
     "parcel-bundler": "^1.12.4",
+    "typedoc": "^0.19.2",
     "typescript": "^4.0.5"
   },
   "type": "commonjs",
diff --git a/src/index.ts b/src/index.ts
index 7d13209..ae8ca63 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -3,11 +3,21 @@ import config from "./config.json";
 import mqttAsync from "async-mqtt";
 import { makeRouter, timer, loopTimer } from "./lib";
 
+/**
+ * Add dot to the end of a string if it does not have one
+ */
 const addDot = (s: string) => (s.endsWith(".") ? s : s + ".");
+
+/**
+ * Split reference string
+ */
 const splitReference = (s: string) => s.split(",");
 
-/*
- * Resolves references in message
+/**
+ * Resolve references in message
+ * @param msg Message containing reference
+ * @param get Function to retrieve value given reference
+ * @param level Number of nest levels to resolve
  */
 const resolveReferences = async (
   msg: JSType,
@@ -31,6 +41,9 @@ const resolveReferences = async (
   return msg;
 };
 
+/**
+ * Shorthand for throwing message-related error
+ */
 const throwMsgError = (path: string | string[]) => ({
   data: { reason },
 }: ErrorMessage) => {
@@ -41,6 +54,9 @@ const throwMsgError = (path: string | string[]) => ({
   } as DeviceError;
 };
 
+/**
+ * Shorthand for throwing generic error
+ */
 const throwError = (reason: any): void => {
   throw {
     type: "error",
@@ -48,29 +64,53 @@ const throwError = (reason: any): void => {
   } as DeviceError;
 };
 
+/**
+ * Checks if string is reference
+ */
 const isReference = (s: string): boolean => s.startsWith("Device.");
 
+/**
+ * Checks if response is an ErrorMessage
+ */
 const isError = (resp: USPMessage): resp is ErrorMessage =>
   resp.type === "error";
 
+/**
+ * Checks if value is of type PromiseResult
+ */
 const isPromiseResult = (res: any): res is PromiseResult =>
   typeof res === "object" && "resolve" in res;
 
+/**
+ * Set of commands which have a return value
+ */
 const commandsWithReturnValue = ["get", "operate", "add"];
 
+/**
+ * Transform USPMessage to expected response type
+ */
 const decode = (msg: USPMessage): JSType | void => {
   if (commandsWithReturnValue.includes(msg.type)) return msg.data;
 };
 
+/**
+ * Wrapper function for sending message (decode message and catch errors)
+ */
 const handleSend = (msg: Promise<USPMessage>, path: string | string[]) =>
   msg.then(decode).catch(throwMsgError(path));
 
+/**
+ * Make get function
+ */
 const makeGet = (send: SendFn) => (path: string | string[]) =>
   handleSend(
     send("get", Array.isArray(path) ? { paths: path } : { path }),
     path
   ) as Promise<JSType>;
 
+/**
+ * Make set function
+ */
 const makeSet = (send: SendFn) => (path: string, value: JSType) =>
   handleSend(
     send("set", {
@@ -80,15 +120,24 @@ const makeSet = (send: SendFn) => (path: string, value: JSType) =>
     path
   ) as Promise<void>;
 
+/**
+ * Make add function
+ */
 const makeAdd = (send: SendFn) => (path: string, input?: JSObject) =>
   handleSend(send("add", { path, input }), path) as Promise<string>;
 
+/**
+ * Make del function
+ */
 const makeDel = (send: SendFn) => (path: string | string[]) =>
   handleSend(
     send("delete", Array.isArray(path) ? { paths: path } : { path }),
     path
   ) as Promise<void>;
 
+/**
+ * Make operate function
+ */
 const makeOperate = (send: SendFn) => (path: string, input?: JSObject) => {
   const action = path.split(".").pop() || "";
   return handleSend(
@@ -101,8 +150,11 @@ const makeOperate = (send: SendFn) => (path: string, input?: JSObject) => {
   ) as Promise<JSType>;
 };
 
-/*
+/**
  * Connect to device
+ * @param opts - Connection options
+ * @param events - Optional event handlers
+ * @returns A set of functions for interacting with the device
  */
 const connect = async (
   opts: mqttAsync.IClientOptions,
@@ -131,7 +183,7 @@ const connect = async (
     },
   });
 
-  /*
+  /**
    * Send message to device
    */
   const send: SendFn = (command, args) =>
@@ -175,4 +227,4 @@ const connect = async (
   };
 };
 
-export default connect;
\ No newline at end of file
+export default connect;
diff --git a/src/lib.ts b/src/lib.ts
index 77ab876..d85f9aa 100644
--- a/src/lib.ts
+++ b/src/lib.ts
@@ -1,4 +1,4 @@
-/*
+/**
  * Creates a timer that exectues the callback unless the returned function is used
  */
 export const timer = (ms: number, callback: () => void) => {
@@ -9,7 +9,7 @@ export const timer = (ms: number, callback: () => void) => {
   return stop;
 };
 
-/*
+/**
  * Creates a looping timer that executes the callback unless the returned function is called
  */
 export const loopTimer = (ms: number, callback: () => void) => {
@@ -21,7 +21,7 @@ export const loopTimer = (ms: number, callback: () => void) => {
   return restart;
 };
 
-/*
+/**
  * Makes a router for storing resolve/reject for a message
  */
 export const makeRouter = () => {
diff --git a/src/protocol/index.ts b/src/protocol/index.ts
index 5ce8e37..180b026 100644
--- a/src/protocol/index.ts
+++ b/src/protocol/index.ts
@@ -2,6 +2,7 @@ import mqttAsync from "async-mqtt";
 import * as messages from "./js-usp-protobuf/protoMessage";
 import { search, searchAll, unflatten, unwrapArray, unwrapObject } from "./lib";
 
+/** Encode get message */
 const encodeGet = (paths: string[]): MQTTRequest => {
   const [data, id] = messages.makeGetMessage(paths);
   return {
@@ -10,6 +11,7 @@ const encodeGet = (paths: string[]): MQTTRequest => {
   };
 };
 
+/** Encode set message */
 const encodeSet = (path: string, value: any): MQTTRequest => {
   if (typeof value !== "object") {
     const attr = path.split(".").pop() || "";
@@ -30,6 +32,7 @@ const encodeSet = (path: string, value: any): MQTTRequest => {
   };
 };
 
+/** Encode operate message */
 const encodeOperate = (
   path: string,
   action: string,
@@ -42,12 +45,14 @@ const encodeOperate = (
   };
 };
 
+/** Extract message type */
 const extractType = (msg: any): MessageType => {
   const msgType: string = search(msg, "msgType");
   const command = msgType.split("_")[0];
   return command ? (command.toLowerCase() as MessageType) : "get";
 };
 
+/** Decode get message */
 const decodeGet = (msg: any, id: string): GetMessage => {
   const resolvedPathResultsArr = searchAll(msg, "resolvedPathResults");
   const unflattened = resolvedPathResultsArr.map((v) =>
@@ -63,6 +68,7 @@ const decodeGet = (msg: any, id: string): GetMessage => {
   };
 };
 
+/** Decode message */
 const decode = (rawMsg: any): USPMessage => {
   const msg = JSON.parse(JSON.stringify(rawMsg)); // forces conversions
   const id = search(msg, "msgId");
@@ -104,6 +110,7 @@ const decode = (rawMsg: any): USPMessage => {
   return decodeGet(msg, id.toString());
 };
 
+/** Encode add message */
 const encodeAdd = (path: string, input?: JSObject): MQTTRequest => {
   const pairs = input ? Object.entries(input) : [];
   const [data, id] = messages.makeAddMessage(path, pairs);
@@ -113,6 +120,7 @@ const encodeAdd = (path: string, input?: JSObject): MQTTRequest => {
   };
 };
 
+/** Encode delete message */
 const encodeDelete = (paths: string[]): MQTTRequest => {
   const [data, id] = messages.makeDeleteMessage(paths);
   return {
@@ -121,6 +129,7 @@ const encodeDelete = (paths: string[]): MQTTRequest => {
   };
 };
 
+/** Encode message */
 const encode = (
   command: CommandType,
   args: Partial<EncodeArgs>
@@ -139,6 +148,7 @@ const encode = (
   }
 };
 
+/** Connect to device */
 const connect = async (opts: mqttAsync.IClientOptions) =>
   opts.protocol?.startsWith("ws")
     ? mqttAsync.connectAsync(
@@ -147,6 +157,7 @@ const connect = async (opts: mqttAsync.IClientOptions) =>
       )
     : mqttAsync.connectAsync(opts);
     
+/** Generate mqtt protocol */
 const mqtt = (
   opts: mqttAsync.IClientOptions,
   events: ProtocolEvents
diff --git a/src/protocol/js-usp-protobuf/protoMessage.ts b/src/protocol/js-usp-protobuf/protoMessage.ts
index 4aa24af..30020e0 100644
--- a/src/protocol/js-usp-protobuf/protoMessage.ts
+++ b/src/protocol/js-usp-protobuf/protoMessage.ts
@@ -15,12 +15,14 @@ let rootRecord: protobuf.Root;
 let rootMsg: any;
 let Header: any;
 
+/** Initialize messages */
 export const init = async () => {
   rootRecord = protobuf.Root.fromJSON(rootRecordJson);
   rootMsg = protobuf.Root.fromJSON(rootMsgJson);
   Header = rootMsg.lookupType("usp.Header");
 };
 
+/** Make get message */
 export const makeGetMessage = (paths: string[]) => {
   const getMessage = createGetRequestMessage(rootMsg, paths);
   const [bufferGetMsg, id] = createMsg(rootMsg, getMessage, Header.MsgType.GET);
@@ -28,6 +30,7 @@ export const makeGetMessage = (paths: string[]) => {
   return [bufferGetRecord, id];
 };
 
+/** Make delete message */
 export const makeDeleteMessage = (paths: string[]) => {
   const deleteMessage = createDeleteRequestMessage(rootMsg, paths);
   const [bufferDeleteMsg, id] = createMsg(
@@ -39,6 +42,7 @@ export const makeDeleteMessage = (paths: string[]) => {
   return [bufferDeleteRecord, id];
 };
 
+/** Make set message */
 export const makeSetMessage = (path: string, values: any[]) => {
   const setMessage = createChangeRequestMessage(
     rootMsg,
@@ -51,6 +55,7 @@ export const makeSetMessage = (path: string, values: any[]) => {
   return [bufferSetRecord, id];
 };
 
+/** Make add message */
 export const makeAddMessage = (path: string, values: any[]) => {
   const addMessage = createChangeRequestMessage(
     rootMsg,
@@ -63,6 +68,7 @@ export const makeAddMessage = (path: string, values: any[]) => {
   return [bufferSetRecord, id];
 };
 
+/** Make operate message */
 export const makeOperateMessage = (path: string, input?: object) => {
   const operateMessage = createOperateRequestMessage(
     rootMsg,
@@ -80,6 +86,7 @@ export const makeOperateMessage = (path: string, input?: object) => {
   return [bufferOperateRecord, id];
 };
 
+/** Decode message */
 export const decode = (message: any) => {
   const record = rootRecord.lookupType("usp_record.Record");
   const decodedRecord: any = record.decode(message);
diff --git a/src/protocol/lib.ts b/src/protocol/lib.ts
index c41abfb..08dc8fe 100644
--- a/src/protocol/lib.ts
+++ b/src/protocol/lib.ts
@@ -3,7 +3,7 @@ const digitDotRe = /^\d+\..*$/;
 const isDigit = (v: any) => digitRe.test(v);
 const firstIsIndex = (s: string) => digitDotRe.test(s);
 
-// Source: https://www.30secondsofcode.org/js/s/unflatten-object
+// Based on: https://www.30secondsofcode.org/js/s/unflatten-object
 export const unflatten = (obj: any) =>
   Object.keys(obj).reduce(
     (res, k) => {
@@ -24,6 +24,7 @@ export const unflatten = (obj: any) =>
     firstIsIndex(Object.keys(obj)[0]) ? [] : {}
   );
 
+/** Find first attribute which has the given key, undefined if not found */
 export const search = (obj: any, key: string): any => {
   if (typeof obj !== "object") return null;
   if (obj[key]) return obj[key];
@@ -41,9 +42,11 @@ const _searchAll = (obj: any, key: string): any[] =>
         [] as any[]
       );
 
+/** Find all attributes which have the given key, empty array if none found */
 export const searchAll = (obj: any, key: string) =>
   _searchAll(obj, key).flat(Infinity);
 
+/** Unwraps object with single key */
 export const unwrapObject = (data: any): any =>
   !Array.isArray(data) &&
   typeof data === "object" &&
@@ -51,5 +54,6 @@ export const unwrapObject = (data: any): any =>
     ? Object.values(data)[0]
     : data;
 
+/** Unwraps array with single item */
 export const unwrapArray = (arr: any) =>
   Array.isArray(arr) && arr.length === 1 ? arr[0] : arr;
diff --git a/src/testy.ts b/src/testy.ts
index e86d7a7..15c6df1 100644
--- a/src/testy.ts
+++ b/src/testy.ts
@@ -1,4 +1,4 @@
-const connect = require("./index").default;
+import connect from "./index"
 
 const run = async () => {
   const device = await connect({
@@ -19,29 +19,29 @@ const run = async () => {
   console.log(" >>> ADD RESPONSE <<<");
   console.log(JSON.stringify(addResp, null, 2));
 
-  // const setResp = await device.set("Device.NAT.PortMapping.1.", {
-  //   "Description": "webserver1-set",
-  //   "ExternalPort": "80",
-  //   "Protocol": "TCP",
-  //   "Interface": "Device.IP.Interface.1",
-  //   "Enable": "0",
-  //   "InternalClient": "192.168.2.125",
-  //   "InternalPort": "5000"
-  // }).catch(console.error)
-  // console.log(' >>> SET RESPONSE <<<')
-  // console.log(JSON.stringify(setResp, null, 2))
+  const setResp = await device.set("Device.NAT.PortMapping.1.", {
+    "Description": "webserver1-set",
+    "ExternalPort": "80",
+    "Protocol": "TCP",
+    "Interface": "Device.IP.Interface.1",
+    "Enable": "0",
+    "InternalClient": "192.168.2.125",
+    "InternalPort": "5000"
+  }).catch(console.error)
+  console.log(' >>> SET RESPONSE <<<')
+  console.log(JSON.stringify(setResp, null, 2))
 
   // const delResp = await device.del(["Device.NAT.PortMapping.2.", "Device.NAT.PortMapping.3."])
   // console.log(' >>> DEL RESPONSE <<<')
   // console.log(JSON.stringify(delResp, null, 2))
 
-  // const getResp = await device.get("Device.DeviceInfo.Description");
-  // console.log(" >>> GET RESPONSE <<<");
-  // console.log(JSON.stringify(getResp, null, 2));
+  const getResp = await device.get("Device.DeviceInfo.Description");
+  console.log(" >>> GET RESPONSE <<<");
+  console.log(JSON.stringify(getResp, null, 2));
 
-  // const oprResp = await device.operate("Device.IP.Diagnostics.IPPing()", { Host: "google.com" })
-  // console.log(' >>> OPR RESPONSE <<<')
-  // console.log(JSON.stringify(oprResp, null, 2))
+  const oprResp = await device.operate("Device.IP.Diagnostics.IPPing()", { Host: "google.com" })
+  console.log(' >>> OPR RESPONSE <<<')
+  console.log(JSON.stringify(oprResp, null, 2))
 
   await device.disconnect();
 };
diff --git a/src/types.d.ts b/src/types.d.ts
index 260e655..5e51ad9 100644
--- a/src/types.d.ts
+++ b/src/types.d.ts
@@ -1,46 +1,102 @@
+/** Stores promise resolve and reject responses  */
 type PromiseResult = { resolve; reject };
+/** Routes messages */
 type Router = Map<string, PromiseResult>;
-
-interface BaseConnectOptions {
-  host: string;
-  port: number;
-  protocol: string;
-  connectionTimeout?: number;
-}
-
-interface ConnectOptions extends BaseConnectOptions {
-  username: string;
-  password: string;
-  additionalConnectionOptions?: object;
-}
-
+/** Send Function */
 type SendFn = (
   command: CommandType,
   args: Partial<EncodeArgs>
 ) => Promise<USPMessage>;
 
-interface ReconnectOptions extends BaseConnectOptions {
-  sessionID: string;
-}
-
+/**
+ * Connection lifecycle event handlers
+ */
 interface ConnectEvents {
+  /** Handler for idle timeout */
   onTimeout?: () => void;
 }
-
+/** Device API */
 interface Device {
+  /** 
+   * Get value at path
+   * @param path Location of value (e.g. "Device.DeviceInfo.")
+   * ```
+   * await usp.get("Device.WiFi.Radio.1.")
+   * // or 
+   * await usp.get(["Device.WiFi.Radio.1.", "Device.WiFi.Radio.2."])
+   * ```
+   */
   get: (path: string | string[]) => Promise<JSType>;
+
+   /** 
+   * Set value at path
+   * @param path Location of value (e.g. "Device.DeviceInfo.")
+   * @param value Value to assign
+   * ```
+   * await usp.set("Device.WiFi.Radio.1.", { Name: "radio-1" })
+   * // or 
+   * await usp.set("Device.WiFi.Radio.1.Name", "radio-1")
+   * ```
+   */
   set: (path: string, value: JSType) => Promise<void>;
+
+  
+   /** 
+   * Execute a command
+   * @param path Full path of command (e.g. "Device.SelfTestDiagnostics()")
+   * @param input Optional input to the command
+   * ```
+   * await usp.operate("Device.SelfTestDiagnostics()")
+   * ```
+   */
   operate: (path: string, input?: JSObject) => Promise<JSType>;
+
+  /** 
+   * Add object to path
+   * @param path Path to add to (e.g. "Device.NAT.PortMapping.")
+   * @param values Optional object to add (if skipped will use default values)
+   * @returns Full path of new object
+   * ```
+   * await usp.add("Device.NAT.PortMapping.")
+   * ```
+   */
   add: (path: string, values?: JSObject) => Promise<string>;
+
+  /** 
+   * Delete object at path
+   * @param path Full path to delete (e.g. "Device.NAT.PortMapping.1.")
+   * ```
+   * await usp.del("Device.NAT.PortMapping.1.")
+   * ```
+   */
   del: (path: string | string[]) => Promise<void>;
 
+  /** 
+   * Resolve references in message
+   * @param msg Message with reference in it
+   * @param level Optional level of nesting to resolve to (avoid using high numbers)
+   * ```
+   * await usp.get("Device.WiFi.Radio.1.").then(device.resolve)
+   * ```
+   */
   resolve: (msg: JSType, level: number = 1) => Promise<JSType>;
+
+  /** 
+   * Disconenct from device
+   * ```
+   * await usp.disconnect()
+   * ```
+   */
   disconnect: () => Promise<void>;
 
+  /** Connection id */
   id: () => string;
+
+  /** Roles of current session */
   roles: () => Role[];
 }
 
+/** Arguments for encoding commands */
 interface EncodeArgs {
   path: string;
   paths: string[];
@@ -49,56 +105,59 @@ interface EncodeArgs {
   action: string;
 }
 
+/** Session role */
 type Role = "admin" | "user" | "none";
+/** Representation of JS object */
 type JSObject = { [key: string]: JSType };
-
+/** USP Commands */
 type CommandType = "get" | "set" | "operate" | "add" | "delete";
+/** Message types */
 type MessageType = CommandType | "error";
-
+/** Represents js types */
 type JSType = number | boolean | string | JSObject;
-
+/** User error message */
 interface DeviceError {
-  type: "error"
-  reason: string
-  path?: string
+  type: "error";
+  reason: string;
+  path?: string;
 }
-
+/** Base Message passed between protocol and api */
 interface BaseMessage {
   id: string;
   type: MessageType;
   path: string;
   data: {};
 }
-
+/** Error message */
 interface ErrorMessage extends BaseMessage {
   type: "error";
   data: {
     reason: string;
   };
 }
-
+/** Get Message */
 interface GetMessage extends BaseMessage {
   type: "get";
   data: JSType;
 }
-
+/** Set Message */
 interface SetMessage extends BaseMessage {
   type: "set";
   data: {
     updated: true;
   };
 }
-
+/** Operate Message */
 interface OperateMessage extends BaseMessage {
   type: "operate";
   data: JSValue;
 }
-
+/** Add Message */
 interface AddMessage extends BaseMessage {
   type: "add";
   data: string;
 }
-
+/** Delete Message */
 interface DeleteMessage extends BaseMessage {
   type: "delete";
   data: {
@@ -106,6 +165,7 @@ interface DeleteMessage extends BaseMessage {
   };
 }
 
+/** Union of Messages */
 type USPMessage =
   | GetMessage
   | SetMessage
@@ -114,30 +174,43 @@ type USPMessage =
   | DeleteMessage
   | ErrorMessage;
 
+/** Protocol event handlers */
 interface ProtocolArgs {
   onMessage: (msg: USPMessage) => void;
   onError: (err: any) => void;
 }
 
+/** Results of initialiazing protocol  */
 interface InitResult {
+  /** Session timeout in seconds */
   timeout: number;
 }
 
+/** Protocol interface */
 interface Protocol {
+  /** Initialize protocol */
   init: () => Promise<InitResult>;
+  /** Close connection */
   close: () => Promise<void>;
+  /** Send message */
   send: ({ data: any }) => void;
+  /** Encode message */
   encode: (
     command: CommandType,
     args: Partial<EncodeArgs>
   ) => { data: any; id: string };
 }
 
+/** Protocol event handlers */
 interface ProtocolEvents {
+  /** Handler for message event */
   onMessage: (resp: USPMessage) => void;
 }
 
+/** Mqtt message structure */
 interface MQTTRequest {
+  /** Message id */
   id: string;
+  /** Message data */
   data: any;
 }
diff --git a/tsconfig.json b/tsconfig.json
index aee4b7a..19ca0ad 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,5 +1,5 @@
 {
-  "exclude": ["node_modules", "build", "tests"],
+  "exclude": ["node_modules", "build", "tests", "docs"],
   "compilerOptions": {
     "target": "ESNext",
     "module": "CommonJS",
@@ -22,6 +22,9 @@
   "compileOnSave": true,
   "typedocOptions": {
     "mode": "modules",
-    "out": "docs"
+    "out": "docs",
+    "inputFiles": ["./src"],
+    "includeDeclarations": true,
+    "exclude": ["**/node_modules/**", "**/testy.ts", "**/protobuf-spec/**", "**/usp/**"]
   }
 }
-- 
GitLab