{"_id":"@ada-cx/messaging-react-native","_rev":"11-6a7d37a575f659a6bdbe2dcd5558db0a","name":"@ada-cx/messaging-react-native","dist-tags":{"latest":"1.3.1"},"versions":{"1.0.0":{"name":"@ada-cx/messaging-react-native","version":"1.0.0","keywords":["ada","react-native","chat","messaging","webview"],"license":"ISC","_id":"@ada-cx/messaging-react-native@1.0.0","maintainers":[{"name":"ada-messaging-experience","email":"messaging-experience@ada.support"},{"name":"adaitsupport","email":"itsupport@ada.support"}],"homepage":"https://github.com/AdaSupport/messaging#readme","bugs":{"url":"https://github.com/AdaSupport/messaging/issues"},"dist":{"shasum":"94213293986276530c47afb799abc2527997f559","tarball":"https://registry.npmjs.org/@ada-cx/messaging-react-native/-/messaging-react-native-1.0.0.tgz","fileCount":24,"integrity":"sha512-6fIxvwQU3NZmUrVE9SYJ9umtl0nYdQ8qTzpoymYGK789+ur5x99ir4vDni2wX6gfiEcNA6UvSdsrxVpPILX2hA==","signatures":[{"sig":"MEUCIQD6rKTzRY8G0Yc081ozGDA3ae+JWuVkMpZKVRoQjy8YAgIgSmiIdIEavIXI5y6uU39KprKkpI2jwO6oUvlNeitXuKo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":274152},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","source":"./src/index.ts","default":"./dist/index.js","require":"./dist/index.js"}},"private":false,"scripts":{"lint":"biome check","test":"vitest run","build":"node scripts/build-bridge-adapter.mjs && vite build && tsc -p tsconfig.build.json","test:e2e":"bash ../../scripts/run-mobile-e2e.sh packages/react-native","typecheck":"tsc --noEmit","test:watch":"vitest","test:e2e:ios":"RN_PLATFORM=ios bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:android":"RN_PLATFORM=android bash ../../scripts/run-mobile-e2e.sh packages/react-native"},"_npmUser":{"name":"ada-messaging-experience","email":"messaging-experience@ada.support"},"repository":{"url":"git+https://github.com/AdaSupport/messaging.git","type":"git","directory":"packages/react-native"},"_npmVersion":"11.11.0","description":"Ada Messaging React Native SDK — embeds Ada Chat in a WebView with a secure native bridge","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","react-native-webview":">=13.0.0"},"_npmOperationalInternal":{"tmp":"tmp/messaging-react-native_1.0.0_1775651795419_0.09208736907344695","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@ada-cx/messaging-react-native","version":"1.0.2","keywords":["ada","ada.cx","react-native","chat","messaging","webview"],"license":"ISC","_id":"@ada-cx/messaging-react-native@1.0.2","maintainers":[{"name":"ada-messaging-experience","email":"messaging-experience@ada.support"},{"name":"adaitsupport","email":"itsupport@ada.support"}],"homepage":"https://docs.ada.cx","dist":{"shasum":"4d4f07c4c109ff3847e7f0f0d110e43d45f09c0e","tarball":"https://registry.npmjs.org/@ada-cx/messaging-react-native/-/messaging-react-native-1.0.2.tgz","fileCount":12,"integrity":"sha512-Ka0uzCCu7Ntdp5TvPtwMl0Aq9OciOy0l8AJKESGJ8GPfsf/wtfeYhAIQq/ohw7eZGZSfzJa8a3/7omZLpdc/zw==","signatures":[{"sig":"MEQCIDfC8lcIm4liZs5kYLlhVywem+lSOJyjuRJJQcr37N4VAiAwWwcg+uuS0rij5D/Bd+SoI+Tdm4o9lTRP3DMLL6gtBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177709},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","source":"./src/index.ts","default":"./dist/index.js","require":"./dist/index.js"}},"private":false,"scripts":{"lint":"biome check","test":"vitest run","build":"node scripts/build-bridge-adapter.mjs && vite build && tsc -p tsconfig.build.json","test:e2e":"bash ../../scripts/run-mobile-e2e.sh packages/react-native","typecheck":"tsc --noEmit","test:watch":"vitest","test:e2e:ios":"RN_PLATFORM=ios bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:android":"RN_PLATFORM=android bash ../../scripts/run-mobile-e2e.sh packages/react-native"},"_npmUser":{"name":"ada-messaging-experience","email":"messaging-experience@ada.support"},"_npmVersion":"11.11.0","description":"Ada Messaging React Native SDK — embeds Ada Chat in a WebView with a secure native bridge","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","react-native-webview":">=13.0.0"},"_npmOperationalInternal":{"tmp":"tmp/messaging-react-native_1.0.2_1775679104994_0.6672924116895731","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@ada-cx/messaging-react-native","version":"1.0.3","keywords":["ada","ada.cx","react-native","chat","messaging","webview"],"license":"ISC","_id":"@ada-cx/messaging-react-native@1.0.3","maintainers":[{"name":"ada-messaging-experience","email":"messaging-experience@ada.support"},{"name":"adaitsupport","email":"itsupport@ada.support"}],"homepage":"https://docs.ada.cx","dist":{"shasum":"af29edcdf5d9c64b8e1b3c10aa071e9d48fd8290","tarball":"https://registry.npmjs.org/@ada-cx/messaging-react-native/-/messaging-react-native-1.0.3.tgz","fileCount":11,"integrity":"sha512-YO165CvUf6guoydL+P+oQ4p6Ba+fpq17zgL2m4yb3Pc6deTEROnhCCYEmdbmOFmDZ+Gc66z5ixpdA38Kt9nOOQ==","signatures":[{"sig":"MEYCIQDisJLu6C/EFdmDm8ckSAPVlUIsTh9hx1v/Is3zY8KNZAIhAJ/Mv7jDcZhMwCCHqwCis8qO1Y6f4yikHtBonnGNKlpK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137187},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","source":"./src/index.ts","default":"./dist/index.js","require":"./dist/index.js"}},"private":false,"scripts":{"lint":"biome check","test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","test:e2e":"bash ../../scripts/run-mobile-e2e.sh packages/react-native","typecheck":"tsc --noEmit","test:watch":"vitest","test:e2e:ios":"RN_PLATFORM=ios bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:android":"RN_PLATFORM=android bash ../../scripts/run-mobile-e2e.sh packages/react-native"},"_npmUser":{"name":"ada-messaging-experience","email":"messaging-experience@ada.support"},"_npmVersion":"11.11.0","description":"Ada Messaging React Native SDK — embeds Ada Chat in a WebView with a secure native bridge","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","react-native-webview":">=13.0.0"},"_npmOperationalInternal":{"tmp":"tmp/messaging-react-native_1.0.3_1776437213288_0.4506073023421502","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@ada-cx/messaging-react-native","version":"1.0.4","keywords":["ada","ada.cx","react-native","chat","messaging","webview"],"license":"ISC","_id":"@ada-cx/messaging-react-native@1.0.4","maintainers":[{"name":"ada-messaging-experience","email":"messaging-experience@ada.support"},{"name":"adaitsupport","email":"itsupport@ada.support"}],"homepage":"https://docs.ada.cx","dist":{"shasum":"ff4e5fd46aaff3d9b6e96751b077d9fcd0f7d771","tarball":"https://registry.npmjs.org/@ada-cx/messaging-react-native/-/messaging-react-native-1.0.4.tgz","fileCount":11,"integrity":"sha512-yaA7g66R09a+9Ddp/3sV/gyHqgiZYozGIQbkHM89pL/GKdT/SE486oVIYbSx7yR5JeCck6OBOWfbzNUodIkahA==","signatures":[{"sig":"MEUCIC43J9pYBP7/+Lm7kJD16BfHqwpZiGD03OQ4ASJqV/FKAiEAosrup3wqbHaK4u9iD5ePi+guRhlNEwEH8wyCTFmsqnc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137187},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","source":"./src/index.ts","default":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"eb69fdf691b8f87a1e14204d030021f843569dd5","private":false,"scripts":{"lint":"biome check","test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","test:e2e":"bash ../../scripts/run-mobile-e2e.sh packages/react-native","typecheck":"tsc --noEmit","test:watch":"vitest","test:e2e:ios":"RN_PLATFORM=ios bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:android":"RN_PLATFORM=android bash ../../scripts/run-mobile-e2e.sh packages/react-native"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c09516b-c064-4ea0-ab88-84a079da0572"}},"_npmVersion":"11.11.0","description":"Ada Messaging React Native SDK — embeds Ada Chat in a WebView with a secure native bridge","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","react-native-webview":">=13.0.0"},"_npmOperationalInternal":{"tmp":"tmp/messaging-react-native_1.0.4_1776442553792_0.6528444532862205","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@ada-cx/messaging-react-native","version":"1.0.5","keywords":["ada","ada.cx","react-native","chat","messaging","webview"],"license":"ISC","_id":"@ada-cx/messaging-react-native@1.0.5","maintainers":[{"name":"ada-messaging-experience","email":"messaging-experience@ada.support"},{"name":"adaitsupport","email":"itsupport@ada.support"}],"homepage":"https://docs.ada.cx","dist":{"shasum":"5398db4278c6ba2da910183c3739db4b99e53bc4","tarball":"https://registry.npmjs.org/@ada-cx/messaging-react-native/-/messaging-react-native-1.0.5.tgz","fileCount":11,"integrity":"sha512-zBpahTqFv898i5IWZZvlfjKAS9dgYstOuceAYN+5Uq755x3QX2Xa8Fe8M2ttoAhhO2/BP1+c0RwVWAJ7403LoA==","signatures":[{"sig":"MEUCIQCVMk/5wqp+uqF+qBCjzI9BNDp1ZTI/ahQt51GtdAquFwIgL/8PXsshSuCXgz+TJkcB3nY3QAgUHYtxP5Dmz9G0xSo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141719},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","source":"./src/index.ts","default":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"f8e331b1eb61e2066240dd670794f38697ed509c","private":false,"scripts":{"lint":"biome check","test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","test:e2e":"bash ../../scripts/run-mobile-e2e.sh packages/react-native","typecheck":"tsc --noEmit","test:watch":"vitest","test:e2e:ios":"RN_PLATFORM=ios bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:android":"RN_PLATFORM=android bash ../../scripts/run-mobile-e2e.sh packages/react-native"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c09516b-c064-4ea0-ab88-84a079da0572"}},"_npmVersion":"11.11.0","description":"Ada Messaging React Native SDK — embeds Ada Chat in a WebView with a secure native bridge","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","react-native-webview":">=13.0.0"},"_npmOperationalInternal":{"tmp":"tmp/messaging-react-native_1.0.5_1776975079744_0.48952994755122226","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@ada-cx/messaging-react-native","version":"1.0.6","keywords":["ada","ada.cx","react-native","chat","messaging","webview"],"license":"ISC","_id":"@ada-cx/messaging-react-native@1.0.6","maintainers":[{"name":"ada-messaging-experience","email":"messaging-experience@ada.support"},{"name":"adaitsupport","email":"itsupport@ada.support"}],"homepage":"https://docs.ada.cx","dist":{"shasum":"d83ce516ae07bcc4b68f72d113cf21ab9c850b34","tarball":"https://registry.npmjs.org/@ada-cx/messaging-react-native/-/messaging-react-native-1.0.6.tgz","fileCount":11,"integrity":"sha512-b8j/KREnauuqb4Xk4O66gkKa94iPllCZaX8HxoJHLazaZOUKTZPHFW3zmDnXWXQSdiZC98DpBY2IOWOOWRwuNQ==","signatures":[{"sig":"MEYCIQDPOQNJ4dCi/DiOfUVpvdUKqvWM6EsJI0+s6as8Ymg+pwIhAIRUQBxxsDhtrNFCcwaPBCfvuwKr7r+2mtkyv6RQNcjO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140912},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","source":"./src/index.ts","default":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"49ed6fdb6d5e54e765292fe9d95a628aa3552a22","private":false,"scripts":{"lint":"biome check","test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","test:e2e":"bash ../../scripts/run-mobile-e2e.sh packages/react-native","typecheck":"tsc --noEmit","test:watch":"vitest","test:e2e:ios":"RN_PLATFORM=ios bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:android":"RN_PLATFORM=android bash ../../scripts/run-mobile-e2e.sh packages/react-native"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c09516b-c064-4ea0-ab88-84a079da0572"}},"_npmVersion":"11.11.0","description":"Ada Messaging React Native SDK — embeds Ada Chat in a WebView with a secure native bridge","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","react-native-webview":">=13.0.0"},"_npmOperationalInternal":{"tmp":"tmp/messaging-react-native_1.0.6_1777044801837_0.9312087704994114","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@ada-cx/messaging-react-native","version":"1.1.0","keywords":["ada","ada.cx","react-native","chat","messaging","webview"],"license":"ISC","_id":"@ada-cx/messaging-react-native@1.1.0","maintainers":[{"name":"ada-messaging-experience","email":"messaging-experience@ada.support"},{"name":"ada-itsupport","email":"itsupport@ada.support"}],"homepage":"https://docs.ada.cx","dist":{"shasum":"5bcc222f894bdd5d4462b29208f3bae1f3cb88d0","tarball":"https://registry.npmjs.org/@ada-cx/messaging-react-native/-/messaging-react-native-1.1.0.tgz","fileCount":11,"integrity":"sha512-9H4bBhSMM/OQYUzMJk+pe4q2FmC5UuAGJgirggT90DwLsodHhBqa4hKaaEj6sjlqaoDWwANESnKfobMLCodmaQ==","signatures":[{"sig":"MEQCICuTcblC3iO8nCJAHYev5U9bT2UsK7rjA1pvus2cpEtPAiBl5FMm9hnYrjdo9mw5fzmCb+QTlsx9Ta8s7zEgnSzn0Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":258999},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","source":"./src/index.ts","default":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"811ee8fe6daeb693bc1b95e3a41ccb82a9d763eb","private":false,"scripts":{"lint":"biome check","test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","test:e2e":"bash ../../scripts/run-mobile-e2e.sh packages/react-native","typecheck":"tsc --noEmit","test:watch":"vitest","test:e2e:ios":"RN_PLATFORM=ios bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:fresh":"BUILD_BEFORE_TEST=1 bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:android":"RN_PLATFORM=android bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:ios:fresh":"RN_PLATFORM=ios BUILD_BEFORE_TEST=1 bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:android:fresh":"RN_PLATFORM=android BUILD_BEFORE_TEST=1 bash ../../scripts/run-mobile-e2e.sh packages/react-native"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e32d8be6-e179-44f7-9f75-88ebebb7043d"}},"_npmVersion":"11.6.2","description":"Ada Messaging React Native SDK — embeds Ada Chat in a WebView with a secure native bridge","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","react-native-webview":">=13.0.0"},"_npmOperationalInternal":{"tmp":"tmp/messaging-react-native_1.1.0_1787849959344_0.5293720377006386","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@ada-cx/messaging-react-native","version":"1.2.0","keywords":["ada","ada.cx","react-native","chat","messaging","webview"],"license":"ISC","_id":"@ada-cx/messaging-react-native@1.2.0","maintainers":[{"name":"ada-messaging-experience","email":"messaging-experience@ada.support"},{"name":"ada-itsupport","email":"itsupport@ada.support"}],"homepage":"https://docs.ada.cx","dist":{"shasum":"d00bd1ed8353b3b9982b5728203d6e4df589b1de","tarball":"https://registry.npmjs.org/@ada-cx/messaging-react-native/-/messaging-react-native-1.2.0.tgz","fileCount":14,"integrity":"sha512-SHGjreiaUvvxlDjwx9taloVBlGMT5JR5eI5LHcpaU9a451zI2UnAoaPb0jF0439reJXdQfyHxE93KSEwB11jvw==","signatures":[{"sig":"MEQCIAWNzosBPKk7GEHRTf9M56Z2j1K6AEBcTTm9YlI2gNb7AiAafBk3a81Pto9WhI6MzCyyX4YuNiTMXryShNtHSkWlxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":831785},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","source":"./src/index.ts","default":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"29ecde8f0b3086ec3181c66e929f2416a8fd881d","private":false,"scripts":{"lint":"biome check","test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","test:e2e":"bash ../../scripts/run-mobile-e2e.sh packages/react-native","typecheck":"tsc --noEmit","test:watch":"vitest","test:e2e:ios":"RN_PLATFORM=ios bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:fresh":"BUILD_BEFORE_TEST=1 bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:android":"RN_PLATFORM=android bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:ios:fresh":"RN_PLATFORM=ios BUILD_BEFORE_TEST=1 bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:android:fresh":"RN_PLATFORM=android BUILD_BEFORE_TEST=1 bash ../../scripts/run-mobile-e2e.sh packages/react-native"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e32d8be6-e179-44f7-9f75-88ebebb7043d"}},"_npmVersion":"11.6.2","description":"Ada Messaging React Native SDK — embeds Ada Chat in a WebView with a secure native bridge","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","react-native-webview":">=13.0.0"},"_npmOperationalInternal":{"tmp":"tmp/messaging-react-native_1.2.0_1788469745299_0.8107432712460314","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@ada-cx/messaging-react-native","version":"1.3.0","keywords":["ada","ada.cx","react-native","chat","messaging","webview"],"license":"ISC","_id":"@ada-cx/messaging-react-native@1.3.0","maintainers":[{"name":"ada-messaging-experience","email":"messaging-experience@ada.support"},{"name":"ada-itsupport","email":"itsupport@ada.support"}],"homepage":"https://docs.ada.cx","dist":{"shasum":"beaae2e0768a07425bc848b97c6b70efa26266cc","tarball":"https://registry.npmjs.org/@ada-cx/messaging-react-native/-/messaging-react-native-1.3.0.tgz","fileCount":14,"integrity":"sha512-O8Rj5HG2W9b+/reapewiEFD8xAJr8WTb9UenXoJSG0G42M2kN/ih9GZPMywACHwZpnI5SLgD6yMt6uRHUZm5sQ==","signatures":[{"sig":"MEQCIA694AIns04Jv2RxZNKKWzAJZRZk7g9KDUA+KjVRRgTuAiA80+CpGzT9fRLRTYhvh2Hn5/zja7OAuY0Ow4n3gRc+YA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1021521},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","source":"./src/index.ts","default":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"723928f82d6cc634a2b8c244346501cc772f4491","private":false,"scripts":{"lint":"biome check","test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","test:e2e":"bash ../../scripts/run-mobile-e2e.sh packages/react-native","typecheck":"tsc --noEmit","test:watch":"vitest","test:e2e:ios":"RN_PLATFORM=ios bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:fresh":"BUILD_BEFORE_TEST=1 bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:android":"RN_PLATFORM=android bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:ios:fresh":"RN_PLATFORM=ios BUILD_BEFORE_TEST=1 bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:android:fresh":"RN_PLATFORM=android BUILD_BEFORE_TEST=1 bash ../../scripts/run-mobile-e2e.sh packages/react-native"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e32d8be6-e179-44f7-9f75-88ebebb7043d"}},"_npmVersion":"11.6.2","description":"Ada Messaging React Native SDK — embeds Ada Chat in a WebView with a secure native bridge","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","react-native-webview":">=13.0.0"},"_npmOperationalInternal":{"tmp":"tmp/messaging-react-native_1.3.0_1789069082831_0.7495566632533768","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@ada-cx/messaging-react-native","version":"1.3.1","private":false,"description":"Ada Messaging React Native SDK — embeds Ada Chat in a WebView with a secure native bridge","homepage":"https://docs.ada.cx","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"source":"./src/index.ts","types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"build":"vite build && tsc -p tsconfig.build.json","lint":"biome check","test":"vitest run","test:e2e":"bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:fresh":"BUILD_BEFORE_TEST=1 bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:android":"RN_PLATFORM=android bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:android:fresh":"RN_PLATFORM=android BUILD_BEFORE_TEST=1 bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:ios":"RN_PLATFORM=ios bash ../../scripts/run-mobile-e2e.sh packages/react-native","test:e2e:ios:fresh":"RN_PLATFORM=ios BUILD_BEFORE_TEST=1 bash ../../scripts/run-mobile-e2e.sh packages/react-native","typecheck":"tsc --noEmit","test:watch":"vitest"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","react-native-webview":">=13.0.0"},"keywords":["ada","ada.cx","react-native","chat","messaging","webview"],"license":"ISC","publishConfig":{"access":"public"},"gitHead":"0c777960a39f15e3e105977dbdd336fb4f14da44","_id":"@ada-cx/messaging-react-native@1.3.1","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-7Tn6sMtCqJNVHmN+LvXNLsGUA+2Ve+GT7SkueJo7PELiW8+ZwJxDY1rZOBD6KUuqXjYVdcVUE0V+cmFr91WfoA==","shasum":"d028800a26d2c7702eec8faee3e883bcce70c5e3","tarball":"https://registry.npmjs.org/@ada-cx/messaging-react-native/-/messaging-react-native-1.3.1.tgz","fileCount":14,"unpackedSize":1024101,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIF6ZfRFlRsxSWtfMP8sjbgHVYiv0QaSrBdnb0jlQhL9hAiB8zjihG2v6OG7d0FdyZ1ti5o6yGc/sf/mpi5zLeLKyNw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e32d8be6-e179-44f7-9f75-88ebebb7043d"}},"directories":{},"maintainers":[{"name":"ada-messaging-experience","email":"messaging-experience@ada.support"},{"name":"ada-itsupport","email":"itsupport@ada.support"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/messaging-react-native_1.3.1_1789157411003_0.6270328618110332"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-08T12:36:35.284Z","modified":"2026-09-11T20:10:11.328Z","1.0.0":"2026-04-08T12:36:35.723Z","1.0.2":"2026-04-08T20:11:45.198Z","1.0.3":"2026-04-17T14:46:53.412Z","1.0.4":"2026-04-17T16:15:53.924Z","1.0.5":"2026-04-23T20:11:20.012Z","1.0.6":"2026-04-24T15:33:21.987Z","1.1.0":"2026-08-27T16:59:19.471Z","1.2.0":"2026-09-03T21:09:05.458Z","1.3.0":"2026-09-10T19:38:02.960Z","1.3.1":"2026-09-11T20:10:11.160Z"},"license":"ISC","homepage":"https://docs.ada.cx","keywords":["ada","ada.cx","react-native","chat","messaging","webview"],"description":"Ada Messaging React Native SDK — embeds Ada Chat in a WebView with a secure native bridge","maintainers":[{"name":"ada-messaging-experience","email":"messaging-experience@ada.support"},{"name":"ada-itsupport","email":"itsupport@ada.support"}],"readme":"# Ada Messaging React Native SDK\n\nThis package is for React Native teams embedding Ada inside an iOS and Android app through `react-native-webview`.\n\n## Requirements\n\n- `react >= 18.0.0`\n- `react-native >= 0.73.0`\n- `react-native-webview >= 13.0.0`\n\nThis package does not ship a separate Ada native module of its own. Complete the normal `react-native-webview` native installation steps for your app first, then add this package on top.\n\nYour minimum iOS and Android OS versions follow the versions supported by your React Native app and `react-native-webview`. The Ada package does not add a separate deployment-target requirement beyond that.\n\n## Install\n\n```bash\nnpm install @ada-cx/messaging-react-native react-native-webview\n```\n\nIf your app does not already include compatible `react` and `react-native` versions, upgrade those first.\n\n## Quick Start\n\n```tsx\nimport { useRef } from \"react\";\nimport {\n  AdaMessagingView,\n  type AdaMessagingViewHandle,\n} from \"@ada-cx/messaging-react-native\";\n\nexport function SupportScreen() {\n  const adaRef = useRef<AdaMessagingViewHandle>(null);\n\n  return (\n    <AdaMessagingView\n      ref={adaRef}\n      handle=\"my-bot\"\n      language=\"en\"\n      metaFields={{ plan: \"pro\", signedIn: true }}\n      onReady={() => {\n        adaRef.current?.setSensitiveMetaFields({\n          authToken: \"secure-session-token\",\n        });\n        adaRef.current?.setDeviceToken(\"push-token\");\n      }}\n      onEvent={(key, data) => {\n        console.log(\"[Ada]\", key, data);\n      }}\n      style={{ flex: 1 }}\n    />\n  );\n}\n```\n\nMost customer apps only need `handle`. Leave `cluster` unset unless Ada tells you your AI agent is hosted on a non-default production region.\n\nImperative handle methods:\n\n- `reset(...)`\n- `setLanguage(...)`\n- `sendMessage(...)`\n- `setMetaFields(...)`\n- `setSensitiveMetaFields(...)`\n- `setDeviceToken(...)`\n- `deleteHistory()`\n\nUseful component props:\n\n- `handle`\n- `cluster`\n- `language`\n- `greeting`\n- `metaFields`\n- `styles`\n- `identityToken` (see [Secure Identity Tokens](#secure-identity-tokens))\n- `appUrl` (add your app's origin to the handle's Allowed Websites list in the Ada dashboard, under Channels > Chat)\n- `headless` (see [Headless Mode](#headless-mode))\n- `sessionStorageAdapter` (see [Native Session Persistence](#native-session-persistence))\n- `loadTimeoutMs`\n- `domain` (legacy runtime only)\n- `onReady`\n- `onEvent`\n- `onStateCache`\n- `onError`\n\n## Upgrade From The Legacy React Native SDK\n\nThe safest migration is:\n\n1. replace the old npm package\n2. keep the runtime on legacy first\n3. use the `AdaEmbedView` alias only as a temporary bridge if that reduces churn\n4. move to `AdaMessagingView` and the new prop patterns once the package upgrade is stable\n\n### Side-by-side mapping\n\n| Legacy | Messaging SDK |\n|---|---|\n| `@ada-support/react-native-sdk` | `@ada-cx/messaging-react-native` |\n| `AdaEmbedView` | `AdaMessagingView` |\n| `require_relative '../node_modules/@ada-support/react-native-sdk/react_native_pods'` in `Podfile` | remove it |\n| `use_ada!()` in `Podfile` | remove it |\n\nThe new package also exports a deprecated `AdaEmbedView` alias to make the first migration smaller if needed.\n\n### Before / after: package\n\n```bash\n# Before\nnpm install @ada-support/react-native-sdk\n\n# After\nnpm install @ada-cx/messaging-react-native\n```\n\nIf your old integration added Ada-specific Podfile helpers from `@ada-support/react-native-sdk`, remove them. The new package relies on the standard React Native and `react-native-webview` native setup only.\n\n### Before / after: imports\n\nSmallest possible migration:\n\n```tsx\nimport { AdaEmbedView } from \"@ada-cx/messaging-react-native\";\n```\n\nRecommended end state:\n\n```tsx\nimport { AdaMessagingView } from \"@ada-cx/messaging-react-native\";\n```\n\n## Important Code Changes To Make\n\n### 1. Most customer apps should only set `handle`\n\nFor the normal production path, keep your setup simple:\n\n```tsx\n<AdaMessagingView handle=\"my-bot\" />\n```\n\nIf Ada tells you your bot is hosted on a non-default production region such as Maple, pass the exact cluster value they give you:\n\n```tsx\n<AdaMessagingView\n  handle=\"my-bot\"\n  cluster=\"maple\"\n/>\n```\n\n### 2. Move sensitive metadata and device tokens to the ref in `onReady`\n\nThis is the preferred pattern in the new package:\n\n```tsx\nonReady={() => {\n  adaRef.current?.setSensitiveMetaFields({ authToken: \"secure-session-token\" });\n  adaRef.current?.setDeviceToken(deviceToken);\n}}\n```\n\n### 3. Move event handling to `onEvent`\n\nFor new code, prefer one event callback surface:\n\n```tsx\nonEvent={(key, data) => {\n  if (key === \"ada:end_conversation\") {\n    console.log(\"Conversation ended\", data);\n  }\n}}\n```\n\n## Legacy Prop Compatibility\n\nSome older props still work for compatibility, but they are no longer the preferred integration pattern.\n\n| Legacy prop / pattern | Status in the new package | Recommended approach |\n|---|---|---|\n| `sensitiveMetaFields` prop | supported but deprecated | call `ref.setSensitiveMetaFields()` in `onReady` |\n| `deviceToken` prop | supported but deprecated | call `ref.setDeviceToken()` in `onReady` |\n| `eventCallbacks` | supported but deprecated | use `onEvent` |\n| `endConversationCallback` | supported but deprecated | use `onEvent` and check for `ada:end_conversation` |\n| `thirdPartyCookiesEnabled` | still present but deprecated; Android only | normally omit it |\n| `styles` | supported | pass a CSS string on the legacy runtime, or a record of Messaging style tokens on the Messaging runtime |\n| `zdChatterAuthCallback` | supported | keep using it when you need Zendesk chat auth |\n\n## Upload And Media Permissions\n\nIf your bot flow lets users upload files or capture media, make sure your app includes the normal platform permissions required by `react-native-webview` and the device features you use.\n\nFor iOS, that usually means `Info.plist` usage descriptions such as:\n\n- `NSCameraUsageDescription`\n- `NSPhotoLibraryUsageDescription`\n- `NSMicrophoneUsageDescription`\n\nFor Android, add any permissions your app's upload or capture flow requires in `AndroidManifest.xml`. If you are migrating from much older legacy guidance, re-check those permissions against your current Android target SDK rather than copying them forward blindly.\n\n## State Restoration\n\nIf your app wants to restore chat immediately after process recreation, use:\n\n- `onStateCache` to persist the latest non-sensitive state snapshot\n- `initialState` to inject that snapshot the next time the view mounts\n\nThat removes the loading spinner on WebView restart flows.\n\n### The SDK filters the snapshot, your app stores it\n\nYour app owns the storage, but the component now controls what may reach it. Before\n`onStateCache` runs, the component reduces the snapshot to the canonical allowlist and stamps\n`__ada_cached_at__`. This is the same filter the iOS and Android SDKs apply before they write\nto device storage. The snapshot you receive carries branding and feature configuration only.\nIt carries no tokens and no conversation content.\n\nPersist **only** these keys, and drop anything else the snapshot contains:\n\n`chatEnabled`, `tintColor`, `button`, `intro`, `fallbackUi`, `advancedColorsEnabled`,\n`allowedProtocols`, `textOverAccentColor`, `proactiveConversations`, `features`,\n`__ada_cached_at__`\n\nThe `PERSISTABLE_STATE_KEYS` export carries the same list, and the exported\n`toPersistableStateSnapshot()` helper applies it. Use the helper to sanitize snapshots that an\nolder package version persisted, because those snapshots can contain session tokens.\n\nOn the next mount, pass the stored snapshot back as `initialState`. The component filters it\nagain and discards it when `__ada_cached_at__` is older than the 10-minute TTL. A snapshot\nwithout a stamp still injects (deliberate back-compat for older persisted state), but it never\nexpires. Keep the stamp so stale state is discarded instead of hydrated.\n\n## Native Session Persistence\n\nThe chat session lives in WebView storage. Android wipes that storage when the user force-quits the app, and iOS can lose it too. Pass `sessionStorageAdapter` to mirror the session into storage that your app owns. On the next launch, the web runtime asks the component for the mirror, and the component answers with a live read of your adapter. The session survives a force-quit. A live agent handoff survives with it. A clear that runs before that read makes the answer empty, so a cleared session cannot come back.\n\n**Without an adapter, sessions do not survive a force-quit.** The component then behaves exactly as before this feature. Development builds log a one-time warning at mount when no adapter is set. The warning covers both runtimes.\n\nThe adapter is a small async key-value interface:\n\n```ts\ninterface AdaSessionMirrorStorage {\n  getItem(key: string): Promise<string | null>;\n  setItem(key: string, value: string): Promise<void>;\n  removeItem(key: string): Promise<void>;\n}\n```\n\nThe package adds no storage dependency. Your app supplies the store.\n\n### Wiring with AsyncStorage\n\n`@react-native-async-storage/async-storage` matches the interface directly:\n\n```tsx\nimport AsyncStorage from \"@react-native-async-storage/async-storage\";\n\n<AdaMessagingView handle=\"my-bot\" sessionStorageAdapter={AsyncStorage} />\n```\n\nSession tokens must not move between devices. On Android, Auto Backup and device transfer\ncopy the app data directory onto a different device. Exclude the adapter's storage from\nAuto Backup and device transfer.\n\nOn iOS, AsyncStorage marks its own directory `NSURLIsExcludedFromBackupKey`, so it stays out\nof iCloud and encrypted backups. AsyncStorage still holds the session token in plaintext in\nthe app container. Use a Keychain-backed adapter with a `ThisDeviceOnly` accessibility class\nto protect the token at rest. See\n[Keep the mirror out of backups](#keep-the-mirror-out-of-backups).\n\n### Wiring with MMKV\n\n`react-native-mmkv` is synchronous. Wrap it in a thin adapter:\n\n```tsx\nimport { MMKV } from \"react-native-mmkv\";\n\nconst storage = new MMKV({ id: \"ada-session-mirror\" });\n\nconst adaSessionStorage = {\n  getItem: async (key: string) => storage.getString(key) ?? null,\n  setItem: async (key: string, value: string) => {\n    storage.set(key, value);\n  },\n  removeItem: async (key: string) => {\n    storage.delete(key);\n  },\n};\n\n<AdaMessagingView handle=\"my-bot\" sessionStorageAdapter={adaSessionStorage} />\n```\n\n### Behavior notes\n\n- The mirror stores one atomic snapshot per bot and endpoint under keys with the `ada-session-mirror:` prefix. Do not write to those keys yourself.\n- The web runtime decides session validity after a restore. The mirror has no expiry of its own.\n- `reset()`, `deleteHistory()`, and the private and session persistence modes clear the mirror.\n- `ref.clearPersistedState()` removes every mirror recorded through your adapter: the mounted bot's blob and index, plus all registry-recorded scopes. It does not touch the live WebView session. Mirrors written by an earlier app run through a different adapter can stay behind. To remove those, delete all keys in your store that start with `ada-session-mirror:`.\n- `ref.clearPersistedState()` rejects in four cases. An adapter call throws, times out, or leaves the adapter quarantined. A removed key still reads back a value. The removals ran but cannot be confirmed, because an earlier mirror write may still commit. You supplied an adapter earlier in this mount and no adapter is set now. It resolves with no effect only when the component never received an adapter.\n- Retry `ref.clearPersistedState()` when it reports that it could not confirm the wipe. The blocked write clears within a few seconds, and the retry then confirms. A rejection does not mean nothing was removed.\n- A one-shot `identityToken` is never written to the mirror. Only the resolved session state is stored.\n- Adapter failures during mirroring are caught. A throwing adapter degrades to no persistence and never breaks chat. Only `clearPersistedState()` reports failure to the caller.\n- A dropped mirror message or a failing adapter emits the `ada.sessionMirror.diagnostic` host event once per reason. The payload carries an enum `reason` string and no other data.\n- The mirror also covers the legacy web runtime (`webSdk=\"legacy\"`).\n- The component advertises mirror support to the web runtime once, at document start. Adding or removing `sessionStorageAdapter` therefore reloads the WebView, the same as a change to `identityToken` or `appUrl`. Only presence matters, so re-creating the adapter object on each render reloads nothing. Set the adapter before first render to avoid the reload.\n- The mirror contains session tokens. Protect the adapter's storage on each platform. See the next section.\n\n### Keep the mirror out of backups\n\nThe mirror contains session tokens, so it must stay on the device that wrote it. The native\nAda SDKs enforce this: the iOS SDK stores the mirror in a `ThisDeviceOnly` Keychain item,\nand the Android SDK ships backup-exclusion rules. Your adapter's storage needs the same\ntreatment.\n\n**Android**: exclude your adapter's storage from Auto Backup and device transfer with\n`dataExtractionRules` and `fullBackupContent`, so backups do not copy sessions to another\ndevice.\n\n**iOS**: AsyncStorage marks its own directory `NSURLIsExcludedFromBackupKey`, so it stays out\nof iCloud and encrypted backups unless the app sets `RCTAsyncStorageExcludeFromBackup` to\n`NO`. That covers backups. It does not make the data device-only or encrypted at rest. For a\nsession token, prefer one of these:\n\n- A Keychain-backed adapter with a `ThisDeviceOnly` accessibility class.\n  `react-native-keychain` supports this directly:\n\n  ```tsx\n  import * as Keychain from \"react-native-keychain\";\n\n  const adaSessionStorage = {\n    getItem: async (key: string) => {\n      const item = await Keychain.getGenericPassword({ service: `ada:${key}` });\n      return item ? item.password : null;\n    },\n    setItem: async (key: string, value: string) => {\n      await Keychain.setGenericPassword(\"ada\", value, {\n        service: `ada:${key}`,\n        accessible: Keychain.ACCESSIBLE.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY,\n      });\n    },\n    removeItem: async (key: string) => {\n      await Keychain.resetGenericPassword({ service: `ada:${key}` });\n    },\n  };\n  ```\n\n- An MMKV instance at a dedicated path. Mark that path\n  `isExcludedFromBackup` after you create the instance. Use\n  `expo-file-system` or `react-native-fs` to set it:\n\n  ```tsx\n  import { MMKV } from \"react-native-mmkv\";\n\n  const storage = new MMKV({ id: \"ada-session-mirror\", path: mirrorDirectory });\n  // Mark mirrorDirectory with the iOS isExcludedFromBackup resource value.\n  ```\n\nNote: Keychain items survive an app uninstall on iOS. If your app must not restore a\nsession after a reinstall, wipe the adapter's Ada keys on first run, or use the\nbackup-excluded file approach instead.\n\n## Secure Identity Tokens\n\nUse `identityToken` to start the session as a known user.\n\n1. Mint a token from your backend with `POST /v2/auth/tokens/`. The token is short-lived and single-use.\n2. Pass the token to the view before you mount it.\n\n```tsx\nconst token = await fetchAdaIdentityToken(); // your backend call\n\n<AdaMessagingView handle=\"my-bot\" webSdk=\"messaging\" identityToken={token} />\n```\n\nThe token is injected into the WebView document before content loads. It never appears in a URL. The injection only runs on the Ada webview origin, so other pages never see the token. The runtime reads it once per document load and then deletes it. A token set after mount only applies when the WebView reloads. Fetch a fresh token before each mount.\n\n## Headless Mode\n\nSet `headless` to run the Ada runtime without its chat UI. The WebView stays mounted, but it is hidden and non-interactive. Events and all imperative handle methods keep working. Use them to build a fully native experience.\n\n```tsx\nconst adaRef = useRef<AdaMessagingViewHandle>(null);\nconst [unread, setUnread] = useState(0);\n\n<AdaMessagingView\n  ref={adaRef}\n  handle=\"my-bot\"\n  webSdk=\"messaging\"\n  headless\n  onEvent={(key) => {\n    if (key === \"ada:message:received\") {\n      setUnread((count) => count + 1); // drive your own red-dot badge\n    }\n  }}\n/>\n\n// Later, from your own composer UI:\nadaRef.current?.sendMessage(\"Where is my order?\");\n```\n\nNotes:\n\n- Keep the component mounted while you need the live session. Unmounting the component ends the session.\n- Persist snapshots with `onStateCache` and pass them back as `initialState` to rehydrate on the next mount. See [State Restoration](#state-restoration).\n- Headless applies to the Messaging runtime only. The SDK never sends the flag on the legacy runtime, the same as iOS and Android.\n\n## Programmatic Control\n\n`enableProgrammaticControl` is a prop that defaults to `true` on React Native. At the default\nthe component exposes `sendMessage()` and delivers the gated `ada:message:sent` /\n`ada:message:received` events, and the two curated-bridge message reads are available. Those\nreads are `getConversation()` and `getMessages()`. Set `enableProgrammaticControl={false}` to opt out: those\nprogrammatic calls then reject and the gated events are not delivered. The `true` default is a\nback-compat choice. The pre-prop behavior was unconditional. On iOS and Android the same\nsetting defaults to `false`, so a host there enables it explicitly.\n\n## Release Checklist\n\nBefore shipping a migration:\n\n- verify chat renders on both iOS and Android\n- confirm `onReady` fires\n- confirm your event logging still receives Ada SDK events\n- if you use push notifications, call `setDeviceToken()` and verify registration\n- test background / foreground and process restart behavior\n","readmeFilename":"README.md"}