Repository: apache/streampipes
Pull request #1178 (2023-01-30 02:34:43)

Bump jna from 5.8.0 to 5.13.0
Bumps [jna](https://github.com/java-native-access/jna) from 5.8.0 to 5.13.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/java-native-access/jna/blob/master/CHANGES.md">jna's changelog</a>.</em></p>
<blockquote>
<h1>Release (5.13.0)</h1>
<h2>Features</h2>
<ul>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/pull/1454">#1454</a>: Add <code>c.s.j.p.win32.Psapi.QueryWorkingSetEx</code> and associated Types - <a href="https://github.com/Crain-32"><code>@​crain-32</code></a>.</li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/pull/1459">#1459</a>: Add <code>VirtualLock</code> and <code>VirtualUnlock</code> in <code>c.s.j.p.win32.Kernel32</code> - <a href="https://github.com/matthiasblaesing"><code>@​matthiasblaesing</code></a>.</li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/pull/1471">#1471</a>: Add <code>c.s.j.p.win32.Advapi32Util#isCurrentProcessElevated</code> and associated Types - <a href="https://github.com/dbwiddis"><code>@​dbwiddis</code></a>.</li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/pull/1474">#1474</a>: Add <code>c.s.j.p.win32.WbemCli#IWbemClassObject.IWbemQualifierSet</code>, <code>IWbemServices.GetObject</code>, <code>IWbemContext.SetValue</code> and associated methods - <a href="https://github.com/rchateauneu"><code>@​rchateauneu</code></a>.</li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/pull/1482">#1482</a>: Add multilingual support of <code>Kernel32Util.formatMessage</code> - <a href="https://github.com/overpathz"><code>@​overpathz</code></a>.</li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/pull/1490">#1490</a>: Adds support for a custom <code>SymbolProvider</code> in <code>NativeLibrary</code> &amp; <code>Library</code> - <a href="https://github.com/soywiz"><code>@​soywiz</code></a>.</li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/pull/1491">#1491</a>: Update libffi to v3.4.4  - <a href="https://github.com/matthiasblaesing"><code>@​matthiasblaesing</code></a>.</li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/issues/1487">#1487</a>: Add 'uses' information to OSGI metadata in MANIFEST.MF to improve stability of package resolution - <a href="https://github.com/sratz"><code>@​sratz</code></a>.</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/issues/1452">#1452</a>: Fix memory allocation/handling for error message generation in native library code (<code>dispatch.c</code>) - <a href="https://github.com/matthiasblaesing"><code>@​matthiasblaesing</code></a>.</li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/issues/1460">#1460</a>: Fix win32 variant date conversion in DST offest window and with millisecond values - <a href="https://github.com/eranl"><code>@​eranl</code></a>.</li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/issues/1472">#1472</a>: Fix incorrect bitmask in <code>c.s.j.Pointer#createConstant(int)</code> - <a href="https://github.com/dbwiddis"><code>@​dbwiddis</code></a>.</li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/issues/1481">#1481</a>: Fix NPE in NativeLibrary when unpacking from classpath is disabled - <a href="https://github.com/trespasserw"><code>@​trespasserw</code></a>.</li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/pull/1489">#1489</a>: Fixes typo in <code>OpenGL32Util#wglGetProcAddress</code>, instead of parameter <code>procName</code> the hardcoded value <code>wglEnumGpusNV</code> was used - <a href="https://github.com/soywiz"><code>@​soywiz</code></a>.</li>
</ul>
<h1>Release 5.12.1</h1>
<h2>Bug Fixes</h2>
<ul>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/issues/1447">#1447</a>: Null-check cleanable in <code>c.s.j.Memory#close</code> - <a href="https://github.com/dbwiddis"><code>@​dbwiddis</code></a>.</li>
</ul>
<h1>Release 5.12.0</h1>
<h2>Features</h2>
<ul>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/pull/1433">#1433</a>: Add <code>CFEqual</code>, <code>CFDictionaryRef.ByReference</code>, <code>CFStringRef.ByReference</code> to <code>c.s.j.p.mac.CoreFoundation</code> - <a href="https://github.com/shalupov"><code>@​shalupov</code></a></li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/issues/978">#978</a>: Remove use of finalizers in JNA and improve concurrency for <code>Memory</code>, <code>CallbackReference</code> and <code>NativeLibrary</code> - <a href="https://github.com/matthiasblaesing"><code>@​matthiasblaesing</code></a>.</li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/pull/1440">#1440</a>: Support for LoongArch64 - <a href="https://github.com/Panxuefeng-loongson"><code>@​Panxuefeng-loongson</code></a>.</li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/pull/1444">#1444</a>: Update embedded libffi to 1f14b3fa92d4442a60233e9596ddec428a985e3c and rebuild native libraries - <a href="https://github.com/matthiasblaesing"><code>@​matthiasblaesing</code></a>.</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/pull/1438">#1438</a>: Handle arrays in structures with differing size - <a href="https://github.com/matthiasblaesing"><code>@​matthiasblaesing</code></a>.</li>
<li><a href="https://github-redirect.dependabot.com/java-native-access/jna/issues/1442">#1442</a>: Handle race condition in <code>c.s.j.p.win32.PdhUtil#PdhEnumObjectItems</code> - <a href="https://github.com/dbwiddis"><code>@​dbwiddis</code></a>.</li>
</ul>
<h2>Important Changes</h2>
<ul>
<li><code>Memory#dispose</code>, <code>CallbackReference#dispose</code> and <code>NativeLibrary#dispose</code>
were called by the <code>Object#finalize</code> override. These calls were replaced by
the use of a cleaner. It is not guaranteed anymore, that <code>dispose</code> is called
on subclasses on finalization.</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/java-native-access/jna/commit/4962fd7758493b7395e86578705d8a32f6238872"><code>4962fd7</code></a> Release 5.13.0</li>
<li><a href="https://github.com/java-native-access/jna/commit/a56504611b00cc7d90c165f924c3915cb7a6f759"><code>a565046</code></a> Adjust release directions</li>
<li><a href="https://github.com/java-native-access/jna/commit/f7017c4f957d7fc13c7455efcae200e29407a729"><code>f7017c4</code></a> Remove artifacts classified as &quot;-jpms&quot;, there are the jna-jpms and jna-platfo...</li>
<li><a href="https://github.com/java-native-access/jna/commit/a5f47cd359d5fe62a0e5d6c2bd9d649874be955d"><code>a5f47cd</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/java-native-access/jna/issues/1494">#1494</a> from matthiasblaesing/pr-1492</li>
<li><a href="https://github.com/java-native-access/jna/commit/1af6eb14e0059c7acd5d5ee71fd62e519536fac5"><code>1af6eb1</code></a> Improve documentation, ensure osgi.version is defined, wrap create-export-pac...</li>
<li><a href="https://github.com/java-native-access/jna/commit/65cf52803ec2249c61573bdc7bd4314b77c019a0"><code>65cf528</code></a> add utility shell script to create 'Export-Package' metadata</li>
<li><a href="https://github.com/java-native-access/jna/commit/b3984aaf1bf87c8da2e84797f62180adc405b48a"><code>b3984aa</code></a> Add 'uses' information to OSGI metadata in MANIFEST.MF</li>
<li><a href="https://github.com/java-native-access/jna/commit/780facdf55b488d504c17183066df6a34531d747"><code>780facd</code></a> Add missing change log entry for libffi update</li>
<li><a href="https://github.com/java-native-access/jna/commit/5dd4bd707f8f1f49b5d1af158402859a86161367"><code>5dd4bd7</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/java-native-access/jna/issues/1491">#1491</a> from matthiasblaesing/update_libffi</li>
<li><a href="https://github.com/java-native-access/jna/commit/db1b5531b10fed9fb68d6d4d79913660759b22d3"><code>db1b553</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/java-native-access/jna/issues/1490">#1490</a> from korlibs/feature/direct.mapping.custom.symbol.pr...</li>
<li>Additional commits viewable in <a href="https://github.com/java-native-access/jna/compare/5.8.0...5.13.0">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=net.java.dev.jna:jna&package-manager=maven&previous-version=5.8.0&new-version=5.13.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>


Patch:
diff --git a/pom.xml b/pom.xml
index 045286e085..0750bb3d2e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -89,7 +89,7 @@
 	<jetty.version>10.0.10</jetty.version>
 	<jgrapht.version>1.5.1</jgrapht.version>
 	<jjwt.version>0.11.2</jjwt.version>
-	<jna.version>5.8.0</jna.version>
+	<jna.version>5.13.0</jna.version>
 	<json-path.version>5.3.0</json-path.version>
 	<json-smart.version>2.4.8</json-smart.version>
 	<jsr305.version>3.0.2</jsr305.version>
@@ -205,7 +205,7 @@
 
 	<apache-rat-plugin.version>0.13</apache-rat-plugin.version>
 	<checksum-maven-plugin.version>1.11</checksum-maven-plugin.version>
-	<checkstyle.version>9.2.1</checkstyle.version>
+	<checkstyle.version>10.6.0</checkstyle.version>
 	<extra-enforcer-rules.version>1.6.1</extra-enforcer-rules.version>
 	<formatter-maven-plugin.version>2.21.0</formatter-maven-plugin.version>
 	<maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version>
diff --git a/streampipes-client-python/Makefile b/streampipes-client-python/Makefile
index 245e323c70..6413785b3b 100644
--- a/streampipes-client-python/Makefile
+++ b/streampipes-client-python/Makefile
@@ -15,8 +15,6 @@
 # limitations under the License.
 #
 
-COMMIT_HASH := $(shell eval git rev-parse HEAD)
-
 .PHONY: check
 check: mypy lint unit-tests
 
diff --git a/streampipes-client-python/setup.py b/streampipes-client-python/setup.py
index f2c54a404e..f4c7ac96d8 100644
--- a/streampipes-client-python/setup.py
+++ b/streampipes-client-python/setup.py
@@ -21,7 +21,7 @@ import os
 import setuptools
 
 # Package meta-data.
-NAME = "streampipes_client"
+NAME = "streampipes-client"
 DESCRIPTION = "Python client for Apache StreamPipes"
 LONG_DESCRIPTION_CONTENT_TYPE = "text/markdown"
 URL = "https://github.com/apache/streampipes/"
@@ -43,7 +43,7 @@ dev_packages = base_packages + [
     "blacken-docs==1.13.0",
     "flake8==6.0.0",
     "interrogate==1.5.0",
-    "isort==5.11.4",
+    "isort==5.12.0",
     "mypy==0.991",
     "pandas-stubs==1.5.2.230105",
     "pre-commit==3.0.0",
@@ -74,7 +74,7 @@ with io.open(os.path.join(here, "README.md"), encoding="utf-8") as f:
 
 # Load the package's __version__.py module as a dictionary.
 about = {}
-with open(os.path.join(here, NAME, "__version__.py")) as f:
+with open(os.path.join(here, "streampipes_client", "__version__.py")) as f:
     exec(f.read(), about)
 
 # Where the magic happens:
diff --git a/streampipes-client/pom.xml b/streampipes-client/pom.xml
index 7db3fee9f2..ee91bc71c4 100644
--- a/streampipes-client/pom.xml
+++ b/streampipes-client/pom.xml
@@ -71,6 +71,13 @@
             <version>0.91.0-SNAPSHOT</version>
         </dependency>
 
+        <!-- Test dependencies -->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+
         <!-- 3rd party Dependencies -->
         <dependency>
             <groupId>commons-collections</groupId>
diff --git a/streampipes-client/src/main/java/org/apache/streampipes/client/api/CustomRequestApi.java b/streampipes-client/src/main/java/org/apache/streampipes/client/api/CustomRequestApi.java
index b4e679fef8..9b9a453bcb 100644
--- a/streampipes-client/src/main/java/org/apache/streampipes/client/api/CustomRequestApi.java
+++ b/streampipes-client/src/main/java/org/apache/streampipes/client/api/CustomRequestApi.java
@@ -20,6 +20,8 @@ package org.apache.streampipes.client.api;
 import org.apache.streampipes.client.model.StreamPipesClientConfig;
 import org.apache.streampipes.client.util.StreamPipesApiPath;
 
+import java.util.Map;
+
 public class CustomRequestApi extends AbstractClientApi {
 
   public CustomRequestApi(StreamPipesClientConfig clientConfig) {
@@ -34,4 +36,11 @@ public class CustomRequestApi extends AbstractClientApi {
     return getSingle(StreamPipesApiPath.fromStreamPipesBasePath(apiPath), responseClass);
   }
 
+  public <T> T sendGet(String apiPath, Map<String, String> queryParameters, Class<T> responseClass) {
+    return getSingle(
+        StreamPipesApiPath.fromStreamPipesBasePath(apiPath)
+            .withQueryParameters(queryParameters),
+        responseClass);
+  }
+
 }
diff --git a/streampipes-client/src/main/java/org/apache/streampipes/client/util/StreamPipesApiPath.java b/streampipes-client/src/main/java/org/apache/streampipes/client/util/StreamPipesApiPath.java
index f083217e11..72fff42a5b 100644
--- a/streampipes-client/src/main/java/org/apache/streampipes/client/util/StreamPipesApiPath.java
+++ b/streampipes-client/src/main/java/org/apache/streampipes/client/util/StreamPipesApiPath.java
@@ -17,19 +17,25 @@
  */
 package org.apache.streampipes.client.util;
 
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.StringJoiner;
 
 public class StreamPipesApiPath {
 
   private static final List<String> BaseApiPathV2 = Arrays.asList("streampipes-backend", "api", "v2");
-  private List<String> pathItems;
+  private final List<String> pathItems;
+  private final Map<String, String> queryParameters;
 
   private StreamPipesApiPath(List<String> initialPathItems) {
     this.pathItems = initialPathItems;
+    this.queryParameters = new HashMap<>();
   }
 
   public static StreamPipesApiPath fromStreamPipesBasePath() {
@@ -51,10 +57,33 @@ public class StreamPipesApiPath {
     return this;
   }
 
+  public StreamPipesApiPath withQueryParameters(Map<String, String> queryParameters) {
+    this.queryParameters.putAll(queryParameters);
+    return this;
+  }
+
   @Override
   public String toString() {
     StringJoiner joiner = new StringJoiner("/");
     pathItems.forEach(joiner::add);
-    return joiner.toString();
+    return appendQueryParameters(joiner.toString());
+  }
+
+  private String appendQueryParameters(String input) {
+
+    StringJoiner joiner = new StringJoiner("&");
+    for (Map.Entry<String, String> parameter : queryParameters.entrySet()) {
+      joiner.add(applyEncoding(parameter.getKey()) + "=" + applyEncoding(parameter.getValue()));
+    }
+
+    if (joiner.length() > 0) {
+      return input + "?" + joiner;
+    } else {
+      return input;
+    }
+  }
+
+  private String applyEncoding(String value) {
+    return URLEncoder.encode(value, StandardCharsets.UTF_8);
   }
 }
diff --git a/ui/package-lock.json b/ui/package-lock.json
index d9e2b12b16..7f980cc53e 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -67,7 +67,7 @@
         "showdown": "1.9.1",
         "stream-browserify": "3.0.0",
         "swagger-ui": "4.15.5",
-        "tslib": "^2.4.1",
+        "tslib": "^2.5.0",
         "zone.js": "~0.12.0"
       },
       "devDependencies": {
@@ -91,7 +91,7 @@
         "@types/node": "^18.11.18",
         "@types/rx": "^4.1.2",
         "@types/showdown": "1.9.4",
-        "@typescript-eslint/eslint-plugin": "5.48.0",
+        "@typescript-eslint/eslint-plugin": "5.49.0",
         "@typescript-eslint/parser": "5.48.0",
         "ajv-keywords": "^5.1.0",
         "assert": "^2.0.0",
@@ -6171,14 +6171,14 @@
       }
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "5.48.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.0.tgz",
-      "integrity": "sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==",
+      "version": "5.49.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz",
+      "integrity": "sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "5.48.0",
-        "@typescript-eslint/type-utils": "5.48.0",
-        "@typescript-eslint/utils": "5.48.0",
+        "@typescript-eslint/scope-manager": "5.49.0",
+        "@typescript-eslint/type-utils": "5.49.0",
+        "@typescript-eslint/utils": "5.49.0",
         "debug": "^4.3.4",
         "ignore": "^5.2.0",
         "natural-compare-lite": "^1.4.0",
@@ -6203,14 +6203,31 @@
         }
       }
     },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
