From 80712f48da527a1e524e2d04d40ce5734030483e Mon Sep 17 00:00:00 2001
From: Marin Karamihalev <marin.karamihalev@iopsys.eu>
Date: Tue, 20 Jun 2023 13:20:13 +0200
Subject: [PATCH] fix for missing notify error

---
 package.json                  |  2 +-
 public/index.html             |  1 +
 public/modules/commands.html  | 18 +++++++++---------
 public/modules/types.html     |  2 +-
 src/commands/common/notify.ts |  5 +++--
 src/commands/index.ts         | 26 ++++++++++++++++----------
 6 files changed, 31 insertions(+), 23 deletions(-)

diff --git a/package.json b/package.json
index d559976..a603eb7 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 4d861bb..ef81019 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&#39;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 13adb9d..008252f 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">&lt;</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">&gt;</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">&lt;</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">&gt;</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">&lt;</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">&gt;</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">&lt;</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">&gt;</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 443430d..ff57670 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"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="types.html#addresponse" class="tsd-signature-type" data-tsd-kind="Type alias">AddResponse</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol"> &amp; </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"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="types.html#addrawresponse" class="tsd-signature-type" data-tsd-kind="Type alias">AddRawResponse</a><span class="tsd-signature-symbol">&gt;</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"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="types.html#addresponse" class="tsd-signature-type" data-tsd-kind="Type alias">AddResponse</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol"> &amp; </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"> =&gt; </span><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="types.html#addrawresponse" class="tsd-signature-type" data-tsd-kind="Type alias">AddRawResponse</a><span class="tsd-signature-symbol">&gt;</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 cc9b133..bc2cf6a 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 070bcdd..10b8041 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];
   }
 };
 
-- 
GitLab