u8-mqtt 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -10
- package/cjs/index.cjs +3 -0
- package/cjs/index.cjs.map +1 -1
- package/cjs/v4.cjs +3 -0
- package/cjs/v4.cjs.map +1 -1
- package/cjs/v5.cjs +3 -0
- package/cjs/v5.cjs.map +1 -1
- package/code/index.mjs +1 -0
- package/code/v4.mjs +1 -0
- package/code/v5.mjs +1 -0
- package/esm/deno/index.js +3 -1
- package/esm/deno/index.js.map +1 -1
- package/esm/deno/v4.js +3 -1
- package/esm/deno/v4.js.map +1 -1
- package/esm/deno/v5.js +3 -1
- package/esm/deno/v5.js.map +1 -1
- package/esm/node/index.js +3 -1
- package/esm/node/index.js.map +1 -1
- package/esm/node/index.mjs +3 -1
- package/esm/node/index.mjs.map +1 -1
- package/esm/node/v4.js +3 -1
- package/esm/node/v4.js.map +1 -1
- package/esm/node/v4.mjs +3 -1
- package/esm/node/v4.mjs.map +1 -1
- package/esm/node/v5.js +3 -1
- package/esm/node/v5.js.map +1 -1
- package/esm/node/v5.mjs +3 -1
- package/esm/node/v5.mjs.map +1 -1
- package/esm/web/index.js +3 -1
- package/esm/web/index.js.map +1 -1
- package/esm/web/index.min.js +1 -1
- package/esm/web/index.min.js.br +0 -0
- package/esm/web/index.min.js.gz +0 -0
- package/esm/web/v4.js +3 -1
- package/esm/web/v4.js.map +1 -1
- package/esm/web/v4.min.js +1 -1
- package/esm/web/v4.min.js.br +0 -0
- package/esm/web/v4.min.js.gz +0 -0
- package/esm/web/v5.js +3 -1
- package/esm/web/v5.js.map +1 -1
- package/esm/web/v5.min.js +1 -1
- package/esm/web/v5.min.js.br +0 -0
- package/esm/web/v5.min.js.gz +0 -0
- package/package.json +4 -3
package/esm/web/v4.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function t(t,e=[]){do{const r=127&t;t>>>=7,e.push(r|(0===t?0:128))}while(t>0);return e}class e extends Number{static of(t,e,r){let n=new this(t);return n.reason=r?.[e]?.get(t)||e,n}}class r{static of(t){return this.prototype.of(t)}of(t){let e=(t,r)=>(r=0|e.k,e.k=r+t,r);return{__proto__:this,buf:t,step:e}}has_more(){return this.buf.byteLength>(0|this.step.k)}u8(){return this.buf[this.step(1)]}u16(){let{buf:t,step:e}=this,r=e(2);return t[r]<<8|t[r+1]}u32(){let{buf:t,step:e}=this,r=e(4);return t[r]<<24|t[r+1]<<16|t[r+2]<<8|t[r+3]}vint(){let{buf:t,step:e}=this,[r,n,s]=function(t,e=0){let r=e,n=(127&t[e])<<0;return 128&t[e++]&&(n|=(127&t[e])<<7,128&t[e++]&&(n|=(127&t[e])<<14,128&t[e++]&&(n|=(127&t[e])<<21))),[n,e,r]}(t,0|e.k);return e(n-s),r}bin(){let{buf:t,step:e}=this,r=e(2),n=t[r]<<8|t[r+1];return r=e(n),t.subarray(r,r+n)}utf8(){return new TextDecoder("utf-8").decode(this.bin())}pair(){return[this.utf8(),this.utf8()]}flags(t){return new t(this.buf[this.step(1)])}reason(t){let r=this.buf[this.step(1)];if(null!=r)return e.of(r,t,this._reasons_by)}flush(){let{buf:t,step:e}=this;return this.step=this.buf=null,t.subarray(0|e.k)}}function n(t,...e){t=class extends t{static reasons(t,...e){let r=this.prototype;r._reasons_by={...r._reasons_by};let n=r._reasons_by[t]||=new Map;for(let[t,r]of e)n.set(t,r);return this}};for(let r of e)r(t);return t}function s(t){t.reasons("connack",[0,"Success"],[1,"Connection refused, unacceptable protocol version"],[2,"Connection refused, identifier rejected"],[3,"Connection refused, server unavailable"],[4,"Connection refused, bad user name or password"],[5,"Connection refused, not authorized"])}function i(t){return(e,r)=>{let n=t.of(r);e.pkt_id=n.u16(),5<=e.mqtt_level&&(e.props=n.props());let s=e.answers=[];for(;n.has_more();)s.push(n.reason(e.type));return e}}function o(t){t.reasons("suback",[0,"Granted QoS 0"],[1,"Granted QoS 1"],[2,"Granted QoS 2"])}function u(t){t.reasons("unsuback",[0,"Success"],[17,"No subscription existed"],[128,"Unspecified error"],[131,"Implementation specific error"],[135,"Not authorized"],[143,"Topic Filter invalid"],[145,"Packet Identifier in use"])}const c=[function(t,e){const r=new Uint8Array([0,4,77,81,84,84]),n=t=>0|(t.reserved?1:0)|(3&t.will_qos)<<3|(t.clean_start?2:0)|(t.will_flag?4:0)|(t.will_retain?32:0)|(t.password?64:0)|(t.username?128:0);return t.connect=(t,s)=>{let i=e.of(s);i.push(r),i.u8(t);let{will:o,username:u,password:c}=s,a=i.flags(s.flags,n,0|(u?128:0)|(c?64:0)|(o?(t=>4|(3&t.qos)<<3|(t.retain?32:0))(o):0));return i.u16(s.keep_alive),5<=t&&i.props(s.props),i.utf8(s.client_id),4&a&&(5<=t&&i.props(o.props),i.utf8(o.topic),i.bin(o.payload)),128&a&&i.utf8(u),64&a&&i.bin(c),i.as_pkt(16)}},function(t,e){return t.puback=(t,r)=>{let n=e.of(r);return n.u16(r.pkt_id),5<=t&&(n.reason(r.reason),n.props(r.props)),n.as_pkt(64)}},function(t,e){return t.publish=(t,r)=>{let n=(3&r.qos)<<1,s=e.of(r);return s.utf8(r.topic),0!==n&&s.u16(r.pkt_id),5<=t?(s.props(r.props),s.flush(r.payload)):s.flush(r.payload),s.as_pkt(48|n|(r.dup?8:0)|(r.retain?1:0))}},function(t,e){const r=t=>0|3&t.qos|(t.retain?4:0)|(3&t.retain_handling)<<2;return t.subscribe=(t,n)=>{let s=e.of(n);s.u16(n.pkt_id),5<=t&&s.props(n.props);let i=r(n);for(let t of n.topics)if("string"==typeof t)s.utf8(t),s.u8(i);else{let[e,n]=Array.isArray(t)?t:[t.topic,t.opts];s.utf8(e),void 0===n?s.u8(i):s.flags(n,r)}return s.as_pkt(130)}},function(t,e){return t.unsubscribe=(t,r)=>{let n=e.of(r);n.u16(r.pkt_id),5<=t&&n.props(r.props);for(let t of r.topics)n.utf8(t);return n.as_pkt(162)}},function(t){t.pingreq=()=>new Uint8Array([192,0]),t.pingresp=()=>new Uint8Array([208,0])},function(t,e){return t.disconnect=(t,r)=>{let n=e.of(r);return r&&5<=t&&(r.reason||r.props)&&(n.reason(r.reason),n.props(r.props)),n.as_pkt(224)}}],a={decode_fns:[function(t,e){class r extends Number{get session_present(){return!0&this}}return t[2]=(t,n)=>{let s=e.of(n);return t.flags=s.flags(r),t.reason=s.reason(t.type),5<=t.mqtt_level&&(t.props=s.props()),t}},function(t,e){return t[3]=(t,r)=>{let{hdr:n}=t;t.dup=Boolean(8&n),t.retain=Boolean(1&n);let s=t.qos=n>>1&3,i=e.of(r);return t.topic=i.utf8(),0!==s&&(t.pkt_id=i.u16()),5<=t.mqtt_level&&(t.props=i.props()),t.payload=i.flush(),t}},function(t,e){return t[4]=(t,r)=>{let n=e.of(r);return t.pkt_id=n.u16(),5<=t.mqtt_level&&(t.reason=n.reason(t.type),t.props=n.props()),t}},function(t,e){return t[9]=i(e)},function(t,e){return t[11]=i(e)},function(t){return t[12]=t[13]=t=>t},function(t,e){return t[14]=(t,r)=>{if(r&&5<=t.mqtt_level){let n=e.of(r);t.reason=n.reason(t.type),t.props=n.props()}return t}}],mqtt_reader:n(r,s,o,u),encode_fns:c,mqtt_writer:class{static of(){return this.prototype.of()}of(){return{__proto__:this,$:[]}}static init(){return this}as_pkt(t){return this.pack([t])}push(...t){this.$.push(...t)}pack(e){let r,n,s=0,i=this.$;for(r of(this.$=!1,i))s+=r.length;n=(e=t(s,e)).length;let o=new Uint8Array(n+s);for(r of(o.set(e,0),i))o.set(r,n),n+=r.length;return o}u8(t){this.push([255&t])}u16(t){this.push([t>>>8&255,255&t])}u32(t){this.push([t>>>24&255,t>>>16&255,t>>>8&255,255&t])}vint(e){this.push(t(e))}bin(t){return t?"string"==typeof t?this.utf8(t):(t.length!==t.byteLength&&(t=new Uint8Array(t)),this.u16(t.byteLength),void this.push(t)):this.u16(0)}utf8(t){let e=new TextEncoder("utf-8").encode(t);this.u16(e.byteLength),this.push(e)}pair(t,e){this.utf8(t),this.utf8(e)}flags(t,e,r=0){return void 0!==t&&isNaN(+t)&&(t=e(t,0)),t|=r,this.push([t]),t}reason(t){this.push([0|t])}flush(t){null!=t&&this.push("string"==typeof t?new TextEncoder("utf-8").encode(t):t),this.push=!1}}};function p(t,e=0){let r=e,n=(127&t[e])<<0;return 128&t[e++]&&(n|=(127&t[e])<<7,128&t[e++]&&(n|=(127&t[e])<<14,128&t[e++]&&(n|=(127&t[e])<<21))),[n,e,r]}function l(t){let e=new Uint8Array(0);return r=>{e=0===e.byteLength?r:function(t,e){let r=t.byteLength,n=new Uint8Array(r+e.byteLength);return n.set(t,0),n.set(e,r),n}(e,r);let n=[];for(;;){let[r,s]=p(e,1),i=r+s;if(e.byteLength<i)return n;let o=e[0],u=0===r?null:e.subarray(s,i);e=e.subarray(i);let c=t.decode_pkt(o,u,t);null!=c&&n.push(c)}}}const h=["~","connect","connack","publish","puback","pubrec","pubrel","pubcomp","subscribe","suback","unsubscribe","unsuback","pingreq","pingresp","disconnect","auth"];function _(t=((...t)=>t)){let e,r,n=(t,n)=>{e=t,r=n};return s=>(s=new Promise(n),t(s,e,r))}Object.freeze({ao_done:!0});const f=_();function d(t){let e;return r=>{if(e=clearInterval(e),r)return e=setInterval(t,1e3*r),e.unref?.(),!0}}function b(t,e,r){r.done=!0}function y(){let t=[[],[]],e=Symbol(),r=e=>function*(t,e){for(let r of t)for(let t of r){let r=w(e,t);void 0!==r&&(yield r)}}(t,e);return{find:r,add(e,...r){let n=r.pop(),s=r.pop();if("function"!=typeof n){if(!1!==n)throw new TypeError;n=b}let i=function(t,e){if(t instanceof RegExp)return{keys:!1,pattern:t};var r,n,s,i,o=[],u="",c=t.split("/");for(c[0]||c.shift();s=c.shift();)"*"===(r=s[0])?(o.push("wild"),u+="/(.*)"):":"===r?(n=s.indexOf("?",1),i=s.indexOf(".",1),o.push(s.substring(1,~n?n:~i?i:s.length)),u+=~n&&!~i?"(?:/([^/]+?))?":"/([^/]+?)",~i&&(u+=(~n?"?":"")+"\\"+s.substring(i))):u+="/"+s;return{keys:o,pattern:new RegExp("^"+u+(e?"(?=$|/)":"/?$"),"i")}}(e.replace(/[+#]$/,"*"));return i.key=e,i.tgt=n,t[s?0:1].push(i),this},remove:(e,r)=>m([t[r?0:1]],e),clear(e){t[e?0:1]=[],null==e&&(t[1]=[])},async invoke(n,s){s.idx=0,s.rm=e;for(let[i,o]of r(n.topic)){let r=await i(n,o,s);if(e===r&&m(t,i),s.done)break;s.idx++}let{pkt_id:i,qos:o}=n;1===o&&await s.mqtt._send("puback",{pkt_id:i})}}}function w(t,{keys:e,pattern:r,tgt:n}){let s="/"!==t[0]?r.exec("/"+t):r.exec(t);if(null===s)return;if(!1===e){let{groups:t}=s;if(!t)return[n];let e={};for(let r in t)e[r]=t[r];return[n,e]}if(0===e.length)return[n];let i={};for(let t=0;t<e.length;t++)i[e[t]]=s[1+t];return[n,i]}function m(t,e){let r=t=>t===e||t.tgt===e||t.key===e;for(let e of t){let t=e.findIndex(r);if(0<=t)return!!e.splice(t,1)}return!1}Promise.resolve({type:"init"});const g={create(t){return{__proto__:this,target:t,hashbelt:[new Map]}},bind_pkt_future(t=100){let e,{hashbelt:r}=this,n=t=>r[0].set(e,t);return r=>("string"==typeof r?e=r:(t=t+1&65535,e=r.pkt_id=t),new Promise(n))},answer(t,e){for(let r of this.hashbelt){let n=r.get(t);if(void 0!==n)return r.delete(t),n([e]),!0}return!1},rotate_belt(t){let{hashbelt:e}=this;e.unshift(new Map);for(let r of e.splice(t||5))for(let t of r.values())t([,"expired"])},cmdids:(()=>{return[()=>{},r,e,r,t,t,t,t,r,t,r,t,e,e,r,e];function t(t,e){t.answer(e.pkt_id,e)}function e(t,e,n){t.answer(e.type,e),r(t,e,n)}async function r({target:t},e,r){let n=t[`mqtt_${e.type}`]||t.mqtt_pkt;void 0!==n&&await n.call(t,e,r)}})()};class k extends Error{constructor(t,e=t.reason){super(`[0x${e.toString(16)}] ${e.reason}`),this.mqtt_pkt=t,this.reason=e}}class q{constructor(t={}){this._conn_=function(t,[e,r]){let n,s,i=f(),o=f(),u=async(...t)=>(await o[0])(...t);return t._send=u,{async when_ready(){await o[0]},ping:d((()=>n?.("pingreq"))),reset(e){n&&(e&&i[2](e),n=null,i=f(),t._send=u,t.conn_emit("on_disconnect",!1===e,e))},async send_connect(...e){n||await i[0];let r=await n(...e);return 0==r[0].reason&&(s=!0,o[1](t._send=n),o=f(),t.conn_emit("on_ready")),r},is_set:()=>!!n,set(o,u){if(n)throw new Error("Already connected");o=o.mqtt_stream();let c={mqtt:t};return n=async(t,e,n)=>{let s=void 0===n||r(n);return await u(o.encode_pkt(t,e)),s},i[1](n),t.conn_emit("on_live",s),t=>e(o.decode(t),c)}}}(this,this._init_dispatch(t,this))}async conn_emit(t,e,r){this.log_conn?.(t,e,r);try{let n=this[await t];n?await n.call(this,this,e,r):r&&await this.on_error(r,t)}catch(e){this.on_error(e,t)}}on_error(t,e){console.warn("[[u8-mqtt error: %s]]",e,t)}async connect(t={}){let e=t.client_id||["u8-mqtt--",""];Array.isArray(e)&&(t.client_id=e=this.init_client_id(e)),this.client_id=e,null==t.keep_alive&&(t.keep_alive=60);let r=await this._conn_.send_connect("connect",t,"connack");if(0!=r[0].reason)throw new this.MQTTError(r[0]);return this._conn_.ping(t.keep_alive),r}async disconnect(t={}){let e=await this._send("disconnect",t);return this._conn_.reset(!1),e}auth(t={}){return this._send("auth",t,"auth")}ping(){return this._send("pingreq",null,"pingresp")}subscribe(t,e){return t=v(t,e),this._send("subscribe",t,t)}_sub_chain(t,e){let r=this.subscribe([[t]],e),n=this.subs||(this.subs=new Map);return n.set(r.topic=t,n.last=r),this}unsubscribe(t,e){return t=v(t,e),this._send("unsubscribe",t,t)}get on_topic(){return this.router.add}subscribe_topic(t,...e){this.router.add(t,!0,e.pop());let r=this.topic_for(t);return this._sub_chain(r,e.pop())}unsubscribe_topic(t){this.router.remove(t,!0);let e=this.topic_for(t);return this.unsubscribe([[e]])}shared_subscribe(t,e,...r){this.router.add(e,!0,r.pop());let n=this.topic_for(e);return null!=t&&(n=`$share/${t}/${n}`),this._sub_chain(n,r.pop())}shared_unsubscribe(t,e){this.router.remove(e,!0);let r=this.topic_for(e);return null!=t&&(r=`$share/${t}/${r}`),this.unsubscribe([[r]])}topic_for(t){return t.replace(/[:*].*$/,"#")}publish(t,e){return x(this,t,e)}post(t,e,r){return x.m(this,t,e,r)}send(t,e,r){return x.mq(this,t,e,r)}store(t,e,r){return x.mqr(this,t,e,r)}json_post(t,e,r){return x.o(this,t,e,r)}json_send(t,e,r){return x.oq(this,t,e,r)}json_store(t,e,r){return x.oqr(this,t,e,r)}obj_post(t,e,r){return x.o(this,t,e,r)}obj_send(t,e,r){return x.oq(this,t,e,r)}obj_store(t,e,r){return x.oqr(this,t,e,r)}init_client_id(t){let e=this.client_id;return void 0===e&&(this.client_id=e=this.sess_client_id(t)),e}new_client_id(t){return[t[0],Math.random().toString(36).slice(2),t[1]].join("")}sess_client_id(t){let e=t.join(" "),r=sessionStorage.getItem(e);return null==r&&(r=this.new_client_id(t),sessionStorage.setItem(e,r)),r}_init_router(t){return this.router=y()}_init_dispatch(t){let e={__proto__:t.on_mqtt_type||{},router:this._init_router(t,this)};return e.mqtt_publish||=e.router.invoke,function(t,e){let r=g.create(e),{cmdids:n}=r,{td:s=1e3,n:i=5}=t&&t.rotate||{},o=s+Date.now();return[function(t,e){for(let s of t)n[s.id](r,s,e);Date.now()>o&&(r.rotate_belt(i),o=s+Date.now())},r.bind_pkt_future()]}(this,e)}}{let t=q.prototype;Object.assign(t,{MQTTError:k,pub:t.publish,sub:t.subscribe,unsub:t.unsubscribe,sub_topic:t.subscribe_topic,unsub_topic:t.unsubscribe_topic,shared_sub:t.shared_subscribe,shared_unsub:t.shared_unsubscribe})}function v(t,e){return"string"==typeof t?{topics:[t],...e}:t[Symbol.iterator]?{topics:[...t],...e}:e?{...t,...e}:t}async function x(t,e,r){if(void 0===e.payload){"function"==typeof r&&(r={fn_encode:r});let{msg:n}=e;switch(typeof n){case"function":r={...r,fn_encode:n};case"undefined":return n=>x(t,{...e,[e.arg||"payload"]:n},r);default:let{fn_encode:s}=r||{};e.payload=s?await s(n):JSON.stringify(n)}}return r&&(r.props&&(e.props=r.props),r.xform&&(e=r.xform(e)||e)),t._send("publish",e,e.qos?e:void 0)}Object.assign(x,{m:(t,e,r,n)=>x(t,{topic:e,payload:r,qos:0},n),mq:(t,e,r,n)=>x(t,{topic:e,payload:r,qos:1},n),mqr:(t,e,r,n)=>x(t,{topic:e,payload:r,qos:1,retain:1},n),o:(t,e,r,n)=>x(t,{topic:e,msg:r,arg:"msg",qos:0},n),oq:(t,e,r,n)=>x(t,{topic:e,msg:r,arg:"msg",qos:1},n),oqr:(t,e,r,n)=>x(t,{topic:e,msg:r,arg:"msg",qos:1,retain:1},n)});const S={utf8(t){return new TextDecoder("utf-8").decode(t||this.payload)},json(t){return JSON.parse(this.utf8(t)||null)},text(t){return this.utf8(t)}};const $=class extends q{constructor(t={}){super(t),this.with(t)}static mqtt_ctx(t,e,r=S){let n=class extends(this){};return n.prototype.mqtt_ctx=function(t,e,r){r={__proto__:r||e.pkt_ctx,mqtt_level:t,get hdr(){return 15&this.b0},get id(){return this.b0>>>4},get type(){return h[this.b0>>>4]}};let n,s=[],i={};for(n of e.encode_fns)n(i,e.mqtt_writer);for(n of e.decode_fns)n(s,e.mqtt_reader);return{pkt_ctx:r,encode_pkt:(e,r)=>i[e](t,r),decode_pkt(t,e){return(s[t>>>4]||s[0])?.({__proto__:this.pkt_ctx,b0:t},e)},mqtt_stream(){let t={__proto__:this,pkt_ctx:{__proto__:r}};return t.pkt_ctx._base_=t.pkt_ctx,t.decode=l(t),t}}}(t,e,r),n}with(t){for(let[e,r]of Object.entries(t))"function"==typeof r&&(this[e]=r);return this}on_live(t,e){if(e)return t.connect()}_use_conn(t){return(this.reconnect=t)?.()}with_autoreconnect(t=2e3){return t.toFixed&&(t={delay:t}),this.with({on_reconnect(){this.delay(t.delay||2e3).then(this.reconnect).then(t.reconnect,t.error)}})}on_disconnect(t,e){if(!e)return t.on_reconnect?.()}delay(t){return new Promise((e=>setTimeout(e,t)))}with_async_iter(t,e){let r=this._conn_.set(this.mqtt_ctx,e);return this._msg_loop=(async()=>{try{t=await t;for await(let e of t)r(e);this._conn_.reset()}catch(t){this._conn_.reset(t)}})(),this}with_stream(t,e){return void 0===e&&(e=t),this.with_async_iter(t,(t=>e.write(t)))}with_websock(t){if(!t?.send)return t=new URL(t||"ws://127.0.0.1:9001"),this._use_conn((()=>this.with_websock(new WebSocket(t,["mqtt"]))));t.binaryType="arraybuffer";let e,{readyState:r}=t;if(1!==r){if(0!==r)throw new Error("Invalid WebSocket readyState");e=new Promise((e=>t.onopen=e))}let{_conn_:n}=this,s=n.set(this.mqtt_ctx,(async r=>(await e,t.send(r))));return t.onmessage=t=>s(new Uint8Array(t.data)),t.onclose=t=>{if(!t.wasClean){var e=new Error("websocket connection close");e.code=t.code,e.reason=t.reason}n.reset(e)},this}}.mqtt_ctx(4,a),j=t=>new $(t);export{$ as MQTTClient,$ as MQTTClient_v4,j as default,j as mqtt,j as mqtt_v4};
|
|
1
|
+
function t(t,e=[]){do{const r=127&t;t>>>=7,e.push(r|(0===t?0:128))}while(t>0);return e}class e extends Number{static of(t,e,r){let n=new this(t);return n.reason=r?.[e]?.get(t)||e,n}}class r{static of(t){return this.prototype.of(t)}of(t){let e=(t,r)=>(r=0|e.k,e.k=r+t,r);return{__proto__:this,buf:t,step:e}}has_more(){return this.buf.byteLength>(0|this.step.k)}u8(){return this.buf[this.step(1)]}u16(){let{buf:t,step:e}=this,r=e(2);return t[r]<<8|t[r+1]}u32(){let{buf:t,step:e}=this,r=e(4);return t[r]<<24|t[r+1]<<16|t[r+2]<<8|t[r+3]}vint(){let{buf:t,step:e}=this,[r,n,s]=function(t,e=0){let r=e,n=(127&t[e])<<0;return 128&t[e++]&&(n|=(127&t[e])<<7,128&t[e++]&&(n|=(127&t[e])<<14,128&t[e++]&&(n|=(127&t[e])<<21))),[n,e,r]}(t,0|e.k);return e(n-s),r}bin(){let{buf:t,step:e}=this,r=e(2),n=t[r]<<8|t[r+1];return r=e(n),t.subarray(r,r+n)}utf8(){return new TextDecoder("utf-8").decode(this.bin())}pair(){return[this.utf8(),this.utf8()]}flags(t){return new t(this.buf[this.step(1)])}reason(t){let r=this.buf[this.step(1)];if(null!=r)return e.of(r,t,this._reasons_by)}flush(){let{buf:t,step:e}=this;return this.step=this.buf=null,t.subarray(0|e.k)}}function n(t,...e){t=class extends t{static reasons(t,...e){let r=this.prototype;r._reasons_by={...r._reasons_by};let n=r._reasons_by[t]||=new Map;for(let[t,r]of e)n.set(t,r);return this}};for(let r of e)r(t);return t}function s(t){t.reasons("connack",[0,"Success"],[1,"Connection refused, unacceptable protocol version"],[2,"Connection refused, identifier rejected"],[3,"Connection refused, server unavailable"],[4,"Connection refused, bad user name or password"],[5,"Connection refused, not authorized"])}function i(t){return(e,r)=>{let n=t.of(r);e.pkt_id=n.u16(),5<=e.mqtt_level&&(e.props=n.props());let s=e.answers=[];for(;n.has_more();)s.push(n.reason(e.type));return e}}function o(t){t.reasons("suback",[0,"Granted QoS 0"],[1,"Granted QoS 1"],[2,"Granted QoS 2"])}function u(t){t.reasons("unsuback",[0,"Success"],[17,"No subscription existed"],[128,"Unspecified error"],[131,"Implementation specific error"],[135,"Not authorized"],[143,"Topic Filter invalid"],[145,"Packet Identifier in use"])}const c=[function(t,e){const r=new Uint8Array([0,4,77,81,84,84]),n=t=>0|(t.reserved?1:0)|(3&t.will_qos)<<3|(t.clean_start?2:0)|(t.will_flag?4:0)|(t.will_retain?32:0)|(t.password?64:0)|(t.username?128:0);return t.connect=(t,s)=>{let i=e.of(s);i.push(r),i.u8(t);let{will:o,username:u,password:c}=s,a=i.flags(s.flags,n,0|(u?128:0)|(c?64:0)|(o?(t=>4|(3&t.qos)<<3|(t.retain?32:0))(o):0));return i.u16(s.keep_alive),5<=t&&i.props(s.props),i.utf8(s.client_id),4&a&&(5<=t&&i.props(o.props),i.utf8(o.topic),i.bin(o.payload)),128&a&&i.utf8(u),64&a&&i.bin(c),i.as_pkt(16)}},function(t,e){return t.puback=(t,r)=>{let n=e.of(r);return n.u16(r.pkt_id),5<=t&&(n.reason(r.reason),n.props(r.props)),n.as_pkt(64)}},function(t,e){return t.publish=(t,r)=>{let n=(3&r.qos)<<1,s=e.of(r);return s.utf8(r.topic),0!==n&&s.u16(r.pkt_id),5<=t?(s.props(r.props),s.flush(r.payload)):s.flush(r.payload),s.as_pkt(48|n|(r.dup?8:0)|(r.retain?1:0))}},function(t,e){const r=t=>0|3&t.qos|(t.retain?4:0)|(3&t.retain_handling)<<2;return t.subscribe=(t,n)=>{let s=e.of(n);s.u16(n.pkt_id),5<=t&&s.props(n.props);let i=r(n);for(let t of n.topics)if("string"==typeof t)s.utf8(t),s.u8(i);else{let[e,n]=Array.isArray(t)?t:[t.topic,t.opts];s.utf8(e),void 0===n?s.u8(i):s.flags(n,r)}return s.as_pkt(130)}},function(t,e){return t.unsubscribe=(t,r)=>{let n=e.of(r);n.u16(r.pkt_id),5<=t&&n.props(r.props);for(let t of r.topics)n.utf8(t);return n.as_pkt(162)}},function(t){t.pingreq=()=>new Uint8Array([192,0]),t.pingresp=()=>new Uint8Array([208,0])},function(t,e){return t.disconnect=(t,r)=>{let n=e.of(r);return r&&5<=t&&(r.reason||r.props)&&(n.reason(r.reason),n.props(r.props)),n.as_pkt(224)}}],a={decode_fns:[function(t,e){class r extends Number{get session_present(){return!0&this}}return t[2]=(t,n)=>{let s=e.of(n);return t.flags=s.flags(r),t.reason=s.reason(t.type),5<=t.mqtt_level&&(t.props=s.props()),t}},function(t,e){return t[3]=(t,r)=>{let{hdr:n}=t;t.dup=Boolean(8&n),t.retain=Boolean(1&n);let s=t.qos=n>>1&3,i=e.of(r);return t.topic=i.utf8(),0!==s&&(t.pkt_id=i.u16()),5<=t.mqtt_level&&(t.props=i.props()),t.payload=i.flush(),t}},function(t,e){return t[4]=(t,r)=>{let n=e.of(r);return t.pkt_id=n.u16(),5<=t.mqtt_level&&(t.reason=n.reason(t.type),t.props=n.props()),t}},function(t,e){return t[9]=i(e)},function(t,e){return t[11]=i(e)},function(t){return t[12]=t[13]=t=>t},function(t,e){return t[14]=(t,r)=>{if(r&&5<=t.mqtt_level){let n=e.of(r);t.reason=n.reason(t.type),t.props=n.props()}return t}}],mqtt_reader:n(r,s,o,u),encode_fns:c,mqtt_writer:class{static of(){return this.prototype.of()}of(){return{__proto__:this,$:[]}}static init(){return this}as_pkt(t){return this.pack([t])}push(...t){this.$.push(...t)}pack(e){let r,n,s=0,i=this.$;for(r of(this.$=!1,i))s+=r.length;n=(e=t(s,e)).length;let o=new Uint8Array(n+s);for(r of(o.set(e,0),i))o.set(r,n),n+=r.length;return o}u8(t){this.push([255&t])}u16(t){this.push([t>>>8&255,255&t])}u32(t){this.push([t>>>24&255,t>>>16&255,t>>>8&255,255&t])}vint(e){this.push(t(e))}bin(t){return t?"string"==typeof t?this.utf8(t):(t.length!==t.byteLength&&(t=new Uint8Array(t)),this.u16(t.byteLength),void this.push(t)):this.u16(0)}utf8(t){let e=new TextEncoder("utf-8").encode(t);this.u16(e.byteLength),this.push(e)}pair(t,e){this.utf8(t),this.utf8(e)}flags(t,e,r=0){return void 0!==t&&isNaN(+t)&&(t=e(t,0)),t|=r,this.push([t]),t}reason(t){this.push([0|t])}flush(t){null!=t&&this.push("string"==typeof t?new TextEncoder("utf-8").encode(t):t),this.push=!1}}};function p(t,e=0){let r=e,n=(127&t[e])<<0;return 128&t[e++]&&(n|=(127&t[e])<<7,128&t[e++]&&(n|=(127&t[e])<<14,128&t[e++]&&(n|=(127&t[e])<<21))),[n,e,r]}function l(t){let e=new Uint8Array(0);return r=>{e=0===e.byteLength?r:function(t,e){let r=t.byteLength,n=new Uint8Array(r+e.byteLength);return n.set(t,0),n.set(e,r),n}(e,r);let n=[];for(;;){let[r,s]=p(e,1),i=r+s;if(e.byteLength<i)return n;let o=e[0],u=0===r?null:e.subarray(s,i);e=e.subarray(i);let c=t.decode_pkt(o,u,t);null!=c&&n.push(c)}}}const h=["~","connect","connack","publish","puback","pubrec","pubrel","pubcomp","subscribe","suback","unsubscribe","unsuback","pingreq","pingresp","disconnect","auth"];function _(t=((...t)=>t)){let e,r,n=(t,n)=>{e=t,r=n};return s=>(s=new Promise(n),t(s,e,r))}Object.freeze({ao_done:!0});const f=_();function d(t){let e;return r=>{if(e=clearInterval(e),r)return e=setInterval(t,1e3*r),e.unref?.(),!0}}function b(t,e,r){r.done=!0}function y(){let t=[[],[]],e=Symbol(),r=e=>function*(t,e){for(let r of t)for(let t of r){let r=w(e,t);void 0!==r&&(yield r)}}(t,e);return{find:r,add(e,...r){let n=r.pop(),s=r.pop();if("function"!=typeof n){if(!1!==n)throw new TypeError;n=b}let i=function(t,e){if(t instanceof RegExp)return{keys:!1,pattern:t};var r,n,s,i,o=[],u="",c=t.split("/");for(c[0]||c.shift();s=c.shift();)"*"===(r=s[0])?(o.push("wild"),u+="/(.*)"):":"===r?(n=s.indexOf("?",1),i=s.indexOf(".",1),o.push(s.substring(1,~n?n:~i?i:s.length)),u+=~n&&!~i?"(?:/([^/]+?))?":"/([^/]+?)",~i&&(u+=(~n?"?":"")+"\\"+s.substring(i))):u+="/"+s;return{keys:o,pattern:new RegExp("^"+u+(e?"(?=$|/)":"/?$"),"i")}}(e.replace(/[+#]$/,"*"));return i.key=e,i.tgt=n,t[s?0:1].push(i),this},remove:(e,r)=>m([t[r?0:1]],e),clear(e){t[e?0:1]=[],null==e&&(t[1]=[])},async invoke(n,s){s.idx=0,s.rm=e;for(let[i,o]of r(n.topic)){let r=await i(n,o,s);if(e===r&&m(t,i),s.done)break;s.idx++}let{pkt_id:i,qos:o}=n;1===o&&await s.mqtt._send("puback",{pkt_id:i})}}}function w(t,{keys:e,pattern:r,tgt:n}){let s="/"!==t[0]?r.exec("/"+t):r.exec(t);if(null===s)return;if(!1===e){let{groups:t}=s;if(!t)return[n];let e={};for(let r in t)e[r]=t[r];return[n,e]}if(0===e.length)return[n];let i={};for(let t=0;t<e.length;t++)i[e[t]]=s[1+t];return[n,i]}function m(t,e){let r=t=>t===e||t.tgt===e||t.key===e;for(let e of t){let t=e.findIndex(r);if(0<=t)return!!e.splice(t,1)}return!1}Promise.resolve({type:"init"});const g={create(t){return{__proto__:this,target:t,hashbelt:[new Map]}},bind_pkt_future(t=100){let e,{hashbelt:r}=this,n=t=>r[0].set(e,t);return r=>("string"==typeof r?e=r:(t=t+1&65535,e=r.pkt_id=t),new Promise(n))},answer(t,e){for(let r of this.hashbelt){let n=r.get(t);if(void 0!==n)return r.delete(t),n([e]),!0}return!1},rotate_belt(t){let{hashbelt:e}=this;e.unshift(new Map);for(let r of e.splice(t||5))for(let t of r.values())t([,"expired"])},cmdids:(()=>{return[()=>{},r,e,r,t,t,t,t,r,t,r,t,e,e,r,e];function t(t,e){t.answer(e.pkt_id,e)}function e(t,e,n){t.answer(e.type,e),r(t,e,n)}async function r({target:t},e,r){let n=t[`mqtt_${e.type}`]||t.mqtt_pkt;void 0!==n&&await n.call(t,e,r)}})()};class k extends Error{constructor(t,e=t.reason){super(`[0x${e.toString(16)}] ${e.reason}`),this.mqtt_pkt=t,this.reason=e}}class q{constructor(t={}){this._conn_=function(t,[e,r]){let n,s,i=f(),o=f(),u=async(...t)=>(await o[0])(...t);return t._send=u,{async when_ready(){await o[0]},ping:d((()=>n?.("pingreq"))),reset(e){n&&(e&&i[2](e),n=null,i=f(),t._send=u,t.conn_emit("on_disconnect",!1===e,e))},async send_connect(...e){n||await i[0];let r=await n(...e);return 0==r[0].reason&&(s=!0,o[1](t._send=n),o=f(),t.conn_emit("on_ready")),r},is_set:()=>!!n,set(o,u){if(n)throw new Error("Already connected");o=o.mqtt_stream();let c={mqtt:t};return n=async(t,e,n)=>{let s=void 0===n||r(n);return await u(o.encode_pkt(t,e)),s},i[1](n),t.conn_emit("on_live",s),t=>e(o.decode(t),c)}}}(this,this._init_dispatch(t,this))}async conn_emit(t,e,r){this.log_conn?.(t,e,r);try{let n=this[await t];n?await n.call(this,this,e,r):r&&await this.on_error(r,t)}catch(e){this.on_error(e,t)}}on_error(t,e){console.warn("[[u8-mqtt error: %s]]",e,t)}async connect(t={}){let e=t.client_id||["u8-mqtt--",""];Array.isArray(e)&&(t.client_id=e=this.init_client_id(e)),this.client_id=e,null==t.keep_alive&&(t.keep_alive=60);let r=await this._conn_.send_connect("connect",t,"connack");if(0!=r[0].reason)throw new this.MQTTError(r[0]);return this._conn_.ping(t.keep_alive),r}async disconnect(t={}){let e=await this._send("disconnect",t);return this._conn_.reset(!1),e}auth(t={}){return this._send("auth",t,"auth")}ping(){return this._send("pingreq",null,"pingresp")}subscribe(t,e){return t=v(t,e),this._send("subscribe",t,t)}_sub_chain(t,e){let r=this.subscribe([[t]],e),n=this.subs||(this.subs=new Map);return n.set(r.topic=t,n.last=r),this}unsubscribe(t,e){return t=v(t,e),this._send("unsubscribe",t,t)}get on_topic(){return this.router.add}subscribe_topic(t,...e){this.router.add(t,!0,e.pop());let r=this.topic_for(t);return this._sub_chain(r,e.pop())}unsubscribe_topic(t){this.router.remove(t,!0);let e=this.topic_for(t);return this.unsubscribe([[e]])}shared_subscribe(t,e,...r){this.router.add(e,!0,r.pop());let n=this.topic_for(e);return null!=t&&(n=`$share/${t}/${n}`),this._sub_chain(n,r.pop())}shared_unsubscribe(t,e){this.router.remove(e,!0);let r=this.topic_for(e);return null!=t&&(r=`$share/${t}/${r}`),this.unsubscribe([[r]])}topic_for(t){return t.replace(/[:*].*$/,"#")}publish(t,e){return x(this,t,e)}post(t,e,r){return x.m(this,t,e,r)}send(t,e,r){return x.mq(this,t,e,r)}store(t,e,r){return x.mqr(this,t,e,r)}json_post(t,e,r){return x.o(this,t,e,r)}json_send(t,e,r){return x.oq(this,t,e,r)}json_store(t,e,r){return x.oqr(this,t,e,r)}obj_post(t,e,r){return x.o(this,t,e,r)}obj_send(t,e,r){return x.oq(this,t,e,r)}obj_store(t,e,r){return x.oqr(this,t,e,r)}init_client_id(t){let e=this.client_id;return void 0===e&&(this.client_id=e=this.sess_client_id(t)),e}new_client_id(t){return[t[0],Math.random().toString(36).slice(2),t[1]].join("")}sess_client_id(t){let e=t.join(" "),r=sessionStorage.getItem(e);return null==r&&(r=this.new_client_id(t),sessionStorage.setItem(e,r)),r}_init_router(t){return this.router=y()}_init_dispatch(t){let e={__proto__:t.on_mqtt_type||{},router:this._init_router(t,this)};return e.mqtt_publish||=e.router.invoke,function(t,e){let r=g.create(e),{cmdids:n}=r,{td:s=1e3,n:i=5}=t&&t.rotate||{},o=s+Date.now();return[function(t,e){for(let s of t)n[s.id](r,s,e);Date.now()>o&&(r.rotate_belt(i),o=s+Date.now())},r.bind_pkt_future()]}(this,e)}}{let t=q.prototype;Object.assign(t,{MQTTError:k,pub:t.publish,sub:t.subscribe,unsub:t.unsubscribe,sub_topic:t.subscribe_topic,unsub_topic:t.unsubscribe_topic,shared_sub:t.shared_subscribe,shared_unsub:t.shared_unsubscribe})}function v(t,e){return"string"==typeof t?{topics:[t],...e}:t[Symbol.iterator]?{topics:[...t],...e}:e?{...t,...e}:t}async function x(t,e,r){if(void 0===e.payload){"function"==typeof r&&(r={fn_encode:r});let{msg:n}=e;switch(typeof n){case"function":r={...r,fn_encode:n};case"undefined":return n=>x(t,{...e,[e.arg||"payload"]:n},r);default:let{fn_encode:s}=r||{};e.payload=s?await s(n):JSON.stringify(n)}}return r&&(r.props&&(e.props=r.props),r.xform&&(e=r.xform(e)||e)),t._send("publish",e,e.qos?e:void 0)}Object.assign(x,{m:(t,e,r,n)=>x(t,{topic:e,payload:r,qos:0},n),mq:(t,e,r,n)=>x(t,{topic:e,payload:r,qos:1},n),mqr:(t,e,r,n)=>x(t,{topic:e,payload:r,qos:1,retain:1},n),o:(t,e,r,n)=>x(t,{topic:e,msg:r,arg:"msg",qos:0},n),oq:(t,e,r,n)=>x(t,{topic:e,msg:r,arg:"msg",qos:1},n),oqr:(t,e,r,n)=>x(t,{topic:e,msg:r,arg:"msg",qos:1,retain:1},n)});const S={utf8(t){return new TextDecoder("utf-8").decode(t||this.payload)},json(t){return JSON.parse(this.utf8(t)||null)},text(t){return this.utf8(t)}};var $="0.3.1";const j=class extends q{constructor(t={}){super(t),this.with(t)}static mqtt_ctx(t,e,r=S){let n=class extends(this){};return n.prototype.mqtt_ctx=function(t,e,r){r={__proto__:r||e.pkt_ctx,mqtt_level:t,get hdr(){return 15&this.b0},get id(){return this.b0>>>4},get type(){return h[this.b0>>>4]}};let n,s=[],i={};for(n of e.encode_fns)n(i,e.mqtt_writer);for(n of e.decode_fns)n(s,e.mqtt_reader);return{pkt_ctx:r,encode_pkt:(e,r)=>i[e](t,r),decode_pkt(t,e){return(s[t>>>4]||s[0])?.({__proto__:this.pkt_ctx,b0:t},e)},mqtt_stream(){let t={__proto__:this,pkt_ctx:{__proto__:r}};return t.pkt_ctx._base_=t.pkt_ctx,t.decode=l(t),t}}}(t,e,r),n}with(t){for(let[e,r]of Object.entries(t))"function"==typeof r&&(this[e]=r);return this}on_live(t,e){if(e)return t.connect()}_use_conn(t){return(this.reconnect=t)?.()}with_autoreconnect(t=2e3){return t.toFixed&&(t={delay:t}),this.with({on_reconnect(){this.delay(t.delay||2e3).then(this.reconnect).then(t.reconnect,t.error)}})}on_disconnect(t,e){if(!e)return t.on_reconnect?.()}delay(t){return new Promise((e=>setTimeout(e,t)))}with_async_iter(t,e){let r=this._conn_.set(this.mqtt_ctx,e);return this._msg_loop=(async()=>{try{t=await t;for await(let e of t)r(e);this._conn_.reset()}catch(t){this._conn_.reset(t)}})(),this}with_stream(t,e){return void 0===e&&(e=t),this.with_async_iter(t,(t=>e.write(t)))}with_websock(t){if(!t?.send)return t=new URL(t||"ws://127.0.0.1:9001"),this._use_conn((()=>this.with_websock(new WebSocket(t,["mqtt"]))));t.binaryType="arraybuffer";let e,{readyState:r}=t;if(1!==r){if(0!==r)throw new Error("Invalid WebSocket readyState");e=new Promise((e=>t.onopen=e))}let{_conn_:n}=this,s=n.set(this.mqtt_ctx,(async r=>(await e,t.send(r))));return t.onmessage=t=>s(new Uint8Array(t.data)),t.onclose=t=>{if(!t.wasClean){var e=new Error("websocket connection close");e.code=t.code,e.reason=t.reason}n.reset(e)},this}}.mqtt_ctx(4,a),T=t=>new j(t);export{j as MQTTClient,j as MQTTClient_v4,T as default,T as mqtt,T as mqtt_v4,$ as version};
|
package/esm/web/v4.min.js.br
CHANGED
|
Binary file
|
package/esm/web/v4.min.js.gz
CHANGED
|
Binary file
|
package/esm/web/v5.js
CHANGED
|
@@ -1559,6 +1559,8 @@ class MQTTCore extends MQTTBase {
|
|
|
1559
1559
|
|
|
1560
1560
|
return this} }
|
|
1561
1561
|
|
|
1562
|
+
var version = "0.3.1";
|
|
1563
|
+
|
|
1562
1564
|
const MQTTClient_v4 = /* #__PURE__ */
|
|
1563
1565
|
MQTTCore.mqtt_ctx(4, mqtt_opts_v5);
|
|
1564
1566
|
|
|
@@ -1571,5 +1573,5 @@ const mqtt_v4 = opt =>
|
|
|
1571
1573
|
const mqtt_v5 = opt =>
|
|
1572
1574
|
new MQTTClient_v5(opt);
|
|
1573
1575
|
|
|
1574
|
-
export { MQTTClient_v5 as MQTTClient, MQTTClient_v4, MQTTClient_v5, mqtt_v5 as default, mqtt_v5 as mqtt, mqtt_v4, mqtt_v5 };
|
|
1576
|
+
export { MQTTClient_v5 as MQTTClient, MQTTClient_v4, MQTTClient_v5, mqtt_v5 as default, mqtt_v5 as mqtt, mqtt_v4, mqtt_v5, version };
|
|
1575
1577
|
//# sourceMappingURL=v5.js.map
|