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