commit e3c810b1a6ffee20de3fb6590218be4825c60f75
Author: 杨堃 <3047900358@qq.com>
Date: Mon Jul 13 12:06:16 2026 +0800
首次提交
diff --git a/.arkui-x/android/app/build.gradle b/.arkui-x/android/app/build.gradle
new file mode 100644
index 0000000..2e7e988
--- /dev/null
+++ b/.arkui-x/android/app/build.gradle
@@ -0,0 +1,49 @@
+plugins {
+ id 'com.android.application'
+}
+
+android {
+ compileSdkVersion 33
+ buildToolsVersion "30.0.3"
+
+ defaultConfig {
+ applicationId "com.example.waterapp"
+ minSdkVersion 26
+ targetSdkVersion 33
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+
+ ndk {
+ abiFilters "arm64-v8a", "armeabi-v7a"
+ }
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.debug
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ dynamicFeatures = []
+
+ sourceSets {
+ main {
+ jniLibs.srcDirs = ['libs']
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
+ testImplementation 'junit:junit:4.+'
+ androidTestImplementation 'com.android.support.test:runner:1.0.2'
+ androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+}
diff --git a/.arkui-x/android/app/proguard-rules.pro b/.arkui-x/android/app/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/.arkui-x/android/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/.arkui-x/android/app/src/androidTest/java/com/example/waterapp/ExampleInstrumentedTest.java b/.arkui-x/android/app/src/androidTest/java/com/example/waterapp/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..64451ac
--- /dev/null
+++ b/.arkui-x/android/app/src/androidTest/java/com/example/waterapp/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.example.waterapp;
+
+import android.content.Context;
+
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("com.example.waterapp", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/.arkui-x/android/app/src/main/AndroidManifest.xml b/.arkui-x/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..bae623d
--- /dev/null
+++ b/.arkui-x/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.arkui-x/android/app/src/main/java/com/example/waterapp/EntryEntryAbilityActivity.java b/.arkui-x/android/app/src/main/java/com/example/waterapp/EntryEntryAbilityActivity.java
new file mode 100644
index 0000000..ff1be68
--- /dev/null
+++ b/.arkui-x/android/app/src/main/java/com/example/waterapp/EntryEntryAbilityActivity.java
@@ -0,0 +1,24 @@
+package com.example.waterapp;
+
+import android.os.Bundle;
+import android.util.Log;
+
+import ohos.stage.ability.adapter.StageActivity;
+
+
+/**
+ * Example ace activity class, which will load ArkUI-X ability instance.
+ * StageActivity is provided by ArkUI-X
+ * @see
+ * to build android library
+ */
+public class EntryEntryAbilityActivity extends StageActivity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ Log.e("HiHelloWorld", "EntryEntryAbilityActivity");
+
+ setInstanceName("com.example.waterapp:entry:EntryAbility:");
+ super.onCreate(savedInstanceState);
+ }
+}
diff --git a/.arkui-x/android/app/src/main/java/com/example/waterapp/MyApplication.java b/.arkui-x/android/app/src/main/java/com/example/waterapp/MyApplication.java
new file mode 100644
index 0000000..d253d0d
--- /dev/null
+++ b/.arkui-x/android/app/src/main/java/com/example/waterapp/MyApplication.java
@@ -0,0 +1,25 @@
+package com.example.waterapp;
+
+import android.util.Log;
+
+import ohos.stage.ability.adapter.StageApplication;
+
+/**
+ * Example ace application class, which will load ArkUI-X application instance.
+ * StageApplication is provided by ArkUI-X
+ * @see
+ * to build android library
+ */
+public class MyApplication extends StageApplication {
+ private static final String LOG_TAG = "HiHelloWorld";
+
+ private static final String RES_NAME = "res";
+
+ @Override
+ public void onCreate() {
+ Log.e(LOG_TAG, "MyApplication");
+ super.onCreate();
+ Log.e(LOG_TAG, "MyApplication onCreate");
+ }
+}
diff --git a/.arkui-x/android/app/src/main/res/drawable/arkuix.png b/.arkui-x/android/app/src/main/res/drawable/arkuix.png
new file mode 100644
index 0000000..ee0bdb1
Binary files /dev/null and b/.arkui-x/android/app/src/main/res/drawable/arkuix.png differ
diff --git a/.arkui-x/android/app/src/main/res/values/strings.xml b/.arkui-x/android/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..91c2f42
--- /dev/null
+++ b/.arkui-x/android/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ Waterapp
+
\ No newline at end of file
diff --git a/.arkui-x/android/app/src/test/java/com/example/waterapp/ExampleUnitTest.java b/.arkui-x/android/app/src/test/java/com/example/waterapp/ExampleUnitTest.java
new file mode 100644
index 0000000..c62cc35
--- /dev/null
+++ b/.arkui-x/android/app/src/test/java/com/example/waterapp/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.example.waterapp;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/.arkui-x/android/build.gradle b/.arkui-x/android/build.gradle
new file mode 100644
index 0000000..56d3693
--- /dev/null
+++ b/.arkui-x/android/build.gradle
@@ -0,0 +1,24 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+ repositories {
+ google()
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:7.4.1'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
\ No newline at end of file
diff --git a/.arkui-x/android/gradle.properties b/.arkui-x/android/gradle.properties
new file mode 100644
index 0000000..d52c760
--- /dev/null
+++ b/.arkui-x/android/gradle.properties
@@ -0,0 +1,19 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app"s APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=false
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=false
\ No newline at end of file
diff --git a/.arkui-x/android/gradle/wrapper/gradle-wrapper.jar b/.arkui-x/android/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..490fda8
Binary files /dev/null and b/.arkui-x/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/.arkui-x/android/gradle/wrapper/gradle-wrapper.properties b/.arkui-x/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..483082e
--- /dev/null
+++ b/.arkui-x/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Thu Jan 07 16:36:34 CST 2021
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://repo.huaweicloud.com/gradle/gradle-8.4-bin.zip
diff --git a/.arkui-x/android/gradlew b/.arkui-x/android/gradlew
new file mode 100644
index 0000000..6fe3981
--- /dev/null
+++ b/.arkui-x/android/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS="-Dfile.encoding=UTF-8"
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/.arkui-x/android/gradlew.bat b/.arkui-x/android/gradlew.bat
new file mode 100644
index 0000000..0dc644f
--- /dev/null
+++ b/.arkui-x/android/gradlew.bat
@@ -0,0 +1,100 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Dfile.encoding=GBK"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/.arkui-x/android/local.properties b/.arkui-x/android/local.properties
new file mode 100644
index 0000000..51a5f2e
--- /dev/null
+++ b/.arkui-x/android/local.properties
@@ -0,0 +1,7 @@
+## This file must *NOT* be checked into Version Control Systems,
+# as it contains information specific to your local configuration.
+#
+# Location of the SDK. This is only used by Gradle.
+# For customization when using a Version Control System, please read the
+# header note.
+sdk.dir=C:/development/Android/sdk
\ No newline at end of file
diff --git a/.arkui-x/android/settings.gradle b/.arkui-x/android/settings.gradle
new file mode 100644
index 0000000..d8fe027
--- /dev/null
+++ b/.arkui-x/android/settings.gradle
@@ -0,0 +1,2 @@
+ include ':app'
+rootProject.name = 'Waterapp'
\ No newline at end of file
diff --git a/.arkui-x/arkui-x-config.json5 b/.arkui-x/arkui-x-config.json5
new file mode 100644
index 0000000..5c89b86
--- /dev/null
+++ b/.arkui-x/arkui-x-config.json5
@@ -0,0 +1,6 @@
+{
+ "crossplatform": true,
+ "modules": [
+ "entry"
+ ]
+}
\ No newline at end of file
diff --git a/.arkui-x/ios/app.xcodeproj/project.pbxproj b/.arkui-x/ios/app.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..9252fe0
--- /dev/null
+++ b/.arkui-x/ios/app.xcodeproj/project.pbxproj
@@ -0,0 +1,391 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 52;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 89E41E4529F505070004F33E /* EntryEntryAbilityViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 89E41E4329F505070004F33E /* EntryEntryAbilityViewController.m */; };
+ 89E41E4629F505CD0004F33E /* libarkui_ios.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF9C1B5D28B9FC3A005DCF58 /* libarkui_ios.xcframework */; };
+ 89E41E4729F505CD0004F33E /* libarkui_ios.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DF9C1B5D28B9FC3A005DCF58 /* libarkui_ios.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ DFC5555629D7F36400B63EB3 /* arkui-x in Resources */ = {isa = PBXBuildFile; fileRef = DFC5555529D7F36400B63EB3 /* arkui-x */; };
+ F0AF1AD227D3684F008C55DD /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F0AF1AD127D3684F008C55DD /* AppDelegate.m */; };
+ F0AF1ADD27D36856008C55DD /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F0AF1ADC27D36856008C55DD /* Assets.xcassets */; };
+ F0AF1AE027D36856008C55DD /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F0AF1ADE27D36856008C55DD /* LaunchScreen.storyboard */; };
+ F0AF1AE327D36856008C55DD /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F0AF1AE227D36856008C55DD /* main.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 89E41E4829F505CD0004F33E /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ 89E41E4729F505CD0004F33E /* libarkui_ios.xcframework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 89E41E4329F505070004F33E /* EntryEntryAbilityViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EntryEntryAbilityViewController.m; sourceTree = ""; };
+ 89E41E4429F505070004F33E /* EntryEntryAbilityViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EntryEntryAbilityViewController.h; sourceTree = ""; };
+ DF9C1B5D28B9FC3A005DCF58 /* libarkui_ios.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libarkui_ios.xcframework; path = frameworks/libarkui_ios.xcframework; sourceTree = ""; };
+ DFC5555529D7F36400B63EB3 /* arkui-x */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "arkui-x"; sourceTree = ""; };
+ F0AF1ACD27D3684F008C55DD /* app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = app.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ F0AF1AD027D3684F008C55DD /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
+ F0AF1AD127D3684F008C55DD /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AppDelegate.m; sourceTree = ""; };
+ F0AF1ADC27D36856008C55DD /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ F0AF1ADF27D36856008C55DD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ F0AF1AE127D36856008C55DD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ F0AF1AE227D36856008C55DD /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ F0AF1ACA27D3684F008C55DD /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 89E41E4629F505CD0004F33E /* libarkui_ios.xcframework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ F0AF1AC427D3684F008C55DD = {
+ isa = PBXGroup;
+ children = (
+ DFC5555529D7F36400B63EB3 /* arkui-x */,
+ F0AF1ACF27D3684F008C55DD /* app */,
+ F0AF1ACE27D3684F008C55DD /* Products */,
+ F0AF1AEB27D36948008C55DD /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ F0AF1ACE27D3684F008C55DD /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ F0AF1ACD27D3684F008C55DD /* app.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ F0AF1ACF27D3684F008C55DD /* app */ = {
+ isa = PBXGroup;
+ children = (
+ 89E41E4429F505070004F33E /* EntryEntryAbilityViewController.h */,
+ 89E41E4329F505070004F33E /* EntryEntryAbilityViewController.m */,
+ F0AF1AD027D3684F008C55DD /* AppDelegate.h */,
+ F0AF1AD127D3684F008C55DD /* AppDelegate.m */,
+ F0AF1ADC27D36856008C55DD /* Assets.xcassets */,
+ F0AF1ADE27D36856008C55DD /* LaunchScreen.storyboard */,
+ F0AF1AE127D36856008C55DD /* Info.plist */,
+ F0AF1AE227D36856008C55DD /* main.m */,
+ );
+ path = app;
+ sourceTree = "";
+ };
+ F0AF1AEB27D36948008C55DD /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ DF9C1B5D28B9FC3A005DCF58 /* libarkui_ios.xcframework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ F0AF1ACC27D3684F008C55DD /* app */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F0AF1AE627D36856008C55DD /* Build configuration list for PBXNativeTarget "app" */;
+ buildPhases = (
+ F0AF1AC927D3684F008C55DD /* Sources */,
+ F0AF1ACA27D3684F008C55DD /* Frameworks */,
+ F0AF1ACB27D3684F008C55DD /* Resources */,
+ 89E41E4829F505CD0004F33E /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = app;
+ productName = app;
+ productReference = F0AF1ACD27D3684F008C55DD /* app.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ F0AF1AC527D3684F008C55DD /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 1300;
+ TargetAttributes = {
+ F0AF1ACC27D3684F008C55DD = {
+ CreatedOnToolsVersion = 13.0;
+ };
+ };
+ };
+ buildConfigurationList = F0AF1AC827D3684F008C55DD /* Build configuration list for PBXProject "app" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = F0AF1AC427D3684F008C55DD;
+ productRefGroup = F0AF1ACE27D3684F008C55DD /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ F0AF1ACC27D3684F008C55DD /* app */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ F0AF1ACB27D3684F008C55DD /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F0AF1AE027D36856008C55DD /* LaunchScreen.storyboard in Resources */,
+ DFC5555629D7F36400B63EB3 /* arkui-x in Resources */,
+ F0AF1ADD27D36856008C55DD /* Assets.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ F0AF1AC927D3684F008C55DD /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F0AF1AD227D3684F008C55DD /* AppDelegate.m in Sources */,
+ 89E41E4529F505070004F33E /* EntryEntryAbilityViewController.m in Sources */,
+ F0AF1AE327D36856008C55DD /* main.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ F0AF1ADE27D36856008C55DD /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ F0AF1ADF27D36856008C55DD /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ F0AF1AE427D36856008C55DD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ F0AF1AE527D36856008C55DD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
+ SDKROOT = iphoneos;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ F0AF1AE727D36856008C55DD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = arm64;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = JCS8W75JJS;
+ ENABLE_BITCODE = NO;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = app/Info.plist;
+ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+ INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = "com.example.waterapp";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "no sign";
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/frameworks/libarkui_ios.xcframework/ios-arm64/libarkui_ios.framework/Headers/include";
+ };
+ name = Debug;
+ };
+ F0AF1AE827D36856008C55DD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = arm64;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = JCS8W75JJS;
+ ENABLE_BITCODE = NO;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = app/Info.plist;
+ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+ INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = "com.example.waterapp";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "no sign";
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/frameworks/libarkui_ios.xcframework/ios-arm64/libarkui_ios.framework/Headers/include";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ F0AF1AC827D3684F008C55DD /* Build configuration list for PBXProject "app" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F0AF1AE427D36856008C55DD /* Debug */,
+ F0AF1AE527D36856008C55DD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ F0AF1AE627D36856008C55DD /* Build configuration list for PBXNativeTarget "app" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F0AF1AE727D36856008C55DD /* Debug */,
+ F0AF1AE827D36856008C55DD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = F0AF1AC527D3684F008C55DD /* Project object */;
+}
diff --git a/.arkui-x/ios/app/AppDelegate.h b/.arkui-x/ios/app/AppDelegate.h
new file mode 100644
index 0000000..95f9bdd
--- /dev/null
+++ b/.arkui-x/ios/app/AppDelegate.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2023 Huawei Device Co., Ltd.
+ * Licensed 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.
+ */
+
+#import
+
+@interface AppDelegate : UIResponder
+
+@property (nonatomic, strong) UIWindow *window;
+
+@end
+
diff --git a/.arkui-x/ios/app/AppDelegate.m b/.arkui-x/ios/app/AppDelegate.m
new file mode 100644
index 0000000..8f7a4bf
--- /dev/null
+++ b/.arkui-x/ios/app/AppDelegate.m
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2023 Huawei Device Co., Ltd.
+ * Licensed 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.
+ */
+
+#import "AppDelegate.h"
+#import "EntryEntryAbilityViewController.h"
+#import
+
+#define BUNDLE_DIRECTORY @"arkui-x"
+#define BUNDLE_NAME @"com.example.waterapp"
+
+@interface AppDelegate ()
+
+@end
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+ [StageApplication configModuleWithBundleDirectory:BUNDLE_DIRECTORY];
+ [StageApplication launchApplication];
+
+ NSString *instanceName = [NSString stringWithFormat:@"%@:%@:%@",BUNDLE_NAME, @"entry", @"EntryAbility"];
+ EntryEntryAbilityViewController *mainView = [[EntryEntryAbilityViewController alloc] initWithInstanceName:instanceName];
+ [self setNavRootVC:mainView];
+ return YES;
+}
+
+- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options {
+ NSLog(@"appdelegate openUrl callback, url : %@", url.absoluteString); // eg: (com.entry.arkui://entry?OtherAbility)
+
+ NSString *bundleName = url.scheme;
+ NSString *moduleName = url.host;
+ NSString *abilityName, *params;
+
+ NSURLComponents * urlComponents = [NSURLComponents componentsWithString:url.absoluteString];
+ NSArray *array = urlComponents.queryItems;
+ for (NSURLQueryItem * item in array) {
+ if ([item.name isEqualToString:@"abilityName"]) {
+ abilityName = item.value;
+ } else if ([item.name isEqualToString:@"params"]) {
+ params = item.value;
+ }
+ }
+
+ [self handleOpenUrlWithBundleName:bundleName
+ moduleName:moduleName
+ abilityName:abilityName
+ params:params, nil];
+
+ return YES;
+ }
+
+- (BOOL)handleOpenUrlWithBundleName:(NSString *)bundleName
+ moduleName:(NSString *)moduleName
+ abilityName:(NSString *)abilityName
+ params:(NSString *)params, ...NS_REQUIRES_NIL_TERMINATION {
+
+ id rootVC = [[UIApplication sharedApplication].delegate window].rootViewController;
+ BOOL hasRoot = NO;
+ if ([rootVC isKindOfClass:[UINavigationController class]]) {
+ hasRoot = YES;
+ }
+
+ id subStageVC = nil;
+
+ if ([moduleName isEqualToString:@"entry"] && [abilityName isEqualToString:@"EntryAbility"]) {
+ NSString *instanceName = [NSString stringWithFormat:@"%@:%@:%@",bundleName, moduleName, abilityName];
+ EntryEntryAbilityViewController *otherVC = [[EntryEntryAbilityViewController alloc] initWithInstanceName:instanceName];
+ subStageVC = (EntryEntryAbilityViewController *)otherVC;
+ } else if ([moduleName isEqualToString:@"entry"] && [abilityName isEqualToString:@"EntryAbility"]) {
+ NSString *instanceName = [NSString stringWithFormat:@"%@:%@:%@",bundleName, moduleName, abilityName];
+ EntryEntryAbilityViewController *otherVC = [[EntryEntryAbilityViewController alloc] initWithInstanceName:instanceName];
+ subStageVC = (EntryEntryAbilityViewController *)otherVC;
+ } // other ViewController
+
+ if (!subStageVC) {
+ return NO;
+ }
+
+ if (!hasRoot) {
+ [self setNavRootVC:subStageVC];
+ } else {
+ UINavigationController *rootNav = (UINavigationController *)self.window.rootViewController;
+ [rootNav pushViewController:subStageVC animated:YES];
+ }
+ return YES;
+}
+
+- (void)setNavRootVC:(id)viewController {
+ self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
+ self.window.backgroundColor = [UIColor whiteColor];
+ [self.window makeKeyAndVisible];
+ UINavigationController *navi = [[UINavigationController alloc]initWithRootViewController:viewController];
+ [self setNaviAppearance:navi];
+ self.window.rootViewController = navi;
+}
+
+- (void)setNaviAppearance:(UINavigationController *)navi {
+ UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
+ [appearance configureWithOpaqueBackground];
+ appearance.backgroundColor = UIColor.whiteColor;
+ navi.navigationBar.standardAppearance = appearance;
+ navi.navigationBar.scrollEdgeAppearance = navi.navigationBar.standardAppearance;
+}
+
+@end
diff --git a/.arkui-x/ios/app/Assets.xcassets/AccentColor.colorset/Contents.json b/.arkui-x/ios/app/Assets.xcassets/AccentColor.colorset/Contents.json
new file mode 100644
index 0000000..eb87897
--- /dev/null
+++ b/.arkui-x/ios/app/Assets.xcassets/AccentColor.colorset/Contents.json
@@ -0,0 +1,11 @@
+{
+ "colors" : [
+ {
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/.arkui-x/ios/app/Assets.xcassets/AppIcon.appiconset/Contents.json b/.arkui-x/ios/app/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..9221b9b
--- /dev/null
+++ b/.arkui-x/ios/app/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,98 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "76x76"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "76x76"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "83.5x83.5"
+ },
+ {
+ "idiom" : "ios-marketing",
+ "scale" : "1x",
+ "size" : "1024x1024"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/.arkui-x/ios/app/Assets.xcassets/Contents.json b/.arkui-x/ios/app/Assets.xcassets/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/.arkui-x/ios/app/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/.arkui-x/ios/app/Base.lproj/LaunchScreen.storyboard b/.arkui-x/ios/app/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..865e932
--- /dev/null
+++ b/.arkui-x/ios/app/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.arkui-x/ios/app/EntryEntryAbilityViewController.h b/.arkui-x/ios/app/EntryEntryAbilityViewController.h
new file mode 100644
index 0000000..cd8add4
--- /dev/null
+++ b/.arkui-x/ios/app/EntryEntryAbilityViewController.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2023 Huawei Device Co., Ltd.
+ * Licensed 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.
+ */
+
+#ifndef EntryEntryAbilityViewController_h
+#define EntryEntryAbilityViewController_h
+#import
+#import
+@interface EntryEntryAbilityViewController : StageViewController
+
+
+@end
+
+#endif /* EntryEntryAbilityViewController_h */
diff --git a/.arkui-x/ios/app/EntryEntryAbilityViewController.m b/.arkui-x/ios/app/EntryEntryAbilityViewController.m
new file mode 100644
index 0000000..4db6cc5
--- /dev/null
+++ b/.arkui-x/ios/app/EntryEntryAbilityViewController.m
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2023 Huawei Device Co., Ltd.
+ * Licensed 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.
+ */
+
+#import "EntryEntryAbilityViewController.h"
+
+@interface EntryEntryAbilityViewController ()
+
+@end
+
+@implementation EntryEntryAbilityViewController
+- (instancetype)initWithInstanceName:(NSString *)instanceName {
+ self = [super initWithInstanceName:instanceName];
+ if (self) {
+
+ }
+ return self;
+}
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+
+ self.edgesForExtendedLayout = UIRectEdgeNone;
+ self.extendedLayoutIncludesOpaqueBars = YES;
+}
+@end
diff --git a/.arkui-x/ios/app/Info.plist b/.arkui-x/ios/app/Info.plist
new file mode 100644
index 0000000..0c67376
--- /dev/null
+++ b/.arkui-x/ios/app/Info.plist
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/.arkui-x/ios/app/main.m b/.arkui-x/ios/app/main.m
new file mode 100644
index 0000000..c83b080
--- /dev/null
+++ b/.arkui-x/ios/app/main.m
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2022 Huawei Device Co., Ltd.
+ * Licensed 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.
+ */
+
+#import
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+ NSString * appDelegateClassName;
+ @autoreleasepool {
+ // Setup code that might create autoreleased objects goes here.
+ appDelegateClassName = NSStringFromClass([AppDelegate class]);
+ }
+ return UIApplicationMain(argc, argv, nil, appDelegateClassName);
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d2ff201
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,12 @@
+/node_modules
+/oh_modules
+/local.properties
+/.idea
+**/build
+/.hvigor
+.cxx
+/.clangd
+/.clang-format
+/.clang-tidy
+**/.test
+/.appanalyzer
\ No newline at end of file
diff --git a/AppScope/app.json5 b/AppScope/app.json5
new file mode 100644
index 0000000..e636623
--- /dev/null
+++ b/AppScope/app.json5
@@ -0,0 +1,11 @@
+{
+ "app": {
+ "bundleName": "com.example.waterapp",
+ "vendor": "example",
+ "versionCode": 1000000,
+ "versionName": "1.0.0",
+ "buildVersion": "1",
+ "icon": "$media:layered_image",
+ "label": "$string:app_name"
+ }
+}
diff --git a/AppScope/resources/base/element/string.json b/AppScope/resources/base/element/string.json
new file mode 100644
index 0000000..be37fcd
--- /dev/null
+++ b/AppScope/resources/base/element/string.json
@@ -0,0 +1,8 @@
+{
+ "string": [
+ {
+ "name": "app_name",
+ "value": "Waterapp"
+ }
+ ]
+}
diff --git a/AppScope/resources/base/media/background.png b/AppScope/resources/base/media/background.png
new file mode 100644
index 0000000..923f2b3
Binary files /dev/null and b/AppScope/resources/base/media/background.png differ
diff --git a/AppScope/resources/base/media/foreground.png b/AppScope/resources/base/media/foreground.png
new file mode 100644
index 0000000..eb94275
Binary files /dev/null and b/AppScope/resources/base/media/foreground.png differ
diff --git a/AppScope/resources/base/media/layered_image.json b/AppScope/resources/base/media/layered_image.json
new file mode 100644
index 0000000..fb49920
--- /dev/null
+++ b/AppScope/resources/base/media/layered_image.json
@@ -0,0 +1,7 @@
+{
+ "layered-image":
+ {
+ "background" : "$media:background",
+ "foreground" : "$media:foreground"
+ }
+}
\ No newline at end of file
diff --git a/build-profile.json5 b/build-profile.json5
new file mode 100644
index 0000000..a2eaafc
--- /dev/null
+++ b/build-profile.json5
@@ -0,0 +1,42 @@
+{
+ "app": {
+ "signingConfigs": [],
+ "products": [
+ {
+ "name": "default",
+ "signingConfig": "default",
+ "targetSdkVersion": "6.1.0(23)",
+ "compatibleSdkVersion": "6.0.2(22)",
+ "runtimeOS": "HarmonyOS",
+ "buildOption": {
+ "strictMode": {
+ "caseSensitiveCheck": true,
+ "useNormalizedOHMUrl": false
+ }
+ }
+ }
+ ],
+ "buildModeSet": [
+ {
+ "name": "debug",
+ },
+ {
+ "name": "release"
+ }
+ ]
+ },
+ "modules": [
+ {
+ "name": "entry",
+ "srcPath": "./entry",
+ "targets": [
+ {
+ "name": "default",
+ "applyToProducts": [
+ "default"
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/code-linter.json5 b/code-linter.json5
new file mode 100644
index 0000000..073990f
--- /dev/null
+++ b/code-linter.json5
@@ -0,0 +1,32 @@
+{
+ "files": [
+ "**/*.ets"
+ ],
+ "ignore": [
+ "**/src/ohosTest/**/*",
+ "**/src/test/**/*",
+ "**/src/mock/**/*",
+ "**/node_modules/**/*",
+ "**/oh_modules/**/*",
+ "**/build/**/*",
+ "**/.preview/**/*"
+ ],
+ "ruleSet": [
+ "plugin:@performance/recommended",
+ "plugin:@typescript-eslint/recommended"
+ ],
+ "rules": {
+ "@security/no-unsafe-aes": "error",
+ "@security/no-unsafe-hash": "error",
+ "@security/no-unsafe-mac": "warn",
+ "@security/no-unsafe-dh": "error",
+ "@security/no-unsafe-dsa": "error",
+ "@security/no-unsafe-ecdsa": "error",
+ "@security/no-unsafe-rsa-encrypt": "error",
+ "@security/no-unsafe-rsa-sign": "error",
+ "@security/no-unsafe-rsa-key": "error",
+ "@security/no-unsafe-dsa-key": "error",
+ "@security/no-unsafe-dh-key": "error",
+ "@security/no-unsafe-3des": "error"
+ }
+}
\ No newline at end of file
diff --git a/entry/.gitignore b/entry/.gitignore
new file mode 100644
index 0000000..e2713a2
--- /dev/null
+++ b/entry/.gitignore
@@ -0,0 +1,6 @@
+/node_modules
+/oh_modules
+/.preview
+/build
+/.cxx
+/.test
\ No newline at end of file
diff --git a/entry/build-profile.json5 b/entry/build-profile.json5
new file mode 100644
index 0000000..6bd6457
--- /dev/null
+++ b/entry/build-profile.json5
@@ -0,0 +1,33 @@
+{
+ "apiType": "stageMode",
+ "buildOption": {
+ "resOptions": {
+ "copyCodeResource": {
+ "enable": false
+ }
+ }
+ },
+ "buildOptionSet": [
+ {
+ "name": "release",
+ "arkOptions": {
+ "obfuscation": {
+ "ruleOptions": {
+ "enable": false,
+ "files": [
+ "./obfuscation-rules.txt"
+ ]
+ }
+ }
+ }
+ },
+ ],
+ "targets": [
+ {
+ "name": "default"
+ },
+ {
+ "name": "ohosTest",
+ }
+ ]
+}
\ No newline at end of file
diff --git a/entry/hvigorfile.ts b/entry/hvigorfile.ts
new file mode 100644
index 0000000..57a9d6c
--- /dev/null
+++ b/entry/hvigorfile.ts
@@ -0,0 +1,2 @@
+// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently.
+export { HapTasks } from '@ohos/hvigor-ohos-arkui-x-plugin';
diff --git a/entry/obfuscation-rules.txt b/entry/obfuscation-rules.txt
new file mode 100644
index 0000000..1e7e54e
--- /dev/null
+++ b/entry/obfuscation-rules.txt
@@ -0,0 +1,23 @@
+# Define project specific obfuscation rules here.
+# You can include the obfuscation configuration files in the current module's build-profile.json5.
+#
+# For more details, see
+# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/source-obfuscation
+
+# Obfuscation options:
+# -disable-obfuscation: disable all obfuscations
+# -enable-property-obfuscation: obfuscate the property names
+# -enable-toplevel-obfuscation: obfuscate the names in the global scope
+# -compact: remove unnecessary blank spaces and all line feeds
+# -remove-log: remove all console.* statements
+# -print-namecache: print the name cache that contains the mapping from the old names to new names
+# -apply-namecache: reuse the given cache file
+
+# Keep options:
+# -keep-property-name: specifies property names that you want to keep
+# -keep-global-name: specifies names that you want to keep in the global scope
+
+-enable-property-obfuscation
+-enable-toplevel-obfuscation
+-enable-filename-obfuscation
+-enable-export-obfuscation
\ No newline at end of file
diff --git a/entry/oh-package.json5 b/entry/oh-package.json5
new file mode 100644
index 0000000..248c3b7
--- /dev/null
+++ b/entry/oh-package.json5
@@ -0,0 +1,10 @@
+{
+ "name": "entry",
+ "version": "1.0.0",
+ "description": "Please describe the basic information.",
+ "main": "",
+ "author": "",
+ "license": "",
+ "dependencies": {}
+}
+
diff --git a/entry/src/main/ets/components/Add.ets b/entry/src/main/ets/components/Add.ets
new file mode 100644
index 0000000..be49f5b
--- /dev/null
+++ b/entry/src/main/ets/components/Add.ets
@@ -0,0 +1,161 @@
+import { promptAction } from '@kit.ArkUI';
+import DeviceListInterface from "../model/DeviceListInterface";
+
+/**
+ * 添加页面组件 - 科技蓝风格
+ */
+@Component
+export struct Add {
+ @State deviceCode: string = '';
+ @State deviceName: string = '';
+
+ // 确认添加设备
+ handleAddDevice(): void {
+ if (!this.deviceCode || !this.deviceName) {
+ promptAction.showToast({ message: '请填写完整信息' });
+ return;
+ }
+
+ // 创建新设备数据
+ const newDevice: DeviceListInterface = {
+ id: Date.now(),
+ name: this.deviceName,
+ code: this.deviceCode,
+ latitudeLongitude: '',
+ screenPosition: '',
+ status: 1 // 新添加的设备默认为正常状态
+ };
+
+ // 存储到AppStorage,供设备页面获取
+ AppStorage.setOrCreate('newDevice', newDevice);
+
+ promptAction.showToast({ message: '设备绑定成功' });
+
+ // 清空输入框
+ this.deviceCode = '';
+ this.deviceName = '';
+ }
+
+ build() {
+ Column() {
+ // 顶部标题栏 - 科技蓝风格
+ Row() {
+ Image($rawfile("add/添加 加号.png"))
+ .width(20)
+ .height(20)
+ .fillColor('#FFFFFF')
+ .margin({ left: 20, right: 10 })
+ Text("添加设备")
+ .fontSize(20)
+ .fontWeight(600)
+ .fontColor("#FFFFFF")
+
+ Blank()
+
+ Text('设备绑定')
+ .fontSize(12)
+ .fontColor('rgba(255,255,255,0.5)')
+ }
+ .width("100%")
+ .height(60)
+ .padding({ left: 10, right: 20 })
+ .alignItems(VerticalAlign.Center)
+
+ // 表单区域
+ Column({ space: 16 }) {
+ // 设备编号输入
+ Column({ space: 8 }) {
+ Text('设备编号')
+ .fontSize(12)
+ .fontColor('rgba(255,255,255,0.6)')
+ .width('100%')
+
+ Row() {
+ Image($rawfile("add/条形码.png"))
+ .width(18)
+ .height(18)
+ .fillColor('rgba(255,255,255,0.5)')
+ .margin({ left: 16 })
+ TextInput({ placeholder: "请输入设备编号", text: this.deviceCode })
+ .onChange((value: string) => {
+ this.deviceCode = value;
+ })
+ .backgroundColor(Color.Transparent)
+ .layoutWeight(1)
+ .placeholderColor('rgba(255,255,255,0.4)')
+ .fontColor('#FFFFFF')
+ .caretColor('#00FF88')
+ }
+ .width("100%")
+ .height(50)
+ .backgroundColor('rgba(22,119,255,0.15)')
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(22,119,255,0.3)' })
+ }
+ .width('88%')
+ .alignItems(HorizontalAlign.Start)
+
+ // 设备名称输入
+ Column({ space: 8 }) {
+ Text('设备名称')
+ .fontSize(12)
+ .fontColor('rgba(255,255,255,0.6)')
+ .width('100%')
+
+ Row() {
+ Image($rawfile("add/编写.png"))
+ .width(18)
+ .height(18)
+ .fillColor('rgba(255,255,255,0.5)')
+ .margin({ left: 16 })
+ TextInput({ placeholder: "请输入设备名称", text: this.deviceName })
+ .onChange((value: string) => {
+ this.deviceName = value;
+ })
+ .backgroundColor(Color.Transparent)
+ .layoutWeight(1)
+ .placeholderColor('rgba(255,255,255,0.4)')
+ .fontColor('#FFFFFF')
+ .caretColor('#00FF88')
+ }
+ .width("100%")
+ .height(50)
+ .backgroundColor('rgba(22,119,255,0.15)')
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(22,119,255,0.3)' })
+ }
+ .width('88%')
+ .alignItems(HorizontalAlign.Start)
+
+ // 确认按钮
+ Button("确认绑定")
+ .width("70%")
+ .height(45)
+ .fontSize(16)
+ .fontColor('#FFFFFF')
+ .fontWeight(FontWeight.Bold)
+ .backgroundColor('rgba(0,255,136,0.25)')
+ .borderRadius(22)
+ .border({ width: 1, color: 'rgba(0,255,136,0.4)' })
+ .onClick(() => {
+ this.handleAddDevice();
+ })
+
+ // 提示信息
+ Text('绑定后可在设备列表中查看')
+ .fontSize(12)
+ .fontColor('rgba(255,255,255,0.4)')
+ .margin({ top: 12 })
+ }
+ .width("100%")
+ .layoutWeight(1)
+ .justifyContent(FlexAlign.Center)
+ }
+ .width('100%')
+ .height('100%')
+ .linearGradient({
+ angle: 180,
+ colors: [['#0a1628', 0], ['#0d2847', 0.5], ['#1677FF', 1]]
+ })
+ }
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/components/CarbonCalc.ets b/entry/src/main/ets/components/CarbonCalc.ets
new file mode 100644
index 0000000..1623ab0
--- /dev/null
+++ b/entry/src/main/ets/components/CarbonCalc.ets
@@ -0,0 +1,320 @@
+import { webview } from '@kit.ArkWeb';
+import { http } from '@kit.NetworkKit';
+import CarbonInfoInterface from '../model/CarbonInfoInterface';
+import StatisticalInterface from '../model/StatisticalInterface';
+import DeviceListInterface from '../model/DeviceListInterface';
+import { getCarbonInfo, getCarbonList, getDeviceList } from '../utils/ApiService';
+
+// 监测点数据接口
+interface MonitorPoint {
+ name: string;
+ lat: number;
+ lng: number;
+ status: number;
+ color: string;
+}
+
+/**
+ * 碳汇计算组件
+ */
+@Component
+export struct CarbonCalc {
+ // 图表控制器
+ controller: webview.WebviewController = new webview.WebviewController();
+ // 状态数据
+ @State carbonInfo: CarbonInfoInterface | null = null;
+ @State carbonTrend: StatisticalInterface[] = [];
+ @State monitorPoints: MonitorPoint[] = [];
+ @State isLoading: boolean = true;
+ @State isWebViewReady: boolean = false;
+ @State avgTemp: number = 25.0;
+
+ // 模拟数据
+ private mockCarbonInfo: CarbonInfoInterface = {
+ carbonSequestration: 125.6,
+ ph: 7.4,
+ waterTemperature: 25.2
+ };
+
+ private mockTrend: number[] = [98, 105, 112, 118, 122, 126];
+
+ private mockPoints: MonitorPoint[] = [
+ { name: '长江监测点A', lat: 30.5, lng: 114.3, status: 1, color: '#00FF88' },
+ { name: '长江监测点B', lat: 31.2, lng: 115.1, status: 0, color: '#FF6B6B' },
+ { name: '长江监测点C', lat: 29.8, lng: 113.5, status: 1, color: '#00FF88' },
+ { name: '长江监测点D', lat: 32.0, lng: 118.7, status: 1, color: '#00FF88' }
+ ];
+
+ aboutToAppear(): void {
+ this.loadData();
+ setTimeout(() => {
+ this.isWebViewReady = true;
+ this.updateChart();
+ }, 1000);
+ }
+
+ loadData(): void {
+ this.carbonInfo = this.mockCarbonInfo;
+ this.monitorPoints = this.mockPoints;
+ this.avgTemp = this.mockCarbonInfo.waterTemperature;
+ this.isLoading = false;
+
+ // 尝试获取真实数据
+ getCarbonInfo().then((result) => {
+ if (result && result.data) {
+ this.carbonInfo = result.data;
+ this.avgTemp = result.data.waterTemperature;
+ }
+ }).catch(() => {
+ // 使用模拟数据
+ });
+
+ getCarbonList().then((result) => {
+ if (result && result.data && result.data.length > 0) {
+ this.carbonTrend = result.data;
+ }
+ }).catch(() => {
+ // 使用模拟数据
+ });
+
+ getDeviceList().then((result) => {
+ if (result && result.data && result.data.length > 0) {
+ this.parseDeviceData(result.data);
+ }
+ }).catch(() => {
+ // 使用模拟数据
+ });
+ }
+
+ parseDeviceData(devices: DeviceListInterface[]): void {
+ const points: MonitorPoint[] = [];
+ for (let i: number = 0; i < devices.length; i++) {
+ const device: DeviceListInterface = devices[i];
+ const coords: string[] = device.latitudeLongitude.split(',');
+ if (coords.length >= 2) {
+ const lat: number = parseFloat(coords[0]);
+ const lng: number = parseFloat(coords[1]);
+ points.push({
+ name: device.name,
+ lat: lat,
+ lng: lng,
+ status: device.status,
+ color: device.status === 1 ? '#00FF88' : '#FF6B6B'
+ });
+ }
+ }
+ if (points.length > 0) {
+ this.monitorPoints = points;
+ }
+ }
+
+ updateChart(): void {
+ if (!this.isWebViewReady) return;
+ try {
+ const jsCode: string = `updateData([${this.mockTrend.join(',')}])`;
+ this.controller.runJavaScript(jsCode);
+ } catch (e) {
+ console.error('图表更新失败');
+ }
+ }
+
+ build() {
+ Column() {
+ // 标题
+ Row() {
+ Text('碳汇计算')
+ .fontSize(18)
+ .fontWeight(FontWeight.Bold)
+ .fontColor('#FFFFFF')
+ Blank()
+ Text('水体固碳能力')
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.5)')
+ }
+ .width('92%')
+ .padding({ top: 12, bottom: 8 })
+
+ // ===== 上部分:统计卡片 =====
+ Row({ space: 8 }) {
+ // 上月平均温度
+ Column({ space: 4 }) {
+ Text('上月平均温度')
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.6)')
+ Text(this.avgTemp.toFixed(1) + '°C')
+ .fontSize(18)
+ .fontWeight(600)
+ .fontColor('#FFE66D')
+ Row() {
+ Circle().width(4).height(4).fill('#FFE66D')
+ Text('正常')
+ .fontSize(9)
+ .fontColor('rgba(255,255,255,0.5)')
+ .margin({ left: 3 })
+ }
+ }
+ .width('31%')
+ .height(70)
+ .padding(8)
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(255,230,109,0.3)' })
+ .backgroundColor('rgba(255,230,109,0.08)')
+
+ // 上月碳汇能力
+ Column({ space: 4 }) {
+ Text('上月碳汇能力')
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.6)')
+ Text((this.carbonInfo?.carbonSequestration ?? 0).toFixed(1) + 'kg')
+ .fontSize(18)
+ .fontWeight(600)
+ .fontColor('#00FF88')
+ Row() {
+ Circle().width(4).height(4).fill('#00FF88')
+ Text('良好')
+ .fontSize(9)
+ .fontColor('rgba(255,255,255,0.5)')
+ .margin({ left: 3 })
+ }
+ }
+ .width('31%')
+ .height(70)
+ .padding(8)
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(0,255,136,0.3)' })
+ .backgroundColor('rgba(0,255,136,0.08)')
+
+ // 上月平均pH
+ Column({ space: 4 }) {
+ Text('上月平均pH')
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.6)')
+ Text((this.carbonInfo?.ph ?? 0).toFixed(1))
+ .fontSize(18)
+ .fontWeight(600)
+ .fontColor('#4ECDC4')
+ Row() {
+ Circle().width(4).height(4).fill('#4ECDC4')
+ Text('达标')
+ .fontSize(9)
+ .fontColor('rgba(255,255,255,0.5)')
+ .margin({ left: 3 })
+ }
+ }
+ .width('31%')
+ .height(70)
+ .padding(8)
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(78,205,196,0.3)' })
+ .backgroundColor('rgba(78,205,196,0.08)')
+ }
+ .width('92%')
+ .justifyContent(FlexAlign.SpaceBetween)
+
+ // ===== 中间部分:碳汇趋势折线图 =====
+ Column({ space: 6 }) {
+ Row() {
+ Text('碳汇趋势')
+ .fontSize(13)
+ .fontWeight(500)
+ .fontColor('#FFFFFF')
+ Blank()
+ Text('近6个月')
+ .fontSize(10)
+ .fontColor('rgba(255,255,255,0.5)')
+ }
+ .width('100%')
+
+ Web({ src: $rawfile('chart/carbon_chart.html'), controller: this.controller })
+ .width('100%')
+ .height(160)
+ .backgroundColor('transparent')
+ .javaScriptAccess(true)
+ }
+ .width('92%')
+ .padding(10)
+ .margin({ top: 8 })
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(22,119,255,0.25)' })
+ .backgroundColor('rgba(13,40,71,0.5)')
+
+ // ===== 下部分:监测点分布地图 =====
+ Column({ space: 8 }) {
+ // 地图标题
+ Row() {
+ Text('监测点分布')
+ .fontSize(13)
+ .fontWeight(500)
+ .fontColor('#FFFFFF')
+ Blank()
+ Row({ space: 6 }) {
+ Row({ space: 3 }) {
+ Circle().width(5).height(5).fill('#00FF88')
+ Text('正常')
+ .fontSize(9)
+ .fontColor('rgba(255,255,255,0.6)')
+ }
+ Row({ space: 3 }) {
+ Circle().width(5).height(5).fill('#FF6B6B')
+ Text('异常')
+ .fontSize(9)
+ .fontColor('rgba(255,255,255,0.6)')
+ }
+ }
+ }
+ .width('100%')
+
+ // 监测点地图区域(图片占位符,后期添加图片后取消注释)
+ Image($rawfile('ces/all_point.png'))
+ .width('100%')
+ .height(180)
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(22,119,255,0.3)' })
+
+ // 临时占位区域(待添加图片)
+ // Column()
+ // .width('100%')
+ // .height(180)
+ // .linearGradient({
+ // angle: 135,
+ // colors: [['#1a3a5c', 0], ['#0d2847', 1]]
+ // })
+ // .borderRadius(12)
+ // .border({ width: 1, color: 'rgba(22,119,255,0.3)' })
+
+ // 监测点列表
+ Row({ space: 10 }) {
+ ForEach(this.monitorPoints, (point: MonitorPoint) => {
+ Row({ space: 4 }) {
+ Circle()
+ .width(6)
+ .height(6)
+ .fill(point.color)
+ Text(point.name)
+ .fontSize(10)
+ .fontColor('rgba(255,255,255,0.8)')
+ }
+ .padding({ left: 6, right: 6, top: 4, bottom: 4 })
+ .borderRadius(8)
+ .backgroundColor('rgba(22,119,255,0.1)')
+ })
+ }
+ .width('100%')
+ .justifyContent(FlexAlign.Center)
+ }
+ .width('92%')
+ .layoutWeight(1)
+ .margin({ top: 8 })
+ .padding(10)
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(22,119,255,0.25)' })
+ .backgroundColor('rgba(13,40,71,0.4)')
+ }
+ .width('100%')
+ .height('100%')
+ .linearGradient({
+ angle: 180,
+ colors: [['#0a1628', 0], ['#0d2847', 0.5], ['#1677FF', 1]]
+ })
+ }
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/components/ContrastAnalysis.ets b/entry/src/main/ets/components/ContrastAnalysis.ets
new file mode 100644
index 0000000..587fbbd
--- /dev/null
+++ b/entry/src/main/ets/components/ContrastAnalysis.ets
@@ -0,0 +1,457 @@
+import { webview } from '@kit.ArkWeb';
+import { buffer, JSON } from '@kit.ArkTS';
+import { http } from '@kit.NetworkKit';
+import { BusinessError } from '@kit.BasicServicesKit';
+import { getContrast } from '../utils/ApiService';
+import StatisticalInterface from '../model/StatisticalInterface';
+
+interface IndicatorConfig {
+ name: string;
+ unit: string;
+ color: string;
+ range: string;
+ data: number[];
+ paramType: number;
+}
+
+interface DifyStreamChunk {
+ event?: string;
+ answer?: string;
+ conversation_id?: string;
+ message?: string;
+}
+
+interface DifyChatRequestBody {
+ inputs: Record;
+ query: string;
+ response_mode: 'streaming';
+ conversation_id: string;
+ user: string;
+}
+
+interface DifyErrorResponse {
+ message: string;
+ code?: number;
+}
+
+interface StatisticalItem {
+ month: string;
+ value: number;
+}
+
+@Component
+export struct ContrastAnalysis {
+ controller: webview.WebviewController = new webview.WebviewController();
+ @State currentIndicator: number = 0;
+ @State aiMessage: string = '';
+ @State isGenerating: boolean = false;
+ @State conversationId: string = '';
+ @State isWebReady: boolean = false;
+ @State isComponentActive: boolean = true;
+
+ private httpRequest: http.HttpRequest | null = null;
+ private sseBuffer: string = '';
+ private currentRequestIndicator: number = -1;
+
+ private readonly DIFY_BASE_URL: string = 'http://192.168.31.26';
+ private readonly DIFY_API_KEY: string = 'app-OeXDz5qppFhB4JMU9PQBEJai';
+
+ private indicators: IndicatorConfig[] = [
+ { name: '水温', unit: '°C', color: '#FFE66D', range: '15-30', data: [], paramType: 1 },
+ { name: 'COD', unit: 'mg/L', color: '#00FF88', range: '≤40', data: [], paramType: 2 },
+ { name: 'pH', unit: 'pH', color: '#4ECDC4', range: '6.5-8.5', data: [], paramType: 3 },
+ { name: '余氯', unit: 'mg/L', color: '#F38181', range: '0.3-0.5', data: [], paramType: 4 },
+ { name: '电导率', unit: 'μS/cm', color: '#95E1D3', range: '500-1500', data: [], paramType: 5 },
+ { name: '氨氮', unit: 'mg/L', color: '#FF6B6B', range: '≤1.0', data: [], paramType: 6 }
+ ];
+
+ aboutToAppear(): void {
+ this.isComponentActive = true;
+ this.aiMessage = '点击"AI分析"按钮,将自动分析当前选中的指标数据。';
+ this.isWebReady = false;
+ this.currentRequestIndicator = -1;
+ }
+
+ aboutToDisappear(): void {
+ this.isComponentActive = false;
+ this.isWebReady = false;
+ this.cancelRequest();
+ }
+
+ cancelRequest(): void {
+ this.isGenerating = false;
+ this.destroyRequest();
+ if (this.aiMessage && this.aiMessage !== '等待分析...') {
+ this.aiMessage += '\n[已取消请求]';
+ } else {
+ this.aiMessage = '已取消请求';
+ }
+ }
+
+ private destroyRequest(): void {
+ if (this.httpRequest) {
+ try {
+ this.httpRequest.destroy();
+ } catch (e) {
+ console.error('销毁HTTP请求失败', JSON.stringify(e));
+ }
+ this.httpRequest = null;
+ }
+ this.sseBuffer = '';
+ }
+
+ private runChartScript(script: string): void {
+ if (!this.isComponentActive || !this.isWebReady) {
+ return;
+ }
+ try {
+ this.controller.runJavaScript(script);
+ console.info('执行图表脚本:' + script);
+ } catch (e) {
+ console.error('图表脚本执行失败', JSON.stringify(e));
+ }
+ }
+
+ private buildChartDataFromContrast(rawList: StatisticalInterface[]): StatisticalItem[] {
+ return rawList.map((item: StatisticalInterface): StatisticalItem => ({
+ month: `${item.type}${item.date}月`,
+ value: Number(item.value) || 0
+ }));
+ }
+
+ async loadChartData(): Promise {
+ const targetIndicator: number = this.currentIndicator;
+ this.currentRequestIndicator = targetIndicator;
+
+ try {
+ const config: IndicatorConfig = this.indicators[targetIndicator];
+ console.info('请求指标 paramType:' + config.paramType);
+
+ const res = await getContrast(config.paramType);
+
+ if (this.currentIndicator !== targetIndicator || !this.isComponentActive || !this.isWebReady) {
+ return;
+ }
+
+ const rawList: StatisticalInterface[] = res.data || [];
+ const chartData: StatisticalItem[] = this.buildChartDataFromContrast(rawList);
+ config.data = chartData.map((item: StatisticalItem): number => item.value);
+
+ this.runChartScript(`initChart(${JSON.stringify(chartData)})`);
+ } catch (err) {
+ console.error('加载图表数据失败', JSON.stringify(err));
+ } finally {
+ if (this.currentRequestIndicator === targetIndicator) {
+ this.currentRequestIndicator = -1;
+ }
+ }
+ }
+
+ onIndicatorChange(index: number): void {
+ this.currentIndicator = index;
+ this.loadChartData();
+ }
+
+ sendAiRequest(): void {
+ if (this.isGenerating || !this.isComponentActive) {
+ return;
+ }
+
+ const indicator: IndicatorConfig = this.indicators[this.currentIndicator];
+ const data: number[] = indicator.data;
+
+ if (!data.length) {
+ this.aiMessage = '暂无数据,无法分析';
+ return;
+ }
+
+ const avg: number = data.reduce((a: number, b: number): number => a + b, 0) / data.length;
+ const max: number = Math.max(...data);
+ const min: number = Math.min(...data);
+
+ const prompt: string =
+ `分析${indicator.name}指标年度数据:平均值${avg.toFixed(2)}${indicator.unit},最高${max.toFixed(2)}${indicator.unit},最低${min.toFixed(2)}${indicator.unit},标准${indicator.range}。简要分析趋势并给出建议。`;
+
+ this.isGenerating = true;
+this.aiMessage = '';
+this.requestDifyInStream(prompt);
+}
+
+private bufferToStr(src: ArrayBuffer, encoding: buffer.BufferEncoding = 'utf-8'): string {
+ const buf: buffer.Buffer = buffer.from(src);
+ return buf.toString(encoding);
+}
+
+private requestDifyInStream(query: string): void {
+ if (!this.DIFY_API_KEY.trim() || !this.isComponentActive) {
+ this.aiMessage = 'Dify API Key 未配置';
+ this.isGenerating = false;
+ return;
+}
+
+this.destroyRequest();
+this.httpRequest = http.createHttp();
+this.sseBuffer = '';
+
+const url: string = this.DIFY_BASE_URL.replace(/\/+$/, '') + '/v1/chat-messages';
+
+const body: DifyChatRequestBody = {
+ inputs: {
+ "code": 'DEVICE0121',
+ "oldMonth": `${new Date().getFullYear() - 1}年${new Date().getMonth().toString().padStart(2, '0')}月`,
+ "newMonth": `${new Date().getFullYear()}年${new Date().getMonth().toString().padStart(2, '0')}月`
+ },
+ query: query,
+ user: 'qyl',
+ response_mode: 'streaming',
+ conversation_id: this.conversationId || ''
+};
+
+let isSseResponse: boolean = false;
+let rawNonSse: string = '';
+this.aiMessage = '连接中...';
+
+this.httpRequest.on('headersReceive', (headers: Object): void => {
+ if (!this.isComponentActive) {
+ return;
+ }
+ try {
+ const headerStr = JSON.stringify(headers).toLowerCase();
+ isSseResponse = headerStr.includes('text/event-stream');
+ } catch (e) {
+ console.error('解析响应头失败', JSON.stringify(e));
+ }
+});
+
+this.httpRequest.on('dataReceive', (data: ArrayBuffer): void => {
+ if (!this.isGenerating || !this.isComponentActive) {
+ return;
+ }
+
+ const chunk: string = this.bufferToStr(data);
+
+ if (isSseResponse) {
+ this.sseBuffer += chunk;
+ const events: string[] = this.sseBuffer.split('\n\n');
+ this.sseBuffer = events.pop() || '';
+
+ for (const event of events) {
+ const lines: string[] = event.split('\n');
+ let payload: string = '';
+
+ for (const line of lines) {
+ const trimLine: string = line.trim();
+ if (trimLine.startsWith('data:')) {
+ payload += trimLine.replace(/^data:\s*/, '');
+ }
+ }
+
+ if (!payload || payload === '[DONE]') {
+ continue;
+ }
+
+ try {
+ const js = JSON.parse(payload) as DifyStreamChunk;
+ if (js.event === 'message' || js.event === 'agent_message') {
+ if (this.aiMessage === '连接中...') {
+ this.aiMessage = '';
+ }
+ this.aiMessage += js.answer || '';
+ if (js.conversation_id) {
+ this.conversationId = js.conversation_id;
+ }
+ } else if (js.event === 'message_end') {
+ this.isGenerating = false;
+ } else if (js.event === 'error') {
+ this.aiMessage = 'Dify错误: ' + (js.message || '未知错误');
+ this.isGenerating = false;
+ }
+ } catch (e) {
+ console.error('解析SSE数据失败', JSON.stringify(e));
+ }
+ }
+ } else {
+ rawNonSse += chunk;
+ }
+});
+
+this.httpRequest.on('dataEnd', (): void => {
+ if (!this.isComponentActive) {
+ return;
+ }
+
+ if (!isSseResponse && rawNonSse.trim().length > 0) {
+ try {
+ const errJson = JSON.parse(rawNonSse) as DifyErrorResponse;
+ this.aiMessage = '错误:' + (errJson.message || rawNonSse);
+ } catch (e) {
+ this.aiMessage = rawNonSse;
+ }
+ } else if (this.aiMessage === '连接中...') {
+ this.aiMessage = '未收到有效数据';
+ }
+
+ this.isGenerating = false;
+ this.destroyRequest();
+});
+
+this.httpRequest.requestInStream(url, {
+ method: http.RequestMethod.POST,
+ header: {
+ Authorization: 'Bearer ' + this.DIFY_API_KEY,
+ 'Content-Type': 'application/json'
+ },
+ extraData: JSON.stringify(body),
+ connectTimeout: 60000,
+ readTimeout: 120000
+}).catch((err: BusinessError): void => {
+ if (!this.isComponentActive) {
+ return;
+ }
+ this.aiMessage = '网络错误: ' + err.message;
+ this.isGenerating = false;
+ this.destroyRequest();
+});
+}
+
+build() {
+ Column() {
+ Row() {
+ Text('对比分析')
+ .fontSize(18)
+ .fontWeight(FontWeight.Bold)
+ .fontColor('#FFFFFF');
+ Blank();
+ Text('历年趋势')
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.5)');
+ }
+ .width('92%')
+ .padding({ top: 12, bottom: 8 });
+
+ Column({ space: 10 }) {
+ Row() {
+ Row({ space: 6 }) {
+ Text(this.indicators[this.currentIndicator].name)
+ .fontSize(14)
+ .fontWeight(FontWeight.Bold)
+ .fontColor(this.indicators[this.currentIndicator].color);
+ Text('单位: ' + this.indicators[this.currentIndicator].unit)
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.6)');
+ }
+ Blank();
+ Row({ space: 4 }) {
+ Button() {
+ Text('◀')
+ .fontSize(8)
+ .fontColor('#FFFFFF');
+ }
+ .width(20)
+ .height(20)
+ .onClick(() => {
+ this.onIndicatorChange(
+ this.currentIndicator > 0 ? this.currentIndicator - 1 : this.indicators.length - 1
+ );
+ });
+
+ Button() {
+ Text('▶')
+ .fontSize(8)
+ .fontColor('#FFFFFF');
+ }
+ .width(20)
+ .height(20)
+ .onClick(() => {
+ this.onIndicatorChange(
+ this.currentIndicator < this.indicators.length - 1 ? this.currentIndicator + 1 : 0
+ );
+ });
+ }
+ }
+
+ Row() {
+ Text('标准范围: ')
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.5)');
+ Text(this.indicators[this.currentIndicator].range)
+ .fontSize(11)
+ .fontColor(this.indicators[this.currentIndicator].color);
+ }
+ .justifyContent(FlexAlign.Center);
+
+ Web({
+ src: $rawfile('chart/contrast_chart.html'),
+ controller: this.controller
+ })
+ .height(210)
+ .width('100%')
+ .javaScriptAccess(true)
+ .onPageBegin(() => {
+ this.isWebReady = false;
+ })
+ .onPageEnd(() => {
+ this.isWebReady = true;
+ this.loadChartData();
+ });
+ }
+ .width('92%')
+ .padding(12)
+ .borderRadius(14)
+ .border({ width: 1, color: 'rgba(22,119,255,0.25)' })
+ .backgroundColor('rgba(13,40,71,0.55)');
+
+ Column({ space: 8 }) {
+ Row() {
+ Row({ space: 6 }) {
+ Text('AI智能分析')
+ .fontSize(13)
+ .fontColor('#FFFFFF');
+ }
+ Blank();
+ Circle()
+ .width(5)
+ .height(5)
+ .fill(this.isGenerating ? '#00FF88' : '#1677FF');
+ }
+
+ Button(this.isGenerating ? '停止' : 'AI分析')
+ .width('100%')
+ .height(34)
+ .borderRadius(17)
+ .backgroundColor(this.isGenerating ? 'rgba(255,77,79,0.25)' : 'rgba(0,255,136,0.15)')
+ .fontColor('#FFFFFF')
+ .onClick(() => {
+ this.isGenerating ? this.cancelRequest() : this.sendAiRequest();
+ });
+
+ Scroll() {
+ Text(this.aiMessage || '等待分析...')
+ .fontSize(12)
+ .fontColor('rgba(255,255,255,0.9)')
+ .lineHeight(18)
+ .width('100%')
+ .padding(10);
+ }
+ .width('100%')
+ .layoutWeight(1)
+ .scrollBar(BarState.Auto)
+ .edgeEffect(EdgeEffect.Spring)
+ .borderRadius(10)
+ .backgroundColor('rgba(22,119,255,0.08)');
+ }
+ .width('92%')
+ .layoutWeight(1)
+ .margin({ top: 8 })
+ .padding(12)
+ .borderRadius(14)
+ .backgroundColor('rgba(13,40,71,0.4)');
+ }
+ .width('100%')
+ .height('100%')
+ .linearGradient({
+ angle: 180,
+ colors: [['#0a1628', 0], ['#0d2847', 0.5], ['#1677FF', 1]]
+ });
+}
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/components/DeviceAlarm.ets b/entry/src/main/ets/components/DeviceAlarm.ets
new file mode 100644
index 0000000..17dcdc3
--- /dev/null
+++ b/entry/src/main/ets/components/DeviceAlarm.ets
@@ -0,0 +1,581 @@
+import { getAlarmList, getAlarmStatistics } from '../utils/ApiService';
+import AlarmItemInterface from '../model/AlarmItemInterface';
+import AlarmStatisticsInterface from '../model/AlarmStatisticsInterface';
+import DeviceListInterface from '../model/DeviceListInterface';
+
+/**
+ * 设备报警组件
+ * 上部为地图区域,下部为设备报警列表
+ */
+@Component
+export struct DeviceAlarm {
+ // 报警列表数据
+ @State alarmList: AlarmItemInterface[] = [];
+ // 报警统计数据
+ @State alarmStatistics: AlarmStatisticsInterface | null = null;
+ // 加载状态
+ @State isLoading: boolean = true;
+ // 当前设备信息
+ private currentDevice: DeviceListInterface | null = null;
+
+ // 模拟报警数据(用于演示)
+ private mockAlarmList: AlarmItemInterface[] = [
+ {
+ deviceId: 1,
+ id: 1,
+ msg: 'pH值超标',
+ value: '9.2',
+ standard: '6.5-8.5',
+ coordinate: '30.5,114.3',
+ screenPosition: '',
+ createTime: '2026-05-01 14:32:00',
+ name: '长江监测点A',
+ code: 'DEVICE001'
+ },
+ {
+ deviceId: 2,
+ id: 2,
+ msg: '氨氮超标',
+ value: '1.8',
+ standard: '≤1.0',
+ coordinate: '31.2,115.1',
+ screenPosition: '',
+ createTime: '2026-05-01 10:15:00',
+ name: '长江监测点B',
+ code: 'DEVICE002'
+ },
+ {
+ deviceId: 1,
+ id: 3,
+ msg: 'COD超标',
+ value: '58',
+ standard: '≤40',
+ coordinate: '30.5,114.3',
+ screenPosition: '',
+ createTime: '2026-04-30 16:45:00',
+ name: '长江监测点A',
+ code: 'DEVICE001'
+ },
+ {
+ deviceId: 3,
+ id: 4,
+ msg: '电导率异常',
+ value: '1850',
+ standard: '500-1500',
+ coordinate: '29.8,113.5',
+ screenPosition: '',
+ createTime: '2026-04-30 08:20:00',
+ name: '长江监测点C',
+ code: 'DEVICE003'
+ },
+ {
+ deviceId: 2,
+ id: 5,
+ msg: '水温异常',
+ value: '35.5',
+ standard: '15-30',
+ coordinate: '31.2,115.1',
+ screenPosition: '',
+ createTime: '2026-04-29 11:30:00',
+ name: '长江监测点B',
+ code: 'DEVICE002'
+ }
+ ];
+
+ // 模拟统计数据
+ private mockStatistics: AlarmStatisticsInterface = {
+ todayCount: '3',
+ todayTrend: '1',
+ todayPercentage: '15',
+ weekCount: '12',
+ weekTrend: '0',
+ weekPercentage: '8',
+ monthCount: '28',
+ monthTrend: '1',
+ monthPercentage: '12'
+ };
+
+ // 科技蓝主色调
+ private primaryColor: string = '#1677FF';
+
+ aboutToAppear(): void {
+ // 从AppStorage获取当前设备信息
+ const device = AppStorage.get('point');
+ this.currentDevice = device ?? null;
+ // 加载报警数据
+ this.loadAlarmData();
+ }
+
+ // 加载报警数据
+ async loadAlarmData(): Promise {
+ try {
+ // 获取报警列表
+ const listResult = await getAlarmList();
+ if (listResult && listResult.data && listResult.data.length > 0) {
+ this.alarmList = listResult.data;
+ } else {
+ // 如果API无数据,使用模拟数据
+ this.alarmList = this.mockAlarmList;
+ }
+
+ // 获取报警统计
+ const statsResult = await getAlarmStatistics();
+ if (statsResult && statsResult.data) {
+ this.alarmStatistics = statsResult.data;
+ } else {
+ // 如果API无数据,使用模拟数据
+ this.alarmStatistics = this.mockStatistics;
+ }
+ } catch (error) {
+ console.error('加载报警数据失败:', error);
+ // 加载失败时使用模拟数据
+ this.alarmList = this.mockAlarmList;
+ this.alarmStatistics = this.mockStatistics;
+ } finally {
+ this.isLoading = false;
+ }
+ }
+
+ // 计算水质超标数量
+ getWaterQualityAlarmCount(): number {
+ const keywords = ['pH', '氨氮', 'COD', '电导率', '水温', '余氯', '溶解氧'];
+ let count = 0;
+ this.alarmList.forEach((alarm: AlarmItemInterface) => {
+ if (alarm.msg && keywords.some(keyword => alarm.msg.includes(keyword))) {
+ count++;
+ }
+ });
+ return count;
+ }
+
+ // 格式化时间显示
+ formatTime(createTime: string): string {
+ if (!createTime) return '未知时间';
+ if (createTime.includes('-')) {
+ const parts = createTime.split(' ');
+ if (parts.length >= 2) {
+ const datePart = parts[0].substring(5);
+ const timePart = parts[1].substring(0, 5);
+ return `${datePart} ${timePart}`;
+ }
+ }
+ return createTime;
+ }
+
+ // 获取趋势图标
+ getTrendIcon(trend: string): string {
+ if (trend === '1') return '↑';
+ if (trend === '0') return '↓';
+ return '=';
+ }
+
+ // 获取趋势颜色
+ getTrendColor(trend: string): string {
+ if (trend === '1') return '#FF4D4F';
+ if (trend === '0') return '#52C41A';
+ return '#FFFFFF';
+ }
+
+ build() {
+ Stack({ alignContent: Alignment.TopStart }) {
+ // 科技蓝渐变背景
+ Column()
+ .width('100%')
+ .height('100%')
+ .linearGradient({
+ angle: 180,
+ colors: [['#0a1628', 0], ['#0d2847', 0.4], ['#1677FF', 1]]
+ })
+
+ // 内容区域
+ Column({ space: 16 }) {
+ // 标题区域
+ Row() {
+ Text("设备报警")
+ .fontSize(18)
+ .fontWeight(600)
+ .fontColor('#FFFFFF')
+
+ Blank()
+
+ Row({ space: 6 }) {
+ Circle()
+ .width(8)
+ .height(8)
+ .fill(this.primaryColor)
+ Text(`${this.alarmList.length} 条报警`)
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.7)')
+ }
+ }
+ .width('92%')
+ .padding({ top: 16, bottom: 8 })
+
+ // ===== 报警数量统计卡片 =====
+ Row({ space: 10 }) {
+ // 总报警数量
+ Column({ space: 6 }) {
+ Row({ space: 6 }) {
+ Image($rawfile('Equipment/设备管理.png'))
+ .width(16)
+ .height(16)
+ .fillColor('#FFFFFF')
+ Text("报警数量")
+ .fontSize(12)
+ .fontColor('rgba(255,255,255,0.8)')
+ }
+ Text(`${this.alarmList.length}`)
+ .fontSize(28)
+ .fontWeight(700)
+ .fontColor('#FFFFFF')
+
+ }
+ .width('48%')
+ .height(80)
+ .backgroundColor('rgba(22,119,255,0.3)')
+ .borderRadius(12)
+ .justifyContent(FlexAlign.Center)
+ .borderWidth(1)
+ .borderColor('rgba(255,255,255,0.2)')
+
+ // 水质超标数量
+ Column({ space: 6 }) {
+ Row({ space: 6 }) {
+ Column()
+ .width(16)
+ .height(16)
+ .borderRadius(8)
+ .backgroundColor('#FF4D4F')
+ Text("水质超标")
+ .fontSize(12)
+ .fontColor('rgba(255,255,255,0.8)')
+ }
+ Text(`${this.getWaterQualityAlarmCount()}`)
+ .fontSize(28)
+ .fontWeight(700)
+ .fontColor('#FFFFFF')
+
+ }
+ .width('48%')
+ .height(80)
+ .backgroundColor('rgba(255,77,79,0.2)')
+ .borderRadius(12)
+ .justifyContent(FlexAlign.Center)
+ .borderWidth(1)
+ .borderColor('rgba(255,77,79,0.3)')
+ }
+ .width('92%')
+
+ // ===== 地图区域 =====
+ Column() {
+ Stack({ alignContent: Alignment.Center }) {
+ // 地图背景 - 科技蓝风格
+ Column()
+ .width('100%')
+ .height('100%')
+ .linearGradient({
+ angle: 135,
+ colors: [['#1a3a5c', 0], ['#0d2847', 1]]
+ })
+
+ // 模拟地图网格线
+ Column() {
+ ForEach([0, 1, 2, 3, 4], (row: number) => {
+ Row() {
+ ForEach([0, 1, 2, 3, 4, 5], (col: number) => {
+ Column()
+ .width('16%')
+ .height('20%')
+ .borderWidth(0.5)
+ .borderColor('rgba(22,119,255,0.2)')
+ })
+ }
+ .width('100%')
+ .height('20%')
+ })
+ }
+ .width('100%')
+ .height('100%')
+
+ // 设备位置标记点
+ if (this.currentDevice) {
+ Column({ space: 4 }) {
+ Stack({ alignContent: Alignment.Center }) {
+ Column()
+ .width(40)
+ .height(40)
+ .borderRadius(20)
+ .backgroundColor('rgba(22,119,255,0.4)')
+
+ Column()
+ .width(20)
+ .height(20)
+ .borderRadius(10)
+ .backgroundColor(this.primaryColor)
+
+ Column()
+ .width(8)
+ .height(8)
+ .borderRadius(4)
+ .backgroundColor('#FFFFFF')
+ }
+
+ Column() {
+ Text(this.currentDevice.name || '监测点')
+ .fontSize(10)
+ .fontColor('#FFFFFF')
+ .fontWeight(500)
+ }
+ .backgroundColor('rgba(22,119,255,0.8)')
+ .borderRadius(4)
+ .padding({ left: 8, right: 8, top: 4, bottom: 4 })
+ }
+ .position({ x: '45%', y: '40%' })
+ }
+
+ // 坐标信息
+ Column() {
+ Row({ space: 8 }) {
+ Image($rawfile('Equipment/设备管理.png'))
+ .width(14)
+ .height(14)
+ .fillColor('#FFFFFF')
+ if (this.currentDevice) {
+ Text(`坐标: ${this.currentDevice.latitudeLongitude || '未设置'}`)
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.7)')
+ } else {
+ Text('坐标: 未获取')
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.7)')
+ }
+ }
+ }
+ .position({ x: 12, y: 12 })
+ }
+ .width('92%')
+ .height('28%')
+ .borderRadius(12)
+ .clip(true)
+ .borderWidth(1)
+ .borderColor('rgba(22,119,255,0.3)')
+ }
+ .width('92%')
+
+ // ===== 时间段统计 =====
+ if (this.alarmStatistics) {
+ Row({ space: 10 }) {
+ this.StatisticsCard('今日', this.alarmStatistics.todayCount,
+ this.alarmStatistics.todayTrend, this.alarmStatistics.todayPercentage)
+ this.StatisticsCard('本周', this.alarmStatistics.weekCount,
+ this.alarmStatistics.weekTrend, this.alarmStatistics.weekPercentage)
+ this.StatisticsCard('本月', this.alarmStatistics.monthCount,
+ this.alarmStatistics.monthTrend, this.alarmStatistics.monthPercentage)
+ }
+ .width('92%')
+ }
+
+ // ===== 报警列表 =====
+ Column() {
+ Row() {
+ Text("报警记录")
+ .fontSize(14)
+ .fontWeight(500)
+ .fontColor('#333333')
+
+ Blank()
+
+ Text(`共${this.alarmList.length}条`)
+ .fontSize(12)
+ .fontColor('#999999')
+ }
+ .width('100%')
+ .padding({ left: 14, right: 14, top: 12, bottom: 8 })
+
+ if (this.isLoading) {
+ Column() {
+ Text("加载中...")
+ .fontSize(14)
+ .fontColor('#999999')
+ }
+ .width('100%')
+ .height(150)
+ .justifyContent(FlexAlign.Center)
+ } else if (this.alarmList.length === 0) {
+ Column() {
+ Image($rawfile('Equipment/设备管理.png'))
+ .width(40)
+ .height(40)
+ .fillColor('#CCCCCC')
+ Text("暂无报警记录")
+ .fontSize(14)
+ .fontColor('#999999')
+ .margin({ top: 8 })
+ }
+ .width('100%')
+ .height(150)
+ .justifyContent(FlexAlign.Center)
+ } else {
+ Scroll() {
+ Column({ space: 12 }) {
+ ForEach(this.alarmList, (alarm: AlarmItemInterface, index: number) => {
+ this.AlarmCard(alarm, index)
+ })
+ }
+ .width('100%')
+ .padding({ left: 14, right: 14, top: 8, bottom: 16 })
+ }
+ .width('100%')
+ .layoutWeight(1)
+ .scrollBar(BarState.Auto)
+ .edgeEffect(EdgeEffect.Spring)
+ }
+ }
+ .width('92%')
+ .layoutWeight(1)
+ .backgroundColor('#FFFFFF')
+ .borderRadius({ topLeft: 12, topRight: 12 })
+ }
+ .width('100%')
+ .height('100%')
+ .justifyContent(FlexAlign.Start)
+ }
+ .width('100%')
+ .height('100%')
+ }
+
+ @Builder
+ StatisticsCard(title: string, count: string, trend: string, percentage: string) {
+ Column({ space: 6 }) {
+ Text(title)
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.7)')
+
+ Row({ space: 4 }) {
+ Text(count)
+ .fontSize(18)
+ .fontWeight(600)
+ .fontColor('#FFFFFF')
+
+ Text(this.getTrendIcon(trend))
+ .fontSize(12)
+ .fontColor(this.getTrendColor(trend))
+ }
+
+ Text(`${percentage}%`)
+ .fontSize(10)
+ .fontColor('rgba(255,255,255,0.5)')
+ }
+ .width('31%')
+ .height(60)
+ .backgroundColor('rgba(255,255,255,0.1)')
+ .borderRadius(8)
+ .justifyContent(FlexAlign.Center)
+ .borderWidth(1)
+ .borderColor('rgba(255,255,255,0.2)')
+ }
+
+ @Builder
+ AlarmCard(alarm: AlarmItemInterface, index: number) {
+ Column({ space: 10 }) {
+ Row() {
+ Row({ space: 4 }) {
+ Image($rawfile('Equipment/设备管理.png'))
+ .width(12)
+ .height(12)
+ .fillColor(this.primaryColor)
+ Text(alarm.code || '未知设备')
+ .fontSize(12)
+ .fontWeight(500)
+ .fontColor(this.primaryColor)
+ }
+ .backgroundColor('#E6F4FF')
+ .borderRadius(4)
+ .padding({ left: 8, right: 8, top: 4, bottom: 4 })
+
+ Blank()
+
+ Row({ space: 4 }) {
+ Text("掉线时间:")
+ .fontSize(11)
+ .fontColor('#999999')
+ Text(this.formatTime(alarm.createTime))
+ .fontSize(11)
+ .fontWeight(500)
+ .fontColor('#666666')
+ }
+ }
+ .width('100%')
+
+ Column({ space: 6 }) {
+ Row({ space: 8 }) {
+ Text("水质情况:")
+ .fontSize(12)
+ .fontColor('#333333')
+
+ Blank()
+
+ Text(alarm.msg || '异常')
+ .fontSize(13)
+ .fontWeight(500)
+ .fontColor('#FF4D4F')
+ .maxLines(1)
+ .textOverflow({ overflow: TextOverflow.Ellipsis })
+ }
+ .width('100%')
+
+ Row({ space: 12 }) {
+ Column({ space: 4 }) {
+ Text("当前值")
+ .fontSize(10)
+ .fontColor('#999999')
+ Text(alarm.value || '-')
+ .fontSize(14)
+ .fontWeight(600)
+ .fontColor('#FF4D4F')
+ }
+ .alignItems(HorizontalAlign.Start)
+
+ Column()
+ .width(1)
+ .height(30)
+ .backgroundColor('#E5E5E5')
+
+ Column({ space: 4 }) {
+ Text("标准值")
+ .fontSize(10)
+ .fontColor('#999999')
+ Text(alarm.standard || '-')
+ .fontSize(14)
+ .fontWeight(600)
+ .fontColor('#52C41A')
+ }
+ .alignItems(HorizontalAlign.Start)
+
+ Blank()
+
+ Text(`#${index + 1}`)
+ .fontSize(10)
+ .fontColor('#CCCCCC')
+ }
+ .width('100%')
+ }
+ .width('100%')
+ .backgroundColor('#F5F5F5')
+ .borderRadius(8)
+ .padding(12)
+ }
+ .width('100%')
+ .backgroundColor('#FFFFFF')
+ .borderRadius(12)
+ .padding(14)
+ .borderWidth(1)
+ .borderColor('rgba(22,119,255,0.15)')
+ .shadow({
+ radius: 4,
+ color: 'rgba(0,0,0,0.05)',
+ offsetX: 0,
+ offsetY: 2
+ })
+ }
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/components/Equipment.ets b/entry/src/main/ets/components/Equipment.ets
new file mode 100644
index 0000000..354cbaf
--- /dev/null
+++ b/entry/src/main/ets/components/Equipment.ets
@@ -0,0 +1,151 @@
+import { router } from "@kit.ArkUI";
+import DeviceListInterface from "../model/DeviceListInterface";
+
+/**
+ * 设备页面组件 - 科技蓝风格
+ */
+@Component
+export struct Equipment {
+ // 设备列表数据
+ @State deviceList: DeviceListInterface[] = [
+ {
+ id: 1,
+ name: '长江监测点A',
+ code: 'DEVICE001',
+ latitudeLongitude: '30.5,114.3',
+ screenPosition: '',
+ status: 1 // 正常
+ },
+ {
+ id: 2,
+ name: '长江监测点B',
+ code: 'DEVICE002',
+ latitudeLongitude: '31.2,115.1',
+ screenPosition: '',
+ status: 0 // 异常
+ }
+ ];
+
+ aboutToAppear(): void {
+ // 从AppStorage获取新添加的设备
+ const newDevice = AppStorage.get('newDevice');
+ if (newDevice) {
+ // 添加到设备列表
+ this.deviceList = [
+ {
+ id: 1,
+ name: '长江监测点A',
+ code: 'DEVICE001',
+ latitudeLongitude: '30.5,114.3',
+ screenPosition: '',
+ status: 1
+ },
+ {
+ id: 2,
+ name: '长江监测点B',
+ code: 'DEVICE002',
+ latitudeLongitude: '31.2,115.1',
+ screenPosition: '',
+ status: 0
+ },
+ newDevice
+ ];
+ // 清除临时存储
+ AppStorage.delete('newDevice');
+ }
+ }
+
+ build() {
+ Column() {
+ // 顶部标题栏 - 科技蓝风格
+ Row() {
+ Image($rawfile("Equipment/设备管理.png"))
+ .width(20)
+ .height(20)
+ .fillColor('#FFFFFF')
+ .margin({ left: 20, right: 10 })
+ Text("设备管理")
+ .fontSize(20)
+ .fontWeight(600)
+ .fontColor("#FFFFFF")
+
+ Blank()
+
+ Row({ space: 6 }) {
+ Circle()
+ .width(8)
+ .height(8)
+ .fill('#00FF88')
+ Text(`${this.deviceList.length} 台`)
+ .fontSize(12)
+ .fontColor('rgba(255,255,255,0.7)')
+ }
+ }
+ .width("100%")
+ .height(60)
+ .padding({ left: 10, right: 20 })
+ .alignItems(VerticalAlign.Center)
+
+ // 设备列表区域
+ Column({ space: 12 }) {
+ ForEach(this.deviceList, (device: DeviceListInterface) => {
+ Row() {
+ Column() {
+ Row({ space: 10 }) {
+ Text(device.name)
+ .fontSize(16)
+ .fontWeight(FontWeight.Bold)
+ .fontColor('#FFFFFF')
+ Text(device.code)
+ .fontSize(12)
+ .fontColor('rgba(255,255,255,0.6)')
+ }
+ Row({ space: 6 }) {
+ Circle()
+ .width(6)
+ .height(6)
+ .fill(device.status === 1 ? '#00FF88' : '#FF6B6B')
+ Text(device.status === 1 ? "正常运行中" : "异常报警")
+ .fontColor(device.status === 1 ? '#00FF88' : '#FF6B6B')
+ .fontSize(12)
+ }
+ .margin({ top: 8 })
+ }
+ .alignItems(HorizontalAlign.Start)
+ .margin({ left: 16 })
+
+ Blank()
+
+ Image($rawfile("Equipment/右括号.png"))
+ .width(18)
+ .height(18)
+ .fillColor('rgba(255,255,255,0.5)')
+ .margin({ right: 16 })
+ }
+ .width("92%")
+ .height(80)
+ .backgroundColor('rgba(22,119,255,0.15)')
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(22,119,255,0.3)' })
+ .justifyContent(FlexAlign.SpaceBetween)
+ .alignItems(VerticalAlign.Center)
+ .onClick(() => {
+ // 存储当前设备信息供详情页使用(使用point作为key,与ApiService保持一致)
+ AppStorage.setOrCreate('point', device);
+ router.pushUrl({ url: 'pages/Details' });
+ })
+ })
+ }
+ .width("100%")
+ .layoutWeight(1)
+ .padding({ top: 16 })
+ .justifyContent(FlexAlign.Center)
+ }
+ .width('100%')
+ .height('100%')
+ .linearGradient({
+ angle: 180,
+ colors: [['#0a1628', 0], ['#0d2847', 0.5], ['#1677FF', 1]]
+ })
+ }
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/components/WaterMonitor.ets b/entry/src/main/ets/components/WaterMonitor.ets
new file mode 100644
index 0000000..9b11b5f
--- /dev/null
+++ b/entry/src/main/ets/components/WaterMonitor.ets
@@ -0,0 +1,354 @@
+import { webview } from '@kit.ArkWeb';
+import MqttService, { WaterQualityData, SimpleEmitterUtil } from '../utils/MqttService';
+
+// 水质指标数据接口
+interface IndicatorData {
+ name: string;
+ value: number;
+ unit: string;
+ color: string;
+ bgColor: string;
+ minValue: number;
+ maxValue: number;
+ normalRange: string;
+}
+
+/**
+ * 水情检测组件
+ */
+@Component
+export struct WaterMonitor {
+ chartWebviewController: webview.WebviewController = new webview.WebviewController();
+ private mqttService: MqttService = MqttService.getInstance();
+ private refreshTimer: number = -1;
+ private chartUpdateTimer: number = -1;
+
+ // 最新MQTT数据缓冲
+ private latestData: WaterQualityData = {
+ temperature: 0, ph: 0, conductivity: 0,
+ cod: 0, ammonia: 0, chlorine: 0, timestamp: 0
+ };
+
+ // 当前UI显示的水质数据
+ @State currentData: WaterQualityData = {
+ temperature: 25.5, ph: 7.2, conductivity: 850,
+ cod: 28.5, ammonia: 0.35, chlorine: 0.42, timestamp: Date.now()
+ };
+
+ // 连接状态
+ @State isConnected: boolean = false;
+
+ // 是否有真实数据
+ @State hasRealData: boolean = false;
+
+ // WebView是否加载完成
+ @State isWebViewReady: boolean = false;
+
+ // 基本水质指标配置
+ private basicIndicators: IndicatorData[] = [
+ { name: '水温', value: 0, unit: '°C', color: '#1677FF', bgColor: '#E6F4FF', minValue: 0, maxValue: 40, normalRange: '15-30°C' },
+ { name: 'pH值', value: 0, unit: '', color: '#52C41A', bgColor: '#F6FFED', minValue: 0, maxValue: 14, normalRange: '6.5-8.5' },
+ { name: '电导率', value: 0, unit: 'μS/cm', color: '#722ED1', bgColor: '#F9F0FF', minValue: 0, maxValue: 2000, normalRange: '500-1500' },
+ { name: 'COD', value: 0, unit: 'mg/L', color: '#13C2C2', bgColor: '#E6FFFB', minValue: 0, maxValue: 100, normalRange: '≤40' }
+ ];
+
+ aboutToAppear(): void {
+ // 配置MQTT连接参数
+ this.mqttService.setConfig('tcp://192.168.31.100:1883', 'sea_status');
+
+ // 使用SimpleEmitterUtil订阅MQTT消息
+ SimpleEmitterUtil.on((payload: string) => {
+ if (payload) {
+ this.latestData = this.mqttService.parseWaterQualityData(payload);
+ this.isConnected = true;
+ this.hasRealData = true;
+ }
+ });
+
+ // 异步连接MQTT
+ this.mqttService.connect().then(() => {
+ this.isConnected = this.mqttService.getConnectionStatus();
+ });
+
+ // 每4秒刷新一次UI数据
+ this.refreshTimer = setInterval(() => {
+ if (this.hasRealData) {
+ // 使用真实MQTT数据
+ this.currentData = this.latestData;
+ } else {
+ // 使用模拟数据
+ try {
+
+ }catch (e) {
+ console.error("mqtt_err:", JSON.stringify(e))
+ }
+ }
+ }, 4000);
+
+ // 每5秒更新图表(延迟启动,等待WebView加载)
+ setTimeout(() => {
+ this.startChartUpdate();
+ }, 2000);
+ }
+
+ aboutToDisappear(): void {
+ // 清除定时器
+ if (this.refreshTimer >= 0) {
+ clearInterval(this.refreshTimer);
+ this.refreshTimer = -1;
+ }
+ if (this.chartUpdateTimer >= 0) {
+ clearInterval(this.chartUpdateTimer);
+ this.chartUpdateTimer = -1;
+ }
+ // 取消订阅
+ SimpleEmitterUtil.off();
+ // 断开MQTT
+ this.mqttService.disconnect();
+ }
+
+
+
+ // 启动图表更新定时器
+ startChartUpdate(): void {
+ this.isWebViewReady = true;
+ // 立即更新一次
+ this.updateChartData();
+
+ // 每5秒更新图表
+ this.chartUpdateTimer = setInterval(() => {
+ this.updateChartData();
+ }, 5000);
+ }
+
+ updateChartData(): void {
+ try {
+ const chlorine: number = this.currentData.chlorine ?? 0;
+ const ammonia: number = this.currentData.ammonia ?? 0;
+ const jsCode: string = `updateData(${chlorine.toFixed(3)}, ${ammonia.toFixed(3)})`;
+ this.chartWebviewController.runJavaScript(jsCode);
+ console.info('图表更新: chlorine=' + chlorine.toFixed(3) + ', ammonia=' + ammonia.toFixed(3));
+ } catch (error) {
+ const errMsg: string = String(error);
+ console.error('更新图表失败: ' + errMsg);
+ }
+ }
+
+ // 获取数值显示
+ getValueByIndex(index: number): string {
+ const temp = this.currentData.temperature ?? 0;
+ const ph = this.currentData.ph ?? 0;
+ const conductivity = this.currentData.conductivity ?? 0;
+ const cod = this.currentData.cod ?? 0;
+ if (index === 0) return temp.toFixed(1);
+ if (index === 1) return ph.toFixed(2);
+ if (index === 2) return conductivity.toFixed(0);
+ return cod.toFixed(1);
+ }
+
+ build() {
+ Stack({ alignContent: Alignment.TopStart }) {
+ // 渐变背景(底层)
+ Column()
+ .width('100%')
+ .height('100%')
+ .linearGradient({
+ angle: 180,
+ colors: [['#0a1628', 0], ['#0d2847', 0.4], ['#1677FF', 1]]
+ })
+
+ // 内容区域(上层)
+ Scroll() {
+ Column({ space: 16 }) {
+ // 标题区域
+ Row() {
+ Text("水情监测")
+ .fontSize(18)
+ .fontWeight(600)
+ .fontColor('#FFFFFF')
+
+ Blank()
+
+ // 连接状态指示
+ Row({ space: 6 }) {
+ Circle()
+ .width(8)
+ .height(8)
+ .fill(this.hasRealData ? '#52C41A' : '#FAAD14')
+ Text(this.hasRealData ? '实时数据' : '模拟数据')
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.7)')
+ }
+ }
+ .width('92%')
+ .padding({ top: 16, bottom: 8 })
+
+ // ===== 基本水质指标 =====
+ Column({ space: 10 }) {
+ Row({ space: 10 }) {
+ this.IndicatorCard(0)
+ this.IndicatorCard(1)
+ }
+ Row({ space: 10 }) {
+ this.IndicatorCard(2)
+ this.IndicatorCard(3)
+ }
+ }
+ .width('92%')
+ .padding({ top: 8, bottom: 8 })
+
+ // ===== 营养盐指标 =====
+ Row({ space: 10 }) {
+ // 氨氮
+ Column({ space: 8 }) {
+ Text("氨氮")
+ .fontSize(13)
+ .fontWeight(500)
+ .fontColor('#333333')
+ .width('100%')
+
+ Row({ space: 4 }) {
+ Text((this.currentData.ammonia ?? 0).toFixed(3))
+ .fontSize(24)
+ .fontWeight(600)
+ .fontColor('#FF4D4F')
+ Text("mg/L")
+ .fontSize(12)
+ .fontColor('#999999')
+ }
+
+ Text('正常范围: ≤1.0')
+ .fontSize(10)
+ .fontColor('#999999')
+ }
+ .width('48%')
+ .height(90)
+ .linearGradient({
+ angle: 135,
+ colors: [['#FFFFFF', 0], ['#FFF1F0', 1]]
+ })
+ .borderRadius(12)
+ .padding(12)
+ .justifyContent(FlexAlign.Center)
+ .borderWidth(1)
+ .borderColor('rgba(255,77,79,0.15)')
+
+ // 余氯
+ Column({ space: 8 }) {
+ Text("余氯")
+ .fontSize(13)
+ .fontWeight(500)
+ .fontColor('#333333')
+ .width('100%')
+
+ Row({ space: 4 }) {
+ Text((this.currentData.chlorine ?? 0).toFixed(3))
+ .fontSize(24)
+ .fontWeight(600)
+ .fontColor('#FA8C16')
+ Text("mg/L")
+ .fontSize(12)
+ .fontColor('#999999')
+ }
+
+ Text('正常范围: 0.3-0.5')
+ .fontSize(10)
+ .fontColor('#999999')
+ }
+ .width('48%')
+ .height(90)
+ .linearGradient({
+ angle: 135,
+ colors: [['#FFFFFF', 0], ['#FFF7E6', 1]]
+ })
+ .borderRadius(12)
+ .padding(12)
+ .justifyContent(FlexAlign.Center)
+ .borderWidth(1)
+ .borderColor('rgba(250,140,22,0.15)')
+ }
+ .width('92%')
+
+ // ===== 变化曲线 =====
+ Column() {
+ Text("实时变化曲线")
+ .fontSize(13)
+ .fontWeight(500)
+ .fontColor('#333333')
+ .width('100%')
+ .padding({ left: 14, top: 12, bottom: 6 })
+
+ Web({ src: $rawfile('chart/line_chart.html'), controller: this.chartWebviewController })
+ .width('100%')
+ .height(220)
+ .backgroundColor('#FFFFFF')
+ .javaScriptAccess(true)
+ .domStorageAccess(true)
+ }
+ .width('92%')
+ .backgroundColor('#FFFFFF')
+ .borderRadius(12)
+ .borderWidth(1)
+ .borderColor('rgba(22,119,255,0.15)')
+
+ // 底部提示
+ Row() {
+ Text(this.hasRealData ? 'MQTT实时数据' : '模拟数据展示')
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.5)')
+ }
+ .width('100%')
+ .justifyContent(FlexAlign.Center)
+ .margin({ top: 8, bottom: 20 })
+ }
+ .width('100%')
+ .justifyContent(FlexAlign.Center)
+ }
+ .width('100%')
+ .height('100%')
+ .scrollBar(BarState.Off)
+ .edgeEffect(EdgeEffect.Spring)
+ }
+ .width('100%')
+ .height('100%')
+ }
+
+ @Builder
+ IndicatorCard(index: number) {
+ Column({ space: 8 }) {
+ // 名称
+ Text(this.basicIndicators[index].name)
+ .fontSize(13)
+ .fontWeight(500)
+ .fontColor('#333333')
+ .width('100%')
+
+ // 数值
+ Row({ space: 2 }) {
+ Text(this.getValueByIndex(index))
+ .fontSize(24)
+ .fontWeight(600)
+ .fontColor(this.basicIndicators[index].color)
+ Text(this.basicIndicators[index].unit)
+ .fontSize(12)
+ .fontColor('#999999')
+ }
+
+ // 正常范围提示
+ Text('正常范围: ' + this.basicIndicators[index].normalRange)
+ .fontSize(10)
+ .fontColor('#999999')
+ }
+ .width('48%')
+ .height(90)
+ .linearGradient({
+ angle: 135,
+ colors: [['#FFFFFF', 0], ['#E6F4FF', 1]]
+ })
+ .borderRadius(12)
+ .padding(12)
+ .justifyContent(FlexAlign.Center)
+ .borderWidth(1)
+ .borderColor('rgba(22,119,255,0.15)')
+ }
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/components/user.ets b/entry/src/main/ets/components/user.ets
new file mode 100644
index 0000000..526f1fe
--- /dev/null
+++ b/entry/src/main/ets/components/user.ets
@@ -0,0 +1,314 @@
+import { router } from '@kit.ArkUI';
+import { promptAction } from '@kit.ArkUI';
+
+/**
+ * 用户页面组件 - 科技蓝风格
+ */
+@Component
+export struct User {
+ @State totalNumber: number = 2;
+ @State bugNumber: number = 1;
+ @State userName: string = '管理员';
+
+ // 退出登录
+ handleLogout(): void {
+ promptAction.showDialog({
+ title: '提示',
+ message: '确定要退出登录吗?',
+ buttons: [
+ { text: '取消', color: 'rgba(255,255,255,0.6)' },
+ { text: '确定', color: '#00FF88' }
+ ]
+ }).then((result) => {
+ if (result.index === 1) {
+ // 清除登录信息
+ AppStorage.delete('token');
+ promptAction.showToast({ message: '已退出登录' });
+ // 跳转到登录页
+ router.pushUrl({ url: 'pages/Login' });
+ }
+ });
+ }
+
+ // 报告生成
+ handleGenerateReport(): void {
+ promptAction.showToast({ message: '报告生成功能开发中...' });
+ // TODO: 实现报告生成功能
+ }
+
+ // 设置
+ handleSettings(): void {
+ promptAction.showToast({ message: '设置功能开发中...' });
+ // TODO: 实现设置功能
+ }
+
+ build() {
+ Column() {
+ // 顶部标题栏 - 科技蓝风格
+ Row() {
+ Image($rawfile("user/个人.png"))
+ .width(20)
+ .height(20)
+ .fillColor('#FFFFFF')
+ .margin({ left: 20, right: 10 })
+ Text("个人中心")
+ .fontSize(20)
+ .fontWeight(600)
+ .fontColor("#FFFFFF")
+
+ Blank()
+
+ Text('用户管理')
+ .fontSize(12)
+ .fontColor('rgba(255,255,255,0.5)')
+ }
+ .width("100%")
+ .height(60)
+ .padding({ left: 10, right: 20 })
+ .alignItems(VerticalAlign.Center)
+
+ Scroll() {
+ Column({ space: 16 }) {
+ // 用户信息卡片
+ Column({ space: 12 }) {
+ // 头像区域
+ Row() {
+ Column() {
+ Image($rawfile("user/个人b.png"))
+ .width(40)
+ .height(40)
+ .fillColor('#FFFFFF')
+ }
+ .width(60)
+ .height(60)
+ .borderRadius(30)
+ .backgroundColor('rgba(22,119,255,0.3)')
+ .border({ width: 1, color: 'rgba(22,119,255,0.4)' })
+
+ Column({ space: 4 }) {
+ Text(this.userName)
+ .fontSize(18)
+ .fontWeight(FontWeight.Bold)
+ .fontColor('#FFFFFF')
+
+ Text("鸿蒙水生态系统 · 专业版")
+ .fontSize(12)
+ .fontColor("rgba(255, 255, 255, 0.6)")
+ }
+ .alignItems(HorizontalAlign.Start)
+ .margin({ left: 12 })
+ }
+ .width('100%')
+ .justifyContent(FlexAlign.Start)
+ .padding({ left: 16, right: 16, top: 16, bottom: 12 })
+ }
+ .width("92%")
+ .backgroundColor('rgba(22,119,255,0.15)')
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(22,119,255,0.3)' })
+
+ // 数据统计卡片
+ Row({ space: 12 }) {
+ // 设备总数
+ Column({ space: 6 }) {
+ Text(this.totalNumber.toString())
+ .fontSize(32)
+ .fontWeight(FontWeight.Bold)
+ .fontColor('#00FF88')
+ Text("设备总数")
+ .fontSize(12)
+ .fontColor("rgba(255,255,255,0.6)")
+ }
+ .width('48%')
+ .height(80)
+ .backgroundColor('rgba(0,255,136,0.1)')
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(0,255,136,0.3)' })
+ .justifyContent(FlexAlign.Center)
+
+ // 异常设备
+ Column({ space: 6 }) {
+ Text(this.bugNumber.toString())
+ .fontSize(32)
+ .fontWeight(FontWeight.Bold)
+ .fontColor("#FF6B6B")
+ Text("异常设备")
+ .fontSize(12)
+ .fontColor("rgba(255,255,255,0.6)")
+ }
+ .width('48%')
+ .height(80)
+ .backgroundColor('rgba(255,107,107,0.1)')
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(255,107,107,0.3)' })
+ .justifyContent(FlexAlign.Center)
+ }
+ .width('92%')
+
+ // 功能菜单区域
+ Column({ space: 10 }) {
+ // 报告生成
+ Row() {
+ Row({ space: 12 }) {
+ Column() {
+ Image($rawfile("user/报告.png"))
+ .width(20)
+ .height(20)
+ .fillColor('#00FF88')
+ }
+ .width(40)
+ .height(40)
+ .borderRadius(10)
+ .backgroundColor('rgba(0,255,136,0.15)')
+ .justifyContent(FlexAlign.Center)
+
+ Column({ space: 2 }) {
+ Text("报告生成")
+ .fontSize(14)
+ .fontWeight(FontWeight.Bold)
+ .fontColor('#FFFFFF')
+ Text("生成设备运行报告")
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.5)')
+ }
+ .alignItems(HorizontalAlign.Start)
+ }
+
+ Image($rawfile("user/右箭头.png"))
+ .width(16)
+ .height(16)
+ .fillColor('rgba(255,255,255,0.4)')
+ }
+ .width('100%')
+ .height(60)
+ .backgroundColor('rgba(22,119,255,0.15)')
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(22,119,255,0.25)' })
+ .padding({ left: 12, right: 12 })
+ .justifyContent(FlexAlign.SpaceBetween)
+ .alignItems(VerticalAlign.Center)
+ .onClick(() => {
+ this.handleGenerateReport();
+ })
+
+ // 设置
+ Row() {
+ Row({ space: 12 }) {
+ Column() {
+ Image($rawfile("user/设置.png"))
+ .width(20)
+ .height(20)
+ .fillColor('#4ECDC4')
+ }
+ .width(40)
+ .height(40)
+ .borderRadius(10)
+ .backgroundColor('rgba(78,205,196,0.15)')
+ .justifyContent(FlexAlign.Center)
+
+ Column({ space: 2 }) {
+ Text("系统设置")
+ .fontSize(14)
+ .fontWeight(FontWeight.Bold)
+ .fontColor('#FFFFFF')
+ Text("个性化配置与偏好")
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.5)')
+ }
+ .alignItems(HorizontalAlign.Start)
+ }
+
+ Image($rawfile("user/右箭头.png"))
+ .width(16)
+ .height(16)
+ .fillColor('rgba(255,255,255,0.4)')
+ }
+ .width('100%')
+ .height(60)
+ .backgroundColor('rgba(22,119,255,0.15)')
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(22,119,255,0.25)' })
+ .padding({ left: 12, right: 12 })
+ .justifyContent(FlexAlign.SpaceBetween)
+ .alignItems(VerticalAlign.Center)
+ .onClick(() => {
+ this.handleSettings();
+ })
+
+ // 退出登录
+ Row() {
+ Row({ space: 12 }) {
+ Column() {
+ Image($rawfile("user/退出.png"))
+ .width(20)
+ .height(20)
+ .fillColor('#FF6B6B')
+ }
+ .width(40)
+ .height(40)
+ .borderRadius(10)
+ .backgroundColor('rgba(255,107,107,0.15)')
+ .justifyContent(FlexAlign.Center)
+
+ Column({ space: 2 }) {
+ Text("退出登录")
+ .fontSize(14)
+ .fontWeight(FontWeight.Bold)
+ .fontColor('#FFFFFF')
+ Text("切换账号或重新登录")
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.5)')
+ }
+ .alignItems(HorizontalAlign.Start)
+ }
+
+ Image($rawfile("user/右箭头.png"))
+ .width(16)
+ .height(16)
+ .fillColor('rgba(255,255,255,0.4)')
+ }
+ .width('100%')
+ .height(60)
+ .backgroundColor('rgba(255,107,107,0.1)')
+ .borderRadius(12)
+ .border({ width: 1, color: 'rgba(255,107,107,0.25)' })
+ .padding({ left: 12, right: 12 })
+ .justifyContent(FlexAlign.SpaceBetween)
+ .alignItems(VerticalAlign.Center)
+ .onClick(() => {
+ this.handleLogout();
+ })
+ }
+ .width('92%')
+
+ // 版本信息
+ Column() {
+ Text("版本 v1.0.0")
+ .fontSize(12)
+ .fontColor('rgba(255,255,255,0.4)')
+ Text("© 2024 鸿蒙水生态管理系统")
+ .fontSize(11)
+ .fontColor('rgba(255,255,255,0.3)')
+ .margin({ top: 4 })
+ }
+ .width('100%')
+ .justifyContent(FlexAlign.Center)
+ .margin({ top: 16, bottom: 20 })
+ }
+ .width('100%')
+ .justifyContent(FlexAlign.Center)
+ }
+ .width('100%')
+ .layoutWeight(1)
+ .scrollBar(BarState.Off)
+ .edgeEffect(EdgeEffect.Spring)
+ .padding({ top: 12 })
+ }
+ .width('100%')
+ .height('100%')
+ .linearGradient({
+ angle: 180,
+ colors: [['#0a1628', 0], ['#0d2847', 0.5], ['#1677FF', 1]]
+ })
+ }
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets
new file mode 100644
index 0000000..ba23472
--- /dev/null
+++ b/entry/src/main/ets/entryability/EntryAbility.ets
@@ -0,0 +1,43 @@
+import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
+import { hilog } from '@kit.PerformanceAnalysisKit';
+import { window } from '@kit.ArkUI';
+
+const DOMAIN = 0x0000;
+
+export default class EntryAbility extends UIAbility {
+ onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
+ hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');
+ }
+
+ onDestroy(): void {
+ hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onDestroy');
+ }
+
+ onWindowStageCreate(windowStage: window.WindowStage): void {
+ // Main window is created, set main page for this ability
+ hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
+
+ windowStage.loadContent('pages/Login', (err) => {
+ if (err.code) {
+ hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err));
+ return;
+ }
+ hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.');
+ });
+ }
+
+ onWindowStageDestroy(): void {
+ // Main window is destroyed, release UI related resources
+ hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
+ }
+
+ onForeground(): void {
+ // Ability has brought to foreground
+ hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground');
+ }
+
+ onBackground(): void {
+ // Ability has back to background
+ hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onBackground');
+ }
+}
diff --git a/entry/src/main/ets/model/AiMessageInterface.ets b/entry/src/main/ets/model/AiMessageInterface.ets
new file mode 100644
index 0000000..46f2645
--- /dev/null
+++ b/entry/src/main/ets/model/AiMessageInterface.ets
@@ -0,0 +1,7 @@
+/**
+ * AI请求消息接口
+ */
+export default interface AiMessageInterface {
+ role: string; // 角色: user 或 assistant
+ content: string; // 消息内容
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/model/AlarmItemInterface.ets b/entry/src/main/ets/model/AlarmItemInterface.ets
new file mode 100644
index 0000000..238f571
--- /dev/null
+++ b/entry/src/main/ets/model/AlarmItemInterface.ets
@@ -0,0 +1,12 @@
+export default interface AlarmItemInterface{
+ deviceId:number;
+ id:number;
+ msg:string;
+ value:string;
+ standard:string;
+ coordinate:string;
+ screenPosition:string;
+ createTime:string;
+ name:string;
+ code:string;
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/model/AlarmStatisticsInterface.ets b/entry/src/main/ets/model/AlarmStatisticsInterface.ets
new file mode 100644
index 0000000..9497574
--- /dev/null
+++ b/entry/src/main/ets/model/AlarmStatisticsInterface.ets
@@ -0,0 +1,11 @@
+export default interface AlarmStatisticsInterface {
+ todayCount: string, //今日异常数量
+ todayTrend: string, //0 下降 1上升 2 等于
+ todayPercentage: string, //比率
+ weekCount: string, //本周异常数量
+ weekTrend: string, //0 下降 1上升 2 等于
+ weekPercentage: string, //比率
+ monthCount: string, //本月异常数量
+ monthTrend: string, //0 下降 1上升 2 等于
+ monthPercentage: string //比率
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/model/Alarmltemlnterface.ets b/entry/src/main/ets/model/Alarmltemlnterface.ets
new file mode 100644
index 0000000..f124bb6
--- /dev/null
+++ b/entry/src/main/ets/model/Alarmltemlnterface.ets
@@ -0,0 +1,12 @@
+export default interface AlarmItemInterface{
+ deviceId: number;
+ id:number;
+ msg:string;
+ value:string;
+ standard:string;
+ coordinate:string;
+ screenPosition:string;
+ createTime:string;
+ name:string;
+ code:string;
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/model/CarbonInfoInterface.ets b/entry/src/main/ets/model/CarbonInfoInterface.ets
new file mode 100644
index 0000000..e431c63
--- /dev/null
+++ b/entry/src/main/ets/model/CarbonInfoInterface.ets
@@ -0,0 +1,5 @@
+export default interface CarbonInfoInterface {
+ carbonSequestration: number
+ ph: number
+ waterTemperature: number
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/model/DeviceListInterface.ets b/entry/src/main/ets/model/DeviceListInterface.ets
new file mode 100644
index 0000000..850b3b3
--- /dev/null
+++ b/entry/src/main/ets/model/DeviceListInterface.ets
@@ -0,0 +1,8 @@
+export default interface DeviceListInterface{
+ id:number;
+ latitudeLongitude:string;
+ name:string;
+ screenPosition:string;
+ status:number
+ code:string;
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/model/DifyRequestBody.ets b/entry/src/main/ets/model/DifyRequestBody.ets
new file mode 100644
index 0000000..8f2ed15
--- /dev/null
+++ b/entry/src/main/ets/model/DifyRequestBody.ets
@@ -0,0 +1,10 @@
+/**
+ * Dify API请求体接口
+ */
+export default interface DifyRequestBody {
+ inputs: Record;
+ query: string;
+ response_mode: string;
+ conversation_id: string;
+ user: string;
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/model/EutrophicationItemInterface.ets b/entry/src/main/ets/model/EutrophicationItemInterface.ets
new file mode 100644
index 0000000..cbb93e7
--- /dev/null
+++ b/entry/src/main/ets/model/EutrophicationItemInterface.ets
@@ -0,0 +1,14 @@
+export default interface EutrophicationItemInterface{
+ //水温
+ waterTemperature:number
+ //cod
+ cod:number
+ //ph
+ ph:number
+ //余氯
+ residualChlorine:number
+ //氨氮
+ ammoniaNitrogen:number
+ //时间
+ createTime:string
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/model/LoginInterface.ets b/entry/src/main/ets/model/LoginInterface.ets
new file mode 100644
index 0000000..a24cf1a
--- /dev/null
+++ b/entry/src/main/ets/model/LoginInterface.ets
@@ -0,0 +1,4 @@
+export default interface LoginInterface{
+ username:string
+ password:string
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/model/OpenAiRequestBody.ets b/entry/src/main/ets/model/OpenAiRequestBody.ets
new file mode 100644
index 0000000..331fd89
--- /dev/null
+++ b/entry/src/main/ets/model/OpenAiRequestBody.ets
@@ -0,0 +1,12 @@
+import AiMessageInterface from './AiMessageInterface';
+
+/**
+ * OpenAI API请求体接口
+ */
+export default interface OpenAiRequestBody {
+ model: string;
+ messages: AiMessageInterface[];
+ stream: boolean;
+ temperature?: number;
+ max_tokens?: number;
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/model/RequestModel.ets b/entry/src/main/ets/model/RequestModel.ets
new file mode 100644
index 0000000..dee680b
--- /dev/null
+++ b/entry/src/main/ets/model/RequestModel.ets
@@ -0,0 +1,32 @@
+/**
+ * AI API响应模型 - 支持Dify和OpenAI两种格式
+ */
+export default interface RequestModel {
+ // Dify格式字段
+ answer?: string; // Dify: AI回答内容
+ event?: string; // Dify: 事件类型: message, message_end等
+ conversation_id?: string; // Dify: 会话ID
+ message_id?: string; // Dify: 消息ID
+ task_id?: string; // Dify: 任务ID
+
+ // OpenAI格式字段
+ choices?: ChoiceItem[]; // OpenAI: 选择列表
+}
+
+/**
+ * OpenAI Choice项
+ */
+export interface ChoiceItem {
+ delta?: DeltaItem;
+ finish_reason?: string;
+ index?: number;
+}
+
+/**
+ * OpenAI Delta项
+ */
+export interface DeltaItem {
+ content?: string;
+ role?: string;
+}
+
diff --git a/entry/src/main/ets/model/SeaRangeInterface.ets b/entry/src/main/ets/model/SeaRangeInterface.ets
new file mode 100644
index 0000000..21ff55f
--- /dev/null
+++ b/entry/src/main/ets/model/SeaRangeInterface.ets
@@ -0,0 +1,22 @@
+export default interface SeaRangeInterface {
+ //水温
+ waterTemperatureBottom: number;
+ waterTemperatureTop: number;
+ //cod
+ codBottom: number;
+ codTop: number;
+ //ph
+ phBottom: number;
+ phTop: number;
+ //余氯
+ residualChlorineBottom:number;
+ residualChlorineTop:number;
+ //电导率
+ conductivityBottom:number
+ conductivityTop:number
+ //氨氮
+ ammoniaNitrogenBottom:number
+ ammoniaNitrogenTop:number
+ //id
+ id?:number
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/model/StatisticalInterface.ets b/entry/src/main/ets/model/StatisticalInterface.ets
new file mode 100644
index 0000000..bf1aa7e
--- /dev/null
+++ b/entry/src/main/ets/model/StatisticalInterface.ets
@@ -0,0 +1,5 @@
+export default interface StatisticalInterface {
+ date: string
+ type: string
+ value: number
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/model/UserInfoInterface.ets b/entry/src/main/ets/model/UserInfoInterface.ets
new file mode 100644
index 0000000..214ef7e
--- /dev/null
+++ b/entry/src/main/ets/model/UserInfoInterface.ets
@@ -0,0 +1,11 @@
+export default interface UserInfoInterface {
+ phonenumber: string | undefined, //用户姓名
+ avatar?: string | undefined, //用户头像
+ nickName: string
+ status?: string
+ userName?: string;
+ password?: string;
+ remark?: string | null;
+ userId?: string | undefined
+ editFlag?: boolean | undefined
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/model/WaterTemperatureStore.ets b/entry/src/main/ets/model/WaterTemperatureStore.ets
new file mode 100644
index 0000000..3895796
--- /dev/null
+++ b/entry/src/main/ets/model/WaterTemperatureStore.ets
@@ -0,0 +1,14 @@
+export default interface SeaStatusInterface{
+ temp: number;
+ temp_compare:number;
+ cod:number;
+ cod_compare:number;
+ ph:number;
+ ph_compare:number;
+ residualChlorine:number;
+ residualChlorine_compare:number;
+ conductivity:number;
+ conductivity_compare:number;
+ ammoniaNitrogen:number;
+ ammoniaNitrogen_compare:number;
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/pages/Details.ets b/entry/src/main/ets/pages/Details.ets
new file mode 100644
index 0000000..b93eb53
--- /dev/null
+++ b/entry/src/main/ets/pages/Details.ets
@@ -0,0 +1,78 @@
+import { WaterMonitor } from '../components/WaterMonitor';
+import { DeviceAlarm } from '../components/DeviceAlarm';
+import { AiPredict } from '../components/AiPredict';
+import { ContrastAnalysis } from '../components/ContrastAnalysis';
+import { CarbonCalc } from '../components/CarbonCalc';
+import DeviceListInterface from '../model/DeviceListInterface';
+
+@Entry
+@Component
+struct Details {
+ @State currentIndex: number = 0;
+ @State currentDevice: DeviceListInterface | null = null;
+
+ private navItems: string[] = ['水情检测', '设备报警', 'AI预测', '对比分析', '碳汇计算'];
+
+ aboutToAppear(): void {
+ const device = AppStorage.get('point');
+ if (device) {
+ this.currentDevice = device;
+ }
+ }
+
+ build() {
+ Column() {
+ // 内容区域
+ Column() {
+ if (this.currentIndex === 0) {
+ WaterMonitor()
+ } else if (this.currentIndex === 1) {
+ DeviceAlarm()
+ } else if (this.currentIndex === 2) {
+ AiPredict()
+ } else if (this.currentIndex === 3) {
+ ContrastAnalysis()
+ } else {
+ CarbonCalc()
+ }
+ }
+ .width('100%')
+ .layoutWeight(1)
+
+ // 底部导航 - 科技蓝风格
+ Row() {
+ ForEach(this.navItems, (item: string, index: number) => {
+ Column({ space: 4 }) {
+ Image($rawfile(this.currentIndex === index
+ ? `daohang/ic_tab_0${index + 1}_active.png`
+ : `daohang/ic_tab_0${index + 1}.png`))
+ .width(24)
+ .height(24)
+
+ Text(item)
+ .fontSize(11)
+ .fontColor(this.currentIndex === index ? '#FFFFFF' : 'rgba(255,255,255,0.5)')
+ .fontWeight(this.currentIndex === index ? FontWeight.Bold : FontWeight.Normal)
+ }
+ .width('20%')
+ .justifyContent(FlexAlign.Center)
+ .onClick(() => {
+ this.currentIndex = index;
+ })
+ })
+ }
+ .width('100%')
+ .height(65)
+ .backgroundColor('rgba(13,40,71,0.95)')
+ .borderWidth({ top: 1 })
+ .borderColor('rgba(22,119,255,0.3)')
+ .justifyContent(FlexAlign.SpaceEvenly)
+ }
+ .width('100%')
+ .height('100%')
+ .linearGradient({
+ angle: 180,
+ colors: [['#0a1628', 0], ['#0d2847', 0.5], ['#1677FF', 1]]
+ })
+ }
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets
new file mode 100644
index 0000000..6092b2f
--- /dev/null
+++ b/entry/src/main/ets/pages/Index.ets
@@ -0,0 +1,76 @@
+import { Equipment } from '../components/Equipment';
+import { Add } from '../components/Add';
+import { User } from '../components/user';
+
+// 导航项接口
+interface NavItem {
+ title: string;
+ trueIcon: string;
+ falseIcon: string;
+}
+
+@Entry
+@Component
+struct HomePage {
+ // 当前选中的导航索引,0:设备, 1:添加, 2:我的
+ @State currentIndex: number = 0;
+
+ // 导航项配置
+ private navItems: NavItem[] = [
+ { title: '设备', trueIcon: 'index_true/设备.png', falseIcon: 'index_false/设备.png' },
+ { title: '添加', trueIcon: 'index_true/添加.png', falseIcon: 'index_false/添加.png' },
+ { title: '我的', trueIcon: 'index_true/我的.png', falseIcon: 'index_false/我的.png' }
+ ];
+
+ build() {
+ Column() {
+ // 上方内容区域 - 显示对应页面
+ Column() {
+ if (this.currentIndex === 0) {
+ Equipment()
+ } else if (this.currentIndex === 1) {
+ Add()
+ } else {
+ User()
+ }
+ }
+ .width('100%')
+ .layoutWeight(1)
+
+ // 底部导航栏 - 科技蓝风格
+ Row() {
+ ForEach(this.navItems, (item: NavItem, index: number) => {
+ Column({ space: 5 }) {
+ Image($rawfile(this.currentIndex === index ? item.trueIcon : item.falseIcon))
+ .width(24)
+ .height(24)
+ .fillColor(this.currentIndex === index ? '#00FF88' : 'rgba(255,255,255,0.5)')
+
+ Text(item.title)
+ .fontSize(12)
+ .fontColor(this.currentIndex === index ? '#00FF88' : 'rgba(255,255,255,0.6)')
+ .fontWeight(this.currentIndex === index ? FontWeight.Bold : FontWeight.Normal)
+ }
+ .width('33.33%')
+ .justifyContent(FlexAlign.Center)
+ .onClick(() => {
+ this.currentIndex = index;
+ })
+ })
+ }
+ .width('100%')
+ .height(60)
+ .backgroundColor('rgba(13,40,71,0.95)')
+ .borderWidth({ top: 1 })
+ .borderColor('rgba(22,119,255,0.3)')
+ .justifyContent(FlexAlign.SpaceEvenly)
+
+ }
+ .width('100%')
+ .height('100%')
+ .linearGradient({
+ angle: 180,
+ colors: [['#0a1628', 0], ['#0d2847', 0.5], ['#1677FF', 1]]
+ })
+ }
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/pages/Login.ets b/entry/src/main/ets/pages/Login.ets
new file mode 100644
index 0000000..3db1edb
--- /dev/null
+++ b/entry/src/main/ets/pages/Login.ets
@@ -0,0 +1,356 @@
+import LoginInterface from "../model/LoginInterface";
+import UserInfoInterface from "../model/UserInfoInterface";
+import { login, register } from "../utils/ApiService";
+import { promptAction, router, Router } from '@kit.ArkUI';
+
+
+
+@Entry
+@Component
+struct Login {
+ @State messageOne: string = '鸿蒙+AI水生态全流程管理系统';
+ @State messageTwo: string = 'HarmonyOS·AI·智慧水生态';
+ @State glowOpacity: number = 0.4;
+ @State waveScale: number = 1;
+ @State isLogin: boolean = true; // true: 登录, false: 注册
+ @State userName: string = '';
+ @State password: string = '';
+ @State name: string = '';
+ @State isAgree: boolean = false;
+ @State isLoading: boolean = false; // 加载状态
+ @State errorMsg: string = ''; // 错误信息
+
+ aboutToAppear() {
+ // 光晕呼吸动画
+ setInterval(() => {
+ this.glowOpacity = 0.3 + Math.sin(Date.now() / 1500) * 0.15;
+ }, 50);
+
+ // 波纹缩放动画
+ setInterval(() => {
+ this.waveScale = 1 + Math.sin(Date.now() / 2000) * 0.05;
+ }, 50);
+ }
+
+ // 测试账号配置
+ private testAccount: string = 'test';
+ private testPassword: string = '123456';
+
+ // 登录方法
+ async handleLogin(): Promise {
+ if (!this.userName || !this.password) {
+ promptAction.showToast({ message: '请输入账户和密码' });
+ return;
+ }
+
+ // 测试账号直接登录(无需网络请求)
+ if (this.userName === this.testAccount && this.password === this.testPassword) {
+ promptAction.showToast({ message: '测试账号登录成功' });
+ AppStorage.setOrCreate('token', 'test_token_12345');
+ router.pushUrl({ url: 'pages/Index' });
+ return;
+ }
+
+ this.isLoading = true;
+ const loginData: LoginInterface = {
+ username: this.userName,
+ password: this.password
+ };
+
+ try {
+ const response = await login(loginData);
+ if (response.code === 200) {
+ promptAction.showToast({ message: '登录成功' });
+ // 保存token到AppStorage
+ AppStorage.setOrCreate('token', response.data);
+ // 登录成功后跳转到主页
+ router.pushUrl({ url: 'pages/Index' });
+ } else {
+ promptAction.showToast({ message: response.message || '登录失败' });
+ }
+ } catch (error) {
+ promptAction.showToast({ message: '网络请求失败,请检查网络连接' });
+ console.error('登录错误: ' + JSON.stringify(error));
+ } finally {
+ this.isLoading = false;
+ }
+ }
+
+ // 注册方法
+ async handleRegister(): Promise {
+ if (!this.userName || !this.password || !this.name) {
+ promptAction.showToast({ message: '请填写完整信息' });
+ return;
+ }
+
+ this.isLoading = true;
+ const registerData: UserInfoInterface = {
+ phonenumber: this.userName,
+ password: this.password,
+ nickName: this.name
+ };
+
+ try {
+ const response = await register(registerData);
+
+ if (response.code === 200) {
+ promptAction.showToast({ message: '注册成功,请登录' });
+ this.isLogin = true; // 切换到登录
+ this.name = ''; // 清空姓名
+ } else {
+ promptAction.showToast({ message: response.message || '注册失败' });
+ }
+ } catch (error) {
+ promptAction.showToast({ message: '网络请求失败,请检查网络连接' });
+ console.error('注册错误: ' + JSON.stringify(error));
+ } finally {
+ this.isLoading = false;
+ }
+ }
+
+ build() {
+ Stack({ alignContent: Alignment.Center }) {
+ // 主渐变背景 - 铺满全屏
+ Column()
+ .width('100%')
+ .height('100%')
+ .linearGradient({
+ angle: 180,
+ colors: [
+ ['#001E38', 0],
+ ['#0958D9', 0.5],
+ ['#1677FF', 0.8],
+ ['#4096ff', 1]
+ ]
+ })
+
+ // 柔和光晕 - 左上
+ Column()
+ .width(350)
+ .height(350)
+ .borderRadius(175)
+ .linearGradient({
+ angle: 135,
+ colors: [
+ ['rgba(64, 150, 255, ' + this.glowOpacity + ')', 0],
+ ['rgba(64, 150, 255, 0)', 0.7]
+ ]
+ })
+ .position({ x: -100, y: -50 })
+ .blur(100)
+
+ // 柔和光晕 - 右下
+ Column()
+ .width(300)
+ .height(300)
+ .borderRadius(150)
+ .linearGradient({
+ angle: 315,
+ colors: [
+ ['rgba(22, 119, 255, ' + (this.glowOpacity * 0.8) + ')', 0],
+ ['rgba(22, 119, 255, 0)', 0.6]
+ ]
+ })
+ .position({ x: '70%', y: '60%' })
+ .blur(80)
+
+ // 淡淡的波纹圆环
+ ForEach([1, 2], (item: number) => {
+ Column()
+ .width(220 + item * 60)
+ .height(220 + item * 60)
+ .borderRadius(110 + item * 30)
+ .borderWidth(1)
+ .borderColor('rgba(255, 255, 255, ' + (0.1 - item * 0.03) + ')')
+ .backgroundColor('transparent')
+ .scale({ x: this.waveScale, y: this.waveScale })
+ })
+
+ // 主内容 - 使用Column布局,标题在上,登录卡片在下
+ Column() {
+ // 标题区域 - 放在上方
+ Column({ space: 8 }) {
+ Text(this.messageOne)
+ .fontSize(25)
+ .fontWeight(500)
+ .fontWeight(FontWeight.Bold)
+ .fontColor(Color.White)
+ .textAlign(TextAlign.Center)
+ .textShadow({
+ radius: 20,
+ color: 'rgba(64, 150, 255, 0.5)',
+ offsetX: 0,
+ offsetY: 0
+ })
+
+ Text(this.messageTwo)
+ .fontSize(13)
+ .fontColor('rgba(255, 255, 255, 0.75)')
+ }
+ .width('100%')
+ .padding({ top: 80, bottom: 30 })
+
+ // 登录/注册卡片
+ Column({ space: 15 }) {
+ // 登录/注册切换
+ Row({ space: 50 }) {
+ Text("登录")
+ .fontSize(18)
+ .fontColor(this.isLogin ? '#FFFFFF' : 'rgba(255, 255, 255, 0.5)')
+ .fontWeight(this.isLogin ? FontWeight.Bold : FontWeight.Normal)
+ .onClick(() => {
+ this.isLogin = true;
+ })
+ .fontWeight(800)
+
+ Text("注册")
+ .fontSize(18)
+ .fontColor(!this.isLogin ? '#FFFFFF' : 'rgba(255, 255, 255, 0.5)')
+ .fontWeight(!this.isLogin ? FontWeight.Bold : FontWeight.Normal)
+ .onClick(() => {
+ this.isLogin = false;
+ })
+ .fontWeight(800)
+ }
+ .margin({ top: 5, bottom: 10 })
+
+ // 输入框区域
+ Column({ space: 15 }) {
+ // 账户输入框
+ Row(){
+ Image($rawfile('Login/用户.png'))
+ .width(15)
+ .height(15)
+ .margin({left:20})
+ TextInput({ placeholder: '请输入账户', text: this.userName })
+ .placeholderColor("#FFFFFF")
+ .placeholderFont({ size:12 })
+ .onChange((value: string) => {
+ this.userName = value;
+ })
+ .width('85%')
+ .height(45)
+ .borderRadius(8)
+ .fontColor('#FFFFFF')
+ .padding({ left: 15, right: 15 })
+ .backgroundColor(Color.Transparent)
+ }
+ .backgroundColor('rgba(255, 255, 255, 0.12)')
+ .width(300)
+ .borderRadius(10)
+
+ // 密码输入框
+ Row(){
+ Image($rawfile('Login/锁.png'))
+ .width(15)
+ .height(15)
+ .margin({left:20})
+ TextInput({ placeholder: '请输入密码', text: this.password })
+ .placeholderColor("#FFFFFF")
+ .placeholderFont({ size:12 })
+ .onChange((value: string) => {
+ this.password = value;
+ })
+ .width('85%')
+ .height(45)
+ .borderRadius(8)
+ .fontColor('#FFFFFF')
+ .type(InputType.Password)
+ .padding({ left: 15, right: 15 })
+ .backgroundColor(Color.Transparent)
+ }
+ .backgroundColor('rgba(255, 255, 255, 0.12)')
+ .width(300)
+ .borderRadius(10)
+
+ // 注册时显示姓名输入框
+ if (!this.isLogin) {
+ Row(){
+ Image($rawfile('Login/电话.png'))
+ .width(15)
+ .height(15)
+ .margin({left:20})
+ TextInput({ placeholder: '请输入电话', text: this.name })
+ .placeholderColor("#FFFFFF")
+ .placeholderFont({ size:12 })
+ .onChange((value: string) => {
+ this.name = value;
+ })
+ .width('100%')
+ .height(45)
+ .borderRadius(8)
+ .fontColor('#FFFFFF')
+ .padding({ left: 15, right: 15 })
+ .backgroundColor(Color.Transparent)
+ }
+ .backgroundColor('rgba(255, 255, 255, 0.12)')
+ .width(300)
+ .borderRadius(10)
+ }
+ }
+ .width('100%')
+
+ // 协议同意
+ Row({ space: 8 }) {
+ Checkbox()
+ .select(this.isAgree)
+ .selectedColor('#4096ff')
+ .onChange((isChecked: boolean) => {
+ this.isAgree = isChecked;
+ })
+ .width(15)
+ .height(15)
+ Text() {
+ Span('我已阅读并同意')
+ .fontColor('rgba(255, 255, 255, 0.7)')
+ .fontSize(12)
+ Span('《用户协议》')
+ .fontColor('#FFFFFF')
+ .fontSize(12)
+ Span('和')
+ .fontColor('rgba(255, 255, 255, 0.7)')
+ .fontSize(12)
+ Span('《隐私政策》')
+ .fontColor('#FFFFFF')
+ .fontSize(12)
+ }
+ }
+ .width('100%')
+ .justifyContent(FlexAlign.Center)
+ .margin({ top: 10 , left:-30})
+
+ // 登录/注册按钮
+ Button(this.isLoading ? '处理中...' : (this.isLogin ? '登录' : '注册'))
+ .width('90%')
+ .height(45)
+ .fontSize(16)
+ .fontColor('#1677FF')
+ .fontWeight(FontWeight.Bold)
+ .backgroundColor('#FFFFFF')
+ .borderRadius(15)
+ .enabled(this.isAgree && !this.isLoading)
+ .margin({ top: 15 })
+ .onClick(() => {
+ if (this.isLogin) {
+ this.handleLogin();
+ } else {
+ this.handleRegister();
+ }
+ })
+ }
+ .width('100%')
+ .padding(25)
+ .borderRadius(16)
+ .margin({top:80})
+
+ }
+ .width('100%')
+ .height('100%')
+ .justifyContent(FlexAlign.Start)
+
+ }
+ .width('100%')
+ .height('100%')
+ .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
+ }
+}
diff --git a/entry/src/main/ets/utils/ApiService.ets b/entry/src/main/ets/utils/ApiService.ets
new file mode 100644
index 0000000..d498d87
--- /dev/null
+++ b/entry/src/main/ets/utils/ApiService.ets
@@ -0,0 +1,77 @@
+import { iResponseModel, RequestUtil } from "./RequestUtil";
+
+import LoginInterface from "../model/LoginInterface";
+import UserInfoInterface from "../model/UserInfoInterface";
+import DeviceListInterface from "../model/DeviceListInterface";
+import CarbonInfoInterface from "../model/CarbonInfoInterface";
+import StatisticalInterface from "../model/StatisticalInterface";
+import SeaRangeInterface from "../model/SeaRangeInterface";
+import EutrophicationItemInterface from "../model/EutrophicationItemInterface";
+import AlarmItemInterface from "../model/AlarmItemInterface";
+import AlarmStatisticsInterface from "../model/AlarmStatisticsInterface";
+
+//登录
+export function login(cls: LoginInterface): Promise> {
+ return RequestUtil.post("/app/common/login", cls, false);
+}
+
+//注册
+export function register(cls: UserInfoInterface): Promise> {
+ return RequestUtil.post("/app/common/register", cls, false);
+}
+
+//查询长江设备列表-获取四个监测点的设备
+export function getDeviceList(): Promise> {
+ return RequestUtil.get("/sea/device/list");
+}
+
+//数据监测-查询长江最近7日数据->折线图(Ai的预测服务也是这个接口)
+export function getSeaEutrophication(): Promise> {
+ return RequestUtil.get("/sea/day/getLimit7?code=" + AppStorage.get("point")?.code);
+}
+
+//AI预测-ai问答
+export const chatUrl: string = "/v1/chat-messages";
+
+//对比分析-> 通过参数类型查询长江按月统计
+export function getContrast(paramType: number): Promise> {
+ return RequestUtil.get("/sea/month/monthDetail?paramType=" + paramType + "&deviceCode=" +
+ AppStorage.get("point")?.code);
+}
+
+//最新异常列表
+export function getAlarmList(): Promise> {
+ return RequestUtil.get("/sea/alarm/list?code=" + AppStorage.get("point")?.code);
+}
+
+//最新异常列表
+export function getAlarmStatistics(): Promise> {
+ return RequestUtil.get("/sea/alarm/getAlarmStatistics?code=" + AppStorage.get("point")?.code);
+}
+
+//异常趋势
+export function getAlarmTrend(): Promise> {
+ return RequestUtil.get("/sea/alarm/getAlarmTrend?code=" + AppStorage.get("point")?.code);
+}
+
+//获取长江数据区间范围值详细信息
+export function getSeaRange(): Promise> {
+ return RequestUtil.get("/sea/range/1");
+}
+
+//修改长江数据区间范围值详细信息
+export function editSeaRange(cls: SeaRangeInterface): Promise> {
+ cls.id = 1;
+ return RequestUtil.put("/sea/range", cls);
+}
+
+//碳汇详情
+export function getCarbonInfo(): Promise> {
+ let date = new Date().getFullYear() + "年" + new Date().getMonth().toString().padStart(2, "0");
+ return RequestUtil.get(`/sea/month/query?deviceCode=${AppStorage.get("point")?.code}&remark=${encodeURIComponent(date)}`);
+}
+
+//固碳6个月
+export function getCarbonList(): Promise> {
+ return RequestUtil.get(`/sea/month/sixMonthStatistics?deviceCode=${AppStorage.get("point")?.code}`);
+}
\ No newline at end of file
diff --git a/entry/src/main/ets/utils/ApiService.ts.ets b/entry/src/main/ets/utils/ApiService.ts.ets
new file mode 100644
index 0000000..1a848c9
--- /dev/null
+++ b/entry/src/main/ets/utils/ApiService.ts.ets
@@ -0,0 +1,87 @@
+import { iResponseModel, RequestUtil } from "./RequestUtil";
+
+import LoginInterface from "../model/LoginInterface";
+import UserInfoInterface from "../model/UserInfoInterface";
+import DeviceListInterface from "../model/DeviceListInterface";
+import CarbonInfoInterface from "../model/CarbonInfoInterface";
+import StatisticalInterface from "../model/StatisticalInterface";
+import SeaRangeInterface from "../model/SeaRangeInterface";
+import EutrophicationItemInterface from "../model/EutrophicationItemInterface";
+import AlarmItemInterface from "../model/Alarmltemlnterface";
+import AlarmStatisticsInterface from "../model/AlarmStatisticsInterface";
+
+// 登录
+export function login(cls: LoginInterface): Promise> {
+ return RequestUtil.post("/app/common/login", cls, false);
+}
+
+// 注册
+export function register(cls: UserInfoInterface | LoginInterface): Promise> {
+ return RequestUtil.post("/app/common/register", cls, false);
+}
+
+// 查询长江设备列表-获取四个监测点的设备
+export function getDeviceList(): Promise> {
+ return RequestUtil.get("/sea/device/list");
+}
+
+// 数据监测-查询长江最近7日数据
+export function getSeaEutrophication(): Promise> {
+ const code = AppStorage.get("point")?.code ?? "";
+ return RequestUtil.get("/sea/day/getLimit7?code=" + code);
+}
+
+// AI预测-ai问答
+export const chatUrl: string = "/v1/chat-messages";
+
+// 对比分析 -> 通过参数类型查询长江按月统计
+export function getContrast(paramType: number): Promise> {
+ const code = AppStorage.get("point")?.code ?? "";
+ if (!code) {
+ // 这里直接抛错,避免发 deviceCode=undefined 的脏请求
+ return Promise.reject(new Error("deviceCode为空:请先在AppStorage写入point.code"));
+ }
+ return RequestUtil.get(`/sea/month/monthDetail?paramType=${paramType}&deviceCode=${code}`);
+}
+
+// 最新异常列表
+export function getAlarmList(): Promise> {
+ return RequestUtil.get("/sea/alarm/list?code=" + (AppStorage.get("point")?.code ?? ""));
+}
+
+// 最新异常统计
+export function getAlarmStatistics(): Promise> {
+ return RequestUtil.get("/sea/alarm/getAlarmStatistics?code=" + (AppStorage.get("point")?.code
+ ?? ""));
+}
+
+// 异常趋势
+export function getAlarmTrend(): Promise> {
+ return RequestUtil.get("/sea/alarm/getAlarmTrend?code=" + (AppStorage.get("point")?.code ??
+ ""));
+}
+
+// 获取长江数据区间范围值详细信息
+export function getSeaRange(): Promise> {
+ return RequestUtil.get("/sea/range/1");
+}
+
+// 修改长江数据区间范围值详细信息
+export function editSeaRange(cls: SeaRangeInterface): Promise> {
+ cls.id = 1;
+ return RequestUtil.put("/sea/range", cls);
+}
+
+// 碳汇详情
+export function getCarbonInfo(): Promise> {
+ const date = new Date().getFullYear() + "年" + new Date().getMonth().toString().padStart(2, "0");
+ const code = AppStorage.get("point")?.code ?? "";
+ return RequestUtil.get(`/sea/month/query?deviceCode=${code}&remark=${encodeURIComponent(date)}`);
+}
+
+// 固碳6个月
+export function getCarbonList(): Promise> {
+ const code = AppStorage.get("point")?.code ?? "";
+ return RequestUtil.get(`/sea/month/sixMonthStatistics?deviceCode=${code}`);
+}
+
diff --git a/entry/src/main/ets/utils/Config.ets b/entry/src/main/ets/utils/Config.ets
new file mode 100644
index 0000000..21b1c24
--- /dev/null
+++ b/entry/src/main/ets/utils/Config.ets
@@ -0,0 +1,23 @@
+/**
+ * 配置文件 - 存放服务器IP、端口等变量参数
+ */
+export class Config {
+ // 后端服务器IP地址
+ static readonly BASE_URL: string = 'http://192.168.31.100:8080';
+
+ // ==================== AI服务配置 ====================
+ // 主API(Dify格式)
+ static readonly AI_PRIMARY_URL: string = 'http://192.168.31.26';
+ static readonly AI_PRIMARY_PATH: string = '/v1';
+ static readonly AI_PRIMARY_KEY: string = "app-druPEUrX7Qw7kWBv1JUfaG4q"
+ // 备用API(OpenAI格式)- 当主API失败时自动切换
+ static readonly AI_BACKUP_URL: string = 'https://ark.cn-beijing.volces.com';
+ static readonly AI_BACKUP_PATH: string = '/api/v3/chat/completions';
+ static readonly AI_BACKUP_KEY: string = 'ark-7bdaff26-adab-4332-a1f5-f97fb03e7d56-aa3a1'; // 填写你的OpenAI密钥
+ static readonly AI_BACKUP_MODEL: string = 'doubao-seed-2-0-code-preview-260215'; // 使用的模型
+
+ // 请求超时时间(毫秒)
+ static readonly TIMEOUT: number = 30000;
+}
+
+export default Config;
\ No newline at end of file
diff --git a/entry/src/main/ets/utils/MqttService.ets b/entry/src/main/ets/utils/MqttService.ets
new file mode 100644
index 0000000..8bfa04c
--- /dev/null
+++ b/entry/src/main/ets/utils/MqttService.ets
@@ -0,0 +1,309 @@
+/**
+ * MQTT服务 - ArkTS版本
+ * 使用 @ohos/mqtt 原生库实现MQTT连接
+ */
+import {
+ MqttAsync,
+ MqttClient,
+ MqttMessage,
+ MqttQos,
+ MqttResponse,
+ MqttSubscribeOptions
+} from '@ohos/mqtt';
+import emitter from '@ohos.events.emitter';
+
+// MQTT 事件ID (字符串形式)
+const MQTT_EVENT_ID: string = 'mqtt_water_quality';
+
+// 事件数据接口
+interface PayloadData {
+ payload: string
+}
+
+// 简化的Emitter工具类(替代@pura/harmony-utils的EmitterUtil)
+export class SimpleEmitterUtil {
+ private static storedCallback: ((payload: string) => void) | undefined = undefined;
+ private static emitterCallback: ((eventData: emitter.EventData) => void) | undefined = undefined;
+
+ // 发送事件
+ static emit(data: string): void {
+ const payloadData: PayloadData = { payload: data };
+ const eventData: emitter.EventData = { data: payloadData };
+ emitter.emit(MQTT_EVENT_ID, eventData);
+ }
+
+ // 订阅事件
+ static on(callback: (payload: string) => void): void {
+ SimpleEmitterUtil.storedCallback = callback;
+ // 创建符合 emitter.EventData 签名的回调
+ const emitterCallback = (eventData: emitter.EventData): void => {
+ if (eventData && eventData.data) {
+ const payloadData = eventData.data as PayloadData;
+ if (payloadData.payload) {
+ callback(payloadData.payload);
+ }
+ }
+ };
+ SimpleEmitterUtil.emitterCallback = emitterCallback;
+ emitter.on(MQTT_EVENT_ID, emitterCallback);
+ }
+
+ // 取消订阅
+ static off(): void {
+ if (SimpleEmitterUtil.emitterCallback) {
+ emitter.off(MQTT_EVENT_ID, SimpleEmitterUtil.emitterCallback);
+ SimpleEmitterUtil.storedCallback = undefined;
+ SimpleEmitterUtil.emitterCallback = undefined;
+ }
+ }
+}
+
+// MQTT 事件ID导出(兼容旧代码使用数字)
+export const MQTT_EVENT_ID_NUM: number = 1001;
+
+// 水质数据接口
+export interface WaterQualityData {
+ temperature: number;
+ ph: number;
+ conductivity: number;
+ cod: number;
+ ammonia: number;
+ chlorine: number;
+ timestamp: number;
+}
+
+// MQTT配置接口
+interface MqttConfig {
+ url: string;
+ clientId: string;
+ userName: string;
+ password: string;
+ topic: string;
+ qos: MqttQos;
+}
+
+export class MqttService {
+ private static instance: MqttService;
+ private mqttClient: MqttClient | null = null;
+ private config: MqttConfig;
+ private isConnectedFlag: boolean = false;
+
+ constructor() {
+ this.config = {
+ url: 'tcp://192.168.31.100:1883',
+ clientId: 'sea-lwq',
+ userName: 'admin',
+ password: 'admin',
+ topic: 'sea_status',
+ qos: 0
+ };
+ }
+
+ public static getInstance(): MqttService {
+ if (!MqttService.instance) {
+ MqttService.instance = new MqttService();
+ }
+ return MqttService.instance;
+ }
+
+ // 设置配置
+ setConfig(url: string, topic: string): void {
+ this.config.url = url;
+ this.config.topic = topic;
+ console.info('MQTT配置: url=' + url + ', topic=' + topic +
+ ', clientId=' + this.config.clientId +
+ ', userName=' + this.config.userName);
+ }
+
+ // 初始化连接
+ async connect(): Promise {
+ try {
+ const status = await this.getMqttConnectStatus();
+ if (status) {
+ console.info('MQTT已经连接,跳过重复连接');
+ return;
+ }
+
+ this.createMqttClient();
+ await this.connectMqtt();
+ await this.subscribe();
+ this.Arrived();
+
+ console.info('MQTT初始化完成');
+ } catch (err) {
+ console.error('MQTT初始化失败: ' + JSON.stringify(err));
+ }
+ }
+
+ // 获取连接状态
+ private async getMqttConnectStatus(): Promise {
+ if (this.mqttClient) {
+ const result = await this.mqttClient.isConnected();
+ return result === true;
+ }
+ return false;
+ }
+
+ // 创建mqtt实例
+ createMqttClient(): void {
+ this.mqttClient = MqttAsync.createMqtt({
+ url: this.config.url,
+ clientId: this.config.clientId,
+ persistenceType: 1
+ });
+ console.info('MQTT客户端实例已创建: url=' + this.config.url + ', clientId=' + this.config.clientId);
+ }
+
+ // 连接服务器
+ async connectMqtt(): Promise {
+ if (!this.mqttClient) {
+ console.error('MQTT客户端未创建');
+ return;
+ }
+
+ console.info('正在连接MQTT服务器: userName=' + this.config.userName);
+
+ await this.mqttClient.connect({
+ userName: this.config.userName,
+ password: this.config.password,
+ connectTimeout: 30,
+ automaticReconnect: true,
+ MQTTVersion: 3
+ }).then((res: MqttResponse) => {
+ this.isConnectedFlag = true;
+ console.info('MQTT服务器连接成功:' + JSON.stringify(res.message));
+ }).catch((err: Error) => {
+ this.isConnectedFlag = false;
+ console.error('MQTT服务器连接失败:' + JSON.stringify(err));
+ });
+ }
+
+ // 订阅主题
+ async subscribe(): Promise {
+ if (!this.mqttClient) {
+ return;
+ }
+
+ const subscribeOption: MqttSubscribeOptions = {
+ topic: this.config.topic,
+ qos: this.config.qos
+ };
+
+ console.info('正在订阅主题: ' + this.config.topic);
+
+ await this.mqttClient.subscribe(subscribeOption).then((res: MqttResponse) => {
+ console.info('MQTT订阅主题成功:' + JSON.stringify(res.message));
+ }).catch((err: Error) => {
+ console.error('MQTT订阅主题失败:' + JSON.stringify(err));
+ });
+ }
+
+ // 监听消息到达 - 使用EmitterUtil发送到事件总线
+ Arrived(): void {
+ if (!this.mqttClient) {
+ return;
+ }
+
+ console.info('开始监听MQTT消息...');
+
+ this.mqttClient.messageArrived((err: Error, data: MqttMessage) => {
+ if (err) {
+ console.error('MQTT消息接收错误: ' + JSON.stringify(err));
+ } else {
+ const payloadStr: string = data.payload as string;
+ console.info('收到MQTT消息: ' + payloadStr);
+ // 通过SimpleEmitterUtil发送到事件总线
+ SimpleEmitterUtil.emit(payloadStr);
+ }
+ });
+ }
+
+ // 发布消息
+ async publish(message: string, topic?: string): Promise {
+ if (!this.mqttClient) {
+ console.error('MQTT未连接,无法发送消息');
+ return;
+ }
+
+ await this.mqttClient.publish({
+ topic: topic || this.config.topic,
+ qos: this.config.qos,
+ payload: message
+ }).then((data: MqttResponse) => {
+ console.info('MQTT消息发送成功:' + JSON.stringify(data));
+ }).catch((err: Error) => {
+ console.error('MQTT消息发送失败:' + JSON.stringify(err));
+ });
+ }
+
+ // 断开连接
+ async disconnect(): Promise {
+ if (this.mqttClient) {
+ try {
+ await this.mqttClient.destroy();
+ console.info('MQTT连接已断开');
+ } catch (err) {
+ console.error('MQTT断开失败: ' + JSON.stringify(err));
+ }
+ this.mqttClient = null;
+ }
+ this.isConnectedFlag = false;
+ }
+
+ // 销毁客户端
+ async destroy(): Promise {
+ if (!this.mqttClient) {
+ return;
+ }
+ await this.mqttClient.destroy().then((data: boolean) => {
+ if (data) {
+ console.info('MQTT实例销毁成功');
+ SimpleEmitterUtil.off();
+ } else {
+ console.error('MQTT实例销毁失败');
+ }
+ });
+ this.mqttClient = null;
+ this.isConnectedFlag = false;
+ }
+
+ // 解析水质数据
+ // 后端: {"temp":21,"cod":44,"ph":0,"residualChlorine":0,"conductivity":0,"ammoniaNitrogen":0,...}
+ parseWaterQualityData(rawMessage: string): WaterQualityData {
+ try {
+ const raw = JSON.parse(rawMessage) as Record;
+ const data: WaterQualityData = {
+ temperature: raw['temp'] ?? 0,
+ ph: raw['ph'] ?? 0,
+ conductivity: raw['conductivity'] ?? 0,
+ cod: raw['cod'] ?? 0,
+ ammonia: raw['ammoniaNitrogen'] ?? 0,
+ chlorine: raw['residualChlorine'] ?? 0,
+ timestamp: Date.now()
+ };
+ console.info('解析后水质数据: 温度=' + data.temperature +
+ ', pH=' + data.ph +
+ ', 电导率=' + data.conductivity +
+ ', COD=' + data.cod +
+ ', 氨氮=' + data.ammonia +
+ ', 余氯=' + data.chlorine);
+ return data;
+ } catch (err) {
+ console.error('水质数据解析失败: ' + rawMessage);
+ return {
+ temperature: 0, ph: 0, conductivity: 0,
+ cod: 0, ammonia: 0, chlorine: 0, timestamp: Date.now()
+ };
+ }
+ }
+
+ getConnectionStatus(): boolean {
+ return this.isConnectedFlag;
+ }
+
+ getConfig(): MqttConfig {
+ return this.config;
+ }
+}
+
+export default MqttService;
diff --git a/entry/src/main/ets/utils/RequestUtil.ets b/entry/src/main/ets/utils/RequestUtil.ets
new file mode 100644
index 0000000..9706dbe
--- /dev/null
+++ b/entry/src/main/ets/utils/RequestUtil.ets
@@ -0,0 +1,185 @@
+/**
+ * HTTP请求工具类
+ * 使用 @kit.NetworkKit 进行网络请求
+ */
+import { http } from '@kit.NetworkKit';
+import { BusinessError } from '@kit.BasicServicesKit';
+import Config from './Config';
+
+// 响应数据接口
+export interface iResponseModel {
+ code: number;
+ message: string;
+ data: T;
+}
+
+// HTTP请求头接口
+interface HttpHeader {
+ 'Content-Type': string;
+ 'Accept': string;
+ 'Authorization'?: string;
+}
+
+// HTTP请求选项接口
+interface HttpOptions {
+ method: http.RequestMethod;
+ header: HttpHeader;
+ extraData?: Object;
+ connectTimeout: number;
+ readTimeout: number;
+}
+
+export class RequestUtil {
+ /**
+ * GET请求
+ */
+ static get(url: string): Promise> {
+ return new Promise((resolve, reject) => {
+ let httpRequest = http.createHttp();
+
+ const header: HttpHeader = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+ };
+
+ const options: HttpOptions = {
+ method: http.RequestMethod.GET,
+ header: header,
+ connectTimeout: Config.TIMEOUT,
+ readTimeout: Config.TIMEOUT
+ };
+
+ httpRequest.request(
+ Config.BASE_URL + url,
+ options,
+ (err: BusinessError, data: http.HttpResponse) => {
+ if (!err) {
+ try {
+ let result: iResponseModel = JSON.parse(data.result as string);
+ resolve(result);
+ } catch (e) {
+ reject(new Error('JSON解析失败'));
+ }
+ } else {
+ reject(new Error(err.message));
+ }
+ httpRequest.destroy();
+ }
+ );
+ });
+ }
+
+ /**
+ * GET请求(带query参数)
+ * @param url 请求地址,例如 /monthDetail
+ * @param params 查询参数,例如 { paramType: 'WATER_TEMPERATURE', deviceCode: 'D001' }
+ */
+ static getWithParams(url: string, params: Record): Promise>
+ {
+ const query = Object.keys(params)
+ .map((key: string) => `${encodeURIComponent(key)}=${encodeURIComponent(String(params[key]))}`)
+ .join('&');
+
+ const fullUrl = query.length > 0 ? `${url}?${query}` : url;
+ return RequestUtil.get(fullUrl);
+ }
+
+ /**
+ * POST请求
+ * @param url 请求地址
+ * @param cls 请求体对象
+ * @param needToken 是否需要Token
+ */
+ static post(url: string, cls: Object, needToken: boolean): Promise> {
+ return new Promise((resolve, reject) => {
+ let httpRequest = http.createHttp();
+
+ let header: HttpHeader;
+ if (needToken) {
+ const token = AppStorage.get('token');
+ header = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'Authorization': 'Bearer ' + token
+ };
+ } else {
+ header = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+ };
+ }
+
+ const options: HttpOptions = {
+ method: http.RequestMethod.POST,
+ header: header,
+ extraData: cls,
+ connectTimeout: Config.TIMEOUT,
+ readTimeout: Config.TIMEOUT
+ };
+
+ httpRequest.request(
+ Config.BASE_URL + url,
+ options,
+ (err: BusinessError, data: http.HttpResponse) => {
+ if (!err) {
+ try {
+ let result: iResponseModel = JSON.parse(data.result as string);
+ resolve(result);
+ } catch (e) {
+ reject(new Error('JSON解析失败'));
+ }
+ } else {
+ reject(new Error(err.message));
+ }
+ httpRequest.destroy();
+ }
+ );
+ });
+ }
+
+ /**
+ * PUT请求
+ * @param url 请求地址
+ * @param cls 请求体对象
+ */
+ static put(url: string, cls: Object): Promise> {
+ return new Promise((resolve, reject) => {
+ let httpRequest = http.createHttp();
+
+ const token = AppStorage.get('token');
+ const header: HttpHeader = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'Authorization': 'Bearer ' + token
+ };
+
+ const options: HttpOptions = {
+ method: http.RequestMethod.PUT,
+ header: header,
+ extraData: cls,
+ connectTimeout: Config.TIMEOUT,
+ readTimeout: Config.TIMEOUT
+ };
+
+ httpRequest.request(
+ Config.BASE_URL + url,
+ options,
+ (err: BusinessError, data: http.HttpResponse) => {
+ if (!err) {
+ try {
+ let result: iResponseModel = JSON.parse(data.result as string);
+ resolve(result);
+ } catch (e) {
+ reject(new Error('JSON解析失败'));
+ }
+ } else {
+ reject(new Error(err.message));
+ }
+ httpRequest.destroy();
+ }
+ );
+ });
+ }
+}
+
+export default RequestUtil;
diff --git a/entry/src/main/module.json5 b/entry/src/main/module.json5
new file mode 100644
index 0000000..2298e5a
--- /dev/null
+++ b/entry/src/main/module.json5
@@ -0,0 +1,46 @@
+{
+ "module": {
+ "name": "entry",
+ "type": "entry",
+ "description": "$string:module_desc",
+ "mainElement": "EntryAbility",
+ "deviceTypes": [
+ "phone"
+ ],
+ "deliveryWithInstall": true,
+ "installationFree": false,
+ "pages": "$profile:main_pages",
+ "abilities": [
+ {
+ "name": "EntryAbility",
+ "srcEntry": "./ets/entryability/EntryAbility.ets",
+ "description": "$string:EntryAbility_desc",
+ "icon": "$media:layered_image",
+ "label": "$string:EntryAbility_label",
+ "startWindowIcon": "$media:startIcon",
+ "startWindowBackground": "$color:start_window_background",
+ "exported": true,
+ "skills": [
+ {
+ "entities": [
+ "entity.system.home"
+ ],
+ "actions": [
+ "ohos.want.action.home"
+ ]
+ }
+ ]
+ }
+ ],
+ "requestPermissions": [
+ {
+ "name": "ohos.permission.INTERNET",
+ "reason": "$string:permission_internet_reason",
+ "usedScene": {
+ "abilities": ["EntryAbility"],
+ "when": "inuse"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/entry/src/main/resources/base/element/color.json b/entry/src/main/resources/base/element/color.json
new file mode 100644
index 0000000..3c71296
--- /dev/null
+++ b/entry/src/main/resources/base/element/color.json
@@ -0,0 +1,8 @@
+{
+ "color": [
+ {
+ "name": "start_window_background",
+ "value": "#FFFFFF"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/entry/src/main/resources/base/element/float.json b/entry/src/main/resources/base/element/float.json
new file mode 100644
index 0000000..33ea223
--- /dev/null
+++ b/entry/src/main/resources/base/element/float.json
@@ -0,0 +1,8 @@
+{
+ "float": [
+ {
+ "name": "page_text_font_size",
+ "value": "50fp"
+ }
+ ]
+}
diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json
new file mode 100644
index 0000000..1b1b6e0
--- /dev/null
+++ b/entry/src/main/resources/base/element/string.json
@@ -0,0 +1,20 @@
+{
+ "string": [
+ {
+ "name": "module_desc",
+ "value": "module description"
+ },
+ {
+ "name": "EntryAbility_desc",
+ "value": "description"
+ },
+ {
+ "name": "EntryAbility_label",
+ "value": "label"
+ },
+ {
+ "name": "permission_internet_reason",
+ "value": "用于连接MQTT服务器获取实时水质数据"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/entry/src/main/resources/base/media/background.png b/entry/src/main/resources/base/media/background.png
new file mode 100644
index 0000000..923f2b3
Binary files /dev/null and b/entry/src/main/resources/base/media/background.png differ
diff --git a/entry/src/main/resources/base/media/foreground.png b/entry/src/main/resources/base/media/foreground.png
new file mode 100644
index 0000000..97014d3
Binary files /dev/null and b/entry/src/main/resources/base/media/foreground.png differ
diff --git a/entry/src/main/resources/base/media/layered_image.json b/entry/src/main/resources/base/media/layered_image.json
new file mode 100644
index 0000000..fb49920
--- /dev/null
+++ b/entry/src/main/resources/base/media/layered_image.json
@@ -0,0 +1,7 @@
+{
+ "layered-image":
+ {
+ "background" : "$media:background",
+ "foreground" : "$media:foreground"
+ }
+}
\ No newline at end of file
diff --git a/entry/src/main/resources/base/media/startIcon.png b/entry/src/main/resources/base/media/startIcon.png
new file mode 100644
index 0000000..205ad8b
Binary files /dev/null and b/entry/src/main/resources/base/media/startIcon.png differ
diff --git a/entry/src/main/resources/base/profile/main_pages.json b/entry/src/main/resources/base/profile/main_pages.json
new file mode 100644
index 0000000..edd7c6f
--- /dev/null
+++ b/entry/src/main/resources/base/profile/main_pages.json
@@ -0,0 +1,7 @@
+{
+ "src": [
+ "pages/Index",
+ "pages/Login",
+ "pages/Details"
+ ]
+}
diff --git a/entry/src/main/resources/rawfile/Equipment/右括号.png b/entry/src/main/resources/rawfile/Equipment/右括号.png
new file mode 100644
index 0000000..c65d093
Binary files /dev/null and b/entry/src/main/resources/rawfile/Equipment/右括号.png differ
diff --git a/entry/src/main/resources/rawfile/Equipment/设备管理.png b/entry/src/main/resources/rawfile/Equipment/设备管理.png
new file mode 100644
index 0000000..de58bfd
Binary files /dev/null and b/entry/src/main/resources/rawfile/Equipment/设备管理.png differ
diff --git a/entry/src/main/resources/rawfile/Login/用户.png b/entry/src/main/resources/rawfile/Login/用户.png
new file mode 100644
index 0000000..c15635c
Binary files /dev/null and b/entry/src/main/resources/rawfile/Login/用户.png differ
diff --git a/entry/src/main/resources/rawfile/Login/电话.png b/entry/src/main/resources/rawfile/Login/电话.png
new file mode 100644
index 0000000..8c28565
Binary files /dev/null and b/entry/src/main/resources/rawfile/Login/电话.png differ
diff --git a/entry/src/main/resources/rawfile/Login/锁.png b/entry/src/main/resources/rawfile/Login/锁.png
new file mode 100644
index 0000000..70134b8
Binary files /dev/null and b/entry/src/main/resources/rawfile/Login/锁.png differ
diff --git a/entry/src/main/resources/rawfile/add/条形码.png b/entry/src/main/resources/rawfile/add/条形码.png
new file mode 100644
index 0000000..dd543a9
Binary files /dev/null and b/entry/src/main/resources/rawfile/add/条形码.png differ
diff --git a/entry/src/main/resources/rawfile/add/添加 加号.png b/entry/src/main/resources/rawfile/add/添加 加号.png
new file mode 100644
index 0000000..85354b2
Binary files /dev/null and b/entry/src/main/resources/rawfile/add/添加 加号.png differ
diff --git a/entry/src/main/resources/rawfile/add/编写.png b/entry/src/main/resources/rawfile/add/编写.png
new file mode 100644
index 0000000..4c1224a
Binary files /dev/null and b/entry/src/main/resources/rawfile/add/编写.png differ
diff --git a/entry/src/main/resources/rawfile/ces/all_point.png b/entry/src/main/resources/rawfile/ces/all_point.png
new file mode 100644
index 0000000..b4a54f7
Binary files /dev/null and b/entry/src/main/resources/rawfile/ces/all_point.png differ
diff --git a/entry/src/main/resources/rawfile/chart/carbon_chart.html b/entry/src/main/resources/rawfile/chart/carbon_chart.html
new file mode 100644
index 0000000..8fd2248
--- /dev/null
+++ b/entry/src/main/resources/rawfile/chart/carbon_chart.html
@@ -0,0 +1,71 @@
+
+
+
+
+ 碳汇趋势图
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/rawfile/chart/contrast_chart.html b/entry/src/main/resources/rawfile/chart/contrast_chart.html
new file mode 100644
index 0000000..da1bd66
--- /dev/null
+++ b/entry/src/main/resources/rawfile/chart/contrast_chart.html
@@ -0,0 +1,181 @@
+
+
+
+
+
+ contrast chart
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/rawfile/chart/line_chart.html b/entry/src/main/resources/rawfile/chart/line_chart.html
new file mode 100644
index 0000000..ef97ba5
--- /dev/null
+++ b/entry/src/main/resources/rawfile/chart/line_chart.html
@@ -0,0 +1,234 @@
+
+
+
+
+
+ 水质实时曲线
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/entry/src/main/resources/rawfile/daohang/ic_tab_01.png b/entry/src/main/resources/rawfile/daohang/ic_tab_01.png
new file mode 100644
index 0000000..e812746
Binary files /dev/null and b/entry/src/main/resources/rawfile/daohang/ic_tab_01.png differ
diff --git a/entry/src/main/resources/rawfile/daohang/ic_tab_01_active.png b/entry/src/main/resources/rawfile/daohang/ic_tab_01_active.png
new file mode 100644
index 0000000..103b0a7
Binary files /dev/null and b/entry/src/main/resources/rawfile/daohang/ic_tab_01_active.png differ
diff --git a/entry/src/main/resources/rawfile/daohang/ic_tab_02.png b/entry/src/main/resources/rawfile/daohang/ic_tab_02.png
new file mode 100644
index 0000000..9a84fff
Binary files /dev/null and b/entry/src/main/resources/rawfile/daohang/ic_tab_02.png differ
diff --git a/entry/src/main/resources/rawfile/daohang/ic_tab_02_active.png b/entry/src/main/resources/rawfile/daohang/ic_tab_02_active.png
new file mode 100644
index 0000000..19be455
Binary files /dev/null and b/entry/src/main/resources/rawfile/daohang/ic_tab_02_active.png differ
diff --git a/entry/src/main/resources/rawfile/daohang/ic_tab_03.png b/entry/src/main/resources/rawfile/daohang/ic_tab_03.png
new file mode 100644
index 0000000..5ebb4b1
Binary files /dev/null and b/entry/src/main/resources/rawfile/daohang/ic_tab_03.png differ
diff --git a/entry/src/main/resources/rawfile/daohang/ic_tab_03_active.png b/entry/src/main/resources/rawfile/daohang/ic_tab_03_active.png
new file mode 100644
index 0000000..e797ca8
Binary files /dev/null and b/entry/src/main/resources/rawfile/daohang/ic_tab_03_active.png differ
diff --git a/entry/src/main/resources/rawfile/daohang/ic_tab_04.png b/entry/src/main/resources/rawfile/daohang/ic_tab_04.png
new file mode 100644
index 0000000..bb30eeb
Binary files /dev/null and b/entry/src/main/resources/rawfile/daohang/ic_tab_04.png differ
diff --git a/entry/src/main/resources/rawfile/daohang/ic_tab_04_active.png b/entry/src/main/resources/rawfile/daohang/ic_tab_04_active.png
new file mode 100644
index 0000000..b1ecdc7
Binary files /dev/null and b/entry/src/main/resources/rawfile/daohang/ic_tab_04_active.png differ
diff --git a/entry/src/main/resources/rawfile/daohang/ic_tab_05.png b/entry/src/main/resources/rawfile/daohang/ic_tab_05.png
new file mode 100644
index 0000000..b88e921
Binary files /dev/null and b/entry/src/main/resources/rawfile/daohang/ic_tab_05.png differ
diff --git a/entry/src/main/resources/rawfile/daohang/ic_tab_05_active.png b/entry/src/main/resources/rawfile/daohang/ic_tab_05_active.png
new file mode 100644
index 0000000..4994f26
Binary files /dev/null and b/entry/src/main/resources/rawfile/daohang/ic_tab_05_active.png differ
diff --git a/entry/src/main/resources/rawfile/index_false/我的.png b/entry/src/main/resources/rawfile/index_false/我的.png
new file mode 100644
index 0000000..20bc0be
Binary files /dev/null and b/entry/src/main/resources/rawfile/index_false/我的.png differ
diff --git a/entry/src/main/resources/rawfile/index_false/添加.png b/entry/src/main/resources/rawfile/index_false/添加.png
new file mode 100644
index 0000000..92f284e
Binary files /dev/null and b/entry/src/main/resources/rawfile/index_false/添加.png differ
diff --git a/entry/src/main/resources/rawfile/index_false/设备.png b/entry/src/main/resources/rawfile/index_false/设备.png
new file mode 100644
index 0000000..86dfba8
Binary files /dev/null and b/entry/src/main/resources/rawfile/index_false/设备.png differ
diff --git a/entry/src/main/resources/rawfile/index_true/我的.png b/entry/src/main/resources/rawfile/index_true/我的.png
new file mode 100644
index 0000000..c703130
Binary files /dev/null and b/entry/src/main/resources/rawfile/index_true/我的.png differ
diff --git a/entry/src/main/resources/rawfile/index_true/添加.png b/entry/src/main/resources/rawfile/index_true/添加.png
new file mode 100644
index 0000000..f8c1b5d
Binary files /dev/null and b/entry/src/main/resources/rawfile/index_true/添加.png differ
diff --git a/entry/src/main/resources/rawfile/index_true/设备.png b/entry/src/main/resources/rawfile/index_true/设备.png
new file mode 100644
index 0000000..ad043e2
Binary files /dev/null and b/entry/src/main/resources/rawfile/index_true/设备.png differ
diff --git a/entry/src/main/resources/rawfile/user/个人.png b/entry/src/main/resources/rawfile/user/个人.png
new file mode 100644
index 0000000..d4a9713
Binary files /dev/null and b/entry/src/main/resources/rawfile/user/个人.png differ
diff --git a/entry/src/main/resources/rawfile/user/个人b.png b/entry/src/main/resources/rawfile/user/个人b.png
new file mode 100644
index 0000000..b47be98
Binary files /dev/null and b/entry/src/main/resources/rawfile/user/个人b.png differ
diff --git a/entry/src/main/resources/rawfile/user/右箭头.png b/entry/src/main/resources/rawfile/user/右箭头.png
new file mode 100644
index 0000000..614cbce
Binary files /dev/null and b/entry/src/main/resources/rawfile/user/右箭头.png differ
diff --git a/entry/src/main/resources/rawfile/user/报告.png b/entry/src/main/resources/rawfile/user/报告.png
new file mode 100644
index 0000000..be15b97
Binary files /dev/null and b/entry/src/main/resources/rawfile/user/报告.png differ
diff --git a/entry/src/main/resources/rawfile/user/设置.png b/entry/src/main/resources/rawfile/user/设置.png
new file mode 100644
index 0000000..3f829db
Binary files /dev/null and b/entry/src/main/resources/rawfile/user/设置.png differ
diff --git a/entry/src/main/resources/rawfile/user/退出.png b/entry/src/main/resources/rawfile/user/退出.png
new file mode 100644
index 0000000..6eafc85
Binary files /dev/null and b/entry/src/main/resources/rawfile/user/退出.png differ
diff --git a/entry/src/mock/mock-config.json5 b/entry/src/mock/mock-config.json5
new file mode 100644
index 0000000..7a73a41
--- /dev/null
+++ b/entry/src/mock/mock-config.json5
@@ -0,0 +1,2 @@
+{
+}
\ No newline at end of file
diff --git a/entry/src/ohosTest/ets/test/Ability.test.ets b/entry/src/ohosTest/ets/test/Ability.test.ets
new file mode 100644
index 0000000..85c78f6
--- /dev/null
+++ b/entry/src/ohosTest/ets/test/Ability.test.ets
@@ -0,0 +1,35 @@
+import { hilog } from '@kit.PerformanceAnalysisKit';
+import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium';
+
+export default function abilityTest() {
+ describe('ActsAbilityTest', () => {
+ // Defines a test suite. Two parameters are supported: test suite name and test suite function.
+ beforeAll(() => {
+ // Presets an action, which is performed only once before all test cases of the test suite start.
+ // This API supports only one parameter: preset action function.
+ })
+ beforeEach(() => {
+ // Presets an action, which is performed before each unit test case starts.
+ // The number of execution times is the same as the number of test cases defined by **it**.
+ // This API supports only one parameter: preset action function.
+ })
+ afterEach(() => {
+ // Presets a clear action, which is performed after each unit test case ends.
+ // The number of execution times is the same as the number of test cases defined by **it**.
+ // This API supports only one parameter: clear action function.
+ })
+ afterAll(() => {
+ // Presets a clear action, which is performed after all test cases of the test suite end.
+ // This API supports only one parameter: clear action function.
+ })
+ it('assertContain', 0, () => {
+ // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function.
+ hilog.info(0x0000, 'testTag', '%{public}s', 'it begin');
+ let a = 'abc';
+ let b = 'b';
+ // Defines a variety of assertion methods, which are used to declare expected boolean conditions.
+ expect(a).assertContain(b);
+ expect(a).assertEqual(a);
+ })
+ })
+}
\ No newline at end of file
diff --git a/entry/src/ohosTest/ets/test/List.test.ets b/entry/src/ohosTest/ets/test/List.test.ets
new file mode 100644
index 0000000..794c7dc
--- /dev/null
+++ b/entry/src/ohosTest/ets/test/List.test.ets
@@ -0,0 +1,5 @@
+import abilityTest from './Ability.test';
+
+export default function testsuite() {
+ abilityTest();
+}
\ No newline at end of file
diff --git a/entry/src/ohosTest/module.json5 b/entry/src/ohosTest/module.json5
new file mode 100644
index 0000000..509a3a2
--- /dev/null
+++ b/entry/src/ohosTest/module.json5
@@ -0,0 +1,11 @@
+{
+ "module": {
+ "name": "entry_test",
+ "type": "feature",
+ "deviceTypes": [
+ "phone"
+ ],
+ "deliveryWithInstall": true,
+ "installationFree": false
+ }
+}
diff --git a/entry/src/test/List.test.ets b/entry/src/test/List.test.ets
new file mode 100644
index 0000000..bb5b5c3
--- /dev/null
+++ b/entry/src/test/List.test.ets
@@ -0,0 +1,5 @@
+import localUnitTest from './LocalUnit.test';
+
+export default function testsuite() {
+ localUnitTest();
+}
\ No newline at end of file
diff --git a/entry/src/test/LocalUnit.test.ets b/entry/src/test/LocalUnit.test.ets
new file mode 100644
index 0000000..165fc16
--- /dev/null
+++ b/entry/src/test/LocalUnit.test.ets
@@ -0,0 +1,33 @@
+import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium';
+
+export default function localUnitTest() {
+ describe('localUnitTest', () => {
+ // Defines a test suite. Two parameters are supported: test suite name and test suite function.
+ beforeAll(() => {
+ // Presets an action, which is performed only once before all test cases of the test suite start.
+ // This API supports only one parameter: preset action function.
+ });
+ beforeEach(() => {
+ // Presets an action, which is performed before each unit test case starts.
+ // The number of execution times is the same as the number of test cases defined by **it**.
+ // This API supports only one parameter: preset action function.
+ });
+ afterEach(() => {
+ // Presets a clear action, which is performed after each unit test case ends.
+ // The number of execution times is the same as the number of test cases defined by **it**.
+ // This API supports only one parameter: clear action function.
+ });
+ afterAll(() => {
+ // Presets a clear action, which is performed after all test cases of the test suite end.
+ // This API supports only one parameter: clear action function.
+ });
+ it('assertContain', 0, () => {
+ // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function.
+ let a = 'abc';
+ let b = 'b';
+ // Defines a variety of assertion methods, which are used to declare expected boolean conditions.
+ expect(a).assertContain(b);
+ expect(a).assertEqual(a);
+ });
+ });
+}
\ No newline at end of file
diff --git a/hvigor/hvigor-config.json5 b/hvigor/hvigor-config.json5
new file mode 100644
index 0000000..8053eee
--- /dev/null
+++ b/hvigor/hvigor-config.json5
@@ -0,0 +1,24 @@
+{
+ "modelVersion": "6.1.0",
+ "dependencies": {
+ "@ohos/hvigor-ohos-arkui-x-plugin": "4.23.5"
+ },
+ "execution": {
+ // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | "ultrafine" | false ]. Default: "normal" */
+ // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */
+ // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */
+ // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */
+ // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */
+ // "optimizationStrategy": "memory" /* Define the optimization strategy. Value: [ "memory" | "performance" ]. Default: "memory" */
+ },
+ "logging": {
+ // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */
+ },
+ "debugging": {
+ // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */
+ },
+ "nodeOptions": {
+ // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/
+ // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/
+ }
+}
\ No newline at end of file
diff --git a/hvigorfile.ts b/hvigorfile.ts
new file mode 100644
index 0000000..38cd772
--- /dev/null
+++ b/hvigorfile.ts
@@ -0,0 +1,2 @@
+// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently.
+export { AppTasksForArkUIX } from '@ohos/hvigor-ohos-arkui-x-plugin';
diff --git a/mqtt-backend/README.md b/mqtt-backend/README.md
new file mode 100644
index 0000000..5e38343
--- /dev/null
+++ b/mqtt-backend/README.md
@@ -0,0 +1,138 @@
+# MQTT Backend - 水情监测系统MQTT后端
+
+为HarmonyOS水情监测应用提供MQTT消息服务。
+
+## 目录结构
+
+```
+mqtt-backend/
+├── server.js # MQTT Broker服务器
+├── simulator.js # 模拟数据发送器
+├── package.json # 项目配置
+└── README.md # 说明文档
+```
+
+## 快速开始
+
+### 1. 安装依赖
+
+```bash
+cd mqtt-backend
+npm install
+```
+
+### 2. 启动MQTT Broker
+
+```bash
+npm start
+# 或
+node server.js
+```
+
+服务器将在 `0.0.0.0:1883` 端口启动,输出如下:
+```
+========================================
+ MQTT Broker 服务器已启动
+========================================
+监听地址: mqtt://0.0.0.0:1883
+认证用户: admin
+认证密码: admin
+```
+
+### 3. 启动数据模拟器(可选)
+
+如果需要自动发送模拟数据:
+
+```bash
+node simulator.js
+```
+
+模拟器将每3秒发送一次随机水质数据。
+
+## MQTTX 配置
+
+使用MQTTX客户端连接和测试:
+
+### 连接配置
+
+| 参数 | 值 |
+|------|-----|
+| Name | WaterMonitor |
+| Protocol | mqtt:// |
+| Host | localhost 或 192.168.xxx.xxx |
+| Port | 1883 |
+| Username | admin |
+| Password | admin |
+| Client ID | mqttx-test |
+
+### 发布消息
+
+**主题**: `sea_status`
+
+**消息格式** (JSON):
+```json
+{
+ "temp": 25.5,
+ "ph": 7.2,
+ "conductivity": 850,
+ "cod": 35,
+ "ammoniaNitrogen": 0.3,
+ "residualChlorine": 0.4
+}
+```
+
+### 字段说明
+
+| 字段 | 说明 | 单位 | 正常范围 |
+|------|------|------|----------|
+| temp | 水温 | °C | 15-30 |
+| ph | pH值 | - | 6.5-8.5 |
+| conductivity | 电导率 | μS/cm | 500-1500 |
+| cod | COD | mg/L | ≤40 |
+| ammoniaNitrogen | 氨氮 | mg/L | ≤1.0 |
+| residualChlorine | 余氯 | mg/L | 0.3-0.5 |
+
+## HarmonyOS应用配置
+
+应用中的MQTT配置位于 `entry/src/main/ets/utils/MqttService.ets`:
+
+```typescript
+this.mqttService.setConfig('tcp://192.168.xxx.xxx:1883', 'sea_status');
+```
+
+请将IP地址改为运行MQTT Broker的电脑IP。
+
+### 获取本机IP
+
+Windows:
+```bash
+ipconfig
+```
+
+查找 "IPv4 地址" 一行,例如 `192.168.31.100`。
+
+## 测试流程
+
+1. 启动MQTT Broker: `node server.js`
+2. 打开MQTTX,连接到Broker
+3. 订阅主题 `sea_status`(查看消息)
+4. 发布测试消息到 `sea_status`
+5. 在HarmonyOS应用中查看数据是否更新
+
+## 故障排查
+
+### 连接失败
+
+- 检查IP地址是否正确
+- 检查防火墙是否允许1883端口
+- 检查用户名密码是否为 `admin/admin`
+
+### 数据不显示
+
+- 检查主题是否为 `sea_status`
+- 检查JSON格式是否正确
+- 查看HarmonyOS应用日志
+
+### 端口占用
+
+如果1883端口被占用,可以修改 `server.js` 中的 `PORT` 常量。
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/.bin/mqtt b/mqtt-backend/node_modules/.bin/mqtt
new file mode 100644
index 0000000..6bd52be
--- /dev/null
+++ b/mqtt-backend/node_modules/.bin/mqtt
@@ -0,0 +1,16 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*)
+ if command -v cygpath > /dev/null 2>&1; then
+ basedir=`cygpath -w "$basedir"`
+ fi
+ ;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../mqtt/build/bin/mqtt.js" "$@"
+else
+ exec node "$basedir/../mqtt/build/bin/mqtt.js" "$@"
+fi
diff --git a/mqtt-backend/node_modules/.bin/mqtt.cmd b/mqtt-backend/node_modules/.bin/mqtt.cmd
new file mode 100644
index 0000000..b8dcc79
--- /dev/null
+++ b/mqtt-backend/node_modules/.bin/mqtt.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mqtt\build\bin\mqtt.js" %*
diff --git a/mqtt-backend/node_modules/.bin/mqtt.ps1 b/mqtt-backend/node_modules/.bin/mqtt.ps1
new file mode 100644
index 0000000..5c189bb
--- /dev/null
+++ b/mqtt-backend/node_modules/.bin/mqtt.ps1
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "$basedir/node$exe" "$basedir/../mqtt/build/bin/mqtt.js" $args
+ } else {
+ & "$basedir/node$exe" "$basedir/../mqtt/build/bin/mqtt.js" $args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "node$exe" "$basedir/../mqtt/build/bin/mqtt.js" $args
+ } else {
+ & "node$exe" "$basedir/../mqtt/build/bin/mqtt.js" $args
+ }
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/mqtt-backend/node_modules/.bin/mqtt_pub b/mqtt-backend/node_modules/.bin/mqtt_pub
new file mode 100644
index 0000000..84e711e
--- /dev/null
+++ b/mqtt-backend/node_modules/.bin/mqtt_pub
@@ -0,0 +1,16 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*)
+ if command -v cygpath > /dev/null 2>&1; then
+ basedir=`cygpath -w "$basedir"`
+ fi
+ ;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../mqtt/build/bin/pub.js" "$@"
+else
+ exec node "$basedir/../mqtt/build/bin/pub.js" "$@"
+fi
diff --git a/mqtt-backend/node_modules/.bin/mqtt_pub.cmd b/mqtt-backend/node_modules/.bin/mqtt_pub.cmd
new file mode 100644
index 0000000..1a6a7e7
--- /dev/null
+++ b/mqtt-backend/node_modules/.bin/mqtt_pub.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mqtt\build\bin\pub.js" %*
diff --git a/mqtt-backend/node_modules/.bin/mqtt_pub.ps1 b/mqtt-backend/node_modules/.bin/mqtt_pub.ps1
new file mode 100644
index 0000000..daacf05
--- /dev/null
+++ b/mqtt-backend/node_modules/.bin/mqtt_pub.ps1
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "$basedir/node$exe" "$basedir/../mqtt/build/bin/pub.js" $args
+ } else {
+ & "$basedir/node$exe" "$basedir/../mqtt/build/bin/pub.js" $args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "node$exe" "$basedir/../mqtt/build/bin/pub.js" $args
+ } else {
+ & "node$exe" "$basedir/../mqtt/build/bin/pub.js" $args
+ }
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/mqtt-backend/node_modules/.bin/mqtt_sub b/mqtt-backend/node_modules/.bin/mqtt_sub
new file mode 100644
index 0000000..269b6e5
--- /dev/null
+++ b/mqtt-backend/node_modules/.bin/mqtt_sub
@@ -0,0 +1,16 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*)
+ if command -v cygpath > /dev/null 2>&1; then
+ basedir=`cygpath -w "$basedir"`
+ fi
+ ;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../mqtt/build/bin/sub.js" "$@"
+else
+ exec node "$basedir/../mqtt/build/bin/sub.js" "$@"
+fi
diff --git a/mqtt-backend/node_modules/.bin/mqtt_sub.cmd b/mqtt-backend/node_modules/.bin/mqtt_sub.cmd
new file mode 100644
index 0000000..d7c3d30
--- /dev/null
+++ b/mqtt-backend/node_modules/.bin/mqtt_sub.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mqtt\build\bin\sub.js" %*
diff --git a/mqtt-backend/node_modules/.bin/mqtt_sub.ps1 b/mqtt-backend/node_modules/.bin/mqtt_sub.ps1
new file mode 100644
index 0000000..11d95d6
--- /dev/null
+++ b/mqtt-backend/node_modules/.bin/mqtt_sub.ps1
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "$basedir/node$exe" "$basedir/../mqtt/build/bin/sub.js" $args
+ } else {
+ & "$basedir/node$exe" "$basedir/../mqtt/build/bin/sub.js" $args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "node$exe" "$basedir/../mqtt/build/bin/sub.js" $args
+ } else {
+ & "node$exe" "$basedir/../mqtt/build/bin/sub.js" $args
+ }
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/mqtt-backend/node_modules/.bin/uuid b/mqtt-backend/node_modules/.bin/uuid
new file mode 100644
index 0000000..0c2d469
--- /dev/null
+++ b/mqtt-backend/node_modules/.bin/uuid
@@ -0,0 +1,16 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*)
+ if command -v cygpath > /dev/null 2>&1; then
+ basedir=`cygpath -w "$basedir"`
+ fi
+ ;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../uuid/dist/bin/uuid" "$@"
+else
+ exec node "$basedir/../uuid/dist/bin/uuid" "$@"
+fi
diff --git a/mqtt-backend/node_modules/.bin/uuid.cmd b/mqtt-backend/node_modules/.bin/uuid.cmd
new file mode 100644
index 0000000..0f2376e
--- /dev/null
+++ b/mqtt-backend/node_modules/.bin/uuid.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\uuid\dist\bin\uuid" %*
diff --git a/mqtt-backend/node_modules/.bin/uuid.ps1 b/mqtt-backend/node_modules/.bin/uuid.ps1
new file mode 100644
index 0000000..7804628
--- /dev/null
+++ b/mqtt-backend/node_modules/.bin/uuid.ps1
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "$basedir/node$exe" "$basedir/../uuid/dist/bin/uuid" $args
+ } else {
+ & "$basedir/node$exe" "$basedir/../uuid/dist/bin/uuid" $args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "node$exe" "$basedir/../uuid/dist/bin/uuid" $args
+ } else {
+ & "node$exe" "$basedir/../uuid/dist/bin/uuid" $args
+ }
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/mqtt-backend/node_modules/.package-lock.json b/mqtt-backend/node_modules/.package-lock.json
new file mode 100644
index 0000000..193ffd5
--- /dev/null
+++ b/mqtt-backend/node_modules/.package-lock.json
@@ -0,0 +1,862 @@
+{
+ "name": "mqtt-backend",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "node_modules/@babel/runtime": {
+ "version": "7.29.2",
+ "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.29.2.tgz",
+ "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "25.6.0",
+ "resolved": "https://registry.npmmirror.com/@types/node/-/node-25.6.0.tgz",
+ "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==",
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~7.19.0"
+ }
+ },
+ "node_modules/@types/readable-stream": {
+ "version": "4.0.23",
+ "resolved": "https://registry.npmmirror.com/@types/readable-stream/-/readable-stream-4.0.23.tgz",
+ "integrity": "sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/ws": {
+ "version": "8.18.1",
+ "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.18.1.tgz",
+ "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/abort-controller": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/abort-controller/-/abort-controller-3.0.0.tgz",
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+ "license": "MIT",
+ "dependencies": {
+ "event-target-shim": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6.5"
+ }
+ },
+ "node_modules/aedes": {
+ "version": "0.51.3",
+ "resolved": "https://registry.npmmirror.com/aedes/-/aedes-0.51.3.tgz",
+ "integrity": "sha512-aQfiI9w3RbqnowNCdcGMmCtxBFXN9bhJFcuZm24U5/NU06V3MCl42jWK2GUnu8rOypR2Ahi/aEcgq3w7CMcycg==",
+ "license": "MIT",
+ "dependencies": {
+ "aedes-packet": "^3.0.0",
+ "aedes-persistence": "^9.1.2",
+ "end-of-stream": "^1.4.4",
+ "fastfall": "^1.5.1",
+ "fastparallel": "^2.4.1",
+ "fastseries": "^2.0.0",
+ "hyperid": "^3.2.0",
+ "mqemitter": "^6.0.0",
+ "mqtt-packet": "^9.0.0",
+ "retimer": "^4.0.0",
+ "reusify": "^1.0.4",
+ "uuid": "^10.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/aedes"
+ }
+ },
+ "node_modules/aedes-packet": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/aedes-packet/-/aedes-packet-3.0.0.tgz",
+ "integrity": "sha512-swASey0BxGs4/npZGWoiVDmnEyPvVFIRY6l2LVKL4rbiW8IhcIGDLfnb20Qo8U20itXlitAKPQ3MVTEbOGG5ZA==",
+ "license": "MIT",
+ "dependencies": {
+ "mqtt-packet": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/aedes-packet/node_modules/bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "node_modules/aedes-packet/node_modules/mqtt-packet": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmmirror.com/mqtt-packet/-/mqtt-packet-7.1.2.tgz",
+ "integrity": "sha512-FFZbcZ2omsf4c5TxEQfcX9hI+JzDpDKPT46OmeIBpVA7+t32ey25UNqlqNXTmeZOr5BLsSIERpQQLsFWJS94SQ==",
+ "license": "MIT",
+ "dependencies": {
+ "bl": "^4.0.2",
+ "debug": "^4.1.1",
+ "process-nextick-args": "^2.0.1"
+ }
+ },
+ "node_modules/aedes-packet/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/aedes-persistence": {
+ "version": "9.1.2",
+ "resolved": "https://registry.npmmirror.com/aedes-persistence/-/aedes-persistence-9.1.2.tgz",
+ "integrity": "sha512-2Wlr5pwIK0eQOkiTwb8ZF6C20s8UPUlnsJ4kXYePZ3JlQl0NbBA176mzM8wY294BJ5wybpNc9P5XEQxqadRNcQ==",
+ "license": "MIT",
+ "dependencies": {
+ "aedes-packet": "^3.0.0",
+ "qlobber": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/bl": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmmirror.com/bl/-/bl-6.1.6.tgz",
+ "integrity": "sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/readable-stream": "^4.0.0",
+ "buffer": "^6.0.3",
+ "inherits": "^2.0.4",
+ "readable-stream": "^4.2.0"
+ }
+ },
+ "node_modules/bl/node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "node_modules/broker-factory": {
+ "version": "3.1.14",
+ "resolved": "https://registry.npmmirror.com/broker-factory/-/broker-factory-3.1.14.tgz",
+ "integrity": "sha512-L45k5HMbPIrMid0nTOZ/UPXG/c0aRuQKVrSDFIb1zOkvfiyHgYmIjc3cSiN1KwQIvRDOtKE0tfb3I9EZ3CmpQQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "fast-unique-numbers": "^9.0.27",
+ "tslib": "^2.8.1",
+ "worker-factory": "^7.0.49"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "license": "MIT"
+ },
+ "node_modules/commist": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmmirror.com/commist/-/commist-3.2.0.tgz",
+ "integrity": "sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==",
+ "license": "MIT"
+ },
+ "node_modules/concat-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-2.0.0.tgz",
+ "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
+ "engines": [
+ "node >= 6.0"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.0.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/concat-stream/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.5.tgz",
+ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/event-target-shim": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/fast-unique-numbers": {
+ "version": "9.0.27",
+ "resolved": "https://registry.npmmirror.com/fast-unique-numbers/-/fast-unique-numbers-9.0.27.tgz",
+ "integrity": "sha512-nDA9ADeINN8SA2u2wCtU+siWFTTDqQR37XvgPIDDmboWQeExz7X0mImxuaN+kJddliIqy2FpVRmnvRZ+j8i1/A==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "tslib": "^2.8.1"
+ },
+ "engines": {
+ "node": ">=18.2.0"
+ }
+ },
+ "node_modules/fastfall": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmmirror.com/fastfall/-/fastfall-1.5.1.tgz",
+ "integrity": "sha512-KH6p+Z8AKPXnmA7+Iz2Lh8ARCMr+8WNPVludm1LGkZoD2MjY6LVnRMtTKhkdzI+jr0RzQWXKzKyBJm1zoHEL4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "reusify": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fastparallel": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmmirror.com/fastparallel/-/fastparallel-2.4.1.tgz",
+ "integrity": "sha512-qUmhxPgNHmvRjZKBFUNI0oZuuH9OlSIOXmJ98lhKPxMZZ7zS/Fi0wRHOihDSz0R1YiIOjxzOY4bq65YTcdBi2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4",
+ "xtend": "^4.0.2"
+ }
+ },
+ "node_modules/fastseries": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/fastseries/-/fastseries-2.0.0.tgz",
+ "integrity": "sha512-XBU9RXeoYc2/VnvMhplAxEmZLfIk7cvTBu+xwoBuTI8pL19E03cmca17QQycKIdxgwCeFA/a4u27gv1h3ya5LQ==",
+ "license": "ISC"
+ },
+ "node_modules/help-me": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/help-me/-/help-me-5.0.0.tgz",
+ "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
+ "license": "MIT"
+ },
+ "node_modules/hyperid": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmmirror.com/hyperid/-/hyperid-3.3.0.tgz",
+ "integrity": "sha512-7qhCVT4MJIoEsNcbhglhdmBKb09QtcmJNiIQGq7js/Khf5FtQQ9bzcAuloeqBeee7XD7JqDeve9KNlQya5tSGQ==",
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^5.2.1",
+ "uuid": "^8.3.2",
+ "uuid-parse": "^1.1.0"
+ }
+ },
+ "node_modules/hyperid/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "license": "ISC"
+ },
+ "node_modules/ip-address": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmmirror.com/ip-address/-/ip-address-10.1.1.tgz",
+ "integrity": "sha512-1FMu8/N15Ck1BL551Jf42NYIoin2unWjLQ2Fze/DXryJRl5twqtwNHlO39qERGbIOcKYWHdgRryhOC+NG4eaLw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/js-sdsl": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmmirror.com/js-sdsl/-/js-sdsl-4.3.0.tgz",
+ "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/js-sdsl"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "license": "ISC"
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/mqemitter": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmmirror.com/mqemitter/-/mqemitter-6.0.2.tgz",
+ "integrity": "sha512-8RGlznQx/Nb1xC3xKUFXHWov7pn7JdH++YVwlr6SLT6k3ft1h+ImGqZdVudbdKruFckIq9wheq9s4hgCivJDow==",
+ "license": "ISC",
+ "dependencies": {
+ "fastparallel": "^2.4.1",
+ "qlobber": "^8.0.1"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/mqemitter/node_modules/qlobber": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmmirror.com/qlobber/-/qlobber-8.0.1.tgz",
+ "integrity": "sha512-O+Wd1chXj5YE1DwmD+ae0bXiSLehmnS3czlC1R9FL/Nt/3q8uMS1bIHmg2lJfCoiimCxClWM8AAuJrF0EvNiog==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ }
+ },
+ "node_modules/mqtt": {
+ "version": "5.15.1",
+ "resolved": "https://registry.npmmirror.com/mqtt/-/mqtt-5.15.1.tgz",
+ "integrity": "sha512-V1WnkGuJh3ec9QXzy5Iylw8OOBK+Xu1WhxcQ9mMpLThG+/JZIMV1PgLNRgIiqXhZnvnVLsuyxHl5A/3bHHbcAA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/readable-stream": "^4.0.21",
+ "@types/ws": "^8.18.1",
+ "commist": "^3.2.0",
+ "concat-stream": "^2.0.0",
+ "debug": "^4.4.1",
+ "help-me": "^5.0.0",
+ "lru-cache": "^10.4.3",
+ "minimist": "^1.2.8",
+ "mqtt-packet": "^9.0.2",
+ "number-allocator": "^1.0.14",
+ "readable-stream": "^4.7.0",
+ "rfdc": "^1.4.1",
+ "socks": "^2.8.6",
+ "split2": "^4.2.0",
+ "worker-timers": "^8.0.23",
+ "ws": "^8.18.3"
+ },
+ "bin": {
+ "mqtt": "build/bin/mqtt.js",
+ "mqtt_pub": "build/bin/pub.js",
+ "mqtt_sub": "build/bin/sub.js"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/mqtt-packet": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmmirror.com/mqtt-packet/-/mqtt-packet-9.0.2.tgz",
+ "integrity": "sha512-MvIY0B8/qjq7bKxdN1eD+nrljoeaai+qjLJgfRn3TiMuz0pamsIWY2bFODPZMSNmabsLANXsLl4EMoWvlaTZWA==",
+ "license": "MIT",
+ "dependencies": {
+ "bl": "^6.0.8",
+ "debug": "^4.3.4",
+ "process-nextick-args": "^2.0.1"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/number-allocator": {
+ "version": "1.0.14",
+ "resolved": "https://registry.npmmirror.com/number-allocator/-/number-allocator-1.0.14.tgz",
+ "integrity": "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.3.1",
+ "js-sdsl": "4.3.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "license": "MIT"
+ },
+ "node_modules/qlobber": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmmirror.com/qlobber/-/qlobber-7.0.1.tgz",
+ "integrity": "sha512-FsFg9lMuMEFNKmTO9nV7tlyPhx8BmskPPjH2akWycuYVTtWaVwhW5yCHLJQ6Q+3mvw5cFX2vMfW2l9z2SiYAbg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-4.7.0.tgz",
+ "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
+ "license": "MIT",
+ "dependencies": {
+ "abort-controller": "^3.0.0",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "process": "^0.11.10",
+ "string_decoder": "^1.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/readable-stream/node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "node_modules/retimer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/retimer/-/retimer-4.0.0.tgz",
+ "integrity": "sha512-fZIVtvbOsQsxNSDhpdPOX4lx5Ss2ni+S72AUBitARpFhtA3UzrAjQ6gDtypB2/+l7L+1VQgAgpvAKY66mElH0w==",
+ "license": "MIT",
+ "dependencies": {
+ "worker-timers": "^7.0.75"
+ }
+ },
+ "node_modules/retimer/node_modules/fast-unique-numbers": {
+ "version": "8.0.13",
+ "resolved": "https://registry.npmmirror.com/fast-unique-numbers/-/fast-unique-numbers-8.0.13.tgz",
+ "integrity": "sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.23.8",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.1.0"
+ }
+ },
+ "node_modules/retimer/node_modules/worker-timers": {
+ "version": "7.1.8",
+ "resolved": "https://registry.npmmirror.com/worker-timers/-/worker-timers-7.1.8.tgz",
+ "integrity": "sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.24.5",
+ "tslib": "^2.6.2",
+ "worker-timers-broker": "^6.1.8",
+ "worker-timers-worker": "^7.0.71"
+ }
+ },
+ "node_modules/retimer/node_modules/worker-timers-broker": {
+ "version": "6.1.8",
+ "resolved": "https://registry.npmmirror.com/worker-timers-broker/-/worker-timers-broker-6.1.8.tgz",
+ "integrity": "sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.24.5",
+ "fast-unique-numbers": "^8.0.13",
+ "tslib": "^2.6.2",
+ "worker-timers-worker": "^7.0.71"
+ }
+ },
+ "node_modules/retimer/node_modules/worker-timers-worker": {
+ "version": "7.0.71",
+ "resolved": "https://registry.npmmirror.com/worker-timers-worker/-/worker-timers-worker-7.0.71.tgz",
+ "integrity": "sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.24.5",
+ "tslib": "^2.6.2"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rfdc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+ "license": "MIT"
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmmirror.com/socks/-/socks-2.8.8.tgz",
+ "integrity": "sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog==",
+ "license": "MIT",
+ "dependencies": {
+ "ip-address": "^10.1.1",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">= 10.x"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
+ },
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
+ "license": "MIT"
+ },
+ "node_modules/undici-types": {
+ "version": "7.19.2",
+ "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.19.2.tgz",
+ "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==",
+ "license": "MIT"
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "license": "MIT"
+ },
+ "node_modules/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmmirror.com/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/uuid-parse": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/uuid-parse/-/uuid-parse-1.1.0.tgz",
+ "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==",
+ "license": "MIT"
+ },
+ "node_modules/worker-factory": {
+ "version": "7.0.49",
+ "resolved": "https://registry.npmmirror.com/worker-factory/-/worker-factory-7.0.49.tgz",
+ "integrity": "sha512-lW7tpgy6aUv2dFsQhv1yv+XFzdkCf/leoKRTGMPVK5/die6RrUjqgJHJf556qO+ZfytNG6wPXc17E8zzsOLUDw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "fast-unique-numbers": "^9.0.27",
+ "tslib": "^2.8.1"
+ }
+ },
+ "node_modules/worker-timers": {
+ "version": "8.0.31",
+ "resolved": "https://registry.npmmirror.com/worker-timers/-/worker-timers-8.0.31.tgz",
+ "integrity": "sha512-ngkq5S6JuZyztom8tDgBzorLo9byhBMko/sXfgiUD945AuzKGg1GCgDMCC3NaYkicLpGKXutONM36wEX8UbBCA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "tslib": "^2.8.1",
+ "worker-timers-broker": "^8.0.16",
+ "worker-timers-worker": "^9.0.14"
+ }
+ },
+ "node_modules/worker-timers-broker": {
+ "version": "8.0.16",
+ "resolved": "https://registry.npmmirror.com/worker-timers-broker/-/worker-timers-broker-8.0.16.tgz",
+ "integrity": "sha512-JyP3AvUGyPGbBGW7XiUewm2+0pN/aYo1QpVf5kdXAfkDZcN3p7NbWrG6XnyDEpDIvfHk/+LCnOW/NsuiU9riYA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "broker-factory": "^3.1.14",
+ "fast-unique-numbers": "^9.0.27",
+ "tslib": "^2.8.1",
+ "worker-timers-worker": "^9.0.14"
+ }
+ },
+ "node_modules/worker-timers-worker": {
+ "version": "9.0.14",
+ "resolved": "https://registry.npmmirror.com/worker-timers-worker/-/worker-timers-worker-9.0.14.tgz",
+ "integrity": "sha512-/qF06C60sXmSLfUl7WglvrDIbspmPOM8UrG63Dnn4bi2x4/DfqHS/+dxF5B+MdHnYO5tVuZYLHdAodrKdabTIg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "tslib": "^2.8.1",
+ "worker-factory": "^7.0.49"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "license": "ISC"
+ },
+ "node_modules/ws": {
+ "version": "8.20.0",
+ "resolved": "https://registry.npmmirror.com/ws/-/ws-8.20.0.tgz",
+ "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ }
+ }
+ }
+}
diff --git a/mqtt-backend/node_modules/@babel/runtime/LICENSE b/mqtt-backend/node_modules/@babel/runtime/LICENSE
new file mode 100644
index 0000000..f31575e
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/mqtt-backend/node_modules/@babel/runtime/README.md b/mqtt-backend/node_modules/@babel/runtime/README.md
new file mode 100644
index 0000000..2f3368e
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/README.md
@@ -0,0 +1,19 @@
+# @babel/runtime
+
+> babel's modular runtime helpers
+
+See our website [@babel/runtime](https://babeljs.io/docs/babel-runtime) for more information.
+
+## Install
+
+Using npm:
+
+```sh
+npm install --save @babel/runtime
+```
+
+or using yarn:
+
+```sh
+yarn add @babel/runtime
+```
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/AwaitValue.js b/mqtt-backend/node_modules/@babel/runtime/helpers/AwaitValue.js
new file mode 100644
index 0000000..52a7e69
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/AwaitValue.js
@@ -0,0 +1,4 @@
+function _AwaitValue(t) {
+ this.wrapped = t;
+}
+module.exports = _AwaitValue, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/OverloadYield.js b/mqtt-backend/node_modules/@babel/runtime/helpers/OverloadYield.js
new file mode 100644
index 0000000..0eca88c
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/OverloadYield.js
@@ -0,0 +1,4 @@
+function _OverloadYield(e, d) {
+ this.v = e, this.k = d;
+}
+module.exports = _OverloadYield, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecoratedDescriptor.js b/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecoratedDescriptor.js
new file mode 100644
index 0000000..0ff780e
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecoratedDescriptor.js
@@ -0,0 +1,9 @@
+function _applyDecoratedDescriptor(i, e, r, n, l) {
+ var a = {};
+ return Object.keys(n).forEach(function (i) {
+ a[i] = n[i];
+ }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) {
+ return n(i, e, r) || r;
+ }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a;
+}
+module.exports = _applyDecoratedDescriptor, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs.js b/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs.js
new file mode 100644
index 0000000..3770c5a
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs.js
@@ -0,0 +1,236 @@
+var _typeof = require("./typeof.js")["default"];
+var setFunctionName = require("./setFunctionName.js");
+var toPropertyKey = require("./toPropertyKey.js");
+function old_createMetadataMethodsForProperty(e, t, a, r) {
+ return {
+ getMetadata: function getMetadata(o) {
+ old_assertNotFinished(r, "getMetadata"), old_assertMetadataKey(o);
+ var i = e[o];
+ if (void 0 !== i) if (1 === t) {
+ var n = i["public"];
+ if (void 0 !== n) return n[a];
+ } else if (2 === t) {
+ var l = i["private"];
+ if (void 0 !== l) return l.get(a);
+ } else if (Object.hasOwnProperty.call(i, "constructor")) return i.constructor;
+ },
+ setMetadata: function setMetadata(o, i) {
+ old_assertNotFinished(r, "setMetadata"), old_assertMetadataKey(o);
+ var n = e[o];
+ if (void 0 === n && (n = e[o] = {}), 1 === t) {
+ var l = n["public"];
+ void 0 === l && (l = n["public"] = {}), l[a] = i;
+ } else if (2 === t) {
+ var s = n.priv;
+ void 0 === s && (s = n["private"] = new Map()), s.set(a, i);
+ } else n.constructor = i;
+ }
+ };
+}
+function old_convertMetadataMapToFinal(e, t) {
+ var a = e[Symbol.metadata || Symbol["for"]("Symbol.metadata")],
+ r = Object.getOwnPropertySymbols(t);
+ if (0 !== r.length) {
+ for (var o = 0; o < r.length; o++) {
+ var i = r[o],
+ n = t[i],
+ l = a ? a[i] : null,
+ s = n["public"],
+ c = l ? l["public"] : null;
+ s && c && Object.setPrototypeOf(s, c);
+ var d = n["private"];
+ if (d) {
+ var u = Array.from(d.values()),
+ f = l ? l["private"] : null;
+ f && (u = u.concat(f)), n["private"] = u;
+ }
+ l && Object.setPrototypeOf(n, l);
+ }
+ a && Object.setPrototypeOf(t, a), e[Symbol.metadata || Symbol["for"]("Symbol.metadata")] = t;
+ }
+}
+function old_createAddInitializerMethod(e, t) {
+ return function (a) {
+ old_assertNotFinished(t, "addInitializer"), old_assertCallable(a, "An initializer"), e.push(a);
+ };
+}
+function old_memberDec(e, t, a, r, o, i, n, l, s) {
+ var c;
+ switch (i) {
+ case 1:
+ c = "accessor";
+ break;
+ case 2:
+ c = "method";
+ break;
+ case 3:
+ c = "getter";
+ break;
+ case 4:
+ c = "setter";
+ break;
+ default:
+ c = "field";
+ }
+ var d,
+ u,
+ f = {
+ kind: c,
+ name: l ? "#" + t : toPropertyKey(t),
+ isStatic: n,
+ isPrivate: l
+ },
+ p = {
+ v: !1
+ };
+ if (0 !== i && (f.addInitializer = old_createAddInitializerMethod(o, p)), l) {
+ d = 2, u = Symbol(t);
+ var v = {};
+ 0 === i ? (v.get = a.get, v.set = a.set) : 2 === i ? v.get = function () {
+ return a.value;
+ } : (1 !== i && 3 !== i || (v.get = function () {
+ return a.get.call(this);
+ }), 1 !== i && 4 !== i || (v.set = function (e) {
+ a.set.call(this, e);
+ })), f.access = v;
+ } else d = 1, u = t;
+ try {
+ return e(s, Object.assign(f, old_createMetadataMethodsForProperty(r, d, u, p)));
+ } finally {
+ p.v = !0;
+ }
+}
+function old_assertNotFinished(e, t) {
+ if (e.v) throw Error("attempted to call " + t + " after decoration was finished");
+}
+function old_assertMetadataKey(e) {
+ if ("symbol" != _typeof(e)) throw new TypeError("Metadata keys must be symbols, received: " + e);
+}
+function old_assertCallable(e, t) {
+ if ("function" != typeof e) throw new TypeError(t + " must be a function");
+}
+function old_assertValidReturnValue(e, t) {
+ var a = _typeof(t);
+ if (1 === e) {
+ if ("object" !== a || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+ void 0 !== t.get && old_assertCallable(t.get, "accessor.get"), void 0 !== t.set && old_assertCallable(t.set, "accessor.set"), void 0 !== t.init && old_assertCallable(t.init, "accessor.init"), void 0 !== t.initializer && old_assertCallable(t.initializer, "accessor.initializer");
+ } else if ("function" !== a) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+}
+function old_getInit(e) {
+ var t;
+ return null == (t = e.init) && (t = e.initializer) && void 0 !== console && console.warn(".initializer has been renamed to .init as of March 2022"), t;
+}
+function old_applyMemberDec(e, t, a, r, o, i, n, l, s) {
+ var c,
+ d,
+ u,
+ f,
+ p,
+ v,
+ y,
+ h = a[0];
+ if (n ? (0 === o || 1 === o ? (c = {
+ get: a[3],
+ set: a[4]
+ }, u = "get") : 3 === o ? (c = {
+ get: a[3]
+ }, u = "get") : 4 === o ? (c = {
+ set: a[3]
+ }, u = "set") : c = {
+ value: a[3]
+ }, 0 !== o && (1 === o && setFunctionName(a[4], "#" + r, "set"), setFunctionName(a[3], "#" + r, u))) : 0 !== o && (c = Object.getOwnPropertyDescriptor(t, r)), 1 === o ? f = {
+ get: c.get,
+ set: c.set
+ } : 2 === o ? f = c.value : 3 === o ? f = c.get : 4 === o && (f = c.set), "function" == typeof h) void 0 !== (p = old_memberDec(h, r, c, l, s, o, i, n, f)) && (old_assertValidReturnValue(o, p), 0 === o ? d = p : 1 === o ? (d = old_getInit(p), v = p.get || f.get, y = p.set || f.set, f = {
+ get: v,
+ set: y
+ }) : f = p);else for (var m = h.length - 1; m >= 0; m--) {
+ var b;
+ void 0 !== (p = old_memberDec(h[m], r, c, l, s, o, i, n, f)) && (old_assertValidReturnValue(o, p), 0 === o ? b = p : 1 === o ? (b = old_getInit(p), v = p.get || f.get, y = p.set || f.set, f = {
+ get: v,
+ set: y
+ }) : f = p, void 0 !== b && (void 0 === d ? d = b : "function" == typeof d ? d = [d, b] : d.push(b)));
+ }
+ if (0 === o || 1 === o) {
+ if (void 0 === d) d = function d(e, t) {
+ return t;
+ };else if ("function" != typeof d) {
+ var g = d;
+ d = function d(e, t) {
+ for (var a = t, r = 0; r < g.length; r++) a = g[r].call(e, a);
+ return a;
+ };
+ } else {
+ var _ = d;
+ d = function d(e, t) {
+ return _.call(e, t);
+ };
+ }
+ e.push(d);
+ }
+ 0 !== o && (1 === o ? (c.get = f.get, c.set = f.set) : 2 === o ? c.value = f : 3 === o ? c.get = f : 4 === o && (c.set = f), n ? 1 === o ? (e.push(function (e, t) {
+ return f.get.call(e, t);
+ }), e.push(function (e, t) {
+ return f.set.call(e, t);
+ })) : 2 === o ? e.push(f) : e.push(function (e, t) {
+ return f.call(e, t);
+ }) : Object.defineProperty(t, r, c));
+}
+function old_applyMemberDecs(e, t, a, r, o) {
+ for (var i, n, l = new Map(), s = new Map(), c = 0; c < o.length; c++) {
+ var d = o[c];
+ if (Array.isArray(d)) {
+ var u,
+ f,
+ p,
+ v = d[1],
+ y = d[2],
+ h = d.length > 3,
+ m = v >= 5;
+ if (m ? (u = t, f = r, 0 != (v -= 5) && (p = n = n || [])) : (u = t.prototype, f = a, 0 !== v && (p = i = i || [])), 0 !== v && !h) {
+ var b = m ? s : l,
+ g = b.get(y) || 0;
+ if (!0 === g || 3 === g && 4 !== v || 4 === g && 3 !== v) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + y);
+ !g && v > 2 ? b.set(y, v) : b.set(y, !0);
+ }
+ old_applyMemberDec(e, u, d, y, v, m, h, f, p);
+ }
+ }
+ old_pushInitializers(e, i), old_pushInitializers(e, n);
+}
+function old_pushInitializers(e, t) {
+ t && e.push(function (e) {
+ for (var a = 0; a < t.length; a++) t[a].call(e);
+ return e;
+ });
+}
+function old_applyClassDecs(e, t, a, r) {
+ if (r.length > 0) {
+ for (var o = [], i = t, n = t.name, l = r.length - 1; l >= 0; l--) {
+ var s = {
+ v: !1
+ };
+ try {
+ var c = Object.assign({
+ kind: "class",
+ name: n,
+ addInitializer: old_createAddInitializerMethod(o, s)
+ }, old_createMetadataMethodsForProperty(a, 0, n, s)),
+ d = r[l](i, c);
+ } finally {
+ s.v = !0;
+ }
+ void 0 !== d && (old_assertValidReturnValue(10, d), i = d);
+ }
+ e.push(i, function () {
+ for (var e = 0; e < o.length; e++) o[e].call(i);
+ });
+ }
+}
+function applyDecs(e, t, a) {
+ var r = [],
+ o = {},
+ i = {};
+ return old_applyMemberDecs(r, e, i, o, t), old_convertMetadataMapToFinal(e.prototype, i), old_applyClassDecs(r, e, o, a), old_convertMetadataMapToFinal(e, o), r;
+}
+module.exports = applyDecs, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2203.js b/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2203.js
new file mode 100644
index 0000000..5af267c
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2203.js
@@ -0,0 +1,184 @@
+var _typeof = require("./typeof.js")["default"];
+function applyDecs2203Factory() {
+ function createAddInitializerMethod(e, t) {
+ return function (r) {
+ !function (e) {
+ if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+ }(t), assertCallable(r, "An initializer"), e.push(r);
+ };
+ }
+ function memberDec(e, t, r, a, n, i, s, o) {
+ var c;
+ switch (n) {
+ case 1:
+ c = "accessor";
+ break;
+ case 2:
+ c = "method";
+ break;
+ case 3:
+ c = "getter";
+ break;
+ case 4:
+ c = "setter";
+ break;
+ default:
+ c = "field";
+ }
+ var l,
+ u,
+ f = {
+ kind: c,
+ name: s ? "#" + t : t,
+ "static": i,
+ "private": s
+ },
+ p = {
+ v: !1
+ };
+ 0 !== n && (f.addInitializer = createAddInitializerMethod(a, p)), 0 === n ? s ? (l = r.get, u = r.set) : (l = function l() {
+ return this[t];
+ }, u = function u(e) {
+ this[t] = e;
+ }) : 2 === n ? l = function l() {
+ return r.value;
+ } : (1 !== n && 3 !== n || (l = function l() {
+ return r.get.call(this);
+ }), 1 !== n && 4 !== n || (u = function u(e) {
+ r.set.call(this, e);
+ })), f.access = l && u ? {
+ get: l,
+ set: u
+ } : l ? {
+ get: l
+ } : {
+ set: u
+ };
+ try {
+ return e(o, f);
+ } finally {
+ p.v = !0;
+ }
+ }
+ function assertCallable(e, t) {
+ if ("function" != typeof e) throw new TypeError(t + " must be a function");
+ }
+ function assertValidReturnValue(e, t) {
+ var r = _typeof(t);
+ if (1 === e) {
+ if ("object" !== r || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+ void 0 !== t.get && assertCallable(t.get, "accessor.get"), void 0 !== t.set && assertCallable(t.set, "accessor.set"), void 0 !== t.init && assertCallable(t.init, "accessor.init");
+ } else if ("function" !== r) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+ }
+ function applyMemberDec(e, t, r, a, n, i, s, o) {
+ var c,
+ l,
+ u,
+ f,
+ p,
+ d,
+ h = r[0];
+ if (s ? c = 0 === n || 1 === n ? {
+ get: r[3],
+ set: r[4]
+ } : 3 === n ? {
+ get: r[3]
+ } : 4 === n ? {
+ set: r[3]
+ } : {
+ value: r[3]
+ } : 0 !== n && (c = Object.getOwnPropertyDescriptor(t, a)), 1 === n ? u = {
+ get: c.get,
+ set: c.set
+ } : 2 === n ? u = c.value : 3 === n ? u = c.get : 4 === n && (u = c.set), "function" == typeof h) void 0 !== (f = memberDec(h, a, c, o, n, i, s, u)) && (assertValidReturnValue(n, f), 0 === n ? l = f : 1 === n ? (l = f.init, p = f.get || u.get, d = f.set || u.set, u = {
+ get: p,
+ set: d
+ }) : u = f);else for (var v = h.length - 1; v >= 0; v--) {
+ var g;
+ void 0 !== (f = memberDec(h[v], a, c, o, n, i, s, u)) && (assertValidReturnValue(n, f), 0 === n ? g = f : 1 === n ? (g = f.init, p = f.get || u.get, d = f.set || u.set, u = {
+ get: p,
+ set: d
+ }) : u = f, void 0 !== g && (void 0 === l ? l = g : "function" == typeof l ? l = [l, g] : l.push(g)));
+ }
+ if (0 === n || 1 === n) {
+ if (void 0 === l) l = function l(e, t) {
+ return t;
+ };else if ("function" != typeof l) {
+ var y = l;
+ l = function l(e, t) {
+ for (var r = t, a = 0; a < y.length; a++) r = y[a].call(e, r);
+ return r;
+ };
+ } else {
+ var m = l;
+ l = function l(e, t) {
+ return m.call(e, t);
+ };
+ }
+ e.push(l);
+ }
+ 0 !== n && (1 === n ? (c.get = u.get, c.set = u.set) : 2 === n ? c.value = u : 3 === n ? c.get = u : 4 === n && (c.set = u), s ? 1 === n ? (e.push(function (e, t) {
+ return u.get.call(e, t);
+ }), e.push(function (e, t) {
+ return u.set.call(e, t);
+ })) : 2 === n ? e.push(u) : e.push(function (e, t) {
+ return u.call(e, t);
+ }) : Object.defineProperty(t, a, c));
+ }
+ function pushInitializers(e, t) {
+ t && e.push(function (e) {
+ for (var r = 0; r < t.length; r++) t[r].call(e);
+ return e;
+ });
+ }
+ return function (e, t, r) {
+ var a = [];
+ return function (e, t, r) {
+ for (var a, n, i = new Map(), s = new Map(), o = 0; o < r.length; o++) {
+ var c = r[o];
+ if (Array.isArray(c)) {
+ var l,
+ u,
+ f = c[1],
+ p = c[2],
+ d = c.length > 3,
+ h = f >= 5;
+ if (h ? (l = t, 0 != (f -= 5) && (u = n = n || [])) : (l = t.prototype, 0 !== f && (u = a = a || [])), 0 !== f && !d) {
+ var v = h ? s : i,
+ g = v.get(p) || 0;
+ if (!0 === g || 3 === g && 4 !== f || 4 === g && 3 !== f) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + p);
+ !g && f > 2 ? v.set(p, f) : v.set(p, !0);
+ }
+ applyMemberDec(e, l, c, p, f, h, d, u);
+ }
+ }
+ pushInitializers(e, a), pushInitializers(e, n);
+ }(a, e, t), function (e, t, r) {
+ if (r.length > 0) {
+ for (var a = [], n = t, i = t.name, s = r.length - 1; s >= 0; s--) {
+ var o = {
+ v: !1
+ };
+ try {
+ var c = r[s](n, {
+ kind: "class",
+ name: i,
+ addInitializer: createAddInitializerMethod(a, o)
+ });
+ } finally {
+ o.v = !0;
+ }
+ void 0 !== c && (assertValidReturnValue(10, c), n = c);
+ }
+ e.push(n, function () {
+ for (var e = 0; e < a.length; e++) a[e].call(n);
+ });
+ }
+ }(a, e, r), a;
+ };
+}
+var applyDecs2203Impl;
+function applyDecs2203(e, t, r) {
+ return (applyDecs2203Impl = applyDecs2203Impl || applyDecs2203Factory())(e, t, r);
+}
+module.exports = applyDecs2203, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2203R.js b/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2203R.js
new file mode 100644
index 0000000..1be7f5e
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2203R.js
@@ -0,0 +1,191 @@
+var _typeof = require("./typeof.js")["default"];
+var setFunctionName = require("./setFunctionName.js");
+var toPropertyKey = require("./toPropertyKey.js");
+function applyDecs2203RFactory() {
+ function createAddInitializerMethod(e, t) {
+ return function (r) {
+ !function (e) {
+ if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+ }(t), assertCallable(r, "An initializer"), e.push(r);
+ };
+ }
+ function memberDec(e, t, r, n, a, i, o, s) {
+ var c;
+ switch (a) {
+ case 1:
+ c = "accessor";
+ break;
+ case 2:
+ c = "method";
+ break;
+ case 3:
+ c = "getter";
+ break;
+ case 4:
+ c = "setter";
+ break;
+ default:
+ c = "field";
+ }
+ var l,
+ u,
+ f = {
+ kind: c,
+ name: o ? "#" + t : toPropertyKey(t),
+ "static": i,
+ "private": o
+ },
+ p = {
+ v: !1
+ };
+ 0 !== a && (f.addInitializer = createAddInitializerMethod(n, p)), 0 === a ? o ? (l = r.get, u = r.set) : (l = function l() {
+ return this[t];
+ }, u = function u(e) {
+ this[t] = e;
+ }) : 2 === a ? l = function l() {
+ return r.value;
+ } : (1 !== a && 3 !== a || (l = function l() {
+ return r.get.call(this);
+ }), 1 !== a && 4 !== a || (u = function u(e) {
+ r.set.call(this, e);
+ })), f.access = l && u ? {
+ get: l,
+ set: u
+ } : l ? {
+ get: l
+ } : {
+ set: u
+ };
+ try {
+ return e(s, f);
+ } finally {
+ p.v = !0;
+ }
+ }
+ function assertCallable(e, t) {
+ if ("function" != typeof e) throw new TypeError(t + " must be a function");
+ }
+ function assertValidReturnValue(e, t) {
+ var r = _typeof(t);
+ if (1 === e) {
+ if ("object" !== r || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+ void 0 !== t.get && assertCallable(t.get, "accessor.get"), void 0 !== t.set && assertCallable(t.set, "accessor.set"), void 0 !== t.init && assertCallable(t.init, "accessor.init");
+ } else if ("function" !== r) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+ }
+ function applyMemberDec(e, t, r, n, a, i, o, s) {
+ var c,
+ l,
+ u,
+ f,
+ p,
+ d,
+ h,
+ v = r[0];
+ if (o ? (0 === a || 1 === a ? (c = {
+ get: r[3],
+ set: r[4]
+ }, u = "get") : 3 === a ? (c = {
+ get: r[3]
+ }, u = "get") : 4 === a ? (c = {
+ set: r[3]
+ }, u = "set") : c = {
+ value: r[3]
+ }, 0 !== a && (1 === a && setFunctionName(r[4], "#" + n, "set"), setFunctionName(r[3], "#" + n, u))) : 0 !== a && (c = Object.getOwnPropertyDescriptor(t, n)), 1 === a ? f = {
+ get: c.get,
+ set: c.set
+ } : 2 === a ? f = c.value : 3 === a ? f = c.get : 4 === a && (f = c.set), "function" == typeof v) void 0 !== (p = memberDec(v, n, c, s, a, i, o, f)) && (assertValidReturnValue(a, p), 0 === a ? l = p : 1 === a ? (l = p.init, d = p.get || f.get, h = p.set || f.set, f = {
+ get: d,
+ set: h
+ }) : f = p);else for (var g = v.length - 1; g >= 0; g--) {
+ var y;
+ void 0 !== (p = memberDec(v[g], n, c, s, a, i, o, f)) && (assertValidReturnValue(a, p), 0 === a ? y = p : 1 === a ? (y = p.init, d = p.get || f.get, h = p.set || f.set, f = {
+ get: d,
+ set: h
+ }) : f = p, void 0 !== y && (void 0 === l ? l = y : "function" == typeof l ? l = [l, y] : l.push(y)));
+ }
+ if (0 === a || 1 === a) {
+ if (void 0 === l) l = function l(e, t) {
+ return t;
+ };else if ("function" != typeof l) {
+ var m = l;
+ l = function l(e, t) {
+ for (var r = t, n = 0; n < m.length; n++) r = m[n].call(e, r);
+ return r;
+ };
+ } else {
+ var b = l;
+ l = function l(e, t) {
+ return b.call(e, t);
+ };
+ }
+ e.push(l);
+ }
+ 0 !== a && (1 === a ? (c.get = f.get, c.set = f.set) : 2 === a ? c.value = f : 3 === a ? c.get = f : 4 === a && (c.set = f), o ? 1 === a ? (e.push(function (e, t) {
+ return f.get.call(e, t);
+ }), e.push(function (e, t) {
+ return f.set.call(e, t);
+ })) : 2 === a ? e.push(f) : e.push(function (e, t) {
+ return f.call(e, t);
+ }) : Object.defineProperty(t, n, c));
+ }
+ function applyMemberDecs(e, t) {
+ for (var r, n, a = [], i = new Map(), o = new Map(), s = 0; s < t.length; s++) {
+ var c = t[s];
+ if (Array.isArray(c)) {
+ var l,
+ u,
+ f = c[1],
+ p = c[2],
+ d = c.length > 3,
+ h = f >= 5;
+ if (h ? (l = e, 0 != (f -= 5) && (u = n = n || [])) : (l = e.prototype, 0 !== f && (u = r = r || [])), 0 !== f && !d) {
+ var v = h ? o : i,
+ g = v.get(p) || 0;
+ if (!0 === g || 3 === g && 4 !== f || 4 === g && 3 !== f) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + p);
+ !g && f > 2 ? v.set(p, f) : v.set(p, !0);
+ }
+ applyMemberDec(a, l, c, p, f, h, d, u);
+ }
+ }
+ return pushInitializers(a, r), pushInitializers(a, n), a;
+ }
+ function pushInitializers(e, t) {
+ t && e.push(function (e) {
+ for (var r = 0; r < t.length; r++) t[r].call(e);
+ return e;
+ });
+ }
+ return function (e, t, r) {
+ return {
+ e: applyMemberDecs(e, t),
+ get c() {
+ return function (e, t) {
+ if (t.length > 0) {
+ for (var r = [], n = e, a = e.name, i = t.length - 1; i >= 0; i--) {
+ var o = {
+ v: !1
+ };
+ try {
+ var s = t[i](n, {
+ kind: "class",
+ name: a,
+ addInitializer: createAddInitializerMethod(r, o)
+ });
+ } finally {
+ o.v = !0;
+ }
+ void 0 !== s && (assertValidReturnValue(10, s), n = s);
+ }
+ return [n, function () {
+ for (var e = 0; e < r.length; e++) r[e].call(n);
+ }];
+ }
+ }(e, r);
+ }
+ };
+ };
+}
+function applyDecs2203R(e, t, r) {
+ return (module.exports = applyDecs2203R = applyDecs2203RFactory(), module.exports.__esModule = true, module.exports["default"] = module.exports)(e, t, r);
+}
+module.exports = applyDecs2203R, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2301.js b/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2301.js
new file mode 100644
index 0000000..577eee8
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2301.js
@@ -0,0 +1,222 @@
+var _typeof = require("./typeof.js")["default"];
+var checkInRHS = require("./checkInRHS.js");
+var setFunctionName = require("./setFunctionName.js");
+var toPropertyKey = require("./toPropertyKey.js");
+function applyDecs2301Factory() {
+ function createAddInitializerMethod(e, t) {
+ return function (r) {
+ !function (e) {
+ if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+ }(t), assertCallable(r, "An initializer"), e.push(r);
+ };
+ }
+ function assertInstanceIfPrivate(e, t) {
+ if (!e(t)) throw new TypeError("Attempted to access private element on non-instance");
+ }
+ function memberDec(e, t, r, n, a, i, s, o, c) {
+ var u;
+ switch (a) {
+ case 1:
+ u = "accessor";
+ break;
+ case 2:
+ u = "method";
+ break;
+ case 3:
+ u = "getter";
+ break;
+ case 4:
+ u = "setter";
+ break;
+ default:
+ u = "field";
+ }
+ var l,
+ f,
+ p = {
+ kind: u,
+ name: s ? "#" + t : toPropertyKey(t),
+ "static": i,
+ "private": s
+ },
+ d = {
+ v: !1
+ };
+ if (0 !== a && (p.addInitializer = createAddInitializerMethod(n, d)), s || 0 !== a && 2 !== a) {
+ if (2 === a) l = function l(e) {
+ return assertInstanceIfPrivate(c, e), r.value;
+ };else {
+ var h = 0 === a || 1 === a;
+ (h || 3 === a) && (l = s ? function (e) {
+ return assertInstanceIfPrivate(c, e), r.get.call(e);
+ } : function (e) {
+ return r.get.call(e);
+ }), (h || 4 === a) && (f = s ? function (e, t) {
+ assertInstanceIfPrivate(c, e), r.set.call(e, t);
+ } : function (e, t) {
+ r.set.call(e, t);
+ });
+ }
+ } else l = function l(e) {
+ return e[t];
+ }, 0 === a && (f = function f(e, r) {
+ e[t] = r;
+ });
+ var v = s ? c.bind() : function (e) {
+ return t in e;
+ };
+ p.access = l && f ? {
+ get: l,
+ set: f,
+ has: v
+ } : l ? {
+ get: l,
+ has: v
+ } : {
+ set: f,
+ has: v
+ };
+ try {
+ return e(o, p);
+ } finally {
+ d.v = !0;
+ }
+ }
+ function assertCallable(e, t) {
+ if ("function" != typeof e) throw new TypeError(t + " must be a function");
+ }
+ function assertValidReturnValue(e, t) {
+ var r = _typeof(t);
+ if (1 === e) {
+ if ("object" !== r || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+ void 0 !== t.get && assertCallable(t.get, "accessor.get"), void 0 !== t.set && assertCallable(t.set, "accessor.set"), void 0 !== t.init && assertCallable(t.init, "accessor.init");
+ } else if ("function" !== r) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+ }
+ function curryThis2(e) {
+ return function (t) {
+ e(this, t);
+ };
+ }
+ function applyMemberDec(e, t, r, n, a, i, s, o, c) {
+ var u,
+ l,
+ f,
+ p,
+ d,
+ h,
+ v,
+ y,
+ g = r[0];
+ if (s ? (0 === a || 1 === a ? (u = {
+ get: (d = r[3], function () {
+ return d(this);
+ }),
+ set: curryThis2(r[4])
+ }, f = "get") : 3 === a ? (u = {
+ get: r[3]
+ }, f = "get") : 4 === a ? (u = {
+ set: r[3]
+ }, f = "set") : u = {
+ value: r[3]
+ }, 0 !== a && (1 === a && setFunctionName(u.set, "#" + n, "set"), setFunctionName(u[f || "value"], "#" + n, f))) : 0 !== a && (u = Object.getOwnPropertyDescriptor(t, n)), 1 === a ? p = {
+ get: u.get,
+ set: u.set
+ } : 2 === a ? p = u.value : 3 === a ? p = u.get : 4 === a && (p = u.set), "function" == typeof g) void 0 !== (h = memberDec(g, n, u, o, a, i, s, p, c)) && (assertValidReturnValue(a, h), 0 === a ? l = h : 1 === a ? (l = h.init, v = h.get || p.get, y = h.set || p.set, p = {
+ get: v,
+ set: y
+ }) : p = h);else for (var m = g.length - 1; m >= 0; m--) {
+ var b;
+ void 0 !== (h = memberDec(g[m], n, u, o, a, i, s, p, c)) && (assertValidReturnValue(a, h), 0 === a ? b = h : 1 === a ? (b = h.init, v = h.get || p.get, y = h.set || p.set, p = {
+ get: v,
+ set: y
+ }) : p = h, void 0 !== b && (void 0 === l ? l = b : "function" == typeof l ? l = [l, b] : l.push(b)));
+ }
+ if (0 === a || 1 === a) {
+ if (void 0 === l) l = function l(e, t) {
+ return t;
+ };else if ("function" != typeof l) {
+ var I = l;
+ l = function l(e, t) {
+ for (var r = t, n = 0; n < I.length; n++) r = I[n].call(e, r);
+ return r;
+ };
+ } else {
+ var w = l;
+ l = function l(e, t) {
+ return w.call(e, t);
+ };
+ }
+ e.push(l);
+ }
+ 0 !== a && (1 === a ? (u.get = p.get, u.set = p.set) : 2 === a ? u.value = p : 3 === a ? u.get = p : 4 === a && (u.set = p), s ? 1 === a ? (e.push(function (e, t) {
+ return p.get.call(e, t);
+ }), e.push(function (e, t) {
+ return p.set.call(e, t);
+ })) : 2 === a ? e.push(p) : e.push(function (e, t) {
+ return p.call(e, t);
+ }) : Object.defineProperty(t, n, u));
+ }
+ function applyMemberDecs(e, t, r) {
+ for (var n, a, i, s = [], o = new Map(), c = new Map(), u = 0; u < t.length; u++) {
+ var l = t[u];
+ if (Array.isArray(l)) {
+ var f,
+ p,
+ d = l[1],
+ h = l[2],
+ v = l.length > 3,
+ y = d >= 5,
+ g = r;
+ if (y ? (f = e, 0 != (d -= 5) && (p = a = a || []), v && !i && (i = function i(t) {
+ return checkInRHS(t) === e;
+ }), g = i) : (f = e.prototype, 0 !== d && (p = n = n || [])), 0 !== d && !v) {
+ var m = y ? c : o,
+ b = m.get(h) || 0;
+ if (!0 === b || 3 === b && 4 !== d || 4 === b && 3 !== d) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + h);
+ !b && d > 2 ? m.set(h, d) : m.set(h, !0);
+ }
+ applyMemberDec(s, f, l, h, d, y, v, p, g);
+ }
+ }
+ return pushInitializers(s, n), pushInitializers(s, a), s;
+ }
+ function pushInitializers(e, t) {
+ t && e.push(function (e) {
+ for (var r = 0; r < t.length; r++) t[r].call(e);
+ return e;
+ });
+ }
+ return function (e, t, r, n) {
+ return {
+ e: applyMemberDecs(e, t, n),
+ get c() {
+ return function (e, t) {
+ if (t.length > 0) {
+ for (var r = [], n = e, a = e.name, i = t.length - 1; i >= 0; i--) {
+ var s = {
+ v: !1
+ };
+ try {
+ var o = t[i](n, {
+ kind: "class",
+ name: a,
+ addInitializer: createAddInitializerMethod(r, s)
+ });
+ } finally {
+ s.v = !0;
+ }
+ void 0 !== o && (assertValidReturnValue(10, o), n = o);
+ }
+ return [n, function () {
+ for (var e = 0; e < r.length; e++) r[e].call(n);
+ }];
+ }
+ }(e, r);
+ }
+ };
+ };
+}
+function applyDecs2301(e, t, r, n) {
+ return (module.exports = applyDecs2301 = applyDecs2301Factory(), module.exports.__esModule = true, module.exports["default"] = module.exports)(e, t, r, n);
+}
+module.exports = applyDecs2301, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2305.js b/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2305.js
new file mode 100644
index 0000000..744c352
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2305.js
@@ -0,0 +1,133 @@
+var _typeof = require("./typeof.js")["default"];
+var checkInRHS = require("./checkInRHS.js");
+var setFunctionName = require("./setFunctionName.js");
+var toPropertyKey = require("./toPropertyKey.js");
+function applyDecs2305(e, t, r, n, o, a) {
+ function i(e, t, r) {
+ return function (n, o) {
+ return r && r(n), e[t].call(n, o);
+ };
+ }
+ function c(e, t) {
+ for (var r = 0; r < e.length; r++) e[r].call(t);
+ return t;
+ }
+ function s(e, t, r, n) {
+ if ("function" != typeof e && (n || void 0 !== e)) throw new TypeError(t + " must " + (r || "be") + " a function" + (n ? "" : " or undefined"));
+ return e;
+ }
+ function applyDec(e, t, r, n, o, a, c, u, l, f, p, d, h) {
+ function m(e) {
+ if (!h(e)) throw new TypeError("Attempted to access private element on non-instance");
+ }
+ var y,
+ v = t[0],
+ g = t[3],
+ b = !u;
+ if (!b) {
+ r || Array.isArray(v) || (v = [v]);
+ var w = {},
+ S = [],
+ A = 3 === o ? "get" : 4 === o || d ? "set" : "value";
+ f ? (p || d ? w = {
+ get: setFunctionName(function () {
+ return g(this);
+ }, n, "get"),
+ set: function set(e) {
+ t[4](this, e);
+ }
+ } : w[A] = g, p || setFunctionName(w[A], n, 2 === o ? "" : A)) : p || (w = Object.getOwnPropertyDescriptor(e, n));
+ }
+ for (var P = e, j = v.length - 1; j >= 0; j -= r ? 2 : 1) {
+ var D = v[j],
+ E = r ? v[j - 1] : void 0,
+ I = {},
+ O = {
+ kind: ["field", "accessor", "method", "getter", "setter", "class"][o],
+ name: n,
+ metadata: a,
+ addInitializer: function (e, t) {
+ if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+ s(t, "An initializer", "be", !0), c.push(t);
+ }.bind(null, I)
+ };
+ try {
+ if (b) (y = s(D.call(E, P, O), "class decorators", "return")) && (P = y);else {
+ var k, F;
+ O["static"] = l, O["private"] = f, f ? 2 === o ? k = function k(e) {
+ return m(e), w.value;
+ } : (o < 4 && (k = i(w, "get", m)), 3 !== o && (F = i(w, "set", m))) : (k = function k(e) {
+ return e[n];
+ }, (o < 2 || 4 === o) && (F = function F(e, t) {
+ e[n] = t;
+ }));
+ var N = O.access = {
+ has: f ? h.bind() : function (e) {
+ return n in e;
+ }
+ };
+ if (k && (N.get = k), F && (N.set = F), P = D.call(E, d ? {
+ get: w.get,
+ set: w.set
+ } : w[A], O), d) {
+ if ("object" == _typeof(P) && P) (y = s(P.get, "accessor.get")) && (w.get = y), (y = s(P.set, "accessor.set")) && (w.set = y), (y = s(P.init, "accessor.init")) && S.push(y);else if (void 0 !== P) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+ } else s(P, (p ? "field" : "method") + " decorators", "return") && (p ? S.push(P) : w[A] = P);
+ }
+ } finally {
+ I.v = !0;
+ }
+ }
+ return (p || d) && u.push(function (e, t) {
+ for (var r = S.length - 1; r >= 0; r--) t = S[r].call(e, t);
+ return t;
+ }), p || b || (f ? d ? u.push(i(w, "get"), i(w, "set")) : u.push(2 === o ? w[A] : i.call.bind(w[A])) : Object.defineProperty(e, n, w)), P;
+ }
+ function u(e, t) {
+ return Object.defineProperty(e, Symbol.metadata || Symbol["for"]("Symbol.metadata"), {
+ configurable: !0,
+ enumerable: !0,
+ value: t
+ });
+ }
+ if (arguments.length >= 6) var l = a[Symbol.metadata || Symbol["for"]("Symbol.metadata")];
+ var f = Object.create(null == l ? null : l),
+ p = function (e, t, r, n) {
+ var o,
+ a,
+ i = [],
+ s = function s(t) {
+ return checkInRHS(t) === e;
+ },
+ u = new Map();
+ function l(e) {
+ e && i.push(c.bind(null, e));
+ }
+ for (var f = 0; f < t.length; f++) {
+ var p = t[f];
+ if (Array.isArray(p)) {
+ var d = p[1],
+ h = p[2],
+ m = p.length > 3,
+ y = 16 & d,
+ v = !!(8 & d),
+ g = 0 == (d &= 7),
+ b = h + "/" + v;
+ if (!g && !m) {
+ var w = u.get(b);
+ if (!0 === w || 3 === w && 4 !== d || 4 === w && 3 !== d) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + h);
+ u.set(b, !(d > 2) || d);
+ }
+ applyDec(v ? e : e.prototype, p, y, m ? "#" + h : toPropertyKey(h), d, n, v ? a = a || [] : o = o || [], i, v, m, g, 1 === d, v && m ? s : r);
+ }
+ }
+ return l(o), l(a), i;
+ }(e, t, o, f);
+ return r.length || u(e, f), {
+ e: p,
+ get c() {
+ var t = [];
+ return r.length && [u(applyDec(e, [r], n, e.name, 5, f, t), f), c.bind(null, t, e)];
+ }
+ };
+}
+module.exports = applyDecs2305, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2311.js b/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2311.js
new file mode 100644
index 0000000..5c7ed77
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/applyDecs2311.js
@@ -0,0 +1,124 @@
+var _typeof = require("./typeof.js")["default"];
+var checkInRHS = require("./checkInRHS.js");
+var setFunctionName = require("./setFunctionName.js");
+var toPropertyKey = require("./toPropertyKey.js");
+function applyDecs2311(e, t, n, r, o, i) {
+ var a,
+ c,
+ u,
+ s,
+ f,
+ l,
+ p,
+ d = Symbol.metadata || Symbol["for"]("Symbol.metadata"),
+ m = Object.defineProperty,
+ h = Object.create,
+ y = [h(null), h(null)],
+ v = t.length;
+ function g(t, n, r) {
+ return function (o, i) {
+ n && (i = o, o = e);
+ for (var a = 0; a < t.length; a++) i = t[a].apply(o, r ? [i] : []);
+ return r ? i : o;
+ };
+ }
+ function b(e, t, n, r) {
+ if ("function" != typeof e && (r || void 0 !== e)) throw new TypeError(t + " must " + (n || "be") + " a function" + (r ? "" : " or undefined"));
+ return e;
+ }
+ function applyDec(e, t, n, r, o, i, u, s, f, l, p) {
+ function d(e) {
+ if (!p(e)) throw new TypeError("Attempted to access private element on non-instance");
+ }
+ var h = [].concat(t[0]),
+ v = t[3],
+ w = !u,
+ D = 1 === o,
+ S = 3 === o,
+ j = 4 === o,
+ E = 2 === o;
+ function I(t, n, r) {
+ return function (o, i) {
+ return n && (i = o, o = e), r && r(o), P[t].call(o, i);
+ };
+ }
+ if (!w) {
+ var P = {},
+ k = [],
+ F = S ? "get" : j || D ? "set" : "value";
+ if (f ? (l || D ? P = {
+ get: setFunctionName(function () {
+ return v(this);
+ }, r, "get"),
+ set: function set(e) {
+ t[4](this, e);
+ }
+ } : P[F] = v, l || setFunctionName(P[F], r, E ? "" : F)) : l || (P = Object.getOwnPropertyDescriptor(e, r)), !l && !f) {
+ if ((c = y[+s][r]) && 7 !== (c ^ o)) throw Error("Decorating two elements with the same name (" + P[F].name + ") is not supported yet");
+ y[+s][r] = o < 3 ? 1 : o;
+ }
+ }
+ for (var N = e, O = h.length - 1; O >= 0; O -= n ? 2 : 1) {
+ var T = b(h[O], "A decorator", "be", !0),
+ z = n ? h[O - 1] : void 0,
+ A = {},
+ H = {
+ kind: ["field", "accessor", "method", "getter", "setter", "class"][o],
+ name: r,
+ metadata: a,
+ addInitializer: function (e, t) {
+ if (e.v) throw new TypeError("attempted to call addInitializer after decoration was finished");
+ b(t, "An initializer", "be", !0), i.push(t);
+ }.bind(null, A)
+ };
+ if (w) c = T.call(z, N, H), A.v = 1, b(c, "class decorators", "return") && (N = c);else if (H["static"] = s, H["private"] = f, c = H.access = {
+ has: f ? p.bind() : function (e) {
+ return r in e;
+ }
+ }, j || (c.get = f ? E ? function (e) {
+ return d(e), P.value;
+ } : I("get", 0, d) : function (e) {
+ return e[r];
+ }), E || S || (c.set = f ? I("set", 0, d) : function (e, t) {
+ e[r] = t;
+ }), N = T.call(z, D ? {
+ get: P.get,
+ set: P.set
+ } : P[F], H), A.v = 1, D) {
+ if ("object" == _typeof(N) && N) (c = b(N.get, "accessor.get")) && (P.get = c), (c = b(N.set, "accessor.set")) && (P.set = c), (c = b(N.init, "accessor.init")) && k.unshift(c);else if (void 0 !== N) throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined");
+ } else b(N, (l ? "field" : "method") + " decorators", "return") && (l ? k.unshift(N) : P[F] = N);
+ }
+ return o < 2 && u.push(g(k, s, 1), g(i, s, 0)), l || w || (f ? D ? u.splice(-1, 0, I("get", s), I("set", s)) : u.push(E ? P[F] : b.call.bind(P[F])) : m(e, r, P)), N;
+ }
+ function w(e) {
+ return m(e, d, {
+ configurable: !0,
+ enumerable: !0,
+ value: a
+ });
+ }
+ return void 0 !== i && (a = i[d]), a = h(null == a ? null : a), f = [], l = function l(e) {
+ e && f.push(g(e));
+ }, p = function p(t, r) {
+ for (var i = 0; i < n.length; i++) {
+ var a = n[i],
+ c = a[1],
+ l = 7 & c;
+ if ((8 & c) == t && !l == r) {
+ var p = a[2],
+ d = !!a[3],
+ m = 16 & c;
+ applyDec(t ? e : e.prototype, a, m, d ? "#" + p : toPropertyKey(p), l, l < 2 ? [] : t ? s = s || [] : u = u || [], f, !!t, d, r, t && d ? function (t) {
+ return checkInRHS(t) === e;
+ } : o);
+ }
+ }
+ }, p(8, 0), p(0, 0), p(8, 1), p(0, 1), l(u), l(s), c = f, v || w(e), {
+ e: c,
+ get c() {
+ var n = [];
+ return v && [w(e = applyDec(e, [t], r, e.name, 5, n)), g(n, 1)];
+ }
+ };
+}
+module.exports = applyDecs2311, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/arrayLikeToArray.js b/mqtt-backend/node_modules/@babel/runtime/helpers/arrayLikeToArray.js
new file mode 100644
index 0000000..19787e3
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/arrayLikeToArray.js
@@ -0,0 +1,6 @@
+function _arrayLikeToArray(r, a) {
+ (null == a || a > r.length) && (a = r.length);
+ for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
+ return n;
+}
+module.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/arrayWithHoles.js b/mqtt-backend/node_modules/@babel/runtime/helpers/arrayWithHoles.js
new file mode 100644
index 0000000..78bdd93
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/arrayWithHoles.js
@@ -0,0 +1,4 @@
+function _arrayWithHoles(r) {
+ if (Array.isArray(r)) return r;
+}
+module.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js b/mqtt-backend/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js
new file mode 100644
index 0000000..42218f5
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js
@@ -0,0 +1,5 @@
+var arrayLikeToArray = require("./arrayLikeToArray.js");
+function _arrayWithoutHoles(r) {
+ if (Array.isArray(r)) return arrayLikeToArray(r);
+}
+module.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/assertClassBrand.js b/mqtt-backend/node_modules/@babel/runtime/helpers/assertClassBrand.js
new file mode 100644
index 0000000..e63ed8f
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/assertClassBrand.js
@@ -0,0 +1,5 @@
+function _assertClassBrand(e, t, n) {
+ if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;
+ throw new TypeError("Private element is not present on this object");
+}
+module.exports = _assertClassBrand, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/assertThisInitialized.js b/mqtt-backend/node_modules/@babel/runtime/helpers/assertThisInitialized.js
new file mode 100644
index 0000000..02594fb
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/assertThisInitialized.js
@@ -0,0 +1,5 @@
+function _assertThisInitialized(e) {
+ if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ return e;
+}
+module.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/asyncGeneratorDelegate.js b/mqtt-backend/node_modules/@babel/runtime/helpers/asyncGeneratorDelegate.js
new file mode 100644
index 0000000..023568e
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/asyncGeneratorDelegate.js
@@ -0,0 +1,24 @@
+var OverloadYield = require("./OverloadYield.js");
+function _asyncGeneratorDelegate(t) {
+ var e = {},
+ n = !1;
+ function pump(e, r) {
+ return n = !0, r = new Promise(function (n) {
+ n(t[e](r));
+ }), {
+ done: !1,
+ value: new OverloadYield(r, 1)
+ };
+ }
+ return e["undefined" != typeof Symbol && Symbol.iterator || "@@iterator"] = function () {
+ return this;
+ }, e.next = function (t) {
+ return n ? (n = !1, t) : pump("next", t);
+ }, "function" == typeof t["throw"] && (e["throw"] = function (t) {
+ if (n) throw n = !1, t;
+ return pump("throw", t);
+ }), "function" == typeof t["return"] && (e["return"] = function (t) {
+ return n ? (n = !1, t) : pump("return", t);
+ }), e;
+}
+module.exports = _asyncGeneratorDelegate, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/asyncIterator.js b/mqtt-backend/node_modules/@babel/runtime/helpers/asyncIterator.js
new file mode 100644
index 0000000..9c0c95c
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/asyncIterator.js
@@ -0,0 +1,45 @@
+function _asyncIterator(r) {
+ var n,
+ t,
+ o,
+ e = 2;
+ for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) {
+ if (t && null != (n = r[t])) return n.call(r);
+ if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r));
+ t = "@@asyncIterator", o = "@@iterator";
+ }
+ throw new TypeError("Object is not async iterable");
+}
+function AsyncFromSyncIterator(r) {
+ function AsyncFromSyncIteratorContinuation(r) {
+ if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object."));
+ var n = r.done;
+ return Promise.resolve(r.value).then(function (r) {
+ return {
+ value: r,
+ done: n
+ };
+ });
+ }
+ return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) {
+ this.s = r, this.n = r.next;
+ }, AsyncFromSyncIterator.prototype = {
+ s: null,
+ n: null,
+ next: function next() {
+ return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));
+ },
+ "return": function _return(r) {
+ var n = this.s["return"];
+ return void 0 === n ? Promise.resolve({
+ value: r,
+ done: !0
+ }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));
+ },
+ "throw": function _throw(r) {
+ var n = this.s["return"];
+ return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));
+ }
+ }, new AsyncFromSyncIterator(r);
+}
+module.exports = _asyncIterator, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/asyncToGenerator.js b/mqtt-backend/node_modules/@babel/runtime/helpers/asyncToGenerator.js
new file mode 100644
index 0000000..a080339
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/asyncToGenerator.js
@@ -0,0 +1,26 @@
+function asyncGeneratorStep(n, t, e, r, o, a, c) {
+ try {
+ var i = n[a](c),
+ u = i.value;
+ } catch (n) {
+ return void e(n);
+ }
+ i.done ? t(u) : Promise.resolve(u).then(r, o);
+}
+function _asyncToGenerator(n) {
+ return function () {
+ var t = this,
+ e = arguments;
+ return new Promise(function (r, o) {
+ var a = n.apply(t, e);
+ function _next(n) {
+ asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
+ }
+ function _throw(n) {
+ asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
+ }
+ _next(void 0);
+ });
+ };
+}
+module.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/awaitAsyncGenerator.js b/mqtt-backend/node_modules/@babel/runtime/helpers/awaitAsyncGenerator.js
new file mode 100644
index 0000000..2d6fab9
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/awaitAsyncGenerator.js
@@ -0,0 +1,5 @@
+var OverloadYield = require("./OverloadYield.js");
+function _awaitAsyncGenerator(e) {
+ return new OverloadYield(e, 0);
+}
+module.exports = _awaitAsyncGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/callSuper.js b/mqtt-backend/node_modules/@babel/runtime/helpers/callSuper.js
new file mode 100644
index 0000000..38eaf7f
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/callSuper.js
@@ -0,0 +1,7 @@
+var getPrototypeOf = require("./getPrototypeOf.js");
+var isNativeReflectConstruct = require("./isNativeReflectConstruct.js");
+var possibleConstructorReturn = require("./possibleConstructorReturn.js");
+function _callSuper(t, o, e) {
+ return o = getPrototypeOf(o), possibleConstructorReturn(t, isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf(t).constructor) : o.apply(t, e));
+}
+module.exports = _callSuper, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/checkInRHS.js b/mqtt-backend/node_modules/@babel/runtime/helpers/checkInRHS.js
new file mode 100644
index 0000000..4eea13d
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/checkInRHS.js
@@ -0,0 +1,6 @@
+var _typeof = require("./typeof.js")["default"];
+function _checkInRHS(e) {
+ if (Object(e) !== e) throw TypeError("right-hand side of 'in' should be an object, got " + (null !== e ? _typeof(e) : "null"));
+ return e;
+}
+module.exports = _checkInRHS, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/checkPrivateRedeclaration.js b/mqtt-backend/node_modules/@babel/runtime/helpers/checkPrivateRedeclaration.js
new file mode 100644
index 0000000..33ad54c
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/checkPrivateRedeclaration.js
@@ -0,0 +1,4 @@
+function _checkPrivateRedeclaration(e, t) {
+ if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object");
+}
+module.exports = _checkPrivateRedeclaration, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classApplyDescriptorDestructureSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classApplyDescriptorDestructureSet.js
new file mode 100644
index 0000000..9998b83
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classApplyDescriptorDestructureSet.js
@@ -0,0 +1,10 @@
+function _classApplyDescriptorDestructureSet(e, t) {
+ if (t.set) return "__destrObj" in t || (t.__destrObj = {
+ set value(r) {
+ t.set.call(e, r);
+ }
+ }), t.__destrObj;
+ if (!t.writable) throw new TypeError("attempted to set read only private field");
+ return t;
+}
+module.exports = _classApplyDescriptorDestructureSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classApplyDescriptorGet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classApplyDescriptorGet.js
new file mode 100644
index 0000000..ab62724
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classApplyDescriptorGet.js
@@ -0,0 +1,4 @@
+function _classApplyDescriptorGet(e, t) {
+ return t.get ? t.get.call(e) : t.value;
+}
+module.exports = _classApplyDescriptorGet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classApplyDescriptorSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classApplyDescriptorSet.js
new file mode 100644
index 0000000..0975f95
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classApplyDescriptorSet.js
@@ -0,0 +1,7 @@
+function _classApplyDescriptorSet(e, t, l) {
+ if (t.set) t.set.call(e, l);else {
+ if (!t.writable) throw new TypeError("attempted to set read only private field");
+ t.value = l;
+ }
+}
+module.exports = _classApplyDescriptorSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classCallCheck.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classCallCheck.js
new file mode 100644
index 0000000..21b8390
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classCallCheck.js
@@ -0,0 +1,4 @@
+function _classCallCheck(a, n) {
+ if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
+}
+module.exports = _classCallCheck, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classCheckPrivateStaticAccess.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classCheckPrivateStaticAccess.js
new file mode 100644
index 0000000..7520f74
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classCheckPrivateStaticAccess.js
@@ -0,0 +1,5 @@
+var assertClassBrand = require("./assertClassBrand.js");
+function _classCheckPrivateStaticAccess(s, a, r) {
+ return assertClassBrand(a, s, r);
+}
+module.exports = _classCheckPrivateStaticAccess, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classCheckPrivateStaticFieldDescriptor.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classCheckPrivateStaticFieldDescriptor.js
new file mode 100644
index 0000000..7f70395
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classCheckPrivateStaticFieldDescriptor.js
@@ -0,0 +1,4 @@
+function _classCheckPrivateStaticFieldDescriptor(t, e) {
+ if (void 0 === t) throw new TypeError("attempted to " + e + " private static field before its declaration");
+}
+module.exports = _classCheckPrivateStaticFieldDescriptor, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classExtractFieldDescriptor.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classExtractFieldDescriptor.js
new file mode 100644
index 0000000..be855be
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classExtractFieldDescriptor.js
@@ -0,0 +1,5 @@
+var classPrivateFieldGet2 = require("./classPrivateFieldGet2.js");
+function _classExtractFieldDescriptor(e, t) {
+ return classPrivateFieldGet2(t, e);
+}
+module.exports = _classExtractFieldDescriptor, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classNameTDZError.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classNameTDZError.js
new file mode 100644
index 0000000..8141ff8
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classNameTDZError.js
@@ -0,0 +1,4 @@
+function _classNameTDZError(e) {
+ throw new ReferenceError('Class "' + e + '" cannot be referenced in computed property keys.');
+}
+module.exports = _classNameTDZError, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldDestructureSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldDestructureSet.js
new file mode 100644
index 0000000..97c764d
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldDestructureSet.js
@@ -0,0 +1,7 @@
+var classApplyDescriptorDestructureSet = require("./classApplyDescriptorDestructureSet.js");
+var classPrivateFieldGet2 = require("./classPrivateFieldGet2.js");
+function _classPrivateFieldDestructureSet(e, t) {
+ var r = classPrivateFieldGet2(t, e);
+ return classApplyDescriptorDestructureSet(e, r);
+}
+module.exports = _classPrivateFieldDestructureSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldGet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldGet.js
new file mode 100644
index 0000000..bbee142
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldGet.js
@@ -0,0 +1,7 @@
+var classApplyDescriptorGet = require("./classApplyDescriptorGet.js");
+var classPrivateFieldGet2 = require("./classPrivateFieldGet2.js");
+function _classPrivateFieldGet(e, t) {
+ var r = classPrivateFieldGet2(t, e);
+ return classApplyDescriptorGet(e, r);
+}
+module.exports = _classPrivateFieldGet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldGet2.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldGet2.js
new file mode 100644
index 0000000..d4c271c
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldGet2.js
@@ -0,0 +1,5 @@
+var assertClassBrand = require("./assertClassBrand.js");
+function _classPrivateFieldGet2(s, a) {
+ return s.get(assertClassBrand(s, a));
+}
+module.exports = _classPrivateFieldGet2, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldInitSpec.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldInitSpec.js
new file mode 100644
index 0000000..a290c19
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldInitSpec.js
@@ -0,0 +1,5 @@
+var checkPrivateRedeclaration = require("./checkPrivateRedeclaration.js");
+function _classPrivateFieldInitSpec(e, t, a) {
+ checkPrivateRedeclaration(e, t), t.set(e, a);
+}
+module.exports = _classPrivateFieldInitSpec, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldLooseBase.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldLooseBase.js
new file mode 100644
index 0000000..f9e46f2
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldLooseBase.js
@@ -0,0 +1,5 @@
+function _classPrivateFieldBase(e, t) {
+ if (!{}.hasOwnProperty.call(e, t)) throw new TypeError("attempted to use private field on non-instance");
+ return e;
+}
+module.exports = _classPrivateFieldBase, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldLooseKey.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldLooseKey.js
new file mode 100644
index 0000000..5dc687f
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldLooseKey.js
@@ -0,0 +1,5 @@
+var id = 0;
+function _classPrivateFieldKey(e) {
+ return "__private_" + id++ + "_" + e;
+}
+module.exports = _classPrivateFieldKey, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldSet.js
new file mode 100644
index 0000000..f3746e7
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldSet.js
@@ -0,0 +1,7 @@
+var classApplyDescriptorSet = require("./classApplyDescriptorSet.js");
+var classPrivateFieldGet2 = require("./classPrivateFieldGet2.js");
+function _classPrivateFieldSet(e, t, r) {
+ var s = classPrivateFieldGet2(t, e);
+ return classApplyDescriptorSet(e, s, r), r;
+}
+module.exports = _classPrivateFieldSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldSet2.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldSet2.js
new file mode 100644
index 0000000..25c60ca
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateFieldSet2.js
@@ -0,0 +1,5 @@
+var assertClassBrand = require("./assertClassBrand.js");
+function _classPrivateFieldSet2(s, a, r) {
+ return s.set(assertClassBrand(s, a), r), r;
+}
+module.exports = _classPrivateFieldSet2, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateGetter.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateGetter.js
new file mode 100644
index 0000000..1b3cf30
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateGetter.js
@@ -0,0 +1,5 @@
+var assertClassBrand = require("./assertClassBrand.js");
+function _classPrivateGetter(s, r, a) {
+ return a(assertClassBrand(s, r));
+}
+module.exports = _classPrivateGetter, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateMethodGet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateMethodGet.js
new file mode 100644
index 0000000..e4af387
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateMethodGet.js
@@ -0,0 +1,5 @@
+var assertClassBrand = require("./assertClassBrand.js");
+function _classPrivateMethodGet(s, a, r) {
+ return assertClassBrand(a, s), r;
+}
+module.exports = _classPrivateMethodGet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateMethodInitSpec.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateMethodInitSpec.js
new file mode 100644
index 0000000..821c8ed
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateMethodInitSpec.js
@@ -0,0 +1,5 @@
+var checkPrivateRedeclaration = require("./checkPrivateRedeclaration.js");
+function _classPrivateMethodInitSpec(e, a) {
+ checkPrivateRedeclaration(e, a), a.add(e);
+}
+module.exports = _classPrivateMethodInitSpec, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateMethodSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateMethodSet.js
new file mode 100644
index 0000000..a44fd78
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateMethodSet.js
@@ -0,0 +1,4 @@
+function _classPrivateMethodSet() {
+ throw new TypeError("attempted to reassign private method");
+}
+module.exports = _classPrivateMethodSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateSetter.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateSetter.js
new file mode 100644
index 0000000..494f81f
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classPrivateSetter.js
@@ -0,0 +1,5 @@
+var assertClassBrand = require("./assertClassBrand.js");
+function _classPrivateSetter(s, r, a, t) {
+ return r(assertClassBrand(s, a), t), t;
+}
+module.exports = _classPrivateSetter, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateFieldDestructureSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateFieldDestructureSet.js
new file mode 100644
index 0000000..2bb6e8b
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateFieldDestructureSet.js
@@ -0,0 +1,7 @@
+var classApplyDescriptorDestructureSet = require("./classApplyDescriptorDestructureSet.js");
+var assertClassBrand = require("./assertClassBrand.js");
+var classCheckPrivateStaticFieldDescriptor = require("./classCheckPrivateStaticFieldDescriptor.js");
+function _classStaticPrivateFieldDestructureSet(t, r, s) {
+ return assertClassBrand(r, t), classCheckPrivateStaticFieldDescriptor(s, "set"), classApplyDescriptorDestructureSet(t, s);
+}
+module.exports = _classStaticPrivateFieldDestructureSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecGet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecGet.js
new file mode 100644
index 0000000..eb2365f
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecGet.js
@@ -0,0 +1,7 @@
+var classApplyDescriptorGet = require("./classApplyDescriptorGet.js");
+var assertClassBrand = require("./assertClassBrand.js");
+var classCheckPrivateStaticFieldDescriptor = require("./classCheckPrivateStaticFieldDescriptor.js");
+function _classStaticPrivateFieldSpecGet(t, s, r) {
+ return assertClassBrand(s, t), classCheckPrivateStaticFieldDescriptor(r, "get"), classApplyDescriptorGet(t, r);
+}
+module.exports = _classStaticPrivateFieldSpecGet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecSet.js
new file mode 100644
index 0000000..7783cd8
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecSet.js
@@ -0,0 +1,7 @@
+var classApplyDescriptorSet = require("./classApplyDescriptorSet.js");
+var assertClassBrand = require("./assertClassBrand.js");
+var classCheckPrivateStaticFieldDescriptor = require("./classCheckPrivateStaticFieldDescriptor.js");
+function _classStaticPrivateFieldSpecSet(s, t, r, e) {
+ return assertClassBrand(t, s), classCheckPrivateStaticFieldDescriptor(r, "set"), classApplyDescriptorSet(s, r, e), e;
+}
+module.exports = _classStaticPrivateFieldSpecSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateMethodGet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateMethodGet.js
new file mode 100644
index 0000000..c895be5
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateMethodGet.js
@@ -0,0 +1,5 @@
+var assertClassBrand = require("./assertClassBrand.js");
+function _classStaticPrivateMethodGet(s, a, t) {
+ return assertClassBrand(a, s), t;
+}
+module.exports = _classStaticPrivateMethodGet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateMethodSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateMethodSet.js
new file mode 100644
index 0000000..72560e6
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/classStaticPrivateMethodSet.js
@@ -0,0 +1,4 @@
+function _classStaticPrivateMethodSet() {
+ throw new TypeError("attempted to set read only static private field");
+}
+module.exports = _classStaticPrivateMethodSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/construct.js b/mqtt-backend/node_modules/@babel/runtime/helpers/construct.js
new file mode 100644
index 0000000..aee8e70
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/construct.js
@@ -0,0 +1,10 @@
+var isNativeReflectConstruct = require("./isNativeReflectConstruct.js");
+var setPrototypeOf = require("./setPrototypeOf.js");
+function _construct(t, e, r) {
+ if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);
+ var o = [null];
+ o.push.apply(o, e);
+ var p = new (t.bind.apply(t, o))();
+ return r && setPrototypeOf(p, r.prototype), p;
+}
+module.exports = _construct, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/createClass.js b/mqtt-backend/node_modules/@babel/runtime/helpers/createClass.js
new file mode 100644
index 0000000..8757f9e
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/createClass.js
@@ -0,0 +1,13 @@
+var toPropertyKey = require("./toPropertyKey.js");
+function _defineProperties(e, r) {
+ for (var t = 0; t < r.length; t++) {
+ var o = r[t];
+ o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);
+ }
+}
+function _createClass(e, r, t) {
+ return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
+ writable: !1
+ }), e;
+}
+module.exports = _createClass, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/createForOfIteratorHelper.js b/mqtt-backend/node_modules/@babel/runtime/helpers/createForOfIteratorHelper.js
new file mode 100644
index 0000000..2778307
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/createForOfIteratorHelper.js
@@ -0,0 +1,50 @@
+var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");
+function _createForOfIteratorHelper(r, e) {
+ var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
+ if (!t) {
+ if (Array.isArray(r) || (t = unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
+ t && (r = t);
+ var _n = 0,
+ F = function F() {};
+ return {
+ s: F,
+ n: function n() {
+ return _n >= r.length ? {
+ done: !0
+ } : {
+ done: !1,
+ value: r[_n++]
+ };
+ },
+ e: function e(r) {
+ throw r;
+ },
+ f: F
+ };
+ }
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ }
+ var o,
+ a = !0,
+ u = !1;
+ return {
+ s: function s() {
+ t = t.call(r);
+ },
+ n: function n() {
+ var r = t.next();
+ return a = r.done, r;
+ },
+ e: function e(r) {
+ u = !0, o = r;
+ },
+ f: function f() {
+ try {
+ a || null == t["return"] || t["return"]();
+ } finally {
+ if (u) throw o;
+ }
+ }
+ };
+}
+module.exports = _createForOfIteratorHelper, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/createForOfIteratorHelperLoose.js b/mqtt-backend/node_modules/@babel/runtime/helpers/createForOfIteratorHelperLoose.js
new file mode 100644
index 0000000..bc81b1c
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/createForOfIteratorHelperLoose.js
@@ -0,0 +1,19 @@
+var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");
+function _createForOfIteratorHelperLoose(r, e) {
+ var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
+ if (t) return (t = t.call(r)).next.bind(t);
+ if (Array.isArray(r) || (t = unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
+ t && (r = t);
+ var o = 0;
+ return function () {
+ return o >= r.length ? {
+ done: !0
+ } : {
+ done: !1,
+ value: r[o++]
+ };
+ };
+ }
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+module.exports = _createForOfIteratorHelperLoose, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/createSuper.js b/mqtt-backend/node_modules/@babel/runtime/helpers/createSuper.js
new file mode 100644
index 0000000..b1869e6
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/createSuper.js
@@ -0,0 +1,16 @@
+var getPrototypeOf = require("./getPrototypeOf.js");
+var isNativeReflectConstruct = require("./isNativeReflectConstruct.js");
+var possibleConstructorReturn = require("./possibleConstructorReturn.js");
+function _createSuper(t) {
+ var r = isNativeReflectConstruct();
+ return function () {
+ var e,
+ o = getPrototypeOf(t);
+ if (r) {
+ var s = getPrototypeOf(this).constructor;
+ e = Reflect.construct(o, arguments, s);
+ } else e = o.apply(this, arguments);
+ return possibleConstructorReturn(this, e);
+ };
+}
+module.exports = _createSuper, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/decorate.js b/mqtt-backend/node_modules/@babel/runtime/helpers/decorate.js
new file mode 100644
index 0000000..bc22acf
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/decorate.js
@@ -0,0 +1,250 @@
+var toArray = require("./toArray.js");
+var toPropertyKey = require("./toPropertyKey.js");
+function _decorate(e, r, t, i) {
+ var o = _getDecoratorsApi();
+ if (i) for (var n = 0; n < i.length; n++) o = i[n](o);
+ var s = r(function (e) {
+ o.initializeInstanceElements(e, a.elements);
+ }, t),
+ a = o.decorateClass(_coalesceClassElements(s.d.map(_createElementDescriptor)), e);
+ return o.initializeClassElements(s.F, a.elements), o.runClassFinishers(s.F, a.finishers);
+}
+function _getDecoratorsApi() {
+ _getDecoratorsApi = function _getDecoratorsApi() {
+ return e;
+ };
+ var e = {
+ elementsDefinitionOrder: [["method"], ["field"]],
+ initializeInstanceElements: function initializeInstanceElements(e, r) {
+ ["method", "field"].forEach(function (t) {
+ r.forEach(function (r) {
+ r.kind === t && "own" === r.placement && this.defineClassElement(e, r);
+ }, this);
+ }, this);
+ },
+ initializeClassElements: function initializeClassElements(e, r) {
+ var t = e.prototype;
+ ["method", "field"].forEach(function (i) {
+ r.forEach(function (r) {
+ var o = r.placement;
+ if (r.kind === i && ("static" === o || "prototype" === o)) {
+ var n = "static" === o ? e : t;
+ this.defineClassElement(n, r);
+ }
+ }, this);
+ }, this);
+ },
+ defineClassElement: function defineClassElement(e, r) {
+ var t = r.descriptor;
+ if ("field" === r.kind) {
+ var i = r.initializer;
+ t = {
+ enumerable: t.enumerable,
+ writable: t.writable,
+ configurable: t.configurable,
+ value: void 0 === i ? void 0 : i.call(e)
+ };
+ }
+ Object.defineProperty(e, r.key, t);
+ },
+ decorateClass: function decorateClass(e, r) {
+ var t = [],
+ i = [],
+ o = {
+ "static": [],
+ prototype: [],
+ own: []
+ };
+ if (e.forEach(function (e) {
+ this.addElementPlacement(e, o);
+ }, this), e.forEach(function (e) {
+ if (!_hasDecorators(e)) return t.push(e);
+ var r = this.decorateElement(e, o);
+ t.push(r.element), t.push.apply(t, r.extras), i.push.apply(i, r.finishers);
+ }, this), !r) return {
+ elements: t,
+ finishers: i
+ };
+ var n = this.decorateConstructor(t, r);
+ return i.push.apply(i, n.finishers), n.finishers = i, n;
+ },
+ addElementPlacement: function addElementPlacement(e, r, t) {
+ var i = r[e.placement];
+ if (!t && -1 !== i.indexOf(e.key)) throw new TypeError("Duplicated element (" + e.key + ")");
+ i.push(e.key);
+ },
+ decorateElement: function decorateElement(e, r) {
+ for (var t = [], i = [], o = e.decorators, n = o.length - 1; n >= 0; n--) {
+ var s = r[e.placement];
+ s.splice(s.indexOf(e.key), 1);
+ var a = this.fromElementDescriptor(e),
+ l = this.toElementFinisherExtras((0, o[n])(a) || a);
+ e = l.element, this.addElementPlacement(e, r), l.finisher && i.push(l.finisher);
+ var c = l.extras;
+ if (c) {
+ for (var p = 0; p < c.length; p++) this.addElementPlacement(c[p], r);
+ t.push.apply(t, c);
+ }
+ }
+ return {
+ element: e,
+ finishers: i,
+ extras: t
+ };
+ },
+ decorateConstructor: function decorateConstructor(e, r) {
+ for (var t = [], i = r.length - 1; i >= 0; i--) {
+ var o = this.fromClassDescriptor(e),
+ n = this.toClassDescriptor((0, r[i])(o) || o);
+ if (void 0 !== n.finisher && t.push(n.finisher), void 0 !== n.elements) {
+ e = n.elements;
+ for (var s = 0; s < e.length - 1; s++) for (var a = s + 1; a < e.length; a++) if (e[s].key === e[a].key && e[s].placement === e[a].placement) throw new TypeError("Duplicated element (" + e[s].key + ")");
+ }
+ }
+ return {
+ elements: e,
+ finishers: t
+ };
+ },
+ fromElementDescriptor: function fromElementDescriptor(e) {
+ var r = {
+ kind: e.kind,
+ key: e.key,
+ placement: e.placement,
+ descriptor: e.descriptor
+ };
+ return Object.defineProperty(r, Symbol.toStringTag, {
+ value: "Descriptor",
+ configurable: !0
+ }), "field" === e.kind && (r.initializer = e.initializer), r;
+ },
+ toElementDescriptors: function toElementDescriptors(e) {
+ if (void 0 !== e) return toArray(e).map(function (e) {
+ var r = this.toElementDescriptor(e);
+ return this.disallowProperty(e, "finisher", "An element descriptor"), this.disallowProperty(e, "extras", "An element descriptor"), r;
+ }, this);
+ },
+ toElementDescriptor: function toElementDescriptor(e) {
+ var r = e.kind + "";
+ if ("method" !== r && "field" !== r) throw new TypeError('An element descriptor\'s .kind property must be either "method" or "field", but a decorator created an element descriptor with .kind "' + r + '"');
+ var t = toPropertyKey(e.key),
+ i = e.placement + "";
+ if ("static" !== i && "prototype" !== i && "own" !== i) throw new TypeError('An element descriptor\'s .placement property must be one of "static", "prototype" or "own", but a decorator created an element descriptor with .placement "' + i + '"');
+ var o = e.descriptor;
+ this.disallowProperty(e, "elements", "An element descriptor");
+ var n = {
+ kind: r,
+ key: t,
+ placement: i,
+ descriptor: Object.assign({}, o)
+ };
+ return "field" !== r ? this.disallowProperty(e, "initializer", "A method descriptor") : (this.disallowProperty(o, "get", "The property descriptor of a field descriptor"), this.disallowProperty(o, "set", "The property descriptor of a field descriptor"), this.disallowProperty(o, "value", "The property descriptor of a field descriptor"), n.initializer = e.initializer), n;
+ },
+ toElementFinisherExtras: function toElementFinisherExtras(e) {
+ return {
+ element: this.toElementDescriptor(e),
+ finisher: _optionalCallableProperty(e, "finisher"),
+ extras: this.toElementDescriptors(e.extras)
+ };
+ },
+ fromClassDescriptor: function fromClassDescriptor(e) {
+ var r = {
+ kind: "class",
+ elements: e.map(this.fromElementDescriptor, this)
+ };
+ return Object.defineProperty(r, Symbol.toStringTag, {
+ value: "Descriptor",
+ configurable: !0
+ }), r;
+ },
+ toClassDescriptor: function toClassDescriptor(e) {
+ var r = e.kind + "";
+ if ("class" !== r) throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator created a class descriptor with .kind "' + r + '"');
+ this.disallowProperty(e, "key", "A class descriptor"), this.disallowProperty(e, "placement", "A class descriptor"), this.disallowProperty(e, "descriptor", "A class descriptor"), this.disallowProperty(e, "initializer", "A class descriptor"), this.disallowProperty(e, "extras", "A class descriptor");
+ var t = _optionalCallableProperty(e, "finisher");
+ return {
+ elements: this.toElementDescriptors(e.elements),
+ finisher: t
+ };
+ },
+ runClassFinishers: function runClassFinishers(e, r) {
+ for (var t = 0; t < r.length; t++) {
+ var i = (0, r[t])(e);
+ if (void 0 !== i) {
+ if ("function" != typeof i) throw new TypeError("Finishers must return a constructor.");
+ e = i;
+ }
+ }
+ return e;
+ },
+ disallowProperty: function disallowProperty(e, r, t) {
+ if (void 0 !== e[r]) throw new TypeError(t + " can't have a ." + r + " property.");
+ }
+ };
+ return e;
+}
+function _createElementDescriptor(e) {
+ var r,
+ t = toPropertyKey(e.key);
+ "method" === e.kind ? r = {
+ value: e.value,
+ writable: !0,
+ configurable: !0,
+ enumerable: !1
+ } : "get" === e.kind ? r = {
+ get: e.value,
+ configurable: !0,
+ enumerable: !1
+ } : "set" === e.kind ? r = {
+ set: e.value,
+ configurable: !0,
+ enumerable: !1
+ } : "field" === e.kind && (r = {
+ configurable: !0,
+ writable: !0,
+ enumerable: !0
+ });
+ var i = {
+ kind: "field" === e.kind ? "field" : "method",
+ key: t,
+ placement: e["static"] ? "static" : "field" === e.kind ? "own" : "prototype",
+ descriptor: r
+ };
+ return e.decorators && (i.decorators = e.decorators), "field" === e.kind && (i.initializer = e.value), i;
+}
+function _coalesceGetterSetter(e, r) {
+ void 0 !== e.descriptor.get ? r.descriptor.get = e.descriptor.get : r.descriptor.set = e.descriptor.set;
+}
+function _coalesceClassElements(e) {
+ for (var r = [], isSameElement = function isSameElement(e) {
+ return "method" === e.kind && e.key === o.key && e.placement === o.placement;
+ }, t = 0; t < e.length; t++) {
+ var i,
+ o = e[t];
+ if ("method" === o.kind && (i = r.find(isSameElement))) {
+ if (_isDataDescriptor(o.descriptor) || _isDataDescriptor(i.descriptor)) {
+ if (_hasDecorators(o) || _hasDecorators(i)) throw new ReferenceError("Duplicated methods (" + o.key + ") can't be decorated.");
+ i.descriptor = o.descriptor;
+ } else {
+ if (_hasDecorators(o)) {
+ if (_hasDecorators(i)) throw new ReferenceError("Decorators can't be placed on different accessors with for the same property (" + o.key + ").");
+ i.decorators = o.decorators;
+ }
+ _coalesceGetterSetter(o, i);
+ }
+ } else r.push(o);
+ }
+ return r;
+}
+function _hasDecorators(e) {
+ return e.decorators && e.decorators.length;
+}
+function _isDataDescriptor(e) {
+ return void 0 !== e && !(void 0 === e.value && void 0 === e.writable);
+}
+function _optionalCallableProperty(e, r) {
+ var t = e[r];
+ if (void 0 !== t && "function" != typeof t) throw new TypeError("Expected '" + r + "' to be a function");
+ return t;
+}
+module.exports = _decorate, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/defaults.js b/mqtt-backend/node_modules/@babel/runtime/helpers/defaults.js
new file mode 100644
index 0000000..dfdbbb0
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/defaults.js
@@ -0,0 +1,9 @@
+function _defaults(e, r) {
+ for (var t = Object.getOwnPropertyNames(r), o = 0; o < t.length; o++) {
+ var n = t[o],
+ a = Object.getOwnPropertyDescriptor(r, n);
+ a && a.configurable && void 0 === e[n] && Object.defineProperty(e, n, a);
+ }
+ return e;
+}
+module.exports = _defaults, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/defineAccessor.js b/mqtt-backend/node_modules/@babel/runtime/helpers/defineAccessor.js
new file mode 100644
index 0000000..dc065f0
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/defineAccessor.js
@@ -0,0 +1,8 @@
+function _defineAccessor(e, r, n, t) {
+ var c = {
+ configurable: !0,
+ enumerable: !0
+ };
+ return c[e] = t, Object.defineProperty(r, n, c);
+}
+module.exports = _defineAccessor, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/defineEnumerableProperties.js b/mqtt-backend/node_modules/@babel/runtime/helpers/defineEnumerableProperties.js
new file mode 100644
index 0000000..ab9f43c
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/defineEnumerableProperties.js
@@ -0,0 +1,12 @@
+function _defineEnumerableProperties(e, r) {
+ for (var t in r) {
+ var n = r[t];
+ n.configurable = n.enumerable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, t, n);
+ }
+ if (Object.getOwnPropertySymbols) for (var a = Object.getOwnPropertySymbols(r), b = 0; b < a.length; b++) {
+ var i = a[b];
+ (n = r[i]).configurable = n.enumerable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, i, n);
+ }
+ return e;
+}
+module.exports = _defineEnumerableProperties, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/defineProperty.js b/mqtt-backend/node_modules/@babel/runtime/helpers/defineProperty.js
new file mode 100644
index 0000000..2c2ff1e
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/defineProperty.js
@@ -0,0 +1,10 @@
+var toPropertyKey = require("./toPropertyKey.js");
+function _defineProperty(e, r, t) {
+ return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
+ value: t,
+ enumerable: !0,
+ configurable: !0,
+ writable: !0
+ }) : e[r] = t, e;
+}
+module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/dispose.js b/mqtt-backend/node_modules/@babel/runtime/helpers/dispose.js
new file mode 100644
index 0000000..c20193c
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/dispose.js
@@ -0,0 +1,28 @@
+function dispose_SuppressedError(r, e) {
+ return "undefined" != typeof SuppressedError ? dispose_SuppressedError = SuppressedError : (dispose_SuppressedError = function dispose_SuppressedError(r, e) {
+ this.suppressed = e, this.error = r, this.stack = Error().stack;
+ }, dispose_SuppressedError.prototype = Object.create(Error.prototype, {
+ constructor: {
+ value: dispose_SuppressedError,
+ writable: !0,
+ configurable: !0
+ }
+ })), new dispose_SuppressedError(r, e);
+}
+function _dispose(r, e, s) {
+ function next() {
+ for (; r.length > 0;) try {
+ var o = r.pop(),
+ p = o.d.call(o.v);
+ if (o.a) return Promise.resolve(p).then(next, err);
+ } catch (r) {
+ return err(r);
+ }
+ if (s) throw e;
+ }
+ function err(r) {
+ return e = s ? new dispose_SuppressedError(e, r) : r, s = !0, next();
+ }
+ return next();
+}
+module.exports = _dispose, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/AwaitValue.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/AwaitValue.js
new file mode 100644
index 0000000..6f210c9
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/AwaitValue.js
@@ -0,0 +1,4 @@
+function _AwaitValue(t) {
+ this.wrapped = t;
+}
+export { _AwaitValue as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/OverloadYield.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/OverloadYield.js
new file mode 100644
index 0000000..d7753a6
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/OverloadYield.js
@@ -0,0 +1,4 @@
+function _OverloadYield(e, d) {
+ this.v = e, this.k = d;
+}
+export { _OverloadYield as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js
new file mode 100644
index 0000000..0f33483
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js
@@ -0,0 +1,9 @@
+function _applyDecoratedDescriptor(i, e, r, n, l) {
+ var a = {};
+ return Object.keys(n).forEach(function (i) {
+ a[i] = n[i];
+ }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) {
+ return n(i, e, r) || r;
+ }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a;
+}
+export { _applyDecoratedDescriptor as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs.js
new file mode 100644
index 0000000..2b75dfd
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs.js
@@ -0,0 +1,236 @@
+import _typeof from "./typeof.js";
+import setFunctionName from "./setFunctionName.js";
+import toPropertyKey from "./toPropertyKey.js";
+function old_createMetadataMethodsForProperty(e, t, a, r) {
+ return {
+ getMetadata: function getMetadata(o) {
+ old_assertNotFinished(r, "getMetadata"), old_assertMetadataKey(o);
+ var i = e[o];
+ if (void 0 !== i) if (1 === t) {
+ var n = i["public"];
+ if (void 0 !== n) return n[a];
+ } else if (2 === t) {
+ var l = i["private"];
+ if (void 0 !== l) return l.get(a);
+ } else if (Object.hasOwnProperty.call(i, "constructor")) return i.constructor;
+ },
+ setMetadata: function setMetadata(o, i) {
+ old_assertNotFinished(r, "setMetadata"), old_assertMetadataKey(o);
+ var n = e[o];
+ if (void 0 === n && (n = e[o] = {}), 1 === t) {
+ var l = n["public"];
+ void 0 === l && (l = n["public"] = {}), l[a] = i;
+ } else if (2 === t) {
+ var s = n.priv;
+ void 0 === s && (s = n["private"] = new Map()), s.set(a, i);
+ } else n.constructor = i;
+ }
+ };
+}
+function old_convertMetadataMapToFinal(e, t) {
+ var a = e[Symbol.metadata || Symbol["for"]("Symbol.metadata")],
+ r = Object.getOwnPropertySymbols(t);
+ if (0 !== r.length) {
+ for (var o = 0; o < r.length; o++) {
+ var i = r[o],
+ n = t[i],
+ l = a ? a[i] : null,
+ s = n["public"],
+ c = l ? l["public"] : null;
+ s && c && Object.setPrototypeOf(s, c);
+ var d = n["private"];
+ if (d) {
+ var u = Array.from(d.values()),
+ f = l ? l["private"] : null;
+ f && (u = u.concat(f)), n["private"] = u;
+ }
+ l && Object.setPrototypeOf(n, l);
+ }
+ a && Object.setPrototypeOf(t, a), e[Symbol.metadata || Symbol["for"]("Symbol.metadata")] = t;
+ }
+}
+function old_createAddInitializerMethod(e, t) {
+ return function (a) {
+ old_assertNotFinished(t, "addInitializer"), old_assertCallable(a, "An initializer"), e.push(a);
+ };
+}
+function old_memberDec(e, t, a, r, o, i, n, l, s) {
+ var c;
+ switch (i) {
+ case 1:
+ c = "accessor";
+ break;
+ case 2:
+ c = "method";
+ break;
+ case 3:
+ c = "getter";
+ break;
+ case 4:
+ c = "setter";
+ break;
+ default:
+ c = "field";
+ }
+ var d,
+ u,
+ f = {
+ kind: c,
+ name: l ? "#" + t : toPropertyKey(t),
+ isStatic: n,
+ isPrivate: l
+ },
+ p = {
+ v: !1
+ };
+ if (0 !== i && (f.addInitializer = old_createAddInitializerMethod(o, p)), l) {
+ d = 2, u = Symbol(t);
+ var v = {};
+ 0 === i ? (v.get = a.get, v.set = a.set) : 2 === i ? v.get = function () {
+ return a.value;
+ } : (1 !== i && 3 !== i || (v.get = function () {
+ return a.get.call(this);
+ }), 1 !== i && 4 !== i || (v.set = function (e) {
+ a.set.call(this, e);
+ })), f.access = v;
+ } else d = 1, u = t;
+ try {
+ return e(s, Object.assign(f, old_createMetadataMethodsForProperty(r, d, u, p)));
+ } finally {
+ p.v = !0;
+ }
+}
+function old_assertNotFinished(e, t) {
+ if (e.v) throw Error("attempted to call " + t + " after decoration was finished");
+}
+function old_assertMetadataKey(e) {
+ if ("symbol" != _typeof(e)) throw new TypeError("Metadata keys must be symbols, received: " + e);
+}
+function old_assertCallable(e, t) {
+ if ("function" != typeof e) throw new TypeError(t + " must be a function");
+}
+function old_assertValidReturnValue(e, t) {
+ var a = _typeof(t);
+ if (1 === e) {
+ if ("object" !== a || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+ void 0 !== t.get && old_assertCallable(t.get, "accessor.get"), void 0 !== t.set && old_assertCallable(t.set, "accessor.set"), void 0 !== t.init && old_assertCallable(t.init, "accessor.init"), void 0 !== t.initializer && old_assertCallable(t.initializer, "accessor.initializer");
+ } else if ("function" !== a) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+}
+function old_getInit(e) {
+ var t;
+ return null == (t = e.init) && (t = e.initializer) && void 0 !== console && console.warn(".initializer has been renamed to .init as of March 2022"), t;
+}
+function old_applyMemberDec(e, t, a, r, o, i, n, l, s) {
+ var c,
+ d,
+ u,
+ f,
+ p,
+ v,
+ y,
+ h = a[0];
+ if (n ? (0 === o || 1 === o ? (c = {
+ get: a[3],
+ set: a[4]
+ }, u = "get") : 3 === o ? (c = {
+ get: a[3]
+ }, u = "get") : 4 === o ? (c = {
+ set: a[3]
+ }, u = "set") : c = {
+ value: a[3]
+ }, 0 !== o && (1 === o && setFunctionName(a[4], "#" + r, "set"), setFunctionName(a[3], "#" + r, u))) : 0 !== o && (c = Object.getOwnPropertyDescriptor(t, r)), 1 === o ? f = {
+ get: c.get,
+ set: c.set
+ } : 2 === o ? f = c.value : 3 === o ? f = c.get : 4 === o && (f = c.set), "function" == typeof h) void 0 !== (p = old_memberDec(h, r, c, l, s, o, i, n, f)) && (old_assertValidReturnValue(o, p), 0 === o ? d = p : 1 === o ? (d = old_getInit(p), v = p.get || f.get, y = p.set || f.set, f = {
+ get: v,
+ set: y
+ }) : f = p);else for (var m = h.length - 1; m >= 0; m--) {
+ var b;
+ void 0 !== (p = old_memberDec(h[m], r, c, l, s, o, i, n, f)) && (old_assertValidReturnValue(o, p), 0 === o ? b = p : 1 === o ? (b = old_getInit(p), v = p.get || f.get, y = p.set || f.set, f = {
+ get: v,
+ set: y
+ }) : f = p, void 0 !== b && (void 0 === d ? d = b : "function" == typeof d ? d = [d, b] : d.push(b)));
+ }
+ if (0 === o || 1 === o) {
+ if (void 0 === d) d = function d(e, t) {
+ return t;
+ };else if ("function" != typeof d) {
+ var g = d;
+ d = function d(e, t) {
+ for (var a = t, r = 0; r < g.length; r++) a = g[r].call(e, a);
+ return a;
+ };
+ } else {
+ var _ = d;
+ d = function d(e, t) {
+ return _.call(e, t);
+ };
+ }
+ e.push(d);
+ }
+ 0 !== o && (1 === o ? (c.get = f.get, c.set = f.set) : 2 === o ? c.value = f : 3 === o ? c.get = f : 4 === o && (c.set = f), n ? 1 === o ? (e.push(function (e, t) {
+ return f.get.call(e, t);
+ }), e.push(function (e, t) {
+ return f.set.call(e, t);
+ })) : 2 === o ? e.push(f) : e.push(function (e, t) {
+ return f.call(e, t);
+ }) : Object.defineProperty(t, r, c));
+}
+function old_applyMemberDecs(e, t, a, r, o) {
+ for (var i, n, l = new Map(), s = new Map(), c = 0; c < o.length; c++) {
+ var d = o[c];
+ if (Array.isArray(d)) {
+ var u,
+ f,
+ p,
+ v = d[1],
+ y = d[2],
+ h = d.length > 3,
+ m = v >= 5;
+ if (m ? (u = t, f = r, 0 != (v -= 5) && (p = n = n || [])) : (u = t.prototype, f = a, 0 !== v && (p = i = i || [])), 0 !== v && !h) {
+ var b = m ? s : l,
+ g = b.get(y) || 0;
+ if (!0 === g || 3 === g && 4 !== v || 4 === g && 3 !== v) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + y);
+ !g && v > 2 ? b.set(y, v) : b.set(y, !0);
+ }
+ old_applyMemberDec(e, u, d, y, v, m, h, f, p);
+ }
+ }
+ old_pushInitializers(e, i), old_pushInitializers(e, n);
+}
+function old_pushInitializers(e, t) {
+ t && e.push(function (e) {
+ for (var a = 0; a < t.length; a++) t[a].call(e);
+ return e;
+ });
+}
+function old_applyClassDecs(e, t, a, r) {
+ if (r.length > 0) {
+ for (var o = [], i = t, n = t.name, l = r.length - 1; l >= 0; l--) {
+ var s = {
+ v: !1
+ };
+ try {
+ var c = Object.assign({
+ kind: "class",
+ name: n,
+ addInitializer: old_createAddInitializerMethod(o, s)
+ }, old_createMetadataMethodsForProperty(a, 0, n, s)),
+ d = r[l](i, c);
+ } finally {
+ s.v = !0;
+ }
+ void 0 !== d && (old_assertValidReturnValue(10, d), i = d);
+ }
+ e.push(i, function () {
+ for (var e = 0; e < o.length; e++) o[e].call(i);
+ });
+ }
+}
+function applyDecs(e, t, a) {
+ var r = [],
+ o = {},
+ i = {};
+ return old_applyMemberDecs(r, e, i, o, t), old_convertMetadataMapToFinal(e.prototype, i), old_applyClassDecs(r, e, o, a), old_convertMetadataMapToFinal(e, o), r;
+}
+export { applyDecs as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2203.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2203.js
new file mode 100644
index 0000000..8a9d7c5
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2203.js
@@ -0,0 +1,184 @@
+import _typeof from "./typeof.js";
+function applyDecs2203Factory() {
+ function createAddInitializerMethod(e, t) {
+ return function (r) {
+ !function (e) {
+ if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+ }(t), assertCallable(r, "An initializer"), e.push(r);
+ };
+ }
+ function memberDec(e, t, r, a, n, i, s, o) {
+ var c;
+ switch (n) {
+ case 1:
+ c = "accessor";
+ break;
+ case 2:
+ c = "method";
+ break;
+ case 3:
+ c = "getter";
+ break;
+ case 4:
+ c = "setter";
+ break;
+ default:
+ c = "field";
+ }
+ var l,
+ u,
+ f = {
+ kind: c,
+ name: s ? "#" + t : t,
+ "static": i,
+ "private": s
+ },
+ p = {
+ v: !1
+ };
+ 0 !== n && (f.addInitializer = createAddInitializerMethod(a, p)), 0 === n ? s ? (l = r.get, u = r.set) : (l = function l() {
+ return this[t];
+ }, u = function u(e) {
+ this[t] = e;
+ }) : 2 === n ? l = function l() {
+ return r.value;
+ } : (1 !== n && 3 !== n || (l = function l() {
+ return r.get.call(this);
+ }), 1 !== n && 4 !== n || (u = function u(e) {
+ r.set.call(this, e);
+ })), f.access = l && u ? {
+ get: l,
+ set: u
+ } : l ? {
+ get: l
+ } : {
+ set: u
+ };
+ try {
+ return e(o, f);
+ } finally {
+ p.v = !0;
+ }
+ }
+ function assertCallable(e, t) {
+ if ("function" != typeof e) throw new TypeError(t + " must be a function");
+ }
+ function assertValidReturnValue(e, t) {
+ var r = _typeof(t);
+ if (1 === e) {
+ if ("object" !== r || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+ void 0 !== t.get && assertCallable(t.get, "accessor.get"), void 0 !== t.set && assertCallable(t.set, "accessor.set"), void 0 !== t.init && assertCallable(t.init, "accessor.init");
+ } else if ("function" !== r) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+ }
+ function applyMemberDec(e, t, r, a, n, i, s, o) {
+ var c,
+ l,
+ u,
+ f,
+ p,
+ d,
+ h = r[0];
+ if (s ? c = 0 === n || 1 === n ? {
+ get: r[3],
+ set: r[4]
+ } : 3 === n ? {
+ get: r[3]
+ } : 4 === n ? {
+ set: r[3]
+ } : {
+ value: r[3]
+ } : 0 !== n && (c = Object.getOwnPropertyDescriptor(t, a)), 1 === n ? u = {
+ get: c.get,
+ set: c.set
+ } : 2 === n ? u = c.value : 3 === n ? u = c.get : 4 === n && (u = c.set), "function" == typeof h) void 0 !== (f = memberDec(h, a, c, o, n, i, s, u)) && (assertValidReturnValue(n, f), 0 === n ? l = f : 1 === n ? (l = f.init, p = f.get || u.get, d = f.set || u.set, u = {
+ get: p,
+ set: d
+ }) : u = f);else for (var v = h.length - 1; v >= 0; v--) {
+ var g;
+ void 0 !== (f = memberDec(h[v], a, c, o, n, i, s, u)) && (assertValidReturnValue(n, f), 0 === n ? g = f : 1 === n ? (g = f.init, p = f.get || u.get, d = f.set || u.set, u = {
+ get: p,
+ set: d
+ }) : u = f, void 0 !== g && (void 0 === l ? l = g : "function" == typeof l ? l = [l, g] : l.push(g)));
+ }
+ if (0 === n || 1 === n) {
+ if (void 0 === l) l = function l(e, t) {
+ return t;
+ };else if ("function" != typeof l) {
+ var y = l;
+ l = function l(e, t) {
+ for (var r = t, a = 0; a < y.length; a++) r = y[a].call(e, r);
+ return r;
+ };
+ } else {
+ var m = l;
+ l = function l(e, t) {
+ return m.call(e, t);
+ };
+ }
+ e.push(l);
+ }
+ 0 !== n && (1 === n ? (c.get = u.get, c.set = u.set) : 2 === n ? c.value = u : 3 === n ? c.get = u : 4 === n && (c.set = u), s ? 1 === n ? (e.push(function (e, t) {
+ return u.get.call(e, t);
+ }), e.push(function (e, t) {
+ return u.set.call(e, t);
+ })) : 2 === n ? e.push(u) : e.push(function (e, t) {
+ return u.call(e, t);
+ }) : Object.defineProperty(t, a, c));
+ }
+ function pushInitializers(e, t) {
+ t && e.push(function (e) {
+ for (var r = 0; r < t.length; r++) t[r].call(e);
+ return e;
+ });
+ }
+ return function (e, t, r) {
+ var a = [];
+ return function (e, t, r) {
+ for (var a, n, i = new Map(), s = new Map(), o = 0; o < r.length; o++) {
+ var c = r[o];
+ if (Array.isArray(c)) {
+ var l,
+ u,
+ f = c[1],
+ p = c[2],
+ d = c.length > 3,
+ h = f >= 5;
+ if (h ? (l = t, 0 != (f -= 5) && (u = n = n || [])) : (l = t.prototype, 0 !== f && (u = a = a || [])), 0 !== f && !d) {
+ var v = h ? s : i,
+ g = v.get(p) || 0;
+ if (!0 === g || 3 === g && 4 !== f || 4 === g && 3 !== f) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + p);
+ !g && f > 2 ? v.set(p, f) : v.set(p, !0);
+ }
+ applyMemberDec(e, l, c, p, f, h, d, u);
+ }
+ }
+ pushInitializers(e, a), pushInitializers(e, n);
+ }(a, e, t), function (e, t, r) {
+ if (r.length > 0) {
+ for (var a = [], n = t, i = t.name, s = r.length - 1; s >= 0; s--) {
+ var o = {
+ v: !1
+ };
+ try {
+ var c = r[s](n, {
+ kind: "class",
+ name: i,
+ addInitializer: createAddInitializerMethod(a, o)
+ });
+ } finally {
+ o.v = !0;
+ }
+ void 0 !== c && (assertValidReturnValue(10, c), n = c);
+ }
+ e.push(n, function () {
+ for (var e = 0; e < a.length; e++) a[e].call(n);
+ });
+ }
+ }(a, e, r), a;
+ };
+}
+var applyDecs2203Impl;
+function applyDecs2203(e, t, r) {
+ return (applyDecs2203Impl = applyDecs2203Impl || applyDecs2203Factory())(e, t, r);
+}
+export { applyDecs2203 as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2203R.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2203R.js
new file mode 100644
index 0000000..bccc42e
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2203R.js
@@ -0,0 +1,191 @@
+import _typeof from "./typeof.js";
+import setFunctionName from "./setFunctionName.js";
+import toPropertyKey from "./toPropertyKey.js";
+function applyDecs2203RFactory() {
+ function createAddInitializerMethod(e, t) {
+ return function (r) {
+ !function (e) {
+ if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+ }(t), assertCallable(r, "An initializer"), e.push(r);
+ };
+ }
+ function memberDec(e, t, r, n, a, i, o, s) {
+ var c;
+ switch (a) {
+ case 1:
+ c = "accessor";
+ break;
+ case 2:
+ c = "method";
+ break;
+ case 3:
+ c = "getter";
+ break;
+ case 4:
+ c = "setter";
+ break;
+ default:
+ c = "field";
+ }
+ var l,
+ u,
+ f = {
+ kind: c,
+ name: o ? "#" + t : toPropertyKey(t),
+ "static": i,
+ "private": o
+ },
+ p = {
+ v: !1
+ };
+ 0 !== a && (f.addInitializer = createAddInitializerMethod(n, p)), 0 === a ? o ? (l = r.get, u = r.set) : (l = function l() {
+ return this[t];
+ }, u = function u(e) {
+ this[t] = e;
+ }) : 2 === a ? l = function l() {
+ return r.value;
+ } : (1 !== a && 3 !== a || (l = function l() {
+ return r.get.call(this);
+ }), 1 !== a && 4 !== a || (u = function u(e) {
+ r.set.call(this, e);
+ })), f.access = l && u ? {
+ get: l,
+ set: u
+ } : l ? {
+ get: l
+ } : {
+ set: u
+ };
+ try {
+ return e(s, f);
+ } finally {
+ p.v = !0;
+ }
+ }
+ function assertCallable(e, t) {
+ if ("function" != typeof e) throw new TypeError(t + " must be a function");
+ }
+ function assertValidReturnValue(e, t) {
+ var r = _typeof(t);
+ if (1 === e) {
+ if ("object" !== r || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+ void 0 !== t.get && assertCallable(t.get, "accessor.get"), void 0 !== t.set && assertCallable(t.set, "accessor.set"), void 0 !== t.init && assertCallable(t.init, "accessor.init");
+ } else if ("function" !== r) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+ }
+ function applyMemberDec(e, t, r, n, a, i, o, s) {
+ var c,
+ l,
+ u,
+ f,
+ p,
+ d,
+ h,
+ v = r[0];
+ if (o ? (0 === a || 1 === a ? (c = {
+ get: r[3],
+ set: r[4]
+ }, u = "get") : 3 === a ? (c = {
+ get: r[3]
+ }, u = "get") : 4 === a ? (c = {
+ set: r[3]
+ }, u = "set") : c = {
+ value: r[3]
+ }, 0 !== a && (1 === a && setFunctionName(r[4], "#" + n, "set"), setFunctionName(r[3], "#" + n, u))) : 0 !== a && (c = Object.getOwnPropertyDescriptor(t, n)), 1 === a ? f = {
+ get: c.get,
+ set: c.set
+ } : 2 === a ? f = c.value : 3 === a ? f = c.get : 4 === a && (f = c.set), "function" == typeof v) void 0 !== (p = memberDec(v, n, c, s, a, i, o, f)) && (assertValidReturnValue(a, p), 0 === a ? l = p : 1 === a ? (l = p.init, d = p.get || f.get, h = p.set || f.set, f = {
+ get: d,
+ set: h
+ }) : f = p);else for (var g = v.length - 1; g >= 0; g--) {
+ var y;
+ void 0 !== (p = memberDec(v[g], n, c, s, a, i, o, f)) && (assertValidReturnValue(a, p), 0 === a ? y = p : 1 === a ? (y = p.init, d = p.get || f.get, h = p.set || f.set, f = {
+ get: d,
+ set: h
+ }) : f = p, void 0 !== y && (void 0 === l ? l = y : "function" == typeof l ? l = [l, y] : l.push(y)));
+ }
+ if (0 === a || 1 === a) {
+ if (void 0 === l) l = function l(e, t) {
+ return t;
+ };else if ("function" != typeof l) {
+ var m = l;
+ l = function l(e, t) {
+ for (var r = t, n = 0; n < m.length; n++) r = m[n].call(e, r);
+ return r;
+ };
+ } else {
+ var b = l;
+ l = function l(e, t) {
+ return b.call(e, t);
+ };
+ }
+ e.push(l);
+ }
+ 0 !== a && (1 === a ? (c.get = f.get, c.set = f.set) : 2 === a ? c.value = f : 3 === a ? c.get = f : 4 === a && (c.set = f), o ? 1 === a ? (e.push(function (e, t) {
+ return f.get.call(e, t);
+ }), e.push(function (e, t) {
+ return f.set.call(e, t);
+ })) : 2 === a ? e.push(f) : e.push(function (e, t) {
+ return f.call(e, t);
+ }) : Object.defineProperty(t, n, c));
+ }
+ function applyMemberDecs(e, t) {
+ for (var r, n, a = [], i = new Map(), o = new Map(), s = 0; s < t.length; s++) {
+ var c = t[s];
+ if (Array.isArray(c)) {
+ var l,
+ u,
+ f = c[1],
+ p = c[2],
+ d = c.length > 3,
+ h = f >= 5;
+ if (h ? (l = e, 0 != (f -= 5) && (u = n = n || [])) : (l = e.prototype, 0 !== f && (u = r = r || [])), 0 !== f && !d) {
+ var v = h ? o : i,
+ g = v.get(p) || 0;
+ if (!0 === g || 3 === g && 4 !== f || 4 === g && 3 !== f) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + p);
+ !g && f > 2 ? v.set(p, f) : v.set(p, !0);
+ }
+ applyMemberDec(a, l, c, p, f, h, d, u);
+ }
+ }
+ return pushInitializers(a, r), pushInitializers(a, n), a;
+ }
+ function pushInitializers(e, t) {
+ t && e.push(function (e) {
+ for (var r = 0; r < t.length; r++) t[r].call(e);
+ return e;
+ });
+ }
+ return function (e, t, r) {
+ return {
+ e: applyMemberDecs(e, t),
+ get c() {
+ return function (e, t) {
+ if (t.length > 0) {
+ for (var r = [], n = e, a = e.name, i = t.length - 1; i >= 0; i--) {
+ var o = {
+ v: !1
+ };
+ try {
+ var s = t[i](n, {
+ kind: "class",
+ name: a,
+ addInitializer: createAddInitializerMethod(r, o)
+ });
+ } finally {
+ o.v = !0;
+ }
+ void 0 !== s && (assertValidReturnValue(10, s), n = s);
+ }
+ return [n, function () {
+ for (var e = 0; e < r.length; e++) r[e].call(n);
+ }];
+ }
+ }(e, r);
+ }
+ };
+ };
+}
+function applyDecs2203R(e, t, r) {
+ return (applyDecs2203R = applyDecs2203RFactory())(e, t, r);
+}
+export { applyDecs2203R as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2301.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2301.js
new file mode 100644
index 0000000..8d110f7
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2301.js
@@ -0,0 +1,222 @@
+import _typeof from "./typeof.js";
+import checkInRHS from "./checkInRHS.js";
+import setFunctionName from "./setFunctionName.js";
+import toPropertyKey from "./toPropertyKey.js";
+function applyDecs2301Factory() {
+ function createAddInitializerMethod(e, t) {
+ return function (r) {
+ !function (e) {
+ if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+ }(t), assertCallable(r, "An initializer"), e.push(r);
+ };
+ }
+ function assertInstanceIfPrivate(e, t) {
+ if (!e(t)) throw new TypeError("Attempted to access private element on non-instance");
+ }
+ function memberDec(e, t, r, n, a, i, s, o, c) {
+ var u;
+ switch (a) {
+ case 1:
+ u = "accessor";
+ break;
+ case 2:
+ u = "method";
+ break;
+ case 3:
+ u = "getter";
+ break;
+ case 4:
+ u = "setter";
+ break;
+ default:
+ u = "field";
+ }
+ var l,
+ f,
+ p = {
+ kind: u,
+ name: s ? "#" + t : toPropertyKey(t),
+ "static": i,
+ "private": s
+ },
+ d = {
+ v: !1
+ };
+ if (0 !== a && (p.addInitializer = createAddInitializerMethod(n, d)), s || 0 !== a && 2 !== a) {
+ if (2 === a) l = function l(e) {
+ return assertInstanceIfPrivate(c, e), r.value;
+ };else {
+ var h = 0 === a || 1 === a;
+ (h || 3 === a) && (l = s ? function (e) {
+ return assertInstanceIfPrivate(c, e), r.get.call(e);
+ } : function (e) {
+ return r.get.call(e);
+ }), (h || 4 === a) && (f = s ? function (e, t) {
+ assertInstanceIfPrivate(c, e), r.set.call(e, t);
+ } : function (e, t) {
+ r.set.call(e, t);
+ });
+ }
+ } else l = function l(e) {
+ return e[t];
+ }, 0 === a && (f = function f(e, r) {
+ e[t] = r;
+ });
+ var v = s ? c.bind() : function (e) {
+ return t in e;
+ };
+ p.access = l && f ? {
+ get: l,
+ set: f,
+ has: v
+ } : l ? {
+ get: l,
+ has: v
+ } : {
+ set: f,
+ has: v
+ };
+ try {
+ return e(o, p);
+ } finally {
+ d.v = !0;
+ }
+ }
+ function assertCallable(e, t) {
+ if ("function" != typeof e) throw new TypeError(t + " must be a function");
+ }
+ function assertValidReturnValue(e, t) {
+ var r = _typeof(t);
+ if (1 === e) {
+ if ("object" !== r || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+ void 0 !== t.get && assertCallable(t.get, "accessor.get"), void 0 !== t.set && assertCallable(t.set, "accessor.set"), void 0 !== t.init && assertCallable(t.init, "accessor.init");
+ } else if ("function" !== r) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+ }
+ function curryThis2(e) {
+ return function (t) {
+ e(this, t);
+ };
+ }
+ function applyMemberDec(e, t, r, n, a, i, s, o, c) {
+ var u,
+ l,
+ f,
+ p,
+ d,
+ h,
+ v,
+ y,
+ g = r[0];
+ if (s ? (0 === a || 1 === a ? (u = {
+ get: (d = r[3], function () {
+ return d(this);
+ }),
+ set: curryThis2(r[4])
+ }, f = "get") : 3 === a ? (u = {
+ get: r[3]
+ }, f = "get") : 4 === a ? (u = {
+ set: r[3]
+ }, f = "set") : u = {
+ value: r[3]
+ }, 0 !== a && (1 === a && setFunctionName(u.set, "#" + n, "set"), setFunctionName(u[f || "value"], "#" + n, f))) : 0 !== a && (u = Object.getOwnPropertyDescriptor(t, n)), 1 === a ? p = {
+ get: u.get,
+ set: u.set
+ } : 2 === a ? p = u.value : 3 === a ? p = u.get : 4 === a && (p = u.set), "function" == typeof g) void 0 !== (h = memberDec(g, n, u, o, a, i, s, p, c)) && (assertValidReturnValue(a, h), 0 === a ? l = h : 1 === a ? (l = h.init, v = h.get || p.get, y = h.set || p.set, p = {
+ get: v,
+ set: y
+ }) : p = h);else for (var m = g.length - 1; m >= 0; m--) {
+ var b;
+ void 0 !== (h = memberDec(g[m], n, u, o, a, i, s, p, c)) && (assertValidReturnValue(a, h), 0 === a ? b = h : 1 === a ? (b = h.init, v = h.get || p.get, y = h.set || p.set, p = {
+ get: v,
+ set: y
+ }) : p = h, void 0 !== b && (void 0 === l ? l = b : "function" == typeof l ? l = [l, b] : l.push(b)));
+ }
+ if (0 === a || 1 === a) {
+ if (void 0 === l) l = function l(e, t) {
+ return t;
+ };else if ("function" != typeof l) {
+ var I = l;
+ l = function l(e, t) {
+ for (var r = t, n = 0; n < I.length; n++) r = I[n].call(e, r);
+ return r;
+ };
+ } else {
+ var w = l;
+ l = function l(e, t) {
+ return w.call(e, t);
+ };
+ }
+ e.push(l);
+ }
+ 0 !== a && (1 === a ? (u.get = p.get, u.set = p.set) : 2 === a ? u.value = p : 3 === a ? u.get = p : 4 === a && (u.set = p), s ? 1 === a ? (e.push(function (e, t) {
+ return p.get.call(e, t);
+ }), e.push(function (e, t) {
+ return p.set.call(e, t);
+ })) : 2 === a ? e.push(p) : e.push(function (e, t) {
+ return p.call(e, t);
+ }) : Object.defineProperty(t, n, u));
+ }
+ function applyMemberDecs(e, t, r) {
+ for (var n, a, i, s = [], o = new Map(), c = new Map(), u = 0; u < t.length; u++) {
+ var l = t[u];
+ if (Array.isArray(l)) {
+ var f,
+ p,
+ d = l[1],
+ h = l[2],
+ v = l.length > 3,
+ y = d >= 5,
+ g = r;
+ if (y ? (f = e, 0 != (d -= 5) && (p = a = a || []), v && !i && (i = function i(t) {
+ return checkInRHS(t) === e;
+ }), g = i) : (f = e.prototype, 0 !== d && (p = n = n || [])), 0 !== d && !v) {
+ var m = y ? c : o,
+ b = m.get(h) || 0;
+ if (!0 === b || 3 === b && 4 !== d || 4 === b && 3 !== d) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + h);
+ !b && d > 2 ? m.set(h, d) : m.set(h, !0);
+ }
+ applyMemberDec(s, f, l, h, d, y, v, p, g);
+ }
+ }
+ return pushInitializers(s, n), pushInitializers(s, a), s;
+ }
+ function pushInitializers(e, t) {
+ t && e.push(function (e) {
+ for (var r = 0; r < t.length; r++) t[r].call(e);
+ return e;
+ });
+ }
+ return function (e, t, r, n) {
+ return {
+ e: applyMemberDecs(e, t, n),
+ get c() {
+ return function (e, t) {
+ if (t.length > 0) {
+ for (var r = [], n = e, a = e.name, i = t.length - 1; i >= 0; i--) {
+ var s = {
+ v: !1
+ };
+ try {
+ var o = t[i](n, {
+ kind: "class",
+ name: a,
+ addInitializer: createAddInitializerMethod(r, s)
+ });
+ } finally {
+ s.v = !0;
+ }
+ void 0 !== o && (assertValidReturnValue(10, o), n = o);
+ }
+ return [n, function () {
+ for (var e = 0; e < r.length; e++) r[e].call(n);
+ }];
+ }
+ }(e, r);
+ }
+ };
+ };
+}
+function applyDecs2301(e, t, r, n) {
+ return (applyDecs2301 = applyDecs2301Factory())(e, t, r, n);
+}
+export { applyDecs2301 as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2305.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2305.js
new file mode 100644
index 0000000..a11b2b9
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2305.js
@@ -0,0 +1,133 @@
+import _typeof from "./typeof.js";
+import checkInRHS from "./checkInRHS.js";
+import setFunctionName from "./setFunctionName.js";
+import toPropertyKey from "./toPropertyKey.js";
+function applyDecs2305(e, t, r, n, o, a) {
+ function i(e, t, r) {
+ return function (n, o) {
+ return r && r(n), e[t].call(n, o);
+ };
+ }
+ function c(e, t) {
+ for (var r = 0; r < e.length; r++) e[r].call(t);
+ return t;
+ }
+ function s(e, t, r, n) {
+ if ("function" != typeof e && (n || void 0 !== e)) throw new TypeError(t + " must " + (r || "be") + " a function" + (n ? "" : " or undefined"));
+ return e;
+ }
+ function applyDec(e, t, r, n, o, a, c, u, l, f, p, d, h) {
+ function m(e) {
+ if (!h(e)) throw new TypeError("Attempted to access private element on non-instance");
+ }
+ var y,
+ v = t[0],
+ g = t[3],
+ b = !u;
+ if (!b) {
+ r || Array.isArray(v) || (v = [v]);
+ var w = {},
+ S = [],
+ A = 3 === o ? "get" : 4 === o || d ? "set" : "value";
+ f ? (p || d ? w = {
+ get: setFunctionName(function () {
+ return g(this);
+ }, n, "get"),
+ set: function set(e) {
+ t[4](this, e);
+ }
+ } : w[A] = g, p || setFunctionName(w[A], n, 2 === o ? "" : A)) : p || (w = Object.getOwnPropertyDescriptor(e, n));
+ }
+ for (var P = e, j = v.length - 1; j >= 0; j -= r ? 2 : 1) {
+ var D = v[j],
+ E = r ? v[j - 1] : void 0,
+ I = {},
+ O = {
+ kind: ["field", "accessor", "method", "getter", "setter", "class"][o],
+ name: n,
+ metadata: a,
+ addInitializer: function (e, t) {
+ if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+ s(t, "An initializer", "be", !0), c.push(t);
+ }.bind(null, I)
+ };
+ try {
+ if (b) (y = s(D.call(E, P, O), "class decorators", "return")) && (P = y);else {
+ var k, F;
+ O["static"] = l, O["private"] = f, f ? 2 === o ? k = function k(e) {
+ return m(e), w.value;
+ } : (o < 4 && (k = i(w, "get", m)), 3 !== o && (F = i(w, "set", m))) : (k = function k(e) {
+ return e[n];
+ }, (o < 2 || 4 === o) && (F = function F(e, t) {
+ e[n] = t;
+ }));
+ var N = O.access = {
+ has: f ? h.bind() : function (e) {
+ return n in e;
+ }
+ };
+ if (k && (N.get = k), F && (N.set = F), P = D.call(E, d ? {
+ get: w.get,
+ set: w.set
+ } : w[A], O), d) {
+ if ("object" == _typeof(P) && P) (y = s(P.get, "accessor.get")) && (w.get = y), (y = s(P.set, "accessor.set")) && (w.set = y), (y = s(P.init, "accessor.init")) && S.push(y);else if (void 0 !== P) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+ } else s(P, (p ? "field" : "method") + " decorators", "return") && (p ? S.push(P) : w[A] = P);
+ }
+ } finally {
+ I.v = !0;
+ }
+ }
+ return (p || d) && u.push(function (e, t) {
+ for (var r = S.length - 1; r >= 0; r--) t = S[r].call(e, t);
+ return t;
+ }), p || b || (f ? d ? u.push(i(w, "get"), i(w, "set")) : u.push(2 === o ? w[A] : i.call.bind(w[A])) : Object.defineProperty(e, n, w)), P;
+ }
+ function u(e, t) {
+ return Object.defineProperty(e, Symbol.metadata || Symbol["for"]("Symbol.metadata"), {
+ configurable: !0,
+ enumerable: !0,
+ value: t
+ });
+ }
+ if (arguments.length >= 6) var l = a[Symbol.metadata || Symbol["for"]("Symbol.metadata")];
+ var f = Object.create(null == l ? null : l),
+ p = function (e, t, r, n) {
+ var o,
+ a,
+ i = [],
+ s = function s(t) {
+ return checkInRHS(t) === e;
+ },
+ u = new Map();
+ function l(e) {
+ e && i.push(c.bind(null, e));
+ }
+ for (var f = 0; f < t.length; f++) {
+ var p = t[f];
+ if (Array.isArray(p)) {
+ var d = p[1],
+ h = p[2],
+ m = p.length > 3,
+ y = 16 & d,
+ v = !!(8 & d),
+ g = 0 == (d &= 7),
+ b = h + "/" + v;
+ if (!g && !m) {
+ var w = u.get(b);
+ if (!0 === w || 3 === w && 4 !== d || 4 === w && 3 !== d) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + h);
+ u.set(b, !(d > 2) || d);
+ }
+ applyDec(v ? e : e.prototype, p, y, m ? "#" + h : toPropertyKey(h), d, n, v ? a = a || [] : o = o || [], i, v, m, g, 1 === d, v && m ? s : r);
+ }
+ }
+ return l(o), l(a), i;
+ }(e, t, o, f);
+ return r.length || u(e, f), {
+ e: p,
+ get c() {
+ var t = [];
+ return r.length && [u(applyDec(e, [r], n, e.name, 5, f, t), f), c.bind(null, t, e)];
+ }
+ };
+}
+export { applyDecs2305 as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2311.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2311.js
new file mode 100644
index 0000000..ab8c0fd
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/applyDecs2311.js
@@ -0,0 +1,124 @@
+import _typeof from "./typeof.js";
+import checkInRHS from "./checkInRHS.js";
+import setFunctionName from "./setFunctionName.js";
+import toPropertyKey from "./toPropertyKey.js";
+function applyDecs2311(e, t, n, r, o, i) {
+ var a,
+ c,
+ u,
+ s,
+ f,
+ l,
+ p,
+ d = Symbol.metadata || Symbol["for"]("Symbol.metadata"),
+ m = Object.defineProperty,
+ h = Object.create,
+ y = [h(null), h(null)],
+ v = t.length;
+ function g(t, n, r) {
+ return function (o, i) {
+ n && (i = o, o = e);
+ for (var a = 0; a < t.length; a++) i = t[a].apply(o, r ? [i] : []);
+ return r ? i : o;
+ };
+ }
+ function b(e, t, n, r) {
+ if ("function" != typeof e && (r || void 0 !== e)) throw new TypeError(t + " must " + (n || "be") + " a function" + (r ? "" : " or undefined"));
+ return e;
+ }
+ function applyDec(e, t, n, r, o, i, u, s, f, l, p) {
+ function d(e) {
+ if (!p(e)) throw new TypeError("Attempted to access private element on non-instance");
+ }
+ var h = [].concat(t[0]),
+ v = t[3],
+ w = !u,
+ D = 1 === o,
+ S = 3 === o,
+ j = 4 === o,
+ E = 2 === o;
+ function I(t, n, r) {
+ return function (o, i) {
+ return n && (i = o, o = e), r && r(o), P[t].call(o, i);
+ };
+ }
+ if (!w) {
+ var P = {},
+ k = [],
+ F = S ? "get" : j || D ? "set" : "value";
+ if (f ? (l || D ? P = {
+ get: setFunctionName(function () {
+ return v(this);
+ }, r, "get"),
+ set: function set(e) {
+ t[4](this, e);
+ }
+ } : P[F] = v, l || setFunctionName(P[F], r, E ? "" : F)) : l || (P = Object.getOwnPropertyDescriptor(e, r)), !l && !f) {
+ if ((c = y[+s][r]) && 7 !== (c ^ o)) throw Error("Decorating two elements with the same name (" + P[F].name + ") is not supported yet");
+ y[+s][r] = o < 3 ? 1 : o;
+ }
+ }
+ for (var N = e, O = h.length - 1; O >= 0; O -= n ? 2 : 1) {
+ var T = b(h[O], "A decorator", "be", !0),
+ z = n ? h[O - 1] : void 0,
+ A = {},
+ H = {
+ kind: ["field", "accessor", "method", "getter", "setter", "class"][o],
+ name: r,
+ metadata: a,
+ addInitializer: function (e, t) {
+ if (e.v) throw new TypeError("attempted to call addInitializer after decoration was finished");
+ b(t, "An initializer", "be", !0), i.push(t);
+ }.bind(null, A)
+ };
+ if (w) c = T.call(z, N, H), A.v = 1, b(c, "class decorators", "return") && (N = c);else if (H["static"] = s, H["private"] = f, c = H.access = {
+ has: f ? p.bind() : function (e) {
+ return r in e;
+ }
+ }, j || (c.get = f ? E ? function (e) {
+ return d(e), P.value;
+ } : I("get", 0, d) : function (e) {
+ return e[r];
+ }), E || S || (c.set = f ? I("set", 0, d) : function (e, t) {
+ e[r] = t;
+ }), N = T.call(z, D ? {
+ get: P.get,
+ set: P.set
+ } : P[F], H), A.v = 1, D) {
+ if ("object" == _typeof(N) && N) (c = b(N.get, "accessor.get")) && (P.get = c), (c = b(N.set, "accessor.set")) && (P.set = c), (c = b(N.init, "accessor.init")) && k.unshift(c);else if (void 0 !== N) throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined");
+ } else b(N, (l ? "field" : "method") + " decorators", "return") && (l ? k.unshift(N) : P[F] = N);
+ }
+ return o < 2 && u.push(g(k, s, 1), g(i, s, 0)), l || w || (f ? D ? u.splice(-1, 0, I("get", s), I("set", s)) : u.push(E ? P[F] : b.call.bind(P[F])) : m(e, r, P)), N;
+ }
+ function w(e) {
+ return m(e, d, {
+ configurable: !0,
+ enumerable: !0,
+ value: a
+ });
+ }
+ return void 0 !== i && (a = i[d]), a = h(null == a ? null : a), f = [], l = function l(e) {
+ e && f.push(g(e));
+ }, p = function p(t, r) {
+ for (var i = 0; i < n.length; i++) {
+ var a = n[i],
+ c = a[1],
+ l = 7 & c;
+ if ((8 & c) == t && !l == r) {
+ var p = a[2],
+ d = !!a[3],
+ m = 16 & c;
+ applyDec(t ? e : e.prototype, a, m, d ? "#" + p : toPropertyKey(p), l, l < 2 ? [] : t ? s = s || [] : u = u || [], f, !!t, d, r, t && d ? function (t) {
+ return checkInRHS(t) === e;
+ } : o);
+ }
+ }
+ }, p(8, 0), p(0, 0), p(8, 1), p(0, 1), l(u), l(s), c = f, v || w(e), {
+ e: c,
+ get c() {
+ var n = [];
+ return v && [w(e = applyDec(e, [t], r, e.name, 5, n)), g(n, 1)];
+ }
+ };
+}
+export { applyDecs2311 as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js
new file mode 100644
index 0000000..9ace772
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js
@@ -0,0 +1,6 @@
+function _arrayLikeToArray(r, a) {
+ (null == a || a > r.length) && (a = r.length);
+ for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
+ return n;
+}
+export { _arrayLikeToArray as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js
new file mode 100644
index 0000000..99fa715
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js
@@ -0,0 +1,4 @@
+function _arrayWithHoles(r) {
+ if (Array.isArray(r)) return r;
+}
+export { _arrayWithHoles as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js
new file mode 100644
index 0000000..1ce6f21
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js
@@ -0,0 +1,5 @@
+import arrayLikeToArray from "./arrayLikeToArray.js";
+function _arrayWithoutHoles(r) {
+ if (Array.isArray(r)) return arrayLikeToArray(r);
+}
+export { _arrayWithoutHoles as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/assertClassBrand.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/assertClassBrand.js
new file mode 100644
index 0000000..ae7b712
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/assertClassBrand.js
@@ -0,0 +1,5 @@
+function _assertClassBrand(e, t, n) {
+ if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;
+ throw new TypeError("Private element is not present on this object");
+}
+export { _assertClassBrand as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js
new file mode 100644
index 0000000..4a41bde
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js
@@ -0,0 +1,5 @@
+function _assertThisInitialized(e) {
+ if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ return e;
+}
+export { _assertThisInitialized as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/asyncGeneratorDelegate.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/asyncGeneratorDelegate.js
new file mode 100644
index 0000000..e026689
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/asyncGeneratorDelegate.js
@@ -0,0 +1,24 @@
+import OverloadYield from "./OverloadYield.js";
+function _asyncGeneratorDelegate(t) {
+ var e = {},
+ n = !1;
+ function pump(e, r) {
+ return n = !0, r = new Promise(function (n) {
+ n(t[e](r));
+ }), {
+ done: !1,
+ value: new OverloadYield(r, 1)
+ };
+ }
+ return e["undefined" != typeof Symbol && Symbol.iterator || "@@iterator"] = function () {
+ return this;
+ }, e.next = function (t) {
+ return n ? (n = !1, t) : pump("next", t);
+ }, "function" == typeof t["throw"] && (e["throw"] = function (t) {
+ if (n) throw n = !1, t;
+ return pump("throw", t);
+ }), "function" == typeof t["return"] && (e["return"] = function (t) {
+ return n ? (n = !1, t) : pump("return", t);
+ }), e;
+}
+export { _asyncGeneratorDelegate as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/asyncIterator.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/asyncIterator.js
new file mode 100644
index 0000000..2ed00b7
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/asyncIterator.js
@@ -0,0 +1,45 @@
+function _asyncIterator(r) {
+ var n,
+ t,
+ o,
+ e = 2;
+ for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) {
+ if (t && null != (n = r[t])) return n.call(r);
+ if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r));
+ t = "@@asyncIterator", o = "@@iterator";
+ }
+ throw new TypeError("Object is not async iterable");
+}
+function AsyncFromSyncIterator(r) {
+ function AsyncFromSyncIteratorContinuation(r) {
+ if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object."));
+ var n = r.done;
+ return Promise.resolve(r.value).then(function (r) {
+ return {
+ value: r,
+ done: n
+ };
+ });
+ }
+ return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) {
+ this.s = r, this.n = r.next;
+ }, AsyncFromSyncIterator.prototype = {
+ s: null,
+ n: null,
+ next: function next() {
+ return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));
+ },
+ "return": function _return(r) {
+ var n = this.s["return"];
+ return void 0 === n ? Promise.resolve({
+ value: r,
+ done: !0
+ }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));
+ },
+ "throw": function _throw(r) {
+ var n = this.s["return"];
+ return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));
+ }
+ }, new AsyncFromSyncIterator(r);
+}
+export { _asyncIterator as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js
new file mode 100644
index 0000000..00f29b1
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js
@@ -0,0 +1,26 @@
+function asyncGeneratorStep(n, t, e, r, o, a, c) {
+ try {
+ var i = n[a](c),
+ u = i.value;
+ } catch (n) {
+ return void e(n);
+ }
+ i.done ? t(u) : Promise.resolve(u).then(r, o);
+}
+function _asyncToGenerator(n) {
+ return function () {
+ var t = this,
+ e = arguments;
+ return new Promise(function (r, o) {
+ var a = n.apply(t, e);
+ function _next(n) {
+ asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
+ }
+ function _throw(n) {
+ asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
+ }
+ _next(void 0);
+ });
+ };
+}
+export { _asyncToGenerator as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/awaitAsyncGenerator.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/awaitAsyncGenerator.js
new file mode 100644
index 0000000..097c88c
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/awaitAsyncGenerator.js
@@ -0,0 +1,5 @@
+import OverloadYield from "./OverloadYield.js";
+function _awaitAsyncGenerator(e) {
+ return new OverloadYield(e, 0);
+}
+export { _awaitAsyncGenerator as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/callSuper.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/callSuper.js
new file mode 100644
index 0000000..6d17a4e
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/callSuper.js
@@ -0,0 +1,7 @@
+import getPrototypeOf from "./getPrototypeOf.js";
+import isNativeReflectConstruct from "./isNativeReflectConstruct.js";
+import possibleConstructorReturn from "./possibleConstructorReturn.js";
+function _callSuper(t, o, e) {
+ return o = getPrototypeOf(o), possibleConstructorReturn(t, isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf(t).constructor) : o.apply(t, e));
+}
+export { _callSuper as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/checkInRHS.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/checkInRHS.js
new file mode 100644
index 0000000..12f59b4
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/checkInRHS.js
@@ -0,0 +1,6 @@
+import _typeof from "./typeof.js";
+function _checkInRHS(e) {
+ if (Object(e) !== e) throw TypeError("right-hand side of 'in' should be an object, got " + (null !== e ? _typeof(e) : "null"));
+ return e;
+}
+export { _checkInRHS as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js
new file mode 100644
index 0000000..e9e6b3b
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js
@@ -0,0 +1,4 @@
+function _checkPrivateRedeclaration(e, t) {
+ if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object");
+}
+export { _checkPrivateRedeclaration as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorDestructureSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorDestructureSet.js
new file mode 100644
index 0000000..5623419
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorDestructureSet.js
@@ -0,0 +1,10 @@
+function _classApplyDescriptorDestructureSet(e, t) {
+ if (t.set) return "__destrObj" in t || (t.__destrObj = {
+ set value(r) {
+ t.set.call(e, r);
+ }
+ }), t.__destrObj;
+ if (!t.writable) throw new TypeError("attempted to set read only private field");
+ return t;
+}
+export { _classApplyDescriptorDestructureSet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js
new file mode 100644
index 0000000..b9259d3
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js
@@ -0,0 +1,4 @@
+function _classApplyDescriptorGet(e, t) {
+ return t.get ? t.get.call(e) : t.value;
+}
+export { _classApplyDescriptorGet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js
new file mode 100644
index 0000000..d9c4fbd
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js
@@ -0,0 +1,7 @@
+function _classApplyDescriptorSet(e, t, l) {
+ if (t.set) t.set.call(e, l);else {
+ if (!t.writable) throw new TypeError("attempted to set read only private field");
+ t.value = l;
+ }
+}
+export { _classApplyDescriptorSet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classCallCheck.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classCallCheck.js
new file mode 100644
index 0000000..bf97219
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classCallCheck.js
@@ -0,0 +1,4 @@
+function _classCallCheck(a, n) {
+ if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
+}
+export { _classCallCheck as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticAccess.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticAccess.js
new file mode 100644
index 0000000..366ed05
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticAccess.js
@@ -0,0 +1,5 @@
+import assertClassBrand from "./assertClassBrand.js";
+function _classCheckPrivateStaticAccess(s, a, r) {
+ return assertClassBrand(a, s, r);
+}
+export { _classCheckPrivateStaticAccess as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticFieldDescriptor.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticFieldDescriptor.js
new file mode 100644
index 0000000..844be91
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticFieldDescriptor.js
@@ -0,0 +1,4 @@
+function _classCheckPrivateStaticFieldDescriptor(t, e) {
+ if (void 0 === t) throw new TypeError("attempted to " + e + " private static field before its declaration");
+}
+export { _classCheckPrivateStaticFieldDescriptor as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js
new file mode 100644
index 0000000..652689d
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js
@@ -0,0 +1,5 @@
+import classPrivateFieldGet2 from "./classPrivateFieldGet2.js";
+function _classExtractFieldDescriptor(e, t) {
+ return classPrivateFieldGet2(t, e);
+}
+export { _classExtractFieldDescriptor as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classNameTDZError.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classNameTDZError.js
new file mode 100644
index 0000000..68e76ff
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classNameTDZError.js
@@ -0,0 +1,4 @@
+function _classNameTDZError(e) {
+ throw new ReferenceError('Class "' + e + '" cannot be referenced in computed property keys.');
+}
+export { _classNameTDZError as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldDestructureSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldDestructureSet.js
new file mode 100644
index 0000000..9303366
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldDestructureSet.js
@@ -0,0 +1,7 @@
+import classApplyDescriptorDestructureSet from "./classApplyDescriptorDestructureSet.js";
+import classPrivateFieldGet2 from "./classPrivateFieldGet2.js";
+function _classPrivateFieldDestructureSet(e, t) {
+ var r = classPrivateFieldGet2(t, e);
+ return classApplyDescriptorDestructureSet(e, r);
+}
+export { _classPrivateFieldDestructureSet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js
new file mode 100644
index 0000000..ce7ebcb
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js
@@ -0,0 +1,7 @@
+import classApplyDescriptorGet from "./classApplyDescriptorGet.js";
+import classPrivateFieldGet2 from "./classPrivateFieldGet2.js";
+function _classPrivateFieldGet(e, t) {
+ var r = classPrivateFieldGet2(t, e);
+ return classApplyDescriptorGet(e, r);
+}
+export { _classPrivateFieldGet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js
new file mode 100644
index 0000000..4aa3da6
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js
@@ -0,0 +1,5 @@
+import assertClassBrand from "./assertClassBrand.js";
+function _classPrivateFieldGet2(s, a) {
+ return s.get(assertClassBrand(s, a));
+}
+export { _classPrivateFieldGet2 as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js
new file mode 100644
index 0000000..5dcdbe0
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js
@@ -0,0 +1,5 @@
+import checkPrivateRedeclaration from "./checkPrivateRedeclaration.js";
+function _classPrivateFieldInitSpec(e, t, a) {
+ checkPrivateRedeclaration(e, t), t.set(e, a);
+}
+export { _classPrivateFieldInitSpec as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseBase.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseBase.js
new file mode 100644
index 0000000..4bd662c
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseBase.js
@@ -0,0 +1,5 @@
+function _classPrivateFieldBase(e, t) {
+ if (!{}.hasOwnProperty.call(e, t)) throw new TypeError("attempted to use private field on non-instance");
+ return e;
+}
+export { _classPrivateFieldBase as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseKey.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseKey.js
new file mode 100644
index 0000000..90d2193
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseKey.js
@@ -0,0 +1,5 @@
+var id = 0;
+function _classPrivateFieldKey(e) {
+ return "__private_" + id++ + "_" + e;
+}
+export { _classPrivateFieldKey as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js
new file mode 100644
index 0000000..b5161bd
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js
@@ -0,0 +1,7 @@
+import classApplyDescriptorSet from "./classApplyDescriptorSet.js";
+import classPrivateFieldGet2 from "./classPrivateFieldGet2.js";
+function _classPrivateFieldSet(e, t, r) {
+ var s = classPrivateFieldGet2(t, e);
+ return classApplyDescriptorSet(e, s, r), r;
+}
+export { _classPrivateFieldSet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js
new file mode 100644
index 0000000..337b01a
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js
@@ -0,0 +1,5 @@
+import assertClassBrand from "./assertClassBrand.js";
+function _classPrivateFieldSet2(s, a, r) {
+ return s.set(assertClassBrand(s, a), r), r;
+}
+export { _classPrivateFieldSet2 as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateGetter.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateGetter.js
new file mode 100644
index 0000000..ff3e985
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateGetter.js
@@ -0,0 +1,5 @@
+import assertClassBrand from "./assertClassBrand.js";
+function _classPrivateGetter(s, r, a) {
+ return a(assertClassBrand(s, r));
+}
+export { _classPrivateGetter as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateMethodGet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateMethodGet.js
new file mode 100644
index 0000000..4832fc6
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateMethodGet.js
@@ -0,0 +1,5 @@
+import assertClassBrand from "./assertClassBrand.js";
+function _classPrivateMethodGet(s, a, r) {
+ return assertClassBrand(a, s), r;
+}
+export { _classPrivateMethodGet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateMethodInitSpec.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateMethodInitSpec.js
new file mode 100644
index 0000000..61e23e2
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateMethodInitSpec.js
@@ -0,0 +1,5 @@
+import checkPrivateRedeclaration from "./checkPrivateRedeclaration.js";
+function _classPrivateMethodInitSpec(e, a) {
+ checkPrivateRedeclaration(e, a), a.add(e);
+}
+export { _classPrivateMethodInitSpec as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateMethodSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateMethodSet.js
new file mode 100644
index 0000000..d181b51
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateMethodSet.js
@@ -0,0 +1,4 @@
+function _classPrivateMethodSet() {
+ throw new TypeError("attempted to reassign private method");
+}
+export { _classPrivateMethodSet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateSetter.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateSetter.js
new file mode 100644
index 0000000..9a80d59
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classPrivateSetter.js
@@ -0,0 +1,5 @@
+import assertClassBrand from "./assertClassBrand.js";
+function _classPrivateSetter(s, r, a, t) {
+ return r(assertClassBrand(s, a), t), t;
+}
+export { _classPrivateSetter as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldDestructureSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldDestructureSet.js
new file mode 100644
index 0000000..747e639
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldDestructureSet.js
@@ -0,0 +1,7 @@
+import classApplyDescriptorDestructureSet from "./classApplyDescriptorDestructureSet.js";
+import assertClassBrand from "./assertClassBrand.js";
+import classCheckPrivateStaticFieldDescriptor from "./classCheckPrivateStaticFieldDescriptor.js";
+function _classStaticPrivateFieldDestructureSet(t, r, s) {
+ return assertClassBrand(r, t), classCheckPrivateStaticFieldDescriptor(s, "set"), classApplyDescriptorDestructureSet(t, s);
+}
+export { _classStaticPrivateFieldDestructureSet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecGet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecGet.js
new file mode 100644
index 0000000..23684b7
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecGet.js
@@ -0,0 +1,7 @@
+import classApplyDescriptorGet from "./classApplyDescriptorGet.js";
+import assertClassBrand from "./assertClassBrand.js";
+import classCheckPrivateStaticFieldDescriptor from "./classCheckPrivateStaticFieldDescriptor.js";
+function _classStaticPrivateFieldSpecGet(t, s, r) {
+ return assertClassBrand(s, t), classCheckPrivateStaticFieldDescriptor(r, "get"), classApplyDescriptorGet(t, r);
+}
+export { _classStaticPrivateFieldSpecGet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecSet.js
new file mode 100644
index 0000000..3a31468
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecSet.js
@@ -0,0 +1,7 @@
+import classApplyDescriptorSet from "./classApplyDescriptorSet.js";
+import assertClassBrand from "./assertClassBrand.js";
+import classCheckPrivateStaticFieldDescriptor from "./classCheckPrivateStaticFieldDescriptor.js";
+function _classStaticPrivateFieldSpecSet(s, t, r, e) {
+ return assertClassBrand(t, s), classCheckPrivateStaticFieldDescriptor(r, "set"), classApplyDescriptorSet(s, r, e), e;
+}
+export { _classStaticPrivateFieldSpecSet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodGet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodGet.js
new file mode 100644
index 0000000..047b177
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodGet.js
@@ -0,0 +1,5 @@
+import assertClassBrand from "./assertClassBrand.js";
+function _classStaticPrivateMethodGet(s, a, t) {
+ return assertClassBrand(a, s), t;
+}
+export { _classStaticPrivateMethodGet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodSet.js
new file mode 100644
index 0000000..a61ae63
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodSet.js
@@ -0,0 +1,4 @@
+function _classStaticPrivateMethodSet() {
+ throw new TypeError("attempted to set read only static private field");
+}
+export { _classStaticPrivateMethodSet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/construct.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/construct.js
new file mode 100644
index 0000000..91609ff
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/construct.js
@@ -0,0 +1,10 @@
+import isNativeReflectConstruct from "./isNativeReflectConstruct.js";
+import setPrototypeOf from "./setPrototypeOf.js";
+function _construct(t, e, r) {
+ if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);
+ var o = [null];
+ o.push.apply(o, e);
+ var p = new (t.bind.apply(t, o))();
+ return r && setPrototypeOf(p, r.prototype), p;
+}
+export { _construct as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/createClass.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/createClass.js
new file mode 100644
index 0000000..9b17851
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/createClass.js
@@ -0,0 +1,13 @@
+import toPropertyKey from "./toPropertyKey.js";
+function _defineProperties(e, r) {
+ for (var t = 0; t < r.length; t++) {
+ var o = r[t];
+ o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);
+ }
+}
+function _createClass(e, r, t) {
+ return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
+ writable: !1
+ }), e;
+}
+export { _createClass as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js
new file mode 100644
index 0000000..93b97f9
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js
@@ -0,0 +1,50 @@
+import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
+function _createForOfIteratorHelper(r, e) {
+ var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
+ if (!t) {
+ if (Array.isArray(r) || (t = unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
+ t && (r = t);
+ var _n = 0,
+ F = function F() {};
+ return {
+ s: F,
+ n: function n() {
+ return _n >= r.length ? {
+ done: !0
+ } : {
+ done: !1,
+ value: r[_n++]
+ };
+ },
+ e: function e(r) {
+ throw r;
+ },
+ f: F
+ };
+ }
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ }
+ var o,
+ a = !0,
+ u = !1;
+ return {
+ s: function s() {
+ t = t.call(r);
+ },
+ n: function n() {
+ var r = t.next();
+ return a = r.done, r;
+ },
+ e: function e(r) {
+ u = !0, o = r;
+ },
+ f: function f() {
+ try {
+ a || null == t["return"] || t["return"]();
+ } finally {
+ if (u) throw o;
+ }
+ }
+ };
+}
+export { _createForOfIteratorHelper as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelperLoose.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelperLoose.js
new file mode 100644
index 0000000..3deaae4
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelperLoose.js
@@ -0,0 +1,19 @@
+import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
+function _createForOfIteratorHelperLoose(r, e) {
+ var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
+ if (t) return (t = t.call(r)).next.bind(t);
+ if (Array.isArray(r) || (t = unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
+ t && (r = t);
+ var o = 0;
+ return function () {
+ return o >= r.length ? {
+ done: !0
+ } : {
+ done: !1,
+ value: r[o++]
+ };
+ };
+ }
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+export { _createForOfIteratorHelperLoose as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/createSuper.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/createSuper.js
new file mode 100644
index 0000000..dfabf71
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/createSuper.js
@@ -0,0 +1,16 @@
+import getPrototypeOf from "./getPrototypeOf.js";
+import isNativeReflectConstruct from "./isNativeReflectConstruct.js";
+import possibleConstructorReturn from "./possibleConstructorReturn.js";
+function _createSuper(t) {
+ var r = isNativeReflectConstruct();
+ return function () {
+ var e,
+ o = getPrototypeOf(t);
+ if (r) {
+ var s = getPrototypeOf(this).constructor;
+ e = Reflect.construct(o, arguments, s);
+ } else e = o.apply(this, arguments);
+ return possibleConstructorReturn(this, e);
+ };
+}
+export { _createSuper as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/decorate.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/decorate.js
new file mode 100644
index 0000000..f76b6a6
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/decorate.js
@@ -0,0 +1,250 @@
+import toArray from "./toArray.js";
+import toPropertyKey from "./toPropertyKey.js";
+function _decorate(e, r, t, i) {
+ var o = _getDecoratorsApi();
+ if (i) for (var n = 0; n < i.length; n++) o = i[n](o);
+ var s = r(function (e) {
+ o.initializeInstanceElements(e, a.elements);
+ }, t),
+ a = o.decorateClass(_coalesceClassElements(s.d.map(_createElementDescriptor)), e);
+ return o.initializeClassElements(s.F, a.elements), o.runClassFinishers(s.F, a.finishers);
+}
+function _getDecoratorsApi() {
+ _getDecoratorsApi = function _getDecoratorsApi() {
+ return e;
+ };
+ var e = {
+ elementsDefinitionOrder: [["method"], ["field"]],
+ initializeInstanceElements: function initializeInstanceElements(e, r) {
+ ["method", "field"].forEach(function (t) {
+ r.forEach(function (r) {
+ r.kind === t && "own" === r.placement && this.defineClassElement(e, r);
+ }, this);
+ }, this);
+ },
+ initializeClassElements: function initializeClassElements(e, r) {
+ var t = e.prototype;
+ ["method", "field"].forEach(function (i) {
+ r.forEach(function (r) {
+ var o = r.placement;
+ if (r.kind === i && ("static" === o || "prototype" === o)) {
+ var n = "static" === o ? e : t;
+ this.defineClassElement(n, r);
+ }
+ }, this);
+ }, this);
+ },
+ defineClassElement: function defineClassElement(e, r) {
+ var t = r.descriptor;
+ if ("field" === r.kind) {
+ var i = r.initializer;
+ t = {
+ enumerable: t.enumerable,
+ writable: t.writable,
+ configurable: t.configurable,
+ value: void 0 === i ? void 0 : i.call(e)
+ };
+ }
+ Object.defineProperty(e, r.key, t);
+ },
+ decorateClass: function decorateClass(e, r) {
+ var t = [],
+ i = [],
+ o = {
+ "static": [],
+ prototype: [],
+ own: []
+ };
+ if (e.forEach(function (e) {
+ this.addElementPlacement(e, o);
+ }, this), e.forEach(function (e) {
+ if (!_hasDecorators(e)) return t.push(e);
+ var r = this.decorateElement(e, o);
+ t.push(r.element), t.push.apply(t, r.extras), i.push.apply(i, r.finishers);
+ }, this), !r) return {
+ elements: t,
+ finishers: i
+ };
+ var n = this.decorateConstructor(t, r);
+ return i.push.apply(i, n.finishers), n.finishers = i, n;
+ },
+ addElementPlacement: function addElementPlacement(e, r, t) {
+ var i = r[e.placement];
+ if (!t && -1 !== i.indexOf(e.key)) throw new TypeError("Duplicated element (" + e.key + ")");
+ i.push(e.key);
+ },
+ decorateElement: function decorateElement(e, r) {
+ for (var t = [], i = [], o = e.decorators, n = o.length - 1; n >= 0; n--) {
+ var s = r[e.placement];
+ s.splice(s.indexOf(e.key), 1);
+ var a = this.fromElementDescriptor(e),
+ l = this.toElementFinisherExtras((0, o[n])(a) || a);
+ e = l.element, this.addElementPlacement(e, r), l.finisher && i.push(l.finisher);
+ var c = l.extras;
+ if (c) {
+ for (var p = 0; p < c.length; p++) this.addElementPlacement(c[p], r);
+ t.push.apply(t, c);
+ }
+ }
+ return {
+ element: e,
+ finishers: i,
+ extras: t
+ };
+ },
+ decorateConstructor: function decorateConstructor(e, r) {
+ for (var t = [], i = r.length - 1; i >= 0; i--) {
+ var o = this.fromClassDescriptor(e),
+ n = this.toClassDescriptor((0, r[i])(o) || o);
+ if (void 0 !== n.finisher && t.push(n.finisher), void 0 !== n.elements) {
+ e = n.elements;
+ for (var s = 0; s < e.length - 1; s++) for (var a = s + 1; a < e.length; a++) if (e[s].key === e[a].key && e[s].placement === e[a].placement) throw new TypeError("Duplicated element (" + e[s].key + ")");
+ }
+ }
+ return {
+ elements: e,
+ finishers: t
+ };
+ },
+ fromElementDescriptor: function fromElementDescriptor(e) {
+ var r = {
+ kind: e.kind,
+ key: e.key,
+ placement: e.placement,
+ descriptor: e.descriptor
+ };
+ return Object.defineProperty(r, Symbol.toStringTag, {
+ value: "Descriptor",
+ configurable: !0
+ }), "field" === e.kind && (r.initializer = e.initializer), r;
+ },
+ toElementDescriptors: function toElementDescriptors(e) {
+ if (void 0 !== e) return toArray(e).map(function (e) {
+ var r = this.toElementDescriptor(e);
+ return this.disallowProperty(e, "finisher", "An element descriptor"), this.disallowProperty(e, "extras", "An element descriptor"), r;
+ }, this);
+ },
+ toElementDescriptor: function toElementDescriptor(e) {
+ var r = e.kind + "";
+ if ("method" !== r && "field" !== r) throw new TypeError('An element descriptor\'s .kind property must be either "method" or "field", but a decorator created an element descriptor with .kind "' + r + '"');
+ var t = toPropertyKey(e.key),
+ i = e.placement + "";
+ if ("static" !== i && "prototype" !== i && "own" !== i) throw new TypeError('An element descriptor\'s .placement property must be one of "static", "prototype" or "own", but a decorator created an element descriptor with .placement "' + i + '"');
+ var o = e.descriptor;
+ this.disallowProperty(e, "elements", "An element descriptor");
+ var n = {
+ kind: r,
+ key: t,
+ placement: i,
+ descriptor: Object.assign({}, o)
+ };
+ return "field" !== r ? this.disallowProperty(e, "initializer", "A method descriptor") : (this.disallowProperty(o, "get", "The property descriptor of a field descriptor"), this.disallowProperty(o, "set", "The property descriptor of a field descriptor"), this.disallowProperty(o, "value", "The property descriptor of a field descriptor"), n.initializer = e.initializer), n;
+ },
+ toElementFinisherExtras: function toElementFinisherExtras(e) {
+ return {
+ element: this.toElementDescriptor(e),
+ finisher: _optionalCallableProperty(e, "finisher"),
+ extras: this.toElementDescriptors(e.extras)
+ };
+ },
+ fromClassDescriptor: function fromClassDescriptor(e) {
+ var r = {
+ kind: "class",
+ elements: e.map(this.fromElementDescriptor, this)
+ };
+ return Object.defineProperty(r, Symbol.toStringTag, {
+ value: "Descriptor",
+ configurable: !0
+ }), r;
+ },
+ toClassDescriptor: function toClassDescriptor(e) {
+ var r = e.kind + "";
+ if ("class" !== r) throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator created a class descriptor with .kind "' + r + '"');
+ this.disallowProperty(e, "key", "A class descriptor"), this.disallowProperty(e, "placement", "A class descriptor"), this.disallowProperty(e, "descriptor", "A class descriptor"), this.disallowProperty(e, "initializer", "A class descriptor"), this.disallowProperty(e, "extras", "A class descriptor");
+ var t = _optionalCallableProperty(e, "finisher");
+ return {
+ elements: this.toElementDescriptors(e.elements),
+ finisher: t
+ };
+ },
+ runClassFinishers: function runClassFinishers(e, r) {
+ for (var t = 0; t < r.length; t++) {
+ var i = (0, r[t])(e);
+ if (void 0 !== i) {
+ if ("function" != typeof i) throw new TypeError("Finishers must return a constructor.");
+ e = i;
+ }
+ }
+ return e;
+ },
+ disallowProperty: function disallowProperty(e, r, t) {
+ if (void 0 !== e[r]) throw new TypeError(t + " can't have a ." + r + " property.");
+ }
+ };
+ return e;
+}
+function _createElementDescriptor(e) {
+ var r,
+ t = toPropertyKey(e.key);
+ "method" === e.kind ? r = {
+ value: e.value,
+ writable: !0,
+ configurable: !0,
+ enumerable: !1
+ } : "get" === e.kind ? r = {
+ get: e.value,
+ configurable: !0,
+ enumerable: !1
+ } : "set" === e.kind ? r = {
+ set: e.value,
+ configurable: !0,
+ enumerable: !1
+ } : "field" === e.kind && (r = {
+ configurable: !0,
+ writable: !0,
+ enumerable: !0
+ });
+ var i = {
+ kind: "field" === e.kind ? "field" : "method",
+ key: t,
+ placement: e["static"] ? "static" : "field" === e.kind ? "own" : "prototype",
+ descriptor: r
+ };
+ return e.decorators && (i.decorators = e.decorators), "field" === e.kind && (i.initializer = e.value), i;
+}
+function _coalesceGetterSetter(e, r) {
+ void 0 !== e.descriptor.get ? r.descriptor.get = e.descriptor.get : r.descriptor.set = e.descriptor.set;
+}
+function _coalesceClassElements(e) {
+ for (var r = [], isSameElement = function isSameElement(e) {
+ return "method" === e.kind && e.key === o.key && e.placement === o.placement;
+ }, t = 0; t < e.length; t++) {
+ var i,
+ o = e[t];
+ if ("method" === o.kind && (i = r.find(isSameElement))) {
+ if (_isDataDescriptor(o.descriptor) || _isDataDescriptor(i.descriptor)) {
+ if (_hasDecorators(o) || _hasDecorators(i)) throw new ReferenceError("Duplicated methods (" + o.key + ") can't be decorated.");
+ i.descriptor = o.descriptor;
+ } else {
+ if (_hasDecorators(o)) {
+ if (_hasDecorators(i)) throw new ReferenceError("Decorators can't be placed on different accessors with for the same property (" + o.key + ").");
+ i.decorators = o.decorators;
+ }
+ _coalesceGetterSetter(o, i);
+ }
+ } else r.push(o);
+ }
+ return r;
+}
+function _hasDecorators(e) {
+ return e.decorators && e.decorators.length;
+}
+function _isDataDescriptor(e) {
+ return void 0 !== e && !(void 0 === e.value && void 0 === e.writable);
+}
+function _optionalCallableProperty(e, r) {
+ var t = e[r];
+ if (void 0 !== t && "function" != typeof t) throw new TypeError("Expected '" + r + "' to be a function");
+ return t;
+}
+export { _decorate as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/defaults.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/defaults.js
new file mode 100644
index 0000000..d3041a3
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/defaults.js
@@ -0,0 +1,9 @@
+function _defaults(e, r) {
+ for (var t = Object.getOwnPropertyNames(r), o = 0; o < t.length; o++) {
+ var n = t[o],
+ a = Object.getOwnPropertyDescriptor(r, n);
+ a && a.configurable && void 0 === e[n] && Object.defineProperty(e, n, a);
+ }
+ return e;
+}
+export { _defaults as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/defineAccessor.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/defineAccessor.js
new file mode 100644
index 0000000..a8292de
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/defineAccessor.js
@@ -0,0 +1,8 @@
+function _defineAccessor(e, r, n, t) {
+ var c = {
+ configurable: !0,
+ enumerable: !0
+ };
+ return c[e] = t, Object.defineProperty(r, n, c);
+}
+export { _defineAccessor as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/defineEnumerableProperties.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/defineEnumerableProperties.js
new file mode 100644
index 0000000..3d31d98
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/defineEnumerableProperties.js
@@ -0,0 +1,12 @@
+function _defineEnumerableProperties(e, r) {
+ for (var t in r) {
+ var n = r[t];
+ n.configurable = n.enumerable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, t, n);
+ }
+ if (Object.getOwnPropertySymbols) for (var a = Object.getOwnPropertySymbols(r), b = 0; b < a.length; b++) {
+ var i = a[b];
+ (n = r[i]).configurable = n.enumerable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, i, n);
+ }
+ return e;
+}
+export { _defineEnumerableProperties as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/defineProperty.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/defineProperty.js
new file mode 100644
index 0000000..05ec32b
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/defineProperty.js
@@ -0,0 +1,10 @@
+import toPropertyKey from "./toPropertyKey.js";
+function _defineProperty(e, r, t) {
+ return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
+ value: t,
+ enumerable: !0,
+ configurable: !0,
+ writable: !0
+ }) : e[r] = t, e;
+}
+export { _defineProperty as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/dispose.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/dispose.js
new file mode 100644
index 0000000..a87ab20
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/dispose.js
@@ -0,0 +1,28 @@
+function dispose_SuppressedError(r, e) {
+ return "undefined" != typeof SuppressedError ? dispose_SuppressedError = SuppressedError : (dispose_SuppressedError = function dispose_SuppressedError(r, e) {
+ this.suppressed = e, this.error = r, this.stack = Error().stack;
+ }, dispose_SuppressedError.prototype = Object.create(Error.prototype, {
+ constructor: {
+ value: dispose_SuppressedError,
+ writable: !0,
+ configurable: !0
+ }
+ })), new dispose_SuppressedError(r, e);
+}
+function _dispose(r, e, s) {
+ function next() {
+ for (; r.length > 0;) try {
+ var o = r.pop(),
+ p = o.d.call(o.v);
+ if (o.a) return Promise.resolve(p).then(next, err);
+ } catch (r) {
+ return err(r);
+ }
+ if (s) throw e;
+ }
+ function err(r) {
+ return e = s ? new dispose_SuppressedError(e, r) : r, s = !0, next();
+ }
+ return next();
+}
+export { _dispose as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/extends.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/extends.js
new file mode 100644
index 0000000..53f118c
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/extends.js
@@ -0,0 +1,10 @@
+function _extends() {
+ return _extends = Object.assign ? Object.assign.bind() : function (n) {
+ for (var e = 1; e < arguments.length; e++) {
+ var t = arguments[e];
+ for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
+ }
+ return n;
+ }, _extends.apply(null, arguments);
+}
+export { _extends as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/get.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/get.js
new file mode 100644
index 0000000..8124bc0
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/get.js
@@ -0,0 +1,11 @@
+import superPropBase from "./superPropBase.js";
+function _get() {
+ return _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) {
+ var p = superPropBase(e, t);
+ if (p) {
+ var n = Object.getOwnPropertyDescriptor(p, t);
+ return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value;
+ }
+ }, _get.apply(null, arguments);
+}
+export { _get as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js
new file mode 100644
index 0000000..9073c45
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js
@@ -0,0 +1,6 @@
+function _getPrototypeOf(t) {
+ return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
+ return t.__proto__ || Object.getPrototypeOf(t);
+ }, _getPrototypeOf(t);
+}
+export { _getPrototypeOf as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/identity.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/identity.js
new file mode 100644
index 0000000..6b564ac
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/identity.js
@@ -0,0 +1,4 @@
+function _identity(t) {
+ return t;
+}
+export { _identity as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/importDeferProxy.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/importDeferProxy.js
new file mode 100644
index 0000000..6d35b52
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/importDeferProxy.js
@@ -0,0 +1,27 @@
+function _importDeferProxy(e) {
+ var t = null,
+ constValue = function constValue(e) {
+ return function () {
+ return e;
+ };
+ },
+ proxy = function proxy(r) {
+ return function (n, o, f) {
+ return null === t && (t = e()), r(t, o, f);
+ };
+ };
+ return new Proxy({}, {
+ defineProperty: constValue(!1),
+ deleteProperty: constValue(!1),
+ get: proxy(Reflect.get),
+ getOwnPropertyDescriptor: proxy(Reflect.getOwnPropertyDescriptor),
+ getPrototypeOf: constValue(null),
+ isExtensible: constValue(!1),
+ has: proxy(Reflect.has),
+ ownKeys: proxy(Reflect.ownKeys),
+ preventExtensions: constValue(!0),
+ set: constValue(!1),
+ setPrototypeOf: constValue(!1)
+ });
+}
+export { _importDeferProxy as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/inherits.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/inherits.js
new file mode 100644
index 0000000..78f6e4e
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/inherits.js
@@ -0,0 +1,14 @@
+import setPrototypeOf from "./setPrototypeOf.js";
+function _inherits(t, e) {
+ if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
+ t.prototype = Object.create(e && e.prototype, {
+ constructor: {
+ value: t,
+ writable: !0,
+ configurable: !0
+ }
+ }), Object.defineProperty(t, "prototype", {
+ writable: !1
+ }), e && setPrototypeOf(t, e);
+}
+export { _inherits as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js
new file mode 100644
index 0000000..0bd1330
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js
@@ -0,0 +1,5 @@
+import setPrototypeOf from "./setPrototypeOf.js";
+function _inheritsLoose(t, o) {
+ t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);
+}
+export { _inheritsLoose as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js
new file mode 100644
index 0000000..68bcc2c
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js
@@ -0,0 +1,9 @@
+function _initializerDefineProperty(e, i, r, l) {
+ r && Object.defineProperty(e, i, {
+ enumerable: r.enumerable,
+ configurable: r.configurable,
+ writable: r.writable,
+ value: r.initializer ? r.initializer.call(l) : void 0
+ });
+}
+export { _initializerDefineProperty as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/initializerWarningHelper.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/initializerWarningHelper.js
new file mode 100644
index 0000000..0a658e3
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/initializerWarningHelper.js
@@ -0,0 +1,4 @@
+function _initializerWarningHelper(r, e) {
+ throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.");
+}
+export { _initializerWarningHelper as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/instanceof.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/instanceof.js
new file mode 100644
index 0000000..316539e
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/instanceof.js
@@ -0,0 +1,4 @@
+function _instanceof(n, e) {
+ return null != e && "undefined" != typeof Symbol && e[Symbol.hasInstance] ? !!e[Symbol.hasInstance](n) : n instanceof e;
+}
+export { _instanceof as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/interopRequireDefault.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/interopRequireDefault.js
new file mode 100644
index 0000000..365d248
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/interopRequireDefault.js
@@ -0,0 +1,6 @@
+function _interopRequireDefault(e) {
+ return e && e.__esModule ? e : {
+ "default": e
+ };
+}
+export { _interopRequireDefault as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/interopRequireWildcard.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/interopRequireWildcard.js
new file mode 100644
index 0000000..ed9ca31
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/interopRequireWildcard.js
@@ -0,0 +1,22 @@
+import _typeof from "./typeof.js";
+function _interopRequireWildcard(e, t) {
+ if ("function" == typeof WeakMap) var r = new WeakMap(),
+ n = new WeakMap();
+ return (_interopRequireWildcard = function _interopRequireWildcard(e, t) {
+ if (!t && e && e.__esModule) return e;
+ var o,
+ i,
+ f = {
+ __proto__: null,
+ "default": e
+ };
+ if (null === e || "object" != _typeof(e) && "function" != typeof e) return f;
+ if (o = t ? n : r) {
+ if (o.has(e)) return o.get(e);
+ o.set(e, f);
+ }
+ for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]);
+ return f;
+ })(e, t);
+}
+export { _interopRequireWildcard as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js
new file mode 100644
index 0000000..0cfe276
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js
@@ -0,0 +1,8 @@
+function _isNativeFunction(t) {
+ try {
+ return -1 !== Function.toString.call(t).indexOf("[native code]");
+ } catch (n) {
+ return "function" == typeof t;
+ }
+}
+export { _isNativeFunction as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js
new file mode 100644
index 0000000..0eb5e39
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js
@@ -0,0 +1,9 @@
+function _isNativeReflectConstruct() {
+ try {
+ var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ } catch (t) {}
+ return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {
+ return !!t;
+ })();
+}
+export { _isNativeReflectConstruct as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/iterableToArray.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/iterableToArray.js
new file mode 100644
index 0000000..b7de339
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/iterableToArray.js
@@ -0,0 +1,4 @@
+function _iterableToArray(r) {
+ if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
+}
+export { _iterableToArray as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js
new file mode 100644
index 0000000..473f067
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js
@@ -0,0 +1,28 @@
+function _iterableToArrayLimit(r, l) {
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
+ if (null != t) {
+ var e,
+ n,
+ i,
+ u,
+ a = [],
+ f = !0,
+ o = !1;
+ try {
+ if (i = (t = t.call(r)).next, 0 === l) {
+ if (Object(t) !== t) return;
+ f = !1;
+ } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
+ } catch (r) {
+ o = !0, n = r;
+ } finally {
+ try {
+ if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
+ } finally {
+ if (o) throw n;
+ }
+ }
+ return a;
+ }
+}
+export { _iterableToArrayLimit as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/jsx.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/jsx.js
new file mode 100644
index 0000000..a120e5b
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/jsx.js
@@ -0,0 +1,22 @@
+var REACT_ELEMENT_TYPE;
+function _createRawReactElement(e, r, E, l) {
+ REACT_ELEMENT_TYPE || (REACT_ELEMENT_TYPE = "function" == typeof Symbol && Symbol["for"] && Symbol["for"]("react.element") || 60103);
+ var o = e && e.defaultProps,
+ n = arguments.length - 3;
+ if (r || 0 === n || (r = {
+ children: void 0
+ }), 1 === n) r.children = l;else if (n > 1) {
+ for (var t = Array(n), f = 0; f < n; f++) t[f] = arguments[f + 3];
+ r.children = t;
+ }
+ if (r && o) for (var i in o) void 0 === r[i] && (r[i] = o[i]);else r || (r = o || {});
+ return {
+ $$typeof: REACT_ELEMENT_TYPE,
+ type: e,
+ key: void 0 === E ? null : "" + E,
+ ref: null,
+ props: r,
+ _owner: null
+ };
+}
+export { _createRawReactElement as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/maybeArrayLike.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/maybeArrayLike.js
new file mode 100644
index 0000000..527c682
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/maybeArrayLike.js
@@ -0,0 +1,9 @@
+import arrayLikeToArray from "./arrayLikeToArray.js";
+function _maybeArrayLike(r, a, e) {
+ if (a && !Array.isArray(a) && "number" == typeof a.length) {
+ var y = a.length;
+ return arrayLikeToArray(a, void 0 !== e && e < y ? e : y);
+ }
+ return r(a, e);
+}
+export { _maybeArrayLike as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/newArrowCheck.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/newArrowCheck.js
new file mode 100644
index 0000000..5f70e0d
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/newArrowCheck.js
@@ -0,0 +1,4 @@
+function _newArrowCheck(n, r) {
+ if (n !== r) throw new TypeError("Cannot instantiate an arrow function");
+}
+export { _newArrowCheck as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js
new file mode 100644
index 0000000..9050250
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js
@@ -0,0 +1,4 @@
+function _nonIterableRest() {
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+export { _nonIterableRest as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js
new file mode 100644
index 0000000..fb03235
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js
@@ -0,0 +1,4 @@
+function _nonIterableSpread() {
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+export { _nonIterableSpread as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/nullishReceiverError.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/nullishReceiverError.js
new file mode 100644
index 0000000..d8c3060
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/nullishReceiverError.js
@@ -0,0 +1,4 @@
+function _nullishReceiverError(r) {
+ throw new TypeError("Cannot set property of null or undefined.");
+}
+export { _nullishReceiverError as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js
new file mode 100644
index 0000000..a92eac8
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js
@@ -0,0 +1,4 @@
+function _objectDestructuringEmpty(t) {
+ if (null == t) throw new TypeError("Cannot destructure " + t);
+}
+export { _objectDestructuringEmpty as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectSpread.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectSpread.js
new file mode 100644
index 0000000..0f82f06
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectSpread.js
@@ -0,0 +1,14 @@
+import defineProperty from "./defineProperty.js";
+function _objectSpread(e) {
+ for (var r = 1; r < arguments.length; r++) {
+ var t = null != arguments[r] ? Object(arguments[r]) : {},
+ o = Object.keys(t);
+ "function" == typeof Object.getOwnPropertySymbols && o.push.apply(o, Object.getOwnPropertySymbols(t).filter(function (e) {
+ return Object.getOwnPropertyDescriptor(t, e).enumerable;
+ })), o.forEach(function (r) {
+ defineProperty(e, r, t[r]);
+ });
+ }
+ return e;
+}
+export { _objectSpread as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectSpread2.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectSpread2.js
new file mode 100644
index 0000000..0035bc7
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectSpread2.js
@@ -0,0 +1,23 @@
+import defineProperty from "./defineProperty.js";
+function ownKeys(e, r) {
+ var t = Object.keys(e);
+ if (Object.getOwnPropertySymbols) {
+ var o = Object.getOwnPropertySymbols(e);
+ r && (o = o.filter(function (r) {
+ return Object.getOwnPropertyDescriptor(e, r).enumerable;
+ })), t.push.apply(t, o);
+ }
+ return t;
+}
+function _objectSpread2(e) {
+ for (var r = 1; r < arguments.length; r++) {
+ var t = null != arguments[r] ? arguments[r] : {};
+ r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
+ defineProperty(e, r, t[r]);
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
+ Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
+ });
+ }
+ return e;
+}
+export { _objectSpread2 as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js
new file mode 100644
index 0000000..598fb9a
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js
@@ -0,0 +1,13 @@
+import objectWithoutPropertiesLoose from "./objectWithoutPropertiesLoose.js";
+function _objectWithoutProperties(e, t) {
+ if (null == e) return {};
+ var o,
+ r,
+ i = objectWithoutPropertiesLoose(e, t);
+ if (Object.getOwnPropertySymbols) {
+ var n = Object.getOwnPropertySymbols(e);
+ for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
+ }
+ return i;
+}
+export { _objectWithoutProperties as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js
new file mode 100644
index 0000000..90f68f3
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js
@@ -0,0 +1,10 @@
+function _objectWithoutPropertiesLoose(r, e) {
+ if (null == r) return {};
+ var t = {};
+ for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
+ if (-1 !== e.indexOf(n)) continue;
+ t[n] = r[n];
+ }
+ return t;
+}
+export { _objectWithoutPropertiesLoose as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/package.json b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/package.json
new file mode 100644
index 0000000..aead43d
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js
new file mode 100644
index 0000000..d84e1e6
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js
@@ -0,0 +1,8 @@
+import _typeof from "./typeof.js";
+import assertThisInitialized from "./assertThisInitialized.js";
+function _possibleConstructorReturn(t, e) {
+ if (e && ("object" == _typeof(e) || "function" == typeof e)) return e;
+ if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
+ return assertThisInitialized(t);
+}
+export { _possibleConstructorReturn as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/readOnlyError.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/readOnlyError.js
new file mode 100644
index 0000000..fcc3e33
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/readOnlyError.js
@@ -0,0 +1,4 @@
+function _readOnlyError(r) {
+ throw new TypeError('"' + r + '" is read-only');
+}
+export { _readOnlyError as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regenerator.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regenerator.js
new file mode 100644
index 0000000..6f2f2a1
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regenerator.js
@@ -0,0 +1,89 @@
+import regeneratorDefine from "./regeneratorDefine.js";
+function _regenerator() {
+ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
+ var e,
+ t,
+ r = "function" == typeof Symbol ? Symbol : {},
+ n = r.iterator || "@@iterator",
+ o = r.toStringTag || "@@toStringTag";
+ function i(r, n, o, i) {
+ var c = n && n.prototype instanceof Generator ? n : Generator,
+ u = Object.create(c.prototype);
+ return regeneratorDefine(u, "_invoke", function (r, n, o) {
+ var i,
+ c,
+ u,
+ f = 0,
+ p = o || [],
+ y = !1,
+ G = {
+ p: 0,
+ n: 0,
+ v: e,
+ a: d,
+ f: d.bind(e, 4),
+ d: function d(t, r) {
+ return i = t, c = 0, u = e, G.n = r, a;
+ }
+ };
+ function d(r, n) {
+ for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) {
+ var o,
+ i = p[t],
+ d = G.p,
+ l = i[2];
+ r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0));
+ }
+ if (o || r > 1) return a;
+ throw y = !0, n;
+ }
+ return function (o, p, l) {
+ if (f > 1) throw TypeError("Generator is already running");
+ for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) {
+ i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u);
+ try {
+ if (f = 2, i) {
+ if (c || (o = "next"), t = i[o]) {
+ if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object");
+ if (!t.done) return t;
+ u = t.value, c < 2 && (c = 0);
+ } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1);
+ i = e;
+ } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break;
+ } catch (t) {
+ i = e, c = 1, u = t;
+ } finally {
+ f = 1;
+ }
+ }
+ return {
+ value: t,
+ done: y
+ };
+ };
+ }(r, o, i), !0), u;
+ }
+ var a = {};
+ function Generator() {}
+ function GeneratorFunction() {}
+ function GeneratorFunctionPrototype() {}
+ t = Object.getPrototypeOf;
+ var c = [][n] ? t(t([][n]())) : (regeneratorDefine(t = {}, n, function () {
+ return this;
+ }), t),
+ u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c);
+ function f(e) {
+ return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, regeneratorDefine(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e;
+ }
+ return GeneratorFunction.prototype = GeneratorFunctionPrototype, regeneratorDefine(u, "constructor", GeneratorFunctionPrototype), regeneratorDefine(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", regeneratorDefine(GeneratorFunctionPrototype, o, "GeneratorFunction"), regeneratorDefine(u), regeneratorDefine(u, o, "Generator"), regeneratorDefine(u, n, function () {
+ return this;
+ }), regeneratorDefine(u, "toString", function () {
+ return "[object Generator]";
+ }), (_regenerator = function _regenerator() {
+ return {
+ w: i,
+ m: f
+ };
+ })();
+}
+export { _regenerator as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorAsync.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorAsync.js
new file mode 100644
index 0000000..f73d4e6
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorAsync.js
@@ -0,0 +1,8 @@
+import regeneratorAsyncGen from "./regeneratorAsyncGen.js";
+function _regeneratorAsync(n, e, r, t, o) {
+ var a = regeneratorAsyncGen(n, e, r, t, o);
+ return a.next().then(function (n) {
+ return n.done ? n.value : a.next();
+ });
+}
+export { _regeneratorAsync as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorAsyncGen.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorAsyncGen.js
new file mode 100644
index 0000000..1932bcd
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorAsyncGen.js
@@ -0,0 +1,6 @@
+import regenerator from "./regenerator.js";
+import regeneratorAsyncIterator from "./regeneratorAsyncIterator.js";
+function _regeneratorAsyncGen(r, e, t, o, n) {
+ return new regeneratorAsyncIterator(regenerator().w(r, e, t, o), n || Promise);
+}
+export { _regeneratorAsyncGen as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorAsyncIterator.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorAsyncIterator.js
new file mode 100644
index 0000000..90d84cc
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorAsyncIterator.js
@@ -0,0 +1,33 @@
+import OverloadYield from "./OverloadYield.js";
+import regeneratorDefine from "./regeneratorDefine.js";
+function AsyncIterator(t, e) {
+ function n(r, o, i, f) {
+ try {
+ var c = t[r](o),
+ u = c.value;
+ return u instanceof OverloadYield ? e.resolve(u.v).then(function (t) {
+ n("next", t, i, f);
+ }, function (t) {
+ n("throw", t, i, f);
+ }) : e.resolve(u).then(function (t) {
+ c.value = t, i(c);
+ }, function (t) {
+ return n("throw", t, i, f);
+ });
+ } catch (t) {
+ f(t);
+ }
+ }
+ var r;
+ this.next || (regeneratorDefine(AsyncIterator.prototype), regeneratorDefine(AsyncIterator.prototype, "function" == typeof Symbol && Symbol.asyncIterator || "@asyncIterator", function () {
+ return this;
+ })), regeneratorDefine(this, "_invoke", function (t, o, i) {
+ function f() {
+ return new e(function (e, r) {
+ n(t, i, e, r);
+ });
+ }
+ return r = r ? r.then(f, f) : f();
+ }, !0);
+}
+export { AsyncIterator as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorDefine.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorDefine.js
new file mode 100644
index 0000000..7140470
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorDefine.js
@@ -0,0 +1,22 @@
+function _regeneratorDefine(e, r, n, t) {
+ var i = Object.defineProperty;
+ try {
+ i({}, "", {});
+ } catch (e) {
+ i = 0;
+ }
+ _regeneratorDefine = function regeneratorDefine(e, r, n, t) {
+ function o(r, n) {
+ _regeneratorDefine(e, r, function (e) {
+ return this._invoke(r, n, e);
+ });
+ }
+ r ? i ? i(e, r, {
+ value: n,
+ enumerable: !t,
+ configurable: !t,
+ writable: !t
+ }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));
+ }, _regeneratorDefine(e, r, n, t);
+}
+export { _regeneratorDefine as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorKeys.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorKeys.js
new file mode 100644
index 0000000..5d0d48b
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorKeys.js
@@ -0,0 +1,10 @@
+function _regeneratorKeys(e) {
+ var n = Object(e),
+ r = [];
+ for (var t in n) r.unshift(t);
+ return function e() {
+ for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e;
+ return e.done = !0, e;
+ };
+}
+export { _regeneratorKeys as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js
new file mode 100644
index 0000000..3350188
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js
@@ -0,0 +1,77 @@
+import OverloadYield from "./OverloadYield.js";
+import regenerator from "./regenerator.js";
+import regeneratorAsync from "./regeneratorAsync.js";
+import regeneratorAsyncGen from "./regeneratorAsyncGen.js";
+import regeneratorAsyncIterator from "./regeneratorAsyncIterator.js";
+import regeneratorKeys from "./regeneratorKeys.js";
+import regeneratorValues from "./regeneratorValues.js";
+function _regeneratorRuntime() {
+ "use strict";
+
+ var r = regenerator(),
+ e = r.m(_regeneratorRuntime),
+ t = (Object.getPrototypeOf ? Object.getPrototypeOf(e) : e.__proto__).constructor;
+ function n(r) {
+ var e = "function" == typeof r && r.constructor;
+ return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name));
+ }
+ var o = {
+ "throw": 1,
+ "return": 2,
+ "break": 3,
+ "continue": 3
+ };
+ function a(r) {
+ var e, t;
+ return function (n) {
+ e || (e = {
+ stop: function stop() {
+ return t(n.a, 2);
+ },
+ "catch": function _catch() {
+ return n.v;
+ },
+ abrupt: function abrupt(r, e) {
+ return t(n.a, o[r], e);
+ },
+ delegateYield: function delegateYield(r, o, a) {
+ return e.resultName = o, t(n.d, regeneratorValues(r), a);
+ },
+ finish: function finish(r) {
+ return t(n.f, r);
+ }
+ }, t = function t(r, _t, o) {
+ n.p = e.prev, n.n = e.next;
+ try {
+ return r(_t, o);
+ } finally {
+ e.next = n.n;
+ }
+ }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n;
+ try {
+ return r.call(this, e);
+ } finally {
+ n.p = e.prev, n.n = e.next;
+ }
+ };
+ }
+ return (_regeneratorRuntime = function _regeneratorRuntime() {
+ return {
+ wrap: function wrap(e, t, n, o) {
+ return r.w(a(e), t, n, o && o.reverse());
+ },
+ isGeneratorFunction: n,
+ mark: r.m,
+ awrap: function awrap(r, e) {
+ return new OverloadYield(r, e);
+ },
+ AsyncIterator: regeneratorAsyncIterator,
+ async: function async(r, e, t, o, u) {
+ return (n(e) ? regeneratorAsyncGen : regeneratorAsync)(a(r), e, t, o, u);
+ },
+ keys: regeneratorKeys,
+ values: regeneratorValues
+ };
+ })();
+}
+export { _regeneratorRuntime as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorValues.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorValues.js
new file mode 100644
index 0000000..9996852
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/regeneratorValues.js
@@ -0,0 +1,19 @@
+import _typeof from "./typeof.js";
+function _regeneratorValues(e) {
+ if (null != e) {
+ var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"],
+ r = 0;
+ if (t) return t.call(e);
+ if ("function" == typeof e.next) return e;
+ if (!isNaN(e.length)) return {
+ next: function next() {
+ return e && r >= e.length && (e = void 0), {
+ value: e && e[r++],
+ done: !e
+ };
+ }
+ };
+ }
+ throw new TypeError(_typeof(e) + " is not iterable");
+}
+export { _regeneratorValues as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/set.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/set.js
new file mode 100644
index 0000000..ed0a803
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/set.js
@@ -0,0 +1,22 @@
+import superPropBase from "./superPropBase.js";
+import defineProperty from "./defineProperty.js";
+function set(e, r, t, o) {
+ return set = "undefined" != typeof Reflect && Reflect.set ? Reflect.set : function (e, r, t, o) {
+ var f,
+ i = superPropBase(e, r);
+ if (i) {
+ if ((f = Object.getOwnPropertyDescriptor(i, r)).set) return f.set.call(o, t), !0;
+ if (!f.writable) return !1;
+ }
+ if (f = Object.getOwnPropertyDescriptor(o, r)) {
+ if (!f.writable) return !1;
+ f.value = t, Object.defineProperty(o, r, f);
+ } else defineProperty(o, r, t);
+ return !0;
+ }, set(e, r, t, o);
+}
+function _set(e, r, t, o, f) {
+ if (!set(e, r, t, o || e) && f) throw new TypeError("failed to set property");
+ return t;
+}
+export { _set as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/setFunctionName.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/setFunctionName.js
new file mode 100644
index 0000000..82213ce
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/setFunctionName.js
@@ -0,0 +1,12 @@
+import _typeof from "./typeof.js";
+function setFunctionName(e, t, n) {
+ "symbol" == _typeof(t) && (t = (t = t.description) ? "[" + t + "]" : "");
+ try {
+ Object.defineProperty(e, "name", {
+ configurable: !0,
+ value: n ? n + " " + t : t
+ });
+ } catch (e) {}
+ return e;
+}
+export { setFunctionName as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js
new file mode 100644
index 0000000..c30983c
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js
@@ -0,0 +1,6 @@
+function _setPrototypeOf(t, e) {
+ return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
+ return t.__proto__ = e, t;
+ }, _setPrototypeOf(t, e);
+}
+export { _setPrototypeOf as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/skipFirstGeneratorNext.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/skipFirstGeneratorNext.js
new file mode 100644
index 0000000..41d5738
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/skipFirstGeneratorNext.js
@@ -0,0 +1,7 @@
+function _skipFirstGeneratorNext(t) {
+ return function () {
+ var r = t.apply(this, arguments);
+ return r.next(), r;
+ };
+}
+export { _skipFirstGeneratorNext as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/slicedToArray.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/slicedToArray.js
new file mode 100644
index 0000000..c044c2a
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/slicedToArray.js
@@ -0,0 +1,8 @@
+import arrayWithHoles from "./arrayWithHoles.js";
+import iterableToArrayLimit from "./iterableToArrayLimit.js";
+import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
+import nonIterableRest from "./nonIterableRest.js";
+function _slicedToArray(r, e) {
+ return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();
+}
+export { _slicedToArray as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/superPropBase.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/superPropBase.js
new file mode 100644
index 0000000..a5fa386
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/superPropBase.js
@@ -0,0 +1,6 @@
+import getPrototypeOf from "./getPrototypeOf.js";
+function _superPropBase(t, o) {
+ for (; !{}.hasOwnProperty.call(t, o) && null !== (t = getPrototypeOf(t)););
+ return t;
+}
+export { _superPropBase as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/superPropGet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/superPropGet.js
new file mode 100644
index 0000000..b2b60a8
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/superPropGet.js
@@ -0,0 +1,9 @@
+import get from "./get.js";
+import getPrototypeOf from "./getPrototypeOf.js";
+function _superPropGet(t, o, e, r) {
+ var p = get(getPrototypeOf(1 & r ? t.prototype : t), o, e);
+ return 2 & r && "function" == typeof p ? function (t) {
+ return p.apply(e, t);
+ } : p;
+}
+export { _superPropGet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/superPropSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/superPropSet.js
new file mode 100644
index 0000000..e182f38
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/superPropSet.js
@@ -0,0 +1,6 @@
+import set from "./set.js";
+import getPrototypeOf from "./getPrototypeOf.js";
+function _superPropSet(t, e, o, r, p, f) {
+ return set(getPrototypeOf(f ? t.prototype : t), e, o, r, p);
+}
+export { _superPropSet as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js
new file mode 100644
index 0000000..3d842cd
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js
@@ -0,0 +1,8 @@
+function _taggedTemplateLiteral(e, t) {
+ return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, {
+ raw: {
+ value: Object.freeze(t)
+ }
+ }));
+}
+export { _taggedTemplateLiteral as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteralLoose.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteralLoose.js
new file mode 100644
index 0000000..741aeb8
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteralLoose.js
@@ -0,0 +1,4 @@
+function _taggedTemplateLiteralLoose(e, t) {
+ return t || (t = e.slice(0)), e.raw = t, e;
+}
+export { _taggedTemplateLiteralLoose as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/tdz.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/tdz.js
new file mode 100644
index 0000000..58df493
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/tdz.js
@@ -0,0 +1,4 @@
+function _tdzError(e) {
+ throw new ReferenceError(e + " is not defined - temporal dead zone");
+}
+export { _tdzError as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/temporalRef.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/temporalRef.js
new file mode 100644
index 0000000..8dbf014
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/temporalRef.js
@@ -0,0 +1,6 @@
+import temporalUndefined from "./temporalUndefined.js";
+import tdz from "./tdz.js";
+function _temporalRef(r, e) {
+ return r === temporalUndefined ? tdz(e) : r;
+}
+export { _temporalRef as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/temporalUndefined.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/temporalUndefined.js
new file mode 100644
index 0000000..2ec0b0d
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/temporalUndefined.js
@@ -0,0 +1,2 @@
+function _temporalUndefined() {}
+export { _temporalUndefined as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toArray.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toArray.js
new file mode 100644
index 0000000..e5f0f52
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toArray.js
@@ -0,0 +1,8 @@
+import arrayWithHoles from "./arrayWithHoles.js";
+import iterableToArray from "./iterableToArray.js";
+import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
+import nonIterableRest from "./nonIterableRest.js";
+function _toArray(r) {
+ return arrayWithHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableRest();
+}
+export { _toArray as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js
new file mode 100644
index 0000000..f7338e4
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js
@@ -0,0 +1,8 @@
+import arrayWithoutHoles from "./arrayWithoutHoles.js";
+import iterableToArray from "./iterableToArray.js";
+import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
+import nonIterableSpread from "./nonIterableSpread.js";
+function _toConsumableArray(r) {
+ return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();
+}
+export { _toConsumableArray as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toPrimitive.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toPrimitive.js
new file mode 100644
index 0000000..9a3de46
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toPrimitive.js
@@ -0,0 +1,12 @@
+import _typeof from "./typeof.js";
+function toPrimitive(t, r) {
+ if ("object" != _typeof(t) || !t) return t;
+ var e = t[Symbol.toPrimitive];
+ if (void 0 !== e) {
+ var i = e.call(t, r || "default");
+ if ("object" != _typeof(i)) return i;
+ throw new TypeError("@@toPrimitive must return a primitive value.");
+ }
+ return ("string" === r ? String : Number)(t);
+}
+export { toPrimitive as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js
new file mode 100644
index 0000000..b3274d8
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js
@@ -0,0 +1,7 @@
+import _typeof from "./typeof.js";
+import toPrimitive from "./toPrimitive.js";
+function toPropertyKey(t) {
+ var i = toPrimitive(t, "string");
+ return "symbol" == _typeof(i) ? i : i + "";
+}
+export { toPropertyKey as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toSetter.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toSetter.js
new file mode 100644
index 0000000..b1dbf7a
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/toSetter.js
@@ -0,0 +1,10 @@
+function _toSetter(t, e, n) {
+ e || (e = []);
+ var r = e.length++;
+ return Object.defineProperty({}, "_", {
+ set: function set(o) {
+ e[r] = o, t.apply(n, e);
+ }
+ });
+}
+export { _toSetter as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/tsRewriteRelativeImportExtensions.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/tsRewriteRelativeImportExtensions.js
new file mode 100644
index 0000000..28ffc0b
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/tsRewriteRelativeImportExtensions.js
@@ -0,0 +1,6 @@
+function tsRewriteRelativeImportExtensions(t, e) {
+ return "string" == typeof t && /^\.\.?\//.test(t) ? t.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+)?)\.([cm]?)ts$/i, function (t, s, r, n, o) {
+ return s ? e ? ".jsx" : ".js" : !r || n && o ? r + n + "." + o.toLowerCase() + "js" : t;
+ }) : t;
+}
+export { tsRewriteRelativeImportExtensions as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/typeof.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/typeof.js
new file mode 100644
index 0000000..5b0bc9b
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/typeof.js
@@ -0,0 +1,10 @@
+function _typeof(o) {
+ "@babel/helpers - typeof";
+
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
+ return typeof o;
+ } : function (o) {
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
+ }, _typeof(o);
+}
+export { _typeof as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js
new file mode 100644
index 0000000..33adc49
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js
@@ -0,0 +1,9 @@
+import arrayLikeToArray from "./arrayLikeToArray.js";
+function _unsupportedIterableToArray(r, a) {
+ if (r) {
+ if ("string" == typeof r) return arrayLikeToArray(r, a);
+ var t = {}.toString.call(r).slice(8, -1);
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;
+ }
+}
+export { _unsupportedIterableToArray as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/using.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/using.js
new file mode 100644
index 0000000..9bda17b
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/using.js
@@ -0,0 +1,12 @@
+function _using(o, n, e) {
+ if (null == n) return n;
+ if (Object(n) !== n) throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");
+ if (e) var r = n[Symbol.asyncDispose || Symbol["for"]("Symbol.asyncDispose")];
+ if (null == r && (r = n[Symbol.dispose || Symbol["for"]("Symbol.dispose")]), "function" != typeof r) throw new TypeError("Property [Symbol.dispose] is not a function.");
+ return o.push({
+ v: n,
+ d: r,
+ a: e
+ }), n;
+}
+export { _using as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/usingCtx.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/usingCtx.js
new file mode 100644
index 0000000..1464379
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/usingCtx.js
@@ -0,0 +1,59 @@
+function _usingCtx() {
+ var r = "function" == typeof SuppressedError ? SuppressedError : function (r, e) {
+ var n = Error();
+ return n.name = "SuppressedError", n.error = r, n.suppressed = e, n;
+ },
+ e = {},
+ n = [];
+ function using(r, e) {
+ if (null != e) {
+ if (Object(e) !== e) throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");
+ if (r) var o = e[Symbol.asyncDispose || Symbol["for"]("Symbol.asyncDispose")];
+ if (void 0 === o && (o = e[Symbol.dispose || Symbol["for"]("Symbol.dispose")], r)) var t = o;
+ if ("function" != typeof o) throw new TypeError("Object is not disposable.");
+ t && (o = function o() {
+ try {
+ t.call(e);
+ } catch (r) {
+ return Promise.reject(r);
+ }
+ }), n.push({
+ v: e,
+ d: o,
+ a: r
+ });
+ } else r && n.push({
+ d: e,
+ a: r
+ });
+ return e;
+ }
+ return {
+ e: e,
+ u: using.bind(null, !1),
+ a: using.bind(null, !0),
+ d: function d() {
+ var o,
+ t = this.e,
+ s = 0;
+ function next() {
+ for (; o = n.pop();) try {
+ if (!o.a && 1 === s) return s = 0, n.push(o), Promise.resolve().then(next);
+ if (o.d) {
+ var r = o.d.call(o.v);
+ if (o.a) return s |= 2, Promise.resolve(r).then(next, err);
+ } else s |= 1;
+ } catch (r) {
+ return err(r);
+ }
+ if (1 === s) return t !== e ? Promise.reject(t) : Promise.resolve();
+ if (t !== e) throw t;
+ }
+ function err(n) {
+ return t = t !== e ? new r(n, t) : n, next();
+ }
+ return next();
+ }
+ };
+}
+export { _usingCtx as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js
new file mode 100644
index 0000000..7957d61
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js
@@ -0,0 +1,56 @@
+import OverloadYield from "./OverloadYield.js";
+function _wrapAsyncGenerator(e) {
+ return function () {
+ return new AsyncGenerator(e.apply(this, arguments));
+ };
+}
+function AsyncGenerator(e) {
+ var t, n;
+ function resume(t, n) {
+ try {
+ var r = e[t](n),
+ o = r.value,
+ u = o instanceof OverloadYield;
+ Promise.resolve(u ? o.v : o).then(function (n) {
+ if (u) {
+ var i = "return" === t && o.k ? t : "next";
+ if (!o.k || n.done) return resume(i, n);
+ n = e[i](n).value;
+ }
+ settle(!!r.done, n);
+ }, function (e) {
+ resume("throw", e);
+ });
+ } catch (e) {
+ settle(2, e);
+ }
+ }
+ function settle(e, r) {
+ 2 === e ? t.reject(r) : t.resolve({
+ value: r,
+ done: e
+ }), (t = t.next) ? resume(t.key, t.arg) : n = null;
+ }
+ this._invoke = function (e, r) {
+ return new Promise(function (o, u) {
+ var i = {
+ key: e,
+ arg: r,
+ resolve: o,
+ reject: u,
+ next: null
+ };
+ n ? n = n.next = i : (t = n = i, resume(e, r));
+ });
+ }, "function" != typeof e["return"] && (this["return"] = void 0);
+}
+AsyncGenerator.prototype["function" == typeof Symbol && Symbol.asyncIterator || "@@asyncIterator"] = function () {
+ return this;
+}, AsyncGenerator.prototype.next = function (e) {
+ return this._invoke("next", e);
+}, AsyncGenerator.prototype["throw"] = function (e) {
+ return this._invoke("throw", e);
+}, AsyncGenerator.prototype["return"] = function (e) {
+ return this._invoke("return", e);
+};
+export { _wrapAsyncGenerator as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js
new file mode 100644
index 0000000..15bf78f
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js
@@ -0,0 +1,27 @@
+import getPrototypeOf from "./getPrototypeOf.js";
+import setPrototypeOf from "./setPrototypeOf.js";
+import isNativeFunction from "./isNativeFunction.js";
+import construct from "./construct.js";
+function _wrapNativeSuper(t) {
+ var r = "function" == typeof Map ? new Map() : void 0;
+ return _wrapNativeSuper = function _wrapNativeSuper(t) {
+ if (null === t || !isNativeFunction(t)) return t;
+ if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function");
+ if (void 0 !== r) {
+ if (r.has(t)) return r.get(t);
+ r.set(t, Wrapper);
+ }
+ function Wrapper() {
+ return construct(t, arguments, getPrototypeOf(this).constructor);
+ }
+ return Wrapper.prototype = Object.create(t.prototype, {
+ constructor: {
+ value: Wrapper,
+ enumerable: !1,
+ writable: !0,
+ configurable: !0
+ }
+ }), setPrototypeOf(Wrapper, t);
+ }, _wrapNativeSuper(t);
+}
+export { _wrapNativeSuper as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/wrapRegExp.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/wrapRegExp.js
new file mode 100644
index 0000000..c455faa
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/wrapRegExp.js
@@ -0,0 +1,52 @@
+import _typeof from "./typeof.js";
+import setPrototypeOf from "./setPrototypeOf.js";
+import inherits from "./inherits.js";
+function _wrapRegExp() {
+ _wrapRegExp = function _wrapRegExp(e, r) {
+ return new BabelRegExp(e, void 0, r);
+ };
+ var e = RegExp.prototype,
+ r = new WeakMap();
+ function BabelRegExp(e, t, p) {
+ var o = RegExp(e, t);
+ return r.set(o, p || r.get(e)), setPrototypeOf(o, BabelRegExp.prototype);
+ }
+ function buildGroups(e, t) {
+ var p = r.get(t);
+ return Object.keys(p).reduce(function (r, t) {
+ var o = p[t];
+ if ("number" == typeof o) r[t] = e[o];else {
+ for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++;
+ r[t] = e[o[i]];
+ }
+ return r;
+ }, Object.create(null));
+ }
+ return inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) {
+ var t = e.exec.call(this, r);
+ if (t) {
+ t.groups = buildGroups(t, this);
+ var p = t.indices;
+ p && (p.groups = buildGroups(p, this));
+ }
+ return t;
+ }, BabelRegExp.prototype[Symbol.replace] = function (t, p) {
+ if ("string" == typeof p) {
+ var o = r.get(this);
+ return e[Symbol.replace].call(this, t, p.replace(/\$<([^>]+)(>|$)/g, function (e, r, t) {
+ if ("" === t) return e;
+ var p = o[r];
+ return Array.isArray(p) ? "$" + p.join("$") : "number" == typeof p ? "$" + p : "";
+ }));
+ }
+ if ("function" == typeof p) {
+ var i = this;
+ return e[Symbol.replace].call(this, t, function () {
+ var e = arguments;
+ return "object" != _typeof(e[e.length - 1]) && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e);
+ });
+ }
+ return e[Symbol.replace].call(this, t, p);
+ }, _wrapRegExp.apply(this, arguments);
+}
+export { _wrapRegExp as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/esm/writeOnlyError.js b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/writeOnlyError.js
new file mode 100644
index 0000000..250c286
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/esm/writeOnlyError.js
@@ -0,0 +1,4 @@
+function _writeOnlyError(r) {
+ throw new TypeError('"' + r + '" is write-only');
+}
+export { _writeOnlyError as default };
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/extends.js b/mqtt-backend/node_modules/@babel/runtime/helpers/extends.js
new file mode 100644
index 0000000..eee4a1f
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/extends.js
@@ -0,0 +1,10 @@
+function _extends() {
+ return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {
+ for (var e = 1; e < arguments.length; e++) {
+ var t = arguments[e];
+ for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
+ }
+ return n;
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports, _extends.apply(null, arguments);
+}
+module.exports = _extends, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/get.js b/mqtt-backend/node_modules/@babel/runtime/helpers/get.js
new file mode 100644
index 0000000..15428de
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/get.js
@@ -0,0 +1,11 @@
+var superPropBase = require("./superPropBase.js");
+function _get() {
+ return module.exports = _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) {
+ var p = superPropBase(e, t);
+ if (p) {
+ var n = Object.getOwnPropertyDescriptor(p, t);
+ return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value;
+ }
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports, _get.apply(null, arguments);
+}
+module.exports = _get, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/getPrototypeOf.js b/mqtt-backend/node_modules/@babel/runtime/helpers/getPrototypeOf.js
new file mode 100644
index 0000000..9070748
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/getPrototypeOf.js
@@ -0,0 +1,6 @@
+function _getPrototypeOf(t) {
+ return module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
+ return t.__proto__ || Object.getPrototypeOf(t);
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports, _getPrototypeOf(t);
+}
+module.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/identity.js b/mqtt-backend/node_modules/@babel/runtime/helpers/identity.js
new file mode 100644
index 0000000..54de5b5
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/identity.js
@@ -0,0 +1,4 @@
+function _identity(t) {
+ return t;
+}
+module.exports = _identity, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/importDeferProxy.js b/mqtt-backend/node_modules/@babel/runtime/helpers/importDeferProxy.js
new file mode 100644
index 0000000..cffaae6
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/importDeferProxy.js
@@ -0,0 +1,27 @@
+function _importDeferProxy(e) {
+ var t = null,
+ constValue = function constValue(e) {
+ return function () {
+ return e;
+ };
+ },
+ proxy = function proxy(r) {
+ return function (n, o, f) {
+ return null === t && (t = e()), r(t, o, f);
+ };
+ };
+ return new Proxy({}, {
+ defineProperty: constValue(!1),
+ deleteProperty: constValue(!1),
+ get: proxy(Reflect.get),
+ getOwnPropertyDescriptor: proxy(Reflect.getOwnPropertyDescriptor),
+ getPrototypeOf: constValue(null),
+ isExtensible: constValue(!1),
+ has: proxy(Reflect.has),
+ ownKeys: proxy(Reflect.ownKeys),
+ preventExtensions: constValue(!0),
+ set: constValue(!1),
+ setPrototypeOf: constValue(!1)
+ });
+}
+module.exports = _importDeferProxy, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/inherits.js b/mqtt-backend/node_modules/@babel/runtime/helpers/inherits.js
new file mode 100644
index 0000000..715a78e
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/inherits.js
@@ -0,0 +1,14 @@
+var setPrototypeOf = require("./setPrototypeOf.js");
+function _inherits(t, e) {
+ if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
+ t.prototype = Object.create(e && e.prototype, {
+ constructor: {
+ value: t,
+ writable: !0,
+ configurable: !0
+ }
+ }), Object.defineProperty(t, "prototype", {
+ writable: !1
+ }), e && setPrototypeOf(t, e);
+}
+module.exports = _inherits, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/inheritsLoose.js b/mqtt-backend/node_modules/@babel/runtime/helpers/inheritsLoose.js
new file mode 100644
index 0000000..a27baf0
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/inheritsLoose.js
@@ -0,0 +1,5 @@
+var setPrototypeOf = require("./setPrototypeOf.js");
+function _inheritsLoose(t, o) {
+ t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);
+}
+module.exports = _inheritsLoose, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/initializerDefineProperty.js b/mqtt-backend/node_modules/@babel/runtime/helpers/initializerDefineProperty.js
new file mode 100644
index 0000000..f9fa317
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/initializerDefineProperty.js
@@ -0,0 +1,9 @@
+function _initializerDefineProperty(e, i, r, l) {
+ r && Object.defineProperty(e, i, {
+ enumerable: r.enumerable,
+ configurable: r.configurable,
+ writable: r.writable,
+ value: r.initializer ? r.initializer.call(l) : void 0
+ });
+}
+module.exports = _initializerDefineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/initializerWarningHelper.js b/mqtt-backend/node_modules/@babel/runtime/helpers/initializerWarningHelper.js
new file mode 100644
index 0000000..e14ce59
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/initializerWarningHelper.js
@@ -0,0 +1,4 @@
+function _initializerWarningHelper(r, e) {
+ throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.");
+}
+module.exports = _initializerWarningHelper, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/instanceof.js b/mqtt-backend/node_modules/@babel/runtime/helpers/instanceof.js
new file mode 100644
index 0000000..9952301
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/instanceof.js
@@ -0,0 +1,4 @@
+function _instanceof(n, e) {
+ return null != e && "undefined" != typeof Symbol && e[Symbol.hasInstance] ? !!e[Symbol.hasInstance](n) : n instanceof e;
+}
+module.exports = _instanceof, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/interopRequireDefault.js b/mqtt-backend/node_modules/@babel/runtime/helpers/interopRequireDefault.js
new file mode 100644
index 0000000..6944715
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/interopRequireDefault.js
@@ -0,0 +1,6 @@
+function _interopRequireDefault(e) {
+ return e && e.__esModule ? e : {
+ "default": e
+ };
+}
+module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/interopRequireWildcard.js b/mqtt-backend/node_modules/@babel/runtime/helpers/interopRequireWildcard.js
new file mode 100644
index 0000000..d5f1054
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/interopRequireWildcard.js
@@ -0,0 +1,22 @@
+var _typeof = require("./typeof.js")["default"];
+function _interopRequireWildcard(e, t) {
+ if ("function" == typeof WeakMap) var r = new WeakMap(),
+ n = new WeakMap();
+ return (module.exports = _interopRequireWildcard = function _interopRequireWildcard(e, t) {
+ if (!t && e && e.__esModule) return e;
+ var o,
+ i,
+ f = {
+ __proto__: null,
+ "default": e
+ };
+ if (null === e || "object" != _typeof(e) && "function" != typeof e) return f;
+ if (o = t ? n : r) {
+ if (o.has(e)) return o.get(e);
+ o.set(e, f);
+ }
+ for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]);
+ return f;
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports)(e, t);
+}
+module.exports = _interopRequireWildcard, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/isNativeFunction.js b/mqtt-backend/node_modules/@babel/runtime/helpers/isNativeFunction.js
new file mode 100644
index 0000000..f0eb49e
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/isNativeFunction.js
@@ -0,0 +1,8 @@
+function _isNativeFunction(t) {
+ try {
+ return -1 !== Function.toString.call(t).indexOf("[native code]");
+ } catch (n) {
+ return "function" == typeof t;
+ }
+}
+module.exports = _isNativeFunction, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js b/mqtt-backend/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js
new file mode 100644
index 0000000..b677e10
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js
@@ -0,0 +1,9 @@
+function _isNativeReflectConstruct() {
+ try {
+ var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ } catch (t) {}
+ return (module.exports = _isNativeReflectConstruct = function _isNativeReflectConstruct() {
+ return !!t;
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports)();
+}
+module.exports = _isNativeReflectConstruct, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/iterableToArray.js b/mqtt-backend/node_modules/@babel/runtime/helpers/iterableToArray.js
new file mode 100644
index 0000000..c839a32
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/iterableToArray.js
@@ -0,0 +1,4 @@
+function _iterableToArray(r) {
+ if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
+}
+module.exports = _iterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js b/mqtt-backend/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js
new file mode 100644
index 0000000..2671778
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js
@@ -0,0 +1,28 @@
+function _iterableToArrayLimit(r, l) {
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
+ if (null != t) {
+ var e,
+ n,
+ i,
+ u,
+ a = [],
+ f = !0,
+ o = !1;
+ try {
+ if (i = (t = t.call(r)).next, 0 === l) {
+ if (Object(t) !== t) return;
+ f = !1;
+ } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
+ } catch (r) {
+ o = !0, n = r;
+ } finally {
+ try {
+ if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
+ } finally {
+ if (o) throw n;
+ }
+ }
+ return a;
+ }
+}
+module.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/jsx.js b/mqtt-backend/node_modules/@babel/runtime/helpers/jsx.js
new file mode 100644
index 0000000..3415eea
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/jsx.js
@@ -0,0 +1,22 @@
+var REACT_ELEMENT_TYPE;
+function _createRawReactElement(e, r, E, l) {
+ REACT_ELEMENT_TYPE || (REACT_ELEMENT_TYPE = "function" == typeof Symbol && Symbol["for"] && Symbol["for"]("react.element") || 60103);
+ var o = e && e.defaultProps,
+ n = arguments.length - 3;
+ if (r || 0 === n || (r = {
+ children: void 0
+ }), 1 === n) r.children = l;else if (n > 1) {
+ for (var t = Array(n), f = 0; f < n; f++) t[f] = arguments[f + 3];
+ r.children = t;
+ }
+ if (r && o) for (var i in o) void 0 === r[i] && (r[i] = o[i]);else r || (r = o || {});
+ return {
+ $$typeof: REACT_ELEMENT_TYPE,
+ type: e,
+ key: void 0 === E ? null : "" + E,
+ ref: null,
+ props: r,
+ _owner: null
+ };
+}
+module.exports = _createRawReactElement, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/maybeArrayLike.js b/mqtt-backend/node_modules/@babel/runtime/helpers/maybeArrayLike.js
new file mode 100644
index 0000000..9873cc7
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/maybeArrayLike.js
@@ -0,0 +1,9 @@
+var arrayLikeToArray = require("./arrayLikeToArray.js");
+function _maybeArrayLike(r, a, e) {
+ if (a && !Array.isArray(a) && "number" == typeof a.length) {
+ var y = a.length;
+ return arrayLikeToArray(a, void 0 !== e && e < y ? e : y);
+ }
+ return r(a, e);
+}
+module.exports = _maybeArrayLike, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/newArrowCheck.js b/mqtt-backend/node_modules/@babel/runtime/helpers/newArrowCheck.js
new file mode 100644
index 0000000..8e74d99
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/newArrowCheck.js
@@ -0,0 +1,4 @@
+function _newArrowCheck(n, r) {
+ if (n !== r) throw new TypeError("Cannot instantiate an arrow function");
+}
+module.exports = _newArrowCheck, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/nonIterableRest.js b/mqtt-backend/node_modules/@babel/runtime/helpers/nonIterableRest.js
new file mode 100644
index 0000000..95265ba
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/nonIterableRest.js
@@ -0,0 +1,4 @@
+function _nonIterableRest() {
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+module.exports = _nonIterableRest, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/nonIterableSpread.js b/mqtt-backend/node_modules/@babel/runtime/helpers/nonIterableSpread.js
new file mode 100644
index 0000000..3fcf23f
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/nonIterableSpread.js
@@ -0,0 +1,4 @@
+function _nonIterableSpread() {
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+module.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/nullishReceiverError.js b/mqtt-backend/node_modules/@babel/runtime/helpers/nullishReceiverError.js
new file mode 100644
index 0000000..970e023
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/nullishReceiverError.js
@@ -0,0 +1,4 @@
+function _nullishReceiverError(r) {
+ throw new TypeError("Cannot set property of null or undefined.");
+}
+module.exports = _nullishReceiverError, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js b/mqtt-backend/node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js
new file mode 100644
index 0000000..9f62a1b
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js
@@ -0,0 +1,4 @@
+function _objectDestructuringEmpty(t) {
+ if (null == t) throw new TypeError("Cannot destructure " + t);
+}
+module.exports = _objectDestructuringEmpty, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/objectSpread.js b/mqtt-backend/node_modules/@babel/runtime/helpers/objectSpread.js
new file mode 100644
index 0000000..a367643
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/objectSpread.js
@@ -0,0 +1,14 @@
+var defineProperty = require("./defineProperty.js");
+function _objectSpread(e) {
+ for (var r = 1; r < arguments.length; r++) {
+ var t = null != arguments[r] ? Object(arguments[r]) : {},
+ o = Object.keys(t);
+ "function" == typeof Object.getOwnPropertySymbols && o.push.apply(o, Object.getOwnPropertySymbols(t).filter(function (e) {
+ return Object.getOwnPropertyDescriptor(t, e).enumerable;
+ })), o.forEach(function (r) {
+ defineProperty(e, r, t[r]);
+ });
+ }
+ return e;
+}
+module.exports = _objectSpread, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/objectSpread2.js b/mqtt-backend/node_modules/@babel/runtime/helpers/objectSpread2.js
new file mode 100644
index 0000000..4f3b9fa
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/objectSpread2.js
@@ -0,0 +1,23 @@
+var defineProperty = require("./defineProperty.js");
+function ownKeys(e, r) {
+ var t = Object.keys(e);
+ if (Object.getOwnPropertySymbols) {
+ var o = Object.getOwnPropertySymbols(e);
+ r && (o = o.filter(function (r) {
+ return Object.getOwnPropertyDescriptor(e, r).enumerable;
+ })), t.push.apply(t, o);
+ }
+ return t;
+}
+function _objectSpread2(e) {
+ for (var r = 1; r < arguments.length; r++) {
+ var t = null != arguments[r] ? arguments[r] : {};
+ r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
+ defineProperty(e, r, t[r]);
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
+ Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
+ });
+ }
+ return e;
+}
+module.exports = _objectSpread2, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/objectWithoutProperties.js b/mqtt-backend/node_modules/@babel/runtime/helpers/objectWithoutProperties.js
new file mode 100644
index 0000000..3a40f9e
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/objectWithoutProperties.js
@@ -0,0 +1,13 @@
+var objectWithoutPropertiesLoose = require("./objectWithoutPropertiesLoose.js");
+function _objectWithoutProperties(e, t) {
+ if (null == e) return {};
+ var o,
+ r,
+ i = objectWithoutPropertiesLoose(e, t);
+ if (Object.getOwnPropertySymbols) {
+ var n = Object.getOwnPropertySymbols(e);
+ for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
+ }
+ return i;
+}
+module.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js b/mqtt-backend/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js
new file mode 100644
index 0000000..c243acd
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js
@@ -0,0 +1,10 @@
+function _objectWithoutPropertiesLoose(r, e) {
+ if (null == r) return {};
+ var t = {};
+ for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
+ if (-1 !== e.indexOf(n)) continue;
+ t[n] = r[n];
+ }
+ return t;
+}
+module.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js b/mqtt-backend/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js
new file mode 100644
index 0000000..06e6e6d
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js
@@ -0,0 +1,8 @@
+var _typeof = require("./typeof.js")["default"];
+var assertThisInitialized = require("./assertThisInitialized.js");
+function _possibleConstructorReturn(t, e) {
+ if (e && ("object" == _typeof(e) || "function" == typeof e)) return e;
+ if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
+ return assertThisInitialized(t);
+}
+module.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/readOnlyError.js b/mqtt-backend/node_modules/@babel/runtime/helpers/readOnlyError.js
new file mode 100644
index 0000000..1bf3e09
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/readOnlyError.js
@@ -0,0 +1,4 @@
+function _readOnlyError(r) {
+ throw new TypeError('"' + r + '" is read-only');
+}
+module.exports = _readOnlyError, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/regenerator.js b/mqtt-backend/node_modules/@babel/runtime/helpers/regenerator.js
new file mode 100644
index 0000000..0cf8710
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/regenerator.js
@@ -0,0 +1,89 @@
+var regeneratorDefine = require("./regeneratorDefine.js");
+function _regenerator() {
+ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
+ var e,
+ t,
+ r = "function" == typeof Symbol ? Symbol : {},
+ n = r.iterator || "@@iterator",
+ o = r.toStringTag || "@@toStringTag";
+ function i(r, n, o, i) {
+ var c = n && n.prototype instanceof Generator ? n : Generator,
+ u = Object.create(c.prototype);
+ return regeneratorDefine(u, "_invoke", function (r, n, o) {
+ var i,
+ c,
+ u,
+ f = 0,
+ p = o || [],
+ y = !1,
+ G = {
+ p: 0,
+ n: 0,
+ v: e,
+ a: d,
+ f: d.bind(e, 4),
+ d: function d(t, r) {
+ return i = t, c = 0, u = e, G.n = r, a;
+ }
+ };
+ function d(r, n) {
+ for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) {
+ var o,
+ i = p[t],
+ d = G.p,
+ l = i[2];
+ r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0));
+ }
+ if (o || r > 1) return a;
+ throw y = !0, n;
+ }
+ return function (o, p, l) {
+ if (f > 1) throw TypeError("Generator is already running");
+ for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) {
+ i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u);
+ try {
+ if (f = 2, i) {
+ if (c || (o = "next"), t = i[o]) {
+ if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object");
+ if (!t.done) return t;
+ u = t.value, c < 2 && (c = 0);
+ } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1);
+ i = e;
+ } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break;
+ } catch (t) {
+ i = e, c = 1, u = t;
+ } finally {
+ f = 1;
+ }
+ }
+ return {
+ value: t,
+ done: y
+ };
+ };
+ }(r, o, i), !0), u;
+ }
+ var a = {};
+ function Generator() {}
+ function GeneratorFunction() {}
+ function GeneratorFunctionPrototype() {}
+ t = Object.getPrototypeOf;
+ var c = [][n] ? t(t([][n]())) : (regeneratorDefine(t = {}, n, function () {
+ return this;
+ }), t),
+ u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c);
+ function f(e) {
+ return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, regeneratorDefine(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e;
+ }
+ return GeneratorFunction.prototype = GeneratorFunctionPrototype, regeneratorDefine(u, "constructor", GeneratorFunctionPrototype), regeneratorDefine(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", regeneratorDefine(GeneratorFunctionPrototype, o, "GeneratorFunction"), regeneratorDefine(u), regeneratorDefine(u, o, "Generator"), regeneratorDefine(u, n, function () {
+ return this;
+ }), regeneratorDefine(u, "toString", function () {
+ return "[object Generator]";
+ }), (module.exports = _regenerator = function _regenerator() {
+ return {
+ w: i,
+ m: f
+ };
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports)();
+}
+module.exports = _regenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorAsync.js b/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorAsync.js
new file mode 100644
index 0000000..d1e4c3f
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorAsync.js
@@ -0,0 +1,8 @@
+var regeneratorAsyncGen = require("./regeneratorAsyncGen.js");
+function _regeneratorAsync(n, e, r, t, o) {
+ var a = regeneratorAsyncGen(n, e, r, t, o);
+ return a.next().then(function (n) {
+ return n.done ? n.value : a.next();
+ });
+}
+module.exports = _regeneratorAsync, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorAsyncGen.js b/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorAsyncGen.js
new file mode 100644
index 0000000..f0212e3
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorAsyncGen.js
@@ -0,0 +1,6 @@
+var regenerator = require("./regenerator.js");
+var regeneratorAsyncIterator = require("./regeneratorAsyncIterator.js");
+function _regeneratorAsyncGen(r, e, t, o, n) {
+ return new regeneratorAsyncIterator(regenerator().w(r, e, t, o), n || Promise);
+}
+module.exports = _regeneratorAsyncGen, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorAsyncIterator.js b/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorAsyncIterator.js
new file mode 100644
index 0000000..afcb060
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorAsyncIterator.js
@@ -0,0 +1,33 @@
+var OverloadYield = require("./OverloadYield.js");
+var regeneratorDefine = require("./regeneratorDefine.js");
+function AsyncIterator(t, e) {
+ function n(r, o, i, f) {
+ try {
+ var c = t[r](o),
+ u = c.value;
+ return u instanceof OverloadYield ? e.resolve(u.v).then(function (t) {
+ n("next", t, i, f);
+ }, function (t) {
+ n("throw", t, i, f);
+ }) : e.resolve(u).then(function (t) {
+ c.value = t, i(c);
+ }, function (t) {
+ return n("throw", t, i, f);
+ });
+ } catch (t) {
+ f(t);
+ }
+ }
+ var r;
+ this.next || (regeneratorDefine(AsyncIterator.prototype), regeneratorDefine(AsyncIterator.prototype, "function" == typeof Symbol && Symbol.asyncIterator || "@asyncIterator", function () {
+ return this;
+ })), regeneratorDefine(this, "_invoke", function (t, o, i) {
+ function f() {
+ return new e(function (e, r) {
+ n(t, i, e, r);
+ });
+ }
+ return r = r ? r.then(f, f) : f();
+ }, !0);
+}
+module.exports = AsyncIterator, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorDefine.js b/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorDefine.js
new file mode 100644
index 0000000..8d7ffe0
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorDefine.js
@@ -0,0 +1,22 @@
+function _regeneratorDefine(e, r, n, t) {
+ var i = Object.defineProperty;
+ try {
+ i({}, "", {});
+ } catch (e) {
+ i = 0;
+ }
+ module.exports = _regeneratorDefine = function regeneratorDefine(e, r, n, t) {
+ function o(r, n) {
+ _regeneratorDefine(e, r, function (e) {
+ return this._invoke(r, n, e);
+ });
+ }
+ r ? i ? i(e, r, {
+ value: n,
+ enumerable: !t,
+ configurable: !t,
+ writable: !t
+ }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports, _regeneratorDefine(e, r, n, t);
+}
+module.exports = _regeneratorDefine, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorKeys.js b/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorKeys.js
new file mode 100644
index 0000000..99442bd
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorKeys.js
@@ -0,0 +1,10 @@
+function _regeneratorKeys(e) {
+ var n = Object(e),
+ r = [];
+ for (var t in n) r.unshift(t);
+ return function e() {
+ for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e;
+ return e.done = !0, e;
+ };
+}
+module.exports = _regeneratorKeys, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorRuntime.js b/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorRuntime.js
new file mode 100644
index 0000000..24baaa0
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorRuntime.js
@@ -0,0 +1,77 @@
+var OverloadYield = require("./OverloadYield.js");
+var regenerator = require("./regenerator.js");
+var regeneratorAsync = require("./regeneratorAsync.js");
+var regeneratorAsyncGen = require("./regeneratorAsyncGen.js");
+var regeneratorAsyncIterator = require("./regeneratorAsyncIterator.js");
+var regeneratorKeys = require("./regeneratorKeys.js");
+var regeneratorValues = require("./regeneratorValues.js");
+function _regeneratorRuntime() {
+ "use strict";
+
+ var r = regenerator(),
+ e = r.m(_regeneratorRuntime),
+ t = (Object.getPrototypeOf ? Object.getPrototypeOf(e) : e.__proto__).constructor;
+ function n(r) {
+ var e = "function" == typeof r && r.constructor;
+ return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name));
+ }
+ var o = {
+ "throw": 1,
+ "return": 2,
+ "break": 3,
+ "continue": 3
+ };
+ function a(r) {
+ var e, t;
+ return function (n) {
+ e || (e = {
+ stop: function stop() {
+ return t(n.a, 2);
+ },
+ "catch": function _catch() {
+ return n.v;
+ },
+ abrupt: function abrupt(r, e) {
+ return t(n.a, o[r], e);
+ },
+ delegateYield: function delegateYield(r, o, a) {
+ return e.resultName = o, t(n.d, regeneratorValues(r), a);
+ },
+ finish: function finish(r) {
+ return t(n.f, r);
+ }
+ }, t = function t(r, _t, o) {
+ n.p = e.prev, n.n = e.next;
+ try {
+ return r(_t, o);
+ } finally {
+ e.next = n.n;
+ }
+ }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n;
+ try {
+ return r.call(this, e);
+ } finally {
+ n.p = e.prev, n.n = e.next;
+ }
+ };
+ }
+ return (module.exports = _regeneratorRuntime = function _regeneratorRuntime() {
+ return {
+ wrap: function wrap(e, t, n, o) {
+ return r.w(a(e), t, n, o && o.reverse());
+ },
+ isGeneratorFunction: n,
+ mark: r.m,
+ awrap: function awrap(r, e) {
+ return new OverloadYield(r, e);
+ },
+ AsyncIterator: regeneratorAsyncIterator,
+ async: function async(r, e, t, o, u) {
+ return (n(e) ? regeneratorAsyncGen : regeneratorAsync)(a(r), e, t, o, u);
+ },
+ keys: regeneratorKeys,
+ values: regeneratorValues
+ };
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports)();
+}
+module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorValues.js b/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorValues.js
new file mode 100644
index 0000000..1335a23
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/regeneratorValues.js
@@ -0,0 +1,19 @@
+var _typeof = require("./typeof.js")["default"];
+function _regeneratorValues(e) {
+ if (null != e) {
+ var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"],
+ r = 0;
+ if (t) return t.call(e);
+ if ("function" == typeof e.next) return e;
+ if (!isNaN(e.length)) return {
+ next: function next() {
+ return e && r >= e.length && (e = void 0), {
+ value: e && e[r++],
+ done: !e
+ };
+ }
+ };
+ }
+ throw new TypeError(_typeof(e) + " is not iterable");
+}
+module.exports = _regeneratorValues, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/set.js b/mqtt-backend/node_modules/@babel/runtime/helpers/set.js
new file mode 100644
index 0000000..6421470
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/set.js
@@ -0,0 +1,22 @@
+var superPropBase = require("./superPropBase.js");
+var defineProperty = require("./defineProperty.js");
+function set(e, r, t, o) {
+ return set = "undefined" != typeof Reflect && Reflect.set ? Reflect.set : function (e, r, t, o) {
+ var f,
+ i = superPropBase(e, r);
+ if (i) {
+ if ((f = Object.getOwnPropertyDescriptor(i, r)).set) return f.set.call(o, t), !0;
+ if (!f.writable) return !1;
+ }
+ if (f = Object.getOwnPropertyDescriptor(o, r)) {
+ if (!f.writable) return !1;
+ f.value = t, Object.defineProperty(o, r, f);
+ } else defineProperty(o, r, t);
+ return !0;
+ }, set(e, r, t, o);
+}
+function _set(e, r, t, o, f) {
+ if (!set(e, r, t, o || e) && f) throw new TypeError("failed to set property");
+ return t;
+}
+module.exports = _set, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/setFunctionName.js b/mqtt-backend/node_modules/@babel/runtime/helpers/setFunctionName.js
new file mode 100644
index 0000000..9664076
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/setFunctionName.js
@@ -0,0 +1,12 @@
+var _typeof = require("./typeof.js")["default"];
+function setFunctionName(e, t, n) {
+ "symbol" == _typeof(t) && (t = (t = t.description) ? "[" + t + "]" : "");
+ try {
+ Object.defineProperty(e, "name", {
+ configurable: !0,
+ value: n ? n + " " + t : t
+ });
+ } catch (e) {}
+ return e;
+}
+module.exports = setFunctionName, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/setPrototypeOf.js b/mqtt-backend/node_modules/@babel/runtime/helpers/setPrototypeOf.js
new file mode 100644
index 0000000..7d991ff
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/setPrototypeOf.js
@@ -0,0 +1,6 @@
+function _setPrototypeOf(t, e) {
+ return module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
+ return t.__proto__ = e, t;
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports, _setPrototypeOf(t, e);
+}
+module.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/skipFirstGeneratorNext.js b/mqtt-backend/node_modules/@babel/runtime/helpers/skipFirstGeneratorNext.js
new file mode 100644
index 0000000..2aed548
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/skipFirstGeneratorNext.js
@@ -0,0 +1,7 @@
+function _skipFirstGeneratorNext(t) {
+ return function () {
+ var r = t.apply(this, arguments);
+ return r.next(), r;
+ };
+}
+module.exports = _skipFirstGeneratorNext, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/slicedToArray.js b/mqtt-backend/node_modules/@babel/runtime/helpers/slicedToArray.js
new file mode 100644
index 0000000..3d752c4
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/slicedToArray.js
@@ -0,0 +1,8 @@
+var arrayWithHoles = require("./arrayWithHoles.js");
+var iterableToArrayLimit = require("./iterableToArrayLimit.js");
+var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");
+var nonIterableRest = require("./nonIterableRest.js");
+function _slicedToArray(r, e) {
+ return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();
+}
+module.exports = _slicedToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/superPropBase.js b/mqtt-backend/node_modules/@babel/runtime/helpers/superPropBase.js
new file mode 100644
index 0000000..5cad459
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/superPropBase.js
@@ -0,0 +1,6 @@
+var getPrototypeOf = require("./getPrototypeOf.js");
+function _superPropBase(t, o) {
+ for (; !{}.hasOwnProperty.call(t, o) && null !== (t = getPrototypeOf(t)););
+ return t;
+}
+module.exports = _superPropBase, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/superPropGet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/superPropGet.js
new file mode 100644
index 0000000..baf8b10
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/superPropGet.js
@@ -0,0 +1,9 @@
+var get = require("./get.js");
+var getPrototypeOf = require("./getPrototypeOf.js");
+function _superPropGet(t, o, e, r) {
+ var p = get(getPrototypeOf(1 & r ? t.prototype : t), o, e);
+ return 2 & r && "function" == typeof p ? function (t) {
+ return p.apply(e, t);
+ } : p;
+}
+module.exports = _superPropGet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/superPropSet.js b/mqtt-backend/node_modules/@babel/runtime/helpers/superPropSet.js
new file mode 100644
index 0000000..e0578c0
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/superPropSet.js
@@ -0,0 +1,6 @@
+var set = require("./set.js");
+var getPrototypeOf = require("./getPrototypeOf.js");
+function _superPropSet(t, e, o, r, p, f) {
+ return set(getPrototypeOf(f ? t.prototype : t), e, o, r, p);
+}
+module.exports = _superPropSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/taggedTemplateLiteral.js b/mqtt-backend/node_modules/@babel/runtime/helpers/taggedTemplateLiteral.js
new file mode 100644
index 0000000..38d6065
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/taggedTemplateLiteral.js
@@ -0,0 +1,8 @@
+function _taggedTemplateLiteral(e, t) {
+ return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, {
+ raw: {
+ value: Object.freeze(t)
+ }
+ }));
+}
+module.exports = _taggedTemplateLiteral, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/taggedTemplateLiteralLoose.js b/mqtt-backend/node_modules/@babel/runtime/helpers/taggedTemplateLiteralLoose.js
new file mode 100644
index 0000000..2f8c146
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/taggedTemplateLiteralLoose.js
@@ -0,0 +1,4 @@
+function _taggedTemplateLiteralLoose(e, t) {
+ return t || (t = e.slice(0)), e.raw = t, e;
+}
+module.exports = _taggedTemplateLiteralLoose, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/tdz.js b/mqtt-backend/node_modules/@babel/runtime/helpers/tdz.js
new file mode 100644
index 0000000..c66f476
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/tdz.js
@@ -0,0 +1,4 @@
+function _tdzError(e) {
+ throw new ReferenceError(e + " is not defined - temporal dead zone");
+}
+module.exports = _tdzError, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/temporalRef.js b/mqtt-backend/node_modules/@babel/runtime/helpers/temporalRef.js
new file mode 100644
index 0000000..54c9190
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/temporalRef.js
@@ -0,0 +1,6 @@
+var temporalUndefined = require("./temporalUndefined.js");
+var tdz = require("./tdz.js");
+function _temporalRef(r, e) {
+ return r === temporalUndefined ? tdz(e) : r;
+}
+module.exports = _temporalRef, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/temporalUndefined.js b/mqtt-backend/node_modules/@babel/runtime/helpers/temporalUndefined.js
new file mode 100644
index 0000000..f8def80
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/temporalUndefined.js
@@ -0,0 +1,2 @@
+function _temporalUndefined() {}
+module.exports = _temporalUndefined, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/toArray.js b/mqtt-backend/node_modules/@babel/runtime/helpers/toArray.js
new file mode 100644
index 0000000..2be1d2b
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/toArray.js
@@ -0,0 +1,8 @@
+var arrayWithHoles = require("./arrayWithHoles.js");
+var iterableToArray = require("./iterableToArray.js");
+var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");
+var nonIterableRest = require("./nonIterableRest.js");
+function _toArray(r) {
+ return arrayWithHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableRest();
+}
+module.exports = _toArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/toConsumableArray.js b/mqtt-backend/node_modules/@babel/runtime/helpers/toConsumableArray.js
new file mode 100644
index 0000000..698f9c6
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/toConsumableArray.js
@@ -0,0 +1,8 @@
+var arrayWithoutHoles = require("./arrayWithoutHoles.js");
+var iterableToArray = require("./iterableToArray.js");
+var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");
+var nonIterableSpread = require("./nonIterableSpread.js");
+function _toConsumableArray(r) {
+ return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();
+}
+module.exports = _toConsumableArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/toPrimitive.js b/mqtt-backend/node_modules/@babel/runtime/helpers/toPrimitive.js
new file mode 100644
index 0000000..ef9d249
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/toPrimitive.js
@@ -0,0 +1,12 @@
+var _typeof = require("./typeof.js")["default"];
+function toPrimitive(t, r) {
+ if ("object" != _typeof(t) || !t) return t;
+ var e = t[Symbol.toPrimitive];
+ if (void 0 !== e) {
+ var i = e.call(t, r || "default");
+ if ("object" != _typeof(i)) return i;
+ throw new TypeError("@@toPrimitive must return a primitive value.");
+ }
+ return ("string" === r ? String : Number)(t);
+}
+module.exports = toPrimitive, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/toPropertyKey.js b/mqtt-backend/node_modules/@babel/runtime/helpers/toPropertyKey.js
new file mode 100644
index 0000000..3ca3d4f
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/toPropertyKey.js
@@ -0,0 +1,7 @@
+var _typeof = require("./typeof.js")["default"];
+var toPrimitive = require("./toPrimitive.js");
+function toPropertyKey(t) {
+ var i = toPrimitive(t, "string");
+ return "symbol" == _typeof(i) ? i : i + "";
+}
+module.exports = toPropertyKey, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/toSetter.js b/mqtt-backend/node_modules/@babel/runtime/helpers/toSetter.js
new file mode 100644
index 0000000..e0012a8
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/toSetter.js
@@ -0,0 +1,10 @@
+function _toSetter(t, e, n) {
+ e || (e = []);
+ var r = e.length++;
+ return Object.defineProperty({}, "_", {
+ set: function set(o) {
+ e[r] = o, t.apply(n, e);
+ }
+ });
+}
+module.exports = _toSetter, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/tsRewriteRelativeImportExtensions.js b/mqtt-backend/node_modules/@babel/runtime/helpers/tsRewriteRelativeImportExtensions.js
new file mode 100644
index 0000000..4de0e4d
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/tsRewriteRelativeImportExtensions.js
@@ -0,0 +1,6 @@
+function tsRewriteRelativeImportExtensions(t, e) {
+ return "string" == typeof t && /^\.\.?\//.test(t) ? t.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+)?)\.([cm]?)ts$/i, function (t, s, r, n, o) {
+ return s ? e ? ".jsx" : ".js" : !r || n && o ? r + n + "." + o.toLowerCase() + "js" : t;
+ }) : t;
+}
+module.exports = tsRewriteRelativeImportExtensions, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/typeof.js b/mqtt-backend/node_modules/@babel/runtime/helpers/typeof.js
new file mode 100644
index 0000000..b6fbfaf
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/typeof.js
@@ -0,0 +1,10 @@
+function _typeof(o) {
+ "@babel/helpers - typeof";
+
+ return module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
+ return typeof o;
+ } : function (o) {
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof(o);
+}
+module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js b/mqtt-backend/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js
new file mode 100644
index 0000000..8fb1a71
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js
@@ -0,0 +1,9 @@
+var arrayLikeToArray = require("./arrayLikeToArray.js");
+function _unsupportedIterableToArray(r, a) {
+ if (r) {
+ if ("string" == typeof r) return arrayLikeToArray(r, a);
+ var t = {}.toString.call(r).slice(8, -1);
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;
+ }
+}
+module.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/using.js b/mqtt-backend/node_modules/@babel/runtime/helpers/using.js
new file mode 100644
index 0000000..37c79e2
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/using.js
@@ -0,0 +1,12 @@
+function _using(o, n, e) {
+ if (null == n) return n;
+ if (Object(n) !== n) throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");
+ if (e) var r = n[Symbol.asyncDispose || Symbol["for"]("Symbol.asyncDispose")];
+ if (null == r && (r = n[Symbol.dispose || Symbol["for"]("Symbol.dispose")]), "function" != typeof r) throw new TypeError("Property [Symbol.dispose] is not a function.");
+ return o.push({
+ v: n,
+ d: r,
+ a: e
+ }), n;
+}
+module.exports = _using, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/usingCtx.js b/mqtt-backend/node_modules/@babel/runtime/helpers/usingCtx.js
new file mode 100644
index 0000000..652ab15
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/usingCtx.js
@@ -0,0 +1,59 @@
+function _usingCtx() {
+ var r = "function" == typeof SuppressedError ? SuppressedError : function (r, e) {
+ var n = Error();
+ return n.name = "SuppressedError", n.error = r, n.suppressed = e, n;
+ },
+ e = {},
+ n = [];
+ function using(r, e) {
+ if (null != e) {
+ if (Object(e) !== e) throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");
+ if (r) var o = e[Symbol.asyncDispose || Symbol["for"]("Symbol.asyncDispose")];
+ if (void 0 === o && (o = e[Symbol.dispose || Symbol["for"]("Symbol.dispose")], r)) var t = o;
+ if ("function" != typeof o) throw new TypeError("Object is not disposable.");
+ t && (o = function o() {
+ try {
+ t.call(e);
+ } catch (r) {
+ return Promise.reject(r);
+ }
+ }), n.push({
+ v: e,
+ d: o,
+ a: r
+ });
+ } else r && n.push({
+ d: e,
+ a: r
+ });
+ return e;
+ }
+ return {
+ e: e,
+ u: using.bind(null, !1),
+ a: using.bind(null, !0),
+ d: function d() {
+ var o,
+ t = this.e,
+ s = 0;
+ function next() {
+ for (; o = n.pop();) try {
+ if (!o.a && 1 === s) return s = 0, n.push(o), Promise.resolve().then(next);
+ if (o.d) {
+ var r = o.d.call(o.v);
+ if (o.a) return s |= 2, Promise.resolve(r).then(next, err);
+ } else s |= 1;
+ } catch (r) {
+ return err(r);
+ }
+ if (1 === s) return t !== e ? Promise.reject(t) : Promise.resolve();
+ if (t !== e) throw t;
+ }
+ function err(n) {
+ return t = t !== e ? new r(n, t) : n, next();
+ }
+ return next();
+ }
+ };
+}
+module.exports = _usingCtx, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/wrapAsyncGenerator.js b/mqtt-backend/node_modules/@babel/runtime/helpers/wrapAsyncGenerator.js
new file mode 100644
index 0000000..a3d32d7
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/wrapAsyncGenerator.js
@@ -0,0 +1,56 @@
+var OverloadYield = require("./OverloadYield.js");
+function _wrapAsyncGenerator(e) {
+ return function () {
+ return new AsyncGenerator(e.apply(this, arguments));
+ };
+}
+function AsyncGenerator(e) {
+ var t, n;
+ function resume(t, n) {
+ try {
+ var r = e[t](n),
+ o = r.value,
+ u = o instanceof OverloadYield;
+ Promise.resolve(u ? o.v : o).then(function (n) {
+ if (u) {
+ var i = "return" === t && o.k ? t : "next";
+ if (!o.k || n.done) return resume(i, n);
+ n = e[i](n).value;
+ }
+ settle(!!r.done, n);
+ }, function (e) {
+ resume("throw", e);
+ });
+ } catch (e) {
+ settle(2, e);
+ }
+ }
+ function settle(e, r) {
+ 2 === e ? t.reject(r) : t.resolve({
+ value: r,
+ done: e
+ }), (t = t.next) ? resume(t.key, t.arg) : n = null;
+ }
+ this._invoke = function (e, r) {
+ return new Promise(function (o, u) {
+ var i = {
+ key: e,
+ arg: r,
+ resolve: o,
+ reject: u,
+ next: null
+ };
+ n ? n = n.next = i : (t = n = i, resume(e, r));
+ });
+ }, "function" != typeof e["return"] && (this["return"] = void 0);
+}
+AsyncGenerator.prototype["function" == typeof Symbol && Symbol.asyncIterator || "@@asyncIterator"] = function () {
+ return this;
+}, AsyncGenerator.prototype.next = function (e) {
+ return this._invoke("next", e);
+}, AsyncGenerator.prototype["throw"] = function (e) {
+ return this._invoke("throw", e);
+}, AsyncGenerator.prototype["return"] = function (e) {
+ return this._invoke("return", e);
+};
+module.exports = _wrapAsyncGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/wrapNativeSuper.js b/mqtt-backend/node_modules/@babel/runtime/helpers/wrapNativeSuper.js
new file mode 100644
index 0000000..acd87ab
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/wrapNativeSuper.js
@@ -0,0 +1,27 @@
+var getPrototypeOf = require("./getPrototypeOf.js");
+var setPrototypeOf = require("./setPrototypeOf.js");
+var isNativeFunction = require("./isNativeFunction.js");
+var construct = require("./construct.js");
+function _wrapNativeSuper(t) {
+ var r = "function" == typeof Map ? new Map() : void 0;
+ return module.exports = _wrapNativeSuper = function _wrapNativeSuper(t) {
+ if (null === t || !isNativeFunction(t)) return t;
+ if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function");
+ if (void 0 !== r) {
+ if (r.has(t)) return r.get(t);
+ r.set(t, Wrapper);
+ }
+ function Wrapper() {
+ return construct(t, arguments, getPrototypeOf(this).constructor);
+ }
+ return Wrapper.prototype = Object.create(t.prototype, {
+ constructor: {
+ value: Wrapper,
+ enumerable: !1,
+ writable: !0,
+ configurable: !0
+ }
+ }), setPrototypeOf(Wrapper, t);
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports, _wrapNativeSuper(t);
+}
+module.exports = _wrapNativeSuper, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/wrapRegExp.js b/mqtt-backend/node_modules/@babel/runtime/helpers/wrapRegExp.js
new file mode 100644
index 0000000..3d6e6ce
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/wrapRegExp.js
@@ -0,0 +1,52 @@
+var _typeof = require("./typeof.js")["default"];
+var setPrototypeOf = require("./setPrototypeOf.js");
+var inherits = require("./inherits.js");
+function _wrapRegExp() {
+ module.exports = _wrapRegExp = function _wrapRegExp(e, r) {
+ return new BabelRegExp(e, void 0, r);
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports;
+ var e = RegExp.prototype,
+ r = new WeakMap();
+ function BabelRegExp(e, t, p) {
+ var o = RegExp(e, t);
+ return r.set(o, p || r.get(e)), setPrototypeOf(o, BabelRegExp.prototype);
+ }
+ function buildGroups(e, t) {
+ var p = r.get(t);
+ return Object.keys(p).reduce(function (r, t) {
+ var o = p[t];
+ if ("number" == typeof o) r[t] = e[o];else {
+ for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++;
+ r[t] = e[o[i]];
+ }
+ return r;
+ }, Object.create(null));
+ }
+ return inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) {
+ var t = e.exec.call(this, r);
+ if (t) {
+ t.groups = buildGroups(t, this);
+ var p = t.indices;
+ p && (p.groups = buildGroups(p, this));
+ }
+ return t;
+ }, BabelRegExp.prototype[Symbol.replace] = function (t, p) {
+ if ("string" == typeof p) {
+ var o = r.get(this);
+ return e[Symbol.replace].call(this, t, p.replace(/\$<([^>]+)(>|$)/g, function (e, r, t) {
+ if ("" === t) return e;
+ var p = o[r];
+ return Array.isArray(p) ? "$" + p.join("$") : "number" == typeof p ? "$" + p : "";
+ }));
+ }
+ if ("function" == typeof p) {
+ var i = this;
+ return e[Symbol.replace].call(this, t, function () {
+ var e = arguments;
+ return "object" != _typeof(e[e.length - 1]) && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e);
+ });
+ }
+ return e[Symbol.replace].call(this, t, p);
+ }, _wrapRegExp.apply(this, arguments);
+}
+module.exports = _wrapRegExp, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/helpers/writeOnlyError.js b/mqtt-backend/node_modules/@babel/runtime/helpers/writeOnlyError.js
new file mode 100644
index 0000000..c98ee82
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/helpers/writeOnlyError.js
@@ -0,0 +1,4 @@
+function _writeOnlyError(r) {
+ throw new TypeError('"' + r + '" is write-only');
+}
+module.exports = _writeOnlyError, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/package.json b/mqtt-backend/node_modules/@babel/runtime/package.json
new file mode 100644
index 0000000..3a37491
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/package.json
@@ -0,0 +1,1107 @@
+{
+ "name": "@babel/runtime",
+ "version": "7.29.2",
+ "description": "babel's modular runtime helpers",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-runtime"
+ },
+ "homepage": "https://babel.dev/docs/en/next/babel-runtime",
+ "author": "The Babel Team (https://babel.dev/team)",
+ "exports": {
+ "./helpers/OverloadYield": [
+ {
+ "node": "./helpers/OverloadYield.js",
+ "import": "./helpers/esm/OverloadYield.js",
+ "default": "./helpers/OverloadYield.js"
+ },
+ "./helpers/OverloadYield.js"
+ ],
+ "./helpers/esm/OverloadYield": "./helpers/esm/OverloadYield.js",
+ "./helpers/applyDecoratedDescriptor": [
+ {
+ "node": "./helpers/applyDecoratedDescriptor.js",
+ "import": "./helpers/esm/applyDecoratedDescriptor.js",
+ "default": "./helpers/applyDecoratedDescriptor.js"
+ },
+ "./helpers/applyDecoratedDescriptor.js"
+ ],
+ "./helpers/esm/applyDecoratedDescriptor": "./helpers/esm/applyDecoratedDescriptor.js",
+ "./helpers/applyDecs2311": [
+ {
+ "node": "./helpers/applyDecs2311.js",
+ "import": "./helpers/esm/applyDecs2311.js",
+ "default": "./helpers/applyDecs2311.js"
+ },
+ "./helpers/applyDecs2311.js"
+ ],
+ "./helpers/esm/applyDecs2311": "./helpers/esm/applyDecs2311.js",
+ "./helpers/arrayLikeToArray": [
+ {
+ "node": "./helpers/arrayLikeToArray.js",
+ "import": "./helpers/esm/arrayLikeToArray.js",
+ "default": "./helpers/arrayLikeToArray.js"
+ },
+ "./helpers/arrayLikeToArray.js"
+ ],
+ "./helpers/esm/arrayLikeToArray": "./helpers/esm/arrayLikeToArray.js",
+ "./helpers/arrayWithHoles": [
+ {
+ "node": "./helpers/arrayWithHoles.js",
+ "import": "./helpers/esm/arrayWithHoles.js",
+ "default": "./helpers/arrayWithHoles.js"
+ },
+ "./helpers/arrayWithHoles.js"
+ ],
+ "./helpers/esm/arrayWithHoles": "./helpers/esm/arrayWithHoles.js",
+ "./helpers/arrayWithoutHoles": [
+ {
+ "node": "./helpers/arrayWithoutHoles.js",
+ "import": "./helpers/esm/arrayWithoutHoles.js",
+ "default": "./helpers/arrayWithoutHoles.js"
+ },
+ "./helpers/arrayWithoutHoles.js"
+ ],
+ "./helpers/esm/arrayWithoutHoles": "./helpers/esm/arrayWithoutHoles.js",
+ "./helpers/assertClassBrand": [
+ {
+ "node": "./helpers/assertClassBrand.js",
+ "import": "./helpers/esm/assertClassBrand.js",
+ "default": "./helpers/assertClassBrand.js"
+ },
+ "./helpers/assertClassBrand.js"
+ ],
+ "./helpers/esm/assertClassBrand": "./helpers/esm/assertClassBrand.js",
+ "./helpers/assertThisInitialized": [
+ {
+ "node": "./helpers/assertThisInitialized.js",
+ "import": "./helpers/esm/assertThisInitialized.js",
+ "default": "./helpers/assertThisInitialized.js"
+ },
+ "./helpers/assertThisInitialized.js"
+ ],
+ "./helpers/esm/assertThisInitialized": "./helpers/esm/assertThisInitialized.js",
+ "./helpers/asyncGeneratorDelegate": [
+ {
+ "node": "./helpers/asyncGeneratorDelegate.js",
+ "import": "./helpers/esm/asyncGeneratorDelegate.js",
+ "default": "./helpers/asyncGeneratorDelegate.js"
+ },
+ "./helpers/asyncGeneratorDelegate.js"
+ ],
+ "./helpers/esm/asyncGeneratorDelegate": "./helpers/esm/asyncGeneratorDelegate.js",
+ "./helpers/asyncIterator": [
+ {
+ "node": "./helpers/asyncIterator.js",
+ "import": "./helpers/esm/asyncIterator.js",
+ "default": "./helpers/asyncIterator.js"
+ },
+ "./helpers/asyncIterator.js"
+ ],
+ "./helpers/esm/asyncIterator": "./helpers/esm/asyncIterator.js",
+ "./helpers/asyncToGenerator": [
+ {
+ "node": "./helpers/asyncToGenerator.js",
+ "import": "./helpers/esm/asyncToGenerator.js",
+ "default": "./helpers/asyncToGenerator.js"
+ },
+ "./helpers/asyncToGenerator.js"
+ ],
+ "./helpers/esm/asyncToGenerator": "./helpers/esm/asyncToGenerator.js",
+ "./helpers/awaitAsyncGenerator": [
+ {
+ "node": "./helpers/awaitAsyncGenerator.js",
+ "import": "./helpers/esm/awaitAsyncGenerator.js",
+ "default": "./helpers/awaitAsyncGenerator.js"
+ },
+ "./helpers/awaitAsyncGenerator.js"
+ ],
+ "./helpers/esm/awaitAsyncGenerator": "./helpers/esm/awaitAsyncGenerator.js",
+ "./helpers/callSuper": [
+ {
+ "node": "./helpers/callSuper.js",
+ "import": "./helpers/esm/callSuper.js",
+ "default": "./helpers/callSuper.js"
+ },
+ "./helpers/callSuper.js"
+ ],
+ "./helpers/esm/callSuper": "./helpers/esm/callSuper.js",
+ "./helpers/checkInRHS": [
+ {
+ "node": "./helpers/checkInRHS.js",
+ "import": "./helpers/esm/checkInRHS.js",
+ "default": "./helpers/checkInRHS.js"
+ },
+ "./helpers/checkInRHS.js"
+ ],
+ "./helpers/esm/checkInRHS": "./helpers/esm/checkInRHS.js",
+ "./helpers/checkPrivateRedeclaration": [
+ {
+ "node": "./helpers/checkPrivateRedeclaration.js",
+ "import": "./helpers/esm/checkPrivateRedeclaration.js",
+ "default": "./helpers/checkPrivateRedeclaration.js"
+ },
+ "./helpers/checkPrivateRedeclaration.js"
+ ],
+ "./helpers/esm/checkPrivateRedeclaration": "./helpers/esm/checkPrivateRedeclaration.js",
+ "./helpers/classCallCheck": [
+ {
+ "node": "./helpers/classCallCheck.js",
+ "import": "./helpers/esm/classCallCheck.js",
+ "default": "./helpers/classCallCheck.js"
+ },
+ "./helpers/classCallCheck.js"
+ ],
+ "./helpers/esm/classCallCheck": "./helpers/esm/classCallCheck.js",
+ "./helpers/classNameTDZError": [
+ {
+ "node": "./helpers/classNameTDZError.js",
+ "import": "./helpers/esm/classNameTDZError.js",
+ "default": "./helpers/classNameTDZError.js"
+ },
+ "./helpers/classNameTDZError.js"
+ ],
+ "./helpers/esm/classNameTDZError": "./helpers/esm/classNameTDZError.js",
+ "./helpers/classPrivateFieldGet2": [
+ {
+ "node": "./helpers/classPrivateFieldGet2.js",
+ "import": "./helpers/esm/classPrivateFieldGet2.js",
+ "default": "./helpers/classPrivateFieldGet2.js"
+ },
+ "./helpers/classPrivateFieldGet2.js"
+ ],
+ "./helpers/esm/classPrivateFieldGet2": "./helpers/esm/classPrivateFieldGet2.js",
+ "./helpers/classPrivateFieldInitSpec": [
+ {
+ "node": "./helpers/classPrivateFieldInitSpec.js",
+ "import": "./helpers/esm/classPrivateFieldInitSpec.js",
+ "default": "./helpers/classPrivateFieldInitSpec.js"
+ },
+ "./helpers/classPrivateFieldInitSpec.js"
+ ],
+ "./helpers/esm/classPrivateFieldInitSpec": "./helpers/esm/classPrivateFieldInitSpec.js",
+ "./helpers/classPrivateFieldLooseBase": [
+ {
+ "node": "./helpers/classPrivateFieldLooseBase.js",
+ "import": "./helpers/esm/classPrivateFieldLooseBase.js",
+ "default": "./helpers/classPrivateFieldLooseBase.js"
+ },
+ "./helpers/classPrivateFieldLooseBase.js"
+ ],
+ "./helpers/esm/classPrivateFieldLooseBase": "./helpers/esm/classPrivateFieldLooseBase.js",
+ "./helpers/classPrivateFieldLooseKey": [
+ {
+ "node": "./helpers/classPrivateFieldLooseKey.js",
+ "import": "./helpers/esm/classPrivateFieldLooseKey.js",
+ "default": "./helpers/classPrivateFieldLooseKey.js"
+ },
+ "./helpers/classPrivateFieldLooseKey.js"
+ ],
+ "./helpers/esm/classPrivateFieldLooseKey": "./helpers/esm/classPrivateFieldLooseKey.js",
+ "./helpers/classPrivateFieldSet2": [
+ {
+ "node": "./helpers/classPrivateFieldSet2.js",
+ "import": "./helpers/esm/classPrivateFieldSet2.js",
+ "default": "./helpers/classPrivateFieldSet2.js"
+ },
+ "./helpers/classPrivateFieldSet2.js"
+ ],
+ "./helpers/esm/classPrivateFieldSet2": "./helpers/esm/classPrivateFieldSet2.js",
+ "./helpers/classPrivateGetter": [
+ {
+ "node": "./helpers/classPrivateGetter.js",
+ "import": "./helpers/esm/classPrivateGetter.js",
+ "default": "./helpers/classPrivateGetter.js"
+ },
+ "./helpers/classPrivateGetter.js"
+ ],
+ "./helpers/esm/classPrivateGetter": "./helpers/esm/classPrivateGetter.js",
+ "./helpers/classPrivateMethodInitSpec": [
+ {
+ "node": "./helpers/classPrivateMethodInitSpec.js",
+ "import": "./helpers/esm/classPrivateMethodInitSpec.js",
+ "default": "./helpers/classPrivateMethodInitSpec.js"
+ },
+ "./helpers/classPrivateMethodInitSpec.js"
+ ],
+ "./helpers/esm/classPrivateMethodInitSpec": "./helpers/esm/classPrivateMethodInitSpec.js",
+ "./helpers/classPrivateSetter": [
+ {
+ "node": "./helpers/classPrivateSetter.js",
+ "import": "./helpers/esm/classPrivateSetter.js",
+ "default": "./helpers/classPrivateSetter.js"
+ },
+ "./helpers/classPrivateSetter.js"
+ ],
+ "./helpers/esm/classPrivateSetter": "./helpers/esm/classPrivateSetter.js",
+ "./helpers/classStaticPrivateMethodGet": [
+ {
+ "node": "./helpers/classStaticPrivateMethodGet.js",
+ "import": "./helpers/esm/classStaticPrivateMethodGet.js",
+ "default": "./helpers/classStaticPrivateMethodGet.js"
+ },
+ "./helpers/classStaticPrivateMethodGet.js"
+ ],
+ "./helpers/esm/classStaticPrivateMethodGet": "./helpers/esm/classStaticPrivateMethodGet.js",
+ "./helpers/construct": [
+ {
+ "node": "./helpers/construct.js",
+ "import": "./helpers/esm/construct.js",
+ "default": "./helpers/construct.js"
+ },
+ "./helpers/construct.js"
+ ],
+ "./helpers/esm/construct": "./helpers/esm/construct.js",
+ "./helpers/createClass": [
+ {
+ "node": "./helpers/createClass.js",
+ "import": "./helpers/esm/createClass.js",
+ "default": "./helpers/createClass.js"
+ },
+ "./helpers/createClass.js"
+ ],
+ "./helpers/esm/createClass": "./helpers/esm/createClass.js",
+ "./helpers/createForOfIteratorHelper": [
+ {
+ "node": "./helpers/createForOfIteratorHelper.js",
+ "import": "./helpers/esm/createForOfIteratorHelper.js",
+ "default": "./helpers/createForOfIteratorHelper.js"
+ },
+ "./helpers/createForOfIteratorHelper.js"
+ ],
+ "./helpers/esm/createForOfIteratorHelper": "./helpers/esm/createForOfIteratorHelper.js",
+ "./helpers/createForOfIteratorHelperLoose": [
+ {
+ "node": "./helpers/createForOfIteratorHelperLoose.js",
+ "import": "./helpers/esm/createForOfIteratorHelperLoose.js",
+ "default": "./helpers/createForOfIteratorHelperLoose.js"
+ },
+ "./helpers/createForOfIteratorHelperLoose.js"
+ ],
+ "./helpers/esm/createForOfIteratorHelperLoose": "./helpers/esm/createForOfIteratorHelperLoose.js",
+ "./helpers/createSuper": [
+ {
+ "node": "./helpers/createSuper.js",
+ "import": "./helpers/esm/createSuper.js",
+ "default": "./helpers/createSuper.js"
+ },
+ "./helpers/createSuper.js"
+ ],
+ "./helpers/esm/createSuper": "./helpers/esm/createSuper.js",
+ "./helpers/decorate": [
+ {
+ "node": "./helpers/decorate.js",
+ "import": "./helpers/esm/decorate.js",
+ "default": "./helpers/decorate.js"
+ },
+ "./helpers/decorate.js"
+ ],
+ "./helpers/esm/decorate": "./helpers/esm/decorate.js",
+ "./helpers/defaults": [
+ {
+ "node": "./helpers/defaults.js",
+ "import": "./helpers/esm/defaults.js",
+ "default": "./helpers/defaults.js"
+ },
+ "./helpers/defaults.js"
+ ],
+ "./helpers/esm/defaults": "./helpers/esm/defaults.js",
+ "./helpers/defineAccessor": [
+ {
+ "node": "./helpers/defineAccessor.js",
+ "import": "./helpers/esm/defineAccessor.js",
+ "default": "./helpers/defineAccessor.js"
+ },
+ "./helpers/defineAccessor.js"
+ ],
+ "./helpers/esm/defineAccessor": "./helpers/esm/defineAccessor.js",
+ "./helpers/defineProperty": [
+ {
+ "node": "./helpers/defineProperty.js",
+ "import": "./helpers/esm/defineProperty.js",
+ "default": "./helpers/defineProperty.js"
+ },
+ "./helpers/defineProperty.js"
+ ],
+ "./helpers/esm/defineProperty": "./helpers/esm/defineProperty.js",
+ "./helpers/extends": [
+ {
+ "node": "./helpers/extends.js",
+ "import": "./helpers/esm/extends.js",
+ "default": "./helpers/extends.js"
+ },
+ "./helpers/extends.js"
+ ],
+ "./helpers/esm/extends": "./helpers/esm/extends.js",
+ "./helpers/get": [
+ {
+ "node": "./helpers/get.js",
+ "import": "./helpers/esm/get.js",
+ "default": "./helpers/get.js"
+ },
+ "./helpers/get.js"
+ ],
+ "./helpers/esm/get": "./helpers/esm/get.js",
+ "./helpers/getPrototypeOf": [
+ {
+ "node": "./helpers/getPrototypeOf.js",
+ "import": "./helpers/esm/getPrototypeOf.js",
+ "default": "./helpers/getPrototypeOf.js"
+ },
+ "./helpers/getPrototypeOf.js"
+ ],
+ "./helpers/esm/getPrototypeOf": "./helpers/esm/getPrototypeOf.js",
+ "./helpers/identity": [
+ {
+ "node": "./helpers/identity.js",
+ "import": "./helpers/esm/identity.js",
+ "default": "./helpers/identity.js"
+ },
+ "./helpers/identity.js"
+ ],
+ "./helpers/esm/identity": "./helpers/esm/identity.js",
+ "./helpers/importDeferProxy": [
+ {
+ "node": "./helpers/importDeferProxy.js",
+ "import": "./helpers/esm/importDeferProxy.js",
+ "default": "./helpers/importDeferProxy.js"
+ },
+ "./helpers/importDeferProxy.js"
+ ],
+ "./helpers/esm/importDeferProxy": "./helpers/esm/importDeferProxy.js",
+ "./helpers/inherits": [
+ {
+ "node": "./helpers/inherits.js",
+ "import": "./helpers/esm/inherits.js",
+ "default": "./helpers/inherits.js"
+ },
+ "./helpers/inherits.js"
+ ],
+ "./helpers/esm/inherits": "./helpers/esm/inherits.js",
+ "./helpers/inheritsLoose": [
+ {
+ "node": "./helpers/inheritsLoose.js",
+ "import": "./helpers/esm/inheritsLoose.js",
+ "default": "./helpers/inheritsLoose.js"
+ },
+ "./helpers/inheritsLoose.js"
+ ],
+ "./helpers/esm/inheritsLoose": "./helpers/esm/inheritsLoose.js",
+ "./helpers/initializerDefineProperty": [
+ {
+ "node": "./helpers/initializerDefineProperty.js",
+ "import": "./helpers/esm/initializerDefineProperty.js",
+ "default": "./helpers/initializerDefineProperty.js"
+ },
+ "./helpers/initializerDefineProperty.js"
+ ],
+ "./helpers/esm/initializerDefineProperty": "./helpers/esm/initializerDefineProperty.js",
+ "./helpers/initializerWarningHelper": [
+ {
+ "node": "./helpers/initializerWarningHelper.js",
+ "import": "./helpers/esm/initializerWarningHelper.js",
+ "default": "./helpers/initializerWarningHelper.js"
+ },
+ "./helpers/initializerWarningHelper.js"
+ ],
+ "./helpers/esm/initializerWarningHelper": "./helpers/esm/initializerWarningHelper.js",
+ "./helpers/instanceof": [
+ {
+ "node": "./helpers/instanceof.js",
+ "import": "./helpers/esm/instanceof.js",
+ "default": "./helpers/instanceof.js"
+ },
+ "./helpers/instanceof.js"
+ ],
+ "./helpers/esm/instanceof": "./helpers/esm/instanceof.js",
+ "./helpers/interopRequireDefault": [
+ {
+ "node": "./helpers/interopRequireDefault.js",
+ "import": "./helpers/esm/interopRequireDefault.js",
+ "default": "./helpers/interopRequireDefault.js"
+ },
+ "./helpers/interopRequireDefault.js"
+ ],
+ "./helpers/esm/interopRequireDefault": "./helpers/esm/interopRequireDefault.js",
+ "./helpers/interopRequireWildcard": [
+ {
+ "node": "./helpers/interopRequireWildcard.js",
+ "import": "./helpers/esm/interopRequireWildcard.js",
+ "default": "./helpers/interopRequireWildcard.js"
+ },
+ "./helpers/interopRequireWildcard.js"
+ ],
+ "./helpers/esm/interopRequireWildcard": "./helpers/esm/interopRequireWildcard.js",
+ "./helpers/isNativeFunction": [
+ {
+ "node": "./helpers/isNativeFunction.js",
+ "import": "./helpers/esm/isNativeFunction.js",
+ "default": "./helpers/isNativeFunction.js"
+ },
+ "./helpers/isNativeFunction.js"
+ ],
+ "./helpers/esm/isNativeFunction": "./helpers/esm/isNativeFunction.js",
+ "./helpers/isNativeReflectConstruct": [
+ {
+ "node": "./helpers/isNativeReflectConstruct.js",
+ "import": "./helpers/esm/isNativeReflectConstruct.js",
+ "default": "./helpers/isNativeReflectConstruct.js"
+ },
+ "./helpers/isNativeReflectConstruct.js"
+ ],
+ "./helpers/esm/isNativeReflectConstruct": "./helpers/esm/isNativeReflectConstruct.js",
+ "./helpers/iterableToArray": [
+ {
+ "node": "./helpers/iterableToArray.js",
+ "import": "./helpers/esm/iterableToArray.js",
+ "default": "./helpers/iterableToArray.js"
+ },
+ "./helpers/iterableToArray.js"
+ ],
+ "./helpers/esm/iterableToArray": "./helpers/esm/iterableToArray.js",
+ "./helpers/iterableToArrayLimit": [
+ {
+ "node": "./helpers/iterableToArrayLimit.js",
+ "import": "./helpers/esm/iterableToArrayLimit.js",
+ "default": "./helpers/iterableToArrayLimit.js"
+ },
+ "./helpers/iterableToArrayLimit.js"
+ ],
+ "./helpers/esm/iterableToArrayLimit": "./helpers/esm/iterableToArrayLimit.js",
+ "./helpers/jsx": [
+ {
+ "node": "./helpers/jsx.js",
+ "import": "./helpers/esm/jsx.js",
+ "default": "./helpers/jsx.js"
+ },
+ "./helpers/jsx.js"
+ ],
+ "./helpers/esm/jsx": "./helpers/esm/jsx.js",
+ "./helpers/maybeArrayLike": [
+ {
+ "node": "./helpers/maybeArrayLike.js",
+ "import": "./helpers/esm/maybeArrayLike.js",
+ "default": "./helpers/maybeArrayLike.js"
+ },
+ "./helpers/maybeArrayLike.js"
+ ],
+ "./helpers/esm/maybeArrayLike": "./helpers/esm/maybeArrayLike.js",
+ "./helpers/newArrowCheck": [
+ {
+ "node": "./helpers/newArrowCheck.js",
+ "import": "./helpers/esm/newArrowCheck.js",
+ "default": "./helpers/newArrowCheck.js"
+ },
+ "./helpers/newArrowCheck.js"
+ ],
+ "./helpers/esm/newArrowCheck": "./helpers/esm/newArrowCheck.js",
+ "./helpers/nonIterableRest": [
+ {
+ "node": "./helpers/nonIterableRest.js",
+ "import": "./helpers/esm/nonIterableRest.js",
+ "default": "./helpers/nonIterableRest.js"
+ },
+ "./helpers/nonIterableRest.js"
+ ],
+ "./helpers/esm/nonIterableRest": "./helpers/esm/nonIterableRest.js",
+ "./helpers/nonIterableSpread": [
+ {
+ "node": "./helpers/nonIterableSpread.js",
+ "import": "./helpers/esm/nonIterableSpread.js",
+ "default": "./helpers/nonIterableSpread.js"
+ },
+ "./helpers/nonIterableSpread.js"
+ ],
+ "./helpers/esm/nonIterableSpread": "./helpers/esm/nonIterableSpread.js",
+ "./helpers/nullishReceiverError": [
+ {
+ "node": "./helpers/nullishReceiverError.js",
+ "import": "./helpers/esm/nullishReceiverError.js",
+ "default": "./helpers/nullishReceiverError.js"
+ },
+ "./helpers/nullishReceiverError.js"
+ ],
+ "./helpers/esm/nullishReceiverError": "./helpers/esm/nullishReceiverError.js",
+ "./helpers/objectDestructuringEmpty": [
+ {
+ "node": "./helpers/objectDestructuringEmpty.js",
+ "import": "./helpers/esm/objectDestructuringEmpty.js",
+ "default": "./helpers/objectDestructuringEmpty.js"
+ },
+ "./helpers/objectDestructuringEmpty.js"
+ ],
+ "./helpers/esm/objectDestructuringEmpty": "./helpers/esm/objectDestructuringEmpty.js",
+ "./helpers/objectSpread2": [
+ {
+ "node": "./helpers/objectSpread2.js",
+ "import": "./helpers/esm/objectSpread2.js",
+ "default": "./helpers/objectSpread2.js"
+ },
+ "./helpers/objectSpread2.js"
+ ],
+ "./helpers/esm/objectSpread2": "./helpers/esm/objectSpread2.js",
+ "./helpers/objectWithoutProperties": [
+ {
+ "node": "./helpers/objectWithoutProperties.js",
+ "import": "./helpers/esm/objectWithoutProperties.js",
+ "default": "./helpers/objectWithoutProperties.js"
+ },
+ "./helpers/objectWithoutProperties.js"
+ ],
+ "./helpers/esm/objectWithoutProperties": "./helpers/esm/objectWithoutProperties.js",
+ "./helpers/objectWithoutPropertiesLoose": [
+ {
+ "node": "./helpers/objectWithoutPropertiesLoose.js",
+ "import": "./helpers/esm/objectWithoutPropertiesLoose.js",
+ "default": "./helpers/objectWithoutPropertiesLoose.js"
+ },
+ "./helpers/objectWithoutPropertiesLoose.js"
+ ],
+ "./helpers/esm/objectWithoutPropertiesLoose": "./helpers/esm/objectWithoutPropertiesLoose.js",
+ "./helpers/possibleConstructorReturn": [
+ {
+ "node": "./helpers/possibleConstructorReturn.js",
+ "import": "./helpers/esm/possibleConstructorReturn.js",
+ "default": "./helpers/possibleConstructorReturn.js"
+ },
+ "./helpers/possibleConstructorReturn.js"
+ ],
+ "./helpers/esm/possibleConstructorReturn": "./helpers/esm/possibleConstructorReturn.js",
+ "./helpers/readOnlyError": [
+ {
+ "node": "./helpers/readOnlyError.js",
+ "import": "./helpers/esm/readOnlyError.js",
+ "default": "./helpers/readOnlyError.js"
+ },
+ "./helpers/readOnlyError.js"
+ ],
+ "./helpers/esm/readOnlyError": "./helpers/esm/readOnlyError.js",
+ "./helpers/regenerator": [
+ {
+ "node": "./helpers/regenerator.js",
+ "import": "./helpers/esm/regenerator.js",
+ "default": "./helpers/regenerator.js"
+ },
+ "./helpers/regenerator.js"
+ ],
+ "./helpers/esm/regenerator": "./helpers/esm/regenerator.js",
+ "./helpers/regeneratorAsync": [
+ {
+ "node": "./helpers/regeneratorAsync.js",
+ "import": "./helpers/esm/regeneratorAsync.js",
+ "default": "./helpers/regeneratorAsync.js"
+ },
+ "./helpers/regeneratorAsync.js"
+ ],
+ "./helpers/esm/regeneratorAsync": "./helpers/esm/regeneratorAsync.js",
+ "./helpers/regeneratorAsyncGen": [
+ {
+ "node": "./helpers/regeneratorAsyncGen.js",
+ "import": "./helpers/esm/regeneratorAsyncGen.js",
+ "default": "./helpers/regeneratorAsyncGen.js"
+ },
+ "./helpers/regeneratorAsyncGen.js"
+ ],
+ "./helpers/esm/regeneratorAsyncGen": "./helpers/esm/regeneratorAsyncGen.js",
+ "./helpers/regeneratorKeys": [
+ {
+ "node": "./helpers/regeneratorKeys.js",
+ "import": "./helpers/esm/regeneratorKeys.js",
+ "default": "./helpers/regeneratorKeys.js"
+ },
+ "./helpers/regeneratorKeys.js"
+ ],
+ "./helpers/esm/regeneratorKeys": "./helpers/esm/regeneratorKeys.js",
+ "./helpers/regeneratorValues": [
+ {
+ "node": "./helpers/regeneratorValues.js",
+ "import": "./helpers/esm/regeneratorValues.js",
+ "default": "./helpers/regeneratorValues.js"
+ },
+ "./helpers/regeneratorValues.js"
+ ],
+ "./helpers/esm/regeneratorValues": "./helpers/esm/regeneratorValues.js",
+ "./helpers/set": [
+ {
+ "node": "./helpers/set.js",
+ "import": "./helpers/esm/set.js",
+ "default": "./helpers/set.js"
+ },
+ "./helpers/set.js"
+ ],
+ "./helpers/esm/set": "./helpers/esm/set.js",
+ "./helpers/setFunctionName": [
+ {
+ "node": "./helpers/setFunctionName.js",
+ "import": "./helpers/esm/setFunctionName.js",
+ "default": "./helpers/setFunctionName.js"
+ },
+ "./helpers/setFunctionName.js"
+ ],
+ "./helpers/esm/setFunctionName": "./helpers/esm/setFunctionName.js",
+ "./helpers/setPrototypeOf": [
+ {
+ "node": "./helpers/setPrototypeOf.js",
+ "import": "./helpers/esm/setPrototypeOf.js",
+ "default": "./helpers/setPrototypeOf.js"
+ },
+ "./helpers/setPrototypeOf.js"
+ ],
+ "./helpers/esm/setPrototypeOf": "./helpers/esm/setPrototypeOf.js",
+ "./helpers/skipFirstGeneratorNext": [
+ {
+ "node": "./helpers/skipFirstGeneratorNext.js",
+ "import": "./helpers/esm/skipFirstGeneratorNext.js",
+ "default": "./helpers/skipFirstGeneratorNext.js"
+ },
+ "./helpers/skipFirstGeneratorNext.js"
+ ],
+ "./helpers/esm/skipFirstGeneratorNext": "./helpers/esm/skipFirstGeneratorNext.js",
+ "./helpers/slicedToArray": [
+ {
+ "node": "./helpers/slicedToArray.js",
+ "import": "./helpers/esm/slicedToArray.js",
+ "default": "./helpers/slicedToArray.js"
+ },
+ "./helpers/slicedToArray.js"
+ ],
+ "./helpers/esm/slicedToArray": "./helpers/esm/slicedToArray.js",
+ "./helpers/superPropBase": [
+ {
+ "node": "./helpers/superPropBase.js",
+ "import": "./helpers/esm/superPropBase.js",
+ "default": "./helpers/superPropBase.js"
+ },
+ "./helpers/superPropBase.js"
+ ],
+ "./helpers/esm/superPropBase": "./helpers/esm/superPropBase.js",
+ "./helpers/superPropGet": [
+ {
+ "node": "./helpers/superPropGet.js",
+ "import": "./helpers/esm/superPropGet.js",
+ "default": "./helpers/superPropGet.js"
+ },
+ "./helpers/superPropGet.js"
+ ],
+ "./helpers/esm/superPropGet": "./helpers/esm/superPropGet.js",
+ "./helpers/superPropSet": [
+ {
+ "node": "./helpers/superPropSet.js",
+ "import": "./helpers/esm/superPropSet.js",
+ "default": "./helpers/superPropSet.js"
+ },
+ "./helpers/superPropSet.js"
+ ],
+ "./helpers/esm/superPropSet": "./helpers/esm/superPropSet.js",
+ "./helpers/taggedTemplateLiteral": [
+ {
+ "node": "./helpers/taggedTemplateLiteral.js",
+ "import": "./helpers/esm/taggedTemplateLiteral.js",
+ "default": "./helpers/taggedTemplateLiteral.js"
+ },
+ "./helpers/taggedTemplateLiteral.js"
+ ],
+ "./helpers/esm/taggedTemplateLiteral": "./helpers/esm/taggedTemplateLiteral.js",
+ "./helpers/taggedTemplateLiteralLoose": [
+ {
+ "node": "./helpers/taggedTemplateLiteralLoose.js",
+ "import": "./helpers/esm/taggedTemplateLiteralLoose.js",
+ "default": "./helpers/taggedTemplateLiteralLoose.js"
+ },
+ "./helpers/taggedTemplateLiteralLoose.js"
+ ],
+ "./helpers/esm/taggedTemplateLiteralLoose": "./helpers/esm/taggedTemplateLiteralLoose.js",
+ "./helpers/tdz": [
+ {
+ "node": "./helpers/tdz.js",
+ "import": "./helpers/esm/tdz.js",
+ "default": "./helpers/tdz.js"
+ },
+ "./helpers/tdz.js"
+ ],
+ "./helpers/esm/tdz": "./helpers/esm/tdz.js",
+ "./helpers/temporalRef": [
+ {
+ "node": "./helpers/temporalRef.js",
+ "import": "./helpers/esm/temporalRef.js",
+ "default": "./helpers/temporalRef.js"
+ },
+ "./helpers/temporalRef.js"
+ ],
+ "./helpers/esm/temporalRef": "./helpers/esm/temporalRef.js",
+ "./helpers/temporalUndefined": [
+ {
+ "node": "./helpers/temporalUndefined.js",
+ "import": "./helpers/esm/temporalUndefined.js",
+ "default": "./helpers/temporalUndefined.js"
+ },
+ "./helpers/temporalUndefined.js"
+ ],
+ "./helpers/esm/temporalUndefined": "./helpers/esm/temporalUndefined.js",
+ "./helpers/toArray": [
+ {
+ "node": "./helpers/toArray.js",
+ "import": "./helpers/esm/toArray.js",
+ "default": "./helpers/toArray.js"
+ },
+ "./helpers/toArray.js"
+ ],
+ "./helpers/esm/toArray": "./helpers/esm/toArray.js",
+ "./helpers/toConsumableArray": [
+ {
+ "node": "./helpers/toConsumableArray.js",
+ "import": "./helpers/esm/toConsumableArray.js",
+ "default": "./helpers/toConsumableArray.js"
+ },
+ "./helpers/toConsumableArray.js"
+ ],
+ "./helpers/esm/toConsumableArray": "./helpers/esm/toConsumableArray.js",
+ "./helpers/toPrimitive": [
+ {
+ "node": "./helpers/toPrimitive.js",
+ "import": "./helpers/esm/toPrimitive.js",
+ "default": "./helpers/toPrimitive.js"
+ },
+ "./helpers/toPrimitive.js"
+ ],
+ "./helpers/esm/toPrimitive": "./helpers/esm/toPrimitive.js",
+ "./helpers/toPropertyKey": [
+ {
+ "node": "./helpers/toPropertyKey.js",
+ "import": "./helpers/esm/toPropertyKey.js",
+ "default": "./helpers/toPropertyKey.js"
+ },
+ "./helpers/toPropertyKey.js"
+ ],
+ "./helpers/esm/toPropertyKey": "./helpers/esm/toPropertyKey.js",
+ "./helpers/toSetter": [
+ {
+ "node": "./helpers/toSetter.js",
+ "import": "./helpers/esm/toSetter.js",
+ "default": "./helpers/toSetter.js"
+ },
+ "./helpers/toSetter.js"
+ ],
+ "./helpers/esm/toSetter": "./helpers/esm/toSetter.js",
+ "./helpers/tsRewriteRelativeImportExtensions": [
+ {
+ "node": "./helpers/tsRewriteRelativeImportExtensions.js",
+ "import": "./helpers/esm/tsRewriteRelativeImportExtensions.js",
+ "default": "./helpers/tsRewriteRelativeImportExtensions.js"
+ },
+ "./helpers/tsRewriteRelativeImportExtensions.js"
+ ],
+ "./helpers/esm/tsRewriteRelativeImportExtensions": "./helpers/esm/tsRewriteRelativeImportExtensions.js",
+ "./helpers/typeof": [
+ {
+ "node": "./helpers/typeof.js",
+ "import": "./helpers/esm/typeof.js",
+ "default": "./helpers/typeof.js"
+ },
+ "./helpers/typeof.js"
+ ],
+ "./helpers/esm/typeof": "./helpers/esm/typeof.js",
+ "./helpers/unsupportedIterableToArray": [
+ {
+ "node": "./helpers/unsupportedIterableToArray.js",
+ "import": "./helpers/esm/unsupportedIterableToArray.js",
+ "default": "./helpers/unsupportedIterableToArray.js"
+ },
+ "./helpers/unsupportedIterableToArray.js"
+ ],
+ "./helpers/esm/unsupportedIterableToArray": "./helpers/esm/unsupportedIterableToArray.js",
+ "./helpers/usingCtx": [
+ {
+ "node": "./helpers/usingCtx.js",
+ "import": "./helpers/esm/usingCtx.js",
+ "default": "./helpers/usingCtx.js"
+ },
+ "./helpers/usingCtx.js"
+ ],
+ "./helpers/esm/usingCtx": "./helpers/esm/usingCtx.js",
+ "./helpers/wrapAsyncGenerator": [
+ {
+ "node": "./helpers/wrapAsyncGenerator.js",
+ "import": "./helpers/esm/wrapAsyncGenerator.js",
+ "default": "./helpers/wrapAsyncGenerator.js"
+ },
+ "./helpers/wrapAsyncGenerator.js"
+ ],
+ "./helpers/esm/wrapAsyncGenerator": "./helpers/esm/wrapAsyncGenerator.js",
+ "./helpers/wrapNativeSuper": [
+ {
+ "node": "./helpers/wrapNativeSuper.js",
+ "import": "./helpers/esm/wrapNativeSuper.js",
+ "default": "./helpers/wrapNativeSuper.js"
+ },
+ "./helpers/wrapNativeSuper.js"
+ ],
+ "./helpers/esm/wrapNativeSuper": "./helpers/esm/wrapNativeSuper.js",
+ "./helpers/wrapRegExp": [
+ {
+ "node": "./helpers/wrapRegExp.js",
+ "import": "./helpers/esm/wrapRegExp.js",
+ "default": "./helpers/wrapRegExp.js"
+ },
+ "./helpers/wrapRegExp.js"
+ ],
+ "./helpers/esm/wrapRegExp": "./helpers/esm/wrapRegExp.js",
+ "./helpers/writeOnlyError": [
+ {
+ "node": "./helpers/writeOnlyError.js",
+ "import": "./helpers/esm/writeOnlyError.js",
+ "default": "./helpers/writeOnlyError.js"
+ },
+ "./helpers/writeOnlyError.js"
+ ],
+ "./helpers/esm/writeOnlyError": "./helpers/esm/writeOnlyError.js",
+ "./helpers/AwaitValue": [
+ {
+ "node": "./helpers/AwaitValue.js",
+ "import": "./helpers/esm/AwaitValue.js",
+ "default": "./helpers/AwaitValue.js"
+ },
+ "./helpers/AwaitValue.js"
+ ],
+ "./helpers/esm/AwaitValue": "./helpers/esm/AwaitValue.js",
+ "./helpers/applyDecs": [
+ {
+ "node": "./helpers/applyDecs.js",
+ "import": "./helpers/esm/applyDecs.js",
+ "default": "./helpers/applyDecs.js"
+ },
+ "./helpers/applyDecs.js"
+ ],
+ "./helpers/esm/applyDecs": "./helpers/esm/applyDecs.js",
+ "./helpers/applyDecs2203": [
+ {
+ "node": "./helpers/applyDecs2203.js",
+ "import": "./helpers/esm/applyDecs2203.js",
+ "default": "./helpers/applyDecs2203.js"
+ },
+ "./helpers/applyDecs2203.js"
+ ],
+ "./helpers/esm/applyDecs2203": "./helpers/esm/applyDecs2203.js",
+ "./helpers/applyDecs2203R": [
+ {
+ "node": "./helpers/applyDecs2203R.js",
+ "import": "./helpers/esm/applyDecs2203R.js",
+ "default": "./helpers/applyDecs2203R.js"
+ },
+ "./helpers/applyDecs2203R.js"
+ ],
+ "./helpers/esm/applyDecs2203R": "./helpers/esm/applyDecs2203R.js",
+ "./helpers/applyDecs2301": [
+ {
+ "node": "./helpers/applyDecs2301.js",
+ "import": "./helpers/esm/applyDecs2301.js",
+ "default": "./helpers/applyDecs2301.js"
+ },
+ "./helpers/applyDecs2301.js"
+ ],
+ "./helpers/esm/applyDecs2301": "./helpers/esm/applyDecs2301.js",
+ "./helpers/applyDecs2305": [
+ {
+ "node": "./helpers/applyDecs2305.js",
+ "import": "./helpers/esm/applyDecs2305.js",
+ "default": "./helpers/applyDecs2305.js"
+ },
+ "./helpers/applyDecs2305.js"
+ ],
+ "./helpers/esm/applyDecs2305": "./helpers/esm/applyDecs2305.js",
+ "./helpers/classApplyDescriptorDestructureSet": [
+ {
+ "node": "./helpers/classApplyDescriptorDestructureSet.js",
+ "import": "./helpers/esm/classApplyDescriptorDestructureSet.js",
+ "default": "./helpers/classApplyDescriptorDestructureSet.js"
+ },
+ "./helpers/classApplyDescriptorDestructureSet.js"
+ ],
+ "./helpers/esm/classApplyDescriptorDestructureSet": "./helpers/esm/classApplyDescriptorDestructureSet.js",
+ "./helpers/classApplyDescriptorGet": [
+ {
+ "node": "./helpers/classApplyDescriptorGet.js",
+ "import": "./helpers/esm/classApplyDescriptorGet.js",
+ "default": "./helpers/classApplyDescriptorGet.js"
+ },
+ "./helpers/classApplyDescriptorGet.js"
+ ],
+ "./helpers/esm/classApplyDescriptorGet": "./helpers/esm/classApplyDescriptorGet.js",
+ "./helpers/classApplyDescriptorSet": [
+ {
+ "node": "./helpers/classApplyDescriptorSet.js",
+ "import": "./helpers/esm/classApplyDescriptorSet.js",
+ "default": "./helpers/classApplyDescriptorSet.js"
+ },
+ "./helpers/classApplyDescriptorSet.js"
+ ],
+ "./helpers/esm/classApplyDescriptorSet": "./helpers/esm/classApplyDescriptorSet.js",
+ "./helpers/classCheckPrivateStaticAccess": [
+ {
+ "node": "./helpers/classCheckPrivateStaticAccess.js",
+ "import": "./helpers/esm/classCheckPrivateStaticAccess.js",
+ "default": "./helpers/classCheckPrivateStaticAccess.js"
+ },
+ "./helpers/classCheckPrivateStaticAccess.js"
+ ],
+ "./helpers/esm/classCheckPrivateStaticAccess": "./helpers/esm/classCheckPrivateStaticAccess.js",
+ "./helpers/classCheckPrivateStaticFieldDescriptor": [
+ {
+ "node": "./helpers/classCheckPrivateStaticFieldDescriptor.js",
+ "import": "./helpers/esm/classCheckPrivateStaticFieldDescriptor.js",
+ "default": "./helpers/classCheckPrivateStaticFieldDescriptor.js"
+ },
+ "./helpers/classCheckPrivateStaticFieldDescriptor.js"
+ ],
+ "./helpers/esm/classCheckPrivateStaticFieldDescriptor": "./helpers/esm/classCheckPrivateStaticFieldDescriptor.js",
+ "./helpers/classExtractFieldDescriptor": [
+ {
+ "node": "./helpers/classExtractFieldDescriptor.js",
+ "import": "./helpers/esm/classExtractFieldDescriptor.js",
+ "default": "./helpers/classExtractFieldDescriptor.js"
+ },
+ "./helpers/classExtractFieldDescriptor.js"
+ ],
+ "./helpers/esm/classExtractFieldDescriptor": "./helpers/esm/classExtractFieldDescriptor.js",
+ "./helpers/classPrivateFieldDestructureSet": [
+ {
+ "node": "./helpers/classPrivateFieldDestructureSet.js",
+ "import": "./helpers/esm/classPrivateFieldDestructureSet.js",
+ "default": "./helpers/classPrivateFieldDestructureSet.js"
+ },
+ "./helpers/classPrivateFieldDestructureSet.js"
+ ],
+ "./helpers/esm/classPrivateFieldDestructureSet": "./helpers/esm/classPrivateFieldDestructureSet.js",
+ "./helpers/classPrivateFieldGet": [
+ {
+ "node": "./helpers/classPrivateFieldGet.js",
+ "import": "./helpers/esm/classPrivateFieldGet.js",
+ "default": "./helpers/classPrivateFieldGet.js"
+ },
+ "./helpers/classPrivateFieldGet.js"
+ ],
+ "./helpers/esm/classPrivateFieldGet": "./helpers/esm/classPrivateFieldGet.js",
+ "./helpers/classPrivateFieldSet": [
+ {
+ "node": "./helpers/classPrivateFieldSet.js",
+ "import": "./helpers/esm/classPrivateFieldSet.js",
+ "default": "./helpers/classPrivateFieldSet.js"
+ },
+ "./helpers/classPrivateFieldSet.js"
+ ],
+ "./helpers/esm/classPrivateFieldSet": "./helpers/esm/classPrivateFieldSet.js",
+ "./helpers/classPrivateMethodGet": [
+ {
+ "node": "./helpers/classPrivateMethodGet.js",
+ "import": "./helpers/esm/classPrivateMethodGet.js",
+ "default": "./helpers/classPrivateMethodGet.js"
+ },
+ "./helpers/classPrivateMethodGet.js"
+ ],
+ "./helpers/esm/classPrivateMethodGet": "./helpers/esm/classPrivateMethodGet.js",
+ "./helpers/classPrivateMethodSet": [
+ {
+ "node": "./helpers/classPrivateMethodSet.js",
+ "import": "./helpers/esm/classPrivateMethodSet.js",
+ "default": "./helpers/classPrivateMethodSet.js"
+ },
+ "./helpers/classPrivateMethodSet.js"
+ ],
+ "./helpers/esm/classPrivateMethodSet": "./helpers/esm/classPrivateMethodSet.js",
+ "./helpers/classStaticPrivateFieldDestructureSet": [
+ {
+ "node": "./helpers/classStaticPrivateFieldDestructureSet.js",
+ "import": "./helpers/esm/classStaticPrivateFieldDestructureSet.js",
+ "default": "./helpers/classStaticPrivateFieldDestructureSet.js"
+ },
+ "./helpers/classStaticPrivateFieldDestructureSet.js"
+ ],
+ "./helpers/esm/classStaticPrivateFieldDestructureSet": "./helpers/esm/classStaticPrivateFieldDestructureSet.js",
+ "./helpers/classStaticPrivateFieldSpecGet": [
+ {
+ "node": "./helpers/classStaticPrivateFieldSpecGet.js",
+ "import": "./helpers/esm/classStaticPrivateFieldSpecGet.js",
+ "default": "./helpers/classStaticPrivateFieldSpecGet.js"
+ },
+ "./helpers/classStaticPrivateFieldSpecGet.js"
+ ],
+ "./helpers/esm/classStaticPrivateFieldSpecGet": "./helpers/esm/classStaticPrivateFieldSpecGet.js",
+ "./helpers/classStaticPrivateFieldSpecSet": [
+ {
+ "node": "./helpers/classStaticPrivateFieldSpecSet.js",
+ "import": "./helpers/esm/classStaticPrivateFieldSpecSet.js",
+ "default": "./helpers/classStaticPrivateFieldSpecSet.js"
+ },
+ "./helpers/classStaticPrivateFieldSpecSet.js"
+ ],
+ "./helpers/esm/classStaticPrivateFieldSpecSet": "./helpers/esm/classStaticPrivateFieldSpecSet.js",
+ "./helpers/classStaticPrivateMethodSet": [
+ {
+ "node": "./helpers/classStaticPrivateMethodSet.js",
+ "import": "./helpers/esm/classStaticPrivateMethodSet.js",
+ "default": "./helpers/classStaticPrivateMethodSet.js"
+ },
+ "./helpers/classStaticPrivateMethodSet.js"
+ ],
+ "./helpers/esm/classStaticPrivateMethodSet": "./helpers/esm/classStaticPrivateMethodSet.js",
+ "./helpers/defineEnumerableProperties": [
+ {
+ "node": "./helpers/defineEnumerableProperties.js",
+ "import": "./helpers/esm/defineEnumerableProperties.js",
+ "default": "./helpers/defineEnumerableProperties.js"
+ },
+ "./helpers/defineEnumerableProperties.js"
+ ],
+ "./helpers/esm/defineEnumerableProperties": "./helpers/esm/defineEnumerableProperties.js",
+ "./helpers/dispose": [
+ {
+ "node": "./helpers/dispose.js",
+ "import": "./helpers/esm/dispose.js",
+ "default": "./helpers/dispose.js"
+ },
+ "./helpers/dispose.js"
+ ],
+ "./helpers/esm/dispose": "./helpers/esm/dispose.js",
+ "./helpers/objectSpread": [
+ {
+ "node": "./helpers/objectSpread.js",
+ "import": "./helpers/esm/objectSpread.js",
+ "default": "./helpers/objectSpread.js"
+ },
+ "./helpers/objectSpread.js"
+ ],
+ "./helpers/esm/objectSpread": "./helpers/esm/objectSpread.js",
+ "./helpers/regeneratorRuntime": [
+ {
+ "node": "./helpers/regeneratorRuntime.js",
+ "import": "./helpers/esm/regeneratorRuntime.js",
+ "default": "./helpers/regeneratorRuntime.js"
+ },
+ "./helpers/regeneratorRuntime.js"
+ ],
+ "./helpers/esm/regeneratorRuntime": "./helpers/esm/regeneratorRuntime.js",
+ "./helpers/using": [
+ {
+ "node": "./helpers/using.js",
+ "import": "./helpers/esm/using.js",
+ "default": "./helpers/using.js"
+ },
+ "./helpers/using.js"
+ ],
+ "./helpers/esm/using": "./helpers/esm/using.js",
+ "./package": "./package.json",
+ "./package.json": "./package.json",
+ "./regenerator": "./regenerator/index.js",
+ "./regenerator/*.js": "./regenerator/*.js",
+ "./regenerator/": "./regenerator/"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "type": "commonjs"
+}
\ No newline at end of file
diff --git a/mqtt-backend/node_modules/@babel/runtime/regenerator/index.js b/mqtt-backend/node_modules/@babel/runtime/regenerator/index.js
new file mode 100644
index 0000000..5881357
--- /dev/null
+++ b/mqtt-backend/node_modules/@babel/runtime/regenerator/index.js
@@ -0,0 +1,15 @@
+// TODO(Babel 8): Remove this file.
+
+var runtime = require("../helpers/regeneratorRuntime")();
+module.exports = runtime;
+
+// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=
+try {
+ regeneratorRuntime = runtime;
+} catch (accidentalStrictMode) {
+ if (typeof globalThis === "object") {
+ globalThis.regeneratorRuntime = runtime;
+ } else {
+ Function("r", "regeneratorRuntime = r")(runtime);
+ }
+}
diff --git a/mqtt-backend/node_modules/@types/node/LICENSE b/mqtt-backend/node_modules/@types/node/LICENSE
new file mode 100644
index 0000000..9e841e7
--- /dev/null
+++ b/mqtt-backend/node_modules/@types/node/LICENSE
@@ -0,0 +1,21 @@
+ MIT License
+
+ Copyright (c) Microsoft Corporation.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
diff --git a/mqtt-backend/node_modules/@types/node/README.md b/mqtt-backend/node_modules/@types/node/README.md
new file mode 100644
index 0000000..83c5c7b
--- /dev/null
+++ b/mqtt-backend/node_modules/@types/node/README.md
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/node`
+
+# Summary
+This package contains type definitions for node (https://nodejs.org/).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
+
+### Additional Details
+ * Last updated: Fri, 10 Apr 2026 03:39:58 GMT
+ * Dependencies: [undici-types](https://npmjs.com/package/undici-types)
+
+# Credits
+These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [Alberto Schiabel](https://github.com/jkomyno), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [David Junger](https://github.com/touffy), [Mohsen Azimi](https://github.com/mohsen1), [Nikita Galkin](https://github.com/galkin), [Sebastian Silbermann](https://github.com/eps1lon), [Wilco Bakker](https://github.com/WilcoBakker), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), [wafuwafu13](https://github.com/wafuwafu13), [Matteo Collina](https://github.com/mcollina), [Dmitry Semigradsky](https://github.com/Semigradsky), [René](https://github.com/Renegade334), and [Yagiz Nizipli](https://github.com/anonrig).
diff --git a/mqtt-backend/node_modules/@types/node/assert.d.ts b/mqtt-backend/node_modules/@types/node/assert.d.ts
new file mode 100644
index 0000000..c4cc77e
--- /dev/null
+++ b/mqtt-backend/node_modules/@types/node/assert.d.ts
@@ -0,0 +1,950 @@
+declare module "node:assert" {
+ import strict = require("node:assert/strict");
+ /**
+ * An alias of {@link assert.ok}.
+ * @since v0.5.9
+ * @param value The input that is checked for being truthy.
+ */
+ function assert(value: unknown, message?: string | Error): asserts value;
+ const kOptions: unique symbol;
+ namespace assert {
+ type AssertMethodNames =
+ | "deepEqual"
+ | "deepStrictEqual"
+ | "doesNotMatch"
+ | "doesNotReject"
+ | "doesNotThrow"
+ | "equal"
+ | "fail"
+ | "ifError"
+ | "match"
+ | "notDeepEqual"
+ | "notDeepStrictEqual"
+ | "notEqual"
+ | "notStrictEqual"
+ | "ok"
+ | "partialDeepStrictEqual"
+ | "rejects"
+ | "strictEqual"
+ | "throws";
+ interface AssertOptions {
+ /**
+ * If set to `'full'`, shows the full diff in assertion errors.
+ * @default 'simple'
+ */
+ diff?: "simple" | "full" | undefined;
+ /**
+ * If set to `true`, non-strict methods behave like their
+ * corresponding strict methods.
+ * @default true
+ */
+ strict?: boolean | undefined;
+ /**
+ * If set to `true`, skips prototype and constructor
+ * comparison in deep equality checks.
+ * @since v24.9.0
+ * @default false
+ */
+ skipPrototype?: boolean | undefined;
+ }
+ interface Assert extends Pick {
+ readonly [kOptions]: AssertOptions & { strict: false };
+ }
+ interface AssertStrict extends Pick {
+ readonly [kOptions]: AssertOptions & { strict: true };
+ }
+ /**
+ * The `Assert` class allows creating independent assertion instances with custom options.
+ * @since v24.6.0
+ */
+ var Assert: {
+ /**
+ * Creates a new assertion instance. The `diff` option controls the verbosity of diffs in assertion error messages.
+ *
+ * ```js
+ * const { Assert } = require('node:assert');
+ * const assertInstance = new Assert({ diff: 'full' });
+ * assertInstance.deepStrictEqual({ a: 1 }, { a: 2 });
+ * // Shows a full diff in the error message.
+ * ```
+ *
+ * **Important**: When destructuring assertion methods from an `Assert` instance,
+ * the methods lose their connection to the instance's configuration options (such
+ * as `diff`, `strict`, and `skipPrototype` settings).
+ * The destructured methods will fall back to default behavior instead.
+ *
+ * ```js
+ * const myAssert = new Assert({ diff: 'full' });
+ *
+ * // This works as expected - uses 'full' diff
+ * myAssert.strictEqual({ a: 1 }, { b: { c: 1 } });
+ *
+ * // This loses the 'full' diff setting - falls back to default 'simple' diff
+ * const { strictEqual } = myAssert;
+ * strictEqual({ a: 1 }, { b: { c: 1 } });
+ * ```
+ *
+ * The `skipPrototype` option affects all deep equality methods:
+ *
+ * ```js
+ * class Foo {
+ * constructor(a) {
+ * this.a = a;
+ * }
+ * }
+ *
+ * class Bar {
+ * constructor(a) {
+ * this.a = a;
+ * }
+ * }
+ *
+ * const foo = new Foo(1);
+ * const bar = new Bar(1);
+ *
+ * // Default behavior - fails due to different constructors
+ * const assert1 = new Assert();
+ * assert1.deepStrictEqual(foo, bar); // AssertionError
+ *
+ * // Skip prototype comparison - passes if properties are equal
+ * const assert2 = new Assert({ skipPrototype: true });
+ * assert2.deepStrictEqual(foo, bar); // OK
+ * ```
+ *
+ * When destructured, methods lose access to the instance's `this` context and revert to default assertion behavior
+ * (diff: 'simple', non-strict mode).
+ * To maintain custom options when using destructured methods, avoid
+ * destructuring and call methods directly on the instance.
+ * @since v24.6.0
+ */
+ new(
+ options?: AssertOptions & { strict?: true | undefined },
+ ): AssertStrict;
+ new(
+ options: AssertOptions,
+ ): Assert;
+ };
+ interface AssertionErrorOptions {
+ /**
+ * If provided, the error message is set to this value.
+ */
+ message?: string | undefined;
+ /**
+ * The `actual` property on the error instance.
+ */
+ actual?: unknown;
+ /**
+ * The `expected` property on the error instance.
+ */
+ expected?: unknown;
+ /**
+ * The `operator` property on the error instance.
+ */
+ operator?: string | undefined;
+ /**
+ * If provided, the generated stack trace omits frames before this function.
+ */
+ stackStartFn?: Function | undefined;
+ /**
+ * If set to `'full'`, shows the full diff in assertion errors.
+ * @default 'simple'
+ */
+ diff?: "simple" | "full" | undefined;
+ }
+ /**
+ * Indicates the failure of an assertion. All errors thrown by the `node:assert` module will be instances of the `AssertionError` class.
+ */
+ class AssertionError extends Error {
+ constructor(options: AssertionErrorOptions);
+ /**
+ * Set to the `actual` argument for methods such as {@link assert.strictEqual()}.
+ */
+ actual: unknown;
+ /**
+ * Set to the `expected` argument for methods such as {@link assert.strictEqual()}.
+ */
+ expected: unknown;
+ /**
+ * Indicates if the message was auto-generated (`true`) or not.
+ */
+ generatedMessage: boolean;
+ /**
+ * Value is always `ERR_ASSERTION` to show that the error is an assertion error.
+ */
+ code: "ERR_ASSERTION";
+ /**
+ * Set to the passed in operator value.
+ */
+ operator: string;
+ }
+ type AssertPredicate = RegExp | (new() => object) | ((thrown: unknown) => boolean) | object | Error;
+ /**
+ * Throws an `AssertionError` with the provided error message or a default
+ * error message. If the `message` parameter is an instance of an `Error` then
+ * it will be thrown instead of the `AssertionError`.
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.fail();
+ * // AssertionError [ERR_ASSERTION]: Failed
+ *
+ * assert.fail('boom');
+ * // AssertionError [ERR_ASSERTION]: boom
+ *
+ * assert.fail(new TypeError('need array'));
+ * // TypeError: need array
+ * ```
+ * @since v0.1.21
+ * @param [message='Failed']
+ */
+ function fail(message?: string | Error): never;
+ /**
+ * Tests if `value` is truthy. It is equivalent to `assert.equal(!!value, true, message)`.
+ *
+ * If `value` is not truthy, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is `undefined`, a default
+ * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
+ * If no arguments are passed in at all `message` will be set to the string:`` 'No value argument passed to `assert.ok()`' ``.
+ *
+ * Be aware that in the `repl` the error message will be different to the one
+ * thrown in a file! See below for further details.
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.ok(true);
+ * // OK
+ * assert.ok(1);
+ * // OK
+ *
+ * assert.ok();
+ * // AssertionError: No value argument passed to `assert.ok()`
+ *
+ * assert.ok(false, 'it\'s false');
+ * // AssertionError: it's false
+ *
+ * // In the repl:
+ * assert.ok(typeof 123 === 'string');
+ * // AssertionError: false == true
+ *
+ * // In a file (e.g. test.js):
+ * assert.ok(typeof 123 === 'string');
+ * // AssertionError: The expression evaluated to a falsy value:
+ * //
+ * // assert.ok(typeof 123 === 'string')
+ *
+ * assert.ok(false);
+ * // AssertionError: The expression evaluated to a falsy value:
+ * //
+ * // assert.ok(false)
+ *
+ * assert.ok(0);
+ * // AssertionError: The expression evaluated to a falsy value:
+ * //
+ * // assert.ok(0)
+ * ```
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * // Using `assert()` works the same:
+ * assert(2 + 2 > 5);;
+ * // AssertionError: The expression evaluated to a falsy value:
+ * //
+ * // assert(2 + 2 > 5)
+ * ```
+ * @since v0.1.21
+ */
+ function ok(value: unknown, message?: string | Error): asserts value;
+ /**
+ * **Strict assertion mode**
+ *
+ * An alias of {@link strictEqual}.
+ *
+ * **Legacy assertion mode**
+ *
+ * > Stability: 3 - Legacy: Use {@link strictEqual} instead.
+ *
+ * Tests shallow, coercive equality between the `actual` and `expected` parameters
+ * using the [`==` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality). `NaN` is specially handled
+ * and treated as being identical if both sides are `NaN`.
+ *
+ * ```js
+ * import assert from 'node:assert';
+ *
+ * assert.equal(1, 1);
+ * // OK, 1 == 1
+ * assert.equal(1, '1');
+ * // OK, 1 == '1'
+ * assert.equal(NaN, NaN);
+ * // OK
+ *
+ * assert.equal(1, 2);
+ * // AssertionError: 1 == 2
+ * assert.equal({ a: { b: 1 } }, { a: { b: 1 } });
+ * // AssertionError: { a: { b: 1 } } == { a: { b: 1 } }
+ * ```
+ *
+ * If the values are not equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default
+ * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
+ * @since v0.1.21
+ */
+ function equal(actual: unknown, expected: unknown, message?: string | Error): void;
+ /**
+ * **Strict assertion mode**
+ *
+ * An alias of {@link notStrictEqual}.
+ *
+ * **Legacy assertion mode**
+ *
+ * > Stability: 3 - Legacy: Use {@link notStrictEqual} instead.
+ *
+ * Tests shallow, coercive inequality with the [`!=` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Inequality). `NaN` is
+ * specially handled and treated as being identical if both sides are `NaN`.
+ *
+ * ```js
+ * import assert from 'node:assert';
+ *
+ * assert.notEqual(1, 2);
+ * // OK
+ *
+ * assert.notEqual(1, 1);
+ * // AssertionError: 1 != 1
+ *
+ * assert.notEqual(1, '1');
+ * // AssertionError: 1 != '1'
+ * ```
+ *
+ * If the values are equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default error
+ * message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
+ * @since v0.1.21
+ */
+ function notEqual(actual: unknown, expected: unknown, message?: string | Error): void;
+ /**
+ * **Strict assertion mode**
+ *
+ * An alias of {@link deepStrictEqual}.
+ *
+ * **Legacy assertion mode**
+ *
+ * > Stability: 3 - Legacy: Use {@link deepStrictEqual} instead.
+ *
+ * Tests for deep equality between the `actual` and `expected` parameters. Consider
+ * using {@link deepStrictEqual} instead. {@link deepEqual} can have
+ * surprising results.
+ *
+ * _Deep equality_ means that the enumerable "own" properties of child objects
+ * are also recursively evaluated by the following rules.
+ * @since v0.1.21
+ */
+ function deepEqual(actual: unknown, expected: unknown, message?: string | Error): void;
+ /**
+ * **Strict assertion mode**
+ *
+ * An alias of {@link notDeepStrictEqual}.
+ *
+ * **Legacy assertion mode**
+ *
+ * > Stability: 3 - Legacy: Use {@link notDeepStrictEqual} instead.
+ *
+ * Tests for any deep inequality. Opposite of {@link deepEqual}.
+ *
+ * ```js
+ * import assert from 'node:assert';
+ *
+ * const obj1 = {
+ * a: {
+ * b: 1,
+ * },
+ * };
+ * const obj2 = {
+ * a: {
+ * b: 2,
+ * },
+ * };
+ * const obj3 = {
+ * a: {
+ * b: 1,
+ * },
+ * };
+ * const obj4 = { __proto__: obj1 };
+ *
+ * assert.notDeepEqual(obj1, obj1);
+ * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
+ *
+ * assert.notDeepEqual(obj1, obj2);
+ * // OK
+ *
+ * assert.notDeepEqual(obj1, obj3);
+ * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
+ *
+ * assert.notDeepEqual(obj1, obj4);
+ * // OK
+ * ```
+ *
+ * If the values are deeply equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default
+ * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
+ * instead of the `AssertionError`.
+ * @since v0.1.21
+ */
+ function notDeepEqual(actual: unknown, expected: unknown, message?: string | Error): void;
+ /**
+ * Tests strict equality between the `actual` and `expected` parameters as
+ * determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.strictEqual(1, 2);
+ * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal:
+ * //
+ * // 1 !== 2
+ *
+ * assert.strictEqual(1, 1);
+ * // OK
+ *
+ * assert.strictEqual('Hello foobar', 'Hello World!');
+ * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal:
+ * // + actual - expected
+ * //
+ * // + 'Hello foobar'
+ * // - 'Hello World!'
+ * // ^
+ *
+ * const apples = 1;
+ * const oranges = 2;
+ * assert.strictEqual(apples, oranges, `apples ${apples} !== oranges ${oranges}`);
+ * // AssertionError [ERR_ASSERTION]: apples 1 !== oranges 2
+ *
+ * assert.strictEqual(1, '1', new TypeError('Inputs are not identical'));
+ * // TypeError: Inputs are not identical
+ * ```
+ *
+ * If the values are not strictly equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a
+ * default error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
+ * instead of the `AssertionError`.
+ * @since v0.1.21
+ */
+ function strictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T;
+ /**
+ * Tests strict inequality between the `actual` and `expected` parameters as
+ * determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.notStrictEqual(1, 2);
+ * // OK
+ *
+ * assert.notStrictEqual(1, 1);
+ * // AssertionError [ERR_ASSERTION]: Expected "actual" to be strictly unequal to:
+ * //
+ * // 1
+ *
+ * assert.notStrictEqual(1, '1');
+ * // OK
+ * ```
+ *
+ * If the values are strictly equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a
+ * default error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
+ * instead of the `AssertionError`.
+ * @since v0.1.21
+ */
+ function notStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void;
+ /**
+ * Tests for deep equality between the `actual` and `expected` parameters.
+ * "Deep" equality means that the enumerable "own" properties of child objects
+ * are recursively evaluated also by the following rules.
+ * @since v1.2.0
+ */
+ function deepStrictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T;
+ /**
+ * Tests for deep strict inequality. Opposite of {@link deepStrictEqual}.
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.notDeepStrictEqual({ a: 1 }, { a: '1' });
+ * // OK
+ * ```
+ *
+ * If the values are deeply and strictly equal, an `AssertionError` is thrown
+ * with a `message` property set equal to the value of the `message` parameter. If
+ * the `message` parameter is undefined, a default error message is assigned. If
+ * the `message` parameter is an instance of an `Error` then it will be thrown
+ * instead of the `AssertionError`.
+ * @since v1.2.0
+ */
+ function notDeepStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void;
+ /**
+ * Expects the function `fn` to throw an error.
+ *
+ * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
+ * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function,
+ * a validation object where each property will be tested for strict deep equality,
+ * or an instance of error where each property will be tested for strict deep
+ * equality including the non-enumerable `message` and `name` properties. When
+ * using an object, it is also possible to use a regular expression, when
+ * validating against a string property. See below for examples.
+ *
+ * If specified, `message` will be appended to the message provided by the `AssertionError` if the `fn` call fails to throw or in case the error validation
+ * fails.
+ *
+ * Custom validation object/error instance:
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * const err = new TypeError('Wrong value');
+ * err.code = 404;
+ * err.foo = 'bar';
+ * err.info = {
+ * nested: true,
+ * baz: 'text',
+ * };
+ * err.reg = /abc/i;
+ *
+ * assert.throws(
+ * () => {
+ * throw err;
+ * },
+ * {
+ * name: 'TypeError',
+ * message: 'Wrong value',
+ * info: {
+ * nested: true,
+ * baz: 'text',
+ * },
+ * // Only properties on the validation object will be tested for.
+ * // Using nested objects requires all properties to be present. Otherwise
+ * // the validation is going to fail.
+ * },
+ * );
+ *
+ * // Using regular expressions to validate error properties:
+ * assert.throws(
+ * () => {
+ * throw err;
+ * },
+ * {
+ * // The `name` and `message` properties are strings and using regular
+ * // expressions on those will match against the string. If they fail, an
+ * // error is thrown.
+ * name: /^TypeError$/,
+ * message: /Wrong/,
+ * foo: 'bar',
+ * info: {
+ * nested: true,
+ * // It is not possible to use regular expressions for nested properties!
+ * baz: 'text',
+ * },
+ * // The `reg` property contains a regular expression and only if the
+ * // validation object contains an identical regular expression, it is going
+ * // to pass.
+ * reg: /abc/i,
+ * },
+ * );
+ *
+ * // Fails due to the different `message` and `name` properties:
+ * assert.throws(
+ * () => {
+ * const otherErr = new Error('Not found');
+ * // Copy all enumerable properties from `err` to `otherErr`.
+ * for (const [key, value] of Object.entries(err)) {
+ * otherErr[key] = value;
+ * }
+ * throw otherErr;
+ * },
+ * // The error's `message` and `name` properties will also be checked when using
+ * // an error as validation object.
+ * err,
+ * );
+ * ```
+ *
+ * Validate instanceof using constructor:
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.throws(
+ * () => {
+ * throw new Error('Wrong value');
+ * },
+ * Error,
+ * );
+ * ```
+ *
+ * Validate error message using [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions):
+ *
+ * Using a regular expression runs `.toString` on the error object, and will
+ * therefore also include the error name.
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.throws(
+ * () => {
+ * throw new Error('Wrong value');
+ * },
+ * /^Error: Wrong value$/,
+ * );
+ * ```
+ *
+ * Custom error validation:
+ *
+ * The function must return `true` to indicate all internal validations passed.
+ * It will otherwise fail with an `AssertionError`.
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.throws(
+ * () => {
+ * throw new Error('Wrong value');
+ * },
+ * (err) => {
+ * assert(err instanceof Error);
+ * assert(/value/.test(err));
+ * // Avoid returning anything from validation functions besides `true`.
+ * // Otherwise, it's not clear what part of the validation failed. Instead,
+ * // throw an error about the specific validation that failed (as done in this
+ * // example) and add as much helpful debugging information to that error as
+ * // possible.
+ * return true;
+ * },
+ * 'unexpected error',
+ * );
+ * ```
+ *
+ * `error` cannot be a string. If a string is provided as the second
+ * argument, then `error` is assumed to be omitted and the string will be used for `message` instead. This can lead to easy-to-miss mistakes. Using the same
+ * message as the thrown error message is going to result in an `ERR_AMBIGUOUS_ARGUMENT` error. Please read the example below carefully if using
+ * a string as the second argument gets considered:
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * function throwingFirst() {
+ * throw new Error('First');
+ * }
+ *
+ * function throwingSecond() {
+ * throw new Error('Second');
+ * }
+ *
+ * function notThrowing() {}
+ *
+ * // The second argument is a string and the input function threw an Error.
+ * // The first case will not throw as it does not match for the error message
+ * // thrown by the input function!
+ * assert.throws(throwingFirst, 'Second');
+ * // In the next example the message has no benefit over the message from the
+ * // error and since it is not clear if the user intended to actually match
+ * // against the error message, Node.js throws an `ERR_AMBIGUOUS_ARGUMENT` error.
+ * assert.throws(throwingSecond, 'Second');
+ * // TypeError [ERR_AMBIGUOUS_ARGUMENT]
+ *
+ * // The string is only used (as message) in case the function does not throw:
+ * assert.throws(notThrowing, 'Second');
+ * // AssertionError [ERR_ASSERTION]: Missing expected exception: Second
+ *
+ * // If it was intended to match for the error message do this instead:
+ * // It does not throw because the error messages match.
+ * assert.throws(throwingSecond, /Second$/);
+ *
+ * // If the error message does not match, an AssertionError is thrown.
+ * assert.throws(throwingFirst, /Second$/);
+ * // AssertionError [ERR_ASSERTION]
+ * ```
+ *
+ * Due to the confusing error-prone notation, avoid a string as the second
+ * argument.
+ * @since v0.1.21
+ */
+ function throws(block: () => unknown, message?: string | Error): void;
+ function throws(block: () => unknown, error: AssertPredicate, message?: string | Error): void;
+ /**
+ * Asserts that the function `fn` does not throw an error.
+ *
+ * Using `assert.doesNotThrow()` is actually not useful because there
+ * is no benefit in catching an error and then rethrowing it. Instead, consider
+ * adding a comment next to the specific code path that should not throw and keep
+ * error messages as expressive as possible.
+ *
+ * When `assert.doesNotThrow()` is called, it will immediately call the `fn` function.
+ *
+ * If an error is thrown and it is the same type as that specified by the `error` parameter, then an `AssertionError` is thrown. If the error is of a
+ * different type, or if the `error` parameter is undefined, the error is
+ * propagated back to the caller.
+ *
+ * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
+ * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation
+ * function. See {@link throws} for more details.
+ *
+ * The following, for instance, will throw the `TypeError` because there is no
+ * matching error type in the assertion:
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.doesNotThrow(
+ * () => {
+ * throw new TypeError('Wrong value');
+ * },
+ * SyntaxError,
+ * );
+ * ```
+ *
+ * However, the following will result in an `AssertionError` with the message
+ * 'Got unwanted exception...':
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.doesNotThrow(
+ * () => {
+ * throw new TypeError('Wrong value');
+ * },
+ * TypeError,
+ * );
+ * ```
+ *
+ * If an `AssertionError` is thrown and a value is provided for the `message` parameter, the value of `message` will be appended to the `AssertionError` message:
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.doesNotThrow(
+ * () => {
+ * throw new TypeError('Wrong value');
+ * },
+ * /Wrong value/,
+ * 'Whoops',
+ * );
+ * // Throws: AssertionError: Got unwanted exception: Whoops
+ * ```
+ * @since v0.1.21
+ */
+ function doesNotThrow(block: () => unknown, message?: string | Error): void;
+ function doesNotThrow(block: () => unknown, error: AssertPredicate, message?: string | Error): void;
+ /**
+ * Throws `value` if `value` is not `undefined` or `null`. This is useful when
+ * testing the `error` argument in callbacks. The stack trace contains all frames
+ * from the error passed to `ifError()` including the potential new frames for `ifError()` itself.
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.ifError(null);
+ * // OK
+ * assert.ifError(0);
+ * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 0
+ * assert.ifError('error');
+ * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 'error'
+ * assert.ifError(new Error());
+ * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: Error
+ *
+ * // Create some random error frames.
+ * let err;
+ * (function errorFrame() {
+ * err = new Error('test error');
+ * })();
+ *
+ * (function ifErrorFrame() {
+ * assert.ifError(err);
+ * })();
+ * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: test error
+ * // at ifErrorFrame
+ * // at errorFrame
+ * ```
+ * @since v0.1.97
+ */
+ function ifError(value: unknown): asserts value is null | undefined;
+ /**
+ * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately
+ * calls the function and awaits the returned promise to complete. It will then
+ * check that the promise is rejected.
+ *
+ * If `asyncFn` is a function and it throws an error synchronously, `assert.rejects()` will return a rejected `Promise` with that error. If the
+ * function does not return a promise, `assert.rejects()` will return a rejected `Promise` with an [ERR_INVALID_RETURN_VALUE](https://nodejs.org/docs/latest-v25.x/api/errors.html#err_invalid_return_value)
+ * error. In both cases the error handler is skipped.
+ *
+ * Besides the async nature to await the completion behaves identically to {@link throws}.
+ *
+ * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
+ * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function,
+ * an object where each property will be tested for, or an instance of error where
+ * each property will be tested for including the non-enumerable `message` and `name` properties.
+ *
+ * If specified, `message` will be the message provided by the `{@link AssertionError}` if the `asyncFn` fails to reject.
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * await assert.rejects(
+ * async () => {
+ * throw new TypeError('Wrong value');
+ * },
+ * {
+ * name: 'TypeError',
+ * message: 'Wrong value',
+ * },
+ * );
+ * ```
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * await assert.rejects(
+ * async () => {
+ * throw new TypeError('Wrong value');
+ * },
+ * (err) => {
+ * assert.strictEqual(err.name, 'TypeError');
+ * assert.strictEqual(err.message, 'Wrong value');
+ * return true;
+ * },
+ * );
+ * ```
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.rejects(
+ * Promise.reject(new Error('Wrong value')),
+ * Error,
+ * ).then(() => {
+ * // ...
+ * });
+ * ```
+ *
+ * `error` cannot be a string. If a string is provided as the second argument, then `error` is assumed to
+ * be omitted and the string will be used for `message` instead. This can lead to easy-to-miss mistakes. Please read the
+ * example in {@link throws} carefully if using a string as the second argument gets considered.
+ * @since v10.0.0
+ */
+ function rejects(block: (() => Promise) | Promise, message?: string | Error): Promise;
+ function rejects(
+ block: (() => Promise) | Promise,
+ error: AssertPredicate,
+ message?: string | Error,
+ ): Promise;
+ /**
+ * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately
+ * calls the function and awaits the returned promise to complete. It will then
+ * check that the promise is not rejected.
+ *
+ * If `asyncFn` is a function and it throws an error synchronously, `assert.doesNotReject()` will return a rejected `Promise` with that error. If
+ * the function does not return a promise, `assert.doesNotReject()` will return a
+ * rejected `Promise` with an [ERR_INVALID_RETURN_VALUE](https://nodejs.org/docs/latest-v25.x/api/errors.html#err_invalid_return_value) error. In both cases
+ * the error handler is skipped.
+ *
+ * Using `assert.doesNotReject()` is actually not useful because there is little
+ * benefit in catching a rejection and then rejecting it again. Instead, consider
+ * adding a comment next to the specific code path that should not reject and keep
+ * error messages as expressive as possible.
+ *
+ * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
+ * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation
+ * function. See {@link throws} for more details.
+ *
+ * Besides the async nature to await the completion behaves identically to {@link doesNotThrow}.
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * await assert.doesNotReject(
+ * async () => {
+ * throw new TypeError('Wrong value');
+ * },
+ * SyntaxError,
+ * );
+ * ```
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.doesNotReject(Promise.reject(new TypeError('Wrong value')))
+ * .then(() => {
+ * // ...
+ * });
+ * ```
+ * @since v10.0.0
+ */
+ function doesNotReject(
+ block: (() => Promise) | Promise,
+ message?: string | Error,
+ ): Promise;
+ function doesNotReject(
+ block: (() => Promise) | Promise,
+ error: AssertPredicate,
+ message?: string | Error,
+ ): Promise;
+ /**
+ * Expects the `string` input to match the regular expression.
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.match('I will fail', /pass/);
+ * // AssertionError [ERR_ASSERTION]: The input did not match the regular ...
+ *
+ * assert.match(123, /pass/);
+ * // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
+ *
+ * assert.match('I will pass', /pass/);
+ * // OK
+ * ```
+ *
+ * If the values do not match, or if the `string` argument is of another type than `string`, an `{@link AssertionError}` is thrown with a `message` property set equal
+ * to the value of the `message` parameter. If the `message` parameter is
+ * undefined, a default error message is assigned. If the `message` parameter is an
+ * instance of an [Error](https://nodejs.org/docs/latest-v25.x/api/errors.html#class-error) then it will be thrown instead of the `{@link AssertionError}`.
+ * @since v13.6.0, v12.16.0
+ */
+ function match(value: string, regExp: RegExp, message?: string | Error): void;
+ /**
+ * Expects the `string` input not to match the regular expression.
+ *
+ * ```js
+ * import assert from 'node:assert/strict';
+ *
+ * assert.doesNotMatch('I will fail', /fail/);
+ * // AssertionError [ERR_ASSERTION]: The input was expected to not match the ...
+ *
+ * assert.doesNotMatch(123, /pass/);
+ * // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
+ *
+ * assert.doesNotMatch('I will pass', /different/);
+ * // OK
+ * ```
+ *
+ * If the values do match, or if the `string` argument is of another type than `string`, an `{@link AssertionError}` is thrown with a `message` property set equal
+ * to the value of the `message` parameter. If the `message` parameter is
+ * undefined, a default error message is assigned. If the `message` parameter is an
+ * instance of an [Error](https://nodejs.org/docs/latest-v25.x/api/errors.html#class-error) then it will be thrown instead of the `{@link AssertionError}`.
+ * @since v13.6.0, v12.16.0
+ */
+ function doesNotMatch(value: string, regExp: RegExp, message?: string | Error): void;
+ /**
+ * Tests for partial deep equality between the `actual` and `expected` parameters.
+ * "Deep" equality means that the enumerable "own" properties of child objects
+ * are recursively evaluated also by the following rules. "Partial" equality means
+ * that only properties that exist on the `expected` parameter are going to be
+ * compared.
+ *
+ * This method always passes the same test cases as `assert.deepStrictEqual()`,
+ * behaving as a super set of it.
+ * @since v22.13.0
+ */
+ function partialDeepStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void;
+ }
+ namespace assert {
+ export { strict };
+ }
+ export = assert;
+}
+declare module "assert" {
+ import assert = require("node:assert");
+ export = assert;
+}
diff --git a/mqtt-backend/node_modules/@types/node/assert/strict.d.ts b/mqtt-backend/node_modules/@types/node/assert/strict.d.ts
new file mode 100644
index 0000000..7a9dcf5
--- /dev/null
+++ b/mqtt-backend/node_modules/@types/node/assert/strict.d.ts
@@ -0,0 +1,59 @@
+declare module "node:assert/strict" {
+ import {
+ Assert,
+ AssertionError,
+ AssertionErrorOptions,
+ AssertOptions,
+ AssertPredicate,
+ AssertStrict,
+ deepStrictEqual,
+ doesNotMatch,
+ doesNotReject,
+ doesNotThrow,
+ fail,
+ ifError,
+ match,
+ notDeepStrictEqual,
+ notStrictEqual,
+ ok,
+ partialDeepStrictEqual,
+ rejects,
+ strictEqual,
+ throws,
+ } from "node:assert";
+ function strict(value: unknown, message?: string | Error): asserts value;
+ namespace strict {
+ export {
+ Assert,
+ AssertionError,
+ AssertionErrorOptions,
+ AssertOptions,
+ AssertPredicate,
+ AssertStrict,
+ deepStrictEqual,
+ deepStrictEqual as deepEqual,
+ doesNotMatch,
+ doesNotReject,
+ doesNotThrow,
+ fail,
+ ifError,
+ match,
+ notDeepStrictEqual,
+ notDeepStrictEqual as notDeepEqual,
+ notStrictEqual,
+ notStrictEqual as notEqual,
+ ok,
+ partialDeepStrictEqual,
+ rejects,
+ strict,
+ strictEqual,
+ strictEqual as equal,
+ throws,
+ };
+ }
+ export = strict;
+}
+declare module "assert/strict" {
+ import strict = require("node:assert/strict");
+ export = strict;
+}
diff --git a/mqtt-backend/node_modules/@types/node/async_hooks.d.ts b/mqtt-backend/node_modules/@types/node/async_hooks.d.ts
new file mode 100644
index 0000000..bb82b8a
--- /dev/null
+++ b/mqtt-backend/node_modules/@types/node/async_hooks.d.ts
@@ -0,0 +1,603 @@
+declare module "node:async_hooks" {
+ /**
+ * ```js
+ * import { executionAsyncId } from 'node:async_hooks';
+ * import fs from 'node:fs';
+ *
+ * console.log(executionAsyncId()); // 1 - bootstrap
+ * const path = '.';
+ * fs.open(path, 'r', (err, fd) => {
+ * console.log(executionAsyncId()); // 6 - open()
+ * });
+ * ```
+ *
+ * The ID returned from `executionAsyncId()` is related to execution timing, not
+ * causality (which is covered by `triggerAsyncId()`):
+ *
+ * ```js
+ * const server = net.createServer((conn) => {
+ * // Returns the ID of the server, not of the new connection, because the
+ * // callback runs in the execution scope of the server's MakeCallback().
+ * async_hooks.executionAsyncId();
+ *
+ * }).listen(port, () => {
+ * // Returns the ID of a TickObject (process.nextTick()) because all
+ * // callbacks passed to .listen() are wrapped in a nextTick().
+ * async_hooks.executionAsyncId();
+ * });
+ * ```
+ *
+ * Promise contexts may not get precise `executionAsyncIds` by default.
+ * See the section on [promise execution tracking](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html#promise-execution-tracking).
+ * @since v8.1.0
+ * @return The `asyncId` of the current execution context. Useful to track when something calls.
+ */
+ function executionAsyncId(): number;
+ /**
+ * Resource objects returned by `executionAsyncResource()` are most often internal
+ * Node.js handle objects with undocumented APIs. Using any functions or properties
+ * on the object is likely to crash your application and should be avoided.
+ *
+ * Using `executionAsyncResource()` in the top-level execution context will
+ * return an empty object as there is no handle or request object to use,
+ * but having an object representing the top-level can be helpful.
+ *
+ * ```js
+ * import { open } from 'node:fs';
+ * import { executionAsyncId, executionAsyncResource } from 'node:async_hooks';
+ *
+ * console.log(executionAsyncId(), executionAsyncResource()); // 1 {}
+ * open(new URL(import.meta.url), 'r', (err, fd) => {
+ * console.log(executionAsyncId(), executionAsyncResource()); // 7 FSReqWrap
+ * });
+ * ```
+ *
+ * This can be used to implement continuation local storage without the
+ * use of a tracking `Map` to store the metadata:
+ *
+ * ```js
+ * import { createServer } from 'node:http';
+ * import {
+ * executionAsyncId,
+ * executionAsyncResource,
+ * createHook,
+ * } from 'node:async_hooks';
+ * const sym = Symbol('state'); // Private symbol to avoid pollution
+ *
+ * createHook({
+ * init(asyncId, type, triggerAsyncId, resource) {
+ * const cr = executionAsyncResource();
+ * if (cr) {
+ * resource[sym] = cr[sym];
+ * }
+ * },
+ * }).enable();
+ *
+ * const server = createServer((req, res) => {
+ * executionAsyncResource()[sym] = { state: req.url };
+ * setTimeout(function() {
+ * res.end(JSON.stringify(executionAsyncResource()[sym]));
+ * }, 100);
+ * }).listen(3000);
+ * ```
+ * @since v13.9.0, v12.17.0
+ * @return The resource representing the current execution. Useful to store data within the resource.
+ */
+ function executionAsyncResource(): object;
+ /**
+ * ```js
+ * const server = net.createServer((conn) => {
+ * // The resource that caused (or triggered) this callback to be called
+ * // was that of the new connection. Thus the return value of triggerAsyncId()
+ * // is the asyncId of "conn".
+ * async_hooks.triggerAsyncId();
+ *
+ * }).listen(port, () => {
+ * // Even though all callbacks passed to .listen() are wrapped in a nextTick()
+ * // the callback itself exists because the call to the server's .listen()
+ * // was made. So the return value would be the ID of the server.
+ * async_hooks.triggerAsyncId();
+ * });
+ * ```
+ *
+ * Promise contexts may not get valid `triggerAsyncId`s by default. See
+ * the section on [promise execution tracking](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html#promise-execution-tracking).
+ * @return The ID of the resource responsible for calling the callback that is currently being executed.
+ */
+ function triggerAsyncId(): number;
+ interface HookCallbacks {
+ /**
+ * The [`init` callback](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html#initasyncid-type-triggerasyncid-resource).
+ */
+ init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void;
+ /**
+ * The [`before` callback](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html#beforeasyncid).
+ */
+ before?(asyncId: number): void;
+ /**
+ * The [`after` callback](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html#afterasyncid).
+ */
+ after?(asyncId: number): void;
+ /**
+ * The [`promiseResolve` callback](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html#promiseresolveasyncid).
+ */
+ promiseResolve?(asyncId: number): void;
+ /**
+ * The [`destroy` callback](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html#destroyasyncid).
+ */
+ destroy?(asyncId: number): void;
+ /**
+ * Whether the hook should track `Promise`s. Cannot be `false` if
+ * `promiseResolve` is set.
+ * @default true
+ */
+ trackPromises?: boolean | undefined;
+ }
+ interface AsyncHook {
+ /**
+ * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop.
+ */
+ enable(): this;
+ /**
+ * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled.
+ */
+ disable(): this;
+ }
+ /**
+ * Registers functions to be called for different lifetime events of each async
+ * operation.
+ *
+ * The callbacks `init()`/`before()`/`after()`/`destroy()` are called for the
+ * respective asynchronous event during a resource's lifetime.
+ *
+ * All callbacks are optional. For example, if only resource cleanup needs to
+ * be tracked, then only the `destroy` callback needs to be passed. The
+ * specifics of all functions that can be passed to `callbacks` is in the
+ * [Hook Callbacks](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html#hook-callbacks) section.
+ *
+ * ```js
+ * import { createHook } from 'node:async_hooks';
+ *
+ * const asyncHook = createHook({
+ * init(asyncId, type, triggerAsyncId, resource) { },
+ * destroy(asyncId) { },
+ * });
+ * ```
+ *
+ * The callbacks will be inherited via the prototype chain:
+ *
+ * ```js
+ * class MyAsyncCallbacks {
+ * init(asyncId, type, triggerAsyncId, resource) { }
+ * destroy(asyncId) {}
+ * }
+ *
+ * class MyAddedCallbacks extends MyAsyncCallbacks {
+ * before(asyncId) { }
+ * after(asyncId) { }
+ * }
+ *
+ * const asyncHook = async_hooks.createHook(new MyAddedCallbacks());
+ * ```
+ *
+ * Because promises are asynchronous resources whose lifecycle is tracked
+ * via the async hooks mechanism, the `init()`, `before()`, `after()`, and
+ * `destroy()` callbacks _must not_ be async functions that return promises.
+ * @since v8.1.0
+ * @param options The [Hook Callbacks](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html#hook-callbacks) to register
+ * @returns Instance used for disabling and enabling hooks
+ */
+ function createHook(options: HookCallbacks): AsyncHook;
+ interface AsyncResourceOptions {
+ /**
+ * The ID of the execution context that created this async event.
+ * @default executionAsyncId()
+ */
+ triggerAsyncId?: number | undefined;
+ /**
+ * Disables automatic `emitDestroy` when the object is garbage collected.
+ * This usually does not need to be set (even if `emitDestroy` is called
+ * manually), unless the resource's `asyncId` is retrieved and the
+ * sensitive API's `emitDestroy` is called with it.
+ * @default false
+ */
+ requireManualDestroy?: boolean | undefined;
+ }
+ /**
+ * The class `AsyncResource` is designed to be extended by the embedder's async
+ * resources. Using this, users can easily trigger the lifetime events of their
+ * own resources.
+ *
+ * The `init` hook will trigger when an `AsyncResource` is instantiated.
+ *
+ * The following is an overview of the `AsyncResource` API.
+ *
+ * ```js
+ * import { AsyncResource, executionAsyncId } from 'node:async_hooks';
+ *
+ * // AsyncResource() is meant to be extended. Instantiating a
+ * // new AsyncResource() also triggers init. If triggerAsyncId is omitted then
+ * // async_hook.executionAsyncId() is used.
+ * const asyncResource = new AsyncResource(
+ * type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false },
+ * );
+ *
+ * // Run a function in the execution context of the resource. This will
+ * // * establish the context of the resource
+ * // * trigger the AsyncHooks before callbacks
+ * // * call the provided function `fn` with the supplied arguments
+ * // * trigger the AsyncHooks after callbacks
+ * // * restore the original execution context
+ * asyncResource.runInAsyncScope(fn, thisArg, ...args);
+ *
+ * // Call AsyncHooks destroy callbacks.
+ * asyncResource.emitDestroy();
+ *
+ * // Return the unique ID assigned to the AsyncResource instance.
+ * asyncResource.asyncId();
+ *
+ * // Return the trigger ID for the AsyncResource instance.
+ * asyncResource.triggerAsyncId();
+ * ```
+ */
+ class AsyncResource {
+ /**
+ * AsyncResource() is meant to be extended. Instantiating a
+ * new AsyncResource() also triggers init. If triggerAsyncId is omitted then
+ * async_hook.executionAsyncId() is used.
+ * @param type The type of async event.
+ * @param triggerAsyncId The ID of the execution context that created
+ * this async event (default: `executionAsyncId()`), or an
+ * AsyncResourceOptions object (since v9.3.0)
+ */
+ constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions);
+ /**
+ * Binds the given function to the current execution context.
+ * @since v14.8.0, v12.19.0
+ * @param fn The function to bind to the current execution context.
+ * @param type An optional name to associate with the underlying `AsyncResource`.
+ */
+ static bind any, ThisArg>(
+ fn: Func,
+ type?: string,
+ thisArg?: ThisArg,
+ ): Func;
+ /**
+ * Binds the given function to execute to this `AsyncResource`'s scope.
+ * @since v14.8.0, v12.19.0
+ * @param fn The function to bind to the current `AsyncResource`.
+ */
+ bind any>(fn: Func): Func;
+ /**
+ * Call the provided function with the provided arguments in the execution context
+ * of the async resource. This will establish the context, trigger the AsyncHooks
+ * before callbacks, call the function, trigger the AsyncHooks after callbacks, and
+ * then restore the original execution context.
+ * @since v9.6.0
+ * @param fn The function to call in the execution context of this async resource.
+ * @param thisArg The receiver to be used for the function call.
+ * @param args Optional arguments to pass to the function.
+ */
+ runInAsyncScope(
+ fn: (this: This, ...args: any[]) => Result,
+ thisArg?: This,
+ ...args: any[]
+ ): Result;
+ /**
+ * Call all `destroy` hooks. This should only ever be called once. An error will
+ * be thrown if it is called more than once. This **must** be manually called. If
+ * the resource is left to be collected by the GC then the `destroy` hooks will
+ * never be called.
+ * @return A reference to `asyncResource`.
+ */
+ emitDestroy(): this;
+ /**
+ * @return The unique `asyncId` assigned to the resource.
+ */
+ asyncId(): number;
+ /**
+ * @return The same `triggerAsyncId` that is passed to the `AsyncResource` constructor.
+ */
+ triggerAsyncId(): number;
+ }
+ interface AsyncLocalStorageOptions {
+ /**
+ * The default value to be used when no store is provided.
+ */
+ defaultValue?: any;
+ /**
+ * A name for the `AsyncLocalStorage` value.
+ */
+ name?: string | undefined;
+ }
+ /**
+ * This class creates stores that stay coherent through asynchronous operations.
+ *
+ * While you can create your own implementation on top of the `node:async_hooks` module, `AsyncLocalStorage` should be preferred as it is a performant and memory
+ * safe implementation that involves significant optimizations that are non-obvious
+ * to implement.
+ *
+ * The following example uses `AsyncLocalStorage` to build a simple logger
+ * that assigns IDs to incoming HTTP requests and includes them in messages
+ * logged within each request.
+ *
+ * ```js
+ * import http from 'node:http';
+ * import { AsyncLocalStorage } from 'node:async_hooks';
+ *
+ * const asyncLocalStorage = new AsyncLocalStorage();
+ *
+ * function logWithId(msg) {
+ * const id = asyncLocalStorage.getStore();
+ * console.log(`${id !== undefined ? id : '-'}:`, msg);
+ * }
+ *
+ * let idSeq = 0;
+ * http.createServer((req, res) => {
+ * asyncLocalStorage.run(idSeq++, () => {
+ * logWithId('start');
+ * // Imagine any chain of async operations here
+ * setImmediate(() => {
+ * logWithId('finish');
+ * res.end();
+ * });
+ * });
+ * }).listen(8080);
+ *
+ * http.get('http://localhost:8080');
+ * http.get('http://localhost:8080');
+ * // Prints:
+ * // 0: start
+ * // 0: finish
+ * // 1: start
+ * // 1: finish
+ * ```
+ *
+ * Each instance of `AsyncLocalStorage` maintains an independent storage context.
+ * Multiple instances can safely exist simultaneously without risk of interfering
+ * with each other's data.
+ * @since v13.10.0, v12.17.0
+ */
+ class AsyncLocalStorage {
+ /**
+ * Creates a new instance of `AsyncLocalStorage`. Store is only provided within a
+ * `run()` call or after an `enterWith()` call.
+ */
+ constructor(options?: AsyncLocalStorageOptions);
+ /**
+ * Binds the given function to the current execution context.
+ * @since v19.8.0
+ * @param fn The function to bind to the current execution context.
+ * @return A new function that calls `fn` within the captured execution context.
+ */
+ static bind any>(fn: Func): Func;
+ /**
+ * Captures the current execution context and returns a function that accepts a
+ * function as an argument. Whenever the returned function is called, it
+ * calls the function passed to it within the captured context.
+ *
+ * ```js
+ * const asyncLocalStorage = new AsyncLocalStorage();
+ * const runInAsyncScope = asyncLocalStorage.run(123, () => AsyncLocalStorage.snapshot());
+ * const result = asyncLocalStorage.run(321, () => runInAsyncScope(() => asyncLocalStorage.getStore()));
+ * console.log(result); // returns 123
+ * ```
+ *
+ * AsyncLocalStorage.snapshot() can replace the use of AsyncResource for simple
+ * async context tracking purposes, for example:
+ *
+ * ```js
+ * class Foo {
+ * #runInAsyncScope = AsyncLocalStorage.snapshot();
+ *
+ * get() { return this.#runInAsyncScope(() => asyncLocalStorage.getStore()); }
+ * }
+ *
+ * const foo = asyncLocalStorage.run(123, () => new Foo());
+ * console.log(asyncLocalStorage.run(321, () => foo.get())); // returns 123
+ * ```
+ * @since v19.8.0
+ * @return A new function with the signature `(fn: (...args) : R, ...args) : R`.
+ */
+ static snapshot(): (fn: (...args: TArgs) => R, ...args: TArgs) => R;
+ /**
+ * Disables the instance of `AsyncLocalStorage`. All subsequent calls
+ * to `asyncLocalStorage.getStore()` will return `undefined` until `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()` is called again.
+ *
+ * When calling `asyncLocalStorage.disable()`, all current contexts linked to the
+ * instance will be exited.
+ *
+ * Calling `asyncLocalStorage.disable()` is required before the `asyncLocalStorage` can be garbage collected. This does not apply to stores
+ * provided by the `asyncLocalStorage`, as those objects are garbage collected
+ * along with the corresponding async resources.
+ *
+ * Use this method when the `asyncLocalStorage` is not in use anymore
+ * in the current process.
+ * @since v13.10.0, v12.17.0
+ * @experimental
+ */
+ disable(): void;
+ /**
+ * Returns the current store.
+ * If called outside of an asynchronous context initialized by
+ * calling `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()`, it
+ * returns `undefined`.
+ * @since v13.10.0, v12.17.0
+ */
+ getStore(): T | undefined;
+ /**
+ * The name of the `AsyncLocalStorage` instance if provided.
+ * @since v24.0.0
+ */
+ readonly name: string;
+ /**
+ * Runs a function synchronously within a context and returns its
+ * return value. The store is not accessible outside of the callback function.
+ * The store is accessible to any asynchronous operations created within the
+ * callback.
+ *
+ * The optional `args` are passed to the callback function.
+ *
+ * If the callback function throws an error, the error is thrown by `run()` too.
+ * The stacktrace is not impacted by this call and the context is exited.
+ *
+ * Example:
+ *
+ * ```js
+ * const store = { id: 2 };
+ * try {
+ * asyncLocalStorage.run(store, () => {
+ * asyncLocalStorage.getStore(); // Returns the store object
+ * setTimeout(() => {
+ * asyncLocalStorage.getStore(); // Returns the store object
+ * }, 200);
+ * throw new Error();
+ * });
+ * } catch (e) {
+ * asyncLocalStorage.getStore(); // Returns undefined
+ * // The error will be caught here
+ * }
+ * ```
+ * @since v13.10.0, v12.17.0
+ */
+ run(store: T, callback: () => R): R;
+ run(store: T, callback: (...args: TArgs) => R, ...args: TArgs): R;
+ /**
+ * Runs a function synchronously outside of a context and returns its
+ * return value. The store is not accessible within the callback function or
+ * the asynchronous operations created within the callback. Any `getStore()` call done within the callback function will always return `undefined`.
+ *
+ * The optional `args` are passed to the callback function.
+ *
+ * If the callback function throws an error, the error is thrown by `exit()` too.
+ * The stacktrace is not impacted by this call and the context is re-entered.
+ *
+ * Example:
+ *
+ * ```js
+ * // Within a call to run
+ * try {
+ * asyncLocalStorage.getStore(); // Returns the store object or value
+ * asyncLocalStorage.exit(() => {
+ * asyncLocalStorage.getStore(); // Returns undefined
+ * throw new Error();
+ * });
+ * } catch (e) {
+ * asyncLocalStorage.getStore(); // Returns the same object or value
+ * // The error will be caught here
+ * }
+ * ```
+ * @since v13.10.0, v12.17.0
+ * @experimental
+ */
+ exit(callback: (...args: TArgs) => R, ...args: TArgs): R;
+ /**
+ * Transitions into the context for the remainder of the current
+ * synchronous execution and then persists the store through any following
+ * asynchronous calls.
+ *
+ * Example:
+ *
+ * ```js
+ * const store = { id: 1 };
+ * // Replaces previous store with the given store object
+ * asyncLocalStorage.enterWith(store);
+ * asyncLocalStorage.getStore(); // Returns the store object
+ * someAsyncOperation(() => {
+ * asyncLocalStorage.getStore(); // Returns the same object
+ * });
+ * ```
+ *
+ * This transition will continue for the _entire_ synchronous execution.
+ * This means that if, for example, the context is entered within an event
+ * handler subsequent event handlers will also run within that context unless
+ * specifically bound to another context with an `AsyncResource`. That is why `run()` should be preferred over `enterWith()` unless there are strong reasons
+ * to use the latter method.
+ *
+ * ```js
+ * const store = { id: 1 };
+ *
+ * emitter.on('my-event', () => {
+ * asyncLocalStorage.enterWith(store);
+ * });
+ * emitter.on('my-event', () => {
+ * asyncLocalStorage.getStore(); // Returns the same object
+ * });
+ *
+ * asyncLocalStorage.getStore(); // Returns undefined
+ * emitter.emit('my-event');
+ * asyncLocalStorage.getStore(); // Returns the same object
+ * ```
+ * @since v13.11.0, v12.17.0
+ * @experimental
+ */
+ enterWith(store: T): void;
+ }
+ /**
+ * @since v17.2.0, v16.14.0
+ * @return A map of provider types to the corresponding numeric id.
+ * This map contains all the event types that might be emitted by the `async_hooks.init()` event.
+ */
+ namespace asyncWrapProviders {
+ const NONE: number;
+ const DIRHANDLE: number;
+ const DNSCHANNEL: number;
+ const ELDHISTOGRAM: number;
+ const FILEHANDLE: number;
+ const FILEHANDLECLOSEREQ: number;
+ const FIXEDSIZEBLOBCOPY: number;
+ const FSEVENTWRAP: number;
+ const FSREQCALLBACK: number;
+ const FSREQPROMISE: number;
+ const GETADDRINFOREQWRAP: number;
+ const GETNAMEINFOREQWRAP: number;
+ const HEAPSNAPSHOT: number;
+ const HTTP2SESSION: number;
+ const HTTP2STREAM: number;
+ const HTTP2PING: number;
+ const HTTP2SETTINGS: number;
+ const HTTPINCOMINGMESSAGE: number;
+ const HTTPCLIENTREQUEST: number;
+ const JSSTREAM: number;
+ const JSUDPWRAP: number;
+ const MESSAGEPORT: number;
+ const PIPECONNECTWRAP: number;
+ const PIPESERVERWRAP: number;
+ const PIPEWRAP: number;
+ const PROCESSWRAP: number;
+ const PROMISE: number;
+ const QUERYWRAP: number;
+ const SHUTDOWNWRAP: number;
+ const SIGNALWRAP: number;
+ const STATWATCHER: number;
+ const STREAMPIPE: number;
+ const TCPCONNECTWRAP: number;
+ const TCPSERVERWRAP: number;
+ const TCPWRAP: number;
+ const TTYWRAP: number;
+ const UDPSENDWRAP: number;
+ const UDPWRAP: number;
+ const SIGINTWATCHDOG: number;
+ const WORKER: number;
+ const WORKERHEAPSNAPSHOT: number;
+ const WRITEWRAP: number;
+ const ZLIB: number;
+ const CHECKPRIMEREQUEST: number;
+ const PBKDF2REQUEST: number;
+ const KEYPAIRGENREQUEST: number;
+ const KEYGENREQUEST: number;
+ const KEYEXPORTREQUEST: number;
+ const CIPHERREQUEST: number;
+ const DERIVEBITSREQUEST: number;
+ const HASHREQUEST: number;
+ const RANDOMBYTESREQUEST: number;
+ const RANDOMPRIMEREQUEST: number;
+ const SCRYPTREQUEST: number;
+ const SIGNREQUEST: number;
+ const TLSWRAP: number;
+ const VERIFYREQUEST: number;
+ }
+}
+declare module "async_hooks" {
+ export * from "node:async_hooks";
+}
diff --git a/mqtt-backend/node_modules/@types/node/buffer.buffer.d.ts b/mqtt-backend/node_modules/@types/node/buffer.buffer.d.ts
new file mode 100644
index 0000000..a6c4b25
--- /dev/null
+++ b/mqtt-backend/node_modules/@types/node/buffer.buffer.d.ts
@@ -0,0 +1,466 @@
+declare module "node:buffer" {
+ type ImplicitArrayBuffer> = T extends
+ { valueOf(): infer V extends ArrayBufferLike } ? V : T;
+ global {
+ interface BufferConstructor {
+ // see buffer.d.ts for implementation shared with all TypeScript versions
+
+ /**
+ * Allocates a new buffer containing the given {str}.
+ *
+ * @param str String to store in buffer.
+ * @param encoding encoding to use, optional. Default is 'utf8'
+ * @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead.
+ */
+ new(str: string, encoding?: BufferEncoding): Buffer;
+ /**
+ * Allocates a new buffer of {size} octets.
+ *
+ * @param size count of octets to allocate.
+ * @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`).
+ */
+ new(size: number): Buffer;
+ /**
+ * Allocates a new buffer containing the given {array} of octets.
+ *
+ * @param array The octets to store.
+ * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead.
+ */
+ new(array: ArrayLike): Buffer;
+ /**
+ * Produces a Buffer backed by the same allocated memory as
+ * the given {ArrayBuffer}/{SharedArrayBuffer}.
+ *
+ * @param arrayBuffer The ArrayBuffer with which to share memory.
+ * @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead.
+ */
+ new(arrayBuffer: TArrayBuffer): Buffer;
+ /**
+ * Allocates a new `Buffer` using an `array` of bytes in the range `0` – `255`.
+ * Array entries outside that range will be truncated to fit into it.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'.
+ * const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
+ * ```
+ *
+ * If `array` is an `Array`-like object (that is, one with a `length` property of
+ * type `number`), it is treated as if it is an array, unless it is a `Buffer` or
+ * a `Uint8Array`. This means all other `TypedArray` variants get treated as an
+ * `Array`. To create a `Buffer` from the bytes backing a `TypedArray`, use
+ * `Buffer.copyBytesFrom()`.
+ *
+ * A `TypeError` will be thrown if `array` is not an `Array` or another type
+ * appropriate for `Buffer.from()` variants.
+ *
+ * `Buffer.from(array)` and `Buffer.from(string)` may also use the internal
+ * `Buffer` pool like `Buffer.allocUnsafe()` does.
+ * @since v5.10.0
+ */
+ from(array: WithImplicitCoercion>): Buffer;
+ /**
+ * This creates a view of the `ArrayBuffer` without copying the underlying
+ * memory. For example, when passed a reference to the `.buffer` property of a
+ * `TypedArray` instance, the newly created `Buffer` will share the same
+ * allocated memory as the `TypedArray`'s underlying `ArrayBuffer`.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const arr = new Uint16Array(2);
+ *
+ * arr[0] = 5000;
+ * arr[1] = 4000;
+ *
+ * // Shares memory with `arr`.
+ * const buf = Buffer.from(arr.buffer);
+ *
+ * console.log(buf);
+ * // Prints:
+ *
+ * // Changing the original Uint16Array changes the Buffer also.
+ * arr[1] = 6000;
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ *
+ * The optional `byteOffset` and `length` arguments specify a memory range within
+ * the `arrayBuffer` that will be shared by the `Buffer`.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const ab = new ArrayBuffer(10);
+ * const buf = Buffer.from(ab, 0, 2);
+ *
+ * console.log(buf.length);
+ * // Prints: 2
+ * ```
+ *
+ * A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer` or a
+ * `SharedArrayBuffer` or another type appropriate for `Buffer.from()`
+ * variants.
+ *
+ * It is important to remember that a backing `ArrayBuffer` can cover a range
+ * of memory that extends beyond the bounds of a `TypedArray` view. A new
+ * `Buffer` created using the `buffer` property of a `TypedArray` may extend
+ * beyond the range of the `TypedArray`:
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const arrA = Uint8Array.from([0x63, 0x64, 0x65, 0x66]); // 4 elements
+ * const arrB = new Uint8Array(arrA.buffer, 1, 2); // 2 elements
+ * console.log(arrA.buffer === arrB.buffer); // true
+ *
+ * const buf = Buffer.from(arrB.buffer);
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v5.10.0
+ * @param arrayBuffer An `ArrayBuffer`, `SharedArrayBuffer`, for example the
+ * `.buffer` property of a `TypedArray`.
+ * @param byteOffset Index of first byte to expose. **Default:** `0`.
+ * @param length Number of bytes to expose. **Default:**
+ * `arrayBuffer.byteLength - byteOffset`.
+ */
+ from>(
+ arrayBuffer: TArrayBuffer,
+ byteOffset?: number,
+ length?: number,
+ ): Buffer>;
+ /**
+ * Creates a new `Buffer` containing `string`. The `encoding` parameter identifies
+ * the character encoding to be used when converting `string` into bytes.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf1 = Buffer.from('this is a tést');
+ * const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');
+ *
+ * console.log(buf1.toString());
+ * // Prints: this is a tést
+ * console.log(buf2.toString());
+ * // Prints: this is a tést
+ * console.log(buf1.toString('latin1'));
+ * // Prints: this is a tést
+ * ```
+ *
+ * A `TypeError` will be thrown if `string` is not a string or another type
+ * appropriate for `Buffer.from()` variants.
+ *
+ * `Buffer.from(string)` may also use the internal `Buffer` pool like
+ * `Buffer.allocUnsafe()` does.
+ * @since v5.10.0
+ * @param string A string to encode.
+ * @param encoding The encoding of `string`. **Default:** `'utf8'`.
+ */
+ from(string: WithImplicitCoercion, encoding?: BufferEncoding): Buffer;
+ from(arrayOrString: WithImplicitCoercion | string>): Buffer;
+ /**
+ * Creates a new Buffer using the passed {data}
+ * @param values to create a new Buffer
+ */
+ of(...items: number[]): Buffer;
+ /**
+ * Returns a new `Buffer` which is the result of concatenating all the `Buffer` instances in the `list` together.
+ *
+ * If the list has no items, or if the `totalLength` is 0, then a new zero-length `Buffer` is returned.
+ *
+ * If `totalLength` is not provided, it is calculated from the `Buffer` instances
+ * in `list` by adding their lengths.
+ *
+ * If `totalLength` is provided, it must be an unsigned integer. If the
+ * combined length of the `Buffer`s in `list` exceeds `totalLength`, the result is
+ * truncated to `totalLength`. If the combined length of the `Buffer`s in `list` is
+ * less than `totalLength`, the remaining space is filled with zeros.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * // Create a single `Buffer` from a list of three `Buffer` instances.
+ *
+ * const buf1 = Buffer.alloc(10);
+ * const buf2 = Buffer.alloc(14);
+ * const buf3 = Buffer.alloc(18);
+ * const totalLength = buf1.length + buf2.length + buf3.length;
+ *
+ * console.log(totalLength);
+ * // Prints: 42
+ *
+ * const bufA = Buffer.concat([buf1, buf2, buf3], totalLength);
+ *
+ * console.log(bufA);
+ * // Prints:
+ * console.log(bufA.length);
+ * // Prints: 42
+ * ```
+ *
+ * `Buffer.concat()` may also use the internal `Buffer` pool like `Buffer.allocUnsafe()` does.
+ * @since v0.7.11
+ * @param list List of `Buffer` or {@link Uint8Array} instances to concatenate.
+ * @param totalLength Total length of the `Buffer` instances in `list` when concatenated.
+ */
+ concat(list: readonly Uint8Array[], totalLength?: number): Buffer;
+ /**
+ * Copies the underlying memory of `view` into a new `Buffer`.
+ *
+ * ```js
+ * const u16 = new Uint16Array([0, 0xffff]);
+ * const buf = Buffer.copyBytesFrom(u16, 1, 1);
+ * u16[1] = 0;
+ * console.log(buf.length); // 2
+ * console.log(buf[0]); // 255
+ * console.log(buf[1]); // 255
+ * ```
+ * @since v19.8.0
+ * @param view The {TypedArray} to copy.
+ * @param [offset=0] The starting offset within `view`.
+ * @param [length=view.length - offset] The number of elements from `view` to copy.
+ */
+ copyBytesFrom(view: NodeJS.TypedArray, offset?: number, length?: number): Buffer;
+ /**
+ * Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the`Buffer` will be zero-filled.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.alloc(5);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ *
+ * If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown.
+ *
+ * If `fill` is specified, the allocated `Buffer` will be initialized by calling `buf.fill(fill)`.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.alloc(5, 'a');
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ *
+ * If both `fill` and `encoding` are specified, the allocated `Buffer` will be
+ * initialized by calling `buf.fill(fill, encoding)`.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ *
+ * Calling `Buffer.alloc()` can be measurably slower than the alternative `Buffer.allocUnsafe()` but ensures that the newly created `Buffer` instance
+ * contents will never contain sensitive data from previous allocations, including
+ * data that might not have been allocated for `Buffer`s.
+ *
+ * A `TypeError` will be thrown if `size` is not a number.
+ * @since v5.10.0
+ * @param size The desired length of the new `Buffer`.
+ * @param [fill=0] A value to pre-fill the new `Buffer` with.
+ * @param [encoding='utf8'] If `fill` is a string, this is its encoding.
+ */
+ alloc(size: number, fill?: string | Uint8Array | number, encoding?: BufferEncoding): Buffer;
+ /**
+ * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown.
+ *
+ * The underlying memory for `Buffer` instances created in this way is _not_
+ * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `Buffer.alloc()` instead to initialize`Buffer` instances with zeroes.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(10);
+ *
+ * console.log(buf);
+ * // Prints (contents may vary):
+ *
+ * buf.fill(0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ *
+ * A `TypeError` will be thrown if `size` is not a number.
+ *
+ * The `Buffer` module pre-allocates an internal `Buffer` instance of
+ * size `Buffer.poolSize` that is used as a pool for the fast allocation of new `Buffer` instances created using `Buffer.allocUnsafe()`, `Buffer.from(array)`,
+ * and `Buffer.concat()` only when `size` is less than `Buffer.poolSize >>> 1` (floor of `Buffer.poolSize` divided by two).
+ *
+ * Use of this pre-allocated internal memory pool is a key difference between
+ * calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`.
+ * Specifically, `Buffer.alloc(size, fill)` will _never_ use the internal `Buffer`pool, while `Buffer.allocUnsafe(size).fill(fill)`_will_ use the internal`Buffer` pool if `size` is less
+ * than or equal to half `Buffer.poolSize`. The
+ * difference is subtle but can be important when an application requires the
+ * additional performance that `Buffer.allocUnsafe()` provides.
+ * @since v5.10.0
+ * @param size The desired length of the new `Buffer`.
+ */
+ allocUnsafe(size: number): Buffer;
+ /**
+ * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. A zero-length `Buffer` is created if
+ * `size` is 0.
+ *
+ * The underlying memory for `Buffer` instances created in this way is _not_
+ * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `buf.fill(0)` to initialize
+ * such `Buffer` instances with zeroes.
+ *
+ * When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances,
+ * allocations under 4 KiB are sliced from a single pre-allocated `Buffer`. This
+ * allows applications to avoid the garbage collection overhead of creating many
+ * individually allocated `Buffer` instances. This approach improves both
+ * performance and memory usage by eliminating the need to track and clean up as
+ * many individual `ArrayBuffer` objects.
+ *
+ * However, in the case where a developer may need to retain a small chunk of
+ * memory from a pool for an indeterminate amount of time, it may be appropriate
+ * to create an un-pooled `Buffer` instance using `Buffer.allocUnsafeSlow()` and
+ * then copying out the relevant bits.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * // Need to keep around a few small chunks of memory.
+ * const store = [];
+ *
+ * socket.on('readable', () => {
+ * let data;
+ * while (null !== (data = readable.read())) {
+ * // Allocate for retained data.
+ * const sb = Buffer.allocUnsafeSlow(10);
+ *
+ * // Copy the data into the new allocation.
+ * data.copy(sb, 0, 0, 10);
+ *
+ * store.push(sb);
+ * }
+ * });
+ * ```
+ *
+ * A `TypeError` will be thrown if `size` is not a number.
+ * @since v5.12.0
+ * @param size The desired length of the new `Buffer`.
+ */
+ allocUnsafeSlow(size: number): Buffer;
+ }
+ interface Buffer extends Uint8Array {
+ // see buffer.d.ts for implementation shared with all TypeScript versions
+
+ /**
+ * Returns a new `Buffer` that references the same memory as the original, but
+ * offset and cropped by the `start` and `end` indices.
+ *
+ * This method is not compatible with the `Uint8Array.prototype.slice()`,
+ * which is a superclass of `Buffer`. To copy the slice, use`Uint8Array.prototype.slice()`.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from('buffer');
+ *
+ * const copiedBuf = Uint8Array.prototype.slice.call(buf);
+ * copiedBuf[0]++;
+ * console.log(copiedBuf.toString());
+ * // Prints: cuffer
+ *
+ * console.log(buf.toString());
+ * // Prints: buffer
+ *
+ * // With buf.slice(), the original buffer is modified.
+ * const notReallyCopiedBuf = buf.slice();
+ * notReallyCopiedBuf[0]++;
+ * console.log(notReallyCopiedBuf.toString());
+ * // Prints: cuffer
+ * console.log(buf.toString());
+ * // Also prints: cuffer (!)
+ * ```
+ * @since v0.3.0
+ * @deprecated Use `subarray` instead.
+ * @param [start=0] Where the new `Buffer` will start.
+ * @param [end=buf.length] Where the new `Buffer` will end (not inclusive).
+ */
+ slice(start?: number, end?: number): Buffer;
+ /**
+ * Returns a new `Buffer` that references the same memory as the original, but
+ * offset and cropped by the `start` and `end` indices.
+ *
+ * Specifying `end` greater than `buf.length` will return the same result as
+ * that of `end` equal to `buf.length`.
+ *
+ * This method is inherited from [`TypedArray.prototype.subarray()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray).
+ *
+ * Modifying the new `Buffer` slice will modify the memory in the original `Buffer`because the allocated memory of the two objects overlap.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * // Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte
+ * // from the original `Buffer`.
+ *
+ * const buf1 = Buffer.allocUnsafe(26);
+ *
+ * for (let i = 0; i < 26; i++) {
+ * // 97 is the decimal ASCII value for 'a'.
+ * buf1[i] = i + 97;
+ * }
+ *
+ * const buf2 = buf1.subarray(0, 3);
+ *
+ * console.log(buf2.toString('ascii', 0, buf2.length));
+ * // Prints: abc
+ *
+ * buf1[0] = 33;
+ *
+ * console.log(buf2.toString('ascii', 0, buf2.length));
+ * // Prints: !bc
+ * ```
+ *
+ * Specifying negative indexes causes the slice to be generated relative to the
+ * end of `buf` rather than the beginning.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from('buffer');
+ *
+ * console.log(buf.subarray(-6, -1).toString());
+ * // Prints: buffe
+ * // (Equivalent to buf.subarray(0, 5).)
+ *
+ * console.log(buf.subarray(-6, -2).toString());
+ * // Prints: buff
+ * // (Equivalent to buf.subarray(0, 4).)
+ *
+ * console.log(buf.subarray(-5, -2).toString());
+ * // Prints: uff
+ * // (Equivalent to buf.subarray(1, 4).)
+ * ```
+ * @since v3.0.0
+ * @param [start=0] Where the new `Buffer` will start.
+ * @param [end=buf.length] Where the new `Buffer` will end (not inclusive).
+ */
+ subarray(start?: number, end?: number): Buffer;
+ }
+ // TODO: remove globals in future version
+ /**
+ * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports
+ * TypeScript versions earlier than 5.7.
+ */
+ type NonSharedBuffer = Buffer;
+ /**
+ * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports
+ * TypeScript versions earlier than 5.7.
+ */
+ type AllowSharedBuffer = Buffer;
+ }
+}
diff --git a/mqtt-backend/node_modules/@types/node/buffer.d.ts b/mqtt-backend/node_modules/@types/node/buffer.d.ts
new file mode 100644
index 0000000..7cff31f
--- /dev/null
+++ b/mqtt-backend/node_modules/@types/node/buffer.d.ts
@@ -0,0 +1,1765 @@
+declare module "node:buffer" {
+ import { ReadableStream } from "node:stream/web";
+ /**
+ * This function returns `true` if `input` contains only valid UTF-8-encoded data,
+ * including the case in which `input` is empty.
+ *
+ * Throws if the `input` is a detached array buffer.
+ * @since v19.4.0, v18.14.0
+ * @param input The input to validate.
+ */
+ export function isUtf8(input: ArrayBuffer | NodeJS.TypedArray): boolean;
+ /**
+ * This function returns `true` if `input` contains only valid ASCII-encoded data,
+ * including the case in which `input` is empty.
+ *
+ * Throws if the `input` is a detached array buffer.
+ * @since v19.6.0, v18.15.0
+ * @param input The input to validate.
+ */
+ export function isAscii(input: ArrayBuffer | NodeJS.TypedArray): boolean;
+ export let INSPECT_MAX_BYTES: number;
+ export const kMaxLength: number;
+ export const kStringMaxLength: number;
+ export const constants: {
+ MAX_LENGTH: number;
+ MAX_STRING_LENGTH: number;
+ };
+ export type TranscodeEncoding =
+ | "ascii"
+ | "utf8"
+ | "utf-8"
+ | "utf16le"
+ | "utf-16le"
+ | "ucs2"
+ | "ucs-2"
+ | "latin1"
+ | "binary";
+ /**
+ * Re-encodes the given `Buffer` or `Uint8Array` instance from one character
+ * encoding to another. Returns a new `Buffer` instance.
+ *
+ * Throws if the `fromEnc` or `toEnc` specify invalid character encodings or if
+ * conversion from `fromEnc` to `toEnc` is not permitted.
+ *
+ * Encodings supported by `buffer.transcode()` are: `'ascii'`, `'utf8'`, `'utf16le'`, `'ucs2'`, `'latin1'`, and `'binary'`.
+ *
+ * The transcoding process will use substitution characters if a given byte
+ * sequence cannot be adequately represented in the target encoding. For instance:
+ *
+ * ```js
+ * import { Buffer, transcode } from 'node:buffer';
+ *
+ * const newBuf = transcode(Buffer.from('€'), 'utf8', 'ascii');
+ * console.log(newBuf.toString('ascii'));
+ * // Prints: '?'
+ * ```
+ *
+ * Because the Euro (`€`) sign is not representable in US-ASCII, it is replaced
+ * with `?` in the transcoded `Buffer`.
+ * @since v7.1.0
+ * @param source A `Buffer` or `Uint8Array` instance.
+ * @param fromEnc The current encoding.
+ * @param toEnc To target encoding.
+ */
+ export function transcode(
+ source: Uint8Array,
+ fromEnc: TranscodeEncoding,
+ toEnc: TranscodeEncoding,
+ ): NonSharedBuffer;
+ /**
+ * Resolves a `'blob:nodedata:...'` an associated `Blob` object registered using
+ * a prior call to `URL.createObjectURL()`.
+ * @since v16.7.0
+ * @param id A `'blob:nodedata:...` URL string returned by a prior call to `URL.createObjectURL()`.
+ */
+ export function resolveObjectURL(id: string): Blob | undefined;
+ export { type AllowSharedBuffer, Buffer, type NonSharedBuffer };
+ /** @deprecated This alias will be removed in a future version. Use the canonical `BlobPropertyBag` instead. */
+ // TODO: remove in future major
+ export interface BlobOptions extends BlobPropertyBag {}
+ /** @deprecated This alias will be removed in a future version. Use the canonical `FilePropertyBag` instead. */
+ export interface FileOptions extends FilePropertyBag {}
+ export type WithImplicitCoercion =
+ | T
+ | { valueOf(): T }
+ | (T extends string ? { [Symbol.toPrimitive](hint: "string"): T } : never);
+ global {
+ namespace NodeJS {
+ export { BufferEncoding };
+ }
+ // Buffer class
+ type BufferEncoding =
+ | "ascii"
+ | "utf8"
+ | "utf-8"
+ | "utf16le"
+ | "utf-16le"
+ | "ucs2"
+ | "ucs-2"
+ | "base64"
+ | "base64url"
+ | "latin1"
+ | "binary"
+ | "hex";
+ /**
+ * Raw data is stored in instances of the Buffer class.
+ * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized.
+ * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'base64url'|'binary'(deprecated)|'hex'
+ */
+ interface BufferConstructor {
+ // see buffer.buffer.d.ts for implementation specific to TypeScript 5.7 and later
+ // see ts5.6/buffer.buffer.d.ts for implementation specific to TypeScript 5.6 and earlier
+
+ /**
+ * Returns `true` if `obj` is a `Buffer`, `false` otherwise.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * Buffer.isBuffer(Buffer.alloc(10)); // true
+ * Buffer.isBuffer(Buffer.from('foo')); // true
+ * Buffer.isBuffer('a string'); // false
+ * Buffer.isBuffer([]); // false
+ * Buffer.isBuffer(new Uint8Array(1024)); // false
+ * ```
+ * @since v0.1.101
+ */
+ isBuffer(obj: any): obj is Buffer;
+ /**
+ * Returns `true` if `encoding` is the name of a supported character encoding,
+ * or `false` otherwise.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * console.log(Buffer.isEncoding('utf8'));
+ * // Prints: true
+ *
+ * console.log(Buffer.isEncoding('hex'));
+ * // Prints: true
+ *
+ * console.log(Buffer.isEncoding('utf/8'));
+ * // Prints: false
+ *
+ * console.log(Buffer.isEncoding(''));
+ * // Prints: false
+ * ```
+ * @since v0.9.1
+ * @param encoding A character encoding name to check.
+ */
+ isEncoding(encoding: string): encoding is BufferEncoding;
+ /**
+ * Returns the byte length of a string when encoded using `encoding`.
+ * This is not the same as [`String.prototype.length`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length), which does not account
+ * for the encoding that is used to convert the string into bytes.
+ *
+ * For `'base64'`, `'base64url'`, and `'hex'`, this function assumes valid input.
+ * For strings that contain non-base64/hex-encoded data (e.g. whitespace), the
+ * return value might be greater than the length of a `Buffer` created from the
+ * string.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const str = '\u00bd + \u00bc = \u00be';
+ *
+ * console.log(`${str}: ${str.length} characters, ` +
+ * `${Buffer.byteLength(str, 'utf8')} bytes`);
+ * // Prints: ½ + ¼ = ¾: 9 characters, 12 bytes
+ * ```
+ *
+ * When `string` is a
+ * `Buffer`/[`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView)/[`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/-
+ * Reference/Global_Objects/TypedArray)/[`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)/[`SharedArrayBuffer`](https://develop-
+ * er.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer), the byte length as reported by `.byteLength`is returned.
+ * @since v0.1.90
+ * @param string A value to calculate the length of.
+ * @param [encoding='utf8'] If `string` is a string, this is its encoding.
+ * @return The number of bytes contained within `string`.
+ */
+ byteLength(
+ string: string | NodeJS.ArrayBufferView | ArrayBufferLike,
+ encoding?: BufferEncoding,
+ ): number;
+ /**
+ * Compares `buf1` to `buf2`, typically for the purpose of sorting arrays of `Buffer` instances. This is equivalent to calling `buf1.compare(buf2)`.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf1 = Buffer.from('1234');
+ * const buf2 = Buffer.from('0123');
+ * const arr = [buf1, buf2];
+ *
+ * console.log(arr.sort(Buffer.compare));
+ * // Prints: [ , ]
+ * // (This result is equal to: [buf2, buf1].)
+ * ```
+ * @since v0.11.13
+ * @return Either `-1`, `0`, or `1`, depending on the result of the comparison. See `compare` for details.
+ */
+ compare(buf1: Uint8Array, buf2: Uint8Array): -1 | 0 | 1;
+ /**
+ * This is the size (in bytes) of pre-allocated internal `Buffer` instances used
+ * for pooling. This value may be modified.
+ * @since v0.11.3
+ */
+ poolSize: number;
+ }
+ interface Buffer {
+ // see buffer.buffer.d.ts for implementation specific to TypeScript 5.7 and later
+ // see ts5.6/buffer.buffer.d.ts for implementation specific to TypeScript 5.6 and earlier
+
+ /**
+ * Writes `string` to `buf` at `offset` according to the character encoding in`encoding`. The `length` parameter is the number of bytes to write. If `buf` did
+ * not contain enough space to fit the entire string, only part of `string` will be
+ * written. However, partially encoded characters will not be written.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.alloc(256);
+ *
+ * const len = buf.write('\u00bd + \u00bc = \u00be', 0);
+ *
+ * console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`);
+ * // Prints: 12 bytes: ½ + ¼ = ¾
+ *
+ * const buffer = Buffer.alloc(10);
+ *
+ * const length = buffer.write('abcd', 8);
+ *
+ * console.log(`${length} bytes: ${buffer.toString('utf8', 8, 10)}`);
+ * // Prints: 2 bytes : ab
+ * ```
+ * @since v0.1.90
+ * @param string String to write to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write `string`.
+ * @param [length=buf.length - offset] Maximum number of bytes to write (written bytes will not exceed `buf.length - offset`).
+ * @param [encoding='utf8'] The character encoding of `string`.
+ * @return Number of bytes written.
+ */
+ write(string: string, encoding?: BufferEncoding): number;
+ write(string: string, offset: number, encoding?: BufferEncoding): number;
+ write(string: string, offset: number, length: number, encoding?: BufferEncoding): number;
+ /**
+ * Decodes `buf` to a string according to the specified character encoding in`encoding`. `start` and `end` may be passed to decode only a subset of `buf`.
+ *
+ * If `encoding` is `'utf8'` and a byte sequence in the input is not valid UTF-8,
+ * then each invalid byte is replaced with the replacement character `U+FFFD`.
+ *
+ * The maximum length of a string instance (in UTF-16 code units) is available
+ * as {@link constants.MAX_STRING_LENGTH}.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf1 = Buffer.allocUnsafe(26);
+ *
+ * for (let i = 0; i < 26; i++) {
+ * // 97 is the decimal ASCII value for 'a'.
+ * buf1[i] = i + 97;
+ * }
+ *
+ * console.log(buf1.toString('utf8'));
+ * // Prints: abcdefghijklmnopqrstuvwxyz
+ * console.log(buf1.toString('utf8', 0, 5));
+ * // Prints: abcde
+ *
+ * const buf2 = Buffer.from('tést');
+ *
+ * console.log(buf2.toString('hex'));
+ * // Prints: 74c3a97374
+ * console.log(buf2.toString('utf8', 0, 3));
+ * // Prints: té
+ * console.log(buf2.toString(undefined, 0, 3));
+ * // Prints: té
+ * ```
+ * @since v0.1.90
+ * @param [encoding='utf8'] The character encoding to use.
+ * @param [start=0] The byte offset to start decoding at.
+ * @param [end=buf.length] The byte offset to stop decoding at (not inclusive).
+ */
+ toString(encoding?: BufferEncoding, start?: number, end?: number): string;
+ /**
+ * Returns a JSON representation of `buf`. [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) implicitly calls
+ * this function when stringifying a `Buffer` instance.
+ *
+ * `Buffer.from()` accepts objects in the format returned from this method.
+ * In particular, `Buffer.from(buf.toJSON())` works like `Buffer.from(buf)`.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
+ * const json = JSON.stringify(buf);
+ *
+ * console.log(json);
+ * // Prints: {"type":"Buffer","data":[1,2,3,4,5]}
+ *
+ * const copy = JSON.parse(json, (key, value) => {
+ * return value && value.type === 'Buffer' ?
+ * Buffer.from(value) :
+ * value;
+ * });
+ *
+ * console.log(copy);
+ * // Prints:
+ * ```
+ * @since v0.9.2
+ */
+ toJSON(): {
+ type: "Buffer";
+ data: number[];
+ };
+ /**
+ * Returns `true` if both `buf` and `otherBuffer` have exactly the same bytes,`false` otherwise. Equivalent to `buf.compare(otherBuffer) === 0`.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf1 = Buffer.from('ABC');
+ * const buf2 = Buffer.from('414243', 'hex');
+ * const buf3 = Buffer.from('ABCD');
+ *
+ * console.log(buf1.equals(buf2));
+ * // Prints: true
+ * console.log(buf1.equals(buf3));
+ * // Prints: false
+ * ```
+ * @since v0.11.13
+ * @param otherBuffer A `Buffer` or {@link Uint8Array} with which to compare `buf`.
+ */
+ equals(otherBuffer: Uint8Array): boolean;
+ /**
+ * Compares `buf` with `target` and returns a number indicating whether `buf`comes before, after, or is the same as `target` in sort order.
+ * Comparison is based on the actual sequence of bytes in each `Buffer`.
+ *
+ * * `0` is returned if `target` is the same as `buf`
+ * * `1` is returned if `target` should come _before_`buf` when sorted.
+ * * `-1` is returned if `target` should come _after_`buf` when sorted.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf1 = Buffer.from('ABC');
+ * const buf2 = Buffer.from('BCD');
+ * const buf3 = Buffer.from('ABCD');
+ *
+ * console.log(buf1.compare(buf1));
+ * // Prints: 0
+ * console.log(buf1.compare(buf2));
+ * // Prints: -1
+ * console.log(buf1.compare(buf3));
+ * // Prints: -1
+ * console.log(buf2.compare(buf1));
+ * // Prints: 1
+ * console.log(buf2.compare(buf3));
+ * // Prints: 1
+ * console.log([buf1, buf2, buf3].sort(Buffer.compare));
+ * // Prints: [ , , ]
+ * // (This result is equal to: [buf1, buf3, buf2].)
+ * ```
+ *
+ * The optional `targetStart`, `targetEnd`, `sourceStart`, and `sourceEnd` arguments can be used to limit the comparison to specific ranges within `target` and `buf` respectively.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf1 = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9]);
+ * const buf2 = Buffer.from([5, 6, 7, 8, 9, 1, 2, 3, 4]);
+ *
+ * console.log(buf1.compare(buf2, 5, 9, 0, 4));
+ * // Prints: 0
+ * console.log(buf1.compare(buf2, 0, 6, 4));
+ * // Prints: -1
+ * console.log(buf1.compare(buf2, 5, 6, 5));
+ * // Prints: 1
+ * ```
+ *
+ * `ERR_OUT_OF_RANGE` is thrown if `targetStart < 0`, `sourceStart < 0`, `targetEnd > target.byteLength`, or `sourceEnd > source.byteLength`.
+ * @since v0.11.13
+ * @param target A `Buffer` or {@link Uint8Array} with which to compare `buf`.
+ * @param [targetStart=0] The offset within `target` at which to begin comparison.
+ * @param [targetEnd=target.length] The offset within `target` at which to end comparison (not inclusive).
+ * @param [sourceStart=0] The offset within `buf` at which to begin comparison.
+ * @param [sourceEnd=buf.length] The offset within `buf` at which to end comparison (not inclusive).
+ */
+ compare(
+ target: Uint8Array,
+ targetStart?: number,
+ targetEnd?: number,
+ sourceStart?: number,
+ sourceEnd?: number,
+ ): -1 | 0 | 1;
+ /**
+ * Copies data from a region of `buf` to a region in `target`, even if the `target`memory region overlaps with `buf`.
+ *
+ * [`TypedArray.prototype.set()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set) performs the same operation, and is available
+ * for all TypedArrays, including Node.js `Buffer`s, although it takes
+ * different function arguments.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * // Create two `Buffer` instances.
+ * const buf1 = Buffer.allocUnsafe(26);
+ * const buf2 = Buffer.allocUnsafe(26).fill('!');
+ *
+ * for (let i = 0; i < 26; i++) {
+ * // 97 is the decimal ASCII value for 'a'.
+ * buf1[i] = i + 97;
+ * }
+ *
+ * // Copy `buf1` bytes 16 through 19 into `buf2` starting at byte 8 of `buf2`.
+ * buf1.copy(buf2, 8, 16, 20);
+ * // This is equivalent to:
+ * // buf2.set(buf1.subarray(16, 20), 8);
+ *
+ * console.log(buf2.toString('ascii', 0, 25));
+ * // Prints: !!!!!!!!qrst!!!!!!!!!!!!!
+ * ```
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * // Create a `Buffer` and copy data from one region to an overlapping region
+ * // within the same `Buffer`.
+ *
+ * const buf = Buffer.allocUnsafe(26);
+ *
+ * for (let i = 0; i < 26; i++) {
+ * // 97 is the decimal ASCII value for 'a'.
+ * buf[i] = i + 97;
+ * }
+ *
+ * buf.copy(buf, 0, 4, 10);
+ *
+ * console.log(buf.toString());
+ * // Prints: efghijghijklmnopqrstuvwxyz
+ * ```
+ * @since v0.1.90
+ * @param target A `Buffer` or {@link Uint8Array} to copy into.
+ * @param [targetStart=0] The offset within `target` at which to begin writing.
+ * @param [sourceStart=0] The offset within `buf` from which to begin copying.
+ * @param [sourceEnd=buf.length] The offset within `buf` at which to stop copying (not inclusive).
+ * @return The number of bytes copied.
+ */
+ copy(target: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as big-endian.
+ *
+ * `value` is interpreted and written as a two's complement signed integer.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(8);
+ *
+ * buf.writeBigInt64BE(0x0102030405060708n, 0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v12.0.0, v10.20.0
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeBigInt64BE(value: bigint, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as little-endian.
+ *
+ * `value` is interpreted and written as a two's complement signed integer.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(8);
+ *
+ * buf.writeBigInt64LE(0x0102030405060708n, 0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v12.0.0, v10.20.0
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeBigInt64LE(value: bigint, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as big-endian.
+ *
+ * This function is also available under the `writeBigUint64BE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(8);
+ *
+ * buf.writeBigUInt64BE(0xdecafafecacefaden, 0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v12.0.0, v10.20.0
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeBigUInt64BE(value: bigint, offset?: number): number;
+ /**
+ * @alias Buffer.writeBigUInt64BE
+ * @since v14.10.0, v12.19.0
+ */
+ writeBigUint64BE(value: bigint, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as little-endian
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(8);
+ *
+ * buf.writeBigUInt64LE(0xdecafafecacefaden, 0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ *
+ * This function is also available under the `writeBigUint64LE` alias.
+ * @since v12.0.0, v10.20.0
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeBigUInt64LE(value: bigint, offset?: number): number;
+ /**
+ * @alias Buffer.writeBigUInt64LE
+ * @since v14.10.0, v12.19.0
+ */
+ writeBigUint64LE(value: bigint, offset?: number): number;
+ /**
+ * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as little-endian. Supports up to 48 bits of accuracy. Behavior is undefined
+ * when `value` is anything other than an unsigned integer.
+ *
+ * This function is also available under the `writeUintLE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(6);
+ *
+ * buf.writeUIntLE(0x1234567890ab, 0, 6);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.5.5
+ * @param value Number to be written to `buf`.
+ * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`.
+ * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeUIntLE(value: number, offset: number, byteLength: number): number;
+ /**
+ * @alias Buffer.writeUIntLE
+ * @since v14.9.0, v12.19.0
+ */
+ writeUintLE(value: number, offset: number, byteLength: number): number;
+ /**
+ * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as big-endian. Supports up to 48 bits of accuracy. Behavior is undefined
+ * when `value` is anything other than an unsigned integer.
+ *
+ * This function is also available under the `writeUintBE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(6);
+ *
+ * buf.writeUIntBE(0x1234567890ab, 0, 6);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.5.5
+ * @param value Number to be written to `buf`.
+ * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`.
+ * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeUIntBE(value: number, offset: number, byteLength: number): number;
+ /**
+ * @alias Buffer.writeUIntBE
+ * @since v14.9.0, v12.19.0
+ */
+ writeUintBE(value: number, offset: number, byteLength: number): number;
+ /**
+ * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as little-endian. Supports up to 48 bits of accuracy. Behavior is undefined
+ * when `value` is anything other than a signed integer.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(6);
+ *
+ * buf.writeIntLE(0x1234567890ab, 0, 6);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.11.15
+ * @param value Number to be written to `buf`.
+ * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`.
+ * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeIntLE(value: number, offset: number, byteLength: number): number;
+ /**
+ * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as big-endian. Supports up to 48 bits of accuracy. Behavior is undefined when`value` is anything other than a
+ * signed integer.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(6);
+ *
+ * buf.writeIntBE(0x1234567890ab, 0, 6);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.11.15
+ * @param value Number to be written to `buf`.
+ * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`.
+ * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeIntBE(value: number, offset: number, byteLength: number): number;
+ /**
+ * Reads an unsigned, big-endian 64-bit integer from `buf` at the specified`offset`.
+ *
+ * This function is also available under the `readBigUint64BE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
+ *
+ * console.log(buf.readBigUInt64BE(0));
+ * // Prints: 4294967295n
+ * ```
+ * @since v12.0.0, v10.20.0
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`.
+ */
+ readBigUInt64BE(offset?: number): bigint;
+ /**
+ * @alias Buffer.readBigUInt64BE
+ * @since v14.10.0, v12.19.0
+ */
+ readBigUint64BE(offset?: number): bigint;
+ /**
+ * Reads an unsigned, little-endian 64-bit integer from `buf` at the specified`offset`.
+ *
+ * This function is also available under the `readBigUint64LE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
+ *
+ * console.log(buf.readBigUInt64LE(0));
+ * // Prints: 18446744069414584320n
+ * ```
+ * @since v12.0.0, v10.20.0
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`.
+ */
+ readBigUInt64LE(offset?: number): bigint;
+ /**
+ * @alias Buffer.readBigUInt64LE
+ * @since v14.10.0, v12.19.0
+ */
+ readBigUint64LE(offset?: number): bigint;
+ /**
+ * Reads a signed, big-endian 64-bit integer from `buf` at the specified `offset`.
+ *
+ * Integers read from a `Buffer` are interpreted as two's complement signed
+ * values.
+ * @since v12.0.0, v10.20.0
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`.
+ */
+ readBigInt64BE(offset?: number): bigint;
+ /**
+ * Reads a signed, little-endian 64-bit integer from `buf` at the specified`offset`.
+ *
+ * Integers read from a `Buffer` are interpreted as two's complement signed
+ * values.
+ * @since v12.0.0, v10.20.0
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`.
+ */
+ readBigInt64LE(offset?: number): bigint;
+ /**
+ * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as an unsigned, little-endian integer supporting
+ * up to 48 bits of accuracy.
+ *
+ * This function is also available under the `readUintLE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
+ *
+ * console.log(buf.readUIntLE(0, 6).toString(16));
+ * // Prints: ab9078563412
+ * ```
+ * @since v0.11.15
+ * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`.
+ * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`.
+ */
+ readUIntLE(offset: number, byteLength: number): number;
+ /**
+ * @alias Buffer.readUIntLE
+ * @since v14.9.0, v12.19.0
+ */
+ readUintLE(offset: number, byteLength: number): number;
+ /**
+ * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as an unsigned big-endian integer supporting
+ * up to 48 bits of accuracy.
+ *
+ * This function is also available under the `readUintBE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
+ *
+ * console.log(buf.readUIntBE(0, 6).toString(16));
+ * // Prints: 1234567890ab
+ * console.log(buf.readUIntBE(1, 6).toString(16));
+ * // Throws ERR_OUT_OF_RANGE.
+ * ```
+ * @since v0.11.15
+ * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`.
+ * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`.
+ */
+ readUIntBE(offset: number, byteLength: number): number;
+ /**
+ * @alias Buffer.readUIntBE
+ * @since v14.9.0, v12.19.0
+ */
+ readUintBE(offset: number, byteLength: number): number;
+ /**
+ * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as a little-endian, two's complement signed value
+ * supporting up to 48 bits of accuracy.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
+ *
+ * console.log(buf.readIntLE(0, 6).toString(16));
+ * // Prints: -546f87a9cbee
+ * ```
+ * @since v0.11.15
+ * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`.
+ * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`.
+ */
+ readIntLE(offset: number, byteLength: number): number;
+ /**
+ * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as a big-endian, two's complement signed value
+ * supporting up to 48 bits of accuracy.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
+ *
+ * console.log(buf.readIntBE(0, 6).toString(16));
+ * // Prints: 1234567890ab
+ * console.log(buf.readIntBE(1, 6).toString(16));
+ * // Throws ERR_OUT_OF_RANGE.
+ * console.log(buf.readIntBE(1, 0).toString(16));
+ * // Throws ERR_OUT_OF_RANGE.
+ * ```
+ * @since v0.11.15
+ * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`.
+ * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`.
+ */
+ readIntBE(offset: number, byteLength: number): number;
+ /**
+ * Reads an unsigned 8-bit integer from `buf` at the specified `offset`.
+ *
+ * This function is also available under the `readUint8` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([1, -2]);
+ *
+ * console.log(buf.readUInt8(0));
+ * // Prints: 1
+ * console.log(buf.readUInt8(1));
+ * // Prints: 254
+ * console.log(buf.readUInt8(2));
+ * // Throws ERR_OUT_OF_RANGE.
+ * ```
+ * @since v0.5.0
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 1`.
+ */
+ readUInt8(offset?: number): number;
+ /**
+ * @alias Buffer.readUInt8
+ * @since v14.9.0, v12.19.0
+ */
+ readUint8(offset?: number): number;
+ /**
+ * Reads an unsigned, little-endian 16-bit integer from `buf` at the specified `offset`.
+ *
+ * This function is also available under the `readUint16LE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0x12, 0x34, 0x56]);
+ *
+ * console.log(buf.readUInt16LE(0).toString(16));
+ * // Prints: 3412
+ * console.log(buf.readUInt16LE(1).toString(16));
+ * // Prints: 5634
+ * console.log(buf.readUInt16LE(2).toString(16));
+ * // Throws ERR_OUT_OF_RANGE.
+ * ```
+ * @since v0.5.5
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`.
+ */
+ readUInt16LE(offset?: number): number;
+ /**
+ * @alias Buffer.readUInt16LE
+ * @since v14.9.0, v12.19.0
+ */
+ readUint16LE(offset?: number): number;
+ /**
+ * Reads an unsigned, big-endian 16-bit integer from `buf` at the specified`offset`.
+ *
+ * This function is also available under the `readUint16BE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0x12, 0x34, 0x56]);
+ *
+ * console.log(buf.readUInt16BE(0).toString(16));
+ * // Prints: 1234
+ * console.log(buf.readUInt16BE(1).toString(16));
+ * // Prints: 3456
+ * ```
+ * @since v0.5.5
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`.
+ */
+ readUInt16BE(offset?: number): number;
+ /**
+ * @alias Buffer.readUInt16BE
+ * @since v14.9.0, v12.19.0
+ */
+ readUint16BE(offset?: number): number;
+ /**
+ * Reads an unsigned, little-endian 32-bit integer from `buf` at the specified`offset`.
+ *
+ * This function is also available under the `readUint32LE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);
+ *
+ * console.log(buf.readUInt32LE(0).toString(16));
+ * // Prints: 78563412
+ * console.log(buf.readUInt32LE(1).toString(16));
+ * // Throws ERR_OUT_OF_RANGE.
+ * ```
+ * @since v0.5.5
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`.
+ */
+ readUInt32LE(offset?: number): number;
+ /**
+ * @alias Buffer.readUInt32LE
+ * @since v14.9.0, v12.19.0
+ */
+ readUint32LE(offset?: number): number;
+ /**
+ * Reads an unsigned, big-endian 32-bit integer from `buf` at the specified`offset`.
+ *
+ * This function is also available under the `readUint32BE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);
+ *
+ * console.log(buf.readUInt32BE(0).toString(16));
+ * // Prints: 12345678
+ * ```
+ * @since v0.5.5
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`.
+ */
+ readUInt32BE(offset?: number): number;
+ /**
+ * @alias Buffer.readUInt32BE
+ * @since v14.9.0, v12.19.0
+ */
+ readUint32BE(offset?: number): number;
+ /**
+ * Reads a signed 8-bit integer from `buf` at the specified `offset`.
+ *
+ * Integers read from a `Buffer` are interpreted as two's complement signed values.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([-1, 5]);
+ *
+ * console.log(buf.readInt8(0));
+ * // Prints: -1
+ * console.log(buf.readInt8(1));
+ * // Prints: 5
+ * console.log(buf.readInt8(2));
+ * // Throws ERR_OUT_OF_RANGE.
+ * ```
+ * @since v0.5.0
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 1`.
+ */
+ readInt8(offset?: number): number;
+ /**
+ * Reads a signed, little-endian 16-bit integer from `buf` at the specified`offset`.
+ *
+ * Integers read from a `Buffer` are interpreted as two's complement signed values.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0, 5]);
+ *
+ * console.log(buf.readInt16LE(0));
+ * // Prints: 1280
+ * console.log(buf.readInt16LE(1));
+ * // Throws ERR_OUT_OF_RANGE.
+ * ```
+ * @since v0.5.5
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`.
+ */
+ readInt16LE(offset?: number): number;
+ /**
+ * Reads a signed, big-endian 16-bit integer from `buf` at the specified `offset`.
+ *
+ * Integers read from a `Buffer` are interpreted as two's complement signed values.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0, 5]);
+ *
+ * console.log(buf.readInt16BE(0));
+ * // Prints: 5
+ * ```
+ * @since v0.5.5
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`.
+ */
+ readInt16BE(offset?: number): number;
+ /**
+ * Reads a signed, little-endian 32-bit integer from `buf` at the specified`offset`.
+ *
+ * Integers read from a `Buffer` are interpreted as two's complement signed values.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0, 0, 0, 5]);
+ *
+ * console.log(buf.readInt32LE(0));
+ * // Prints: 83886080
+ * console.log(buf.readInt32LE(1));
+ * // Throws ERR_OUT_OF_RANGE.
+ * ```
+ * @since v0.5.5
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`.
+ */
+ readInt32LE(offset?: number): number;
+ /**
+ * Reads a signed, big-endian 32-bit integer from `buf` at the specified `offset`.
+ *
+ * Integers read from a `Buffer` are interpreted as two's complement signed values.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([0, 0, 0, 5]);
+ *
+ * console.log(buf.readInt32BE(0));
+ * // Prints: 5
+ * ```
+ * @since v0.5.5
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`.
+ */
+ readInt32BE(offset?: number): number;
+ /**
+ * Reads a 32-bit, little-endian float from `buf` at the specified `offset`.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([1, 2, 3, 4]);
+ *
+ * console.log(buf.readFloatLE(0));
+ * // Prints: 1.539989614439558e-36
+ * console.log(buf.readFloatLE(1));
+ * // Throws ERR_OUT_OF_RANGE.
+ * ```
+ * @since v0.11.15
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`.
+ */
+ readFloatLE(offset?: number): number;
+ /**
+ * Reads a 32-bit, big-endian float from `buf` at the specified `offset`.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([1, 2, 3, 4]);
+ *
+ * console.log(buf.readFloatBE(0));
+ * // Prints: 2.387939260590663e-38
+ * ```
+ * @since v0.11.15
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`.
+ */
+ readFloatBE(offset?: number): number;
+ /**
+ * Reads a 64-bit, little-endian double from `buf` at the specified `offset`.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);
+ *
+ * console.log(buf.readDoubleLE(0));
+ * // Prints: 5.447603722011605e-270
+ * console.log(buf.readDoubleLE(1));
+ * // Throws ERR_OUT_OF_RANGE.
+ * ```
+ * @since v0.11.15
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 8`.
+ */
+ readDoubleLE(offset?: number): number;
+ /**
+ * Reads a 64-bit, big-endian double from `buf` at the specified `offset`.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);
+ *
+ * console.log(buf.readDoubleBE(0));
+ * // Prints: 8.20788039913184e-304
+ * ```
+ * @since v0.11.15
+ * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 8`.
+ */
+ readDoubleBE(offset?: number): number;
+ reverse(): this;
+ /**
+ * Interprets `buf` as an array of unsigned 16-bit integers and swaps the
+ * byte order _in-place_. Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 2.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
+ *
+ * console.log(buf1);
+ * // Prints:
+ *
+ * buf1.swap16();
+ *
+ * console.log(buf1);
+ * // Prints:
+ *
+ * const buf2 = Buffer.from([0x1, 0x2, 0x3]);
+ *
+ * buf2.swap16();
+ * // Throws ERR_INVALID_BUFFER_SIZE.
+ * ```
+ *
+ * One convenient use of `buf.swap16()` is to perform a fast in-place conversion
+ * between UTF-16 little-endian and UTF-16 big-endian:
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from('This is little-endian UTF-16', 'utf16le');
+ * buf.swap16(); // Convert to big-endian UTF-16 text.
+ * ```
+ * @since v5.10.0
+ * @return A reference to `buf`.
+ */
+ swap16(): this;
+ /**
+ * Interprets `buf` as an array of unsigned 32-bit integers and swaps the
+ * byte order _in-place_. Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 4.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
+ *
+ * console.log(buf1);
+ * // Prints:
+ *
+ * buf1.swap32();
+ *
+ * console.log(buf1);
+ * // Prints:
+ *
+ * const buf2 = Buffer.from([0x1, 0x2, 0x3]);
+ *
+ * buf2.swap32();
+ * // Throws ERR_INVALID_BUFFER_SIZE.
+ * ```
+ * @since v5.10.0
+ * @return A reference to `buf`.
+ */
+ swap32(): this;
+ /**
+ * Interprets `buf` as an array of 64-bit numbers and swaps byte order _in-place_.
+ * Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 8.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
+ *
+ * console.log(buf1);
+ * // Prints:
+ *
+ * buf1.swap64();
+ *
+ * console.log(buf1);
+ * // Prints:
+ *
+ * const buf2 = Buffer.from([0x1, 0x2, 0x3]);
+ *
+ * buf2.swap64();
+ * // Throws ERR_INVALID_BUFFER_SIZE.
+ * ```
+ * @since v6.3.0
+ * @return A reference to `buf`.
+ */
+ swap64(): this;
+ /**
+ * Writes `value` to `buf` at the specified `offset`. `value` must be a
+ * valid unsigned 8-bit integer. Behavior is undefined when `value` is anything
+ * other than an unsigned 8-bit integer.
+ *
+ * This function is also available under the `writeUint8` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(4);
+ *
+ * buf.writeUInt8(0x3, 0);
+ * buf.writeUInt8(0x4, 1);
+ * buf.writeUInt8(0x23, 2);
+ * buf.writeUInt8(0x42, 3);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.5.0
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 1`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeUInt8(value: number, offset?: number): number;
+ /**
+ * @alias Buffer.writeUInt8
+ * @since v14.9.0, v12.19.0
+ */
+ writeUint8(value: number, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid unsigned 16-bit integer. Behavior is undefined when `value` is
+ * anything other than an unsigned 16-bit integer.
+ *
+ * This function is also available under the `writeUint16LE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(4);
+ *
+ * buf.writeUInt16LE(0xdead, 0);
+ * buf.writeUInt16LE(0xbeef, 2);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.5.5
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeUInt16LE(value: number, offset?: number): number;
+ /**
+ * @alias Buffer.writeUInt16LE
+ * @since v14.9.0, v12.19.0
+ */
+ writeUint16LE(value: number, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid unsigned 16-bit integer. Behavior is undefined when `value`is anything other than an
+ * unsigned 16-bit integer.
+ *
+ * This function is also available under the `writeUint16BE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(4);
+ *
+ * buf.writeUInt16BE(0xdead, 0);
+ * buf.writeUInt16BE(0xbeef, 2);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.5.5
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeUInt16BE(value: number, offset?: number): number;
+ /**
+ * @alias Buffer.writeUInt16BE
+ * @since v14.9.0, v12.19.0
+ */
+ writeUint16BE(value: number, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid unsigned 32-bit integer. Behavior is undefined when `value` is
+ * anything other than an unsigned 32-bit integer.
+ *
+ * This function is also available under the `writeUint32LE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(4);
+ *
+ * buf.writeUInt32LE(0xfeedface, 0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.5.5
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeUInt32LE(value: number, offset?: number): number;
+ /**
+ * @alias Buffer.writeUInt32LE
+ * @since v14.9.0, v12.19.0
+ */
+ writeUint32LE(value: number, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid unsigned 32-bit integer. Behavior is undefined when `value`is anything other than an
+ * unsigned 32-bit integer.
+ *
+ * This function is also available under the `writeUint32BE` alias.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(4);
+ *
+ * buf.writeUInt32BE(0xfeedface, 0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.5.5
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeUInt32BE(value: number, offset?: number): number;
+ /**
+ * @alias Buffer.writeUInt32BE
+ * @since v14.9.0, v12.19.0
+ */
+ writeUint32BE(value: number, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset`. `value` must be a valid
+ * signed 8-bit integer. Behavior is undefined when `value` is anything other than
+ * a signed 8-bit integer.
+ *
+ * `value` is interpreted and written as a two's complement signed integer.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(2);
+ *
+ * buf.writeInt8(2, 0);
+ * buf.writeInt8(-2, 1);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.5.0
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 1`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeInt8(value: number, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid signed 16-bit integer. Behavior is undefined when `value` is
+ * anything other than a signed 16-bit integer.
+ *
+ * The `value` is interpreted and written as a two's complement signed integer.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(2);
+ *
+ * buf.writeInt16LE(0x0304, 0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.5.5
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeInt16LE(value: number, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid signed 16-bit integer. Behavior is undefined when `value` is
+ * anything other than a signed 16-bit integer.
+ *
+ * The `value` is interpreted and written as a two's complement signed integer.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(2);
+ *
+ * buf.writeInt16BE(0x0102, 0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.5.5
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeInt16BE(value: number, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid signed 32-bit integer. Behavior is undefined when `value` is
+ * anything other than a signed 32-bit integer.
+ *
+ * The `value` is interpreted and written as a two's complement signed integer.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(4);
+ *
+ * buf.writeInt32LE(0x05060708, 0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.5.5
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeInt32LE(value: number, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid signed 32-bit integer. Behavior is undefined when `value` is
+ * anything other than a signed 32-bit integer.
+ *
+ * The `value` is interpreted and written as a two's complement signed integer.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(4);
+ *
+ * buf.writeInt32BE(0x01020304, 0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.5.5
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeInt32BE(value: number, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as little-endian. Behavior is
+ * undefined when `value` is anything other than a JavaScript number.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(4);
+ *
+ * buf.writeFloatLE(0xcafebabe, 0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.11.15
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeFloatLE(value: number, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as big-endian. Behavior is
+ * undefined when `value` is anything other than a JavaScript number.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(4);
+ *
+ * buf.writeFloatBE(0xcafebabe, 0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.11.15
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeFloatBE(value: number, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a JavaScript number. Behavior is undefined when `value` is anything
+ * other than a JavaScript number.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(8);
+ *
+ * buf.writeDoubleLE(123.456, 0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.11.15
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 8`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeDoubleLE(value: number, offset?: number): number;
+ /**
+ * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a JavaScript number. Behavior is undefined when `value` is anything
+ * other than a JavaScript number.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(8);
+ *
+ * buf.writeDoubleBE(123.456, 0);
+ *
+ * console.log(buf);
+ * // Prints:
+ * ```
+ * @since v0.11.15
+ * @param value Number to be written to `buf`.
+ * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 8`.
+ * @return `offset` plus the number of bytes written.
+ */
+ writeDoubleBE(value: number, offset?: number): number;
+ /**
+ * Fills `buf` with the specified `value`. If the `offset` and `end` are not given,
+ * the entire `buf` will be filled:
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * // Fill a `Buffer` with the ASCII character 'h'.
+ *
+ * const b = Buffer.allocUnsafe(50).fill('h');
+ *
+ * console.log(b.toString());
+ * // Prints: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+ *
+ * // Fill a buffer with empty string
+ * const c = Buffer.allocUnsafe(5).fill('');
+ *
+ * console.log(c.fill(''));
+ * // Prints:
+ * ```
+ *
+ * `value` is coerced to a `uint32` value if it is not a string, `Buffer`, or
+ * integer. If the resulting integer is greater than `255` (decimal), `buf` will be
+ * filled with `value & 255`.
+ *
+ * If the final write of a `fill()` operation falls on a multi-byte character,
+ * then only the bytes of that character that fit into `buf` are written:
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * // Fill a `Buffer` with character that takes up two bytes in UTF-8.
+ *
+ * console.log(Buffer.allocUnsafe(5).fill('\u0222'));
+ * // Prints:
+ * ```
+ *
+ * If `value` contains invalid characters, it is truncated; if no valid
+ * fill data remains, an exception is thrown:
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.allocUnsafe(5);
+ *
+ * console.log(buf.fill('a'));
+ * // Prints:
+ * console.log(buf.fill('aazz', 'hex'));
+ * // Prints:
+ * console.log(buf.fill('zz', 'hex'));
+ * // Throws an exception.
+ * ```
+ * @since v0.5.0
+ * @param value The value with which to fill `buf`. Empty value (string, Uint8Array, Buffer) is coerced to `0`.
+ * @param [offset=0] Number of bytes to skip before starting to fill `buf`.
+ * @param [end=buf.length] Where to stop filling `buf` (not inclusive).
+ * @param [encoding='utf8'] The encoding for `value` if `value` is a string.
+ * @return A reference to `buf`.
+ */
+ fill(value: string | Uint8Array | number, offset?: number, end?: number, encoding?: BufferEncoding): this;
+ fill(value: string | Uint8Array | number, offset: number, encoding: BufferEncoding): this;
+ fill(value: string | Uint8Array | number, encoding: BufferEncoding): this;
+ /**
+ * If `value` is:
+ *
+ * * a string, `value` is interpreted according to the character encoding in `encoding`.
+ * * a `Buffer` or [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array), `value` will be used in its entirety.
+ * To compare a partial `Buffer`, use `buf.subarray`.
+ * * a number, `value` will be interpreted as an unsigned 8-bit integer
+ * value between `0` and `255`.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from('this is a buffer');
+ *
+ * console.log(buf.indexOf('this'));
+ * // Prints: 0
+ * console.log(buf.indexOf('is'));
+ * // Prints: 2
+ * console.log(buf.indexOf(Buffer.from('a buffer')));
+ * // Prints: 8
+ * console.log(buf.indexOf(97));
+ * // Prints: 8 (97 is the decimal ASCII value for 'a')
+ * console.log(buf.indexOf(Buffer.from('a buffer example')));
+ * // Prints: -1
+ * console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8)));
+ * // Prints: 8
+ *
+ * const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
+ *
+ * console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le'));
+ * // Prints: 4
+ * console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le'));
+ * // Prints: 6
+ * ```
+ *
+ * If `value` is not a string, number, or `Buffer`, this method will throw a `TypeError`. If `value` is a number, it will be coerced to a valid byte value,
+ * an integer between 0 and 255.
+ *
+ * If `byteOffset` is not a number, it will be coerced to a number. If the result
+ * of coercion is `NaN` or `0`, then the entire buffer will be searched. This
+ * behavior matches [`String.prototype.indexOf()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf).
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const b = Buffer.from('abcdef');
+ *
+ * // Passing a value that's a number, but not a valid byte.
+ * // Prints: 2, equivalent to searching for 99 or 'c'.
+ * console.log(b.indexOf(99.9));
+ * console.log(b.indexOf(256 + 99));
+ *
+ * // Passing a byteOffset that coerces to NaN or 0.
+ * // Prints: 1, searching the whole buffer.
+ * console.log(b.indexOf('b', undefined));
+ * console.log(b.indexOf('b', {}));
+ * console.log(b.indexOf('b', null));
+ * console.log(b.indexOf('b', []));
+ * ```
+ *
+ * If `value` is an empty string or empty `Buffer` and `byteOffset` is less
+ * than `buf.length`, `byteOffset` will be returned. If `value` is empty and`byteOffset` is at least `buf.length`, `buf.length` will be returned.
+ * @since v1.5.0
+ * @param value What to search for.
+ * @param [byteOffset=0] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`.
+ * @param [encoding='utf8'] If `value` is a string, this is the encoding used to determine the binary representation of the string that will be searched for in `buf`.
+ * @return The index of the first occurrence of `value` in `buf`, or `-1` if `buf` does not contain `value`.
+ */
+ indexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number;
+ indexOf(value: string | number | Uint8Array, encoding: BufferEncoding): number;
+ /**
+ * Identical to `buf.indexOf()`, except the last occurrence of `value` is found
+ * rather than the first occurrence.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from('this buffer is a buffer');
+ *
+ * console.log(buf.lastIndexOf('this'));
+ * // Prints: 0
+ * console.log(buf.lastIndexOf('buffer'));
+ * // Prints: 17
+ * console.log(buf.lastIndexOf(Buffer.from('buffer')));
+ * // Prints: 17
+ * console.log(buf.lastIndexOf(97));
+ * // Prints: 15 (97 is the decimal ASCII value for 'a')
+ * console.log(buf.lastIndexOf(Buffer.from('yolo')));
+ * // Prints: -1
+ * console.log(buf.lastIndexOf('buffer', 5));
+ * // Prints: 5
+ * console.log(buf.lastIndexOf('buffer', 4));
+ * // Prints: -1
+ *
+ * const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
+ *
+ * console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le'));
+ * // Prints: 6
+ * console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le'));
+ * // Prints: 4
+ * ```
+ *
+ * If `value` is not a string, number, or `Buffer`, this method will throw a `TypeError`. If `value` is a number, it will be coerced to a valid byte value,
+ * an integer between 0 and 255.
+ *
+ * If `byteOffset` is not a number, it will be coerced to a number. Any arguments
+ * that coerce to `NaN`, like `{}` or `undefined`, will search the whole buffer.
+ * This behavior matches [`String.prototype.lastIndexOf()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf).
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const b = Buffer.from('abcdef');
+ *
+ * // Passing a value that's a number, but not a valid byte.
+ * // Prints: 2, equivalent to searching for 99 or 'c'.
+ * console.log(b.lastIndexOf(99.9));
+ * console.log(b.lastIndexOf(256 + 99));
+ *
+ * // Passing a byteOffset that coerces to NaN.
+ * // Prints: 1, searching the whole buffer.
+ * console.log(b.lastIndexOf('b', undefined));
+ * console.log(b.lastIndexOf('b', {}));
+ *
+ * // Passing a byteOffset that coerces to 0.
+ * // Prints: -1, equivalent to passing 0.
+ * console.log(b.lastIndexOf('b', null));
+ * console.log(b.lastIndexOf('b', []));
+ * ```
+ *
+ * If `value` is an empty string or empty `Buffer`, `byteOffset` will be returned.
+ * @since v6.0.0
+ * @param value What to search for.
+ * @param [byteOffset=buf.length - 1] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`.
+ * @param [encoding='utf8'] If `value` is a string, this is the encoding used to determine the binary representation of the string that will be searched for in `buf`.
+ * @return The index of the last occurrence of `value` in `buf`, or `-1` if `buf` does not contain `value`.
+ */
+ lastIndexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number;
+ lastIndexOf(value: string | number | Uint8Array, encoding: BufferEncoding): number;
+ /**
+ * Equivalent to `buf.indexOf() !== -1`.
+ *
+ * ```js
+ * import { Buffer } from 'node:buffer';
+ *
+ * const buf = Buffer.from('this is a buffer');
+ *
+ * console.log(buf.includes('this'));
+ * // Prints: true
+ * console.log(buf.includes('is'));
+ * // Prints: true
+ * console.log(buf.includes(Buffer.from('a buffer')));
+ * // Prints: true
+ * console.log(buf.includes(97));
+ * // Prints: true (97 is the decimal ASCII value for 'a')
+ * console.log(buf.includes(Buffer.from('a buffer example')));
+ * // Prints: false
+ * console.log(buf.includes(Buffer.from('a buffer example').slice(0, 8)));
+ * // Prints: true
+ * console.log(buf.includes('this', 4));
+ * // Prints: false
+ * ```
+ * @since v5.3.0
+ * @param value What to search for.
+ * @param [byteOffset=0] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`.
+ * @param [encoding='utf8'] If `value` is a string, this is its encoding.
+ * @return `true` if `value` was found in `buf`, `false` otherwise.
+ */
+ includes(value: string | number | Buffer, byteOffset?: number, encoding?: BufferEncoding): boolean;
+ includes(value: string | number | Buffer, encoding: BufferEncoding): boolean;
+ }
+ var Buffer: BufferConstructor;
+ }
+ // #region web types
+ export type BlobPart = NodeJS.BufferSource | Blob | string;
+ export interface BlobPropertyBag {
+ endings?: "native" | "transparent";
+ type?: string;
+ }
+ export interface FilePropertyBag extends BlobPropertyBag {
+ lastModified?: number;
+ }
+ export interface Blob {
+ readonly size: number;
+ readonly type: string;
+ arrayBuffer(): Promise;
+ bytes(): Promise;
+ slice(start?: number, end?: number, contentType?: string): Blob;
+ stream(): ReadableStream;
+ text(): Promise;
+ }
+ export var Blob: {
+ prototype: Blob;
+ new(blobParts?: BlobPart[], options?: BlobPropertyBag): Blob;
+ };
+ export interface File extends Blob {
+ readonly lastModified: number;
+ readonly name: string;
+ readonly webkitRelativePath: string;
+ }
+ export var File: {
+ prototype: File;
+ new(fileBits: BlobPart[], fileName: string, options?: FilePropertyBag): File;
+ };
+ export import atob = globalThis.atob;
+ export import btoa = globalThis.btoa;
+ // #endregion
+}
+declare module "buffer" {
+ export * from "node:buffer";
+}
diff --git a/mqtt-backend/node_modules/@types/node/child_process.d.ts b/mqtt-backend/node_modules/@types/node/child_process.d.ts
new file mode 100644
index 0000000..e3964ab
--- /dev/null
+++ b/mqtt-backend/node_modules/@types/node/child_process.d.ts
@@ -0,0 +1,1366 @@
+declare module "node:child_process" {
+ import { NonSharedBuffer } from "node:buffer";
+ import * as dgram from "node:dgram";
+ import { Abortable, EventEmitter, InternalEventEmitter } from "node:events";
+ import * as net from "node:net";
+ import { Readable, Stream, Writable } from "node:stream";
+ import { URL } from "node:url";
+ type Serializable = string | object | number | boolean | bigint;
+ type SendHandle = net.Socket | net.Server | dgram.Socket | undefined;
+ interface ChildProcessEventMap {
+ "close": [code: number | null, signal: NodeJS.Signals | null];
+ "disconnect": [];
+ "error": [err: Error];
+ "exit": [code: number | null, signal: NodeJS.Signals | null];
+ "message": [message: Serializable, sendHandle: SendHandle];
+ "spawn": [];
+ }
+ /**
+ * Instances of the `ChildProcess` represent spawned child processes.
+ *
+ * Instances of `ChildProcess` are not intended to be created directly. Rather,
+ * use the {@link spawn}, {@link exec},{@link execFile}, or {@link fork} methods to create
+ * instances of `ChildProcess`.
+ * @since v2.2.0
+ */
+ class ChildProcess implements EventEmitter {
+ /**
+ * A `Writable Stream` that represents the child process's `stdin`.
+ *
+ * If a child process waits to read all of its input, the child will not continue
+ * until this stream has been closed via `end()`.
+ *
+ * If the child was spawned with `stdio[0]` set to anything other than `'pipe'`,
+ * then this will be `null`.
+ *
+ * `subprocess.stdin` is an alias for `subprocess.stdio[0]`. Both properties will
+ * refer to the same value.
+ *
+ * The `subprocess.stdin` property can be `null` or `undefined` if the child process could not be successfully spawned.
+ * @since v0.1.90
+ */
+ stdin: Writable | null;
+ /**
+ * A `Readable Stream` that represents the child process's `stdout`.
+ *
+ * If the child was spawned with `stdio[1]` set to anything other than `'pipe'`,
+ * then this will be `null`.
+ *
+ * `subprocess.stdout` is an alias for `subprocess.stdio[1]`. Both properties will
+ * refer to the same value.
+ *
+ * ```js
+ * import { spawn } from 'node:child_process';
+ *
+ * const subprocess = spawn('ls');
+ *
+ * subprocess.stdout.on('data', (data) => {
+ * console.log(`Received chunk ${data}`);
+ * });
+ * ```
+ *
+ * The `subprocess.stdout` property can be `null` or `undefined` if the child process could not be successfully spawned.
+ * @since v0.1.90
+ */
+ stdout: Readable | null;
+ /**
+ * A `Readable Stream` that represents the child process's `stderr`.
+ *
+ * If the child was spawned with `stdio[2]` set to anything other than `'pipe'`,
+ * then this will be `null`.
+ *
+ * `subprocess.stderr` is an alias for `subprocess.stdio[2]`. Both properties will
+ * refer to the same value.
+ *
+ * The `subprocess.stderr` property can be `null` or `undefined` if the child process could not be successfully spawned.
+ * @since v0.1.90
+ */
+ stderr: Readable | null;
+ /**
+ * The `subprocess.channel` property is a reference to the child's IPC channel. If
+ * no IPC channel exists, this property is `undefined`.
+ * @since v7.1.0
+ */
+ readonly channel?: Control | null;
+ /**
+ * A sparse array of pipes to the child process, corresponding with positions in
+ * the `stdio` option passed to {@link spawn} that have been set
+ * to the value `'pipe'`. `subprocess.stdio[0]`, `subprocess.stdio[1]`, and `subprocess.stdio[2]` are also available as `subprocess.stdin`, `subprocess.stdout`, and `subprocess.stderr`,
+ * respectively.
+ *
+ * In the following example, only the child's fd `1` (stdout) is configured as a
+ * pipe, so only the parent's `subprocess.stdio[1]` is a stream, all other values
+ * in the array are `null`.
+ *
+ * ```js
+ * import assert from 'node:assert';
+ * import fs from 'node:fs';
+ * import child_process from 'node:child_process';
+ *
+ * const subprocess = child_process.spawn('ls', {
+ * stdio: [
+ * 0, // Use parent's stdin for child.
+ * 'pipe', // Pipe child's stdout to parent.
+ * fs.openSync('err.out', 'w'), // Direct child's stderr to a file.
+ * ],
+ * });
+ *
+ * assert.strictEqual(subprocess.stdio[0], null);
+ * assert.strictEqual(subprocess.stdio[0], subprocess.stdin);
+ *
+ * assert(subprocess.stdout);
+ * assert.strictEqual(subprocess.stdio[1], subprocess.stdout);
+ *
+ * assert.strictEqual(subprocess.stdio[2], null);
+ * assert.strictEqual(subprocess.stdio[2], subprocess.stderr);
+ * ```
+ *
+ * The `subprocess.stdio` property can be `undefined` if the child process could
+ * not be successfully spawned.
+ * @since v0.7.10
+ */
+ readonly stdio: [
+ Writable | null,
+ // stdin
+ Readable | null,
+ // stdout
+ Readable | null,
+ // stderr
+ Readable | Writable | null | undefined,
+ // extra
+ Readable | Writable | null | undefined, // extra
+ ];
+ /**
+ * The `subprocess.killed` property indicates whether the child process
+ * successfully received a signal from `subprocess.kill()`. The `killed` property
+ * does not indicate that the child process has been terminated.
+ * @since v0.5.10
+ */
+ readonly killed: boolean;
+ /**
+ * Returns the process identifier (PID) of the child process. If the child process
+ * fails to spawn due to errors, then the value is `undefined` and `error` is
+ * emitted.
+ *
+ * ```js
+ * import { spawn } from 'node:child_process';
+ * const grep = spawn('grep', ['ssh']);
+ *
+ * console.log(`Spawned child pid: ${grep.pid}`);
+ * grep.stdin.end();
+ * ```
+ * @since v0.1.90
+ */
+ readonly pid?: number | undefined;
+ /**
+ * The `subprocess.connected` property indicates whether it is still possible to
+ * send and receive messages from a child process. When `subprocess.connected` is `false`, it is no longer possible to send or receive messages.
+ * @since v0.7.2
+ */
+ readonly connected: boolean;
+ /**
+ * The `subprocess.exitCode` property indicates the exit code of the child process.
+ * If the child process is still running, the field will be `null`.
+ *
+ * When the child process is terminated by a signal, `subprocess.exitCode` will be
+ * `null` and `subprocess.signalCode` will be set. To get the corresponding
+ * POSIX exit code, use
+ * `util.convertProcessSignalToExitCode(subprocess.signalCode)`.
+ */
+ readonly exitCode: number | null;
+ /**
+ * The `subprocess.signalCode` property indicates the signal received by
+ * the child process if any, else `null`.
+ */
+ readonly signalCode: NodeJS.Signals | null;
+ /**
+ * The `subprocess.spawnargs` property represents the full list of command-line
+ * arguments the child process was launched with.
+ */
+ readonly spawnargs: string[];
+ /**
+ * The `subprocess.spawnfile` property indicates the executable file name of
+ * the child process that is launched.
+ *
+ * For {@link fork}, its value will be equal to `process.execPath`.
+ * For {@link spawn}, its value will be the name of
+ * the executable file.
+ * For {@link exec}, its value will be the name of the shell
+ * in which the child process is launched.
+ */
+ readonly spawnfile: string;
+ /**
+ * The `subprocess.kill()` method sends a signal to the child process. If no
+ * argument is given, the process will be sent the `'SIGTERM'` signal. See [`signal(7)`](http://man7.org/linux/man-pages/man7/signal.7.html) for a list of available signals. This function
+ * returns `true` if [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) succeeds, and `false` otherwise.
+ *
+ * ```js
+ * import { spawn } from 'node:child_process';
+ * const grep = spawn('grep', ['ssh']);
+ *
+ * grep.on('close', (code, signal) => {
+ * console.log(
+ * `child process terminated due to receipt of signal ${signal}`);
+ * });
+ *
+ * // Send SIGHUP to process.
+ * grep.kill('SIGHUP');
+ * ```
+ *
+ * The `ChildProcess` object may emit an `'error'` event if the signal
+ * cannot be delivered. Sending a signal to a child process that has already exited
+ * is not an error but may have unforeseen consequences. Specifically, if the
+ * process identifier (PID) has been reassigned to another process, the signal will
+ * be delivered to that process instead which can have unexpected results.
+ *
+ * While the function is called `kill`, the signal delivered to the child process
+ * may not actually terminate the process.
+ *
+ * See [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) for reference.
+ *
+ * On Windows, where POSIX signals do not exist, the `signal` argument will be
+ * ignored, and the process will be killed forcefully and abruptly (similar to `'SIGKILL'`).
+ * See `Signal Events` for more details.
+ *
+ * On Linux, child processes of child processes will not be terminated
+ * when attempting to kill their parent. This is likely to happen when running a
+ * new process in a shell or with the use of the `shell` option of `ChildProcess`:
+ *
+ * ```js
+ * 'use strict';
+ * import { spawn } from 'node:child_process';
+ *
+ * const subprocess = spawn(
+ * 'sh',
+ * [
+ * '-c',
+ * `node -e "setInterval(() => {
+ * console.log(process.pid, 'is alive')
+ * }, 500);"`,
+ * ], {
+ * stdio: ['inherit', 'inherit', 'inherit'],
+ * },
+ * );
+ *
+ * setTimeout(() => {
+ * subprocess.kill(); // Does not terminate the Node.js process in the shell.
+ * }, 2000);
+ * ```
+ * @since v0.1.90
+ */
+ kill(signal?: NodeJS.Signals | number): boolean;
+ /**
+ * Calls {@link ChildProcess.kill} with `'SIGTERM'`.
+ * @since v20.5.0
+ */
+ [Symbol.dispose](): void;
+ /**
+ * When an IPC channel has been established between the parent and child (
+ * i.e. when using {@link fork}), the `subprocess.send()` method can
+ * be used to send messages to the child process. When the child process is a
+ * Node.js instance, these messages can be received via the `'message'` event.
+ *
+ * The message goes through serialization and parsing. The resulting
+ * message might not be the same as what is originally sent.
+ *
+ * For example, in the parent script:
+ *
+ * ```js
+ * import cp from 'node:child_process';
+ * const n = cp.fork(`${__dirname}/sub.js`);
+ *
+ * n.on('message', (m) => {
+ * console.log('PARENT got message:', m);
+ * });
+ *
+ * // Causes the child to print: CHILD got message: { hello: 'world' }
+ * n.send({ hello: 'world' });
+ * ```
+ *
+ * And then the child script, `'sub.js'` might look like this:
+ *
+ * ```js
+ * process.on('message', (m) => {
+ * console.log('CHILD got message:', m);
+ * });
+ *
+ * // Causes the parent to print: PARENT got message: { foo: 'bar', baz: null }
+ * process.send({ foo: 'bar', baz: NaN });
+ * ```
+ *
+ * Child Node.js processes will have a `process.send()` method of their own
+ * that allows the child to send messages back to the parent.
+ *
+ * There is a special case when sending a `{cmd: 'NODE_foo'}` message. Messages
+ * containing a `NODE_` prefix in the `cmd` property are reserved for use within
+ * Node.js core and will not be emitted in the child's `'message'` event. Rather, such messages are emitted using the `'internalMessage'` event and are consumed internally by Node.js.
+ * Applications should avoid using such messages or listening for `'internalMessage'` events as it is subject to change without notice.
+ *
+ * The optional `sendHandle` argument that may be passed to `subprocess.send()` is
+ * for passing a TCP server or socket object to the child process. The child will
+ * receive the object as the second argument passed to the callback function
+ * registered on the `'message'` event. Any data that is received and buffered in
+ * the socket will not be sent to the child. Sending IPC sockets is not supported on Windows.
+ *
+ * The optional `callback` is a function that is invoked after the message is
+ * sent but before the child may have received it. The function is called with a
+ * single argument: `null` on success, or an `Error` object on failure.
+ *
+ * If no `callback` function is provided and the message cannot be sent, an `'error'` event will be emitted by the `ChildProcess` object. This can
+ * happen, for instance, when the child process has already exited.
+ *
+ * `subprocess.send()` will return `false` if the channel has closed or when the
+ * backlog of unsent messages exceeds a threshold that makes it unwise to send
+ * more. Otherwise, the method returns `true`. The `callback` function can be
+ * used to implement flow control.
+ *
+ * #### Example: sending a server object
+ *
+ * The `sendHandle` argument can be used, for instance, to pass the handle of
+ * a TCP server object to the child process as illustrated in the example below:
+ *
+ * ```js
+ * import { createServer } from 'node:net';
+ * import { fork } from 'node:child_process';
+ * const subprocess = fork('subprocess.js');
+ *
+ * // Open up the server object and send the handle.
+ * const server = createServer();
+ * server.on('connection', (socket) => {
+ * socket.end('handled by parent');
+ * });
+ * server.listen(1337, () => {
+ * subprocess.send('server', server);
+ * });
+ * ```
+ *
+ * The child would then receive the server object as:
+ *
+ * ```js
+ * process.on('message', (m, server) => {
+ * if (m === 'server') {
+ * server.on('connection', (socket) => {
+ * socket.end('handled by child');
+ * });
+ * }
+ * });
+ * ```
+ *
+ * Once the server is now shared between the parent and child, some connections
+ * can be handled by the parent and some by the child.
+ *
+ * While the example above uses a server created using the `node:net` module, `node:dgram` module servers use exactly the same workflow with the exceptions of
+ * listening on a `'message'` event instead of `'connection'` and using `server.bind()` instead of `server.listen()`. This is, however, only
+ * supported on Unix platforms.
+ *
+ * #### Example: sending a socket object
+ *
+ * Similarly, the `sendHandler` argument can be used to pass the handle of a
+ * socket to the child process. The example below spawns two children that each
+ * handle connections with "normal" or "special" priority:
+ *
+ * ```js
+ * import { createServer } from 'node:net';
+ * import { fork } from 'node:child_process';
+ * const normal = fork('subprocess.js', ['normal']);
+ * const special = fork('subprocess.js', ['special']);
+ *
+ * // Open up the server and send sockets to child. Use pauseOnConnect to prevent
+ * // the sockets from being read before they are sent to the child process.
+ * const server = createServer({ pauseOnConnect: true });
+ * server.on('connection', (socket) => {
+ *
+ * // If this is special priority...
+ * if (socket.remoteAddress === '74.125.127.100') {
+ * special.send('socket', socket);
+ * return;
+ * }
+ * // This is normal priority.
+ * normal.send('socket', socket);
+ * });
+ * server.listen(1337);
+ * ```
+ *
+ * The `subprocess.js` would receive the socket handle as the second argument
+ * passed to the event callback function:
+ *
+ * ```js
+ * process.on('message', (m, socket) => {
+ * if (m === 'socket') {
+ * if (socket) {
+ * // Check that the client socket exists.
+ * // It is possible for the socket to be closed between the time it is
+ * // sent and the time it is received in the child process.
+ * socket.end(`Request handled with ${process.argv[2]} priority`);
+ * }
+ * }
+ * });
+ * ```
+ *
+ * Do not use `.maxConnections` on a socket that has been passed to a subprocess.
+ * The parent cannot track when the socket is destroyed.
+ *
+ * Any `'message'` handlers in the subprocess should verify that `socket` exists,
+ * as the connection may have been closed during the time it takes to send the
+ * connection to the child.
+ * @since v0.5.9
+ * @param sendHandle `undefined`, or a [`net.Socket`](https://nodejs.org/docs/latest-v25.x/api/net.html#class-netsocket), [`net.Server`](https://nodejs.org/docs/latest-v25.x/api/net.html#class-netserver), or [`dgram.Socket`](https://nodejs.org/docs/latest-v25.x/api/dgram.html#class-dgramsocket) object.
+ * @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles. `options` supports the following properties:
+ */
+ send(message: Serializable, callback?: (error: Error | null) => void): boolean;
+ send(message: Serializable, sendHandle?: SendHandle, callback?: (error: Error | null) => void): boolean;
+ send(
+ message: Serializable,
+ sendHandle?: SendHandle,
+ options?: MessageOptions,
+ callback?: (error: Error | null) => void,
+ ): boolean;
+ /**
+ * Closes the IPC channel between parent and child, allowing the child to exit
+ * gracefully once there are no other connections keeping it alive. After calling
+ * this method the `subprocess.connected` and `process.connected` properties in
+ * both the parent and child (respectively) will be set to `false`, and it will be
+ * no longer possible to pass messages between the processes.
+ *
+ * The `'disconnect'` event will be emitted when there are no messages in the
+ * process of being received. This will most often be triggered immediately after
+ * calling `subprocess.disconnect()`.
+ *
+ * When the child process is a Node.js instance (e.g. spawned using {@link fork}), the `process.disconnect()` method can be invoked
+ * within the child process to close the IPC channel as well.
+ * @since v0.7.2
+ */
+ disconnect(): void;
+ /**
+ * By default, the parent will wait for the detached child to exit. To prevent the
+ * parent from waiting for a given `subprocess` to exit, use the `subprocess.unref()` method. Doing so will cause the parent's event loop to not
+ * include the child in its reference count, allowing the parent to exit
+ * independently of the child, unless there is an established IPC channel between
+ * the child and the parent.
+ *
+ * ```js
+ * import { spawn } from 'node:child_process';
+ *
+ * const subprocess = spawn(process.argv[0], ['child_program.js'], {
+ * detached: true,
+ * stdio: 'ignore',
+ * });
+ *
+ * subprocess.unref();
+ * ```
+ * @since v0.7.10
+ */
+ unref(): void;
+ /**
+ * Calling `subprocess.ref()` after making a call to `subprocess.unref()` will
+ * restore the removed reference count for the child process, forcing the parent
+ * to wait for the child to exit before exiting itself.
+ *
+ * ```js
+ * import { spawn } from 'node:child_process';
+ *
+ * const subprocess = spawn(process.argv[0], ['child_program.js'], {
+ * detached: true,
+ * stdio: 'ignore',
+ * });
+ *
+ * subprocess.unref();
+ * subprocess.ref();
+ * ```
+ * @since v0.7.10
+ */
+ ref(): void;
+ }
+ interface ChildProcess extends InternalEventEmitter {}
+ // return this object when stdio option is undefined or not specified
+ interface ChildProcessWithoutNullStreams extends ChildProcess {
+ stdin: Writable;
+ stdout: Readable;
+ stderr: Readable;
+ readonly stdio: [
+ Writable,
+ Readable,
+ Readable,
+ // stderr
+ Readable | Writable | null | undefined,
+ // extra, no modification
+ Readable | Writable | null | undefined, // extra, no modification
+ ];
+ }
+ // return this object when stdio option is a tuple of 3
+ interface ChildProcessByStdio
+ extends ChildProcess
+ {
+ stdin: I;
+ stdout: O;
+ stderr: E;
+ readonly stdio: [
+ I,
+ O,
+ E,
+ Readable | Writable | null | undefined,
+ // extra, no modification
+ Readable | Writable | null | undefined, // extra, no modification
+ ];
+ }
+ interface Control extends EventEmitter {
+ ref(): void;
+ unref(): void;
+ }
+ interface MessageOptions {
+ keepOpen?: boolean | undefined;
+ }
+ type IOType = "overlapped" | "pipe" | "ignore" | "inherit";
+ type StdioOptions = IOType | Array;
+ type SerializationType = "json" | "advanced";
+ interface MessagingOptions extends Abortable {
+ /**
+ * Specify the kind of serialization used for sending messages between processes.
+ * @default 'json'
+ */
+ serialization?: SerializationType | undefined;
+ /**
+ * The signal value to be used when the spawned process will be killed by the abort signal.
+ * @default 'SIGTERM'
+ */
+ killSignal?: NodeJS.Signals | number | undefined;
+ /**
+ * In milliseconds the maximum amount of time the process is allowed to run.
+ */
+ timeout?: number | undefined;
+ }
+ interface ProcessEnvOptions {
+ uid?: number | undefined;
+ gid?: number | undefined;
+ cwd?: string | URL | undefined;
+ env?: NodeJS.ProcessEnv | undefined;
+ }
+ interface CommonOptions extends ProcessEnvOptions {
+ /**
+ * @default false
+ */
+ windowsHide?: boolean | undefined;
+ /**
+ * @default 0
+ */
+ timeout?: number | undefined;
+ }
+ interface CommonSpawnOptions extends CommonOptions, MessagingOptions, Abortable {
+ argv0?: string | undefined;
+ /**
+ * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings.
+ * If passed as an array, the first element is used for `stdin`, the second for
+ * `stdout`, and the third for `stderr`. A fourth element can be used to
+ * specify the `stdio` behavior beyond the standard streams. See
+ * {@link ChildProcess.stdio} for more information.
+ *
+ * @default 'pipe'
+ */
+ stdio?: StdioOptions | undefined;
+ shell?: boolean | string | undefined;
+ windowsVerbatimArguments?: boolean | undefined;
+ }
+ interface SpawnOptions extends CommonSpawnOptions {
+ detached?: boolean | undefined;
+ }
+ interface SpawnOptionsWithoutStdio extends SpawnOptions {
+ stdio?: StdioPipeNamed | StdioPipe[] | undefined;
+ }
+ type StdioNull = "inherit" | "ignore" | Stream;
+ type StdioPipeNamed = "pipe" | "overlapped";
+ type StdioPipe = undefined | null | StdioPipeNamed;
+ interface SpawnOptionsWithStdioTuple<
+ Stdin extends StdioNull | StdioPipe,
+ Stdout extends StdioNull | StdioPipe,
+ Stderr extends StdioNull | StdioPipe,
+ > extends SpawnOptions {
+ stdio: [Stdin, Stdout, Stderr];
+ }
+ /**
+ * The `child_process.spawn()` method spawns a new process using the given `command`, with command-line arguments in `args`. If omitted, `args` defaults
+ * to an empty array.
+ *
+ * **If the `shell` option is enabled, do not pass unsanitized user input to this**
+ * **function. Any input containing shell metacharacters may be used to trigger**
+ * **arbitrary command execution.**
+ *
+ * A third argument may be used to specify additional options, with these defaults:
+ *
+ * ```js
+ * const defaults = {
+ * cwd: undefined,
+ * env: process.env,
+ * };
+ * ```
+ *
+ * Use `cwd` to specify the working directory from which the process is spawned.
+ * If not given, the default is to inherit the current working directory. If given,
+ * but the path does not exist, the child process emits an `ENOENT` error
+ * and exits immediately. `ENOENT` is also emitted when the command
+ * does not exist.
+ *
+ * Use `env` to specify environment variables that will be visible to the new
+ * process, the default is `process.env`.
+ *
+ * `undefined` values in `env` will be ignored.
+ *
+ * Example of running `ls -lh /usr`, capturing `stdout`, `stderr`, and the
+ * exit code:
+ *
+ * ```js
+ * import { spawn } from 'node:child_process';
+ * import { once } from 'node:events';
+ * const ls = spawn('ls', ['-lh', '/usr']);
+ *
+ * ls.stdout.on('data', (data) => {
+ * console.log(`stdout: ${data}`);
+ * });
+ *
+ * ls.stderr.on('data', (data) => {
+ * console.error(`stderr: ${data}`);
+ * });
+ *
+ * const [code] = await once(ls, 'close');
+ * console.log(`child process exited with code ${code}`);
+ * ```
+ *
+ * Example: A very elaborate way to run `ps ax | grep ssh`
+ *
+ * ```js
+ * import { spawn } from 'node:child_process';
+ * const ps = spawn('ps', ['ax']);
+ * const grep = spawn('grep', ['ssh']);
+ *
+ * ps.stdout.on('data', (data) => {
+ * grep.stdin.write(data);
+ * });
+ *
+ * ps.stderr.on('data', (data) => {
+ * console.error(`ps stderr: ${data}`);
+ * });
+ *
+ * ps.on('close', (code) => {
+ * if (code !== 0) {
+ * console.log(`ps process exited with code ${code}`);
+ * }
+ * grep.stdin.end();
+ * });
+ *
+ * grep.stdout.on('data', (data) => {
+ * console.log(data.toString());
+ * });
+ *
+ * grep.stderr.on('data', (data) => {
+ * console.error(`grep stderr: ${data}`);
+ * });
+ *
+ * grep.on('close', (code) => {
+ * if (code !== 0) {
+ * console.log(`grep process exited with code ${code}`);
+ * }
+ * });
+ * ```
+ *
+ * Example of checking for failed `spawn`:
+ *
+ * ```js
+ * import { spawn } from 'node:child_process';
+ * const subprocess = spawn('bad_command');
+ *
+ * subprocess.on('error', (err) => {
+ * console.error('Failed to start subprocess.');
+ * });
+ * ```
+ *
+ * Certain platforms (macOS, Linux) will use the value of `argv[0]` for the process
+ * title while others (Windows, SunOS) will use `command`.
+ *
+ * Node.js overwrites `argv[0]` with `process.execPath` on startup, so `process.argv[0]` in a Node.js child process will not match the `argv0` parameter passed to `spawn` from the parent. Retrieve
+ * it with the `process.argv0` property instead.
+ *
+ * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.kill()` on the child process except
+ * the error passed to the callback will be an `AbortError`:
+ *
+ * ```js
+ * import { spawn } from 'node:child_process';
+ * const controller = new AbortController();
+ * const { signal } = controller;
+ * const grep = spawn('grep', ['ssh'], { signal });
+ * grep.on('error', (err) => {
+ * // This will be called with err being an AbortError if the controller aborts
+ * });
+ * controller.abort(); // Stops the child process
+ * ```
+ * @since v0.1.90
+ * @param command The command to run.
+ * @param args List of string arguments.
+ */
+ function spawn(command: string, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(command: string, options: SpawnOptions): ChildProcess;
+ // overloads of spawn with 'args'
+ function spawn(
+ command: string,
+ args?: readonly string[],
+ options?: SpawnOptionsWithoutStdio,
+ ): ChildProcessWithoutNullStreams;
+ function spawn(
+ command: string,
+ args: readonly string[],
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: readonly string[],
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: readonly string[],
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: readonly string[],
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: readonly string[],
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: readonly string[],
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: readonly string[],
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: readonly string[],
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(command: string, args: readonly string[], options: SpawnOptions): ChildProcess;
+ interface ExecOptions extends CommonOptions {
+ shell?: string | undefined;
+ signal?: AbortSignal | undefined;
+ maxBuffer?: number | undefined;
+ killSignal?: NodeJS.Signals | number | undefined;
+ encoding?: string | null | undefined;
+ }
+ interface ExecOptionsWithStringEncoding extends ExecOptions {
+ encoding?: BufferEncoding | undefined;
+ }
+ interface ExecOptionsWithBufferEncoding extends ExecOptions {
+ encoding: "buffer" | null; // specify `null`.
+ }
+ // TODO: Just Plain Wrong™ (see also nodejs/node#57392)
+ interface ExecException extends Error {
+ cmd?: string;
+ killed?: boolean;
+ code?: number;
+ signal?: NodeJS.Signals;
+ stdout?: string;
+ stderr?: string;
+ }
+ /**
+ * Spawns a shell then executes the `command` within that shell, buffering any
+ * generated output. The `command` string passed to the exec function is processed
+ * directly by the shell and special characters (vary based on [shell](https://en.wikipedia.org/wiki/List_of_command-line_interpreters))
+ * need to be dealt with accordingly:
+ *
+ * ```js
+ * import { exec } from 'node:child_process';
+ *
+ * exec('"/path/to/test file/test.sh" arg1 arg2');
+ * // Double quotes are used so that the space in the path is not interpreted as
+ * // a delimiter of multiple arguments.
+ *
+ * exec('echo "The \\$HOME variable is $HOME"');
+ * // The $HOME variable is escaped in the first instance, but not in the second.
+ * ```
+ *
+ * **Never pass unsanitized user input to this function. Any input containing shell**
+ * **metacharacters may be used to trigger arbitrary command execution.**
+ *
+ * If a `callback` function is provided, it is called with the arguments `(error, stdout, stderr)`. On success, `error` will be `null`. On error, `error` will be an instance of `Error`. The
+ * `error.code` property will be
+ * the exit code of the process. By convention, any exit code other than `0` indicates an error. `error.signal` will be the signal that terminated the
+ * process.
+ *
+ * The `stdout` and `stderr` arguments passed to the callback will contain the
+ * stdout and stderr output of the child process. By default, Node.js will decode
+ * the output as UTF-8 and pass strings to the callback. The `encoding` option
+ * can be used to specify the character encoding used to decode the stdout and
+ * stderr output. If `encoding` is `'buffer'`, or an unrecognized character
+ * encoding, `Buffer` objects will be passed to the callback instead.
+ *
+ * ```js
+ * import { exec } from 'node:child_process';
+ * exec('cat *.js missing_file | wc -l', (error, stdout, stderr) => {
+ * if (error) {
+ * console.error(`exec error: ${error}`);
+ * return;
+ * }
+ * console.log(`stdout: ${stdout}`);
+ * console.error(`stderr: ${stderr}`);
+ * });
+ * ```
+ *
+ * If `timeout` is greater than `0`, the parent will send the signal
+ * identified by the `killSignal` property (the default is `'SIGTERM'`) if the
+ * child runs longer than `timeout` milliseconds.
+ *
+ * Unlike the [`exec(3)`](http://man7.org/linux/man-pages/man3/exec.3.html) POSIX system call, `child_process.exec()` does not replace
+ * the existing process and uses a shell to execute the command.
+ *
+ * If this method is invoked as its `util.promisify()` ed version, it returns
+ * a `Promise` for an `Object` with `stdout` and `stderr` properties. The returned `ChildProcess` instance is attached to the `Promise` as a `child` property. In
+ * case of an error (including any error resulting in an exit code other than 0), a
+ * rejected promise is returned, with the same `error` object given in the
+ * callback, but with two additional properties `stdout` and `stderr`.
+ *
+ * ```js
+ * import util from 'node:util';
+ * import child_process from 'node:child_process';
+ * const exec = util.promisify(child_process.exec);
+ *
+ * async function lsExample() {
+ * const { stdout, stderr } = await exec('ls');
+ * console.log('stdout:', stdout);
+ * console.error('stderr:', stderr);
+ * }
+ * lsExample();
+ * ```
+ *
+ * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.kill()` on the child process except
+ * the error passed to the callback will be an `AbortError`:
+ *
+ * ```js
+ * import { exec } from 'node:child_process';
+ * const controller = new AbortController();
+ * const { signal } = controller;
+ * const child = exec('grep ssh', { signal }, (error) => {
+ * console.error(error); // an AbortError
+ * });
+ * controller.abort();
+ * ```
+ * @since v0.1.90
+ * @param command The command to run, with space-separated arguments.
+ * @param callback called with the output when process terminates.
+ */
+ function exec(
+ command: string,
+ callback?: (error: ExecException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+ // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`.
+ function exec(
+ command: string,
+ options: ExecOptionsWithBufferEncoding,
+ callback?: (error: ExecException | null, stdout: NonSharedBuffer, stderr: NonSharedBuffer) => void,
+ ): ChildProcess;
+ // `options` with well-known or absent `encoding` means stdout/stderr are definitely `string`.
+ function exec(
+ command: string,
+ options: ExecOptionsWithStringEncoding,
+ callback?: (error: ExecException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+ // fallback if nothing else matches. Worst case is always `string | Buffer`.
+ function exec(
+ command: string,
+ options: ExecOptions | undefined | null,
+ callback?: (
+ error: ExecException | null,
+ stdout: string | NonSharedBuffer,
+ stderr: string | NonSharedBuffer,
+ ) => void,
+ ): ChildProcess;
+ interface PromiseWithChild extends Promise {
+ child: ChildProcess;
+ }
+ namespace exec {
+ function __promisify__(command: string): PromiseWithChild<{
+ stdout: string;
+ stderr: string;
+ }>;
+ function __promisify__(
+ command: string,
+ options: ExecOptionsWithBufferEncoding,
+ ): PromiseWithChild<{
+ stdout: NonSharedBuffer;
+ stderr: NonSharedBuffer;
+ }>;
+ function __promisify__(
+ command: string,
+ options: ExecOptionsWithStringEncoding,
+ ): PromiseWithChild<{
+ stdout: string;
+ stderr: string;
+ }>;
+ function __promisify__(
+ command: string,
+ options: ExecOptions | undefined | null,
+ ): PromiseWithChild<{
+ stdout: string | NonSharedBuffer;
+ stderr: string | NonSharedBuffer;
+ }>;
+ }
+ interface ExecFileOptions extends CommonOptions, Abortable {
+ maxBuffer?: number | undefined;
+ killSignal?: NodeJS.Signals | number | undefined;
+ windowsVerbatimArguments?: boolean | undefined;
+ shell?: boolean | string | undefined;
+ signal?: AbortSignal | undefined;
+ encoding?: string | null | undefined;
+ }
+ interface ExecFileOptionsWithStringEncoding extends ExecFileOptions {
+ encoding?: BufferEncoding | undefined;
+ }
+ interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions {
+ encoding: "buffer" | null;
+ }
+ /** @deprecated Use `ExecFileOptions` instead. */
+ interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions {}
+ // TODO: execFile exceptions can take many forms... this accurately describes none of them
+ type ExecFileException =
+ & Omit
+ & Omit
+ & { code?: string | number | null };
+ /**
+ * The `child_process.execFile()` function is similar to {@link exec} except that it does not spawn a shell by default. Rather, the specified
+ * executable `file` is spawned directly as a new process making it slightly more
+ * efficient than {@link exec}.
+ *
+ * The same options as {@link exec} are supported. Since a shell is
+ * not spawned, behaviors such as I/O redirection and file globbing are not
+ * supported.
+ *
+ * ```js
+ * import { execFile } from 'node:child_process';
+ * const child = execFile('node', ['--version'], (error, stdout, stderr) => {
+ * if (error) {
+ * throw error;
+ * }
+ * console.log(stdout);
+ * });
+ * ```
+ *
+ * The `stdout` and `stderr` arguments passed to the callback will contain the
+ * stdout and stderr output of the child process. By default, Node.js will decode
+ * the output as UTF-8 and pass strings to the callback. The `encoding` option
+ * can be used to specify the character encoding used to decode the stdout and
+ * stderr output. If `encoding` is `'buffer'`, or an unrecognized character
+ * encoding, `Buffer` objects will be passed to the callback instead.
+ *
+ * If this method is invoked as its `util.promisify()` ed version, it returns
+ * a `Promise` for an `Object` with `stdout` and `stderr` properties. The returned `ChildProcess` instance is attached to the `Promise` as a `child` property. In
+ * case of an error (including any error resulting in an exit code other than 0), a
+ * rejected promise is returned, with the same `error` object given in the
+ * callback, but with two additional properties `stdout` and `stderr`.
+ *
+ * ```js
+ * import util from 'node:util';
+ * import child_process from 'node:child_process';
+ * const execFile = util.promisify(child_process.execFile);
+ * async function getVersion() {
+ * const { stdout } = await execFile('node', ['--version']);
+ * console.log(stdout);
+ * }
+ * getVersion();
+ * ```
+ *
+ * **If the `shell` option is enabled, do not pass unsanitized user input to this**
+ * **function. Any input containing shell metacharacters may be used to trigger**
+ * **arbitrary command execution.**
+ *
+ * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.kill()` on the child process except
+ * the error passed to the callback will be an `AbortError`:
+ *
+ * ```js
+ * import { execFile } from 'node:child_process';
+ * const controller = new AbortController();
+ * const { signal } = controller;
+ * const child = execFile('node', ['--version'], { signal }, (error) => {
+ * console.error(error); // an AbortError
+ * });
+ * controller.abort();
+ * ```
+ * @since v0.1.91
+ * @param file The name or path of the executable file to run.
+ * @param args List of string arguments.
+ * @param callback Called with the output when process terminates.
+ */
+ // no `options` definitely means stdout/stderr are `string`.
+ function execFile(
+ file: string,
+ callback?: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+ function execFile(
+ file: string,
+ args: readonly string[] | undefined | null,
+ callback?: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+ // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`.
+ function execFile(
+ file: string,
+ options: ExecFileOptionsWithBufferEncoding,
+ callback?: (error: ExecFileException | null, stdout: NonSharedBuffer, stderr: NonSharedBuffer) => void,
+ ): ChildProcess;
+ function execFile(
+ file: string,
+ args: readonly string[] | undefined | null,
+ options: ExecFileOptionsWithBufferEncoding,
+ callback?: (error: ExecFileException | null, stdout: NonSharedBuffer, stderr: NonSharedBuffer) => void,
+ ): ChildProcess;
+ // `options` with well-known or absent `encoding` means stdout/stderr are definitely `string`.
+ function execFile(
+ file: string,
+ options: ExecFileOptionsWithStringEncoding,
+ callback?: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+ function execFile(
+ file: string,
+ args: readonly string[] | undefined | null,
+ options: ExecFileOptionsWithStringEncoding,
+ callback?: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+ // fallback if nothing else matches. Worst case is always `string | Buffer`.
+ function execFile(
+ file: string,
+ options: ExecFileOptions | undefined | null,
+ callback:
+ | ((
+ error: ExecFileException | null,
+ stdout: string | NonSharedBuffer,
+ stderr: string | NonSharedBuffer,
+ ) => void)
+ | undefined
+ | null,
+ ): ChildProcess;
+ function execFile(
+ file: string,
+ args: readonly string[] | undefined | null,
+ options: ExecFileOptions | undefined | null,
+ callback:
+ | ((
+ error: ExecFileException | null,
+ stdout: string | NonSharedBuffer,
+ stderr: string | NonSharedBuffer,
+ ) => void)
+ | undefined
+ | null,
+ ): ChildProcess;
+ namespace execFile {
+ function __promisify__(file: string): PromiseWithChild<{
+ stdout: string;
+ stderr: string;
+ }>;
+ function __promisify__(
+ file: string,
+ args: readonly string[] | undefined | null,
+ ): PromiseWithChild<{
+ stdout: string;
+ stderr: string;
+ }>;
+ function __promisify__(
+ file: string,
+ options: ExecFileOptionsWithBufferEncoding,
+ ): PromiseWithChild<{
+ stdout: NonSharedBuffer;
+ stderr: NonSharedBuffer;
+ }>;
+ function __promisify__(
+ file: string,
+ args: readonly string[] | undefined | null,
+ options: ExecFileOptionsWithBufferEncoding,
+ ): PromiseWithChild<{
+ stdout: NonSharedBuffer;
+ stderr: NonSharedBuffer;
+ }>;
+ function __promisify__(
+ file: string,
+ options: ExecFileOptionsWithStringEncoding,
+ ): PromiseWithChild<{
+ stdout: string;
+ stderr: string;
+ }>;
+ function __promisify__(
+ file: string,
+ args: readonly string[] | undefined | null,
+ options: ExecFileOptionsWithStringEncoding,
+ ): PromiseWithChild<{
+ stdout: string;
+ stderr: string;
+ }>;
+ function __promisify__(
+ file: string,
+ options: ExecFileOptions | undefined | null,
+ ): PromiseWithChild<{
+ stdout: string | NonSharedBuffer;
+ stderr: string | NonSharedBuffer;
+ }>;
+ function __promisify__(
+ file: string,
+ args: readonly string[] | undefined | null,
+ options: ExecFileOptions | undefined | null,
+ ): PromiseWithChild<{
+ stdout: string | NonSharedBuffer;
+ stderr: string | NonSharedBuffer;
+ }>;
+ }
+ interface ForkOptions extends ProcessEnvOptions, MessagingOptions, Abortable {
+ execPath?: string | undefined;
+ execArgv?: string[] | undefined;
+ silent?: boolean | undefined;
+ /**
+ * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings.
+ * If passed as an array, the first element is used for `stdin`, the second for
+ * `stdout`, and the third for `stderr`. A fourth element can be used to
+ * specify the `stdio` behavior beyond the standard streams. See
+ * {@link ChildProcess.stdio} for more information.
+ *
+ * @default 'pipe'
+ */
+ stdio?: StdioOptions | undefined;
+ detached?: boolean | undefined;
+ windowsVerbatimArguments?: boolean | undefined;
+ }
+ /**
+ * The `child_process.fork()` method is a special case of {@link spawn} used specifically to spawn new Node.js processes.
+ * Like {@link spawn}, a `ChildProcess` object is returned. The
+ * returned `ChildProcess` will have an additional communication channel
+ * built-in that allows messages to be passed back and forth between the parent and
+ * child. See `subprocess.send()` for details.
+ *
+ * Keep in mind that spawned Node.js child processes are
+ * independent of the parent with exception of the IPC communication channel
+ * that is established between the two. Each process has its own memory, with
+ * their own V8 instances. Because of the additional resource allocations
+ * required, spawning a large number of child Node.js processes is not
+ * recommended.
+ *
+ * By default, `child_process.fork()` will spawn new Node.js instances using the `process.execPath` of the parent process. The `execPath` property in the `options` object allows for an alternative
+ * execution path to be used.
+ *
+ * Node.js processes launched with a custom `execPath` will communicate with the
+ * parent process using the file descriptor (fd) identified using the
+ * environment variable `NODE_CHANNEL_FD` on the child process.
+ *
+ * Unlike the [`fork(2)`](http://man7.org/linux/man-pages/man2/fork.2.html) POSIX system call, `child_process.fork()` does not clone the
+ * current process.
+ *
+ * The `shell` option available in {@link spawn} is not supported by `child_process.fork()` and will be ignored if set.
+ *
+ * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.kill()` on the child process except
+ * the error passed to the callback will be an `AbortError`:
+ *
+ * ```js
+ * if (process.argv[2] === 'child') {
+ * setTimeout(() => {
+ * console.log(`Hello from ${process.argv[2]}!`);
+ * }, 1_000);
+ * } else {
+ * import { fork } from 'node:child_process';
+ * const controller = new AbortController();
+ * const { signal } = controller;
+ * const child = fork(__filename, ['child'], { signal });
+ * child.on('error', (err) => {
+ * // This will be called with err being an AbortError if the controller aborts
+ * });
+ * controller.abort(); // Stops the child process
+ * }
+ * ```
+ * @since v0.5.0
+ * @param modulePath The module to run in the child.
+ * @param args List of string arguments.
+ */
+ function fork(modulePath: string | URL, options?: ForkOptions): ChildProcess;
+ function fork(modulePath: string | URL, args?: readonly string[], options?: ForkOptions): ChildProcess;
+ interface SpawnSyncOptions extends CommonSpawnOptions {
+ input?: string | NodeJS.ArrayBufferView | undefined;
+ maxBuffer?: number | undefined;
+ encoding?: BufferEncoding | "buffer" | null | undefined;
+ }
+ interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions {
+ encoding: BufferEncoding;
+ }
+ interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions {
+ encoding?: "buffer" | null | undefined;
+ }
+ interface SpawnSyncReturns {
+ pid: number;
+ output: Array;
+ stdout: T;
+ stderr: T;
+ status: number | null;
+ signal: NodeJS.Signals | null;
+ error?: Error;
+ }
+ /**
+ * The `child_process.spawnSync()` method is generally identical to {@link spawn} with the exception that the function will not return
+ * until the child process has fully closed. When a timeout has been encountered
+ * and `killSignal` is sent, the method won't return until the process has
+ * completely exited. If the process intercepts and handles the `SIGTERM` signal
+ * and doesn't exit, the parent process will wait until the child process has
+ * exited.
+ *
+ * **If the `shell` option is enabled, do not pass unsanitized user input to this**
+ * **function. Any input containing shell metacharacters may be used to trigger**
+ * **arbitrary command execution.**
+ * @since v0.11.12
+ * @param command The command to run.
+ * @param args List of string arguments.
+ */
+ function spawnSync(command: string): SpawnSyncReturns;
+ function spawnSync(command: string, options: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns;
+ function spawnSync(command: string, options: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns;
+ function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns;
+ function spawnSync(command: string, args: readonly string[]): SpawnSyncReturns;
+ function spawnSync(
+ command: string,
+ args: readonly string[],
+ options: SpawnSyncOptionsWithStringEncoding,
+ ): SpawnSyncReturns;
+ function spawnSync(
+ command: string,
+ args: readonly string[],
+ options: SpawnSyncOptionsWithBufferEncoding,
+ ): SpawnSyncReturns;
+ function spawnSync(
+ command: string,
+ args?: readonly string[],
+ options?: SpawnSyncOptions,
+ ): SpawnSyncReturns;
+ interface CommonExecOptions extends CommonOptions {
+ input?: string | NodeJS.ArrayBufferView | undefined;
+ /**
+ * Can be set to 'pipe', 'inherit, or 'ignore', or an array of these strings.
+ * If passed as an array, the first element is used for `stdin`, the second for
+ * `stdout`, and the third for `stderr`. A fourth element can be used to
+ * specify the `stdio` behavior beyond the standard streams. See
+ * {@link ChildProcess.stdio} for more information.
+ *
+ * @default 'pipe'
+ */
+ stdio?: StdioOptions | undefined;
+ killSignal?: NodeJS.Signals | number | undefined;
+ maxBuffer?: number | undefined;
+ encoding?: BufferEncoding | "buffer" | null | undefined;
+ }
+ interface ExecSyncOptions extends CommonExecOptions {
+ shell?: string | undefined;
+ }
+ interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions {
+ encoding: BufferEncoding;
+ }
+ interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions {
+ encoding?: "buffer" | null | undefined;
+ }
+ /**
+ * The `child_process.execSync()` method is generally identical to {@link exec} with the exception that the method will not return
+ * until the child process has fully closed. When a timeout has been encountered
+ * and `killSignal` is sent, the method won't return until the process has
+ * completely exited. If the child process intercepts and handles the `SIGTERM` signal and doesn't exit, the parent process will wait until the child process
+ * has exited.
+ *
+ * If the process times out or has a non-zero exit code, this method will throw.
+ * The `Error` object will contain the entire result from {@link spawnSync}.
+ *
+ * **Never pass unsanitized user input to this function. Any input containing shell**
+ * **metacharacters may be used to trigger arbitrary command execution.**
+ * @since v0.11.12
+ * @param command The command to run.
+ * @return The stdout from the command.
+ */
+ function execSync(command: string): NonSharedBuffer;
+ function execSync(command: string, options: ExecSyncOptionsWithStringEncoding): string;
+ function execSync(command: string, options: ExecSyncOptionsWithBufferEncoding): NonSharedBuffer;
+ function execSync(command: string, options?: ExecSyncOptions): string | NonSharedBuffer;
+ interface ExecFileSyncOptions extends CommonExecOptions {
+ shell?: boolean | string | undefined;
+ }
+ interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions {
+ encoding: BufferEncoding;
+ }
+ interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions {
+ encoding?: "buffer" | null | undefined; // specify `null`.
+ }
+ /**
+ * The `child_process.execFileSync()` method is generally identical to {@link execFile} with the exception that the method will not
+ * return until the child process has fully closed. When a timeout has been
+ * encountered and `killSignal` is sent, the method won't return until the process
+ * has completely exited.
+ *
+ * If the child process intercepts and handles the `SIGTERM` signal and
+ * does not exit, the parent process will still wait until the child process has
+ * exited.
+ *
+ * If the process times out or has a non-zero exit code, this method will throw an `Error` that will include the full result of the underlying {@link spawnSync}.
+ *
+ * **If the `shell` option is enabled, do not pass unsanitized user input to this**
+ * **function. Any input containing shell metacharacters may be used to trigger**
+ * **arbitrary command execution.**
+ * @since v0.11.12
+ * @param file The name or path of the executable file to run.
+ * @param args List of string arguments.
+ * @return The stdout from the command.
+ */
+ function execFileSync(file: string): NonSharedBuffer;
+ function execFileSync(file: string, options: ExecFileSyncOptionsWithStringEncoding): string;
+ function execFileSync(file: string, options: ExecFileSyncOptionsWithBufferEncoding): NonSharedBuffer;
+ function execFileSync(file: string, options?: ExecFileSyncOptions): string | NonSharedBuffer;
+ function execFileSync(file: string, args: readonly string[]): NonSharedBuffer;
+ function execFileSync(
+ file: string,
+ args: readonly string[],
+ options: ExecFileSyncOptionsWithStringEncoding,
+ ): string;
+ function execFileSync(
+ file: string,
+ args: readonly string[],
+ options: ExecFileSyncOptionsWithBufferEncoding,
+ ): NonSharedBuffer;
+ function execFileSync(
+ file: string,
+ args?: readonly string[],
+ options?: ExecFileSyncOptions,
+ ): string | NonSharedBuffer;
+}
+declare module "child_process" {
+ export * from "node:child_process";
+}
diff --git a/mqtt-backend/node_modules/@types/node/cluster.d.ts b/mqtt-backend/node_modules/@types/node/cluster.d.ts
new file mode 100644
index 0000000..80f55ae
--- /dev/null
+++ b/mqtt-backend/node_modules/@types/node/cluster.d.ts
@@ -0,0 +1,432 @@
+declare module "node:cluster" {
+ import * as child_process from "node:child_process";
+ import { EventEmitter, InternalEventEmitter } from "node:events";
+ class Worker implements EventEmitter {
+ constructor(options?: cluster.WorkerOptions);
+ /**
+ * Each new worker is given its own unique id, this id is stored in the `id`.
+ *
+ * While a worker is alive, this is the key that indexes it in `cluster.workers`.
+ * @since v0.8.0
+ */
+ id: number;
+ /**
+ * All workers are created using [`child_process.fork()`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#child_processforkmodulepath-args-options), the returned object
+ * from this function is stored as `.process`. In a worker, the global `process` is stored.
+ *
+ * See: [Child Process module](https://nodejs.org/docs/latest-v25.x/api/child_process.html#child_processforkmodulepath-args-options).
+ *
+ * Workers will call `process.exit(0)` if the `'disconnect'` event occurs
+ * on `process` and `.exitedAfterDisconnect` is not `true`. This protects against
+ * accidental disconnection.
+ * @since v0.7.0
+ */
+ process: child_process.ChildProcess;
+ /**
+ * Send a message to a worker or primary, optionally with a handle.
+ *
+ * In the primary, this sends a message to a specific worker. It is identical to [`ChildProcess.send()`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#subprocesssendmessage-sendhandle-options-callback).
+ *
+ * In a worker, this sends a message to the primary. It is identical to `process.send()`.
+ *
+ * This example will echo back all messages from the primary:
+ *
+ * ```js
+ * if (cluster.isPrimary) {
+ * const worker = cluster.fork();
+ * worker.send('hi there');
+ *
+ * } else if (cluster.isWorker) {
+ * process.on('message', (msg) => {
+ * process.send(msg);
+ * });
+ * }
+ * ```
+ * @since v0.7.0
+ * @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles.
+ */
+ send(message: child_process.Serializable, callback?: (error: Error | null) => void): boolean;
+ send(
+ message: child_process.Serializable,
+ sendHandle: child_process.SendHandle,
+ callback?: (error: Error | null) => void,
+ ): boolean;
+ send(
+ message: child_process.Serializable,
+ sendHandle: child_process.SendHandle,
+ options?: child_process.MessageOptions,
+ callback?: (error: Error | null) => void,
+ ): boolean;
+ /**
+ * This function will kill the worker. In the primary worker, it does this by
+ * disconnecting the `worker.process`, and once disconnected, killing with `signal`. In the worker, it does it by killing the process with `signal`.
+ *
+ * The `kill()` function kills the worker process without waiting for a graceful
+ * disconnect, it has the same behavior as `worker.process.kill()`.
+ *
+ * This method is aliased as `worker.destroy()` for backwards compatibility.
+ *
+ * In a worker, `process.kill()` exists, but it is not this function;
+ * it is [`kill()`](https://nodejs.org/docs/latest-v25.x/api/process.html#processkillpid-signal).
+ * @since v0.9.12
+ * @param [signal='SIGTERM'] Name of the kill signal to send to the worker process.
+ */
+ kill(signal?: string): void;
+ destroy(signal?: string): void;
+ /**
+ * In a worker, this function will close all servers, wait for the `'close'` event
+ * on those servers, and then disconnect the IPC channel.
+ *
+ * In the primary, an internal message is sent to the worker causing it to call `.disconnect()` on itself.
+ *
+ * Causes `.exitedAfterDisconnect` to be set.
+ *
+ * After a server is closed, it will no longer accept new connections,
+ * but connections may be accepted by any other listening worker. Existing
+ * connections will be allowed to close as usual. When no more connections exist,
+ * see `server.close()`, the IPC channel to the worker will close allowing it
+ * to die gracefully.
+ *
+ * The above applies _only_ to server connections, client connections are not
+ * automatically closed by workers, and disconnect does not wait for them to close
+ * before exiting.
+ *
+ * In a worker, `process.disconnect` exists, but it is not this function;
+ * it is `disconnect()`.
+ *
+ * Because long living server connections may block workers from disconnecting, it
+ * may be useful to send a message, so application specific actions may be taken to
+ * close them. It also may be useful to implement a timeout, killing a worker if
+ * the `'disconnect'` event has not been emitted after some time.
+ *
+ * ```js
+ * import net from 'node:net';
+ *
+ * if (cluster.isPrimary) {
+ * const worker = cluster.fork();
+ * let timeout;
+ *
+ * worker.on('listening', (address) => {
+ * worker.send('shutdown');
+ * worker.disconnect();
+ * timeout = setTimeout(() => {
+ * worker.kill();
+ * }, 2000);
+ * });
+ *
+ * worker.on('disconnect', () => {
+ * clearTimeout(timeout);
+ * });
+ *
+ * } else if (cluster.isWorker) {
+ * const server = net.createServer((socket) => {
+ * // Connections never end
+ * });
+ *
+ * server.listen(8000);
+ *
+ * process.on('message', (msg) => {
+ * if (msg === 'shutdown') {
+ * // Initiate graceful close of any connections to server
+ * }
+ * });
+ * }
+ * ```
+ * @since v0.7.7
+ * @return A reference to `worker`.
+ */
+ disconnect(): this;
+ /**
+ * This function returns `true` if the worker is connected to its primary via its
+ * IPC channel, `false` otherwise. A worker is connected to its primary after it
+ * has been created. It is disconnected after the `'disconnect'` event is emitted.
+ * @since v0.11.14
+ */
+ isConnected(): boolean;
+ /**
+ * This function returns `true` if the worker's process has terminated (either
+ * because of exiting or being signaled). Otherwise, it returns `false`.
+ *
+ * ```js
+ * import cluster from 'node:cluster';
+ * import http from 'node:http';
+ * import { availableParallelism } from 'node:os';
+ * import process from 'node:process';
+ *
+ * const numCPUs = availableParallelism();
+ *
+ * if (cluster.isPrimary) {
+ * console.log(`Primary ${process.pid} is running`);
+ *
+ * // Fork workers.
+ * for (let i = 0; i < numCPUs; i++) {
+ * cluster.fork();
+ * }
+ *
+ * cluster.on('fork', (worker) => {
+ * console.log('worker is dead:', worker.isDead());
+ * });
+ *
+ * cluster.on('exit', (worker, code, signal) => {
+ * console.log('worker is dead:', worker.isDead());
+ * });
+ * } else {
+ * // Workers can share any TCP connection. In this case, it is an HTTP server.
+ * http.createServer((req, res) => {
+ * res.writeHead(200);
+ * res.end(`Current process\n ${process.pid}`);
+ * process.kill(process.pid);
+ * }).listen(8000);
+ * }
+ * ```
+ * @since v0.11.14
+ */
+ isDead(): boolean;
+ /**
+ * This property is `true` if the worker exited due to `.disconnect()`.
+ * If the worker exited any other way, it is `false`. If the
+ * worker has not exited, it is `undefined`.
+ *
+ * The boolean `worker.exitedAfterDisconnect` allows distinguishing between
+ * voluntary and accidental exit, the primary may choose not to respawn a worker
+ * based on this value.
+ *
+ * ```js
+ * cluster.on('exit', (worker, code, signal) => {
+ * if (worker.exitedAfterDisconnect === true) {
+ * console.log('Oh, it was just voluntary – no need to worry');
+ * }
+ * });
+ *
+ * // kill worker
+ * worker.kill();
+ * ```
+ * @since v6.0.0
+ */
+ exitedAfterDisconnect: boolean;
+ }
+ interface Worker extends InternalEventEmitter {}
+ type _Worker = Worker;
+ namespace cluster {
+ interface Worker extends _Worker {}
+ interface WorkerOptions {
+ id?: number | undefined;
+ process?: child_process.ChildProcess | undefined;
+ state?: string | undefined;
+ }
+ interface WorkerEventMap {
+ "disconnect": [];
+ "error": [error: Error];
+ "exit": [code: number, signal: string];
+ "listening": [address: Address];
+ "message": [message: any, handle: child_process.SendHandle];
+ "online": [];
+ }
+ interface ClusterSettings {
+ /**
+ * List of string arguments passed to the Node.js executable.
+ * @default process.execArgv
+ */
+ execArgv?: string[] | undefined;
+ /**
+ * File path to worker file.
+ * @default process.argv[1]
+ */
+ exec?: string | undefined;
+ /**
+ * String arguments passed to worker.
+ * @default process.argv.slice(2)
+ */
+ args?: readonly string[] | undefined;
+ /**
+ * Whether or not to send output to parent's stdio.
+ * @default false
+ */
+ silent?: boolean | undefined;
+ /**
+ * Configures the stdio of forked processes. Because the cluster module relies on IPC to function, this configuration must
+ * contain an `'ipc'` entry. When this option is provided, it overrides `silent`. See [`child_prcess.spawn()`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#child_processspawncommand-args-options)'s
+ * [`stdio`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#optionsstdio).
+ */
+ stdio?: any[] | undefined;
+ /**
+ * Sets the user identity of the process. (See [`setuid(2)`](https://man7.org/linux/man-pages/man2/setuid.2.html).)
+ */
+ uid?: number | undefined;
+ /**
+ * Sets the group identity of the process. (See [`setgid(2)`](https://man7.org/linux/man-pages/man2/setgid.2.html).)
+ */
+ gid?: number | undefined;
+ /**
+ * Sets inspector port of worker. This can be a number, or a function that takes no arguments and returns a number.
+ * By default each worker gets its own port, incremented from the primary's `process.debugPort`.
+ */
+ inspectPort?: number | (() => number) | undefined;
+ /**
+ * Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`.
+ * See [Advanced serialization for `child_process`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#advanced-serialization) for more details.
+ * @default false
+ */
+ serialization?: "json" | "advanced" | undefined;
+ /**
+ * Current working directory of the worker process.
+ * @default undefined (inherits from parent process)
+ */
+ cwd?: string | undefined;
+ /**
+ * Hide the forked processes console window that would normally be created on Windows systems.
+ * @default false
+ */
+ windowsHide?: boolean | undefined;
+ }
+ interface Address {
+ address: string;
+ port: number;
+ /**
+ * The `addressType` is one of:
+ *
+ * * `4` (TCPv4)
+ * * `6` (TCPv6)
+ * * `-1` (Unix domain socket)
+ * * `'udp4'` or `'udp6'` (UDPv4 or UDPv6)
+ */
+ addressType: 4 | 6 | -1 | "udp4" | "udp6";
+ }
+ interface ClusterEventMap {
+ "disconnect": [worker: Worker];
+ "exit": [worker: Worker, code: number, signal: string];
+ "fork": [worker: Worker];
+ "listening": [worker: Worker, address: Address];
+ "message": [worker: Worker, message: any, handle: child_process.SendHandle];
+ "online": [worker: Worker];
+ "setup": [settings: ClusterSettings];
+ }
+ interface Cluster extends InternalEventEmitter {
+ /**
+ * A `Worker` object contains all public information and method about a worker.
+ * In the primary it can be obtained using `cluster.workers`. In a worker
+ * it can be obtained using `cluster.worker`.
+ * @since v0.7.0
+ */
+ Worker: typeof Worker;
+ disconnect(callback?: () => void): void;
+ /**
+ * Spawn a new worker process.
+ *
+ * This can only be called from the primary process.
+ * @param env Key/value pairs to add to worker process environment.
+ * @since v0.6.0
+ */
+ fork(env?: any): Worker;
+ /** @deprecated since v16.0.0 - use isPrimary. */
+ readonly isMaster: boolean;
+ /**
+ * True if the process is a primary. This is determined by the `process.env.NODE_UNIQUE_ID`. If `process.env.NODE_UNIQUE_ID`
+ * is undefined, then `isPrimary` is `true`.
+ * @since v16.0.0
+ */
+ readonly isPrimary: boolean;
+ /**
+ * True if the process is not a primary (it is the negation of `cluster.isPrimary`).
+ * @since v0.6.0
+ */
+ readonly isWorker: boolean;
+ /**
+ * The scheduling policy, either `cluster.SCHED_RR` for round-robin or `cluster.SCHED_NONE` to leave it to the operating system. This is a
+ * global setting and effectively frozen once either the first worker is spawned, or [`.setupPrimary()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clustersetupprimarysettings)
+ * is called, whichever comes first.
+ *
+ * `SCHED_RR` is the default on all operating systems except Windows. Windows will change to `SCHED_RR` once libuv is able to effectively distribute
+ * IOCP handles without incurring a large performance hit.
+ *
+ * `cluster.schedulingPolicy` can also be set through the `NODE_CLUSTER_SCHED_POLICY` environment variable. Valid values are `'rr'` and `'none'`.
+ * @since v0.11.2
+ */
+ schedulingPolicy: number;
+ /**
+ * After calling [`.setupPrimary()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clustersetupprimarysettings)
+ * (or [`.fork()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clusterforkenv)) this settings object will contain
+ * the settings, including the default values.
+ *
+ * This object is not intended to be changed or set manually.
+ * @since v0.7.1
+ */
+ readonly settings: ClusterSettings;
+ /** @deprecated since v16.0.0 - use [`.setupPrimary()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clustersetupprimarysettings) instead. */
+ setupMaster(settings?: ClusterSettings): void;
+ /**
+ * `setupPrimary` is used to change the default 'fork' behavior. Once called, the settings will be present in `cluster.settings`.
+ *
+ * Any settings changes only affect future calls to [`.fork()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clusterforkenv)
+ * and have no effect on workers that are already running.
+ *
+ * The only attribute of a worker that cannot be set via `.setupPrimary()` is the `env` passed to
+ * [`.fork()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clusterforkenv).
+ *
+ * The defaults above apply to the first call only; the defaults for later calls are the current values at the time of
+ * `cluster.setupPrimary()` is called.
+ *
+ * ```js
+ * import cluster from 'node:cluster';
+ *
+ * cluster.setupPrimary({
+ * exec: 'worker.js',
+ * args: ['--use', 'https'],
+ * silent: true,
+ * });
+ * cluster.fork(); // https worker
+ * cluster.setupPrimary({
+ * exec: 'worker.js',
+ * args: ['--use', 'http'],
+ * });
+ * cluster.fork(); // http worker
+ * ```
+ *
+ * This can only be called from the primary process.
+ * @since v16.0.0
+ */
+ setupPrimary(settings?: ClusterSettings): void;
+ /**
+ * A reference to the current worker object. Not available in the primary process.
+ *
+ * ```js
+ * import cluster from 'node:cluster';
+ *
+ * if (cluster.isPrimary) {
+ * console.log('I am primary');
+ * cluster.fork();
+ * cluster.fork();
+ * } else if (cluster.isWorker) {
+ * console.log(`I am worker #${cluster.worker.id}`);
+ * }
+ * ```
+ * @since v0.7.0
+ */
+ readonly worker?: Worker;
+ /**
+ * A hash that stores the active worker objects, keyed by `id` field. This makes it easy to loop through all the workers. It is only available in the primary process.
+ *
+ * A worker is removed from `cluster.workers` after the worker has disconnected _and_ exited. The order between these two events cannot be determined in advance. However, it
+ * is guaranteed that the removal from the `cluster.workers` list happens before the last `'disconnect'` or `'exit'` event is emitted.
+ *
+ * ```js
+ * import cluster from 'node:cluster';
+ *
+ * for (const worker of Object.values(cluster.workers)) {
+ * worker.send('big announcement to all workers');
+ * }
+ * ```
+ * @since v0.7.0
+ */
+ readonly workers?: NodeJS.Dict;
+ readonly SCHED_NONE: number;
+ readonly SCHED_RR: number;
+ }
+ }
+ var cluster: cluster.Cluster;
+ export = cluster;
+}
+declare module "cluster" {
+ import cluster = require("node:cluster");
+ export = cluster;
+}
diff --git a/mqtt-backend/node_modules/@types/node/compatibility/iterators.d.ts b/mqtt-backend/node_modules/@types/node/compatibility/iterators.d.ts
new file mode 100644
index 0000000..156e785
--- /dev/null
+++ b/mqtt-backend/node_modules/@types/node/compatibility/iterators.d.ts
@@ -0,0 +1,21 @@
+// Backwards-compatible iterator interfaces, augmented with iterator helper methods by lib.esnext.iterator in TypeScript 5.6.
+// The IterableIterator interface does not contain these methods, which creates assignability issues in places where IteratorObjects
+// are expected (eg. DOM-compatible APIs) if lib.esnext.iterator is loaded.
+// Also ensures that iterators returned by the Node API, which inherit from Iterator.prototype, correctly expose the iterator helper methods
+// if lib.esnext.iterator is loaded.
+// TODO: remove once this package no longer supports TS 5.5, and replace NodeJS.BuiltinIteratorReturn with BuiltinIteratorReturn.
+
+// Placeholders for TS <5.6
+interface IteratorObject {}
+interface AsyncIteratorObject {}
+
+declare namespace NodeJS {
+ // Populate iterator methods for TS <5.6
+ interface Iterator extends globalThis.Iterator {}
+ interface AsyncIterator