u8-mqtt 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +3 -3
  2. package/cjs/basic-v4.cjs +107 -146
  3. package/cjs/basic-v4.cjs.map +1 -1
  4. package/cjs/basic-v5.cjs +106 -145
  5. package/cjs/basic-v5.cjs.map +1 -1
  6. package/cjs/index.cjs +163 -206
  7. package/cjs/index.cjs.map +1 -1
  8. package/cjs/v4.cjs +164 -207
  9. package/cjs/v4.cjs.map +1 -1
  10. package/cjs/v5.cjs +163 -206
  11. package/cjs/v5.cjs.map +1 -1
  12. package/code/_dispatch.jsy +16 -0
  13. package/code/base.jsy +72 -133
  14. package/code/core.jsy +15 -9
  15. package/code/router_path.jsy +38 -51
  16. package/code/with_topic_router.jsy +20 -11
  17. package/esm/basic-v4.js +1154 -0
  18. package/esm/basic-v4.js.map +1 -0
  19. package/esm/basic-v5.js +1416 -0
  20. package/esm/basic-v5.js.map +1 -0
  21. package/esm/deno/basic-v4.js +107 -146
  22. package/esm/deno/basic-v4.js.map +1 -1
  23. package/esm/deno/basic-v5.js +106 -145
  24. package/esm/deno/basic-v5.js.map +1 -1
  25. package/esm/deno/index.js +163 -206
  26. package/esm/deno/index.js.map +1 -1
  27. package/esm/deno/v4.js +164 -207
  28. package/esm/deno/v4.js.map +1 -1
  29. package/esm/deno/v5.js +163 -206
  30. package/esm/deno/v5.js.map +1 -1
  31. package/esm/index.js +1599 -0
  32. package/esm/index.js.map +1 -0
  33. package/esm/node/basic-v4.js +107 -146
  34. package/esm/node/basic-v4.js.map +1 -1
  35. package/esm/node/basic-v4.mjs +107 -146
  36. package/esm/node/basic-v4.mjs.map +1 -1
  37. package/esm/node/basic-v5.js +106 -145
  38. package/esm/node/basic-v5.js.map +1 -1
  39. package/esm/node/basic-v5.mjs +106 -145
  40. package/esm/node/basic-v5.mjs.map +1 -1
  41. package/esm/node/index.js +163 -206
  42. package/esm/node/index.js.map +1 -1
  43. package/esm/node/index.mjs +163 -206
  44. package/esm/node/index.mjs.map +1 -1
  45. package/esm/node/v4.js +164 -207
  46. package/esm/node/v4.js.map +1 -1
  47. package/esm/node/v4.mjs +164 -207
  48. package/esm/node/v4.mjs.map +1 -1
  49. package/esm/node/v5.js +163 -206
  50. package/esm/node/v5.js.map +1 -1
  51. package/esm/node/v5.mjs +163 -206
  52. package/esm/node/v5.mjs.map +1 -1
  53. package/esm/v4.js +1336 -0
  54. package/esm/v4.js.map +1 -0
  55. package/esm/v5.js +1599 -0
  56. package/esm/v5.js.map +1 -0
  57. package/esm/web/basic-v4.js +107 -146
  58. package/esm/web/basic-v4.js.map +1 -1
  59. package/esm/web/basic-v4.min.js +1 -1
  60. package/esm/web/basic-v4.min.js.br +0 -0
  61. package/esm/web/basic-v4.min.js.gz +0 -0
  62. package/esm/web/basic-v5.js +106 -145
  63. package/esm/web/basic-v5.js.map +1 -1
  64. package/esm/web/basic-v5.min.js +1 -1
  65. package/esm/web/basic-v5.min.js.br +0 -0
  66. package/esm/web/basic-v5.min.js.gz +0 -0
  67. package/esm/web/index.js +163 -206
  68. package/esm/web/index.js.map +1 -1
  69. package/esm/web/index.min.js +1 -1
  70. package/esm/web/index.min.js.br +0 -0
  71. package/esm/web/index.min.js.gz +0 -0
  72. package/esm/web/v4.js +164 -207
  73. package/esm/web/v4.js.map +1 -1
  74. package/esm/web/v4.min.js +1 -1
  75. package/esm/web/v4.min.js.br +0 -0
  76. package/esm/web/v4.min.js.gz +0 -0
  77. package/esm/web/v5.js +163 -206
  78. package/esm/web/v5.js.map +1 -1
  79. package/esm/web/v5.min.js +1 -1
  80. package/esm/web/v5.min.js.br +0 -0
  81. package/esm/web/v5.min.js.gz +0 -0
  82. package/package.json +7 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../node_modules/u8-mqtt-packet/esm/codec_v5_client.js","../node_modules/regexparam/dist/index.mjs","../code/with_topic_router.jsy","../code/router_path.jsy","../node_modules/u8-mqtt-packet/esm/codec_bind.js","../node_modules/roap/esm/roap.mjs","../code/_conn.jsy","../code/_cmdid_dispatch.jsy","../code/_dispatch.jsy","../code/base.jsy","../code/core.jsy","../code/v5.js"],"sourcesContent":["function encode_varint(n, a=[]) {\n do {\n const ni = n & 0x7f;\n n >>>= 7;\n a.push( ni | (0===n ? 0 : 0x80) );\n } while (n > 0)\n return a\n}\n\n\n/*\nexport function decode_varint_loop(u8, i=0) {\n let i0 = i\n let shift = 0, n = (u8[i] & 0x7f)\n while ( 0x80 & u8[i++] )\n n |= (u8[i] & 0x7f) << (shift += 7)\n\n return [n, i, i0]\n}\n*/\n\n\nfunction decode_varint(u8, i=0) {\n let i0 = i;\n // unrolled for a max of 4 chains\n let n = (u8[i] & 0x7f) << 0;\n if ( 0x80 & u8[i++] ) {\n n |= (u8[i] & 0x7f) << 7;\n if ( 0x80 & u8[i++] ) {\n n |= (u8[i] & 0x7f) << 14;\n if ( 0x80 & u8[i++] ) {\n n |= (u8[i] & 0x7f) << 21;\n }\n }\n }\n return [n, i, i0]\n}\n\nconst mqtt_props = /* #__PURE__ */\n init_mqtt_props();\n\nfunction init_mqtt_props() {\n let mqtt_props = new Map();\n\n let entries = [\n [ 0x01, 'u8', 'payload_format_indicator'],\n [ 0x02, 'u32', 'message_expiry_interval'],\n [ 0x03, 'utf8', 'content_type'],\n [ 0x08, 'utf8', 'response_topic'],\n [ 0x09, 'bin', 'correlation_data'],\n [ 0x0B, 'vint', 'subscription_identifier'],\n [ 0x11, 'u32', 'session_expiry_interval'],\n [ 0x12, 'utf8', 'assigned_client_identifier'],\n [ 0x13, 'u16', 'server_keep_alive'],\n [ 0x15, 'utf8', 'authentication_method'],\n [ 0x16, 'bin', 'authentication_data'],\n [ 0x17, 'u8', 'request_problem_information'],\n [ 0x18, 'u32', 'will_delay_interval'],\n [ 0x19, 'u8', 'request_response_information'],\n [ 0x1A, 'utf8', 'response_information'],\n [ 0x1C, 'utf8', 'server_reference'],\n [ 0x1F, 'utf8', 'reason_string'],\n [ 0x21, 'u16', 'receive_maximum'],\n [ 0x22, 'u16', 'topic_alias_maximum'],\n [ 0x23, 'u16', 'topic_alias'],\n [ 0x24, 'u8', 'maximum_qos'],\n [ 0x25, 'u8', 'retain_available'],\n [ 0x26, 'pair', 'user_properties', {op: 'kv_obj'}],\n [ 0x27, 'u32', 'maximum_packet_size'],\n [ 0x28, 'u8', 'wildcard_subscription_available'],\n [ 0x29, 'u8', 'subscription_identifiers_available', {op: 'u8_vec'}],\n [ 0x2A, 'u8', 'shared_subscription_available'],\n ];\n\n for (let [id, type, name, extra] of entries) {\n let prop_obj = {id, type, name, ...extra};\n mqtt_props.set(prop_obj.id, prop_obj);\n mqtt_props.set(prop_obj.name, prop_obj);\n }\n\n return mqtt_props\n}\n\nclass U8_Reason extends Number {\n static of(v, pkt_kind, by_kind) {\n let self = new this(v);\n self.reason = by_kind?.[pkt_kind]?.get(v) || pkt_kind;\n return self\n }\n}\n\nclass mqtt_reader_v4 {\n static of(buf) { return this.prototype.of(buf) }\n of(buf) {\n let step = (width, k) => (k=0|step.k, step.k=k+width, k);\n return {__proto__: this, buf, step}\n }\n\n has_more() {\n return this.buf.byteLength > (this.step.k|0)\n }\n\n u8() {\n return this.buf[this.step(1)]\n }\n\n u16() {\n let {buf, step} = this, i = step(2);\n return (buf[i]<<8) | buf[i+1]\n }\n\n u32() {\n let {buf, step} = this, i = step(4);\n return (buf[i]<<24) | (buf[i+1]<<16) | (buf[i+2]<<8) | buf[i+3]\n }\n\n vint() {\n let {buf, step} = this;\n let [n, vi, vi0] = decode_varint(buf, step.k|0);\n step(vi - vi0);\n return n\n }\n\n bin() {\n let {buf, step} = this, i = step(2);\n let len = (buf[i]<<8) | buf[i+1];\n i = step(len);\n return buf.subarray(i, i+len)\n }\n\n utf8() { return new TextDecoder('utf-8').decode(this.bin()) }\n pair() { return [ this.utf8(), this.utf8() ] }\n\n flags(FlagsType) { return new FlagsType(this.buf[this.step(1)]) }\n\n reason(pkt_kind) {\n let v = this.buf[this.step(1)];\n if (null != v)\n return U8_Reason.of(v, pkt_kind, this._reasons_by)\n }\n\n flush() {\n let {buf, step} = this;\n this.step = this.buf = null;\n return buf.subarray(step.k|0)\n }\n\n}\n\nlet mqtt_reader_v5$1 = class mqtt_reader_v5 extends mqtt_reader_v4 {\n props() {\n let {buf, step} = this;\n let [n, vi, vi0] = decode_varint(buf, step.k|0);\n step(n + vi - vi0);\n if (0 === n) return null\n\n let res={}, fork = this.of(buf.subarray(vi, step.k|0));\n while (fork.has_more()) {\n let pt = mqtt_props.get( fork.u8() )\n , value = fork[pt.type]();\n res[pt.name] = ! pt.op ? value\n : fork[pt.op](res[pt.name], value);\n }\n return res\n }\n\n kv_obj(obj=Object.create(null), [k,v]) {\n obj[k] = v;\n return obj\n }\n u8_vec(vec=[], u8) {\n vec.push(u8);\n return vec\n }\n\n /*\n vbuf() {\n let {buf, step} = this\n let [n, vi, vi0] = decode_varint(buf, step.k|0)\n step(n + vi - vi0)\n return 0 === n ? null\n : buf.subarray(vi, step.k|0)\n }\n */\n};\n\nfunction mqtt_reader_info(mqtt_reader, ... info_fn_list) {\n mqtt_reader = class extends mqtt_reader {\n static reasons(pkt_type, ...reason_entries) {\n let proto = this.prototype;\n proto._reasons_by = {... proto._reasons_by};\n\n let lut = (proto._reasons_by[pkt_type] ||= new Map());\n for (let [u8, reason] of reason_entries)\n lut.set( u8, reason );\n\n return this\n }\n };\n\n for (let fn_info of info_fn_list)\n fn_info(mqtt_reader);\n\n return mqtt_reader\n}\n\nclass mqtt_writer_v4 {\n static of() { return this.prototype.of() }\n of() { return {__proto__: this, $:[]} }\n\n static init() { return this }\n\n as_pkt(pkt_id) { return this.pack([pkt_id]) }\n\n push(...z) { this.$.push(...z); }\n pack(hdr) {\n let z, i, n=0, parts = this.$;\n this.$ = false;\n for (z of parts) n += z.length;\n\n hdr = encode_varint(n, hdr);\n i = hdr.length;\n\n let pkt = new Uint8Array(i + n);\n pkt.set(hdr, 0);\n for (z of parts) {\n pkt.set(z, i);\n i += z.length;\n }\n return pkt\n }\n\n u8(v) { this.push([ v & 0xff ]); }\n u16(v) { this.push([ (v>>>8) & 0xff, v & 0xff ]); }\n u32(v) { this.push([ (v>>>24) & 0xff, (v>>>16) & 0xff, (v>>>8) & 0xff, v & 0xff ]); }\n vint(v) { this.push( encode_varint(v) );}\n\n bin(u8_buf) {\n if (! u8_buf) return this.u16(0)\n if ('string' === typeof u8_buf)\n return this.utf8(u8_buf)\n\n if (u8_buf.length !== u8_buf.byteLength)\n u8_buf = new Uint8Array(u8_buf);\n\n this.u16(u8_buf.byteLength);\n this.push(u8_buf);\n }\n\n utf8(v) {\n let u8_buf = new TextEncoder('utf-8').encode(v);\n this.u16(u8_buf.byteLength);\n this.push(u8_buf);\n }\n pair(k,v) { this.utf8(k); this.utf8(v); }\n\n flags(v, enc_flags, b0=0) {\n if (undefined !== v && isNaN(+v))\n v = enc_flags(v, 0);\n\n v |= b0;\n this.push([v]);\n return v\n }\n\n reason(v) { this.push([v | 0]); }\n\n flush(buf) {\n if (null != buf)\n this.push(\n 'string' === typeof buf\n ? new TextEncoder('utf-8').encode(buf)\n : buf );\n\n this.push = false;\n }\n}\n\n\nclass mqtt_writer_v5 extends mqtt_writer_v4 {\n props(props) {\n if (! props)\n return this.u8(0)\n\n if (! Array.isArray(props))\n props = props.entries\n ? Array.from(props.entries())\n : Object.entries(props);\n\n if (0 === props.length)\n return this.u8(0)\n\n let fork = this.of();\n for (let [name, value] of props) {\n let pt = mqtt_props.get(name);\n fork[pt.op || 'one'](value, pt);\n }\n this.push(fork.pack());\n }\n\n one(value, pt) {\n this.u8(pt.id);\n this[pt.type](value);\n }\n kv_obj(obj, pt) {\n for (let kv of Object.entries(obj)) {\n this.u8(pt.id);\n this.pair(kv);\n }\n }\n u8_vec(vec, pt) {\n for (let v of vec) {\n this.u8(pt.id);\n this.u8(v);\n }\n }\n}\n\nfunction mqtt_decode_connack(ns, mqtt_reader) {\n class _connack_flags_ extends Number {\n get session_present() { return this & 0x01 !== 0 }\n }\n\n return ns[0x2] = (pkt, u8_body) => {\n let rdr = mqtt_reader.of(u8_body);\n\n pkt.flags =\n rdr.flags(_connack_flags_);\n\n pkt.reason = rdr.reason(pkt.type);\n if (5 <= pkt.mqtt_level)\n pkt.props = rdr.props();\n return pkt }\n}\n\n\nfunction _connack_v4(mqtt_reader) {\n mqtt_reader.reasons('connack',\n // MQTT 3.1.1\n [ 0x00, 'Success'],\n [ 0x01, 'Connection refused, unacceptable protocol version'],\n [ 0x02, 'Connection refused, identifier rejected'],\n [ 0x03, 'Connection refused, server unavailable'],\n [ 0x04, 'Connection refused, bad user name or password'],\n [ 0x05, 'Connection refused, not authorized'],\n );\n}\n\nfunction _connack_v5(mqtt_reader) {\n _connack_v4(mqtt_reader);\n\n mqtt_reader.reasons('connack',\n // MQTT 5.0\n [ 0x81, 'Malformed Packet'],\n [ 0x82, 'Protocol Error'],\n [ 0x83, 'Implementation specific error'],\n [ 0x84, 'Unsupported Protocol Version'],\n [ 0x85, 'Client Identifier not valid'],\n [ 0x86, 'Bad User Name or Password'],\n [ 0x87, 'Not authorized'],\n [ 0x88, 'Server unavailable'],\n [ 0x89, 'Server busy'],\n [ 0x8A, 'Banned'],\n [ 0x8C, 'Bad authentication method'],\n [ 0x90, 'Topic Name invalid'],\n [ 0x95, 'Packet too large'],\n [ 0x97, 'Quota exceeded'],\n [ 0x99, 'Payload format invalid'],\n [ 0x9A, 'Retain not supported'],\n [ 0x9B, 'QoS not supported'],\n [ 0x9C, 'Use another server'],\n [ 0x9D, 'Server moved'],\n [ 0x9F, 'Connection rate exceeded'],\n );\n}\n\nfunction mqtt_decode_publish(ns, mqtt_reader) {\n return ns[0x3] = (pkt, u8_body) => {\n let {hdr} = pkt;\n pkt.dup = Boolean(hdr & 0x8);\n pkt.retain = Boolean(hdr & 0x1);\n let qos = pkt.qos = (hdr>>1) & 0x3;\n\n let rdr = mqtt_reader.of(u8_body);\n pkt.topic = rdr.utf8();\n if (0 !== qos)\n pkt.pkt_id = rdr.u16();\n\n if (5 <= pkt.mqtt_level)\n pkt.props = rdr.props();\n\n pkt.payload = rdr.flush();\n return pkt }\n}\n\nfunction mqtt_decode_puback(ns, mqtt_reader) {\n return ns[0x4] = (pkt, u8_body) => {\n let rdr = mqtt_reader.of(u8_body);\n\n pkt.pkt_id = rdr.u16();\n if (5 <= pkt.mqtt_level) {\n pkt.reason = rdr.reason(pkt.type);\n pkt.props = rdr.props();\n }\n\n return pkt }\n}\n\n\nfunction _puback_v5(mqtt_reader) {\n mqtt_reader.reasons('puback',\n // MQTT 5.0\n [ 0x00, 'Success'],\n [ 0x10, 'No matching subscribers'],\n [ 0x80, 'Unspecified error'],\n [ 0x83, 'Implementation specific error'],\n [ 0x87, 'Not authorized'],\n [ 0x90, 'Topic Name invalid'],\n [ 0x91, 'Packet identifier in use'],\n [ 0x97, 'Quota exceeded'],\n [ 0x99, 'Payload format invalid'],\n );\n}\n\nfunction _mqtt_decode_suback(mqtt_reader) {\n return (pkt, u8_body) => {\n let rdr = mqtt_reader.of(u8_body);\n\n pkt.pkt_id = rdr.u16();\n if (5 <= pkt.mqtt_level)\n pkt.props = rdr.props();\n\n let answers = pkt.answers = [];\n while (rdr.has_more())\n answers.push(\n rdr.reason(pkt.type) );\n\n return pkt }\n}\n\nfunction mqtt_decode_suback(ns, mqtt_reader) {\n return ns[0x9] = _mqtt_decode_suback(mqtt_reader)\n}\n\nfunction _suback_v4(mqtt_reader) {\n mqtt_reader.reasons('suback',\n // MQTT 3.1.1\n [ 0x00, 'Granted QoS 0'],\n [ 0x01, 'Granted QoS 1'],\n [ 0x02, 'Granted QoS 2'],\n );\n}\n\nfunction _suback_v5(mqtt_reader) {\n _suback_v4(mqtt_reader);\n\n mqtt_reader.reasons('suback',\n // MQTT 5.0\n [ 0x80, 'Unspecified error'],\n [ 0x83, 'Implementation specific error'],\n [ 0x87, 'Not authorized'],\n [ 0x8F, 'Topic Filter invalid'],\n [ 0x91, 'Packet Identifier in use'],\n [ 0x97, 'Quota exceeded'],\n [ 0x9E, 'Shared Subscriptions not supported'],\n [ 0xA1, 'Subscription Identifiers not supported'],\n [ 0xA2, 'Wildcard Subscriptions not supported'],\n );\n}\n\nfunction mqtt_decode_unsuback(ns, mqtt_reader) {\n return ns[0xb] = _mqtt_decode_suback(mqtt_reader)\n}\n\nfunction _unsuback_v4(mqtt_reader) {\n mqtt_reader.reasons('unsuback',\n // MQTT 3.1.1\n [ 0x00, 'Success'],\n [ 0x11, 'No subscription existed'],\n [ 0x80, 'Unspecified error'],\n [ 0x83, 'Implementation specific error'],\n [ 0x87, 'Not authorized'],\n [ 0x8F, 'Topic Filter invalid'],\n [ 0x91, 'Packet Identifier in use'],\n );\n}\n\nfunction mqtt_decode_pingxxx(ns) {\n return ns[0xc] = ns[0xd] = pkt => pkt\n}\n\nfunction mqtt_decode_disconnect(ns, mqtt_reader) {\n return ns[0xe] = (pkt, u8_body) => {\n if (u8_body && 5 <= pkt.mqtt_level) {\n let rdr = mqtt_reader.of(u8_body);\n pkt.reason = rdr.reason(pkt.type);\n pkt.props = rdr.props();\n }\n return pkt }\n}\n\n\nfunction _disconnect_v5(mqtt_reader) {\n mqtt_reader.reasons('disconnect',\n // MQTT 5.0\n [ 0x00, 'Normal disconnection'],\n [ 0x04, 'Disconnect with Will Message'],\n [ 0x80, 'Unspecified error'],\n [ 0x81, 'Malformed Packet'],\n [ 0x82, 'Protocol Error'],\n [ 0x83, 'Implementation specific error'],\n [ 0x87, 'Not authorized'],\n [ 0x89, 'Server busy'],\n [ 0x8B, 'Server shutting down'],\n [ 0x8D, 'Keep Alive timeout'],\n [ 0x8E, 'Session taken over'],\n [ 0x8F, 'Topic Filter invalid'],\n [ 0x90, 'Topic Name invalid'],\n [ 0x93, 'Receive Maximum exceeded'],\n [ 0x94, 'Topic Alias invalid'],\n [ 0x95, 'Packet too large'],\n [ 0x96, 'Message rate too high'],\n [ 0x97, 'Quota exceeded'],\n [ 0x98, 'Administrative action'],\n [ 0x99, 'Payload format invalid'],\n [ 0x9A, 'Retain not supported'],\n [ 0x9B, 'QoS not supported'],\n [ 0x9C, 'Use another server'],\n [ 0x9D, 'Server moved'],\n [ 0x9E, 'Shared Subscriptions not supported'],\n [ 0x9F, 'Connection rate exceeded'],\n [ 0xA0, 'Maximum connect time'],\n [ 0xA1, 'Subscription Identifiers not supported'],\n [ 0xA2, 'Wildcard Subscriptions not supported'],\n );\n}\n\nfunction mqtt_decode_auth(ns, mqtt_reader) {\n return ns[0xf] = (pkt, u8_body) => {\n if ( 5 <= pkt.mqtt_level ) {\n let rdr = mqtt_reader.of(u8_body);\n pkt.reason = rdr.reason(pkt.type);\n pkt.props = rdr.props();\n }\n return pkt }\n}\n\n\nfunction _auth_v5(mqtt_reader) {\n mqtt_reader.reasons('auth',\n // MQTT 5.0\n [ 0x00, 'Success' ],\n [ 0x18, 'Continue authentication' ],\n [ 0x19, 'Re-authenticate' ],\n );\n}\n\nfunction mqtt_encode_connect(ns, mqtt_writer) {\n const _c_mqtt_proto = new Uint8Array([\n 0, 4, 0x4d, 0x51, 0x54, 0x54 ]);\n\n const _enc_flags_connect = flags => 0\n | ( flags.reserved ? 0x01 : 0 )\n | ( (flags.will_qos & 0x3) << 3 )\n | ( flags.clean_start ? 0x02 : 0 )\n | ( flags.will_flag ? 0x04 : 0 )\n | ( flags.will_retain ? 0x20 : 0 )\n | ( flags.password ? 0x40 : 0 )\n | ( flags.username ? 0x80 : 0 );\n\n const _enc_flags_will = will => 0x4\n | ( (will.qos & 0x3) << 3 )\n | ( will.retain ? 0x20 : 0 );\n\n return ns.connect = ( mqtt_level, pkt ) => {\n let wrt = mqtt_writer.of(pkt);\n\n wrt.push(_c_mqtt_proto);\n wrt.u8( mqtt_level );\n\n let {will, username, password} = pkt;\n let flags = wrt.flags(\n pkt.flags,\n _enc_flags_connect,\n 0 | (username ? 0x80 : 0)\n | (password ? 0x40 : 0)\n | (will ? _enc_flags_will(will) : 0) );\n\n wrt.u16(pkt.keep_alive);\n\n if (5 <= mqtt_level)\n wrt.props(pkt.props);\n\n\n wrt.utf8(pkt.client_id);\n if (flags & 0x04) { // .will_flag\n if (5 <= mqtt_level)\n wrt.props(will.props);\n\n wrt.utf8(will.topic);\n wrt.bin(will.payload);\n }\n\n if (flags & 0x80) // .username\n wrt.utf8(username);\n\n if (flags & 0x40) // .password\n wrt.bin(password);\n\n return wrt.as_pkt(0x10)\n }\n}\n\nfunction mqtt_encode_publish(ns, mqtt_writer) {\n return ns.publish = ( mqtt_level, pkt ) => {\n let qos = (pkt.qos & 0x3) << 1;\n let wrt = mqtt_writer.of(pkt);\n\n wrt.utf8(pkt.topic);\n if (0 !== qos)\n wrt.u16(pkt.pkt_id);\n\n if ( 5 <= mqtt_level) {\n wrt.props(pkt.props);\n wrt.flush(pkt.payload);\n } else {\n wrt.flush(pkt.payload);\n }\n\n return wrt.as_pkt(\n 0x30 | qos | (pkt.dup ? 0x8 : 0) | (pkt.retain ? 0x1 : 0) )\n }\n}\n\nfunction mqtt_encode_puback(ns, mqtt_writer) {\n return ns.puback = ( mqtt_level, pkt ) => {\n let wrt = mqtt_writer.of(pkt);\n\n wrt.u16(pkt.pkt_id);\n if (5 <= mqtt_level) {\n wrt.reason(pkt.reason);\n wrt.props(pkt.props);\n }\n\n return wrt.as_pkt(0x40)\n }\n}\n\nfunction mqtt_encode_subscribe(ns, mqtt_writer) {\n const _enc_subscribe_flags = opts => 0\n | ( opts.qos & 0x3 )\n | ( opts.retain ? 0x4 : 0 )\n | ( (opts.retain_handling & 0x3) << 2 );\n\n return ns.subscribe = ( mqtt_level, pkt ) => {\n let wrt = mqtt_writer.of(pkt);\n\n wrt.u16(pkt.pkt_id);\n if (5 <= mqtt_level)\n wrt.props(pkt.props);\n\n let f0 = _enc_subscribe_flags(pkt);\n for (let each of pkt.topics) {\n if ('string' === typeof each) {\n wrt.utf8(each);\n wrt.u8(f0);\n } else {\n let [topic, opts] =\n Array.isArray(each) ? each\n : [each.topic, each.opts];\n\n wrt.utf8(topic);\n if (undefined === opts) wrt.u8(f0);\n else wrt.flags(opts, _enc_subscribe_flags);\n }\n }\n\n return wrt.as_pkt(0x82)\n }\n}\n\nfunction mqtt_encode_unsubscribe(ns, mqtt_writer) {\n return ns.unsubscribe = ( mqtt_level, pkt ) => {\n let wrt = mqtt_writer.of(pkt);\n\n wrt.u16(pkt.pkt_id);\n if (5 <= mqtt_level)\n wrt.props(pkt.props);\n\n for (let topic of pkt.topics)\n wrt.utf8(topic);\n\n return wrt.as_pkt(0xa2)\n }\n}\n\nfunction mqtt_encode_pingxxx(ns) {\n ns.pingreq = () => new Uint8Array([ 0xc0, 0 ]);\n ns.pingresp = () => new Uint8Array([ 0xd0, 0 ]);\n}\n\nfunction mqtt_encode_disconnect(ns, mqtt_writer) {\n return ns.disconnect = ( mqtt_level, pkt ) => {\n let wrt = mqtt_writer.of(pkt);\n\n if (pkt && 5 <= mqtt_level) {\n if (pkt.reason || pkt.props) {\n wrt.reason(pkt.reason);\n wrt.props(pkt.props);\n }\n }\n\n return wrt.as_pkt(0xe0)\n }\n}\n\nfunction mqtt_encode_auth(ns, mqtt_writer) {\n return ns.auth = ( mqtt_level, pkt ) => {\n if (5 > mqtt_level)\n throw new Error('Auth packets are only available after MQTT 5.x')\n\n let wrt = mqtt_writer.of(pkt);\n\n wrt.reason(pkt.reason);\n wrt.props(pkt.props);\n\n return wrt.as_pkt(0xf0)\n }\n}\n\nconst version = '0.3.2';\n\nconst mqtt_decode_v5 = [\n mqtt_decode_connack,\n mqtt_decode_publish,\n mqtt_decode_puback,\n mqtt_decode_suback,\n mqtt_decode_unsuback,\n mqtt_decode_pingxxx,\n mqtt_decode_disconnect,\n mqtt_decode_auth,\n];\n\n\nconst mqtt_encode_v5 = [\n mqtt_encode_connect,\n mqtt_encode_puback,\n mqtt_encode_publish,\n mqtt_encode_subscribe,\n mqtt_encode_unsubscribe,\n mqtt_encode_pingxxx,\n mqtt_encode_disconnect,\n mqtt_encode_auth,\n];\n\nconst mqtt_reader_v5 = /* #__PURE__ */\n mqtt_reader_info(\n mqtt_reader_v5$1,\n _connack_v5,\n _puback_v5,\n _suback_v5,\n _unsuback_v4,\n _disconnect_v5,\n _auth_v5,\n );\n\n\nconst mqtt_opts_v5 = \n { decode_fns: mqtt_decode_v5,\n mqtt_reader: mqtt_reader_v5,\n encode_fns: mqtt_encode_v5,\n mqtt_writer: mqtt_writer_v5, };\n\nexport { mqtt_opts_v5 as default, mqtt_decode_v5, mqtt_encode_v5, mqtt_opts_v5, mqtt_reader_v5, mqtt_writer_v5, version };\n//# sourceMappingURL=codec_v5_client.js.map\n","export function parse(str, loose) {\n\tif (str instanceof RegExp) return { keys:false, pattern:str };\n\tvar c, o, tmp, ext, keys=[], pattern='', arr = str.split('/');\n\tarr[0] || arr.shift();\n\n\twhile (tmp = arr.shift()) {\n\t\tc = tmp[0];\n\t\tif (c === '*') {\n\t\t\tkeys.push('wild');\n\t\t\tpattern += '/(.*)';\n\t\t} else if (c === ':') {\n\t\t\to = tmp.indexOf('?', 1);\n\t\t\text = tmp.indexOf('.', 1);\n\t\t\tkeys.push( tmp.substring(1, !!~o ? o : !!~ext ? ext : tmp.length) );\n\t\t\tpattern += !!~o && !~ext ? '(?:/([^/]+?))?' : '/([^/]+?)';\n\t\t\tif (!!~ext) pattern += (!!~o ? '?' : '') + '\\\\' + tmp.substring(ext);\n\t\t} else {\n\t\t\tpattern += '/' + tmp;\n\t\t}\n\t}\n\n\treturn {\n\t\tkeys: keys,\n\t\tpattern: new RegExp('^' + pattern + (loose ? '(?=$|\\/)' : '\\/?$'), 'i')\n\t};\n}\n\nvar RGX = /*#__PURE__*/ /(\\/|^)([:*][^/]*?)(\\?)?(?=[/.]|$)/g;\n\n// error if key missing?\nexport function inject(route, values) {\n\treturn route.replace(RGX, (x, lead, key, optional) => {\n\t\tx = values[key=='*' ? 'wild' : key.substring(1)];\n\t\treturn x ? '/'+x : (optional || key=='*') ? '' : '/' + key;\n\t});\n}\n","/*\nclass AbstractTopicRouter ::\n async invoke(pkt, ctx) ::\n add(topic_route, ...args) ::\n remove(topic_route, priority) ::\n clear(priority) ::\n find(topic) :: // optional\n mqtt_topic(topic_route)\n*/\n\nexport const with_topic_router = mqtt_topic_router =>\n MQTTKlass => class extends MQTTKlass ::\n static _aliases() ::\n return super._aliases() +\n ' sub_topic:subscribe_topic unsub_topic:unsubscribe_topic'\n\n _init_router(opt, self, target) ::\n this._subs = []\n let router = this.router = target.router =\n mqtt_topic_router(opt, this, target)\n return router?.invoke\n\n on_sub(suback, pkt) ::\n suback.pkt = pkt\n this._subs.push(suback)\n return suback\n subs_settled() ::\n return Promise.allSettled @\n this._subs.splice(0,Infinity)\n\n // alias: sub_topic\n subscribe_topic(topic_route, ...args) ::\n let router = this.router\n router.add @ topic_route, true, args.pop() // handler\n let topic = router.mqtt_topic(topic_route)\n this.subscribe @ topic, ...args // ex, topic_prefix\n return this // fluent api -- return this and track side effects\n\n // alias: unsub_topic\n unsubscribe_topic(topic_route, ...args) ::\n let router = this.router\n router.remove @ topic_route, true\n let topic = router.mqtt_topic(topic_route)\n return this.unsubscribe @ topic, ...args // topic_prefix\n\n // add topic handlers without corresponding subscribe packet\n on_topic(...args) ::\n this.router.add(...args)\n return this\n\n","// Use [regexparam][] for url-like topic parsing\n// [regexparam]: https://github.com/lukeed/regexparam\n\nimport {parse as _rxp_parse} from 'regexparam'\nimport {with_topic_router} from './with_topic_router.jsy'\n\nexport const with_topic_path_router = /* #__PURE__ */\n with_topic_router(mqtt_topic_path_router)\n\n\nconst mqtt_topic = topic_route =>\n topic_route\n .replace @ /[*].*$/, '#'\n .replace @ /:\\w[^\\/]*/g, '+'\n\n/* From the [MQTT v5 Spec](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Topic_Names_and)\n4.7.1.2 Multi-level wildcard -- (‘#’ U+0023)\n... MUST be specified either on its own or following a topic level separator.\nIn either case it MUST be the last character specified in the Topic Filter\n\n4.7.1.3 Single-level wildcard -- (‘+’ U+002B)\n...it MUST occupy an entire level of the filter.\n*/\n\nexport const as_topic_path = (topic_route, id) => @\n id=1,\n topic_route\n .replace @ /#$/, '*' // replace MQTT '#' multi-level wildcard at end\n .replace @ /\\+/g, () => `:$${id++}` // replace MQTT '+' single-level wildcards\n\nfunction _ignore(pkt, params, ctx) :: ctx.done = true\n\nfunction mqtt_topic_path_router() ::\n let pri_lsts = [[],[]], rm = Symbol()\n let find = topic => _routes_iter(pri_lsts, topic)\n\n // return duck-type compatible with AbstractTopicRouter in ./with_topic_router\n return @{} find, mqtt_topic,\n add(topic_route, ...args) ::\n let fn = args.pop()\n let priority = args.pop()\n\n if 'function' !== typeof fn ::\n if fn :: throw new TypeError()\n fn = _ignore\n\n let rte = _rxp_parse @ as_topic_path @ topic_route\n\n rte.key = topic_route\n rte.tgt = fn\n pri_lsts[priority ? 0 : 1].push(rte)\n return this\n\n remove(topic_route, priority) ::\n let lst = pri_lsts[priority ? 0 : 1]\n return _route_remove([lst], topic_route)\n\n clear(priority) ::\n pri_lsts[priority ? 0 : 1] = []\n if null == priority ::\n pri_lsts[1] = [] // null clears both lists\n\n async invoke(pkt, ctx) ::\n ctx.idx = 0\n ctx.rm = rm\n\n for let [fn, params] of find(pkt.topic) ::\n let res = await fn(pkt, params, ctx)\n\n if rm === res ::\n _route_remove(pri_lsts, fn)\n\n if ctx.done ::\n break\n else ctx.idx++\n\n if 1 === pkt.qos ::\n await ctx.mqtt.puback(pkt)\n\n\nfunction * _routes_iter(all_route_lists, topic) ::\n topic = topic.replace(/^[\\/]*/, '/') // ensure '/' prefix for regexparam library\n for let route_list of all_route_lists ::\n for let {keys, pattern, tgt} of route_list ::\n let match = pattern.exec(topic)\n if match ::\n let params = keys\n ? keys.reduce @\n (o, k, i) => (o[k] = match[1+i], o)\n {}\n : match.groups ?? match\n yield [tgt, params]\n\n\nfunction _route_remove(all_route_lists, query) ::\n let fn_match = route => @\n route===query\n || route.tgt===query\n || route.key===query\n for let lst of all_route_lists ::\n let i = lst.findIndex(fn_match)\n if 0 <= i ::\n lst.splice(i,1)\n return true\n return false\n\n","/*\nexport function decode_varint_loop(u8, i=0) {\n let i0 = i\n let shift = 0, n = (u8[i] & 0x7f)\n while ( 0x80 & u8[i++] )\n n |= (u8[i] & 0x7f) << (shift += 7)\n\n return [n, i, i0]\n}\n*/\n\n\nfunction decode_varint(u8, i=0) {\n let i0 = i;\n // unrolled for a max of 4 chains\n let n = (u8[i] & 0x7f) << 0;\n if ( 0x80 & u8[i++] ) {\n n |= (u8[i] & 0x7f) << 7;\n if ( 0x80 & u8[i++] ) {\n n |= (u8[i] & 0x7f) << 14;\n if ( 0x80 & u8[i++] ) {\n n |= (u8[i] & 0x7f) << 21;\n }\n }\n }\n return [n, i, i0]\n}\n\nfunction mqtt_raw_dispatch(opt) {\n let u8 = new Uint8Array(0);\n return u8_buf => {\n u8 = 0 === u8.byteLength\n ? u8_buf : _u8_join(u8, u8_buf);\n\n let res = [];\n while (1) {\n let [len_body, len_vh] = decode_varint(u8, 1);\n let len_pkt = len_body + len_vh;\n\n if ( u8.byteLength < len_pkt )\n return res\n\n let b0 = u8[0];\n let u8_body = 0 === len_body ? null\n : u8.subarray(len_vh, len_pkt);\n\n u8 = u8.subarray(len_pkt);\n\n let pkt = opt.decode_pkt(b0, u8_body, opt);\n if (null != pkt)\n res.push( pkt );\n }\n }\n}\n\nfunction _u8_join(a, b) {\n let alen = a.byteLength, r = new Uint8Array(alen + b.byteLength);\n r.set(a, 0);\n r.set(b, alen);\n return r\n}\n\nconst version = '0.3.2';\n\nconst _pkt_types = ['~', 'connect', 'connack', 'publish', 'puback', 'pubrec', 'pubrel', 'pubcomp', 'subscribe', 'suback', 'unsubscribe', 'unsuback', 'pingreq', 'pingresp', 'disconnect', 'auth'];\n\nfunction mqtt_pkt_ctx(mqtt_level, opts, pkt_ctx) {\n pkt_ctx = {\n __proto__: pkt_ctx || opts.pkt_ctx,\n mqtt_level,\n get hdr() { return this.b0 & 0xf },\n get id() { return this.b0 >>> 4 },\n get type() { return _pkt_types[this.b0 >>> 4] },\n };\n\n let op, _decode_by_id=[], _encode_by_type={};\n for (op of opts.encode_fns)\n op(_encode_by_type, opts.mqtt_writer);\n for (op of opts.decode_fns)\n op(_decode_by_id, opts.mqtt_reader);\n\n return {\n pkt_ctx,\n\n encode_pkt(type, pkt) {\n return _encode_by_type[type]( mqtt_level, pkt ) },\n\n decode_pkt(b0, u8_body) {\n let fn_decode = _decode_by_id[b0>>>4] || _decode_by_id[0];\n return fn_decode?.({__proto__: this.pkt_ctx, b0}, u8_body) },\n\n mqtt_stream() {\n let self = { __proto__: this, pkt_ctx: { __proto__: pkt_ctx } };\n self.pkt_ctx._base_ = self.pkt_ctx;\n self.decode = mqtt_raw_dispatch(self);\n return self\n },\n }\n}\n\nexport { mqtt_pkt_ctx as default, mqtt_pkt_ctx, version };\n//# sourceMappingURL=codec_bind.js.map\n","const is_ao_iter = g =>\n null != g[Symbol.asyncIterator];\n\nconst is_ao_fn = v_fn =>\n 'function' === typeof v_fn\n && ! is_ao_iter(v_fn);\n\n\nconst ao_done = Object.freeze({ao_done: true});\nconst ao_check_done = err => {\n if (err !== ao_done && err && !err.ao_done) {\n throw err}\n return true};\n\n\nconst _ag_copy = ({g_in}, ag_out) =>(\n undefined === g_in ? ag_out :(\n ag_out.g_in = g_in\n , ag_out) );\n\nfunction ao_when_map(ao_fn_v, db=new Map(), reject_deleted) {\n let idx_del = reject_deleted ? 2 : 1;\n return {\n has: k => db.has(k)\n , get: k => at(k)[0] // promise of deferred\n , set: define, define\n , delete(k) {\n let b, e = db.get(k);\n if (b = (undefined !== e)) {\n db.delete(k);\n e[idx_del](); }// e.g. resolve(undefined)\n return b}\n , clear() {\n // \"delete\" remaining on next promise tick\n p = Promise.resolve();\n for (let e of db.values()) {\n p.then(e[idx_del]); }// e.g. resolve (undefined)\n\n db.clear(); } }// clear db\n\n function at(k) {\n let e = db.get(k);\n if (undefined === e) {\n db.set(k, e=ao_fn_v());}\n return e}\n\n function define(k, v) {\n let [p, fn_fulfill] = at(k);\n fn_fulfill(v); // e.g. deferred's resolve(v) or fence's resume(v)\n return p } }// promise of deferred\n\nfunction ao_defer_ctx(as_res = (...args) => args) {\n let y,n,_pset = (a,b) => { y=a, n=b; };\n return p =>(\n p = new Promise(_pset)\n , as_res(p, y, n)) }\n\nconst ao_defer_v = /* #__PURE__ */\n ao_defer_ctx();\n\nconst ao_defer = /* #__PURE__ */\n ao_defer_ctx((p,y,n) =>\n ({promise: p, resolve: y, reject: n}));\n\nconst ao_defer_when = db =>\n ao_when_map(ao_defer_v, db);\n\nasync function ao_run(gen_in) {\n for await (let v of gen_in) {} }\n\n\nasync function ao_drive(gen_in, gen_tgt, close_tgt) {\n if (is_ao_fn(gen_tgt)) {\n gen_tgt = gen_tgt();\n gen_tgt.next();}\n\n for await (let v of gen_in) {\n let {done} = await gen_tgt.next(v);\n if (done) {break} }\n\n if (close_tgt) {\n await gen_tgt.return();} }\n\n\n\nfunction * iter(iterable) {\n return (yield * iterable)}\n\nfunction ao_step_iter(iterable, or_more) {\n iterable = ao_iter(iterable);\n return {\n async * [Symbol.asyncIterator]() {\n do {\n let {value, done} = await iterable.next();\n if (done) {return value}\n yield value;}\n while (or_more) } } }\n\n\nfunction step_iter(iterable, or_more) {\n iterable = iter(iterable);\n return {\n *[Symbol.iterator]() {\n do {\n let {value, done} = iterable.next();\n if (done) {return value}\n yield value;}\n while (or_more) } } }\n\n\nasync function * ao_iter(iterable) {\n return (yield * iterable)}\n\n\nasync function * _ao_iter_fenced(iterable, f_gate, initial=false) {\n let f = true === initial ? f_gate.fence() : initial;\n for await (let v of iterable) {\n await f;\n yield v;\n f = f_gate.fence();} }\n\n\nconst ao_iter_fenced = (...args) =>\n _ag_copy(args[0], _ao_iter_fenced(...args));\n\nfunction ao_fence_o(proto) {\n let r = ao_fence_v();\n return {__proto__: proto,\n fence: r[0], resume: r[1], abort: r[2]} }\n\nfunction ao_fence_v() {\n let x, p=0;\n let fence = () => ( 0!==p ? p : p=(x=ao_defer_v())[0] );\n let resume = ans => { if (0!==p) { p=0; x[1](ans); }};\n let abort = err => { if (0!==p) { p=0; x[2](err || ao_done); }};\n return [fence, resume, abort] }\n\n\nconst ao_fence_when = db =>\n ao_when_map(ao_fence_v, db);\n\nasync function * ao_iter_fence(fence) {\n try {\n while (1) {\n let r = await fence();\n if (undefined !== r) {\n yield r;} } }\n catch (err) {\n ao_check_done(err);} }\n\n\n\nconst _ao_fence_core_api_ = {\n ao_check_done\n\n, // copyable fence fork api\n [Symbol.asyncIterator]() {\n return this.ao_fork()}\n\n, ao_fork() {\n let ag = ao_iter_fence(this.fence);\n let {xemit} = this;\n return xemit ? xemit(ag) : ag} };\n\n\nfunction ao_fence_fn(tgt) {\n let f = ao_fence_v();\n if (undefined === tgt) {tgt = f[0];}\n tgt.fence = Object.assign(tgt, _ao_fence_core_api_);\n return f}\n\n\nconst ao_fence_obj = \n () => ao_fence_o(_ao_fence_core_api_);\n\n\nfunction as_iter_proto(resume, abort, done = true) {\n return {\n next: v =>({value: resume(v), done})\n , return: () =>({value: abort(ao_done), done})\n , throw: (err) =>({value: abort(err), done}) } }\n\nfunction ao_split(iterable) {\n let f_out = ao_fence_obj();\n f_out.when_run = _ao_run(iterable, f_out);\n f_out.g_in = iterable.g_in;\n return f_out}\n\nasync function _ao_run(iterable, f_tap) {\n try {\n for await (let v of iterable) {\n f_tap.resume(v);} }\n\n catch (err) {\n ao_check_done(err);}\n\n finally {\n f_tap.abort();} }\n\n\nfunction ao_tap(iterable) {\n let f_tap = ao_fence_obj();\n let ag_tap = _ao_tap(iterable, f_tap);\n ag_tap.f_tap = ag_tap.f_out = f_tap;\n ag_tap.g_in = f_tap.g_in = iterable.g_in;\n return [f_tap, ag_tap]}\n\nasync function * _ao_tap(iterable, f_tap) {\n try {\n for await (let v of iterable) {\n f_tap.resume(v);\n yield v;} }\n\n catch (err) {\n ao_check_done(err);}\n\n finally {\n f_tap.abort();} }\n\nfunction ao_track(proto, reset_v) {\n let r = ao_track_v(reset_v);\n return {__proto__: proto,\n tip: () => r[0] // or fence(false)\n , resume: r[1]\n , abort: r[2]\n , fence: r[3]\n , ftr: () => r[4] } }// or fence(true)\n\nfunction ao_track_v(reset_v = ()=>ao_defer_v()) {\n // like ao_defer_v() and resetable like ao_fence_v()\n let r; // r is the current / tracked value defined below\n let x=reset_v(); // x is the future/deferred\n\n let p; // p is the rachet memory for the fence() closure\n // similar to fence.fence() while also tracking the last completed deferred\n let fence = ftr =>(\n false===ftr ? r[0] : true===ftr ? x[0] : // non-racheting queries\n p===x[0] || p===r[0] ? p=x[0] : p=r[0] );// racheting query\n\n // like fence.resume, resolves the future/deferred x[0]; then resets x future/deferred\n let resume = ans => xz(x[1], ans);\n\n // like fence.abort, rejects the future/deferred x[0]; then resets x future/deferred\n let abort = err => xz(x[2], err || ao_done);\n\n // match ao_defer_v() of [current promise, resolve, reject] with additional [fence, ftr promise]\n return r = [ p=x[0], resume, abort, fence, x[0] ]\n\n function xz(xf, v) {\n // 1. update current / tip slot: r[0] = x[0]\n // 2. re-prime fence: x = reset_v(r[0]]\n x = reset_v(r[0] = x[0]);\n r[4] = x[0]; // update public ftr slot\n xf(v); } }// resume/abort r[0] current / tip\n\nconst ao_track_when = db =>\n ao_when_map(ao_track_v, db);\n\nconst ao_fence_out = /* #__PURE__ */ ao_fence_o.bind(null,{\n __proto__: _ao_fence_core_api_\n\n, [Symbol.asyncIterator]() {\n return this.ao_bound()}\n, ao_bound() {\n throw new Error('ao_fence_out not bound')}\n, _ao_many() {\n throw new Error('ao_fence_out consumed; consider .ao_fork() or .allow_many()')}\n\n, allow_many() {\n let {ao_fork, ao_bound, _ao_many} = this;\n if (_ao_many === ao_bound) {\n this.ao_bound = ao_fork;}\n this._ao_many = ao_fork;\n this.allow_many = () => this;\n return this}\n\n, ao_run() {\n let {when_run} = this;\n if (undefined === when_run) {\n this.when_run = when_run =\n ao_run(this.ao_bound()); }\n return when_run}\n\n, bind_gated(f_gate) {\n let ag_out = this._ao_gated(f_gate);\n ag_out.f_out = this;\n ag_out.g_in = this.g_in;\n this.ao_bound = (() => {\n let {xemit, _ao_many} = this;\n this.ao_bound = _ao_many;\n return xemit\n ? _ag_copy(ag_out, xemit(ag_out))\n : ag_out});\n\n return this}\n\n, ao_gated(f_gate) {\n return this.bind_gated(f_gate).ao_bound()}\n\n, _ao_gated(f_gate) {return aog_gated(this, f_gate)} } );\n\n\nasync function * aog_gated(f_out, f_gate) {\n try {\n f_out.resume();\n while (1) {\n let v = await f_gate.fence();\n yield v;\n f_out.resume(v);} }\n catch (err) {\n ao_check_done(err);}\n finally {\n f_out.abort();\n if (f_gate.abort) {\n f_gate.abort();} } }\n\nconst ao_feeder = ({g_in}) => v => g_in.next(v);\nconst ao_feeder_v = ({g_in}) => (...args) => g_in.next(args);\n\n\nfunction aog_fence_xf(xinit, ...args) {\n let f_in = ao_fence_o(), f_out = ao_fence_o();\n let g_in = xinit(f_in, f_out, ...args);\n g_in.next();\n\n let res = aog_gated(f_out, f_in);\n res.fence = f_out.fence;\n res.g_in = g_in;\n return res}\n\nfunction ao_fence_iter(...args) {\n return aog_fence_xf(aog_iter, ...args)}\n\nfunction ao_fence_sink(...args) {\n return aog_fence_xf(aog_sink, ...args)}\n\n\nfunction * aog_iter(f_in, f_gate, xf) {\n try {\n while (1) {\n let tip = yield;\n if (undefined !== xf) {\n tip = (xf.next(tip)).value;}\n f_in.resume(tip);} }\n\n catch (err) {\n ao_check_done(err);}\n finally {\n f_in.abort();\n if (undefined !== xf) {\n xf.return();} } }\n\n\nasync function * aog_sink(f_in, f_gate, xf) {\n try {\n while (1) {\n {\n let tip = yield;\n if (undefined !== xf) {\n tip = (await xf.next(tip)).value;}\n f_in.resume(tip);}\n\n if (undefined !== f_gate) {\n await f_gate.fence();} } }\n\n catch (err) {\n ao_check_done(err);}\n finally {\n f_in.abort();\n if (undefined !== xf) {\n xf.return();} } }\n\nconst ao_xform = ns_gen => ao_fence_in().ao_xform(ns_gen);\nconst ao_fold = ns_gen => ao_fence_in().ao_fold(ns_gen);\nconst ao_queue = ns_gen => ao_fence_in().ao_queue(ns_gen);\n\nconst ao_fence_in = /* #__PURE__ */ ao_fence_o.bind(null,{\n __proto__: _ao_fence_core_api_\n\n, ao_fold(ns_gen) {return this.ao_xform({xinit: aog_iter, ... ns_gen})}\n, ao_queue(ns_gen) {return this.ao_xform({xinit: aog_sink, ... ns_gen})}\n\n, aog_iter(xf) {return aog_iter(this)}\n, aog_sink(f_gate, xf) {return aog_sink(this, f_gate, xf)}\n\n, ao_xform(ns_gen={}) {\n let f_out = ao_fence_out();\n\n let {xemit, xinit, xrecv} =\n is_ao_fn(ns_gen)\n ? ns_gen(this, f_out)\n : ns_gen;\n\n if (undefined !== xemit) {\n f_out.xemit = xemit;}\n\n if (! xinit) {xinit = aog_sink;}\n let res = xinit(this, f_out,\n xrecv ? _xf_gen.create(xrecv) : undefined);\n\n let g_in = f_out.g_in = res.g_in || res;\n return res !== g_in\n ? res // res is an output generator\n :(// res is an input generator\n g_in.next(),\n f_out.bind_gated(this)) }\n\n, // ES2015 generator api\n next(v) {return {value: this.resume(v), done: true}}\n, return() {return {value: this.abort(ao_done), done: true}}\n, throw(err) {return {value: this.abort(err), done: true}} } );\n\n\nconst _xf_gen = {\n create(xf) {\n let self = {__proto__: this};\n self.xg = xf(self.xf_inv());\n return self}\n\n, *xf_inv() {\n while (1) {\n let tip = this._tip;\n if (this === tip) {\n throw new Error('Underflow')}\n else this._tip = this;\n\n yield tip;} }\n\n, next(v) {\n this._tip = v;\n return this.xg.next(v)}\n\n, return() {this.xg.return();}\n, throw() {this.xg.throw();} };\n\nfunction ao_push_stream(as_vec) {\n let q=[], [fence, resume, abort] = ao_fence_v();\n let stream = ao_stream_fence(fence);\n\n return Object.assign(stream,{\n stream\n , abort\n , push(... args) {\n if (true === as_vec) {\n q.push(args);}\n else q.push(... args);\n\n resume(q);\n return q.length} } ) }\n\n\nfunction ao_stream_fence(fence) {\n let [when_done, res_done, rej_done] = ao_defer_v();\n let res = _ao_stream_fence(fence, res_done, rej_done);\n res.when_done = when_done;\n return res}\n\n\nasync function * _ao_stream_fence(fence, resolve, reject) {\n try {\n let p_ready = fence();\n while (1) {\n let batch = await p_ready;\n batch = batch.splice(0, batch.length);\n\n p_ready = fence();\n yield * batch;} }\n\n catch (err) {\n if (!err || err.ao_done) {\n resolve(true);}\n else reject(err);} }\n\nfunction ao_interval(ms=1000) {\n let [_fence, _resume, _abort] = ao_fence_fn();\n let tid = setInterval(_resume, ms, 1);\n if (tid.unref) {tid.unref();}\n _fence.stop = (() => {\n tid = clearInterval(tid);\n _abort();});\n\n return _fence}\n\n\nfunction ao_timeout(ms=1000) {\n let tid, [_fence, _resume] = ao_fence_fn(timeout);\n return timeout\n\n function timeout() {\n tid = setTimeout(_resume, ms, 1);\n if (tid.unref) {tid.unref();}\n return _fence()} }\n\n\nfunction ao_debounce(ms=300, ao_iterable) {\n let tid, [_fence, _resume] = ao_fence_fn();\n\n _fence.when_run = ((async () => {\n try {\n let p;\n for await (let v of ao_iterable) {\n clearTimeout(tid);\n p = _fence();\n tid = setTimeout(_resume, ms, v);}\n\n await p;}\n catch (err) {\n ao_check_done(err);} })());\n\n return _fence}\n\n\nasync function * ao_times(ao_iterable) {\n let ts0 = Date.now();\n for await (let v of ao_iterable) {\n yield Date.now() - ts0;} }\n\nfunction ao_dom_animation() {\n let tid, [_fence, _resume] = ao_fence_fn(raf);\n raf.stop = (() => {\n tid = cancelAnimationFrame(tid);\n raf.done = true;});\n\n return raf\n\n function raf() {\n tid = requestAnimationFrame(_resume);\n return _fence()} }\n\nconst _evt_init = Promise.resolve({type:'init'});\nfunction ao_dom_listen(self=ao_queue()) {\n return _bind.self = self ={\n __proto__: self\n , with_dom(dom, fn) {\n return dom.addEventListener\n ? _ao_with_dom(_bind, fn, dom)\n : _ao_with_dom_vec(_bind, fn, dom)} }\n\n function _bind(dom, fn_evt, fn_dom) {\n return evt => {\n let v = fn_evt\n ? fn_evt(evt, dom, fn_dom)\n : fn_dom(dom, evt);\n\n if (null != v) {\n self.g_in.next(v);} } } }\n\n\nfunction _ao_with_dom(_bind, fn, dom) {\n let _on_evt;\n if (is_ao_fn(fn)) {\n _evt_init.then(\n _on_evt = _bind(dom, void 0, fn)); }\n\n return {\n __proto__: _bind.self\n , listen(...args) {\n let opt, evt_fn = _on_evt;\n\n let last = args.pop();\n if ('function' === typeof last) {\n evt_fn = _bind(dom, last, _on_evt);\n last = args.pop();}\n\n if ('string' === typeof last) {\n args.push(last);}\n else opt = last;\n\n for (let evt of args) {\n dom.addEventListener(\n evt, evt_fn, opt); }\n\n return this} } }\n\n\nfunction _ao_with_dom_vec(_bind, fn, ectx_list) {\n ectx_list = Array.from(ectx_list,\n dom => _ao_with_dom(_bind, fn, dom));\n\n return {\n __proto__: _bind.self\n , listen(...args) {\n for (let ectx of ectx_list) {\n ectx.listen(...args);}\n return this} } }\n\nexport { _ag_copy, _ao_fence_core_api_, _ao_iter_fenced, _ao_run, _ao_tap, ao_check_done, ao_debounce, ao_defer, ao_defer_ctx, ao_defer_v, ao_defer_when, ao_dom_animation, ao_dom_listen, ao_done, ao_drive, ao_feeder, ao_feeder_v, ao_fence_fn, ao_fence_in, ao_fence_iter, ao_fence_o, ao_fence_obj, ao_fence_out, ao_fence_sink, ao_fence_v, ao_fence_when, ao_fold, ao_interval, ao_iter, ao_iter_fence, ao_iter_fenced, ao_push_stream, ao_queue, ao_run, ao_split, ao_step_iter, ao_stream_fence, ao_tap, ao_timeout, ao_times, ao_track, ao_track_v, ao_track_when, ao_defer_when as ao_when, ao_xform, aog_fence_xf, aog_gated, aog_iter, aog_sink, as_iter_proto, is_ao_fn, is_ao_iter, iter, step_iter };\n//# sourceMappingURL=roap.mjs.map\n","import { ao_defer_v } from 'roap'\nexport { ao_defer_v }\n\nexport function _mqtt_conn(client, [on_mqtt, pkt_future]) ::\n let _q_init = ao_defer_v(), _q_ready = ao_defer_v()\n let _send_ready = async (...args) => (await _q_ready[0])(...args)\n let _send_mqtt_pkt, _has_connected\n client._send = _send_ready\n\n return @{}\n async when_ready() :: await _q_ready[0]\n\n ping: _ping_interval @=> _send_mqtt_pkt?.('pingreq')\n\n reset(err) ::\n if ! _send_mqtt_pkt :: return\n\n if err ::\n _q_init[2](err)\n\n _send_mqtt_pkt = null\n _q_init = ao_defer_v()\n client._send = _send_ready\n\n // call client.on_conn_reset in next promise microtask\n client.conn_emit('on_disconnect', false===err, err)\n\n async send_connect(... args) ::\n if ! _send_mqtt_pkt ::\n await _q_init[0] // _send_mqtt_pkt is set before fulfilled\n\n // await connack response\n let res = await _send_mqtt_pkt(...args)\n if 0 == res[0].reason ::\n _has_connected = true\n // resolve _q_ready[0] with _send_mqtt_pkt closure\n _q_ready[1](client._send = _send_mqtt_pkt)\n _q_ready = ao_defer_v()\n client.conn_emit('on_ready')\n\n return res\n\n is_set: @=> !! _send_mqtt_pkt\n set(mqtt_ctx, send_u8_pkt) ::\n if _send_mqtt_pkt ::\n throw new Error('Already connected')\n\n mqtt_ctx = mqtt_ctx.mqtt_stream()\n let sess_ctx = {mqtt: client}\n let on_mqtt_chunk = u8_buf =>\n on_mqtt(mqtt_ctx.decode(u8_buf), sess_ctx)\n\n _send_mqtt_pkt = async (type, pkt, key) => ::\n let res = undefined !== key\n ? pkt_future(key) : true\n\n await send_u8_pkt @\n mqtt_ctx.encode_pkt(type, pkt)\n\n return res\n\n _q_init[1](_send_mqtt_pkt) // resolve _q_init with _send_mqtt_pkt closure\n\n // call client.on_live in next promise microtask\n client.conn_emit('on_live', _has_connected)\n return on_mqtt_chunk\n\n\nfunction _ping_interval(send_ping) ::\n let tid\n return @\\ td ::\n tid = clearInterval(tid)\n if td ::\n tid = setInterval(send_ping, 1000 * td)\n #IF PLAT_DENO\n // ensure the interval allows the Deno event loop to exit\n Deno.unrefTimer(tid)\n #ELSE\n // ensure the interval allows the NodeJS event loop to exit\n tid.unref?.()\n return true\n\n","\nexport const _mqtt_cmdid_dispatch = @{}\n create(target) ::\n return @{} __proto__: this, target, hashbelt: [new Map()]\n\n bind_pkt_future(_pkt_id=100) ::\n let {hashbelt} = this\n\n let _tmp_ // use _tmp_ to reuse _by_key closure\n let _by_key = answer_monad =>\n hashbelt[0].set(_tmp_, answer_monad)\n\n return @\\ pkt_or_key ::\n if 'string' === typeof pkt_or_key ::\n _tmp_ = pkt_or_key\n else ::\n _pkt_id = (_pkt_id + 1) & 0xffff\n _tmp_ = pkt_or_key.pkt_id = _pkt_id\n\n return new Promise(_by_key)\n\n answer(key, pkt) ::\n for let map of this.hashbelt ::\n let answer_monad = map.get(key)\n if undefined !== answer_monad ::\n map.delete(key)\n\n answer_monad([pkt, /*err*/]) // option/maybe monad\n return true\n return false\n\n rotate_belt(n) ::\n let {hashbelt} = this\n hashbelt.unshift @ new Map()\n for let old of hashbelt.splice(n || 5) ::\n for let answer_monad of old.values() ::\n answer_monad([/*pkt*/, 'expired']) // option/maybe monad\n\n cmdids: @!\n return @[]\n @=>{} // 0x0 reserved\n by_evt // 0x1 connect\n by_type // 0x2 connack\n by_evt // 0x3 publish\n by_id // 0x4 puback\n by_id // 0x5 pubrec\n by_id // 0x6 pubrel\n by_id // 0x7 pubcomp\n by_evt // 0x8 subscribe\n by_id // 0x9 suback\n by_evt // 0xa unsubscribe\n by_id // 0xb unsuback\n by_type // 0xc pingreq\n by_type // 0xd pingresp\n by_evt // 0xe disconnect\n by_type // 0xf auth\n\n\n function by_id(disp, pkt) ::\n disp.answer @ pkt.pkt_id, pkt\n\n function by_type(disp, pkt, ctx) ::\n disp.answer @ pkt.type, pkt\n by_evt(disp, pkt, ctx)\n\n async function by_evt({target}, pkt, ctx) ::\n let fn = target[`mqtt_${pkt.type}`]\n || target.mqtt_pkt\n\n await fn?.call(target, pkt, ctx)\n\n","import {_mqtt_cmdid_dispatch} from './_cmdid_dispatch.jsy'\n\n/*\non_mqtt_type = {\n mqtt_auth(pkt, ctx) ::\n mqtt_connect(pkt, ctx) ::\n mqtt_connack(pkt, ctx) ::\n mqtt_disconnect(pkt, ctx) ::\n\n mqtt_publish(pkt, ctx)\n mqtt_subscribe(pkt, ctx) ::\n mqtt_unsubscribe(pkt, ctx) ::\n\n mqtt_pingreq(pkt, ctx) ::\n mqtt_pingresp(pkt, ctx) ::\n}\n*/\n\nexport function _mqtt_dispatch(opt, target) ::\n let _disp_ = _mqtt_cmdid_dispatch.create(target)\n let { cmdids } = _disp_\n\n // default rotate at 1s across 5 buckets\n let { td: rotate_td=1000, n: rotate_n=5 } =\n opt && opt.rotate || {}\n\n let rotate_ts = rotate_td + Date.now()\n\n return @[] on_mqtt,\n _disp_.bind_pkt_future()\n\n function on_mqtt(pkt_list, ctx) ::\n for let pkt of pkt_list ::\n cmdids[pkt.id] @ _disp_, pkt, ctx\n\n if Date.now() > rotate_ts ::\n _disp_.rotate_belt(rotate_n)\n rotate_ts = rotate_td + Date.now()\n\n","import {_mqtt_conn} from './_conn.jsy'\nimport {_mqtt_dispatch} from './_dispatch.jsy'\n\nexport class MQTTError extends Error ::\n constructor(mqtt_pkt, reason=mqtt_pkt.reason) ::\n super(`[0x${reason.toString(16)}] ${reason.reason}`)\n this.mqtt_pkt = mqtt_pkt\n this.reason = reason\n\nexport class MQTTBase ::\n constructor(opt={}) ::\n this.with(opt)\n this._conn_ = _mqtt_conn @ this,\n this._init_dispatch(opt, this)\n\n with(fns_ns) ::\n for let [k,v] of Object.entries(fns_ns) ::\n if 'function' === typeof v :: this[k] = v\n return this\n\n async conn_emit(evt, arg, err_arg) ::\n this.log_conn?.(evt, arg, err_arg)\n try ::\n let fn_evt = this[await evt] // microtask break using `await evt`\n if fn_evt ::\n await fn_evt.call(this, this, arg, err_arg)\n else if err_arg :: throw err_arg\n catch err ::\n this.on_error(err, evt)\n\n on_error(err, evt) ::\n console.warn @ '[[u8-mqtt error: %s]]', evt, err\n\n // Handshaking Packets\n\n async connect(pkt={}) ::\n let cid = pkt.client_id || this.client_id\n if 'string' !== typeof cid ::\n // see init_client_id implementation in core.jsy\n pkt.client_id = cid = this.init_client_id(cid)\n this.client_id = cid\n\n if null == pkt.keep_alive ::\n pkt.keep_alive = 60\n\n let res = await this._conn_\n .send_connect('connect', pkt, 'connack')\n\n if 0 != res[0].reason ::\n throw new this.MQTTError(res[0])\n\n // TODO: merge with server's keep_alive frequency\n this._conn_.ping(pkt.keep_alive)\n return res\n\n async disconnect(pkt={}) ::\n let res = await this._send('disconnect', pkt)\n this._conn_.reset(false)\n return res\n\n auth(pkt={}) ::\n return this._send('auth', pkt, 'auth')\n\n ping() :: return this._send('pingreq', null, 'pingresp')\n puback({pkt_id}) :: return this._send('puback', {pkt_id})\n\n // alias: sub\n subscribe(pkt, ex, topic_prefix) ::\n pkt = _as_topics(pkt, ex, topic_prefix)\n let suback = this._send('subscribe', pkt, pkt)\n return this.on_sub?.(suback, pkt) ?? suback\n\n // alias: unsub\n unsubscribe(pkt, ex, topic_prefix) ::\n pkt = _as_topics(pkt, ex, topic_prefix)\n return this._send('unsubscribe', pkt, pkt)\n\n\n post(topic, payload, pub_opt) :: // qos:0\n return this.pub({topic, payload, qos:0}, pub_opt)\n send(topic, payload, pub_opt) :: // qos:1\n return this.pub({topic, payload, qos:1}, pub_opt)\n store(topic, payload, pub_opt) :: // qos:1, retain: 1\n return this.pub({topic, payload, qos:1, retain: 1}, pub_opt)\n\n // alias: json_post\n obj_post(topic, msg, pub_opt) :: // qos:0\n return this.pub({topic, msg, arg: 'msg', qos:0}, pub_opt)\n // alias: json_send\n obj_send(topic, msg, pub_opt) :: // qos:1\n return this.pub({topic, msg, arg: 'msg', qos:1}, pub_opt)\n // alias: json_store\n obj_store(topic, msg, pub_opt) :: // qos:1, retain: 1\n return this.pub({topic, msg, arg: 'msg', qos:1, retain: 1}, pub_opt)\n\n // alias: publish -- because 'pub' is shorter for semantic aliases above\n async pub(pkt, pub_opt) ::\n if undefined === pkt.payload ::\n if 'function' === typeof pub_opt ::\n pub_opt = {fn_encode: pub_opt}\n\n let {msg} = pkt\n switch typeof msg ::\n case 'function':\n pub_opt = {...pub_opt, fn_encode: msg}\n // flow into 'undefined' case\n case 'undefined':\n // return a single-value closure to publish packets\n return v => this.pub({...pkt, [pkt.arg || 'payload']: v}, pub_opt)\n\n // Encode payload from msg; fn_encode allows alternative to JSON.stringify\n let {fn_encode} = pub_opt || {}\n pkt.payload = fn_encode\n ? await fn_encode(msg)\n : JSON.stringify(msg)\n\n if pub_opt ::\n if pub_opt.props ::\n pkt.props = pub_opt.props\n if pub_opt.xform ::\n pkt = pub_opt.xform(pkt) || pkt\n\n return this._send @ 'publish', pkt,\n pkt.qos ? pkt : void 0 // key\n\n\n // Internal API\n\n /* async _send(type, pkt) -- provided by _conn_ and transport */\n\n _init_dispatch(opt) ::\n this.constructor?._once_()\n let target = @{} __proto__: opt.on_mqtt_type\n target.mqtt_publish ||=\n this._init_router?.(opt, this, target)\n return _mqtt_dispatch(this, target)\n\n static _aliases() ::\n return ' publish:pub sub:subscribe unsub:unsubscribe json_post:obj_post json_send:obj_send json_store:obj_store'\n\n static _once_(self=this) ::\n self._once_ = _=>0\n let p = self.prototype\n p.MQTTError = MQTTError\n for let alias of self._aliases().split(/\\s+/) ::\n alias = alias.split(':')\n let fn = alias[1] && p[alias[1]]\n if fn :: p[alias[0]] = fn\n\n\nfunction _as_topics(pkt, ex, topic_prefix) ::\n if ex?.trim :: // string\n topic_prefix = ex\n ex = null\n\n pkt = @\n pkt.trim // string\n ? {topics:[pkt], ... ex}\n : pkt[Symbol.iterator]\n ? {topics:[... pkt], ... ex}\n : ex ? {...pkt, ...ex}\n : pkt\n\n if topic_prefix ::\n // particularly useful with shared queues, e.g.\n // topic_prefix = '$share/some-queue-name/'\n let _prefix_topics = v =>\n v.trim ? topic_prefix+v : v.map(_prefix_topics)\n\n pkt.topics = pkt.topics.map(_prefix_topics)\n return pkt\n\n","import mqtt_pkt_ctx from 'u8-mqtt-packet/esm/codec_bind.js'\nimport { MQTTBase } from './base.jsy'\n\n#IF PLAT_NODEJS\n import {connect as tcp_connect} from 'node:net'\n import {connect as tls_connect} from 'node:tls'\n\nconst pkt_api = {\n utf8(u8) { return new TextDecoder('utf-8').decode(u8 || this.payload ) },\n json(u8) { return JSON.parse( this.utf8(u8) || null ) },\n text(u8) { return this.utf8(u8) },\n}\n\nexport class MQTTCore extends MQTTBase ::\n static mqtt_ctx(mqtt_level, mqtt_opts, pkt_ctx=pkt_api) ::\n let self = class extends this {}\n self.prototype.mqtt_ctx =\n mqtt_pkt_ctx(mqtt_level, mqtt_opts, pkt_ctx)\n return self\n\n\n // automatic Client Id for connect()\n init_client_id(parts=['u8-mqtt--','']) ::\n let sess_stg=this.sess_stg\n let key, cid = sess_stg?.getItem(key=parts.join(' '))\n if ! cid ::\n cid = parts.join @ Math.random().toString(36).slice(2)\n sess_stg?.setItem(key, cid)\n return cid\n\n get sess_stg() :: return globalThis.sessionStorage\n\n\n //on_error(err, evt) ::\n // console.warn @ '[[u8-mqtt error: %s]]', evt, err\n\n //log_conn(evt, arg, err_arg) ::\n // console.info @ '[[u8-mqtt log: %s]]', evt, arg, err_arg\n\n on_live(client, is_reconnect) ::\n if is_reconnect ::\n return client.connect()\n\n //on_reconnect(client) ::\n\n _use_conn(fn_reconnect) ::\n return (this.reconnect = fn_reconnect)?.()\n with_autoreconnect(opt=2000) ::\n if opt.toFixed :: opt = @{} delay: opt\n return this.with @:\n on_reconnect() ::\n this.delay(opt.delay || 2000)\n .then(this.reconnect)\n .then(opt.reconnect, opt.error)\n\n on_disconnect(client, intentional) ::\n if ! intentional ::\n return client.on_reconnect?.()\n\n delay(ms) ::\n return new Promise @ done => setTimeout(done, ms)\n\n with_async_iter(async_iter, write_u8_pkt) ::\n let on_mqtt_chunk = this._conn_.set @\n this.mqtt_ctx,\n write_u8_pkt\n\n this._msg_loop = @!>\n try ::\n async_iter = await async_iter\n for await (let chunk of async_iter)\n on_mqtt_chunk(chunk)\n this._conn_.reset()\n catch err ::\n this._conn_.reset(err)\n\n return this\n\n\n\n #IF PLAT_DENO\n with_tcp(...opt) ::\n opt = this._conn_opt(opt)\n opt.transport = 'tcp'\n return this._use_conn @=>\n this.with_deno_iter @\n Deno.connect(opt)\n\n with_tls(...opt) ::\n opt = this._conn_opt(opt)\n return this._use_conn @=>\n this.with_deno_iter @\n Deno.connectTls(opt)\n\n with_deno_iter(conn) ::\n return this.with_async_iter @\n conn.then(Deno.iter),\n async u8_pkt =>\n (await conn).write(u8_pkt)\n\n _conn_opt([a0, a1, a2]) ::\n // (port, hostname, options) or (url, options)\n if Number.isFinite(a0) ::\n return {...a2, port: a0, hostname: a1}\n\n a0 = new URL(a0)\n return {...a1, port: a0.port, hostname: a0.hostname}\n\n #IF PLAT_NODEJS\n with_tcp(...opt) ::\n opt = this._conn_opt(opt)\n return this._use_conn @=>\n this.with_stream @\n tcp_connect(opt)\n\n with_tls(...opt) ::\n opt = this._conn_opt(opt)\n return this._use_conn @=>\n this.with_stream @\n tls_connect(opt)\n\n _conn_opt([a0, a1, a2]) ::\n // (port, hostname, options) or (url, options)\n if Number.isFinite(a0) ::\n return {...a2, port: a0, host: a1}\n a0 = new URL(a0)\n return {...a1, port: a0.port, host: a0.hostname}\n\n\n with_stream(read_stream, write_stream) ::\n if undefined === write_stream ::\n write_stream = read_stream\n\n return this.with_async_iter @ read_stream,\n u8_pkt => write_stream.write(u8_pkt)\n\n\n with_websock(websock) ::\n if ! websock?.send ::\n websock = new URL(websock || 'ws://127.0.0.1:9001')\n return this._use_conn @=>\n this.with_websock @\n new WebSocket(websock, ['mqtt'])\n\n websock.binaryType = 'arraybuffer'\n\n let ready, {readyState} = websock\n if 1 !== readyState ::\n if 0 !== readyState ::\n throw new Error @ 'Invalid WebSocket readyState'\n\n ready = new Promise @ fn => websock.onopen = fn\n\n\n let {_conn_} = this\n let on_mqtt_chunk = _conn_.set @\n this.mqtt_ctx,\n async u8_pkt => @\n await ready\n websock.send(u8_pkt)\n\n websock.onmessage = evt => @ on_mqtt_chunk @ new Uint8Array(evt.data)\n websock.onclose = evt => ::\n if ! evt.wasClean ::\n var err = new Error('websocket connection close')\n err.code = evt.code\n err.reason = evt.reason\n\n _conn_.reset(err)\n\n return this\n\nexport { MQTTCore as default }\n","import mqtt_opts_v5 from 'u8-mqtt-packet/esm/codec_v5_client.js'\nimport {with_topic_path_router} from './router_path.jsy'\nimport MQTTCore from './core.jsy'\nexport * from './version.js'\n\nconst MQTTClient_v4 = /* #__PURE__ */\n with_topic_path_router(\n MQTTCore.mqtt_ctx(4, mqtt_opts_v5) )\n\nconst MQTTClient_v5 = /* #__PURE__ */\n with_topic_path_router(\n MQTTCore.mqtt_ctx(5, mqtt_opts_v5) )\n\nconst mqtt_v4 = opt =>\n new MQTTClient_v4(opt)\n\nconst mqtt_v5 = opt =>\n new MQTTClient_v5(opt)\n\nexport {\n MQTTClient_v4,\n MQTTClient_v5,\n MQTTClient_v5 as MQTTClient,\n\n mqtt_v4,\n mqtt_v5,\n mqtt_v5 as mqtt,\n mqtt_v5 as default,\n}\n"],"names":["decode_varint","_rxp_parse"],"mappings":"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","x_google_ignoreList":[0,1,4,5]}
@@ -47,7 +47,7 @@ class U8_Reason extends Number {
47
47
  }
48
48
  }