+      "version": "5.49.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz",
+      "integrity": "sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==",
+      "dev": true,
+      "dependencies": {
+        "@typescript-eslint/types": "5.49.0",
+        "@typescript-eslint/visitor-keys": "5.49.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
     "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": {
-      "version": "5.48.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.0.tgz",
-      "integrity": "sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==",
+      "version": "5.49.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.49.0.tgz",
+      "integrity": "sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "5.48.0",
-        "@typescript-eslint/utils": "5.48.0",
+        "@typescript-eslint/typescript-estree": "5.49.0",
+        "@typescript-eslint/utils": "5.49.0",
         "debug": "^4.3.4",
         "tsutils": "^3.21.0"
       },
@@ -6230,17 +6247,57 @@
         }
       }
     },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
+      "version": "5.49.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.49.0.tgz",
+      "integrity": "sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==",
+      "dev": true,
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": {
+      "version": "5.49.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.49.0.tgz",
+      "integrity": "sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==",
+      "dev": true,
+      "dependencies": {
+        "@typescript-eslint/types": "5.49.0",
+        "@typescript-eslint/visitor-keys": "5.49.0",
+        "debug": "^4.3.4",
+        "globby": "^11.1.0",
+        "is-glob": "^4.0.3",
+        "semver": "^7.3.7",
+        "tsutils": "^3.21.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": {
-      "version": "5.48.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.0.tgz",
-      "integrity": "sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==",
+      "version": "5.49.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.49.0.tgz",
+      "integrity": "sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==",
       "dev": true,
       "dependencies": {
         "@types/json-schema": "^7.0.9",
         "@types/semver": "^7.3.12",
-        "@typescript-eslint/scope-manager": "5.48.0",
-        "@typescript-eslint/types": "5.48.0",
-        "@typescript-eslint/typescript-estree": "5.48.0",
+        "@typescript-eslint/scope-manager": "5.49.0",
+        "@typescript-eslint/types": "5.49.0",
+        "@typescript-eslint/typescript-estree": "5.49.0",
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^3.0.0",
         "semver": "^7.3.7"
@@ -6256,6 +6313,23 @@
         "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
       }
     },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
+      "version": "5.49.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz",
+      "integrity": "sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==",
+      "dev": true,
+      "dependencies": {
+        "@typescript-eslint/types": "5.49.0",
+        "eslint-visitor-keys": "^3.3.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
     "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-scope": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -24753,9 +24827,9 @@
       }
     },
     "node_modules/tslib": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
