diff --git a/package.json b/package.json index d55997674d1b706a4a9ec29161b6f753ef3ad603..a603eb719419bd6736aa4ecd71b37a57997d38c7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "usp-js", - "version": "0.4.1", + "version": "0.4.2", "description": "Helper library for easy usp communication using mqtt over tcp or ws.", "main": "node/index.js", "browser": "web/index.js", diff --git a/public/index.html b/public/index.html index 4d861bb165cde51c0f444ce9ccc3fa4f85b5c0eb..ef810194c0946e97a6939684cd216b0e1829f532 100644 --- a/public/index.html +++ b/public/index.html @@ -64,6 +64,7 @@ <p>Helper library for easy usp communication using mqtt over tcp or ws.</p> <ul> <li><a href="https://iopsys.se/usp-js/index.html">API documentation for usp-js</a></li> + <li><a href="https://dev.iopsys.eu/websdk/usp-js">usp-js repository</a></li> <li><a href="https://usp-data-models.broadband-forum.org/tr-181-2-14-0-usp.html">BBF's USP reference documentation</a></li> </ul> <a href="#installation" id="installation" style="color: inherit; text-decoration: none;"> diff --git a/public/modules/commands.html b/public/modules/commands.html index 13adb9d10812e970abe4946fdc79e91a2f1fa716..008252f0f48926fe1e1a8152fee4f28899ead7d5 100644 --- a/public/modules/commands.html +++ b/public/modules/commands.html @@ -100,7 +100,7 @@ <li class="tsd-description"> <aside class="tsd-sources"> <ul> - <li>Defined in commands/index.ts:79</li> + <li>Defined in commands/index.ts:91</li> </ul> </aside> <h4 class="tsd-parameters-title">Parameters</h4> @@ -175,7 +175,7 @@ <li class="tsd-description"> <aside class="tsd-sources"> <ul> - <li>Defined in commands/index.ts:107</li> + <li>Defined in commands/index.ts:119</li> </ul> </aside> <h4 class="tsd-parameters-title">Parameters</h4> @@ -207,7 +207,7 @@ <li class="tsd-description"> <aside class="tsd-sources"> <ul> - <li>Defined in commands/index.ts:183</li> + <li>Defined in commands/index.ts:195</li> </ul> </aside> <h4 class="tsd-parameters-title">Parameters</h4> @@ -230,7 +230,7 @@ <li class="tsd-description"> <aside class="tsd-sources"> <ul> - <li>Defined in commands/index.ts:122</li> + <li>Defined in commands/index.ts:134</li> </ul> </aside> <h4 class="tsd-parameters-title">Parameters</h4> @@ -265,7 +265,7 @@ <li class="tsd-description"> <aside class="tsd-sources"> <ul> - <li>Defined in commands/index.ts:146</li> + <li>Defined in commands/index.ts:158</li> </ul> </aside> <h4 class="tsd-parameters-title">Parameters</h4> @@ -347,7 +347,7 @@ <li class="tsd-description"> <aside class="tsd-sources"> <ul> - <li>Defined in commands/index.ts:177</li> + <li>Defined in commands/index.ts:189</li> </ul> </aside> <h4 class="tsd-parameters-title">Parameters</h4> @@ -370,7 +370,7 @@ <li class="tsd-description"> <aside class="tsd-sources"> <ul> - <li>Defined in commands/index.ts:186</li> + <li>Defined in commands/index.ts:198</li> </ul> </aside> <h4 class="tsd-parameters-title">Parameters</h4> @@ -387,7 +387,7 @@ <a name="readmsg" class="tsd-anchor"></a> <h3><span class="tsd-flag ts-flagConst">Const</span> read<wbr>Msg</h3> <ul class="tsd-signatures tsd-kind-function tsd-parent-kind-module"> - <li class="tsd-signature tsd-kind-icon">read<wbr>Msg<span class="tsd-signature-symbol">(</span>proto<span class="tsd-signature-symbol">: </span><a href="types.html#proto" class="tsd-signature-type" data-tsd-kind="Type alias">Proto</a>, data<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">></span></li> + <li class="tsd-signature tsd-kind-icon">read<wbr>Msg<span class="tsd-signature-symbol">(</span>proto<span class="tsd-signature-symbol">: </span><a href="types.html#proto" class="tsd-signature-type" data-tsd-kind="Type alias">Proto</a>, data<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">]</span></li> </ul> <ul class="tsd-descriptions"> <li class="tsd-description"> @@ -405,7 +405,7 @@ <h5>data: <span class="tsd-signature-type">any</span></h5> </li> </ul> - <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">></span></h4> + <h4 class="tsd-returns-title">Returns <span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">]</span></h4> </li> </ul> </section> diff --git a/public/modules/types.html b/public/modules/types.html index 443430d1f78999cf0b76ce42bb4bab82dcdb6364..ff576705e66e63f8283e029d6112fddf12e31e35 100644 --- a/public/modules/types.html +++ b/public/modules/types.html @@ -186,7 +186,7 @@ <section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-module"> <a name="addcommand" class="tsd-anchor"></a> <h3>Add<wbr>Command</h3> - <div class="tsd-signature tsd-kind-icon">Add<wbr>Command<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span>, value<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol"> | </span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> | </span><a href="types.html#inputrecord" class="tsd-signature-type" data-tsd-kind="Type alias">InputRecord</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">(</span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol"> | </span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> | </span><a href="types.html#inputrecord" class="tsd-signature-type" data-tsd-kind="Type alias">InputRecord</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">undefined</span>, options<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-symbol">{ </span>raw<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">false</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><a href="types.html#addresponse" class="tsd-signature-type" data-tsd-kind="Type alias">AddResponse</a><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> & </span><span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span>, value<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol"> | </span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> | </span><a href="types.html#inputrecord" class="tsd-signature-type" data-tsd-kind="Type alias">InputRecord</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">(</span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol"> | </span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> | </span><a href="types.html#inputrecord" class="tsd-signature-type" data-tsd-kind="Type alias">InputRecord</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">undefined</span>, options<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>raw<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">true</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><a href="types.html#addrawresponse" class="tsd-signature-type" data-tsd-kind="Type alias">AddRawResponse</a><span class="tsd-signature-symbol">></span></div> + <div class="tsd-signature tsd-kind-icon">Add<wbr>Command<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span>, value<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-symbol">(</span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol"> | </span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> | </span><a href="types.html#inputrecord" class="tsd-signature-type" data-tsd-kind="Type alias">InputRecord</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">(</span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol"> | </span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> | </span><a href="types.html#inputrecord" class="tsd-signature-type" data-tsd-kind="Type alias">InputRecord</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">null</span>, options<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-symbol">{ </span>raw<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">false</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><a href="types.html#addresponse" class="tsd-signature-type" data-tsd-kind="Type alias">AddResponse</a><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> & </span><span class="tsd-signature-symbol">(</span>path<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span>, value<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">(</span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol"> | </span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> | </span><a href="types.html#inputrecord" class="tsd-signature-type" data-tsd-kind="Type alias">InputRecord</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">(</span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol"> | </span><a href="types.html#jsvalue" class="tsd-signature-type" data-tsd-kind="Type alias">JSValue</a><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> | </span><a href="types.html#inputrecord" class="tsd-signature-type" data-tsd-kind="Type alias">InputRecord</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">undefined</span>, options<span class="tsd-signature-symbol">: </span><span class="tsd-signature-symbol">{ </span>raw<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">true</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> => </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><a href="types.html#addrawresponse" class="tsd-signature-type" data-tsd-kind="Type alias">AddRawResponse</a><span class="tsd-signature-symbol">></span></div> <aside class="tsd-sources"> <ul> <li>Defined in types.ts:166</li> diff --git a/src/commands/common/notify.ts b/src/commands/common/notify.ts index cc9b13306035e37d98193906db75df957d9ed689..bc2cf6a020480189c5fe3222d2d76d106bdef495 100644 --- a/src/commands/common/notify.ts +++ b/src/commands/common/notify.ts @@ -13,9 +13,10 @@ const decode: DecodeFn = (msg) => { const relField = Object.keys(parent).find( (k) => k !== "subscriptionId" && k !== "sendResp" ); + const err = util.search(msg, "cmdFailure") return id && relField - ? [parseInfo(relField, msg), id, null] - : [null, id, null]; + ? [parseInfo(relField, msg), id, err] + : [null, id, err]; } return [null]; }; diff --git a/src/commands/index.ts b/src/commands/index.ts index 070bcdd8da69ddf15ff110a93b0e148585375dc5..10b804159e87c2a9f8259f901355396a4cd1557b 100644 --- a/src/commands/index.ts +++ b/src/commands/index.ts @@ -59,6 +59,12 @@ export const decodeRecord = (proto: Proto, data: any): Record<string, any> => { return JSON.parse(JSON.stringify(decodedRecord)); }; +const readableError = (err) => + Object.getOwnPropertyNames(err).reduce((acc, key) => { + acc[key] = err[key]; + return acc; + }, {}); + export const readMsg = ( proto: Proto, data: any @@ -68,21 +74,21 @@ export const readMsg = ( "binaryData" in data ? data.binaryData : data ); - const convertedDecodedRecord = JSON.parse(JSON.stringify(decodedRecord)) + const convertedDecodedRecord = JSON.parse(JSON.stringify(decodedRecord)); if ("disconnect" in convertedDecodedRecord) return [{}, convertedDecodedRecord.disconnect, true]; - - try { - const msg = proto.rootMsg.lookupType("usp.Msg"); - const decodedMsg = msg.decode( - decodedRecord.noSessionContext?.payload || + + try { + const msg = proto.rootMsg.lookupType("usp.Msg"); + const decodedMsg = msg.decode( + decodedRecord.noSessionContext?.payload || decodedRecord.sessionContext?.payload[0] - ); - - // forces conversion + ); + + // forces conversion return [JSON.parse(JSON.stringify(decodedMsg)), null, false]; } catch (err) { - return [{}, err, false]; + return [{}, readableError(err), false]; } };