49
49
 
50
- class mqtt_reader_v4$1 {
50
+ let mqtt_reader_v4$1 = class mqtt_reader_v4 {
51
51
  static of(buf) { return this.prototype.of(buf) }
52
52
  of(buf) {
53
53
  let step = (width, k) => (k=0|step.k, step.k=k+width, k);
@@ -103,7 +103,7 @@ class mqtt_reader_v4$1 {
103
103
  return buf.subarray(step.k|0)
104
104
  }
105
105
 
106
- }
106
+ };
107
107
 
108
108
  function mqtt_reader_info(mqtt_reader, ... info_fn_list) {
109
109
  mqtt_reader = class extends mqtt_reader {
@@ -478,7 +478,7 @@ function mqtt_encode_disconnect(ns, mqtt_writer) {
478
478
  }
479
479
  }
480
480
 
481
- // not a v4 packet: import { mqtt_encode_auth } from './encode/auth.mjs'
481
+ // not a v4 packet: import { mqtt_encode_auth } from './encode/auth.js'
482
482
 
483
483
 
484
484
  const mqtt_decode_v4 = [
@@ -774,6 +774,22 @@ const _mqtt_cmdid_dispatch ={
774
774
 
775
775
  await fn?.call(target, pkt, ctx);} })()) };
776
776
 