-      "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
+      "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
     },
     "node_modules/tsutils": {
       "version": "3.21.0",
@@ -31057,14 +31131,14 @@
       }
     },
     "@typescript-eslint/eslint-plugin": {
-      "version": "5.48.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.0.tgz",
-      "integrity": "sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==",
+      "version": "5.49.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz",
+      "integrity": "sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/scope-manager": "5.48.0",
-        "@typescript-eslint/type-utils": "5.48.0",
-        "@typescript-eslint/utils": "5.48.0",
+        "@typescript-eslint/scope-manager": "5.49.0",
+        "@typescript-eslint/type-utils": "5.49.0",
+        "@typescript-eslint/utils": "5.49.0",
         "debug": "^4.3.4",
         "ignore": "^5.2.0",
         "natural-compare-lite": "^1.4.0",
@@ -31073,34 +31147,75 @@
         "tsutils": "^3.21.0"
       },
       "dependencies": {
+        "@typescript-eslint/scope-manager": {
+          "version": "5.49.0",
+          "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz",
+          "integrity": "sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==",
+          "dev": true,
+          "requires": {
+            "@typescript-eslint/types": "5.49.0",
+            "@typescript-eslint/visitor-keys": "5.49.0"
+          }
+        },
         "@typescript-eslint/type-utils": {
-          "version": "5.48.0",
-          "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.0.tgz",
-          "integrity": "sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==",
+          "version": "5.49.0",
+          "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.49.0.tgz",
+          "integrity": "sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==",
+          "dev": true,
+          "requires": {
+            "@typescript-eslint/typescript-estree": "5.49.0",
+            "@typescript-eslint/utils": "5.49.0",
+            "debug": "^4.3.4",
+            "tsutils": "^3.21.0"
+          }
+        },
+        "@typescript-eslint/types": {
+          "version": "5.49.0",
+          "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.49.0.tgz",
+          "integrity": "sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==",
+          "dev": true
+        },
+        "@typescript-eslint/typescript-estree": {
+          "version": "5.49.0",
+          "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.49.0.tgz",
+          "integrity": "sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==",
           "dev": true,
           "requires": {
-            "@typescript-eslint/typescript-estree": "5.48.0",
-            "@typescript-eslint/utils": "5.48.0",
+            "@typescript-eslint/types": "5.49.0",
+            "@typescript-eslint/visitor-keys": "5.49.0",
             "debug": "^4.3.4",
+            "globby": "^11.1.0",
+            "is-glob": "^4.0.3",
+            "semver": "^7.3.7",
             "tsutils": "^3.21.0"
           }
         },
         "@typescript-eslint/utils": {
-          "version": "5.48.0",
-          "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.0.tgz",
-          "integrity": "sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==",
+          "version": "5.49.0",
+          "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.49.0.tgz",
+          "integrity": "sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==",
           "dev": true,
           "requires": {
             "@types/json-schema": "^7.0.9",
             "@types/semver": "^7.3.12",
-            "@typescript-eslint/scope-manager": "5.48.0",
-            "@typescript-eslint/types": "5.48.0",
-            "@typescript-eslint/typescript-estree": "5.48.0",
+            "@typescript-eslint/scope-manager": "5.49.0",
+            "@typescript-eslint/types": "5.49.0",
+            "@typescript-eslint/typescript-estree": "5.49.0",
             "eslint-scope": "^5.1.1",
             "eslint-utils": "^3.0.0",
             "semver": "^7.3.7"
           }
         },
+        "@typescript-eslint/visitor-keys": {
+          "version": "5.49.0",
+          "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz",
+          "integrity": "sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==",
+          "dev": true,
+          "requires": {
+            "@typescript-eslint/types": "5.49.0",
+            "eslint-visitor-keys": "^3.3.0"
+          }
+        },
         "eslint-scope": {
           "version": "5.1.1",
           "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -45475,9 +45590,9 @@
       }
     },
     "tslib": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
