{"_id":"@annadata/capacitor-mqtt-quic","_rev":"13-243f881d6baee6d1b68f7f1b9fadb8ee","name":"@annadata/capacitor-mqtt-quic","dist-tags":{"latest":"0.2.4"},"versions":{"0.1.0":{"name":"@annadata/capacitor-mqtt-quic","version":"0.1.0","keywords":["capacitor","plugin","native","mqtt","quic","ngtcp2"],"license":"MIT","_id":"@annadata/capacitor-mqtt-quic@0.1.0","maintainers":[{"name":"annadata","email":"annadataai.app@gmail.com"}],"dist":{"shasum":"dcc1bd308dcdc403d258c43aeaf1ee5680013854","tarball":"https://registry.npmjs.org/@annadata/capacitor-mqtt-quic/-/capacitor-mqtt-quic-0.1.0.tgz","fileCount":64,"integrity":"sha512-LXsAeyOtdAjI5Fjsms8DEYi3fTI60R5mc2nGGwhe+J/1f2Fs6qygC2Z+9y6braH8G0rnss2BeBGQxSVX7XwBKw==","signatures":[{"sig":"MEYCIQCDoWga8vTHTVV7aZVATZYQWix4u6Lu/TMWTzqsoHcs9QIhAJikW6DnQPXE+yRhUUlNYuprEZ7MbiRv6hkjMQjdNdO/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3240652},"main":"dist/plugin.cjs.js","type":"module","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","engines":{"node":">=18"},"gitHead":"ec83fa92460c212e1ff0f335ef6021ae0f19c4c7","scripts":{"lint":"eslint src --ext ts","build":"npm run build:tsc && npm run build:rollup","watch":"rollup -c rollup.config.js -w","prepack":"npm run clean:build-artifacts","build:tsc":"tsc","build:rollup":"rollup -c rollup.config.js","prepublishOnly":"npm run build && npm run clean:build-artifacts","clean:build-artifacts":"node -e \"const fs=require('fs'),path=require('path');['android/build','android/install','android/.gradle','ios/build','ios/install','ios/libs','ios/include'].forEach(d=>{const p=path.join(__dirname,d);if(fs.existsSync(p)){console.log('Removing:',p);require('child_process').execSync('rm -rf '+p,{stdio:'inherit'})}})\""},"_npmUser":{"name":"annadata","email":"annadataai.app@gmail.com"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"_npmVersion":"11.8.0","description":"MQTT-over-QUIC client for Capacitor (iOS/Android). Uses ngtcp2 for QUIC; MQTT over WebSocket fallback on web.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"mqtt":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.1","rollup":"^4.28.1","typescript":"~5.6.0","@types/node":"^22.10.0","@capacitor/cli":"^7.4.3","@capacitor/ios":"^7.4.4","@capacitor/core":"^7.4.3","@capacitor/android":"^7.4.4","@rollup/plugin-node-resolve":"^16.0.0"},"peerDependencies":{"@capacitor/core":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-mqtt-quic_0.1.0_1769288044906_0.6588604965385227","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@annadata/capacitor-mqtt-quic","version":"0.1.1","keywords":["capacitor","plugin","native","mqtt","quic","ngtcp2"],"license":"MIT","_id":"@annadata/capacitor-mqtt-quic@0.1.1","maintainers":[{"name":"annadata","email":"annadataai.app@gmail.com"}],"dist":{"shasum":"ca001377a8bfd5d441379afa2dcbbbdb2abe2a18","tarball":"https://registry.npmjs.org/@annadata/capacitor-mqtt-quic/-/capacitor-mqtt-quic-0.1.1.tgz","fileCount":211,"integrity":"sha512-p4kfMQlRy18BCF5MdeTnopDLBYfLpRi4Fh6mpBclpa/0MBczwwOy9ehLX4pcaL1MisGmup7aRLBZLlbvr9hI+g==","signatures":[{"sig":"MEUCIQCf/2i+8pjIggDuA5o93jONytm8OUBo8gON27azyFYHyAIgNLJ6SfgFQbWcp7ItmmyRVRcKpMlUmfv7WhywKMuM8QU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13934855},"main":"dist/plugin.cjs.js","type":"module","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","engines":{"node":">=18"},"gitHead":"ec83fa92460c212e1ff0f335ef6021ae0f19c4c7","scripts":{"lint":"eslint src --ext ts","build":"npm run build:tsc && npm run build:rollup","watch":"rollup -c rollup.config.js -w","prepack":"npm run clean:build-artifacts","build:tsc":"tsc","build:rollup":"rollup -c rollup.config.js","prepublishOnly":"npm run build && npm run clean:build-artifacts","clean:build-artifacts":"node -e \"const fs=require('fs'),path=require('path');['android/build','android/install','android/.gradle','ios/build','ios/install'].forEach(d=>{const p=path.join(__dirname,d);if(fs.existsSync(p)){console.log('Removing:',p);require('child_process').execSync('rm -rf '+p,{stdio:'inherit'})}})\""},"_npmUser":{"name":"annadata","email":"annadataai.app@gmail.com"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"_npmVersion":"11.8.0","description":"MQTT-over-QUIC client for Capacitor (iOS/Android). Uses ngtcp2 for QUIC; MQTT over WebSocket fallback on web.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"mqtt":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.1","rollup":"^4.28.1","typescript":"~5.6.0","@types/node":"^22.10.0","@capacitor/cli":"^7.4.3","@capacitor/ios":"^7.4.4","@capacitor/core":"^7.4.3","@capacitor/android":"^7.4.4","@rollup/plugin-node-resolve":"^16.0.0"},"peerDependencies":{"@capacitor/core":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-mqtt-quic_0.1.1_1769288486224_0.14820511311960916","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@annadata/capacitor-mqtt-quic","version":"0.1.2","keywords":["capacitor","plugin","native","mqtt","quic","ngtcp2"],"license":"MIT","_id":"@annadata/capacitor-mqtt-quic@0.1.2","maintainers":[{"name":"annadata","email":"annadataai.app@gmail.com"}],"dist":{"shasum":"0fd13345f7bd062d7779d593720595cc9645f044","tarball":"https://registry.npmjs.org/@annadata/capacitor-mqtt-quic/-/capacitor-mqtt-quic-0.1.2.tgz","fileCount":211,"integrity":"sha512-Wg10v5erGisl9yzRdSmnWR8m53vf6H0bOeopK+E7QuYhis26lqqxJ3ImNdz71UdF+NrbmSZkxocs5S8oTom9Kw==","signatures":[{"sig":"MEQCIDh70XMK/6VJyW7dGaRmsCuz/DjOV4v8PMJ7nnfEM4/8AiAnNLBIOmjrhchwZIknrdDYVl80CJEbl+XWhxQt4iDk0w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13934904},"main":"dist/plugin.cjs.js","type":"module","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","engines":{"node":">=18"},"gitHead":"c8a7cc8c5e8787f3da27c515d030b49d28f54429","scripts":{"lint":"eslint src --ext ts","build":"npm run build:tsc && npm run build:rollup","watch":"rollup -c rollup.config.js -w","prepack":"npm run clean:build-artifacts","build:tsc":"tsc","build:rollup":"rollup -c rollup.config.js","prepublishOnly":"npm run build && npm run clean:build-artifacts","clean:build-artifacts":"node -e \"const fs=require('fs'),path=require('path');['android/build','android/install','android/.gradle','ios/build','ios/install'].forEach(d=>{const p=path.join(__dirname,d);if(fs.existsSync(p)){console.log('Removing:',p);require('child_process').execSync('rm -rf '+p,{stdio:'inherit'})}})\""},"_npmUser":{"name":"annadata","email":"annadataai.app@gmail.com"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"_npmVersion":"11.8.0","description":"MQTT-over-QUIC client for Capacitor (iOS/Android). Uses ngtcp2 for QUIC; MQTT over WebSocket fallback on web.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"mqtt":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.1","rollup":"^4.28.1","typescript":"~5.6.0","@types/node":"^22.10.0","@capacitor/cli":"^7.4.3","@capacitor/ios":"^7.4.4","@capacitor/core":"^7.4.3","@capacitor/android":"^7.4.4","@rollup/plugin-node-resolve":"^16.0.0"},"peerDependencies":{"@capacitor/core":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-mqtt-quic_0.1.2_1769376182471_0.561927221212956","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@annadata/capacitor-mqtt-quic","version":"0.1.3","keywords":["capacitor","plugin","native","mqtt","quic","ngtcp2"],"license":"MIT","_id":"@annadata/capacitor-mqtt-quic@0.1.3","maintainers":[{"name":"annadata","email":"annadataai.app@gmail.com"}],"dist":{"shasum":"228ecdfa15fc7dab8486fab0fc82c185613432cf","tarball":"https://registry.npmjs.org/@annadata/capacitor-mqtt-quic/-/capacitor-mqtt-quic-0.1.3.tgz","fileCount":212,"integrity":"sha512-MvIZlO6jXX4Xtf9q2y3i45LUQlZmq/UN5YVsM703N13I4aeKouFN/nypzM1fTqUo+KwIXypeX4r4RXXOj6ityg==","signatures":[{"sig":"MEUCIDybm+2n+dhB+at4O2ndCn5U6E70tHr+5dqeLR0tlDB4AiEAoKO8X8gwkBV0UPV8WfEriz6tFbooXUaIVhcJCq/fi3c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13943001},"main":"dist/plugin.cjs.js","type":"module","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","engines":{"node":">=18"},"gitHead":"87954c64921f24e7c63e7baf1995b791bb4f9b4b","scripts":{"lint":"eslint src --ext ts","build":"npm run build:tsc && npm run build:rollup","watch":"rollup -c rollup.config.js -w","prepack":"npm run clean:build-artifacts","build:tsc":"tsc","build:rollup":"rollup -c rollup.config.js","prepublishOnly":"npm run build && npm run clean:build-artifacts","clean:build-artifacts":"node -e \"const fs=require('fs'),path=require('path');['android/build','android/install','android/.gradle','ios/build','ios/install'].forEach(d=>{const p=path.join(__dirname,d);if(fs.existsSync(p)){console.log('Removing:',p);require('child_process').execSync('rm -rf '+p,{stdio:'inherit'})}})\""},"_npmUser":{"name":"annadata","email":"annadataai.app@gmail.com"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"_npmVersion":"11.8.0","description":"MQTT-over-QUIC client for Capacitor (iOS/Android). Uses ngtcp2 for QUIC; MQTT over WebSocket fallback on web.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"mqtt":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.1","rollup":"^4.28.1","typescript":"~5.6.0","@types/node":"^22.10.0","@capacitor/cli":"^7.4.3","@capacitor/ios":"^7.4.4","@capacitor/core":"^7.4.3","@capacitor/android":"^7.4.4","@rollup/plugin-node-resolve":"^16.0.0"},"peerDependencies":{"@capacitor/core":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-mqtt-quic_0.1.3_1769931856359_0.23659511434791436","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@annadata/capacitor-mqtt-quic","version":"0.1.5","keywords":["capacitor","plugin","native","mqtt","quic","ngtcp2"],"license":"MIT","_id":"@annadata/capacitor-mqtt-quic@0.1.5","maintainers":[{"name":"annadata","email":"annadataai.app@gmail.com"}],"dist":{"shasum":"ef1836b32c912fdaff48ee7c1a7c3510012de6af","tarball":"https://registry.npmjs.org/@annadata/capacitor-mqtt-quic/-/capacitor-mqtt-quic-0.1.5.tgz","fileCount":413,"integrity":"sha512-otmC0gbRnYaY8jZEhQIEI0SsmQe3Zt4uRQM1ZoQQ1j1IE+eJ2zy9ZqmQDOdu/tHatLaIvLBaDK56ZC70lj75hA==","signatures":[{"sig":"MEYCIQDLWZJXWCXBCWQo+KRUtAXyaJpWyAMIO8SrRCUS3OWn/wIhAI25J4rrlULRXuCSPBQxjwYnUV44MDESSnKa8bFYELy2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32082799},"main":"dist/plugin.cjs.js","type":"module","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","engines":{"node":">=18"},"gitHead":"6bff05b0f0e6c6d2fda5b76dcc3e7fe9edde1e8c","scripts":{"lint":"eslint src --ext ts","build":"npm run build:tsc && npm run build:rollup","watch":"rollup -c rollup.config.js -w","prepack":"npm run clean:build-artifacts","build:tsc":"npx tsc","build:rollup":"npx rollup -c rollup.config.js","prepublishOnly":"npm run build && npm run clean:build-artifacts","clean:build-artifacts":"node -e \"const fs=require('fs'),path=require('path');['android/build','android/install','android/.gradle','ios/build','ios/install'].forEach(d=>{const p=path.join(__dirname,d);if(fs.existsSync(p)){console.log('Removing:',p);require('child_process').execSync('rm -rf '+p,{stdio:'inherit'})}})\""},"_npmUser":{"name":"annadata","email":"annadataai.app@gmail.com"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"_npmVersion":"11.8.0","description":"MQTT-over-QUIC client for Capacitor (iOS/Android). Uses ngtcp2 for QUIC; MQTT over WebSocket fallback on web.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"mqtt":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.1","rollup":"^4.28.1","typescript":"~5.6.0","@types/node":"^22.10.0","@capacitor/cli":"^8.0.0","@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0","@rollup/plugin-node-resolve":"^16.0.0"},"peerDependencies":{"@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-mqtt-quic_0.1.5_1770221021777_0.8460689945585369","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@annadata/capacitor-mqtt-quic","version":"0.1.6","keywords":["capacitor","plugin","native","mqtt","quic","ngtcp2"],"license":"MIT","_id":"@annadata/capacitor-mqtt-quic@0.1.6","maintainers":[{"name":"annadata","email":"annadataai.app@gmail.com"}],"dist":{"shasum":"e64caae1751bb76686ee2ac39c404b9b69f83a18","tarball":"https://registry.npmjs.org/@annadata/capacitor-mqtt-quic/-/capacitor-mqtt-quic-0.1.6.tgz","fileCount":271,"integrity":"sha512-D/sm5uvIXqjR6Y2DwUmXDAyT38+BU+fL+8DRkXZ6Nir2zgoLzIZrRVLMiasf6eyampWHJqUV0A1Jh7HkPbaQGA==","signatures":[{"sig":"MEYCIQCwpGVWjki7ihyzqCyfLAd1aGgwvAMNJz3paGY+m25mTgIhAJt6KF6Vo5C8+BbMZpkV3tZ6yeMvlalwGYlFWBZ+bR1S","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14596503},"main":"dist/plugin.cjs.js","type":"module","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","engines":{"node":">=18"},"gitHead":"f02c8d66994ec75b3dfa5940c5b912cfecda1217","scripts":{"lint":"eslint src --ext ts","build":"npm run build:tsc && npm run build:rollup","watch":"rollup -c rollup.config.js -w","prepack":"npm run clean:build-artifacts","build:tsc":"npx tsc","build:rollup":"npx rollup -c rollup.config.js","prepublishOnly":"npm run build && npm run clean:build-artifacts","clean:build-artifacts":"node -e \"const fs=require('fs'),path=require('path');['android/build','android/install','android/.gradle','ios/build','ios/install'].forEach(d=>{const p=path.join(__dirname,d);if(fs.existsSync(p)){console.log('Removing:',p);require('child_process').execSync('rm -rf '+p,{stdio:'inherit'})}})\""},"_npmUser":{"name":"annadata","email":"annadataai.app@gmail.com"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"_npmVersion":"11.8.0","description":"MQTT-over-QUIC client for Capacitor (iOS/Android). Uses ngtcp2 for QUIC; MQTT over WebSocket fallback on web.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"mqtt":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.1","rollup":"^4.28.1","typescript":"~5.6.0","@types/node":"^22.10.0","@capacitor/cli":"^8.0.0","@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0","@rollup/plugin-node-resolve":"^16.0.0"},"peerDependencies":{"@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-mqtt-quic_0.1.6_1770575500619_0.669414279970769","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@annadata/capacitor-mqtt-quic","version":"0.1.7","keywords":["capacitor","plugin","native","web","browser","pwa","mqtt","quic","ngtcp2","websocket"],"author":{"name":"Mr. Yakub Mohammad","email":"yakub@annadata.ai"},"license":"MIT","_id":"@annadata/capacitor-mqtt-quic@0.1.7","maintainers":[{"name":"annadata","email":"annadataai.app@gmail.com"}],"dist":{"shasum":"538ea12cacf33107bceec9931d1c4a92a07b45cd","tarball":"https://registry.npmjs.org/@annadata/capacitor-mqtt-quic/-/capacitor-mqtt-quic-0.1.7.tgz","fileCount":891,"integrity":"sha512-Vt8Xff7lcVrnH2Yud+kBy/Z+vwX9CZb0WJYxE6rAsRVXu+y+V6lYwAnU0hBuOlrINrwFAFuuqTifmHaqonFm2w==","signatures":[{"sig":"MEQCIQCeV4R4ZZtKQbMxVL6w3m3SjRTGErFk5izUoKiW40VUmgIfdogp5fObmrDzwsW8PrC8m9jZBLLa+pJ2ZpXkU53b0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65657837},"main":"dist/plugin.cjs.js","type":"module","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","engines":{"node":">=18"},"gitHead":"f02c8d66994ec75b3dfa5940c5b912cfecda1217","scripts":{"lint":"eslint src --ext ts","build":"npm run build:tsc && npm run build:rollup","watch":"rollup -c rollup.config.js -w","prepack":"npm run clean:build-artifacts","build:tsc":"npx tsc","build:rollup":"npx rollup -c rollup.config.js","prepublishOnly":"npm run build && npm run clean:build-artifacts","clean:build-artifacts":"node -e \"const fs=require('fs'),path=require('path');['android/build','android/.gradle','ios/build','ios/install'].forEach(d=>{const p=path.join(__dirname,d);if(fs.existsSync(p)){console.log('Removing:',p);require('child_process').execSync('rm -rf '+p,{stdio:'inherit'})}})\""},"_npmUser":{"name":"annadata","email":"annadataai.app@gmail.com"},"capacitor":{"ios":{"src":"ios"},"web":{"bundled":true},"android":{"src":"android"}},"_npmVersion":"11.8.0","description":"MQTT-over-QUIC client for Capacitor (iOS, Android, Web). Native: ngtcp2+WolfSSL; Web: MQTT over WebSocket (WSS), same API.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"mqtt":"^5.3.0","mqtt-packet":"^9.0.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.1","rollup":"^4.28.1","typescript":"~5.6.0","@types/node":"^22.10.0","@capacitor/cli":"^8.0.0","@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-node-resolve":"^16.0.0"},"peerDependencies":{"@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-mqtt-quic_0.1.7_1771387118085_0.6725350461165289","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@annadata/capacitor-mqtt-quic","version":"0.1.8","keywords":["capacitor","plugin","native","web","browser","pwa","mqtt","quic","ngtcp2","websocket"],"author":{"name":"Mr. Yakub Mohammad","email":"yakub@annadata.ai"},"license":"MIT","_id":"@annadata/capacitor-mqtt-quic@0.1.8","maintainers":[{"name":"annadata","email":"annadataai.app@gmail.com"}],"dist":{"shasum":"73a7cef6683b281175f677e8dc95cf87e3e362aa","tarball":"https://registry.npmjs.org/@annadata/capacitor-mqtt-quic/-/capacitor-mqtt-quic-0.1.8.tgz","fileCount":892,"integrity":"sha512-bC+j4GD2UzW9cvzzHyoCnbrtbNm1sYkJESyFVFvpJzpKLCVqH/ItBsJP+eUYUVz4gjkI/GAFf9DwkSrFbSLDlA==","signatures":[{"sig":"MEQCIBnxim7yYP9K0a5kIzC/0sAikKpTQ+KgiugKRcM4xgiLAiBUZP2cdgLQ0MuUPaVKcsuOWUJ44hcoYtZG+LSmIfrysQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65664560},"main":"dist/plugin.cjs.js","type":"module","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","engines":{"node":">=18"},"gitHead":"7cd4937e7b37437af19f8a28cc49bca983e273b7","scripts":{"lint":"eslint src --ext ts","build":"npm run build:tsc && npm run build:rollup","watch":"rollup -c rollup.config.js -w","prepack":"npm run clean:build-artifacts","build:tsc":"npx tsc","build:rollup":"npx rollup -c rollup.config.js","prepublishOnly":"npm run build && npm run clean:build-artifacts","clean:build-artifacts":"node -e \"const fs=require('fs'),path=require('path');['android/build','android/.gradle','ios/build','ios/install'].forEach(d=>{const p=path.join(__dirname,d);if(fs.existsSync(p)){console.log('Removing:',p);require('child_process').execSync('rm -rf '+p,{stdio:'inherit'})}})\"","build:android-prebuilts":"./build-native.sh --android-only --abi arm64-v8a && ./build-native.sh --android-only --abi armeabi-v7a && ./build-native.sh --android-only --abi x86_64"},"_npmUser":{"name":"annadata","email":"annadataai.app@gmail.com"},"capacitor":{"ios":{"src":"ios","name":"AnnadataCapacitorMqttQuic"},"web":{"bundled":true},"android":{"src":"android"}},"_npmVersion":"11.8.0","description":"MQTT-over-QUIC client for Capacitor (iOS, Android, Web). Native: ngtcp2+WolfSSL; Web: MQTT over WebSocket (WSS), same API.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"mqtt":"^5.3.0","mqtt-packet":"^9.0.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.1","rollup":"^4.28.1","typescript":"~5.6.0","@types/node":"^22.10.0","@capacitor/cli":"^8.0.0","@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-node-resolve":"^16.0.0"},"peerDependencies":{"@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-mqtt-quic_0.1.8_1771460584631_0.7141966624846452","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@annadata/capacitor-mqtt-quic","version":"0.1.9","keywords":["capacitor","plugin","native","web","browser","pwa","mqtt","quic","ngtcp2","websocket"],"author":{"name":"Mr. Yakub Mohammad","email":"yakub@annadata.ai"},"license":"MIT","_id":"@annadata/capacitor-mqtt-quic@0.1.9","maintainers":[{"name":"annadata","email":"annadataai.app@gmail.com"}],"dist":{"shasum":"dc80209669bc9598e9cda8b3861873663b17a69f","tarball":"https://registry.npmjs.org/@annadata/capacitor-mqtt-quic/-/capacitor-mqtt-quic-0.1.9.tgz","fileCount":890,"integrity":"sha512-pR7I9pJL9JL7ES2w1qdPf/P2AGJNDfLYdm+lbqnmyCTuAmkYkD+wYmowWEVw2izO4DHVnO9FrjNCnrCgdQFRYQ==","signatures":[{"sig":"MEUCIQDV493WslzIaHtnyeWQobaPwH7ECgEcQX//GGwnAAebMgIgXuvq+1FQk0LE/0l46G3W30M99lqjd/x6TaLl81cQGDo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57700582},"main":"dist/plugin.cjs.js","type":"module","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","engines":{"node":">=18"},"gitHead":"da59b5aaf511467c744cd48a2f814c680cabea90","scripts":{"lint":"eslint src --ext ts","build":"npm run build:tsc && npm run build:rollup","watch":"rollup -c rollup.config.js -w","prepack":"npm run clean:build-artifacts","build:tsc":"npx tsc","build:rollup":"npx rollup -c rollup.config.js","prepublishOnly":"npm run build && npm run clean:build-artifacts","clean:build-artifacts":"node -e \"const fs=require('fs'),path=require('path');['android/build','android/.gradle','ios/build','ios/install'].forEach(d=>{const p=path.join(__dirname,d);if(fs.existsSync(p)){console.log('Removing:',p);require('child_process').execSync('rm -rf '+p,{stdio:'inherit'})}})\"","build:android-prebuilts":"./build-native.sh --android-only --abi arm64-v8a && ./build-native.sh --android-only --abi armeabi-v7a && ./build-native.sh --android-only --abi x86_64"},"_npmUser":{"name":"annadata","email":"annadataai.app@gmail.com"},"capacitor":{"ios":{"src":"ios","name":"AnnadataCapacitorMqttQuic"},"web":{"bundled":true},"android":{"src":"android"}},"_npmVersion":"11.8.0","description":"MQTT-over-QUIC client for Capacitor (iOS, Android, Web). Native: ngtcp2+WolfSSL; Web: MQTT over WebSocket (WSS), same API.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"mqtt":"^5.3.0","mqtt-packet":"^9.0.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.1","rollup":"^4.28.1","typescript":"~5.6.0","@types/node":"^22.10.0","@capacitor/cli":"^8.0.0","@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-node-resolve":"^16.0.0"},"peerDependencies":{"@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-mqtt-quic_0.1.9_1771542487208_0.14198859229615812","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@annadata/capacitor-mqtt-quic","version":"0.2.0","keywords":["capacitor","plugin","native","web","browser","pwa","mqtt","quic","ngtcp2","websocket"],"author":{"name":"Mr. Yakub Mohammad","email":"yakub@annadata.ai"},"license":"MIT","_id":"@annadata/capacitor-mqtt-quic@0.2.0","maintainers":[{"name":"annadata","email":"annadataai.app@gmail.com"}],"dist":{"shasum":"0f6fb7eed3804e5268b6557e9f55be3784077e2a","tarball":"https://registry.npmjs.org/@annadata/capacitor-mqtt-quic/-/capacitor-mqtt-quic-0.2.0.tgz","fileCount":890,"integrity":"sha512-4KGQ5whCR6HxKtT6Jvb10+I38709/D26MBINyI+xJT5Wf3MnnL6/oCbv9vMj5ditPvr4XSauP4yVyG9ttV2Svw==","signatures":[{"sig":"MEQCIB//oarpaz7Hh/8/7atzhxqatcfPgrld05Piz4nMWrjZAiAj1ZkiMds2ffu/qCg6QjVTVZgjU7J+AaoZW8kp3qqe7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57710065},"main":"dist/plugin.cjs.js","type":"module","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","engines":{"node":">=18"},"gitHead":"e2a498dff6d7a1e78579ddb51a7055ee7d61cfde","scripts":{"lint":"eslint src --ext ts","build":"npm run build:tsc && npm run build:rollup","watch":"rollup -c rollup.config.js -w","prepack":"npm run clean:build-artifacts","build:tsc":"npx tsc","build:rollup":"npx rollup -c rollup.config.js","prepublishOnly":"npm run build && npm run clean:build-artifacts","clean:build-artifacts":"node -e \"const fs=require('fs'),path=require('path');['android/build','android/.gradle','ios/build','ios/install'].forEach(d=>{const p=path.join(__dirname,d);if(fs.existsSync(p)){console.log('Removing:',p);require('child_process').execSync('rm -rf '+p,{stdio:'inherit'})}})\"","build:android-prebuilts":"./build-native.sh --android-only --abi arm64-v8a && ./build-native.sh --android-only --abi armeabi-v7a && ./build-native.sh --android-only --abi x86_64"},"_npmUser":{"name":"annadata","email":"annadataai.app@gmail.com"},"capacitor":{"ios":{"src":"ios","name":"AnnadataCapacitorMqttQuic"},"web":{"bundled":true},"android":{"src":"android"}},"_npmVersion":"11.8.0","description":"MQTT-over-QUIC client for Capacitor (iOS, Android, Web). Native: ngtcp2+WolfSSL; Web: MQTT over WebSocket (WSS), same API.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"mqtt":"^5.3.0","mqtt-packet":"^9.0.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.1","rollup":"^4.28.1","typescript":"~5.6.0","@types/node":"^22.10.0","@capacitor/cli":"^8.0.0","@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-node-resolve":"^16.0.0"},"peerDependencies":{"@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-mqtt-quic_0.2.0_1771636815947_0.15800790747817106","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@annadata/capacitor-mqtt-quic","version":"0.2.1","keywords":["capacitor","plugin","native","web","browser","pwa","mqtt","quic","ngtcp2","websocket"],"author":{"name":"Mr. Yakub Mohammad","email":"yakub@annadata.ai"},"license":"MIT","_id":"@annadata/capacitor-mqtt-quic@0.2.1","maintainers":[{"name":"annadata","email":"annadataai.app@gmail.com"}],"dist":{"shasum":"fe87f064400482ed5aef75f30e8e141c2e7ecce6","tarball":"https://registry.npmjs.org/@annadata/capacitor-mqtt-quic/-/capacitor-mqtt-quic-0.2.1.tgz","fileCount":890,"integrity":"sha512-KmO/cgf/6uZj7vxoKPg0UBL11AauE9UGom/WA9P475vj2xAiosVofir5k+M0SrIh9FE9YB6zeW7xJ00hBEhPtw==","signatures":[{"sig":"MEYCIQDQe57bOzfv2Xalke6mdk3apHnZDkRIbP+NWL7n128j7AIhAJM4SW9qOuRHcSrYQ3c+4zSlVwGfspJNqPrub4Sb1i4b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57713157},"main":"dist/plugin.cjs.js","type":"module","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","engines":{"node":">=18"},"gitHead":"3a7a855b5654cbad29170999c2afed83559eb320","scripts":{"lint":"eslint src --ext ts","build":"npm run build:tsc && npm run build:rollup","watch":"rollup -c rollup.config.js -w","prepack":"npm run clean:build-artifacts","build:tsc":"npx tsc","build:rollup":"npx rollup -c rollup.config.js","prepublishOnly":"npm run build && npm run clean:build-artifacts","clean:build-artifacts":"node -e \"const fs=require('fs'),path=require('path');['android/build','android/.gradle','ios/build','ios/install'].forEach(d=>{const p=path.join(__dirname,d);if(fs.existsSync(p)){console.log('Removing:',p);require('child_process').execSync('rm -rf '+p,{stdio:'inherit'})}})\"","build:android-prebuilts":"./build-native.sh --android-only --abi arm64-v8a && ./build-native.sh --android-only --abi armeabi-v7a && ./build-native.sh --android-only --abi x86_64"},"_npmUser":{"name":"annadata","email":"annadataai.app@gmail.com"},"capacitor":{"ios":{"src":"ios","name":"AnnadataCapacitorMqttQuic"},"web":{"bundled":true},"android":{"src":"android"}},"_npmVersion":"11.8.0","description":"MQTT-over-QUIC client for Capacitor (iOS, Android, Web). Native: ngtcp2+WolfSSL; Web: MQTT over WebSocket (WSS), same API.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"mqtt":"^5.3.0","mqtt-packet":"^9.0.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.1","rollup":"^4.28.1","typescript":"~5.6.0","@types/node":"^22.10.0","@capacitor/cli":"^8.0.0","@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-node-resolve":"^16.0.0"},"peerDependencies":{"@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-mqtt-quic_0.2.1_1771639346530_0.7129381392237777","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@annadata/capacitor-mqtt-quic","version":"0.2.2","keywords":["capacitor","plugin","native","web","browser","pwa","mqtt","quic","ngtcp2","websocket"],"author":{"name":"Mr. Yakub Mohammad","email":"yakub@annadata.ai"},"license":"MIT","_id":"@annadata/capacitor-mqtt-quic@0.2.2","maintainers":[{"name":"annadata","email":"annadataai.app@gmail.com"}],"dist":{"shasum":"50661042c495526f87996ce04b42559bc54b3b45","tarball":"https://registry.npmjs.org/@annadata/capacitor-mqtt-quic/-/capacitor-mqtt-quic-0.2.2.tgz","fileCount":890,"integrity":"sha512-Y/fr9yftynGOVVBDZYNmvV/Q9rbov8kBV/43J3fFhrWcixn0cEfqjp6Yo9LfFdkZ+ouIfx0EKBrH15FGoSmS1g==","signatures":[{"sig":"MEQCIBUt75+mJryMRj8rCXKNhaBOSs6iDk3wnixI7Bdwdn5gAiA3zXD6s3yXWAIrIR7tfIkDrlJsnr6lVY5+f9PTKpqFtQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57715026},"main":"dist/plugin.cjs.js","type":"module","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","engines":{"node":">=18"},"gitHead":"8ecdf3d35a1d8b1802931f152ab5966557d017c1","scripts":{"lint":"eslint src --ext ts","build":"npm run build:tsc && npm run build:rollup","watch":"rollup -c rollup.config.js -w","prepack":"npm run clean:build-artifacts","build:tsc":"npx tsc","build:rollup":"npx rollup -c rollup.config.js","prepublishOnly":"npm run build && npm run clean:build-artifacts","clean:build-artifacts":"node -e \"const fs=require('fs'),path=require('path');['android/build','android/.gradle','ios/build','ios/install'].forEach(d=>{const p=path.join(__dirname,d);if(fs.existsSync(p)){console.log('Removing:',p);require('child_process').execSync('rm -rf '+p,{stdio:'inherit'})}})\"","build:android-prebuilts":"./build-native.sh --android-only --abi arm64-v8a && ./build-native.sh --android-only --abi armeabi-v7a && ./build-native.sh --android-only --abi x86_64"},"_npmUser":{"name":"annadata","email":"annadataai.app@gmail.com"},"capacitor":{"ios":{"src":"ios","name":"AnnadataCapacitorMqttQuic"},"web":{"bundled":true},"android":{"src":"android"}},"_npmVersion":"11.8.0","description":"MQTT-over-QUIC client for Capacitor (iOS, Android, Web). Native: ngtcp2+WolfSSL; Web: MQTT over WebSocket (WSS), same API.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"mqtt":"^5.3.0","mqtt-packet":"^9.0.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.20.1","rollup":"^4.28.1","typescript":"~5.6.0","@types/node":"^22.10.0","@capacitor/cli":"^8.0.0","@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-node-resolve":"^16.0.0"},"peerDependencies":{"@capacitor/ios":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/android":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-mqtt-quic_0.2.2_1771647221492_0.41619681453554525","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@annadata/capacitor-mqtt-quic","version":"0.2.4","type":"module","description":"MQTT-over-QUIC client for Capacitor (iOS, Android, Web). Native: ngtcp2+WolfSSL; Web: MQTT over WebSocket (WSS), same API.","main":"dist/plugin.cjs.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","scripts":{"build":"npm run build:tsc && npm run build:rollup","build:tsc":"npx tsc","build:rollup":"npx rollup -c rollup.config.js","build:android-prebuilts":"./build-native.sh --android-only --abi arm64-v8a && ./build-native.sh --android-only --abi armeabi-v7a && ./build-native.sh --android-only --abi x86_64","watch":"rollup -c rollup.config.js -w","lint":"eslint src --ext ts","prepack":"npm run clean:build-artifacts","prepublishOnly":"npm run build && npm run clean:build-artifacts","clean:build-artifacts":"node -e \"const fs=require('fs'),path=require('path');['android/build','android/.gradle','ios/build','ios/install'].forEach(d=>{const p=path.join(__dirname,d);if(fs.existsSync(p)){console.log('Removing:',p);require('child_process').execSync('rm -rf '+p,{stdio:'inherit'})}})\""},"keywords":["capacitor","plugin","native","web","browser","pwa","mqtt","quic","ngtcp2","websocket"],"capacitor":{"ios":{"src":"ios","name":"AnnadataCapacitorMqttQuic"},"android":{"src":"android"},"web":{"bundled":true}},"devDependencies":{"@capacitor/android":"^8.0.0","@capacitor/cli":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/ios":"^8.0.0","@rollup/plugin-commonjs":"^29.0.0","@rollup/plugin-node-resolve":"^16.0.0","@types/node":"^22.10.0","eslint":"^9.20.1","rollup":"^4.28.1","typescript":"~5.6.0"},"dependencies":{"mqtt":"^5.3.0"},"peerDependencies":{"@capacitor/android":"^8.0.0","@capacitor/core":"^8.0.0","@capacitor/ios":"^8.0.0"},"author":{"name":"Mr. Yakub Mohammad","email":"yakub@annadata.ai"},"engines":{"node":">=18"},"license":"MIT","gitHead":"338029a67bdf01a789f97aca2e877005dce5cdb7","_id":"@annadata/capacitor-mqtt-quic@0.2.4","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-4m0iOtw4fRA/BTbLjWP9yA8Yl2DmZmdTPhswk3Lk46lTMF9rgGNDGLS1KvahxZ7ff88e0byKTBL47KGWh9P6pw==","shasum":"eb60325ed4685cb8044f852b7c23ba8a145abe53","tarball":"https://registry.npmjs.org/@annadata/capacitor-mqtt-quic/-/capacitor-mqtt-quic-0.2.4.tgz","fileCount":290,"unpackedSize":15055308,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICYelEOyZfEXftpoBljg8jsVJi7AE33V6/i5j8SBvaVqAiEAlsRKkWI7r2VBjobfA/8Nw85IdQloVq+L3jC+7zT8C2Y="}]},"_npmUser":{"name":"annadata","email":"annadataai.app@gmail.com"},"directories":{},"maintainers":[{"name":"annadata","email":"annadataai.app@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/capacitor-mqtt-quic_0.2.4_1779741735850_0.3298957519259602"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-24T20:54:04.789Z","modified":"2026-05-25T20:42:16.264Z","0.1.0":"2026-01-24T20:54:05.137Z","0.1.1":"2026-01-24T21:01:26.547Z","0.1.2":"2026-01-25T21:23:02.779Z","0.1.3":"2026-02-01T07:44:16.655Z","0.1.5":"2026-02-04T16:03:42.262Z","0.1.6":"2026-02-08T18:31:40.906Z","0.1.7":"2026-02-18T03:58:38.885Z","0.1.8":"2026-02-19T00:23:05.309Z","0.1.9":"2026-02-19T23:08:07.832Z","0.2.0":"2026-02-21T01:20:16.660Z","0.2.1":"2026-02-21T02:02:27.132Z","0.2.2":"2026-02-21T04:13:42.034Z","0.2.4":"2026-05-25T20:42:16.134Z"},"author":{"name":"Mr. Yakub Mohammad","email":"yakub@annadata.ai"},"license":"MIT","keywords":["capacitor","plugin","native","web","browser","pwa","mqtt","quic","ngtcp2","websocket"],"description":"MQTT-over-QUIC client for Capacitor (iOS, Android, Web). Native: ngtcp2+WolfSSL; Web: MQTT over WebSocket (WSS), same API.","maintainers":[{"name":"annadata","email":"annadataai.app@gmail.com"}],"readme":"# @annadata/capacitor-mqtt-quic\n\nMQTT-over-QUIC Capacitor plugin for **iOS**, **Android**, and **Web (browser/PWA)**. Native: ngtcp2 + WolfSSL for QUIC; Web: MQTT over WebSocket (WSS), same API and event listeners.\n\n**Capacitor:** **8.0+** (tested with Capacitor 8).\n\n**Features:**\n- ✅ **MQTT 5.0** support with full properties and reason codes\n- ✅ **MQTT 3.1.1** support (backward compatible)\n- ✅ Automatic protocol negotiation (tries 5.0, falls back to 3.1.1)\n- ✅ QUIC transport (ngtcp2 + WolfSSL) on native; WSS or WebTransport on web\n- ✅ Transport abstraction (StreamReader/StreamWriter)\n- ✅ Full MQTT client API: `connect`, `publish`, `subscribe`, `unsubscribe`, `disconnect`\n- ✅ **sendKeepalive** – Send MQTT PINGREQ, wait for PINGRESP; resets server idle timer\n- ✅ **ping** – Host reachability check (native: UDP; web: returns ok if host looks valid)\n- ✅ **testHarness** – Connect → subscribe → publish → disconnect smoke test\n\n## Structure\n\n- **Phase 1**: MQTT protocol layer (Swift/Kotlin) - **Complete** ✅\n  - MQTT 3.1.1 protocol implementation\n  - MQTT 5.0 protocol implementation with properties and reason codes\n  - Transport abstraction (StreamReader/StreamWriter)\n- **Phase 2**: QUIC transport (ngtcp2) + stream adapters - **In Progress** ⏳\n  - Currently uses stub implementations for testing\n  - See [NGTCP2_INTEGRATION_PLAN.md](./docs/NGTCP2_INTEGRATION_PLAN.md) for build instructions\n- **Phase 3**: MQTT client API + Capacitor plugin bridge - **Complete** ✅\n- **Phase 4**: Platform integration in annadata-production - **Complete** ✅\n\n## Plugin API\n\n### Basic Usage (MQTT 3.1.1)\n\n```ts\nimport { MqttQuic } from '@annadata/capacitor-mqtt-quic';\n\n// Connect\nawait MqttQuic.connect({\n  host: 'mqtt.example.com',\n  port: 1884,\n  clientId: 'my-client-id',\n  username: 'user',\n  password: 'pass',\n  cleanSession: true,\n  keepalive: 20\n});\n\n// Publish\nawait MqttQuic.publish({\n  topic: 'sensors/temperature',\n  payload: '25.5',\n  qos: 1,\n  retain: false\n});\n\n// Subscribe\nawait MqttQuic.subscribe({\n  topic: 'sensors/+',\n  qos: 1\n});\n\n// Unsubscribe\nawait MqttQuic.unsubscribe({ topic: 'sensors/+' });\n\n// Disconnect\nawait MqttQuic.disconnect();\n```\n\n### sendKeepalive – Manual MQTT Ping\n\nSend MQTT PINGREQ and wait for PINGRESP. Resets the server's idle timer and confirms the connection is alive. Use when you need to keep the session active or verify connectivity without publishing.\n\n**Native (iOS/Android):** Sends PINGREQ, waits for PINGRESP within `timeoutMs`.  \n**Web:** Returns `{ ok: !!connected }` (mqtt.js and WebTransport handle keepalive internally).\n\n```ts\nconst { ok } = await MqttQuic.sendKeepalive({\n  timeoutMs: 5000  // optional; default 5000, min 1000, max 15000\n});\n// ok: true if PINGRESP received (native) or connected (web); false on timeout or error\n```\n\n### ping – Host Reachability\n\nCheck if a host is reachable. **Native (iOS/Android):** performs a UDP reachability check. **Web:** returns `{ ok: true }` if the host looks valid (no raw UDP in browsers).\n\n```ts\nconst { ok } = await MqttQuic.ping({\n  host: 'mqtt.example.com',\n  port: 1884  // optional\n});\n```\n\n### Connection state and UI\n\n`connect()` returns a Promise that resolves with `{ connected: true }` only after the QUIC handshake and MQTT CONNACK. To avoid the UI staying on \"connecting\":\n\n- **Option A – use the Promise:** Set your UI to \"connected\" when the Promise resolves.\n\n```ts\nsetConnectionState('connecting');\ntry {\n  await MqttQuic.connect({ host, port, clientId, ... });\n  setConnectionState('connected');  // required: update here\n} catch (e) {\n  setConnectionState('error');\n}\n```\n\n- **Option B – use events:** The plugin also emits `connected` and `subscribed` (Capacitor listeners). You can rely on these instead of or in addition to the Promise:\n\n```ts\nimport { MqttQuic } from '@annadata/capacitor-mqtt-quic';\n\nMqttQuic.addListener('connected', () => setConnectionState('connected'));\nMqttQuic.addListener('subscribed', (e) => { /* e.topic */ });\n// then call connect(); state will update when the event fires\n```\n\nIf you only set state to \"connecting\" and never handle the resolution or the `connected` event, the UI will remain \"connecting\" even though the connection succeeded.\n\n### TLS Certificate Verification (QUIC)\n\nQUIC requires TLS 1.3 and certificate verification is **enabled by default**.\nYou can bundle a CA PEM and it will be loaded automatically:\n\n- iOS: `ios/Sources/MqttQuicPlugin/Resources/mqttquic_ca.pem`\n- Android: `android/src/main/assets/mqttquic_ca.pem`\n\nYou can also override per call:\n\n```ts\nawait MqttQuic.connect({\n  host: 'mqtt.example.com',\n  port: 1884,\n  clientId: 'my-client-id',\n  caFile: '/path/to/ca-bundle.pem',\n  // or caPath: '/path/to/ca-directory'\n});\n```\n\n#### How to generate certificates\n\n**Option A: Public CA (Let’s Encrypt)**\nYou do not bundle `mqttquic_ca.pem` (the OS already trusts public CAs).\n\n```bash\nsudo apt-get update\nsudo apt-get install -y certbot\nsudo certbot certonly --standalone -d mqtt.example.com\n```\n\nUse on server:\n- Cert: `/etc/letsencrypt/live/mqtt.example.com/fullchain.pem`\n- Key: `/etc/letsencrypt/live/mqtt.example.com/privkey.pem`\n\n**Option B: Private CA (dev/internal)**\nGenerate your own CA, sign the server cert, and bundle the CA PEM.\n\n```bash\nmkdir -p certs && cd certs\n\n# 1) Create CA (one-time)\nopenssl genrsa -out ca.key 4096\nopenssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.pem \\\n  -subj \"/C=US/ST=CA/L=SF/O=Annadata/OU=MQTT/CN=Annadata-Root-CA\"\n\n# 2) Create server key + CSR\nopenssl genrsa -out server.key 2048\nopenssl req -new -key server.key -out server.csr \\\n  -subj \"/C=US/ST=CA/L=SF/O=Annadata/OU=MQTT/CN=mqtt.example.com\"\n\n# 3) Add SANs (edit DNS/IP)\ncat > server_ext.cnf <<EOF\nsubjectAltName = DNS:mqtt.example.com,IP:YOUR.SERVER.IP\nextendedKeyUsage = serverAuth\nEOF\n\n# 4) Sign server cert\nopenssl x509 -req -in server.csr -CA ca.pem -CAkey ca.key -CAcreateserial \\\n  -out server.pem -days 365 -sha256 -extfile server_ext.cnf\n```\n\nBundle the CA cert (never ship `ca.key`):\n- iOS: `ios/Sources/MqttQuicPlugin/Resources/mqttquic_ca.pem` (use `ca.pem`)\n- Android: `android/src/main/assets/mqttquic_ca.pem` (use `ca.pem`)\n\n### Test Harness (QUIC Smoke Test)\n\nRuns: connect → subscribe → publish → disconnect.\n\n```ts\nawait MqttQuic.testHarness({\n  host: 'mqtt.example.com',\n  port: 1884,\n  clientId: 'mqttquic_test_client',\n  topic: 'test/topic',\n  payload: 'Hello QUIC!',\n  caFile: '/path/to/ca-bundle.pem',   // optional\n  webTransportUrl: 'https://...',      // optional; web only\n});\n```\n\n### MQTT 5.0 Features\n\n#### Protocol Version Selection\n\n```ts\n// Use MQTT 5.0 explicitly\nawait MqttQuic.connect({\n  host: 'mqtt.example.com',\n  port: 1884,\n  clientId: 'my-client-id',\n  protocolVersion: '5.0',  // '3.1.1' | '5.0' | 'auto' (default)\n  sessionExpiryInterval: 3600,  // Session persists 1 hour after disconnect\n  keepalive: 20\n});\n\n// Auto-negotiation (default): tries 5.0, falls back to 3.1.1\nawait MqttQuic.connect({\n  protocolVersion: 'auto',  // or omit\n  // ...\n});\n```\n\n#### Session Management\n\n```ts\n// Session expiry: control how long sessions persist after disconnect\nawait MqttQuic.connect({\n  // ...\n  protocolVersion: '5.0',\n  sessionExpiryInterval: 3600,  // 1 hour in seconds\n  // 0 = session expires immediately on disconnect\n  // undefined/null = session expires on disconnect (default)\n});\n```\n\n#### Message Expiry\n\n```ts\n// Messages auto-expire if not delivered within time limit\nawait MqttQuic.publish({\n  topic: 'events/urgent',\n  payload: 'Important message',\n  messageExpiryInterval: 300,  // Expires in 5 minutes\n  contentType: 'application/json'\n});\n```\n\n#### Subscription Identifiers\n\n```ts\n// Identify which subscription triggered a message\nawait MqttQuic.subscribe({\n  topic: 'sensors/+',\n  qos: 1,\n  subscriptionIdentifier: 1  // Unique ID for this subscription\n});\n\n// When message arrives, you'll know which subscription matched\n```\n\n#### User Properties (Custom Metadata)\n\n```ts\n// Add custom metadata to messages\nawait MqttQuic.publish({\n  topic: 'events',\n  payload: JSON.stringify({ value: 42 }),\n  userProperties: [\n    { name: 'source', value: 'mobile-app' },\n    { name: 'version', value: '1.2.3' },\n    { name: 'device-id', value: 'device-123' }\n  ],\n  contentType: 'application/json'\n});\n```\n\n#### Response Topic & Correlation Data\n\n```ts\n// Request-response pattern\nawait MqttQuic.publish({\n  topic: 'request/data',\n  payload: 'request-id-123',\n  responseTopic: 'response/data',  // Where to send response\n  correlationData: 'correlation-id-456'  // Match request/response\n});\n```\n\n## MQTT 5.0 Features Summary\n\n| Feature | Description | Use Case |\n|---------|-------------|----------|\n| **Session Expiry** | Control session persistence | Resume sessions after reconnect |\n| **Message Expiry** | Auto-expire undelivered messages | Time-sensitive data |\n| **Subscription Identifiers** | Identify subscription source | Multi-subscription handling |\n| **User Properties** | Custom key-value metadata | Tracing, versioning, routing |\n| **Content Type** | Message format indicator | JSON, XML, binary, etc. |\n| **Response Topic** | Request-response pattern | RPC over MQTT |\n| **Reason Codes** | Detailed error information | Better debugging |\n| **Topic Aliases** | Reduce bandwidth | High-frequency publishing |\n\nSee [MQTT5_IMPLEMENTATION_COMPLETE.md](./docs/MQTT5_IMPLEMENTATION_COMPLETE.md) for full details.\n\n## TypeScript Interface\n\nFull API definitions (see `dist/esm/definitions.d.ts`):\n\n```ts\ninterface MqttQuicConnectOptions {\n  host: string;\n  port: number;\n  clientId: string;\n  username?: string;\n  password?: string;\n  cleanSession?: boolean;\n  keepalive?: number;\n  caFile?: string;\n  caPath?: string;\n  protocolVersion?: '3.1.1' | '5.0' | 'auto';\n  sessionExpiryInterval?: number;\n  receiveMaximum?: number;\n  maximumPacketSize?: number;\n  topicAliasMaximum?: number;\n  // Web only: QUIC via WebTransport\n  webTransportUrl?: string;\n  webTransportDeviceId?: string;\n  webTransportAction?: string;\n  webTransportPath?: string;\n}\n\ninterface MqttQuicPublishOptions {\n  topic: string;\n  payload: string | Uint8Array;\n  qos?: 0 | 1 | 2;\n  retain?: boolean;\n  messageExpiryInterval?: number;\n  contentType?: string;\n  responseTopic?: string;\n  correlationData?: string | Uint8Array;\n  userProperties?: Array<{ name: string; value: string }>;\n}\n\ninterface MqttQuicSubscribeOptions {\n  topic: string;\n  qos?: 0 | 1 | 2;\n  subscriptionIdentifier?: number;\n}\n\ninterface MqttQuicTestHarnessOptions {\n  host: string;\n  port?: number;\n  clientId?: string;\n  topic?: string;\n  payload?: string;\n  caFile?: string;\n  caPath?: string;\n  webTransportUrl?: string;\n}\n\ninterface MqttQuicPingOptions {\n  host: string;\n  port?: number;\n}\n\ninterface MqttQuicSendKeepaliveOptions {\n  timeoutMs?: number;  // default 5000, min 1000, max 15000\n}\n\ntype MqttQuicConnectionState = 'disconnected' | 'connecting' | 'connected' | 'reconnecting' | 'error';\n\ninterface MqttQuicPlugin {\n  sendKeepalive(options?: MqttQuicSendKeepaliveOptions): Promise<{ ok: boolean }>;\n  ping(options: MqttQuicPingOptions): Promise<{ ok: boolean }>;\n  connect(options: MqttQuicConnectOptions): Promise<{ connected: boolean }>;\n  disconnect(): Promise<void>;\n  publish(options: MqttQuicPublishOptions): Promise<{ success: boolean }>;\n  subscribe(options: MqttQuicSubscribeOptions): Promise<{ success: boolean }>;\n  unsubscribe(options: { topic: string }): Promise<{ success: boolean }>;\n  testHarness(options: MqttQuicTestHarnessOptions): Promise<{ success: boolean }>;\n}\n```\n\n## ngtcp2 Build (Phase 2) ⏳\n\n**Current Status:** Real QUIC transport implemented using ngtcp2 + **WolfSSL** on both iOS and Android (single TLS backend for license/size/QUIC support).\n\n### Quick Build (Recommended)\n\nUse the unified build script to build all native dependencies:\n\n```bash\n# Build for both iOS and Android\n./build-native.sh\n\n# Build only iOS\n./build-native.sh --ios-only\n\n# Build only Android\n./build-native.sh --android-only\n\n# Build for specific Android ABI\n./build-native.sh --android-only --abi arm64-v8a\n```\n\nThis script builds WolfSSL → nghttp3 → ngtcp2 in the correct order for both platforms (or OpenSSL/QuicTLS when USE_WOLFSSL=0).\n\n### Manual Build\n\nFor detailed manual build instructions, see:\n- **iOS**: [ios/NGTCP2_BUILD_INSTRUCTIONS.md](./ios/NGTCP2_BUILD_INSTRUCTIONS.md)\n- **Android**: [android/NGTCP2_BUILD_INSTRUCTIONS.md](./android/NGTCP2_BUILD_INSTRUCTIONS.md)\n- **Full Plan**: [NGTCP2_INTEGRATION_PLAN.md](./docs/NGTCP2_INTEGRATION_PLAN.md)\n\n**Prerequisites:**\n- iOS: macOS with Xcode 15+\n- Android: Android Studio with NDK r25+ (auto-detected from `$ANDROID_HOME`)\n\n## Production / First-time build\n\nWhen you install the plugin from npm (`npm install @annadata/capacitor-mqtt-quic`), the published package **may** include **prebuilt native libs** (iOS and optionally Android, both using **WolfSSL**). If it does (a \"complete\" / zero-config package), you only need:\n\n```bash\nnpm install @annadata/capacitor-mqtt-quic\nnpx cap sync\nionic cap run android   # or ios\n```\n\n**If your Android build fails with \"WolfSSL not found\"**, the package you installed does not include prebuilt Android libs. Do **one** of the following.\n\n**Option A – One-time build (from your app project root, requires Android NDK r25+):** Both iOS and Android use **WolfSSL** as the TLS backend (license/size/QUIC support):\n\n```bash\ncd node_modules/@annadata/capacitor-mqtt-quic\n./build-native.sh --android-only --abi arm64-v8a\n./build-native.sh --android-only --abi armeabi-v7a\n./build-native.sh --android-only --abi x86_64\n```\n\nOr from the plugin’s `android` directory:\n\n```bash\ncd node_modules/@annadata/capacitor-mqtt-quic/android\n./build-wolfssl.sh --abi arm64-v8a\n./build-wolfssl.sh --abi armeabi-v7a\n./build-wolfssl.sh --abi x86_64\n./build-nghttp3.sh --abi arm64-v8a\n./build-nghttp3.sh --abi armeabi-v7a\n./build-nghttp3.sh --abi x86_64\n./build-ngtcp2.sh --abi arm64-v8a\n./build-ngtcp2.sh --abi armeabi-v7a\n./build-ngtcp2.sh --abi x86_64\n```\n\nOr add to your app’s `package.json` and run once:\n\n```json\n\"setup:wolfssl-android\": \"cd node_modules/@annadata/capacitor-mqtt-quic && ./build-native.sh --android-only --abi arm64-v8a && ./build-native.sh --android-only --abi armeabi-v7a && ./build-native.sh --android-only --abi x86_64\"\n```\n\n**Option B – Use a complete package:** Reinstall a version of the plugin that was published with Android prebuilts (see *Publishing a complete package* below). Then no one-time build is needed.\n\n**iOS:** The plugin typically ships with vendored static libs (`ios/libs/`) using WolfSSL. If you built the plugin from source and those are missing, run from the plugin repo: `./build-native.sh --ios-only`, then pack/publish.\n\n### Publishing a complete (zero-config) package\n\nSo that **clients have no native build step**, build Android (and iOS) prebuilts **before** publishing, then publish. The tarball will include `android/install/` and consumers can `npm install` and run the app without running `build-native.sh`.\n\nFrom the **plugin repo** (capacitor-mqtt-quic), before `npm publish`:\n\n```bash\n# 1) Android prebuilts for all ABIs (required for zero-config Android)\nnpm run build:android-prebuilts\n\n# 2) iOS prebuilts (if not already present)\n./build-native.sh --ios-only\n\n# 3) Build JS and publish (clean does not remove android/install or ios/libs)\nnpm run build\nnpm run clean:build-artifacts\nnpm version patch   # or minor\nnpm publish --access public\n```\n\nSee **docs/PRODUCTION_PUBLISH_STEPS.md** for the full checklist.\n\n### iOS: `MqttQuicLibs.xcframework does not contain a binary artifact`\n\nThis happens when Capacitor's SPM resolves `Package.swift` but `ios/libs/MqttQuicLibs.xcframework` is missing. Common causes:\n\n1. **Fresh install / plugin update** – The package was packed/published without the xcframework.\n2. **Local development** – You use `file:../capacitor-mqtt-quic` or a local `.tgz` that was packed before building.\n\n**Fix (one-time per machine or per plugin change):**\n\n```bash\ncd node_modules/@annadata/capacitor-mqtt-quic\n./build-native.sh --ios-only\ncd ios && ./create-xcframework.sh\ncd ../..\nnpx cap sync ios\n```\n\nOr from your app root, if you have this script:\n\n```bash\nnpm run build:ios-mqtt-quic\nnpx cap sync ios\n```\n\n**If you maintain the plugin:** Build the xcframework in the plugin repo before `npm pack` or `npm publish`. The `.npmignore` is configured so the xcframework is included when present, and consumers then get it with `npm install`.\n\n### Connection error: `{\"code\":\"UNIMPLEMENTED\"}`\n\nCapacitor returns this when the **native plugin method is not found** on the current platform. Common causes and fixes:\n\n| Platform | Check |\n|----------|--------|\n| **iOS** | Plugin must be linked. Run `npx cap sync ios` and `cd ios && pod install`, then rebuild in Xcode. Ensure `@annadata/capacitor-mqtt-quic` is in your app’s `package.json` and that the iOS project includes the plugin (Capacitor should auto-discover it). If you use a custom Podfile, ensure the AnnadataCapacitorMqttQuic plugin target is included. |\n| **Android** | Run `npx cap sync android` and rebuild. If you see \"WolfSSL not found\", run the one-time native build (see above). |\n| **Web / browser** | In browser, the plugin uses the **web** implementation (WSS or WebTransport). If you get UNIMPLEMENTED in the browser, the app may be resolving the native bridge instead of the web plugin—e.g. wrong `capacitor.config` or build. Ensure you’re opening the app as a web build (e.g. `ionic serve` or `cap run web`), not a native app with a WebView. |\n\nAfter adding the plugin or changing native code, always run **`npx cap sync`** and on iOS **`pod install`**, then rebuild the native app.\n\n## Development\n\n### Build Plugin\n\n```bash\ngit clone https://github.com/annadata/capacitor-mqtt-quic.git\ncd capacitor-mqtt-quic\nnpm install\nnpm run build\n```\n\n### Add to Capacitor App\n\n```bash\ncd your-capacitor-app\nnpm install @annadata/capacitor-mqtt-quic\nnpx cap sync\n```\n\n### Usage in App\n\n```ts\nimport { MqttQuic } from '@annadata/capacitor-mqtt-quic';\nimport { MqttQuicService } from './services/MqttQuicService';\n\n// Via service (recommended)\nconst mqttService = new MqttQuicService();\nawait mqttService.connect();\n\n// Or directly\nawait MqttQuic.connect({\n  host: 'mqtt.annadata.cloud',\n  port: 1884,\n  clientId: 'device-123',\n  protocolVersion: '5.0'\n});\n```\n\n## Publishing (maintainers)\n\nTo pack the plugin **with native libs** and publish to npm, follow **[PRODUCTION_PUBLISH_STEPS.md](./docs/PRODUCTION_PUBLISH_STEPS.md)**.\n\n## Documentation\n\n- [Implementation Summary](./docs/IMPLEMENTATION_SUMMARY.md) - Complete project overview\n- [MQTT 5.0 Implementation](./docs/MQTT5_IMPLEMENTATION_COMPLETE.md) - MQTT 5.0 features and usage\n- [ngtcp2 Integration Plan](./docs/NGTCP2_INTEGRATION_PLAN.md) - Build instructions for real QUIC\n- [MQTT Version Analysis](./docs/MQTT_VERSION_ANALYSIS.md) - Why MQTT 5.0?\n\n## Web / browser support\n\nThe plugin runs in **browsers** (including PWA and `cap run web`) with the **same API** as iOS and Android.\n\n**Why web can’t use ngtcp2 + WolfSSL:** Browsers do not expose raw UDP or the TLS APIs ngtcp2/WolfSSL need. So the native stack cannot run in the browser. On web: (1) **Default:** MQTT over **WebSocket (WSS)** via `mqtt.js`. (2) **Optional:** MQTT over **WebTransport** (QUIC)—pass `webTransportUrl` in `connect()` when your server supports WebTransport; the browser uses its built-in HTTP/3/QUIC stack.\n\n- **Connect:** `ws://host:port` or `wss://host:port` (the plugin uses WSS when port is 8884 or 443, otherwise `ws`)\n- **Same methods:** `MqttQuic.connect`, `publish`, `subscribe`, `unsubscribe`, `disconnect`, `sendKeepalive`, `ping`, `testHarness`\n\n**My MQTT+QUIC server is on port 1884 – can WSS connect?**  \nPort **1884** is usually **MQTT over QUIC** (UDP). A **WSS client cannot connect directly to 1884**, because WSS is TCP/WebSocket and 1884 is QUIC. You need one of:\n\n1. **Server also exposes MQTT over WebSocket**  \n   Many brokers listen on two ports: e.g. **1884** for MQTT-over-QUIC and **8884** (or 8084) for MQTT-over-WebSocket Secure. From the **web** plugin, connect to the **WebSocket port** (e.g. 8884), not 1884:\n   ```ts\n   await MqttQuic.connect({ host: 'your-server.com', port: 8884, clientId: 'web-client' });\n   ```\n   The plugin will use `wss://your-server.com:8884`.\n\n2. **Proxy/gateway**  \n   Run a gateway that listens for WSS (e.g. on 8884) and forwards MQTT to your QUIC server on 1884. The web client then connects to the gateway’s WSS port.\n\n3. **Native or WebTransport**  \n   On **iOS/Android** use the same host and **port 1884** (QUIC). On **web**, if the server supports **WebTransport**, use `webTransportUrl` (see example below) so the browser uses QUIC via WebTransport.\n- **Same events:** `MqttQuic.addListener('connected', ...)`, `addListener('subscribed', ...)`, `addListener('message', (e) => { e.topic, e.payload })`\n- **Build:** The plugin bundles `mqtt`; no extra install in the app.\n\nExample in a browser or PWA:\n\n```ts\nimport { MqttQuic } from '@annadata/capacitor-mqtt-quic';\n\nMqttQuic.addListener('message', (e) => console.log(e.topic, e.payload));\nawait MqttQuic.connect({ host: 'broker.example.com', port: 8884, clientId: 'web-client' });\nawait MqttQuic.subscribe({ topic: 'sensors/#' });\n```\n\nExample with QUIC on web (WebTransport; server must support WebTransport and MQTT over it):\n\n```ts\nawait MqttQuic.connect({\n  webTransportUrl: 'https://broker.example.com:443/mqtt-wt',\n  clientId: 'web-quic-client',\n  host: 'broker.example.com',\n  port: 443,\n});\n```\n\nWhen the server uses path-based routing (like MQTT topics), data is at `.../devices/<deviceId>/<action>/<Path>`. You can pass the base URL and path components; the plugin builds the full URL:\n\n```ts\nawait MqttQuic.connect({\n  webTransportUrl: 'https://mqtt.annadata.cloud:443/mqtt-wt',\n  webTransportDeviceId: 'mydevice',\n  webTransportAction: 'subscribe',   // or 'publish', etc.\n  webTransportPath: 'sensors/temp',   // optional; like MQTT topic suffix\n  clientId: 'web-client',\n  host: 'mqtt.annadata.cloud',\n  port: 443,\n});\n// Connects to: https://mqtt.annadata.cloud:443/mqtt-wt/devices/mydevice/subscribe/sensors/temp\n```\n\n## Compatibility\n\n- **Platforms:** **iOS**, **Android**, **Web (browser / PWA)**\n- **MQTT Protocol:** 3.1.1 and 5.0 (auto-negotiation)\n- **iOS:** 15.0+\n- **Android:** API 21+ (Android 5.0+)\n- **Web:** Any modern browser; MQTT over WSS\n- **Capacitor:** 8.0+\n- **QUIC:** ngtcp2 + WolfSSL on native; on web, optional WebTransport (browser's HTTP/3/QUIC) when server supports it\n\n## Author\n\n**Yakub Mohammad**\n\n- yakub@annadata.ai\n- yakub@arusatech.com\n- yakub@arusallc.com\n\n## License\n\nMIT\n","readmeFilename":"README.md"}