777
+ /*
778
+ on_mqtt_type = {
779
+ mqtt_auth(pkt, ctx) ::
780
+ mqtt_connect(pkt, ctx) ::
781
+ mqtt_connack(pkt, ctx) ::
782
+ mqtt_disconnect(pkt, ctx) ::
783
+
784
+ mqtt_publish(pkt, ctx)
785
+ mqtt_subscribe(pkt, ctx) ::
786
+ mqtt_unsubscribe(pkt, ctx) ::
787
+
788
+ mqtt_pingreq(pkt, ctx) ::
789
+ mqtt_pingresp(pkt, ctx) ::
790
+ }
791
+ */
792
+
777
793
  function _mqtt_dispatch(opt, target) {
778
794
  let _disp_ = _mqtt_cmdid_dispatch.create(target);
779
795
  let { cmdids } = _disp_;
@@ -803,28 +819,34 @@ class MQTTError extends Error {
803
819
 
804
820
  class MQTTBase {
805
821
  constructor(opt={}) {
822
+ this.with(opt);
806
823
  this._conn_ = _mqtt_conn(this,
807
824
  this._init_dispatch(opt, this)); }
808
825
 
826
+ with(fns_ns) {
827
+ for (let [k,v] of Object.entries(fns_ns)) {
828
+ if ('function' === typeof v) {this[k] = v;} }
829
+ return this}
830
+
809
831
  async conn_emit(evt, arg, err_arg) {
810
832
  this.log_conn?.(evt, arg, err_arg);
811
833
  try {
812
- let fn_evt = this[await evt]; // microtask break
834
+ let fn_evt = this[await evt]; // microtask break using `await evt`
813
835
  if (fn_evt) {
814
836
  await fn_evt.call(this, this, arg, err_arg);}
815
- else if (err_arg) {
816
- await this.on_error(err_arg, evt);} }
837
+ else if (err_arg) {throw err_arg} }
817
838
  catch (err) {
818
839
  this.on_error(err, evt);} }
819
840
 
820
- on_error(err, err_path) {
821
- console.warn('[[u8-mqtt error: %s]]', err_path, err); }
841
+ on_error(err, evt) {
842
+ console.warn('[[u8-mqtt error: %s]]', evt, err); }
822
843
 
823
844
  // Handshaking Packets
824
845
 
825
846
  async connect(pkt={}) {
826
- let cid = pkt.client_id || ['u8-mqtt--', ''];
827
- if (Array.isArray(cid)) {
847
+ let cid = pkt.client_id || this.client_id;
848
+ if ('string' !== typeof cid) {
849
+ // see init_client_id implementation in core.jsy
828
850
  pkt.client_id = cid = this.init_client_id(cid);}
829
851
  this.client_id = cid;
830
852
 
@@ -850,12 +872,13 @@ class MQTTBase {
850
872
  return this._send('auth', pkt, 'auth')}
851
873
 
852
874
  ping() {return this._send('pingreq', null, 'pingresp')}
853
-
875
+ puback({pkt_id}) {return this._send('puback', {pkt_id})}
854
876
 
855
877
  // alias: sub
856
878
  subscribe(pkt, ex, topic_prefix) {
857
879
  pkt = _as_topics(pkt, ex, topic_prefix);
858
- return this._send('subscribe', pkt, pkt)}
880
+ let suback = this._send('subscribe', pkt, pkt);
881
+ return this.on_sub?.(suback, pkt) ?? suback}
859
882
 
860
883
  // alias: unsub
861
884
  unsubscribe(pkt, ex, topic_prefix) {
@@ -863,48 +886,52 @@ class MQTTBase {
863
886
  return this._send('unsubscribe', pkt, pkt)}
864
887
 
865
888
 
866
- // alias: pub
867
- publish(pkt, pub_opt) {return _pub(this, pkt, pub_opt)}
868
- post(topic, payload, pub_opt) {return _pub.m(this, topic, payload, pub_opt)}
869
- send(topic, payload, pub_opt) {return _pub.mq(this, topic, payload, pub_opt)}
870
- store(topic, payload, pub_opt) {return _pub.mqr(this, topic, payload, pub_opt)}
871
-
872
- json_post(topic, msg, pub_opt) {return _pub.o(this, topic, msg, pub_opt)}
873
- json_send(topic, msg, pub_opt) {return _pub.oq(this, topic, msg, pub_opt)}
874
- json_store(topic, msg, pub_opt) {return _pub.oqr(this, topic, msg, pub_opt)}
875
-
876
- obj_post(topic, msg, pub_opt) {return _pub.o(this, topic, msg, pub_opt)}
877
- obj_send(topic, msg, pub_opt) {return _pub.oq(this, topic, msg, pub_opt)}
878
- obj_store(topic, msg, pub_opt) {return _pub.oqr(this, topic, msg, pub_opt)}
879
-
880
-
881
-
882
- // Utility Methods
883
-
884
- init_client_id(parts) {
885
- let cid = this.client_id;
886
-
887
- if (undefined === cid) {
888
- this.client_id = cid = (
889
-
890
-
891
-
892
- this.new_client_id(parts)
893
- );}
894
-
895
- return cid}
896
-
897
- new_client_id(parts) {
898
- return [parts[0], Math.random().toString(36).slice(2), parts[1]].join('')}
899
-
900
-
901
-
902
-
903
-
904
-
905
-
906
-
907
-
889
+ post(topic, payload, pub_opt) {// qos:0
890
+ return this.pub({topic, payload, qos:0}, pub_opt)}
891
+ send(topic, payload, pub_opt) {// qos:1
892
+ return this.pub({topic, payload, qos:1}, pub_opt)}
893
+ store(topic, payload, pub_opt) {// qos:1, retain: 1
894
+ return this.pub({topic, payload, qos:1, retain: 1}, pub_opt)}
895
+
896
+ // alias: json_post
897
+ obj_post(topic, msg, pub_opt) {// qos:0
898
+ return this.pub({topic, msg, arg: 'msg', qos:0}, pub_opt)}
899
+ // alias: json_send
900
+ obj_send(topic, msg, pub_opt) {// qos:1
901
+ return this.pub({topic, msg, arg: 'msg', qos:1}, pub_opt)}
902
+ // alias: json_store
903
+ obj_store(topic, msg, pub_opt) {// qos:1, retain: 1
904
+ return this.pub({topic, msg, arg: 'msg', qos:1, retain: 1}, pub_opt)}
905
+
906
+ // alias: publish -- because 'pub' is shorter for semantic aliases above
907
+ async pub(pkt, pub_opt) {
908
+ if (undefined === pkt.payload) {
909
+ if ('function' === typeof pub_opt) {
910
+ pub_opt = {fn_encode: pub_opt};}
911
+
912
+ let {msg} = pkt;
913
+ switch (typeof msg) {
914
+ case 'function':
915
+ pub_opt = {...pub_opt, fn_encode: msg};
916
+ // flow into 'undefined' case
917
+ case 'undefined':
918
+ // return a single-value closure to publish packets
919
+ return v => this.pub({...pkt, [pkt.arg || 'payload']: v}, pub_opt)}
920
+
921
+ // Encode payload from msg; fn_encode allows alternative to JSON.stringify
922
+ let {fn_encode} = pub_opt || {};
923
+ pkt.payload = fn_encode
924
+ ? await fn_encode(msg)
925
+ : JSON.stringify(msg);}
926
+
927
+ if (pub_opt) {
928
+ if (pub_opt.props) {
929
+ pkt.props = pub_opt.props;}
930
+ if (pub_opt.xform) {
931
+ pkt = pub_opt.xform(pkt) || pkt;} }
932
+
933
+ return this._send('publish', pkt,
934
+ pkt.qos ? pkt : void 0 ) }// key
908
935
 
909
936
 
910
937
  // Internal API
@@ -913,52 +940,24 @@ class MQTTBase {
913
940
 
914
941
  _init_dispatch(opt) {
915
942
  this.constructor?._once_();
916
- let router = this.router =
917
- this._init_router?.(opt, this);
918
-
919
- let tgt ={
920
- __proto__: opt.on_mqtt_type || {}
921
- , router};
922
-
923
- tgt.mqtt_publish ||= router?.invoke;
924
- return _mqtt_dispatch(this, tgt)}
943
+ let target ={__proto__: opt.on_mqtt_type};
944
+ target.mqtt_publish ||=
945
+ this._init_router?.(opt, this, target);
946
+ return _mqtt_dispatch(this, target)}
925
947
 
926
948
  static _aliases() {
927
- return ' pub:publish sub:subscribe unsub:unsubscribe '}
949
+ return ' publish:pub sub:subscribe unsub:unsubscribe json_post:obj_post json_send:obj_send json_store:obj_store'}
928
950
 
929
951
  static _once_(self=this) {
930
952
  self._once_ = _=>0;
931
- self.MQTTError = MQTTError;
932
953
  let p = self.prototype;
954
+ p.MQTTError = MQTTError;
933
955
  for (let alias of self._aliases().split(/\s+/)) {
934
956
  alias = alias.split(':');
935
957
  let fn = alias[1] && p[alias[1]];
936
958
  if (fn) {p[alias[0]] = fn;} } } }
937
959
 
938
960
 
939
- /*
940
- on_mqtt_type = {
941
- mqtt_auth(pkt, ctx) ::
942
- mqtt_connect(pkt, ctx) ::
943
- mqtt_connack(pkt, ctx) ::
944
- mqtt_disconnect(pkt, ctx) ::
945
-
946
- mqtt_publish(pkt, ctx)
947
- mqtt_subscribe(pkt, ctx) ::
948
- mqtt_unsubscribe(pkt, ctx) ::
949
-
950
- mqtt_pingreq(pkt, ctx) ::
951
- mqtt_pingresp(pkt, ctx) ::
952
- }
953
- */
954
-
955
-
956
- const _prefix_topics = (topic_prefix, iterable) =>
957
- Array.from(iterable, value =>(
958
- value.trim // string
959
- ? _prefix_topics(topic_prefix, value)
960
- : topic_prefix + value) );
961
-
962
961
  function _as_topics(pkt, ex, topic_prefix) {
963
962
  if (ex?.trim) {// string
964
963
  topic_prefix = ex;
@@ -975,55 +974,11 @@ function _as_topics(pkt, ex, topic_prefix) {
975
974
  if (topic_prefix) {
976
975
  // particularly useful with shared queues, e.g.
977
976
  // topic_prefix = '$share/some-queue-name/'
978
- pkt.topics = _prefix_topics(topic_prefix, pkt.topics);}
979
- return pkt}
980
-
977
+ let _prefix_topics = v =>
978
+ v.trim ? topic_prefix+v : v.map(_prefix_topics);
981
979
 
982
- async function _pub(self, pkt, pub_opt) {
983
- if (undefined === pkt.payload) {
984
- if ('function' === typeof pub_opt) {
985
- pub_opt = {fn_encode: pub_opt};}
986
-
987
- let {msg} = pkt;
988
- switch (typeof msg) {
989
- case 'function':
990
- pub_opt = {...pub_opt, fn_encode: msg};
991
- // flow into 'undefined' case
992
- case 'undefined':
993
- // return a single-value closure to publish packets
994
- return v => _pub(self, {...pkt, [pkt.arg || 'payload']: v}, pub_opt)
995
-
996
- default:
997
- // Encode payload from msg; fn_encode allows alternative to JSON.stringify
998
- let {fn_encode} = pub_opt || {};
999
- pkt.payload = fn_encode
1000
- ? await fn_encode(msg)
1001
- : JSON.stringify(msg);} }
1002
-
1003
- if (pub_opt) {
1004
- if (pub_opt.props) {
1005
- pkt.props = pub_opt.props;}
1006
- if (pub_opt.xform) {
1007
- pkt = pub_opt.xform(pkt) || pkt;} }
1008
-
1009
- return self._send('publish', pkt,
1010
- pkt.qos ? pkt : void 0 ) }// key
1011
-
1012
- {
1013
- Object.assign(_pub,{
1014
- m: (self, topic, payload, pub_opt) =>
1015
- _pub(self, {topic, payload, qos:0}, pub_opt)
1016
- , mq: (self, topic, payload, pub_opt) =>
1017
- _pub(self, {topic, payload, qos:1}, pub_opt)
1018
- , mqr: (self, topic, payload, pub_opt) =>
1019
- _pub(self, {topic, payload, qos:1, retain: 1}, pub_opt)
1020
-
1021
- , o: (self, topic, msg, pub_opt) =>
1022
- _pub(self, {topic, msg, arg: 'msg', qos:0}, pub_opt)
1023
- , oq: (self, topic, msg, pub_opt) =>
1024
- _pub(self, {topic, msg, arg: 'msg', qos:1}, pub_opt)
1025
- , oqr: (self, topic, msg, pub_opt) =>
1026
- _pub(self, {topic, msg, arg: 'msg', qos:1, retain: 1}, pub_opt)} ); }
980
+ pkt.topics = pkt.topics.map(_prefix_topics);}
981
+ return pkt}
1027
982
 
1028
983
  const pkt_api = {
1029
984
  utf8(u8) { return new TextDecoder('utf-8').decode(u8 || this.payload ) },
@@ -1032,20 +987,27 @@ const pkt_api = {
1032
987
  };
1033
988
 
1034
989
  class MQTTCore extends MQTTBase {
1035
- constructor(opt={}) {
1036
- super(opt);
1037
- this.with(opt);}
1038
-
1039
990
  static mqtt_ctx(mqtt_level, mqtt_opts, pkt_ctx=pkt_api) {
1040
991
  let self = class extends this {};
1041
992
  self.prototype.mqtt_ctx =
1042
993
  mqtt_pkt_ctx(mqtt_level, mqtt_opts, pkt_ctx);
1043
994
  return self}
1044
995
 
1045
- with(fns_ns) {
1046
- for (let [k,v] of Object.entries(fns_ns)) {
1047
- if ('function' === typeof v) {this[k] = v;} }
1048
- return this}
996
+
997
+ // automatic Client Id for connect()
998
+ init_client_id(parts=['u8-mqtt--','']) {
999
+ let sess_stg=this.sess_stg;
1000
+ let key, cid = sess_stg?.getItem(key=parts.join(' '));
1001
+ if (! cid) {
1002
+ cid = parts.join(Math.random().toString(36).slice(2));
1003
+ sess_stg?.setItem(key, cid);}
1004
+ return cid}
1005
+
1006
+ get sess_stg() {return globalThis.sessionStorage}
1007
+
1008
+
1009
+ //on_error(err, evt) ::
1010
+ // console.warn @ '[[u8-mqtt error: %s]]', evt, err
1049
1011
 
1050
1012
  //log_conn(evt, arg, err_arg) ::
1051
1013
  // console.info @ '[[u8-mqtt log: %s]]', evt, arg, err_arg
@@ -1122,7 +1084,6 @@ class MQTTCore extends MQTTBase {
1122
1084
 
1123
1085
  with_tcp(...opt) {
1124
1086
  opt = this._conn_opt(opt);
1125
- console.log({opt});
1126
1087
  return this._use_conn (() =>
1127
1088
  this.with_stream(
1128
1089
  connect(opt)) ) }
@@ -1184,7 +1145,7 @@ class MQTTCore extends MQTTBase {
1184
1145
 
1185
1146
  return this} }
1186
1147
 
1187
- const version = '0.4.0';
1148
+ const version = '0.5.0';
1188
1149
 
1189
1150
  const MQTTClient_v4 = /* #__PURE__ */
1190
1151
  MQTTCore.mqtt_ctx(4, mqtt_opts_v4);