-      "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
+      "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
     },
     "tsutils": {
       "version": "3.21.0",
diff --git a/ui/package.json b/ui/package.json
index 27f1da31eb..1ba67fa0e6 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -89,7 +89,7 @@
     "showdown": "1.9.1",
     "stream-browserify": "3.0.0",
     "swagger-ui": "4.15.5",
-    "tslib": "^2.4.1",
+    "tslib": "^2.5.0",
     "zone.js": "~0.12.0"
   },
   "devDependencies": {
@@ -113,7 +113,7 @@
     "@types/node": "^18.11.18",
     "@types/rx": "^4.1.2",
     "@types/showdown": "1.9.4",
-    "@typescript-eslint/eslint-plugin": "5.48.0",
+    "@typescript-eslint/eslint-plugin": "5.49.0",
     "@typescript-eslint/parser": "5.48.0",
     "ajv-keywords": "^5.1.0",
     "assert": "^2.0.0",


Test patch:
diff --git a/streampipes-client/src/test/java/org/apache/streampipes/client/util/StreamPipesApiPathTest.java b/streampipes-client/src/test/java/org/apache/streampipes/client/util/StreamPipesApiPathTest.java
new file mode 100644
index 0000000000..96444594f3
--- /dev/null
+++ b/streampipes-client/src/test/java/org/apache/streampipes/client/util/StreamPipesApiPathTest.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.streampipes.client.util;
+
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+
+public class StreamPipesApiPathTest {
+  Map<String, String> queryParameters = new HashMap();
+
+  StreamPipesApiPath streamPipesApiPath = StreamPipesApiPath
+      .fromBaseApiPath();
+
+  String baseRoute = streamPipesApiPath.toString();
+
+  @Test
+  public void testWithEmptyQueryParameters() {
+
+    var result = streamPipesApiPath
+        .withQueryParameters(queryParameters)
+        .toString();
+
+    assertEquals(baseRoute, result);
+  }
+
+  @Test
+  public void testWithOneQueryParameter() {
+    queryParameters.put("one", "v1");
+
+    var result = streamPipesApiPath
+        .withQueryParameters(queryParameters)
+        .toString();
+
+    assertEquals(baseRoute + "?one=v1", result);
+  }
+
+  @Test
+  public void testWithMultipleQueryParameters() {
+    queryParameters.put("one", "v1");
+    queryParameters.put("two", "v2");
+
+    var result = streamPipesApiPath
+        .withQueryParameters(queryParameters)
+        .toString();
+
+    assertEquals(baseRoute + "?two=v2&one=v1", result);
+  }
+
+  @Test
+  public void testEncodeParameters() {
+    queryParameters.put("one", "[v1]");
+
+    var result = streamPipesApiPath
+        .withQueryParameters(queryParameters)
+        .toString();
+
+    assertEquals(baseRoute + "?one=%5Bv1%5D", result);
+  }
+
+}
\ No newline at end of file