diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/rpc/MqttV5CloseTransportSessionOnRpcDeliveryTimeoutIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/rpc/MqttV5CloseTransportSessionOnRpcDeliveryTimeoutIntegrationTest.java index 23aa5133c5..1c9aa40a40 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/rpc/MqttV5CloseTransportSessionOnRpcDeliveryTimeoutIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/mqttv5/rpc/MqttV5CloseTransportSessionOnRpcDeliveryTimeoutIntegrationTest.java @@ -42,6 +42,7 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.thingsboard.server.common.data.device.profile.MqttTopics.DEVICE_RPC_REQUESTS_SUB_TOPIC; @@ -97,7 +98,13 @@ public class MqttV5CloseTransportSessionOnRpcDeliveryTimeoutIntegrationTest exte callback.getDisconnectLatch().await(DEFAULT_WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS); assertThat(callback.getReturnCode()).isEqualTo(MqttReturnCode.RETURN_CODE_ADMINISTRITIVE_ACTION); - Rpc persistedRpc = doGet("/api/rpc/persistent/" + response.get("rpcId").asText(), Rpc.class); + // The server re-queues the RPC asynchronously after closing the session. + // Poll until the status transitions from SENT to QUEUED. + String rpcId = response.get("rpcId").asText(); + Rpc persistedRpc = await("RPC re-queued after session close") + .atMost(DEFAULT_WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS) + .until(() -> doGet("/api/rpc/persistent/" + rpcId, Rpc.class), + rpc -> RpcStatus.QUEUED.equals(rpc.getStatus())); assertThat(persistedRpc).isNotNull(); assertThat(persistedRpc.getStatus()).isEqualTo(RpcStatus.QUEUED); assertThat(persistedRpc.getResponse()).isInstanceOf(NullNode.class); diff --git a/msa/js-executor/package.json b/msa/js-executor/package.json index 8f1a7c3d98..413f531a36 100644 --- a/msa/js-executor/package.json +++ b/msa/js-executor/package.json @@ -39,7 +39,7 @@ "fs-extra": "^11.3.1", "nodemon": "^3.1.10", "ts-node": "^10.9.2", - "typescript": "5.9.2" + "typescript": "~5.9.3" }, "resolutions": { "@yao-pkg/pkg/tar": ">=7.5.8" diff --git a/msa/js-executor/pom.xml b/msa/js-executor/pom.xml index e4c13f0e9a..da80d36bf3 100644 --- a/msa/js-executor/pom.xml +++ b/msa/js-executor/pom.xml @@ -81,7 +81,7 @@ yarn - install --non-interactive --network-concurrency 4 --network-timeout 100000 --mutex network + install --non-interactive --check-files --network-concurrency 4 --network-timeout 100000 --mutex network @@ -96,6 +96,17 @@ + + org.apache.maven.plugins + maven-clean-plugin + + + + ${basedir}/node_modules + + + + org.apache.maven.plugins maven-dependency-plugin diff --git a/msa/js-executor/yarn.lock b/msa/js-executor/yarn.lock index 4d80300b56..6457be1de7 100644 --- a/msa/js-executor/yarn.lock +++ b/msa/js-executor/yarn.lock @@ -1634,10 +1634,10 @@ type-is@^2.0.0, type-is@^2.0.1: media-typer "^1.1.0" mime-types "^3.0.0" -typescript@5.9.2: - version "5.9.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" - integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== +typescript@~5.9.3: + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== undefsafe@^2.0.5: version "2.0.5" diff --git a/msa/web-ui/package.json b/msa/web-ui/package.json index eee6e0577d..227262ab14 100644 --- a/msa/web-ui/package.json +++ b/msa/web-ui/package.json @@ -42,7 +42,7 @@ "fs-extra": "^11.3.1", "nodemon": "^3.1.10", "ts-node": "^10.9.2", - "typescript": "5.9.2" + "typescript": "~5.9.3" }, "resolutions": { "@yao-pkg/pkg/tar": ">=7.5.8" diff --git a/msa/web-ui/pom.xml b/msa/web-ui/pom.xml index 3cdf69beca..20c9477b58 100644 --- a/msa/web-ui/pom.xml +++ b/msa/web-ui/pom.xml @@ -90,7 +90,7 @@ yarn - install --non-interactive --network-concurrency 4 --network-timeout 100000 --mutex network + install --non-interactive --check-files --network-concurrency 4 --network-timeout 100000 --mutex network @@ -105,6 +105,17 @@ + + org.apache.maven.plugins + maven-clean-plugin + + + + ${basedir}/node_modules + + + + org.apache.maven.plugins maven-dependency-plugin diff --git a/msa/web-ui/yarn.lock b/msa/web-ui/yarn.lock index 456abcc488..11a708d8bf 100644 --- a/msa/web-ui/yarn.lock +++ b/msa/web-ui/yarn.lock @@ -1716,10 +1716,10 @@ type-is@^2.0.0, type-is@^2.0.1: media-typer "^1.1.0" mime-types "^3.0.0" -typescript@5.9.2: - version "5.9.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" - integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== +typescript@~5.9.3: + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== undefsafe@^2.0.5: version "2.0.5" diff --git a/ui-ngx/pom.xml b/ui-ngx/pom.xml index 56108e7153..88d4f0ad08 100644 --- a/ui-ngx/pom.xml +++ b/ui-ngx/pom.xml @@ -66,11 +66,22 @@ yarn - install --non-interactive --network-concurrency 4 --network-timeout 100000 --mutex network + install --non-interactive --check-files --network-concurrency 4 --network-timeout 100000 --mutex network + + org.apache.maven.plugins + maven-clean-plugin + + + + ${basedir}/node_modules + + + + diff --git a/ui-ngx/src/app/core/services/resources.service.ts b/ui-ngx/src/app/core/services/resources.service.ts index 2929de8b6c..93b1b616b9 100644 --- a/ui-ngx/src/app/core/services/resources.service.ts +++ b/ui-ngx/src/app/core/services/resources.service.ts @@ -24,7 +24,9 @@ import { ɵCssSelectorList, ɵNG_COMP_DEF, ɵNG_MOD_DEF, + ɵNG_PIPE_DEF, ɵNgModuleDef, + ɵPipeDef, DOCUMENT } from '@angular/core'; @@ -302,6 +304,12 @@ export class ResourcesService { (component as any).standalone = false; } } + if (ɵNG_PIPE_DEF in decl) { + const pipe: ɵPipeDef = decl[ɵNG_PIPE_DEF]; + if (isUndefined(pipe.standalone) || pipe.standalone) { + (pipe as any).standalone = false; + } + } } } modulesWithComponents.modules.push(moduleInfo);