u8-mqtt 0.4.1 → 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.
- package/cjs/basic-v4.cjs +103 -137
- package/cjs/basic-v4.cjs.map +1 -1
- package/cjs/basic-v5.cjs +102 -136
- package/cjs/basic-v5.cjs.map +1 -1
- package/cjs/index.cjs +144 -189
- package/cjs/index.cjs.map +1 -1
- package/cjs/v4.cjs +145 -190
- package/cjs/v4.cjs.map +1 -1
- package/cjs/v5.cjs +144 -189
- package/cjs/v5.cjs.map +1 -1
- package/code/_dispatch.jsy +16 -0
- package/code/base.jsy +68 -124
- package/code/core.jsy +15 -9
- package/code/router_path.jsy +24 -43
- package/code/with_topic_router.jsy +18 -10
- package/esm/basic-v4.js +1154 -0
- package/esm/basic-v4.js.map +1 -0
- package/esm/basic-v5.js +1416 -0
- package/esm/basic-v5.js.map +1 -0
- package/esm/deno/basic-v4.js +103 -137
- package/esm/deno/basic-v4.js.map +1 -1
- package/esm/deno/basic-v5.js +102 -136
- package/esm/deno/basic-v5.js.map +1 -1
- package/esm/deno/index.js +144 -189
- package/esm/deno/index.js.map +1 -1
- package/esm/deno/v4.js +145 -190
- package/esm/deno/v4.js.map +1 -1
- package/esm/deno/v5.js +144 -189
- package/esm/deno/v5.js.map +1 -1
- package/esm/index.js +1599 -0
- package/esm/index.js.map +1 -0
- package/esm/node/basic-v4.js +103 -137
- package/esm/node/basic-v4.js.map +1 -1
- package/esm/node/basic-v4.mjs +103 -137
- package/esm/node/basic-v4.mjs.map +1 -1
- package/esm/node/basic-v5.js +102 -136
- package/esm/node/basic-v5.js.map +1 -1
- package/esm/node/basic-v5.mjs +102 -136
- package/esm/node/basic-v5.mjs.map +1 -1
- package/esm/node/index.js +144 -189
- package/esm/node/index.js.map +1 -1
- package/esm/node/index.mjs +144 -189
- package/esm/node/index.mjs.map +1 -1
- package/esm/node/v4.js +145 -190
- package/esm/node/v4.js.map +1 -1
- package/esm/node/v4.mjs +145 -190
- package/esm/node/v4.mjs.map +1 -1
- package/esm/node/v5.js +144 -189
- package/esm/node/v5.js.map +1 -1
- package/esm/node/v5.mjs +144 -189
- package/esm/node/v5.mjs.map +1 -1
- package/esm/v4.js +1336 -0
- package/esm/v4.js.map +1 -0
- package/esm/v5.js +1599 -0
- package/esm/v5.js.map +1 -0
- package/esm/web/basic-v4.js +103 -137
- package/esm/web/basic-v4.js.map +1 -1
- package/esm/web/basic-v4.min.js +1 -1
- package/esm/web/basic-v4.min.js.br +0 -0
- package/esm/web/basic-v4.min.js.gz +0 -0
- package/esm/web/basic-v5.js +102 -136
- package/esm/web/basic-v5.js.map +1 -1
- package/esm/web/basic-v5.min.js +1 -1
- package/esm/web/basic-v5.min.js.br +0 -0
- package/esm/web/basic-v5.min.js.gz +0 -0
- package/esm/web/index.js +144 -189
- 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 +145 -190
- 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 +144 -189
- 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 +7 -8
package/esm/node/basic-v5.js
CHANGED
|
@@ -150,7 +150,7 @@ class mqtt_reader_v4 {
|
|
|
150
150
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
let mqtt_reader_v5$1 = class mqtt_reader_v5 extends mqtt_reader_v4 {
|
|
154
154
|
props() {
|
|
155
155
|
let {buf, step} = this;
|
|
156
156
|
let [n, vi, vi0] = decode_varint$1(buf, step.k|0);
|
|
@@ -185,7 +185,7 @@ class mqtt_reader_v5$1 extends mqtt_reader_v4 {
|
|
|
185
185
|
: buf.subarray(vi, step.k|0)
|
|
186
186
|
}
|
|
187
187
|
*/
|
|
188
|
-
}
|
|
188
|
+
};
|
|
189
189
|
|
|
190
190
|
function mqtt_reader_info(mqtt_reader, ... info_fn_list) {
|
|
191
191
|
mqtt_reader = class extends mqtt_reader {
|
|
@@ -1030,6 +1030,22 @@ const _mqtt_cmdid_dispatch ={
|
|
|
1030
1030
|
|
|
1031
1031
|
await fn?.call(target, pkt, ctx);} })()) };
|
|
1032
1032
|
|
|
1033
|
+
/*
|
|
1034
|
+
on_mqtt_type = {
|
|
1035
|
+
mqtt_auth(pkt, ctx) ::
|
|
1036
|
+
mqtt_connect(pkt, ctx) ::
|
|
1037
|
+
mqtt_connack(pkt, ctx) ::
|
|
1038
|
+
mqtt_disconnect(pkt, ctx) ::
|
|
1039
|
+
|
|
1040
|
+
mqtt_publish(pkt, ctx)
|
|
1041
|
+
mqtt_subscribe(pkt, ctx) ::
|
|
1042
|
+
mqtt_unsubscribe(pkt, ctx) ::
|
|
1043
|
+
|
|
1044
|
+
mqtt_pingreq(pkt, ctx) ::
|
|
1045
|
+
mqtt_pingresp(pkt, ctx) ::
|
|
1046
|
+
}
|
|
1047
|
+
*/
|
|
1048
|
+
|
|
1033
1049
|
function _mqtt_dispatch(opt, target) {
|
|
1034
1050
|
let _disp_ = _mqtt_cmdid_dispatch.create(target);
|
|
1035
1051
|
let { cmdids } = _disp_;
|
|
@@ -1059,28 +1075,34 @@ class MQTTError extends Error {
|
|
|
1059
1075
|
|
|
1060
1076
|
class MQTTBase {
|
|
1061
1077
|
constructor(opt={}) {
|
|
1078
|
+
this.with(opt);
|
|
1062
1079
|
this._conn_ = _mqtt_conn(this,
|
|
1063
1080
|
this._init_dispatch(opt, this)); }
|
|
1064
1081
|
|
|
1082
|
+
with(fns_ns) {
|
|
1083
|
+
for (let [k,v] of Object.entries(fns_ns)) {
|
|
1084
|
+
if ('function' === typeof v) {this[k] = v;} }
|
|
1085
|
+
return this}
|
|
1086
|
+
|
|
1065
1087
|
async conn_emit(evt, arg, err_arg) {
|
|
1066
1088
|
this.log_conn?.(evt, arg, err_arg);
|
|
1067
1089
|
try {
|
|
1068
|
-
let fn_evt = this[await evt]; // microtask break
|
|
1090
|
+
let fn_evt = this[await evt]; // microtask break using `await evt`
|
|
1069
1091
|
if (fn_evt) {
|
|
1070
1092
|
await fn_evt.call(this, this, arg, err_arg);}
|
|
1071
|
-
else if (err_arg) {
|
|
1072
|
-
await this.on_error(err_arg, evt);} }
|
|
1093
|
+
else if (err_arg) {throw err_arg} }
|
|
1073
1094
|
catch (err) {
|
|
1074
1095
|
this.on_error(err, evt);} }
|
|
1075
1096
|
|
|
1076
|
-
on_error(err,
|
|
1077
|
-
console.warn('[[u8-mqtt error: %s]]',
|
|
1097
|
+
on_error(err, evt) {
|
|
1098
|
+
console.warn('[[u8-mqtt error: %s]]', evt, err); }
|
|
1078
1099
|
|
|
1079
1100
|
// Handshaking Packets
|
|
1080
1101
|
|
|
1081
1102
|
async connect(pkt={}) {
|
|
1082
|
-
let cid = pkt.client_id ||
|
|
1083
|
-
if (
|
|
1103
|
+
let cid = pkt.client_id || this.client_id;
|
|
1104
|
+
if ('string' !== typeof cid) {
|
|
1105
|
+
// see init_client_id implementation in core.jsy
|
|
1084
1106
|
pkt.client_id = cid = this.init_client_id(cid);}
|
|
1085
1107
|
this.client_id = cid;
|
|
1086
1108
|
|
|
@@ -1106,12 +1128,13 @@ class MQTTBase {
|
|
|
1106
1128
|
return this._send('auth', pkt, 'auth')}
|
|
1107
1129
|
|
|
1108
1130
|
ping() {return this._send('pingreq', null, 'pingresp')}
|
|
1109
|
-
|
|
1131
|
+
puback({pkt_id}) {return this._send('puback', {pkt_id})}
|
|
1110
1132
|
|
|
1111
1133
|
// alias: sub
|
|
1112
1134
|
subscribe(pkt, ex, topic_prefix) {
|
|
1113
1135
|
pkt = _as_topics(pkt, ex, topic_prefix);
|
|
1114
|
-
|
|
1136
|
+
let suback = this._send('subscribe', pkt, pkt);
|
|
1137
|
+
return this.on_sub?.(suback, pkt) ?? suback}
|
|
1115
1138
|
|
|
1116
1139
|
// alias: unsub
|
|
1117
1140
|
unsubscribe(pkt, ex, topic_prefix) {
|
|
@@ -1119,48 +1142,52 @@ class MQTTBase {
|
|
|
1119
1142
|
return this._send('unsubscribe', pkt, pkt)}
|
|
1120
1143
|
|
|
1121
1144
|
|
|
1122
|
-
//
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
store(topic, payload, pub_opt) {
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
obj_send(topic, msg, pub_opt) {
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1145
|
+
post(topic, payload, pub_opt) {// qos:0
|
|
1146
|
+
return this.pub({topic, payload, qos:0}, pub_opt)}
|
|
1147
|
+
send(topic, payload, pub_opt) {// qos:1
|
|
1148
|
+
return this.pub({topic, payload, qos:1}, pub_opt)}
|
|
1149
|
+
store(topic, payload, pub_opt) {// qos:1, retain: 1
|
|
1150
|
+
return this.pub({topic, payload, qos:1, retain: 1}, pub_opt)}
|
|
1151
|
+
|
|
1152
|
+
// alias: json_post
|
|
1153
|
+
obj_post(topic, msg, pub_opt) {// qos:0
|
|
1154
|
+
return this.pub({topic, msg, arg: 'msg', qos:0}, pub_opt)}
|
|
1155
|
+
// alias: json_send
|
|
1156
|
+
obj_send(topic, msg, pub_opt) {// qos:1
|
|
1157
|
+
return this.pub({topic, msg, arg: 'msg', qos:1}, pub_opt)}
|
|
1158
|
+
// alias: json_store
|
|
1159
|
+
obj_store(topic, msg, pub_opt) {// qos:1, retain: 1
|
|
1160
|
+
return this.pub({topic, msg, arg: 'msg', qos:1, retain: 1}, pub_opt)}
|
|
1161
|
+
|
|
1162
|
+
// alias: publish -- because 'pub' is shorter for semantic aliases above
|
|
1163
|
+
async pub(pkt, pub_opt) {
|
|
1164
|
+
if (undefined === pkt.payload) {
|
|
1165
|
+
if ('function' === typeof pub_opt) {
|
|
1166
|
+
pub_opt = {fn_encode: pub_opt};}
|
|
1167
|
+
|
|
1168
|
+
let {msg} = pkt;
|
|
1169
|
+
switch (typeof msg) {
|
|
1170
|
+
case 'function':
|
|
1171
|
+
pub_opt = {...pub_opt, fn_encode: msg};
|
|
1172
|
+
// flow into 'undefined' case
|
|
1173
|
+
case 'undefined':
|
|
1174
|
+
// return a single-value closure to publish packets
|
|
1175
|
+
return v => this.pub({...pkt, [pkt.arg || 'payload']: v}, pub_opt)}
|
|
1176
|
+
|
|
1177
|
+
// Encode payload from msg; fn_encode allows alternative to JSON.stringify
|
|
1178
|
+
let {fn_encode} = pub_opt || {};
|
|
1179
|
+
pkt.payload = fn_encode
|
|
1180
|
+
? await fn_encode(msg)
|
|
1181
|
+
: JSON.stringify(msg);}
|
|
1182
|
+
|
|
1183
|
+
if (pub_opt) {
|
|
1184
|
+
if (pub_opt.props) {
|
|
1185
|
+
pkt.props = pub_opt.props;}
|
|
1186
|
+
if (pub_opt.xform) {
|
|
1187
|
+
pkt = pub_opt.xform(pkt) || pkt;} }
|
|
1188
|
+
|
|
1189
|
+
return this._send('publish', pkt,
|
|
1190
|
+
pkt.qos ? pkt : void 0 ) }// key
|
|
1164
1191
|
|
|
1165
1192
|
|
|
1166
1193
|
// Internal API
|
|
@@ -1175,41 +1202,18 @@ class MQTTBase {
|
|
|
1175
1202
|
return _mqtt_dispatch(this, target)}
|
|
1176
1203
|
|
|
1177
1204
|
static _aliases() {
|
|
1178
|
-
return ' pub
|
|
1205
|
+
return ' publish:pub sub:subscribe unsub:unsubscribe json_post:obj_post json_send:obj_send json_store:obj_store'}
|
|
1179
1206
|
|
|
1180
1207
|
static _once_(self=this) {
|
|
1181
1208
|
self._once_ = _=>0;
|
|
1182
|
-
self.MQTTError = MQTTError;
|
|
1183
1209
|
let p = self.prototype;
|
|
1210
|
+
p.MQTTError = MQTTError;
|
|
1184
1211
|
for (let alias of self._aliases().split(/\s+/)) {
|
|
1185
1212
|
alias = alias.split(':');
|
|
1186
1213
|
let fn = alias[1] && p[alias[1]];
|
|
1187
1214
|
if (fn) {p[alias[0]] = fn;} } } }
|
|
1188
1215
|
|
|
1189
1216
|
|
|
1190
|
-
/*
|
|
1191
|
-
on_mqtt_type = {
|
|
1192
|
-
mqtt_auth(pkt, ctx) ::
|
|
1193
|
-
mqtt_connect(pkt, ctx) ::
|
|
1194
|
-
mqtt_connack(pkt, ctx) ::
|
|
1195
|
-
mqtt_disconnect(pkt, ctx) ::
|
|
1196
|
-
|
|
1197
|
-
mqtt_publish(pkt, ctx)
|
|
1198
|
-
mqtt_subscribe(pkt, ctx) ::
|
|
1199
|
-
mqtt_unsubscribe(pkt, ctx) ::
|
|
1200
|
-
|
|
1201
|
-
mqtt_pingreq(pkt, ctx) ::
|
|
1202
|
-
mqtt_pingresp(pkt, ctx) ::
|
|
1203
|
-
}
|
|
1204
|
-
*/
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
const _prefix_topics = (topic_prefix, iterable) =>
|
|
1208
|
-
Array.from(iterable, value =>(
|
|
1209
|
-
value.trim // string
|
|
1210
|
-
? _prefix_topics(topic_prefix, value)
|
|
1211
|
-
: topic_prefix + value) );
|
|
1212
|
-
|
|
1213
1217
|
function _as_topics(pkt, ex, topic_prefix) {
|
|
1214
1218
|
if (ex?.trim) {// string
|
|
1215
1219
|
topic_prefix = ex;
|
|
@@ -1226,55 +1230,11 @@ function _as_topics(pkt, ex, topic_prefix) {
|
|
|
1226
1230
|
if (topic_prefix) {
|
|
1227
1231
|
// particularly useful with shared queues, e.g.
|
|
1228
1232
|
// topic_prefix = '$share/some-queue-name/'
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1233
|
+
let _prefix_topics = v =>
|
|
1234
|
+
v.trim ? topic_prefix+v : v.map(_prefix_topics);
|
|
1232
1235
|
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
if ('function' === typeof pub_opt) {
|
|
1236
|
-
pub_opt = {fn_encode: pub_opt};}
|
|
1237
|
-
|
|
1238
|
-
let {msg} = pkt;
|
|
1239
|
-
switch (typeof msg) {
|
|
1240
|
-
case 'function':
|
|
1241
|
-
pub_opt = {...pub_opt, fn_encode: msg};
|
|
1242
|
-
// flow into 'undefined' case
|
|
1243
|
-
case 'undefined':
|
|
1244
|
-
// return a single-value closure to publish packets
|
|
1245
|
-
return v => _pub(self, {...pkt, [pkt.arg || 'payload']: v}, pub_opt)
|
|
1246
|
-
|
|
1247
|
-
default:
|
|
1248
|
-
// Encode payload from msg; fn_encode allows alternative to JSON.stringify
|
|
1249
|
-
let {fn_encode} = pub_opt || {};
|
|
1250
|
-
pkt.payload = fn_encode
|
|
1251
|
-
? await fn_encode(msg)
|
|
1252
|
-
: JSON.stringify(msg);} }
|
|
1253
|
-
|
|
1254
|
-
if (pub_opt) {
|
|
1255
|
-
if (pub_opt.props) {
|
|
1256
|
-
pkt.props = pub_opt.props;}
|
|
1257
|
-
if (pub_opt.xform) {
|
|
1258
|
-
pkt = pub_opt.xform(pkt) || pkt;} }
|
|
1259
|
-
|
|
1260
|
-
return self._send('publish', pkt,
|
|
1261
|
-
pkt.qos ? pkt : void 0 ) }// key
|
|
1262
|
-
|
|
1263
|
-
{
|
|
1264
|
-
Object.assign(_pub,{
|
|
1265
|
-
m: (self, topic, payload, pub_opt) =>
|
|
1266
|
-
_pub(self, {topic, payload, qos:0}, pub_opt)
|
|
1267
|
-
, mq: (self, topic, payload, pub_opt) =>
|
|
1268
|
-
_pub(self, {topic, payload, qos:1}, pub_opt)
|
|
1269
|
-
, mqr: (self, topic, payload, pub_opt) =>
|
|
1270
|
-
_pub(self, {topic, payload, qos:1, retain: 1}, pub_opt)
|
|
1271
|
-
|
|
1272
|
-
, o: (self, topic, msg, pub_opt) =>
|
|
1273
|
-
_pub(self, {topic, msg, arg: 'msg', qos:0}, pub_opt)
|
|
1274
|
-
, oq: (self, topic, msg, pub_opt) =>
|
|
1275
|
-
_pub(self, {topic, msg, arg: 'msg', qos:1}, pub_opt)
|
|
1276
|
-
, oqr: (self, topic, msg, pub_opt) =>
|
|
1277
|
-
_pub(self, {topic, msg, arg: 'msg', qos:1, retain: 1}, pub_opt)} ); }
|
|
1236
|
+
pkt.topics = pkt.topics.map(_prefix_topics);}
|
|
1237
|
+
return pkt}
|
|
1278
1238
|
|
|
1279
1239
|
const pkt_api = {
|
|
1280
1240
|
utf8(u8) { return new TextDecoder('utf-8').decode(u8 || this.payload ) },
|
|
@@ -1283,20 +1243,27 @@ const pkt_api = {
|
|
|
1283
1243
|
};
|
|
1284
1244
|
|
|
1285
1245
|
class MQTTCore extends MQTTBase {
|
|
1286
|
-
constructor(opt={}) {
|
|
1287
|
-
super(opt);
|
|
1288
|
-
this.with(opt);}
|
|
1289
|
-
|
|
1290
1246
|
static mqtt_ctx(mqtt_level, mqtt_opts, pkt_ctx=pkt_api) {
|
|
1291
1247
|
let self = class extends this {};
|
|
1292
1248
|
self.prototype.mqtt_ctx =
|
|
1293
1249
|
mqtt_pkt_ctx(mqtt_level, mqtt_opts, pkt_ctx);
|
|
1294
1250
|
return self}
|
|
1295
1251
|
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1252
|
+
|
|
1253
|
+
// automatic Client Id for connect()
|
|
1254
|
+
init_client_id(parts=['u8-mqtt--','']) {
|
|
1255
|
+
let sess_stg=this.sess_stg;
|
|
1256
|
+
let key, cid = sess_stg?.getItem(key=parts.join(' '));
|
|
1257
|
+
if (! cid) {
|
|
1258
|
+
cid = parts.join(Math.random().toString(36).slice(2));
|
|
1259
|
+
sess_stg?.setItem(key, cid);}
|
|
1260
|
+
return cid}
|
|
1261
|
+
|
|
1262
|
+
get sess_stg() {return globalThis.sessionStorage}
|
|
1263
|
+
|
|
1264
|
+
|
|
1265
|
+
//on_error(err, evt) ::
|
|
1266
|
+
// console.warn @ '[[u8-mqtt error: %s]]', evt, err
|
|
1300
1267
|
|
|
1301
1268
|
//log_conn(evt, arg, err_arg) ::
|
|
1302
1269
|
// console.info @ '[[u8-mqtt log: %s]]', evt, arg, err_arg
|
|
@@ -1373,7 +1340,6 @@ class MQTTCore extends MQTTBase {
|
|
|
1373
1340
|
|
|
1374
1341
|
with_tcp(...opt) {
|
|
1375
1342
|
opt = this._conn_opt(opt);
|
|
1376
|
-
console.log({opt});
|
|
1377
1343
|
return this._use_conn (() =>
|
|
1378
1344
|
this.with_stream(
|
|
1379
1345
|
connect(opt)) ) }
|
|
@@ -1435,7 +1401,7 @@ class MQTTCore extends MQTTBase {
|
|
|
1435
1401
|
|
|
1436
1402
|
return this} }
|
|
1437
1403
|
|
|
1438
|
-
const version = '0.
|
|
1404
|
+
const version = '0.5.0';
|
|
1439
1405
|
|
|
1440
1406
|
const MQTTClient_v4 = /* #__PURE__ */
|
|
1441
1407
|
MQTTCore.mqtt_ctx(4, mqtt_opts_v5);
|