{"_id":"@aisahub/app-builder-sdk","_rev":"14-0dc4318d9fa12b0c2233c0276c0c3f16","name":"@aisahub/app-builder-sdk","dist-tags":{"latest":"1.0.9"},"versions":{"1.0.1":{"name":"@aisahub/app-builder-sdk","version":"1.0.1","keywords":["flutter","webview","bridge","sdk","javascript","typescript","react","react-hooks","app-builder","fcm","push-notifications","native-bridge","mobile","cordova-alternative","capacitor-alternative"],"author":{"name":"AISA Hub"},"license":"MIT","_id":"@aisahub/app-builder-sdk@1.0.1","maintainers":[{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"}],"homepage":"https://app-builder-bridge.vercel.app","bugs":{"url":"https://github.com/aisahub/app-builder-bridge/issues"},"dist":{"shasum":"0e0c1a3fe0f9119c8029afa37ac7e6435b748905","tarball":"https://registry.npmjs.org/@aisahub/app-builder-sdk/-/app-builder-sdk-1.0.1.tgz","fileCount":10,"integrity":"sha512-CqzrA51y4iPwYcFfWbvzU1GL6p5xd2lKqpxKZZ2k2/SHJ+VE4t6SO7I/RErpu+7Yxht2AUG42LbO6ypF2yHiZw==","signatures":[{"sig":"MEUCIDUEC2ioZG0bztK97DBpe+kFLwT8FmJ4/kwUI9/5KG1pAiEA0kcVnNp/7gcE+b7O5wQlo03q+2xPCjyP4J+ELymVvMk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53665},"main":"dist/app-builder-bridge.js","types":"dist/types/app-bridge.d.ts","module":"dist/app-builder-bridge.js","exports":{".":{"types":"./dist/types/app-bridge.d.ts","import":"./dist/app-builder-bridge.js","default":"./dist/app-builder-bridge.js","require":"./dist/app-builder-bridge.js"},"./hooks":{"types":"./dist/hooks/useAppBridge.d.ts","import":"./dist/hooks/useAppBridge.js","default":"./dist/hooks/useAppBridge.js"},"./dist/*":"./dist/*"},"gitHead":"1b77992312321bb310dbaaa48e83c67088712346","scripts":{"dev":"next dev -p 3001","lint":"next lint","build":"next build","clean":"rm -rf dist","start":"next start","build:sdk":"npm run clean && npm run build:copy && npm run build:types && npm run build:readme","pack:test":"npm run build:sdk && npm pack","build:copy":"mkdir -p dist/hooks dist/types && cp public/sdk/app-builder-bridge.js dist/ && cp public/sdk/app-builder-bridge.min.js dist/ && cp hooks/useAppBridge.ts dist/hooks/ && cp types/app-bridge.d.ts dist/types/","type-check":"tsc --noEmit","build:types":"tsc --project tsconfig.sdk.json","build:readme":"cp README.npm.md README.md","version:major":"npm version major","version:minor":"npm version minor","version:patch":"npm version patch","prepublishOnly":"npm run build:sdk"},"_npmUser":{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"},"repository":{"url":"git+https://github.com/aisahub/app-builder-bridge.git","type":"git"},"_npmVersion":"9.2.0","description":"WebView to Flutter communication bridge SDK for App Builder - Access native device capabilities from web applications","directories":{},"_nodeVersion":"18.19.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^14.2.0","react":"^18.3.0","eslint":"^8.57.0","postcss":"^8.4.38","react-dom":"^18.3.0","typescript":"^5.4.5","@types/node":"^20.14.0","tailwindcss":"^3.4.4","@types/react":"^18.3.0","autoprefixer":"^10.4.19","lucide-react":"^0.400.0","@types/react-dom":"^18.3.0","eslint-config-next":"^14.2.0"},"peerDependencies":{"react":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/app-builder-sdk_1.0.1_1762850687735_0.9496481953084255","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aisahub/app-builder-sdk","version":"1.0.2","keywords":["flutter","webview","bridge","sdk","javascript","typescript","react","react-hooks","app-builder","fcm","push-notifications","native-bridge","mobile","cordova-alternative","capacitor-alternative"],"author":{"name":"AISA Hub"},"license":"MIT","_id":"@aisahub/app-builder-sdk@1.0.2","maintainers":[{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"}],"homepage":"https://app-builder-bridge.vercel.app","bugs":{"url":"https://github.com/aisahub/app-builder-bridge/issues"},"dist":{"shasum":"9ec9ef6c4ade810acbc9b8201f6b70f3879bebd8","tarball":"https://registry.npmjs.org/@aisahub/app-builder-sdk/-/app-builder-sdk-1.0.2.tgz","fileCount":10,"integrity":"sha512-Ir6S57kNUFGY1yeRI+hdxXuhbFPlRSoAiAz5RBe8ERDzJDxnOItaowCGbMFC1SfHneDhsVHlilFqs6OP6gGhHg==","signatures":[{"sig":"MEYCIQCawMcQxPxzcqS7kyZ6m9PmUo2TYBdT4NxZ62N7y0lZowIhAILrGHZc5kSAPVCNRIza4K5biAyXyAVmiTP6pcDP7ipR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56574},"main":"dist/app-builder-bridge.js","types":"dist/types/app-bridge.d.ts","module":"dist/app-builder-bridge.js","exports":{".":{"types":"./dist/types/app-bridge.d.ts","import":"./dist/app-builder-bridge.js","default":"./dist/app-builder-bridge.js","require":"./dist/app-builder-bridge.js"},"./hooks":{"types":"./dist/hooks/useAppBridge.d.ts","import":"./dist/hooks/useAppBridge.js","default":"./dist/hooks/useAppBridge.js"},"./dist/*":"./dist/*"},"gitHead":"8f19927e4fa81d6a2a298de235a451e6d6234ab9","scripts":{"dev":"next dev -p 3001","lint":"next lint","build":"next build","clean":"rm -rf dist","start":"next start","build:sdk":"npm run clean && npm run build:copy && npm run build:types && npm run build:readme","pack:test":"npm run build:sdk && npm pack","build:copy":"mkdir -p dist/hooks dist/types && cp public/sdk/app-builder-bridge.js dist/ && cp public/sdk/app-builder-bridge.min.js dist/ && cp hooks/useAppBridge.ts dist/hooks/ && cp types/app-bridge.d.ts dist/types/","type-check":"tsc --noEmit","build:types":"tsc --project tsconfig.sdk.json","build:readme":"cp README.npm.md README.md","version:major":"npm version major","version:minor":"npm version minor","version:patch":"npm version patch","prepublishOnly":"npm run build:sdk"},"_npmUser":{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"},"repository":{"url":"git+https://github.com/aisahub/app-builder-bridge.git","type":"git"},"_npmVersion":"9.2.0","description":"WebView to Flutter communication bridge SDK for App Builder - Access native device capabilities from web applications","directories":{},"_nodeVersion":"18.19.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^14.2.0","react":"^18.3.0","eslint":"^8.57.0","postcss":"^8.4.38","react-dom":"^18.3.0","typescript":"^5.4.5","@types/node":"^20.14.0","tailwindcss":"^3.4.4","@types/react":"^18.3.0","autoprefixer":"^10.4.19","lucide-react":"^0.400.0","@types/react-dom":"^18.3.0","eslint-config-next":"^14.2.0"},"peerDependencies":{"react":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/app-builder-sdk_1.0.2_1762876362637_0.4431200913347313","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@aisahub/app-builder-sdk","version":"1.0.3","keywords":["flutter","webview","bridge","sdk","javascript","typescript","react","react-hooks","app-builder","fcm","push-notifications","native-bridge","mobile","cordova-alternative","capacitor-alternative"],"author":{"name":"AISA Hub"},"license":"MIT","_id":"@aisahub/app-builder-sdk@1.0.3","maintainers":[{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"}],"homepage":"https://app-builder-bridge.vercel.app","bugs":{"url":"https://github.com/aisahub/app-builder-bridge/issues"},"dist":{"shasum":"f5a1e72e2309e3cc70f2f9d27beddb518ffbf670","tarball":"https://registry.npmjs.org/@aisahub/app-builder-sdk/-/app-builder-sdk-1.0.3.tgz","fileCount":10,"integrity":"sha512-zN454DV8l2pRCik789xxrVfft9m3gWigudURfFZKAA/Qnu5LnNer0y3q0SeT6kvXLQHKwOgFRV8ey6EkbhR0pg==","signatures":[{"sig":"MEYCIQCItQYFGRWHH9KzJPKyI9VpF4Dj0EQzPffP9hRWuR9uuAIhAIy0L10r40YvyJIVfmF4dTQ47fCak7muw9hCo8esBnGe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58245},"main":"dist/app-builder-bridge.js","types":"dist/types/app-bridge.d.ts","module":"dist/app-builder-bridge.js","exports":{".":{"types":"./dist/types/app-bridge.d.ts","import":"./dist/app-builder-bridge.js","default":"./dist/app-builder-bridge.js","require":"./dist/app-builder-bridge.js"},"./hooks":{"types":"./dist/hooks/useAppBridge.d.ts","import":"./dist/hooks/useAppBridge.js","default":"./dist/hooks/useAppBridge.js"},"./dist/*":"./dist/*"},"gitHead":"86f819742860ae353567868e687aeef97c05aed4","scripts":{"dev":"next dev -p 3001","lint":"next lint","build":"next build","clean":"rm -rf dist","start":"next start","build:sdk":"npm run clean && npm run build:copy && npm run build:types && npm run build:readme","pack:test":"npm run build:sdk && npm pack","build:copy":"mkdir -p dist/hooks dist/types && cp public/sdk/app-builder-bridge.js dist/ && cp public/sdk/app-builder-bridge.min.js dist/ && cp hooks/useAppBridge.ts dist/hooks/ && cp types/app-bridge.d.ts dist/types/","type-check":"tsc --noEmit","build:types":"tsc --project tsconfig.sdk.json","build:readme":"cp README.npm.md README.md","version:major":"npm version major","version:minor":"npm version minor","version:patch":"npm version patch","prepublishOnly":"npm run build:sdk"},"_npmUser":{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"},"repository":{"url":"git+https://github.com/aisahub/app-builder-bridge.git","type":"git"},"_npmVersion":"9.2.0","description":"WebView to Flutter communication bridge SDK for App Builder - Access native device capabilities from web applications","directories":{},"_nodeVersion":"18.19.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^14.2.0","react":"^18.3.0","eslint":"^8.57.0","postcss":"^8.4.38","react-dom":"^18.3.0","typescript":"^5.4.5","@types/node":"^20.14.0","tailwindcss":"^3.4.4","@types/react":"^18.3.0","autoprefixer":"^10.4.19","lucide-react":"^0.400.0","@types/react-dom":"^18.3.0","eslint-config-next":"^14.2.0"},"peerDependencies":{"react":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/app-builder-sdk_1.0.3_1764298226188_0.34837830940949543","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@aisahub/app-builder-sdk","version":"1.0.4","keywords":["flutter","webview","bridge","sdk","javascript","typescript","react","react-hooks","app-builder","fcm","push-notifications","native-bridge","mobile","cordova-alternative","capacitor-alternative"],"author":{"name":"AISA Hub"},"license":"MIT","_id":"@aisahub/app-builder-sdk@1.0.4","maintainers":[{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"}],"homepage":"https://app-builder-bridge.vercel.app","bugs":{"url":"https://github.com/aisahub/app-builder-bridge/issues"},"dist":{"shasum":"7e60ad76e5fb7ec0ad05ae0778d147e8bf72de79","tarball":"https://registry.npmjs.org/@aisahub/app-builder-sdk/-/app-builder-sdk-1.0.4.tgz","fileCount":10,"integrity":"sha512-mjPpIAmuZNeZGOX5R34PCm6CaytATU6bmk1N4xxlSzx5B+Kek7VnF3l3K0UYKFD5Dw4vxejVxSBlD0Dkiu9nYg==","signatures":[{"sig":"MEUCIHDOzn/nMqfsT0+STFFC3zHuXKcWZm/Bxhpi0wgop4WBAiEA5OV/ejw5Xp2rbtjU60NsjzwlfugKSU4WgPT7jy2ERZk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61766},"main":"dist/app-builder-bridge.js","types":"dist/types/app-bridge.d.ts","module":"dist/app-builder-bridge.js","exports":{".":{"types":"./dist/types/app-bridge.d.ts","import":"./dist/app-builder-bridge.js","default":"./dist/app-builder-bridge.js","require":"./dist/app-builder-bridge.js"},"./hooks":{"types":"./dist/hooks/useAppBridge.d.ts","import":"./dist/hooks/useAppBridge.js","default":"./dist/hooks/useAppBridge.js"},"./dist/*":"./dist/*"},"gitHead":"1feb56d0359a2931781e8a5392c90936c6963fe7","scripts":{"dev":"next dev -p 3001","lint":"next lint","build":"next build","clean":"rm -rf dist","start":"next start","build:sdk":"npm run clean && npm run build:copy && npm run build:types && npm run build:readme","pack:test":"npm run build:sdk && npm pack","build:copy":"mkdir -p dist/hooks dist/types && cp public/sdk/app-builder-bridge.js dist/ && cp public/sdk/app-builder-bridge.min.js dist/ && cp hooks/useAppBridge.ts dist/hooks/ && cp types/app-bridge.d.ts dist/types/","type-check":"tsc --noEmit","build:types":"tsc --project tsconfig.sdk.json","build:readme":"cp README.npm.md README.md","version:major":"npm version major","version:minor":"npm version minor","version:patch":"npm version patch","prepublishOnly":"npm run build:sdk"},"_npmUser":{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"},"repository":{"url":"git+https://github.com/aisahub/app-builder-bridge.git","type":"git"},"_npmVersion":"9.2.0","description":"WebView to Flutter communication bridge SDK for App Builder - Access native device capabilities from web applications","directories":{},"_nodeVersion":"18.19.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^14.2.0","react":"^18.3.0","eslint":"^8.57.0","postcss":"^8.4.38","react-dom":"^18.3.0","typescript":"^5.4.5","@types/node":"^20.14.0","tailwindcss":"^3.4.4","@types/react":"^18.3.0","autoprefixer":"^10.4.19","lucide-react":"^0.400.0","@types/react-dom":"^18.3.0","eslint-config-next":"^14.2.0"},"peerDependencies":{"react":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/app-builder-sdk_1.0.4_1764905148760_0.2736169595111586","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@aisahub/app-builder-sdk","version":"1.0.5","keywords":["flutter","webview","bridge","sdk","javascript","typescript","react","react-hooks","app-builder","fcm","push-notifications","native-bridge","mobile","cordova-alternative","capacitor-alternative"],"author":{"name":"AISA Hub"},"license":"MIT","_id":"@aisahub/app-builder-sdk@1.0.5","maintainers":[{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"}],"homepage":"https://app-builder-bridge.vercel.app","bugs":{"url":"https://github.com/aisahub/app-builder-bridge/issues"},"dist":{"shasum":"b491445133abf4707b91ba9f96b86212bf153631","tarball":"https://registry.npmjs.org/@aisahub/app-builder-sdk/-/app-builder-sdk-1.0.5.tgz","fileCount":10,"integrity":"sha512-tKpfkGxBTF7trO+1+EAzBDyXvgPdjagr1DiWWhMrPkrCwSp8K9i0N0yNbSrXsv9wFKKThF94zeNX8z6gfOw2SQ==","signatures":[{"sig":"MEUCICQb5hwHFpNfhdY45l9fWtC46N88U0BCybaM3ppDdhMuAiEA0jhdRggZLlp67nuRtPW8YbGCui2vZkMnswZldVj2mRg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62110},"main":"dist/app-builder-bridge.js","types":"dist/types/app-bridge.d.ts","module":"dist/app-builder-bridge.js","exports":{".":{"types":"./dist/types/app-bridge.d.ts","import":"./dist/app-builder-bridge.js","default":"./dist/app-builder-bridge.js","require":"./dist/app-builder-bridge.js"},"./hooks":{"types":"./dist/hooks/useAppBridge.d.ts","import":"./dist/hooks/useAppBridge.js","default":"./dist/hooks/useAppBridge.js"},"./dist/*":"./dist/*"},"gitHead":"40bc27d109169c7405afaf68b28b949eaccb6aaa","scripts":{"dev":"next dev -p 3001","lint":"next lint","build":"next build","clean":"rm -rf dist","start":"next start","build:sdk":"npm run clean && npm run build:copy && npm run build:types && npm run build:readme","pack:test":"npm run build:sdk && npm pack","build:copy":"mkdir -p dist/hooks dist/types && cp public/sdk/app-builder-bridge.js dist/ && cp public/sdk/app-builder-bridge.min.js dist/ && cp hooks/useAppBridge.ts dist/hooks/ && cp types/app-bridge.d.ts dist/types/","type-check":"tsc --noEmit","build:types":"tsc --project tsconfig.sdk.json","build:readme":"cp README.npm.md README.md","version:major":"npm version major","version:minor":"npm version minor","version:patch":"npm version patch","prepublishOnly":"npm run build:sdk"},"_npmUser":{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"},"repository":{"url":"git+https://github.com/aisahub/app-builder-bridge.git","type":"git"},"_npmVersion":"9.2.0","description":"WebView to Flutter communication bridge SDK for App Builder - Access native device capabilities from web applications","directories":{},"_nodeVersion":"18.19.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^14.2.0","react":"^18.3.0","eslint":"^8.57.0","postcss":"^8.4.38","react-dom":"^18.3.0","typescript":"^5.4.5","@types/node":"^20.14.0","tailwindcss":"^3.4.4","@types/react":"^18.3.0","autoprefixer":"^10.4.19","lucide-react":"^0.400.0","@types/react-dom":"^18.3.0","eslint-config-next":"^14.2.0"},"peerDependencies":{"react":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/app-builder-sdk_1.0.5_1764918685955_0.796500715223075","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@aisahub/app-builder-sdk","version":"1.0.6","keywords":["flutter","webview","bridge","sdk","javascript","typescript","react","react-hooks","app-builder","fcm","push-notifications","native-bridge","mobile","cordova-alternative","capacitor-alternative"],"author":{"name":"AISA Hub"},"license":"MIT","_id":"@aisahub/app-builder-sdk@1.0.6","maintainers":[{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"}],"homepage":"https://app-builder-bridge.vercel.app","bugs":{"url":"https://github.com/aisahub/app-builder-bridge/issues"},"dist":{"shasum":"fc684cb56a9e98ef8f761144ec62d6c4505c199e","tarball":"https://registry.npmjs.org/@aisahub/app-builder-sdk/-/app-builder-sdk-1.0.6.tgz","fileCount":9,"integrity":"sha512-rrlkYkk1jj8J02ZkiUIgagAAeGZMsv2uSVvRfbDTvwyB6eHIJ3zEH//lPvs2cmbZyeY9ISAKTgoo61H8A40rdA==","signatures":[{"sig":"MEYCIQDx/SIbgPr/UVfwFq9o/P07rhysebTZT/64xoK+51dmagIhAPR6h9KPposcZendqQnA3eG4Zk/+EIyx9Ubr6l3Tm89Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72630},"main":"dist/app-builder-bridge.js","types":"dist/types/app-bridge.d.ts","module":"dist/app-builder-bridge.js","exports":{".":{"types":"./dist/types/app-bridge.d.ts","import":"./dist/app-builder-bridge.js","default":"./dist/app-builder-bridge.js","require":"./dist/app-builder-bridge.js"},"./hooks":{"types":"./dist/hooks/useAppBridge.d.ts","import":"./dist/hooks/useAppBridge.js","default":"./dist/hooks/useAppBridge.js"},"./dist/*":"./dist/*"},"gitHead":"63fa42a75e0813578a07e43398035b67a3384be8","scripts":{"dev":"next dev -p 3001","lint":"next lint","build":"next build","clean":"rm -rf dist","start":"next start","release":"npm run build:sdk && npm version patch && git push && git push --tags","build:sdk":"npm run clean && npm run build:copy && npm run build:types","pack:test":"npm run build:sdk && npm pack","build:copy":"mkdir -p dist/hooks dist/types && cp public/sdk/app-builder-bridge.js dist/ && cp public/sdk/app-builder-bridge.min.js dist/ && cp hooks/useAppBridge.ts dist/hooks/ && cp types/app-bridge.d.ts dist/types/","type-check":"tsc --noEmit","build:types":"tsc --project tsconfig.sdk.json","release:major":"npm run build:sdk && npm version major && git push && git push --tags","release:minor":"npm run build:sdk && npm version minor && git push && git push --tags","version:major":"npm version major && git push && git push --tags","version:minor":"npm version minor && git push && git push --tags","version:patch":"npm version patch && git push && git push --tags","prepublishOnly":"npm run build:sdk"},"_npmUser":{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"},"repository":{"url":"git+https://github.com/aisahub/app-builder-bridge.git","type":"git"},"_npmVersion":"9.2.0","description":"WebView to Flutter communication bridge SDK for App Builder - Access native device capabilities from web applications","directories":{},"_nodeVersion":"18.19.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^14.2.0","react":"^18.3.0","eslint":"^8.57.0","postcss":"^8.4.38","react-dom":"^18.3.0","typescript":"^5.4.5","@types/node":"^20.14.0","tailwindcss":"^3.4.4","@types/react":"^18.3.0","autoprefixer":"^10.4.19","lucide-react":"^0.400.0","@types/react-dom":"^18.3.0","eslint-config-next":"^14.2.0"},"peerDependencies":{"react":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/app-builder-sdk_1.0.6_1765338503187_0.9872284002351965","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@aisahub/app-builder-sdk","version":"1.0.7","keywords":["flutter","webview","bridge","sdk","javascript","typescript","react","react-hooks","app-builder","fcm","push-notifications","native-bridge","mobile","cordova-alternative","capacitor-alternative"],"author":{"name":"AISA Hub"},"license":"MIT","_id":"@aisahub/app-builder-sdk@1.0.7","maintainers":[{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"}],"homepage":"https://app-builder-bridge.vercel.app","bugs":{"url":"https://github.com/aisahub/app-builder-bridge/issues"},"dist":{"shasum":"8e76e05d9df2cc0460de5781732e10dbfd566bec","tarball":"https://registry.npmjs.org/@aisahub/app-builder-sdk/-/app-builder-sdk-1.0.7.tgz","fileCount":9,"integrity":"sha512-uNeRPMHfhuIA16CE5BX5FF9BS7aWYswAu7mE7kHD4zdy1dF6+idmCHdhzI7w43nlSRlenK1MtvZaPVgp+7HkSQ==","signatures":[{"sig":"MEYCIQDauRFCSENZPrUW1rgKLg9PeXrmK6Jz2UCaWQQ3GJNMKQIhAOEi2gvKtxueXX/Tvwt4FaNiSglCsJGigxi8ylEE8HED","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76677},"main":"dist/app-builder-bridge.js","types":"dist/types/app-bridge.d.ts","module":"dist/app-builder-bridge.js","exports":{".":{"types":"./dist/types/app-bridge.d.ts","import":"./dist/app-builder-bridge.js","default":"./dist/app-builder-bridge.js","require":"./dist/app-builder-bridge.js"},"./hooks":{"types":"./dist/hooks/useAppBridge.d.ts","import":"./dist/hooks/useAppBridge.js","default":"./dist/hooks/useAppBridge.js"},"./dist/*":"./dist/*"},"gitHead":"931cd2df9ec82fa47b973017f56ed103bceec9aa","scripts":{"dev":"next dev -p 3001","lint":"next lint","build":"next build","clean":"rm -rf dist","start":"next start","release":"npm run build:sdk && npm version patch && git push && git push --tags","build:sdk":"npm run clean && npm run build:copy && npm run build:types","pack:test":"npm run build:sdk && npm pack","build:copy":"mkdir -p dist/hooks dist/types && cp public/sdk/app-builder-bridge.js dist/ && cp public/sdk/app-builder-bridge.min.js dist/ && cp hooks/useAppBridge.ts dist/hooks/ && cp types/app-bridge.d.ts dist/types/","type-check":"tsc --noEmit","build:types":"tsc --project tsconfig.sdk.json","release:major":"npm run build:sdk && npm version major && git push && git push --tags","release:minor":"npm run build:sdk && npm version minor && git push && git push --tags","version:major":"npm version major && git push && git push --tags","version:minor":"npm version minor && git push && git push --tags","version:patch":"npm version patch && git push && git push --tags","prepublishOnly":"npm run build:sdk"},"_npmUser":{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"},"repository":{"url":"git+https://github.com/aisahub/app-builder-bridge.git","type":"git"},"_npmVersion":"9.2.0","description":"WebView to Flutter communication bridge SDK for App Builder - Access native device capabilities from web applications","directories":{},"_nodeVersion":"18.19.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^14.2.0","react":"^18.3.0","eslint":"^8.57.0","postcss":"^8.4.38","react-dom":"^18.3.0","typescript":"^5.4.5","@types/node":"^20.14.0","tailwindcss":"^3.4.4","@types/react":"^18.3.0","autoprefixer":"^10.4.19","lucide-react":"^0.400.0","@types/react-dom":"^18.3.0","eslint-config-next":"^14.2.0"},"peerDependencies":{"react":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/app-builder-sdk_1.0.7_1765341818131_0.2072357536510261","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@aisahub/app-builder-sdk","version":"1.0.8","keywords":["flutter","webview","bridge","sdk","javascript","typescript","react","react-hooks","app-builder","fcm","push-notifications","native-bridge","mobile","cordova-alternative","capacitor-alternative"],"author":{"name":"AISA Hub"},"license":"MIT","_id":"@aisahub/app-builder-sdk@1.0.8","maintainers":[{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"}],"homepage":"https://app-builder-bridge.vercel.app","bugs":{"url":"https://github.com/aisahub/app-builder-bridge/issues"},"dist":{"shasum":"f036acb0159f17776b73928fb064eff906d08d41","tarball":"https://registry.npmjs.org/@aisahub/app-builder-sdk/-/app-builder-sdk-1.0.8.tgz","fileCount":9,"integrity":"sha512-+ed0OIlbhTjfVEP7tSTf1gxZCZXlUIZLhXCYm22uNNjYdpllZ+r1SAnIlXtxxwUZXM5unU3HE9AmSPd8VK3A1A==","signatures":[{"sig":"MEUCIQDNUOiU+CnKVa0wSgHqKs0QsaF1u/4vQa/WFVgZlRyqcQIgUP5FZbgMDpsl+ODL+eJli+DJZAx7omdSpBdwqgAQliQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77996},"main":"dist/app-builder-bridge.js","types":"dist/types/app-bridge.d.ts","module":"dist/app-builder-bridge.js","exports":{".":{"types":"./dist/types/app-bridge.d.ts","import":"./dist/app-builder-bridge.js","default":"./dist/app-builder-bridge.js","require":"./dist/app-builder-bridge.js"},"./hooks":{"types":"./dist/hooks/useAppBridge.d.ts","import":"./dist/hooks/useAppBridge.js","default":"./dist/hooks/useAppBridge.js"},"./dist/*":"./dist/*"},"gitHead":"0808dec75eefa5b9e2786c1ec57d903f810929b0","scripts":{"dev":"next dev -p 3001","lint":"next lint","build":"next build","clean":"rm -rf dist","start":"next start","release":"npm run build:sdk && npm version patch && git push && git push --tags","build:sdk":"npm run clean && npm run build:copy && npm run build:types","pack:test":"npm run build:sdk && npm pack","build:copy":"mkdir -p dist/hooks dist/types && cp public/sdk/app-builder-bridge.js dist/ && cp public/sdk/app-builder-bridge.min.js dist/ && cp hooks/useAppBridge.ts dist/hooks/ && cp types/app-bridge.d.ts dist/types/","type-check":"tsc --noEmit","build:types":"tsc --project tsconfig.sdk.json","release:major":"npm run build:sdk && npm version major && git push && git push --tags","release:minor":"npm run build:sdk && npm version minor && git push && git push --tags","version:major":"npm version major && git push && git push --tags","version:minor":"npm version minor && git push && git push --tags","version:patch":"npm version patch && git push && git push --tags","prepublishOnly":"npm run build:sdk"},"_npmUser":{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"},"repository":{"url":"git+https://github.com/aisahub/app-builder-bridge.git","type":"git"},"_npmVersion":"9.2.0","description":"WebView to Flutter communication bridge SDK for App Builder - Access native device capabilities from web applications","directories":{},"_nodeVersion":"18.19.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^14.2.0","react":"^18.3.0","eslint":"^8.57.0","postcss":"^8.4.38","react-dom":"^18.3.0","typescript":"^5.4.5","@types/node":"^20.14.0","tailwindcss":"^3.4.4","@types/react":"^18.3.0","autoprefixer":"^10.4.19","lucide-react":"^0.400.0","@types/react-dom":"^18.3.0","eslint-config-next":"^14.2.0"},"peerDependencies":{"react":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/app-builder-sdk_1.0.8_1765347032532_0.3518189427322429","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@aisahub/app-builder-sdk","version":"1.0.9","keywords":["flutter","webview","bridge","sdk","javascript","typescript","react","react-hooks","app-builder","fcm","push-notifications","native-bridge","mobile","cordova-alternative","capacitor-alternative"],"author":{"name":"AISA Hub"},"license":"MIT","_id":"@aisahub/app-builder-sdk@1.0.9","maintainers":[{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"}],"homepage":"https://app-builder-bridge.vercel.app","bugs":{"url":"https://github.com/aisahub/app-builder-bridge/issues"},"dist":{"shasum":"15d8c351f674c86d537a54e6c99b8070a30a07b8","tarball":"https://registry.npmjs.org/@aisahub/app-builder-sdk/-/app-builder-sdk-1.0.9.tgz","fileCount":9,"integrity":"sha512-OMZPGOasluDmc2CUewh0Bv8hmoIVDXXeF3T/FUMNA4953XtzO0IVYsjZMIiUDPEvYT1szatmsWCskGYTn06eKg==","signatures":[{"sig":"MEUCIBrzSpWIufCbOnP8YSaTlmS2dB3jnHP6jakHH+2rfTvvAiEAwkDuSY8o0pqVYcNqjmUggOPgK6pB28HeP/pwjrCpYJ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78203},"main":"dist/app-builder-bridge.js","types":"dist/types/app-bridge.d.ts","module":"dist/app-builder-bridge.js","exports":{".":{"types":"./dist/types/app-bridge.d.ts","import":"./dist/app-builder-bridge.js","default":"./dist/app-builder-bridge.js","require":"./dist/app-builder-bridge.js"},"./hooks":{"types":"./dist/hooks/useAppBridge.d.ts","import":"./dist/hooks/useAppBridge.js","default":"./dist/hooks/useAppBridge.js"},"./dist/*":"./dist/*"},"gitHead":"a8ca54038ca389905637b0987963318ed9a699b1","scripts":{"dev":"next dev -p 3001","lint":"next lint","build":"next build","clean":"rm -rf dist","start":"next start","release":"npm run build:sdk && npm version patch && git push && git push --tags","build:sdk":"npm run clean && npm run build:copy && npm run build:types","pack:test":"npm run build:sdk && npm pack","build:copy":"mkdir -p dist/hooks dist/types && cp public/sdk/app-builder-bridge.js dist/ && cp public/sdk/app-builder-bridge.min.js dist/ && cp hooks/useAppBridge.ts dist/hooks/ && cp types/app-bridge.d.ts dist/types/","type-check":"tsc --noEmit","build:types":"tsc --project tsconfig.sdk.json","release:major":"npm run build:sdk && npm version major && git push && git push --tags","release:minor":"npm run build:sdk && npm version minor && git push && git push --tags","version:major":"npm version major && git push && git push --tags","version:minor":"npm version minor && git push && git push --tags","version:patch":"npm version patch && git push && git push --tags","prepublishOnly":"npm run build:sdk"},"_npmUser":{"name":"zakuby","email":"muhammad.yaqub.baisa@gmail.com"},"repository":{"url":"git+https://github.com/aisahub/app-builder-bridge.git","type":"git"},"_npmVersion":"9.2.0","description":"WebView to Flutter communication bridge SDK for App Builder - Access native device capabilities from web applications","directories":{},"_nodeVersion":"18.19.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"next":"^14.2.0","react":"^18.3.0","eslint":"^8.57.0","postcss":"^8.4.38","react-dom":"^18.3.0","typescript":"^5.4.5","@types/node":"^20.14.0","tailwindcss":"^3.4.4","@types/react":"^18.3.0","autoprefixer":"^10.4.19","lucide-react":"^0.400.0","@types/react-dom":"^18.3.0","eslint-config-next":"^14.2.0"},"peerDependencies":{"react":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/app-builder-sdk_1.0.9_1765521932112_0.8608669141034158","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-11-11T08:44:47.642Z","modified":"2025-12-22T01:50:33.987Z","1.0.0":"2025-11-05T02:38:25.289Z","2.0.0":"2025-11-11T08:39:43.243Z","1.0.1":"2025-11-11T08:44:47.991Z","1.0.2":"2025-11-11T15:52:42.813Z","1.0.3":"2025-11-28T02:50:26.383Z","1.0.4":"2025-12-05T03:25:48.947Z","1.0.5":"2025-12-05T07:11:26.112Z","1.0.6":"2025-12-10T03:48:23.330Z","1.0.7":"2025-12-10T04:43:38.272Z","1.0.8":"2025-12-10T06:10:32.728Z","1.0.9":"2025-12-12T06:45:32.268Z"},"bugs":{"url":"https://github.com/aisahub/app-builder-bridge/issues"},"author":{"name":"AISA Hub"},"license":"MIT","homepage":"https://app-builder-bridge.vercel.app","keywords":["flutter","webview","bridge","sdk","javascript","typescript","react","react-hooks","app-builder","fcm","push-notifications","native-bridge","mobile","cordova-alternative","capacitor-alternative"],"repository":{"url":"git+https://github.com/aisahub/app-builder-bridge.git","type":"git"},"description":"WebView to Flutter communication bridge SDK for App Builder - Access native device capabilities from web applications","maintainers":[{"email":"muhammad.yaqub.baisa@gmail.com","name":"zakuby"},{"email":"abdulshodiqfathan@gmail.com","name":"fathanabds"}],"readme":"# @aisahub/app-builder-sdk\n\n> WebView-to-Flutter communication bridge SDK that enables seamless integration between web applications and native Flutter functionality.\n\n[![npm version](https://img.shields.io/npm/v/@aisahub/app-builder-sdk.svg)](https://www.npmjs.com/package/@aisahub/app-builder-sdk)\n[![GitHub release](https://img.shields.io/github/v/release/aisahub/app-builder-bridge)](https://github.com/Aisahub/app-builder-bridge/releases/latest)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## Features\n\n- ✨ **Native Integration** - Access device capabilities like push notifications, secure storage, and location services\n- 🔄 **Bidirectional Communication** - JavaScript-to-Flutter bridge via WebView channels\n- 🌐 **Graceful Degradation** - Automatic fallback to web APIs when running in browsers\n- 📘 **TypeScript Support** - Full type definitions included\n- ⚛️ **React Hooks** - Pre-built hooks for React/Next.js applications\n- 🪶 **Zero Dependencies** - Lightweight vanilla JavaScript core\n- 🔊 **Text-to-Speech** - Native TTS with language management\n\n## Installation\n\n```bash\nnpm install @aisahub/app-builder-sdk\n```\n\nor\n\n```bash\nyarn add @aisahub/app-builder-sdk\n```\n\n## Quick Start\n\n### Vanilla JavaScript / HTML\n\nInclude the SDK in your HTML:\n\n```html\n<script src=\"node_modules/@aisahub/app-builder-sdk/dist/app-builder-bridge.min.js\"></script>\n<script>\n  if (AppBridge.isInApp()) {\n    console.log('Running in app environment');\n\n    AppBridge.generateFcmToken((result) => {\n      if (result.success) {\n        console.log('FCM Token:', result.token);\n      }\n    });\n  }\n</script>\n```\n\n### ES Modules / TypeScript\n\n```typescript\nimport '@aisahub/app-builder-sdk';\n\n// AppBridge is now available globally\nif (window.AppBridge.isInApp()) {\n  window.AppBridge.generateFcmToken((result) => {\n    console.log('Token:', result.token);\n  });\n}\n```\n\n### React / Next.js\n\n```tsx\nimport { useAppBridge, useGenerateFcmToken } from '@aisahub/app-builder-sdk/hooks';\n\nexport default function MyComponent() {\n  const { isInApp, bridge } = useAppBridge();\n  const { generateToken, token, loading } = useGenerateFcmToken();\n\n  return (\n    <div>\n      <p>Environment: {isInApp ? 'App' : 'Web Browser'}</p>\n\n      <button onClick={generateToken} disabled={loading}>\n        {loading ? 'Generating...' : 'Get FCM Token'}\n      </button>\n\n      {token && <p>Token: {token}</p>}\n    </div>\n  );\n}\n```\n\n## Core API\n\n### Environment Detection\n\n```javascript\nAppBridge.isInApp()     // Returns true if running in app environment (native or PWA)\nAppBridge.isNativeApp() // Returns true if running in Flutter WebView\nAppBridge.isPWA()       // Returns true if running in PWA iframe\n```\n\n### Push Notifications\n\n```javascript\nAppBridge.generateFcmToken((result) => {\n  if (result.success) {\n    console.log('Token:', result.token);\n  }\n});\n```\n\n### Secure Storage\n\n```javascript\n// Save\nAppBridge.saveSecure('auth_token', 'xyz123', (result) => {\n  console.log('Saved:', result.success);\n});\n\n// Get\nAppBridge.getSecure('auth_token', (result) => {\n  console.log('Value:', result.value);\n});\n\n// Delete\nAppBridge.deleteSecure('auth_token', (result) => {\n  console.log('Deleted:', result.success);\n});\n```\n\n### Device Information\n\n```javascript\nAppBridge.getDeviceInfo((info) => {\n  console.log(info);\n  // { model: \"Pixel 6\", manufacturer: \"Google\", osVersion: \"13\", platform: \"android\" }\n});\n\nAppBridge.getAppVersion((info) => {\n  console.log(info);\n  // { version: \"1.2.3\", buildNumber: \"42\" }\n});\n```\n\n### Location Services\n\n```javascript\n// Request permission\nAppBridge.requestLocationPermission((result) => {\n  if (result.granted) {\n    // Get location\n    AppBridge.getCurrentLocation((location) => {\n      console.log(location.latitude, location.longitude);\n    });\n  }\n});\n```\n\n### User Interactions\n\n```javascript\n// Toast notification\nAppBridge.showToast('Settings saved!', 'short');\n\n// Vibration\nAppBridge.vibrate(100);\n\n// Share dialog\nAppBridge.share('Check this out!', 'https://example.com', (result) => {\n  console.log('Shared:', result.success);\n});\n\n// Open external URL\nAppBridge.openExternalUrl('https://example.com');\n\n// Badge count\nAppBridge.setBadgeCount(5);\n```\n\n### Authentication\n\n```javascript\nAppBridge.logout((result) => {\n  if (result.success) {\n    window.location.href = '/login';\n  }\n});\n```\n\n### Text-to-Speech\n\n```javascript\n// Speak text - returns ttsId for tracking\nconst result = await AppBridge.speak('Hello world!', {\n  language: 'en-US',\n  rate: 0.5,\n  pitch: 1.0,\n  volume: 1.0\n});\nconst ttsId = result.data.ttsId;\n\n// Wait for speech to complete (non-blocking)\n// Call this in background, don't await in UI thread\nAppBridge.isTtsComplete(ttsId).then(() => {\n  console.log('Speech finished!');\n});\n\n// Cancel speech\nawait AppBridge.cancelSpeech();\n\n// Get available languages\nconst langResult = await AppBridge.getTTSLanguages();\nconsole.log(langResult.data.languages); // ['en-US', 'es-ES', ...]\n\n// Check language availability\nconst available = await AppBridge.isTTSLanguageAvailable('en-US');\n\n// Open TTS settings (to install languages)\nawait AppBridge.openTTSSettings();\n```\n\n## React Hooks\n\n### `useAppBridge()`\n\nInitialize and access the AppBridge instance:\n\n```tsx\nimport { useAppBridge } from '@aisahub/app-builder-sdk/hooks';\n\nconst { bridge, isReady, isInApp, isNativeApp, isPWA } = useAppBridge();\n```\n\n### `useGenerateFcmToken()`\n\nManage FCM token generation with loading states:\n\n```tsx\nimport { useGenerateFcmToken } from '@aisahub/app-builder-sdk/hooks';\n\nconst { generateToken, token, loading, error } = useGenerateFcmToken();\n```\n\n### `useDeviceInfo()`\n\nFetch device information:\n\n```tsx\nimport { useDeviceInfo } from '@aisahub/app-builder-sdk/hooks';\n\nconst { deviceInfo, loading } = useDeviceInfo();\n```\n\n### `useAppVersion()`\n\nGet app version information:\n\n```tsx\nimport { useAppVersion } from '@aisahub/app-builder-sdk/hooks';\n\nconst { version, loading } = useAppVersion();\n```\n\n### `useSecureStorage()`\n\nPromise-based secure storage operations:\n\n```tsx\nimport { useSecureStorage } from '@aisahub/app-builder-sdk/hooks';\n\nconst { saveSecure, getSecure, deleteSecure } = useSecureStorage();\n\n// Usage\nconst saved = await saveSecure('key', 'value');\nconst value = await getSecure('key');\nconst deleted = await deleteSecure('key');\n```\n\n### `useTTS()`\n\nText-to-Speech with language management:\n\n```tsx\nimport { useTTS } from '@aisahub/app-builder-sdk/hooks';\n\nconst {\n  speak,\n  cancel,\n  speaking,\n  getLanguages,\n  availableLanguages,\n  isLanguageAvailable,\n  openSettings\n} = useTTS();\n\n// Usage\nawait speak('Hello!', { language: 'en-US', rate: 0.5 });\nawait cancel();\nawait getLanguages(); // populates availableLanguages\n```\n\n## TypeScript Support\n\nThe SDK includes full TypeScript definitions:\n\n```typescript\nimport type {\n  AppBridgeAPI,\n  FcmTokenResult,\n  DeviceInfo,\n  LocationResult\n} from '@aisahub/app-builder-sdk';\n\ndeclare global {\n  interface Window {\n    AppBridge: AppBridgeAPI;\n  }\n}\n```\n\n## Platform Support\n\n- ✅ **iOS** (via Flutter WebView)\n- ✅ **Android** (via Flutter WebView)\n- ✅ **Web Browsers** (with graceful fallback to web APIs)\n\n## Documentation\n\n📚 **[Complete Documentation](https://app-builder-bridge.vercel.app)**\n\n- [Quick Start Guide](https://app-builder-bridge.vercel.app/quickstart)\n- [Full API Reference](https://app-builder-bridge.vercel.app/docs)\n- [React Hooks Guide](https://app-builder-bridge.vercel.app/docs#react-hooks)\n- [Flutter Integration](https://app-builder-bridge.vercel.app/docs#flutter-integration)\n\n## Examples\n\n### Authentication Flow\n\n```javascript\nasync function loginUser(email, password) {\n  // Authenticate with backend\n  const response = await fetch('/api/login', {\n    method: 'POST',\n    body: JSON.stringify({ email, password })\n  });\n\n  const { authToken } = await response.json();\n\n  // Save token securely\n  AppBridge.saveSecure('auth_token', authToken, (result) => {\n    if (result.success) {\n      // Get FCM token for push notifications\n      AppBridge.generateFcmToken((fcmResult) => {\n        if (fcmResult.success) {\n          registerDeviceWithBackend(fcmResult.token);\n        }\n      });\n\n      AppBridge.showToast('Login successful!');\n      window.location.href = '/dashboard';\n    }\n  });\n}\n```\n\n### Location-Based Features\n\n```javascript\nfunction findNearbyStores() {\n  AppBridge.requestLocationPermission((permissionResult) => {\n    if (permissionResult.granted) {\n      AppBridge.getCurrentLocation((location) => {\n        if (location.latitude) {\n          fetch(`/api/stores/nearby?lat=${location.latitude}&lng=${location.longitude}`)\n            .then(res => res.json())\n            .then(stores => {\n              AppBridge.showToast(`Found ${stores.length} stores nearby`);\n            });\n        }\n      });\n    }\n  });\n}\n```\n\n## Security\n\n- 🔒 **Secure Storage**: Uses iOS Keychain and Android EncryptedSharedPreferences\n- 🔐 **HTTPS Only**: Always serve your app over HTTPS\n- ✅ **Input Validation**: All inputs are validated before processing\n\n## Changelog\n\n### [1.0.8] - 2025-12-10\n- Fixed TTS completion tracking loop issue\n- Changed `isTtsComplete()` to event-based pattern (no polling/callbacks)\n- PWA/Flutter now sends `TTS_COMPLETED` event when speech finishes\n- Added `handleTtsCompleted(ttsId)` global handler for Flutter\n\n### [1.0.7] - 2025-12-10\n- Added `isTtsComplete(ttsId)` method to track speech completion\n- `speak()` now returns `ttsId` for tracking when speech finishes\n- Updated `useTTS()` hook to automatically track speech completion state\n- Documentation and examples updated with non-blocking completion pattern\n\n### [1.0.6] - 2025-12-10\n- Added Text-to-Speech (TTS) support with `speak()` and `cancelSpeech()` methods\n- Customizable TTS options: language, rate, pitch, and volume\n- TTS language management: `getTTSLanguages()`, `isTTSLanguageAvailable()`, `isTTSLanguageInstalled()`, `openTTSSettings()`\n- New `useTTS()` React hook with full language management support\n\n### [1.0.5] - 2025-12-10\n- Fixed synchronous PWA detection via `window.name` for immediate environment detection\n- Improved reliability of `isInApp()` check in PWA contexts\n\n### [1.0.4] - 2025-12-09\n- Added PWA (Progressive Web App) support with iframe environment detection\n- New `isPWA()` method to detect PWA iframe environment\n- `isInApp()` now returns true for both native apps and PWA environments\n- Fixed SDK cache invalidation issues\n\n### [1.0.3] - 2025-11-15\n- Restructured documentation table of contents\n- Separated authentication section for login functionality\n\n### [1.0.2] - 2025-11-10\n- Fixed callback data handling for improved reliability\n- Added comprehensive debugging capabilities\n\n### [1.0.1] - 2025-11-05\n- Implemented Result interface for consistent API responses\n- Converted SDK methods to async/await pattern\n\n### [1.0.0] - 2025-10-27\n- Initial release with full WebView-to-Flutter bridge functionality\n\nSee [CHANGELOG.md](https://github.com/aisahub/app-builder-bridge/blob/main/CHANGELOG.md) for full details.\n\n## Contributing\n\nContributions are welcome! Please read our [Contributing Guide](https://github.com/aisahub/app-builder-bridge/blob/main/CONTRIBUTING.md) for details.\n\n## License\n\nMIT © AISA Hub\n\n## Support\n\n- 🐛 [Report Issues](https://github.com/aisahub/app-builder-bridge/issues)\n- 💬 [Discussions](https://github.com/aisahub/app-builder-bridge/discussions)\n- 📧 Email: support@aisahub.com\n\n---\n\n**Made with ❤️ by AISA Hub**\n","readmeFilename":"README.md"}