{"_id":"@adrekic/expo-meta-wearables-dat","_rev":"8-bce3e34e35dcbef3d0aad76fe89cabc8","name":"@adrekic/expo-meta-wearables-dat","dist-tags":{"latest":"1.0.7"},"versions":{"1.0.0":{"name":"@adrekic/expo-meta-wearables-dat","version":"1.0.0","keywords":["react-native","expo","expo-meta-wearables-dat","EMWDAT","meta","wearables","glasses","ray-ban","camera","streaming","ios","android","bluetooth","dat"],"author":{"url":"https://github.com/circus-kitchens/","name":"Circus Group","email":"fabricio_ext@circuskitchens.com"},"license":"MIT","_id":"@adrekic/expo-meta-wearables-dat@1.0.0","maintainers":[{"name":"adrekic","email":"raptorsbasketball31@outlook.com"}],"homepage":"https://github.com/circus-kitchens/expo-meta-wearables-dat#readme","bugs":{"url":"https://github.com/circus-kitchens/expo-meta-wearables-dat/issues"},"dist":{"shasum":"bcae4b936b97d9a185789863d0cbcc5157e8ed9a","tarball":"https://registry.npmjs.org/@adrekic/expo-meta-wearables-dat/-/expo-meta-wearables-dat-1.0.0.tgz","fileCount":68,"integrity":"sha512-CZR65RojABNQT8vF0P6pMcyxKOC/LIq+qXOAgrGESrpsZ1m8XEC6Hxh354J9xSGQY2G0RowsbjiwE5oV5dyfGQ==","signatures":[{"sig":"MEQCIH/2NxABow022kfEtTyAgSsLc6KVghpdVhiVHTNJujP4AiAQkzzAhjWyqkOKP49h0Oq3Qal1sFqj0C5wC3W3vtsK0g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":398192},"main":"build/index.js","types":"build/index.d.ts","volta":{"node":"18.20.8","yarn":"4.12.0"},"engines":{"node":">=18"},"exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js","react-native":"./build/index.js"},"./app.plugin":"./app.plugin.js","./app.plugin.js":"./app.plugin.js","./expo-module.config.json":"./expo-module.config.json"},"gitHead":"4ebb198924699dc0584fa621784b5e2a078496cd","scripts":{"ios":"expo run:ios","lint":"expo-module lint","test":"expo-module test","build":"expo-module build","clean":"expo-module clean","android":"expo run:android","prepare":"husky && expo-module prepare","open:ios":"xed example/ios","expo-module":"expo-module","open:android":"open -a \"Android Studio\" example/android","prepublishOnly":"expo-module prepublishOnly"},"_npmUser":{"name":"adrekic","email":"raptorsbasketball31@outlook.com"},"repository":{"url":"git+https://github.com/circus-kitchens/expo-meta-wearables-dat.git","type":"git"},"_npmVersion":"10.8.2","description":"This package enables developers to utilize Meta's AI glasses (Meta Wearables DAT) in Expo + React Native applications.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx}":"eslint --fix","*.{js,jsx,ts,tsx,json,md}":"prettier --write"},"sideEffects":false,"_nodeVersion":"18.20.8","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.29.2","devDependencies":{"expo":"^54.0.27","jest":"^29.7.0","jiti":"^2.6.1","husky":"^9.1.7","eslint":"^9.39.2","globals":"^17.3.0","prettier":"^3.8.1","react-dom":"^19.1.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.2.3","lint-staged":"^16.2.7","@types/react":"~19.1.0","react-native":"0.81.5","@commitlint/cli":"^20.4.1","@tsconfig/node18":"^18.2.6","semantic-release":"^25.0.3","@commitlint/types":"^20.4.0","expo-module-scripts":"^5.0.8","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.1","@testing-library/react":"^16.3.2","eslint-config-universe":"^15.0.3","jest-environment-jsdom":"^30.2.0","@semantic-release/github":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^20.4.1","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"peerDependencies":{"expo":">=52","react":">=18","react-native":">=0.76"},"_npmOperationalInternal":{"tmp":"tmp/expo-meta-wearables-dat_1.0.0_1784272068788_0.35621159311357475","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@adrekic/expo-meta-wearables-dat","version":"1.0.1","keywords":["react-native","expo","expo-meta-wearables-dat","EMWDAT","meta","wearables","glasses","ray-ban","camera","streaming","ios","android","bluetooth","dat"],"author":{"url":"https://github.com/circus-kitchens/","name":"Circus Group","email":"fabricio_ext@circuskitchens.com"},"license":"MIT","_id":"@adrekic/expo-meta-wearables-dat@1.0.1","maintainers":[{"name":"adrekic","email":"raptorsbasketball31@outlook.com"}],"homepage":"https://github.com/adrekic/expo-meta-wearables-dat#readme","bugs":{"url":"https://github.com/adrekic/expo-meta-wearables-dat/issues"},"dist":{"shasum":"04357930dc6bd413fb254be4c8bab15447177a22","tarball":"https://registry.npmjs.org/@adrekic/expo-meta-wearables-dat/-/expo-meta-wearables-dat-1.0.1.tgz","fileCount":70,"integrity":"sha512-1kyjqSnHIoMdhluJBFgYbNqi+W6h7EjcmTelN6K3rUebRLEmynNDFzTi9cVdJGNtdB3SKdPTX3yTijZc6JbpOQ==","signatures":[{"sig":"MEYCIQCk1tyIWUnHtHkfXDRG6MJyrLmSw3B/a8hjhN/6XHVU0gIhAKOvAtv1tUu5v71E4GG2QWB0Jwq2tm3Wowe7Nn7wcjpj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":486283},"main":"build/index.js","types":"build/index.d.ts","volta":{"node":"18.20.8","yarn":"4.12.0"},"engines":{"node":">=18"},"exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js","react-native":"./build/index.js"},"./app.plugin":"./app.plugin.js","./app.plugin.js":"./app.plugin.js","./expo-module.config.json":"./expo-module.config.json"},"gitHead":"b1322964585e309c8e38292c52e8c2ab3a2d9a40","scripts":{"ios":"expo run:ios","lint":"expo-module lint","test":"expo-module test","build":"expo-module build","clean":"expo-module clean","android":"expo run:android","prepare":"husky && expo-module prepare","open:ios":"xed example/ios","expo-module":"expo-module","open:android":"open -a \"Android Studio\" example/android","prepublishOnly":"expo-module prepublishOnly"},"_npmUser":{"name":"adrekic","email":"raptorsbasketball31@outlook.com"},"repository":{"url":"git+https://github.com/adrekic/expo-meta-wearables-dat.git","type":"git"},"_npmVersion":"10.8.2","description":"This package enables developers to utilize Meta's AI glasses (Meta Wearables DAT) in Expo + React Native applications.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx}":"eslint --fix","*.{js,jsx,ts,tsx,json,md}":"prettier --write"},"sideEffects":false,"_nodeVersion":"18.20.8","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.29.2","devDependencies":{"expo":"^54.0.27","jest":"^29.7.0","jiti":"^2.6.1","husky":"^9.1.7","react":"19.2.7","eslint":"^9.39.2","globals":"^17.3.0","prettier":"^3.8.1","react-dom":"19.2.7","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.2.3","lint-staged":"^16.2.7","@types/react":"~19.1.0","react-native":"0.81.5","@commitlint/cli":"^20.4.1","@tsconfig/node18":"^18.2.6","semantic-release":"^25.0.3","@commitlint/types":"^20.4.0","expo-module-scripts":"^5.0.8","@testing-library/dom":"^10.4.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.1","@testing-library/react":"^16.3.2","eslint-config-universe":"^15.0.3","jest-environment-jsdom":"^30.2.0","@semantic-release/github":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^20.4.1","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"peerDependencies":{"expo":">=52","react":">=18","react-native":">=0.76"},"_npmOperationalInternal":{"tmp":"tmp/expo-meta-wearables-dat_1.0.1_1785279486270_0.7661309818439943","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@adrekic/expo-meta-wearables-dat","version":"1.0.2","keywords":["react-native","expo","expo-meta-wearables-dat","EMWDAT","meta","wearables","glasses","ray-ban","camera","streaming","ios","android","bluetooth","dat"],"author":{"url":"https://github.com/circus-kitchens/","name":"Circus Group","email":"fabricio_ext@circuskitchens.com"},"license":"MIT","_id":"@adrekic/expo-meta-wearables-dat@1.0.2","maintainers":[{"name":"adrekic","email":"raptorsbasketball31@outlook.com"}],"homepage":"https://github.com/adrekic/expo-meta-wearables-dat#readme","bugs":{"url":"https://github.com/adrekic/expo-meta-wearables-dat/issues"},"dist":{"shasum":"98bd3f523f4c28d0c246083d1f7aaee7e7a631c4","tarball":"https://registry.npmjs.org/@adrekic/expo-meta-wearables-dat/-/expo-meta-wearables-dat-1.0.2.tgz","fileCount":70,"integrity":"sha512-aH9dgO+iqfvEwEGAq67A4wZ3dRSx7+hqnUT1uLTZH+BdaD5l5WISwZM0De+6tWlTf6pKCCRZqGXzR1QHo/CVhw==","signatures":[{"sig":"MEQCID4EPlne/Hn/vC7M1aijI+v805f0XDxK19MM2J6AIcm8AiAeXsMtm3eJyKs+zowRMQaHUX9TfGQ5NjpF0nOvuugyzw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":489598},"main":"build/index.js","types":"build/index.d.ts","volta":{"node":"18.20.8","yarn":"4.12.0"},"engines":{"node":">=18"},"exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js","react-native":"./build/index.js"},"./app.plugin":"./app.plugin.js","./app.plugin.js":"./app.plugin.js","./expo-module.config.json":"./expo-module.config.json"},"gitHead":"0053989d15ce887882faf68a607f66618d0953ae","scripts":{"ios":"expo run:ios","lint":"expo-module lint","test":"expo-module test","build":"expo-module build","clean":"expo-module clean","android":"expo run:android","prepare":"husky && expo-module prepare","open:ios":"xed example/ios","expo-module":"expo-module","open:android":"open -a \"Android Studio\" example/android","prepublishOnly":"expo-module prepublishOnly"},"_npmUser":{"name":"adrekic","email":"raptorsbasketball31@outlook.com"},"repository":{"url":"git+https://github.com/adrekic/expo-meta-wearables-dat.git","type":"git"},"_npmVersion":"10.8.2","description":"This package enables developers to utilize Meta's AI glasses (Meta Wearables DAT) in Expo + React Native applications.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx}":"eslint --fix","*.{js,jsx,ts,tsx,json,md}":"prettier --write"},"sideEffects":false,"_nodeVersion":"18.20.8","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.29.2","devDependencies":{"expo":"^54.0.27","jest":"^29.7.0","jiti":"^2.6.1","husky":"^9.1.7","react":"19.2.7","eslint":"^9.39.2","globals":"^17.3.0","prettier":"^3.8.1","react-dom":"19.2.7","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.2.3","lint-staged":"^16.2.7","@types/react":"~19.1.0","react-native":"0.81.5","@commitlint/cli":"^20.4.1","@tsconfig/node18":"^18.2.6","semantic-release":"^25.0.3","@commitlint/types":"^20.4.0","expo-module-scripts":"^5.0.8","@testing-library/dom":"^10.4.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.1","@testing-library/react":"^16.3.2","eslint-config-universe":"^15.0.3","jest-environment-jsdom":"^30.2.0","@semantic-release/github":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^20.4.1","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"peerDependencies":{"expo":">=52","react":">=18","react-native":">=0.76"},"_npmOperationalInternal":{"tmp":"tmp/expo-meta-wearables-dat_1.0.2_1785347966772_0.6333441374910715","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@adrekic/expo-meta-wearables-dat","version":"1.0.3","keywords":["react-native","expo","expo-meta-wearables-dat","EMWDAT","meta","wearables","glasses","ray-ban","camera","streaming","ios","android","bluetooth","dat"],"author":{"url":"https://github.com/circus-kitchens/","name":"Circus Group","email":"fabricio_ext@circuskitchens.com"},"license":"MIT","_id":"@adrekic/expo-meta-wearables-dat@1.0.3","maintainers":[{"name":"adrekic","email":"raptorsbasketball31@outlook.com"}],"homepage":"https://github.com/adrekic/expo-meta-wearables-dat#readme","bugs":{"url":"https://github.com/adrekic/expo-meta-wearables-dat/issues"},"dist":{"shasum":"5acd5772e26d7fec577260a1a0b07be29ac26578","tarball":"https://registry.npmjs.org/@adrekic/expo-meta-wearables-dat/-/expo-meta-wearables-dat-1.0.3.tgz","fileCount":70,"integrity":"sha512-rp1IaskVom6fr9UZpBMsRe2KBpJiFGGA0bT7Ma6uBeTQklz+QmuLA/GcbqctK4oH39BH+ycwb7ppUvnXYxZ/ew==","signatures":[{"sig":"MEUCIH32tx7kq8avpqiUEZYRbF7khT+jPdcteZRmRrP8XbdlAiEA/tXoc3zbfMs9wYi+jQncPdW0OIDjJVfb4dQBDpx/lL8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":487766},"main":"build/index.js","types":"build/index.d.ts","volta":{"node":"18.20.8","yarn":"4.12.0"},"engines":{"node":">=18"},"exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js","react-native":"./build/index.js"},"./app.plugin":"./app.plugin.js","./app.plugin.js":"./app.plugin.js","./expo-module.config.json":"./expo-module.config.json"},"gitHead":"8afcf55c86b6a29200c0122cc2b727b9d7d47a38","scripts":{"ios":"expo run:ios","lint":"expo-module lint","test":"expo-module test","build":"expo-module build","clean":"expo-module clean","android":"expo run:android","prepare":"husky && expo-module prepare","open:ios":"xed example/ios","expo-module":"expo-module","open:android":"open -a \"Android Studio\" example/android","prepublishOnly":"expo-module prepublishOnly"},"_npmUser":{"name":"adrekic","email":"raptorsbasketball31@outlook.com"},"repository":{"url":"git+https://github.com/adrekic/expo-meta-wearables-dat.git","type":"git"},"_npmVersion":"10.8.2","description":"This package enables developers to utilize Meta's AI glasses (Meta Wearables DAT) in Expo + React Native applications.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx}":"eslint --fix","*.{js,jsx,ts,tsx,json,md}":"prettier --write"},"sideEffects":false,"_nodeVersion":"18.20.8","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.29.2","devDependencies":{"expo":"^54.0.27","jest":"^29.7.0","jiti":"^2.6.1","husky":"^9.1.7","react":"19.2.7","eslint":"^9.39.2","globals":"^17.3.0","prettier":"^3.8.1","react-dom":"19.2.7","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.2.3","lint-staged":"^16.2.7","@types/react":"~19.1.0","react-native":"0.81.5","@commitlint/cli":"^20.4.1","@tsconfig/node18":"^18.2.6","semantic-release":"^25.0.3","@commitlint/types":"^20.4.0","expo-module-scripts":"^5.0.8","@testing-library/dom":"^10.4.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.1","@testing-library/react":"^16.3.2","eslint-config-universe":"^15.0.3","jest-environment-jsdom":"^30.2.0","@semantic-release/github":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^20.4.1","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"peerDependencies":{"expo":">=52","react":">=18","react-native":">=0.76"},"_npmOperationalInternal":{"tmp":"tmp/expo-meta-wearables-dat_1.0.3_1785361635555_0.8994615133405746","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@adrekic/expo-meta-wearables-dat","version":"1.0.4","keywords":["react-native","expo","expo-meta-wearables-dat","EMWDAT","meta","wearables","glasses","ray-ban","camera","streaming","ios","android","bluetooth","dat"],"author":{"url":"https://github.com/circus-kitchens/","name":"Circus Group","email":"fabricio_ext@circuskitchens.com"},"license":"MIT","_id":"@adrekic/expo-meta-wearables-dat@1.0.4","maintainers":[{"name":"adrekic","email":"raptorsbasketball31@outlook.com"}],"homepage":"https://github.com/adrekic/expo-meta-wearables-dat#readme","bugs":{"url":"https://github.com/adrekic/expo-meta-wearables-dat/issues"},"dist":{"shasum":"2ba39e58257971f771e47db34164daca66936df9","tarball":"https://registry.npmjs.org/@adrekic/expo-meta-wearables-dat/-/expo-meta-wearables-dat-1.0.4.tgz","fileCount":70,"integrity":"sha512-UvhsBCNJ+DQ/N/45o+JjqtLRWPNhlcCrkY+rW8RKXG3rocoKFjSKPDJJJt/2H7jh3p7+VsOEdUqmioczvxG9Rw==","signatures":[{"sig":"MEUCIQCTlxAu/+RBssHDocYzdzJUMp2SAHYbBs7lni9+X1dnIQIgeI8udrCbrsEyOYS3g5JTKBISIFuzsGvCqFwDqqODRao=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":505465},"main":"build/index.js","types":"build/index.d.ts","volta":{"node":"18.20.8","yarn":"4.12.0"},"engines":{"node":">=18"},"exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js","react-native":"./build/index.js"},"./app.plugin":"./app.plugin.js","./app.plugin.js":"./app.plugin.js","./expo-module.config.json":"./expo-module.config.json"},"gitHead":"fb8991d0e50adb7844c71a432f2332f87fd3ed85","scripts":{"ios":"expo run:ios","lint":"expo-module lint","test":"expo-module test","build":"expo-module build","clean":"expo-module clean","android":"expo run:android","prepare":"husky && expo-module prepare","open:ios":"xed example/ios","expo-module":"expo-module","open:android":"open -a \"Android Studio\" example/android","prepublishOnly":"expo-module prepublishOnly"},"_npmUser":{"name":"adrekic","email":"raptorsbasketball31@outlook.com"},"repository":{"url":"git+https://github.com/adrekic/expo-meta-wearables-dat.git","type":"git"},"_npmVersion":"10.8.2","description":"This package enables developers to utilize Meta's AI glasses (Meta Wearables DAT) in Expo + React Native applications.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx}":"eslint --fix","*.{js,jsx,ts,tsx,json,md}":"prettier --write"},"sideEffects":false,"_nodeVersion":"18.20.8","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.29.2","devDependencies":{"expo":"^54.0.27","jest":"^29.7.0","jiti":"^2.6.1","husky":"^9.1.7","react":"19.2.7","eslint":"^9.39.2","globals":"^17.3.0","prettier":"^3.8.1","react-dom":"19.2.7","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.2.3","lint-staged":"^16.2.7","@types/react":"~19.1.0","react-native":"0.81.5","@commitlint/cli":"^20.4.1","@tsconfig/node18":"^18.2.6","semantic-release":"^25.0.3","@commitlint/types":"^20.4.0","expo-module-scripts":"^5.0.8","@testing-library/dom":"^10.4.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.1","@testing-library/react":"^16.3.2","eslint-config-universe":"^15.0.3","jest-environment-jsdom":"^30.2.0","@semantic-release/github":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^20.4.1","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"peerDependencies":{"expo":">=52","react":">=18","react-native":">=0.76"},"_npmOperationalInternal":{"tmp":"tmp/expo-meta-wearables-dat_1.0.4_1785365895795_0.027551889811356256","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@adrekic/expo-meta-wearables-dat","version":"1.0.5","keywords":["react-native","expo","expo-meta-wearables-dat","EMWDAT","meta","wearables","glasses","ray-ban","camera","streaming","ios","android","bluetooth","dat"],"author":{"url":"https://github.com/circus-kitchens/","name":"Circus Group","email":"fabricio_ext@circuskitchens.com"},"license":"MIT","_id":"@adrekic/expo-meta-wearables-dat@1.0.5","maintainers":[{"name":"adrekic","email":"raptorsbasketball31@outlook.com"}],"homepage":"https://github.com/adrekic/expo-meta-wearables-dat#readme","bugs":{"url":"https://github.com/adrekic/expo-meta-wearables-dat/issues"},"dist":{"shasum":"410f8252cd80b1ae113d4d13deaee196b90f879f","tarball":"https://registry.npmjs.org/@adrekic/expo-meta-wearables-dat/-/expo-meta-wearables-dat-1.0.5.tgz","fileCount":70,"integrity":"sha512-PlhekFL8c0I7aMy/Ye2WB7fHqm3Wh5LIIuWnmk2L9LAKeIxSly9vljq8m+cipAq1pHRYiesyOx5pqMAVwOrxAw==","signatures":[{"sig":"MEQCIGx1dANRN8mIIkZKaR3lLbQTdzI3NOGVqWiZgCV7/0jcAiAmrYb3wLED2ujHbJve2ZSdC48py5jfBNf9Yd2gSFknsw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":514192},"main":"build/index.js","types":"build/index.d.ts","volta":{"node":"18.20.8","yarn":"4.12.0"},"engines":{"node":">=18"},"exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js","react-native":"./build/index.js"},"./app.plugin":"./app.plugin.js","./app.plugin.js":"./app.plugin.js","./expo-module.config.json":"./expo-module.config.json"},"gitHead":"625df9a9b543f80bb614735fae61e14f2a084ffe","scripts":{"ios":"expo run:ios","lint":"expo-module lint","test":"expo-module test","build":"expo-module build","clean":"expo-module clean","android":"expo run:android","prepare":"husky && expo-module prepare","open:ios":"xed example/ios","expo-module":"expo-module","open:android":"open -a \"Android Studio\" example/android","prepublishOnly":"expo-module prepublishOnly"},"_npmUser":{"name":"adrekic","email":"raptorsbasketball31@outlook.com"},"repository":{"url":"git+https://github.com/adrekic/expo-meta-wearables-dat.git","type":"git"},"_npmVersion":"10.8.2","description":"This package enables developers to utilize Meta's AI glasses (Meta Wearables DAT) in Expo + React Native applications.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx}":"eslint --fix","*.{js,jsx,ts,tsx,json,md}":"prettier --write"},"sideEffects":false,"_nodeVersion":"18.20.8","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.29.2","devDependencies":{"expo":"^54.0.27","jest":"^29.7.0","jiti":"^2.6.1","husky":"^9.1.7","react":"19.2.7","eslint":"^9.39.2","globals":"^17.3.0","prettier":"^3.8.1","react-dom":"19.2.7","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.2.3","lint-staged":"^16.2.7","@types/react":"~19.1.0","react-native":"0.81.5","@commitlint/cli":"^20.4.1","@tsconfig/node18":"^18.2.6","semantic-release":"^25.0.3","@commitlint/types":"^20.4.0","expo-module-scripts":"^5.0.8","@testing-library/dom":"^10.4.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.1","@testing-library/react":"^16.3.2","eslint-config-universe":"^15.0.3","jest-environment-jsdom":"^30.2.0","@semantic-release/github":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^20.4.1","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"peerDependencies":{"expo":">=52","react":">=18","react-native":">=0.76"},"_npmOperationalInternal":{"tmp":"tmp/expo-meta-wearables-dat_1.0.5_1785367714497_0.26695304052338464","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@adrekic/expo-meta-wearables-dat","version":"1.0.6","keywords":["react-native","expo","expo-meta-wearables-dat","EMWDAT","meta","wearables","glasses","ray-ban","camera","streaming","ios","android","bluetooth","dat"],"author":{"url":"https://github.com/circus-kitchens/","name":"Circus Group","email":"fabricio_ext@circuskitchens.com"},"license":"MIT","_id":"@adrekic/expo-meta-wearables-dat@1.0.6","maintainers":[{"name":"adrekic","email":"raptorsbasketball31@outlook.com"}],"homepage":"https://github.com/adrekic/expo-meta-wearables-dat#readme","bugs":{"url":"https://github.com/adrekic/expo-meta-wearables-dat/issues"},"dist":{"shasum":"dac8f5f65eef87fb961bb7158f8e859b013c3cfa","tarball":"https://registry.npmjs.org/@adrekic/expo-meta-wearables-dat/-/expo-meta-wearables-dat-1.0.6.tgz","fileCount":70,"integrity":"sha512-Os1IaGe0idsMC9Jc2ww4tkuPgcJ9tDgewJEvhHIBEdtihfnLl2xmi/ti56ONlLnHmybLCfvyMK/wkR+ZlO40Lg==","signatures":[{"sig":"MEUCIQD7D3q5r3sSoFCAKwKsqoE4qTvWe/FvjI18YBqSP71KYgIgVPYcqANWgxayHBWikvLb47DUnBvONB7nBWWQjD0+YmM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":514244},"main":"build/index.js","types":"build/index.d.ts","volta":{"node":"18.20.8","yarn":"4.12.0"},"engines":{"node":">=18"},"exports":{".":{"types":"./build/index.d.ts","default":"./build/index.js","react-native":"./build/index.js"},"./app.plugin":"./app.plugin.js","./app.plugin.js":"./app.plugin.js","./expo-module.config.json":"./expo-module.config.json"},"gitHead":"918fe4239f053a41029d7f00aceded67f8ca0cac","scripts":{"ios":"expo run:ios","lint":"expo-module lint","test":"expo-module test","build":"expo-module build","clean":"expo-module clean","android":"expo run:android","prepare":"husky && expo-module prepare","open:ios":"xed example/ios","expo-module":"expo-module","open:android":"open -a \"Android Studio\" example/android","prepublishOnly":"expo-module prepublishOnly"},"_npmUser":{"name":"adrekic","email":"raptorsbasketball31@outlook.com"},"repository":{"url":"git+https://github.com/adrekic/expo-meta-wearables-dat.git","type":"git"},"_npmVersion":"10.8.2","description":"This package enables developers to utilize Meta's AI glasses (Meta Wearables DAT) in Expo + React Native applications.","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx}":"eslint --fix","*.{js,jsx,ts,tsx,json,md}":"prettier --write"},"sideEffects":false,"_nodeVersion":"18.20.8","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.29.2","devDependencies":{"expo":"^54.0.27","jest":"^29.7.0","jiti":"^2.6.1","husky":"^9.1.7","react":"19.2.7","eslint":"^9.39.2","globals":"^17.3.0","prettier":"^3.8.1","react-dom":"19.2.7","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.2.3","lint-staged":"^16.2.7","@types/react":"~19.1.0","react-native":"0.81.5","@commitlint/cli":"^20.4.1","@tsconfig/node18":"^18.2.6","semantic-release":"^25.0.3","@commitlint/types":"^20.4.0","expo-module-scripts":"^5.0.8","@testing-library/dom":"^10.4.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.1","@testing-library/react":"^16.3.2","eslint-config-universe":"^15.0.3","jest-environment-jsdom":"^30.2.0","@semantic-release/github":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^20.4.1","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"peerDependencies":{"expo":">=52","react":">=18","react-native":">=0.76"},"_npmOperationalInternal":{"tmp":"tmp/expo-meta-wearables-dat_1.0.6_1785368889183_0.10005149438933847","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@adrekic/expo-meta-wearables-dat","version":"1.0.7","description":"This package enables developers to utilize Meta's AI glasses (Meta Wearables DAT) in Expo + React Native applications.","main":"build/index.js","types":"build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","react-native":"./build/index.js","default":"./build/index.js"},"./app.plugin.js":"./app.plugin.js","./app.plugin":"./app.plugin.js","./expo-module.config.json":"./expo-module.config.json"},"sideEffects":false,"scripts":{"build":"expo-module build","clean":"expo-module clean","lint":"expo-module lint","test":"expo-module test","prepare":"husky && expo-module prepare","prepublishOnly":"expo-module prepublishOnly","expo-module":"expo-module","open:ios":"xed example/ios","open:android":"open -a \"Android Studio\" example/android","android":"expo run:android","ios":"expo run:ios"},"keywords":["react-native","expo","expo-meta-wearables-dat","EMWDAT","meta","wearables","glasses","ray-ban","camera","streaming","ios","android","bluetooth","dat"],"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/adrekic/expo-meta-wearables-dat.git"},"bugs":{"url":"https://github.com/adrekic/expo-meta-wearables-dat/issues"},"author":{"name":"Circus Group","email":"fabricio_ext@circuskitchens.com","url":"https://github.com/circus-kitchens/"},"license":"MIT","homepage":"https://github.com/adrekic/expo-meta-wearables-dat#readme","devDependencies":{"@commitlint/cli":"^20.4.1","@commitlint/config-conventional":"^20.4.1","@commitlint/types":"^20.4.0","@semantic-release/changelog":"^6.0.3","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/git":"^10.0.1","@semantic-release/github":"^12.0.5","@semantic-release/npm":"^12.0.1","@semantic-release/release-notes-generator":"^14.1.0","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.2","@tsconfig/node18":"^18.2.6","@types/jest":"^30.0.0","@types/node":"^25.2.3","@types/react":"~19.1.0","eslint":"^9.39.2","eslint-config-universe":"^15.0.3","expo":"^54.0.27","expo-module-scripts":"^5.0.8","globals":"^17.3.0","husky":"^9.1.7","jest":"^29.7.0","jest-environment-jsdom":"^30.2.0","jiti":"^2.6.1","lint-staged":"^16.2.7","prettier":"^3.8.1","react":"19.2.7","react-dom":"19.2.7","react-native":"0.81.5","semantic-release":"^25.0.3","typescript":"^5.9.3"},"engines":{"node":">=18"},"peerDependencies":{"expo":">=52","react":">=18","react-native":">=0.76"},"packageManager":"yarn@4.12.0","lint-staged":{"*.{js,jsx,ts,tsx}":"eslint --fix","*.{js,jsx,ts,tsx,json,md}":"prettier --write"},"volta":{"node":"18.20.8","yarn":"4.12.0"},"_id":"@adrekic/expo-meta-wearables-dat@1.0.7","gitHead":"5dbe300bc1fb48c057c00b8849905e8530e2b387","_nodeVersion":"18.20.8","_npmVersion":"10.8.2","dist":{"integrity":"sha512-slAcvbz8kMUJHwaGffqkD4GHvr+lwfRfgvwivqkqqPmfqCR6HVFx6c9qfRof9e6I05msPMECR/xFQaLLR/qSwA==","shasum":"edecc71df6718ba02ec83d48fe812c0d5b4c7bf9","tarball":"https://registry.npmjs.org/@adrekic/expo-meta-wearables-dat/-/expo-meta-wearables-dat-1.0.7.tgz","fileCount":70,"unpackedSize":514522,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDKSTyDw1mRba/IXnn0qT7KzTFATWHQEQYXPcJyvLm+YwIhAPrp43NFxoSM4bAQRIN+mSdN8dAfvV4TBivro1BDJ2PZ"}]},"_npmUser":{"name":"adrekic","email":"raptorsbasketball31@outlook.com"},"directories":{},"maintainers":[{"name":"adrekic","email":"raptorsbasketball31@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expo-meta-wearables-dat_1.0.7_1785372900600_0.2735416438713092"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-17T07:07:48.698Z","modified":"2026-07-30T00:55:00.998Z","1.0.0":"2026-07-17T07:07:48.984Z","1.0.1":"2026-07-28T22:58:06.416Z","1.0.2":"2026-07-29T17:59:26.925Z","1.0.3":"2026-07-29T21:47:15.694Z","1.0.4":"2026-07-29T22:58:15.934Z","1.0.5":"2026-07-29T23:28:34.635Z","1.0.6":"2026-07-29T23:48:09.357Z","1.0.7":"2026-07-30T00:55:00.777Z"},"bugs":{"url":"https://github.com/adrekic/expo-meta-wearables-dat/issues"},"author":{"name":"Circus Group","email":"fabricio_ext@circuskitchens.com","url":"https://github.com/circus-kitchens/"},"license":"MIT","homepage":"https://github.com/adrekic/expo-meta-wearables-dat#readme","keywords":["react-native","expo","expo-meta-wearables-dat","EMWDAT","meta","wearables","glasses","ray-ban","camera","streaming","ios","android","bluetooth","dat"],"repository":{"type":"git","url":"git+https://github.com/adrekic/expo-meta-wearables-dat.git"},"description":"This package enables developers to utilize Meta's AI glasses (Meta Wearables DAT) in Expo + React Native applications.","maintainers":[{"name":"adrekic","email":"raptorsbasketball31@outlook.com"}],"readme":"# expo-meta-wearables-dat\n\n[![npm version](https://img.shields.io/npm/v/expo-meta-wearables-dat)](https://www.npmjs.com/package/expo-meta-wearables-dat)\n[![CI](https://github.com/circus-kitchens/expo-meta-wearables-dat/actions/workflows/ci.yml/badge.svg)](https://github.com/circus-kitchens/expo-meta-wearables-dat/actions/workflows/ci.yml)\n[![license](https://img.shields.io/npm/l/expo-meta-wearables-dat)](./LICENSE)\n![platform: iOS | Android](https://img.shields.io/badge/platform-iOS%20%7C%20Android-blue)\n\nExpo native module for integrating **Meta Wearables DAT** (Ray-Ban Meta smart glasses) into React Native apps. Provides device registration, permissions, session-based camera streaming, photo capture, and a React hook — bridged from the official Meta Wearables DAT SDK 0.6 on both iOS and Android.\n\n> **Official SDK docs:** [Meta Wearables DAT — Developer Documentation](https://wearables.developer.meta.com/docs/develop)\n>\n> You must register your app in the [Meta Wearables Developer Center](https://wearables.developer.meta.com/) to obtain your App ID and Client Token.\n\n> **Disclaimer:** This project is **not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc.** It is an independent, community-maintained wrapper around the publicly available Meta Wearables DAT SDK.\n\n## Non-goals\n\n- **Background streaming** — the SDK doesn't support it\n- **Expo Go** — requires a [development build](https://docs.expo.dev/develop/development-builds/introduction/) (native code)\n\n## Features\n\n- Device registration / unregistration via Meta AI app\n- Permission management (camera)\n- Device discovery and link state monitoring\n- Session-based camera streaming with native view\n- Compressed HEVC video streaming (Android)\n- Photo capture (JPEG / HEIC)\n- `useMetaWearables` React hook with full state management\n- Mock device simulation for testing (debug builds) with permission mocking and phone camera feed\n- Expo config plugin (auto-configures Info.plist, AndroidManifest, URL schemes, deployment target)\n\n## Compatibility\n\n| Requirement      | Version  |\n| ---------------- | -------- |\n| React Native     | 0.76+    |\n| Expo SDK         | 52+      |\n| iOS              | 17.0+    |\n| Android          | API 31+  |\n| Xcode            | 16+      |\n| Swift            | 5.9+     |\n| DAT SDK          | 0.6      |\n| New Architecture | Untested |\n\n## Supported Devices\n\n- Ray-Ban Meta (verified)\n- Ray-Ban Meta Optics (untested)\n- Meta Ray-Ban Display (untested)\n- Oakley Meta HSTN / Vanguard (untested)\n\n## Installation\n\n```bash\nnpx expo install expo-meta-wearables-dat\n```\n\nOr manually:\n\n```bash\n# pnpm\npnpm add expo-meta-wearables-dat\n\n# yarn\nyarn add expo-meta-wearables-dat\n\n# npm\nnpm install expo-meta-wearables-dat\n```\n\n## Setup\n\n### Config plugin\n\nAdd the plugin to your `app.json` / `app.config.js`:\n\n```json\n{\n  \"plugins\": [\n    [\n      \"expo-meta-wearables-dat\",\n      {\n        \"urlScheme\": \"myapp\",\n        \"metaAppId\": \"YOUR_META_APP_ID\",\n        \"clientToken\": \"YOUR_CLIENT_TOKEN\",\n        \"bluetoothUsageDescription\": \"This app uses Bluetooth to connect to Meta Wearables.\",\n        \"microphoneUsageDescription\": \"This app records audio with Meta Wearables video.\"\n      }\n    ]\n  ]\n}\n```\n\n| Prop                              | Required | Description                                                                                                   |\n| --------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------- |\n| `urlScheme`                       | Yes      | URL scheme for Meta AI app callback (e.g. `\"myapp\"`). Do not include `://` — only the scheme name             |\n| `metaAppId`                       | No       | Meta App ID from [Wearables Developer Center](https://wearables.developer.meta.com/). Omit for Developer Mode |\n| `clientToken`                     | No       | Client Token from Wearables Developer Center                                                                  |\n| `bluetoothUsageDescription`       | No       | Custom Bluetooth usage description (iOS only)                                                                 |\n| `microphoneUsageDescription`      | No       | Custom microphone usage description (iOS only)                                                                |\n| `githubToken`                     | No       | GitHub token for Maven packages (Android). Falls back to `GITHUB_TOKEN` env var                               |\n| `iosDuplicateSignatureWorkaround` | No       | Removes duplicated MWDAT XCFramework signature artifacts during iOS archives. Defaults to `true`              |\n\n### iOS\n\nThe plugin automatically configures:\n\n- `CFBundleURLTypes` (URL scheme)\n- `LSApplicationQueriesSchemes` (`fb-viewapp`)\n- `UISupportedExternalAccessoryProtocols` (`com.meta.ar.wearable`)\n- `UIBackgroundModes` (`bluetooth-peripheral`, `external-accessory`)\n- `NSBluetoothAlwaysUsageDescription`\n- `NSMicrophoneUsageDescription`\n- `MWDAT` configuration dictionary (including `TeamID` auto-resolved from Xcode's `DEVELOPMENT_TEAM` signing setting)\n- iOS deployment target to 17.0\n- Embeds MWDATCamera & MWDATCore dynamic frameworks (`MWDATMockDevice` in Debug only)\n\n### Android\n\nThe plugin automatically configures:\n\n- `<meta-data>` entries for `APPLICATION_ID` and `CLIENT_TOKEN` in AndroidManifest.xml\n- Deep link `<intent-filter>` on MainActivity with the configured URL scheme\n- Bluetooth permissions (`BLUETOOTH`, `BLUETOOTH_CONNECT`)\n- Microphone permission (`RECORD_AUDIO`)\n\nThe Android SDK dependencies are resolved via Maven from [GitHub Packages](https://github.com/facebook/meta-wearables-dat-android). The config plugin injects the Maven repository automatically. You need either:\n\n- `GITHUB_ACTOR` and `GITHUB_TOKEN` environment variables set, **or**\n- The `githubToken` plugin prop configured\n\n### Prebuild\n\nAfter adding the plugin, generate the native projects:\n\n```bash\nnpx expo prebuild\n```\n\nIf you change plugin configuration later, regenerate with `--clean` to ensure native projects are fully updated:\n\n```bash\nnpx expo prebuild --clean\n```\n\n### Prerequisites\n\n- The user must have the **Meta AI** app installed and paired with their glasses\n- A physical device is required (no simulator/emulator support)\n- **iOS**: Xcode 16+ with a valid signing team\n- **Android**: Android Studio with SDK installed, minSdk 31 (Android 12+)\n\n## Quick Start\n\n```tsx\nimport { View, Button, Text } from \"react-native\";\nimport { useMetaWearables, EMWDATStreamView } from \"expo-meta-wearables-dat\";\nimport { useState } from \"react\";\n\nexport default function App() {\n  const [sessionId, setSessionId] = useState<string | null>(null);\n  const {\n    isConfigured,\n    registrationState,\n    devices,\n    startRegistration,\n    createSession,\n    startSession,\n    stopSession,\n    addStreamToSession,\n    capturePhoto,\n  } = useMetaWearables({\n    onPhotoCaptured: (photo) => console.log(\"Photo saved:\", photo.filePath),\n    onStreamStateChange: (state) => console.log(\"Stream:\", state),\n  });\n\n  const handleStartStream = async () => {\n    const id = await createSession();\n    setSessionId(id);\n    await startSession(id);\n    await addStreamToSession(id, { resolution: \"medium\", frameRate: 24 });\n  };\n\n  const handleStopStream = async () => {\n    if (sessionId) {\n      await stopSession(sessionId);\n      setSessionId(null);\n    }\n  };\n\n  return (\n    <View style={{ flex: 1, padding: 20, paddingTop: 60, gap: 10 }}>\n      <Text>Configured: {String(isConfigured)}</Text>\n      <Text>Registration: {registrationState}</Text>\n      <Text>Devices: {devices.length}</Text>\n\n      <Button title=\"Register\" onPress={() => startRegistration()} />\n      <Button title=\"Start Stream\" onPress={handleStartStream} />\n      <Button title=\"Stop Stream\" onPress={handleStopStream} />\n      <Button title=\"Capture Photo\" onPress={() => capturePhoto(\"jpeg\")} />\n\n      <EMWDATStreamView\n        isActive={!!sessionId}\n        resizeMode=\"contain\"\n        style={{ flex: 1 }}\n      />\n    </View>\n  );\n}\n```\n\n### Native MP4 recording\n\nRecording is attached to an existing session with an active uncompressed stream:\n\n```ts\nawait startRecording(sessionId, {\n  fileUri: \"file:///absolute/path/capture.mp4\",\n  maxDuration: 10 * 60 * 1000,\n});\n\nconst result = await stopRecording(sessionId);\n```\n\nThe native layer records the original DAT I420 frames as H.264 with mono AAC audio. It prefers\nthe glasses Bluetooth HFP microphone and falls back to the phone microphone. `maxDuration` is\ncapped at 30 minutes. Repeated `stopRecording` calls return the same completed result, while\n`cancelRecording` deletes the incomplete file. Backgrounding, stream loss, device disconnection,\nand session teardown attempt to finalize the current MP4.\n\n## API Reference\n\n### `useMetaWearables(options?)`\n\nReact hook that manages the full lifecycle of Meta Wearables integration.\n\n**Options** (`UseMetaWearablesOptions`):\n\n| Option                       | Type                                   | Default  | Description                      |\n| ---------------------------- | -------------------------------------- | -------- | -------------------------------- |\n| `autoConfig`                 | `boolean`                              | `true`   | Auto-call `configure()` on mount |\n| `logLevel`                   | `LogLevel`                             | `\"info\"` | Initial log level                |\n| `onRegistrationStateChange`  | `(state) => void`                      | —        | Registration state changed       |\n| `onDevicesChange`            | `(devices) => void`                    | —        | Device list updated              |\n| `onLinkStateChange`          | `(deviceId, linkState) => void`        | —        | Device connection changed        |\n| `onStreamStateChange`        | `(state) => void`                      | —        | Stream state changed             |\n| `onVideoFrame`               | `(metadata) => void`                   | —        | Video frame received             |\n| `onPhotoCaptured`            | `(photo) => void`                      | —        | Photo captured                   |\n| `onStreamError`              | `(error) => void`                      | —        | Stream error occurred            |\n| `onPermissionStatusChange`   | `(permission, status) => void`         | —        | Permission status changed        |\n| `onCompatibilityChange`      | `(deviceId, compatibility) => void`    | —        | Device compatibility changed     |\n| `onDeviceSessionStateChange` | `(sessionId, state) => void`           | —        | Device session state changed     |\n| `onDeviceSessionError`       | `(sessionId, error, message?) => void` | —        | Device session error             |\n| `onCapabilityStateChange`    | `(sessionId, state) => void`           | —        | Capability state changed         |\n| `onRecordingStateChange`     | `(sessionId, state) => void`           | —        | Recording state changed          |\n| `onAudioRouteChange`         | `(sessionId, audioSource) => void`     | —        | Recording audio route changed    |\n| `onRecordingDurationLimit`   | `(sessionId) => void`                  | —        | Native duration cap reached      |\n| `onRecordingError`           | `(sessionId, code, message) => void`   | —        | Recording failed                 |\n\n**Returned state:**\n\n| Field                   | Type                                   | Description                  |\n| ----------------------- | -------------------------------------- | ---------------------------- |\n| `isConfigured`          | `boolean`                              | SDK configured               |\n| `isConfiguring`         | `boolean`                              | `true` while configuring     |\n| `configError`           | `Error \\| null`                        | Error from last `configure`  |\n| `registrationState`     | `RegistrationState`                    | Registration lifecycle state |\n| `permissionStatus`      | `PermissionStatus`                     | `\"granted\"` \\| `\"denied\"`    |\n| `devices`               | `Device[]`                             | Connected devices            |\n| `deviceSessionStates`   | `Record<string, DeviceSessionState>`   | Per-session states           |\n| `deviceSessionErrors`   | `Record<string, { error, message? }>`  | Per-session errors           |\n| `capabilityStates`      | `Record<string, CapabilityState>`      | Per-session capability state |\n| `recordingStates`       | `Record<string, RecordingState>`       | Per-session recording state  |\n| `recordingAudioSources` | `Record<string, RecordingAudioSource>` | Per-session audio source     |\n\n**Returned actions:**\n\n| Action                              | Signature                                       | Description                        |\n| ----------------------------------- | ----------------------------------------------- | ---------------------------------- |\n| `configure`                         | `() => Promise<void>`                           | Initialize SDK                     |\n| `setLogLevel`                       | `(level: LogLevel) => void`                     | Change log level                   |\n| `startRegistration`                 | `() => Promise<void>`                           | Open Meta AI app for registration  |\n| `startUnregistration`               | `() => Promise<void>`                           | Unregister from Meta AI            |\n| `checkPermissionStatus`             | `(permission) => Promise<PermissionStatus>`     | Check permission                   |\n| `requestPermission`                 | `(permission) => Promise<PermissionStatus>`     | Request permission                 |\n| `getDevice`                         | `(id) => Promise<Device \\| null>`               | Get device by identifier           |\n| `refreshDevices`                    | `() => Promise<Device[]>`                       | Refresh device list                |\n| `createSession`                     | `(deviceId?) => Promise<string>`                | Create a device session            |\n| `startSession`                      | `(sessionId) => Promise<void>`                  | Await capability readiness         |\n| `stopSession`                       | `(sessionId) => Promise<void>`                  | Stop a session (terminal)          |\n| `addStreamToSession`                | `(sessionId, config?) => Promise<void>`         | Attach camera stream capability    |\n| `removeStreamFromSession`           | `(sessionId) => Promise<void>`                  | Remove stream capability           |\n| `capturePhoto`                      | `(format?) => Promise<void>`                    | Capture photo                      |\n| `startRecording`                    | `(sessionId, options) => Promise<void>`         | Prepare native MP4 recording       |\n| `stopRecording`                     | `(sessionId) => Promise<NativeRecordingResult>` | Finalize and return metadata       |\n| `cancelRecording`                   | `(sessionId) => Promise<void>`                  | Delete an incomplete recording     |\n| `enableMockDeviceKit`               | `(config?) => Promise<void>`                    | Enable mock device kit             |\n| `disableMockDeviceKit`              | `() => Promise<void>`                           | Disable mock device kit            |\n| `isMockDeviceKitEnabled`            | `() => Promise<boolean>`                        | Check if mock kit is enabled       |\n| `pairMockDevice`                    | `() => Promise<string>`                         | Pair a mock device                 |\n| `unpairMockDevice`                  | `(deviceId) => Promise<void>`                   | Unpair a mock device               |\n| `mockSetPermissionStatus`           | `(permission, status) => Promise<void>`         | Set mock permission status         |\n| `mockSetPermissionRequestResult`    | `(permission, result) => Promise<void>`         | Set mock permission request result |\n| `mockDeviceSetCameraFeedFromCamera` | `(id, facing) => Promise<void>`                 | Set mock camera from phone camera  |\n\n### Module Functions\n\nThese can be imported directly for lower-level control:\n\n```ts\nimport {\n  EMWDATModule,\n  configure,\n  setLogLevel,\n  startRegistration,\n  startUnregistration,\n  handleUrl,\n  checkPermissionStatus,\n  requestPermission,\n  getDevices,\n  getDevice,\n  getRegistrationState,\n  getRegistrationStateAsync,\n  createSession,\n  startSession,\n  stopSession,\n  addStreamToSession,\n  removeStreamFromSession,\n  capturePhoto,\n  startRecording,\n  stopRecording,\n  cancelRecording,\n  addListener,\n  // Mock device kit\n  enableMockDeviceKit,\n  disableMockDeviceKit,\n  isMockDeviceKitEnabled,\n  pairMockDevice,\n  unpairMockDevice,\n  getMockDevices,\n  mockDevicePowerOn,\n  mockDevicePowerOff,\n  mockDeviceDon,\n  mockDeviceDoff,\n  mockDeviceFold,\n  mockDeviceUnfold,\n  mockDeviceSetCameraFeed,\n  mockDeviceSetCapturedImage,\n  mockDeviceSetCameraFeedFromCamera,\n  mockSetPermissionStatus,\n  mockSetPermissionRequestResult,\n} from \"expo-meta-wearables-dat\";\n```\n\n### Events\n\nSubscribe via `addListener` or hook callbacks:\n\n| Event                        | Payload                                                                  |\n| ---------------------------- | ------------------------------------------------------------------------ |\n| `onRegistrationStateChange`  | `{ state: RegistrationState }`                                           |\n| `onDevicesChange`            | `{ devices: Device[] }`                                                  |\n| `onLinkStateChange`          | `{ deviceId: string, linkState: LinkState }`                             |\n| `onStreamStateChange`        | `{ state: StreamSessionState }`                                          |\n| `onVideoFrame`               | `{ timestamp, width, height, isCompressed? }`                            |\n| `onPhotoCaptured`            | `{ filePath, format, timestamp, width?, height?, base64? }`              |\n| `onStreamError`              | `StreamSessionError` (discriminated union)                               |\n| `onPermissionStatusChange`   | `{ permission: Permission, status: PermissionStatus }`                   |\n| `onCompatibilityChange`      | `{ deviceId: string, compatibility: Compatibility }`                     |\n| `onDeviceSessionStateChange` | `{ sessionId: string, state: DeviceSessionState }`                       |\n| `onDeviceSessionError`       | `{ sessionId: string, error: DeviceSessionErrorCode, message?: string }` |\n| `onCapabilityStateChange`    | `{ sessionId: string, state: CapabilityState }`                          |\n| `onRecordingStateChange`     | `{ sessionId: string, state: RecordingState }`                           |\n| `onAudioRouteChange`         | `{ sessionId: string, audioSource: RecordingAudioSource }`               |\n| `onRecordingDurationLimit`   | `{ sessionId: string }`                                                  |\n| `onRecordingError`           | `{ sessionId: string, code: string, message: string }`                   |\n\n### `EMWDATStreamView`\n\nNative view component for rendering the camera stream.\n\n| Prop         | Type                                    | Default     | Description                 |\n| ------------ | --------------------------------------- | ----------- | --------------------------- |\n| `isActive`   | `boolean`                               | `false`     | Whether to render frames    |\n| `resizeMode` | `\"contain\"` \\| `\"cover\"` \\| `\"stretch\"` | `\"contain\"` | How frames fit the view     |\n| `style`      | `ViewStyle`                             | —           | Standard React Native style |\n\n### Types\n\nKey types exported from the package:\n\n- `LogLevel` — `\"debug\"` \\| `\"info\"` \\| `\"warn\"` \\| `\"error\"` \\| `\"none\"`\n- `RegistrationState` — `\"unavailable\"` \\| `\"available\"` \\| `\"registering\"` \\| `\"registered\"`\n- `Permission` — `\"camera\"`\n- `PermissionStatus` — `\"granted\"` \\| `\"denied\"`\n- `Device` — `{ identifier, name, linkState, deviceType, compatibility }`\n- `DeviceType` — `\"rayBanMeta\"` \\| `\"oakleyMetaHSTN\"` \\| `\"oakleyMetaVanguard\"` \\| `\"metaRayBanDisplay\"` \\| `\"rayBanMetaOptics\"` \\| `\"unknown\"`\n- `LinkState` — `\"connected\"` \\| `\"disconnected\"` \\| `\"connecting\"`\n- `Compatibility` — `\"compatible\"` \\| `\"undefined\"` \\| `\"deviceUpdateRequired\"` \\| `\"sdkUpdateRequired\"`\n- `DeviceSessionState` — `\"idle\"` \\| `\"starting\"` \\| `\"started\"` \\| `\"paused\"` \\| `\"stopping\"` \\| `\"stopped\"`\n- `DeviceSessionErrorCode` — `\"noEligibleDevice\"` \\| `\"sessionAlreadyStopped\"` \\| `\"sessionAlreadyExists\"` \\| `\"sessionIdle\"` \\| `\"capabilityAlreadyActive\"` \\| `\"capabilityNotFound\"` \\| `\"unexpectedError\"`\n- `CapabilityState` — `\"active\"` \\| `\"stopped\"`\n- `StreamSessionConfig` — `{ videoCodec, resolution, frameRate, deviceId?, compressVideo?, skipAppLaunch? }`\n- `StreamSessionState` — `\"stopped\"` \\| `\"waitingForDevice\"` \\| `\"starting\"` \\| `\"streaming\"` \\| `\"paused\"` \\| `\"stopping\"`\n- `StreamSessionError` — Discriminated union: `internalError` \\| `deviceNotFound` \\| `deviceNotConnected` \\| `timeout` \\| `videoStreamingError` \\| `permissionDenied` \\| `hingesClosed` \\| `thermalCritical`\n- `PhotoData` — `{ filePath, format, timestamp, width?, height?, base64? }`\n- `PhotoCaptureFormat` — `\"jpeg\"` \\| `\"heic\"`\n- `VideoFrameMetadata` — `{ timestamp, width, height, isCompressed? }`\n- `RecordingState` — `\"idle\"` \\| `\"preparing\"` \\| `\"recording\"` \\| `\"finalizing\"` \\| `\"finished\"` \\| `\"failed\"`\n- `RecordingAudioSource` — `\"glasses\"` \\| `\"phone\"` \\| `\"mixed\"`\n- `NativeRecordingOptions` — `{ fileUri, maxDuration }`\n- `NativeRecordingResult` — `{ fileUri, videoStart, duration, width, height, frameRate, audioSource }`\n- `StreamingResolution` — `\"high\"` \\| `\"medium\"` \\| `\"low\"`\n- `VideoCodec` — `\"raw\"` \\| `\"hvc1\"`\n- `CameraFacing` — `\"front\"` \\| `\"back\"`\n- `MockDeviceKitConfig` — `{ initiallyRegistered?, initialPermissionsGranted? }`\n- `CaptureError` — `\"deviceDisconnected\"` \\| `\"notStreaming\"` \\| `\"captureInProgress\"` \\| `\"captureFailed\"`\n- `StreamViewResizeMode` — `\"contain\"` \\| `\"cover\"` \\| `\"stretch\"`\n- `EMWDATPluginProps` — Config plugin options\n- Error code types: `WearablesErrorCode`, `RegistrationErrorCode`, `UnregistrationErrorCode`, `PermissionErrorCode`, `DecoderError`\n\nSee [`src/EMWDAT.types.ts`](./src/EMWDAT.types.ts) for the full list.\n\n### Mock Device API (Testing)\n\nFunctions for simulating Meta Wearables devices during development using the SDK's mock device framework. Only available in debug builds.\n\n```ts\nimport {\n  // Kit lifecycle\n  enableMockDeviceKit,\n  disableMockDeviceKit,\n  isMockDeviceKitEnabled,\n  // Device pairing\n  pairMockDevice,\n  unpairMockDevice,\n  getMockDevices,\n  // Device simulation\n  mockDevicePowerOn,\n  mockDevicePowerOff,\n  mockDeviceDon,\n  mockDeviceDoff,\n  mockDeviceFold,\n  mockDeviceUnfold,\n  mockDeviceSetCameraFeed,\n  mockDeviceSetCapturedImage,\n  mockDeviceSetCameraFeedFromCamera,\n  // Permission mocking\n  mockSetPermissionStatus,\n  mockSetPermissionRequestResult,\n} from \"expo-meta-wearables-dat\";\n```\n\n| Function                            | Signature                                             | Description                           |\n| ----------------------------------- | ----------------------------------------------------- | ------------------------------------- |\n| `enableMockDeviceKit`               | `(config?: MockDeviceKitConfig) => Promise<void>`     | Enable mock kit with optional config  |\n| `disableMockDeviceKit`              | `() => Promise<void>`                                 | Disable mock kit and remove fakes     |\n| `isMockDeviceKitEnabled`            | `() => Promise<boolean>`                              | Check if mock kit is enabled          |\n| `pairMockDevice`                    | `() => Promise<string>`                               | Pair a mock Ray-Ban Meta, returns ID  |\n| `unpairMockDevice`                  | `(id: string) => Promise<void>`                       | Unpair a mock device                  |\n| `getMockDevices`                    | `() => Promise<string[]>`                             | List active mock device IDs           |\n| `mockDevicePowerOn`                 | `(id: string) => Promise<void>`                       | Power on                              |\n| `mockDevicePowerOff`                | `(id: string) => Promise<void>`                       | Power off                             |\n| `mockDeviceDon`                     | `(id: string) => Promise<void>`                       | Simulate putting glasses on           |\n| `mockDeviceDoff`                    | `(id: string) => Promise<void>`                       | Simulate taking glasses off           |\n| `mockDeviceFold`                    | `(id: string) => Promise<void>`                       | Fold hinges                           |\n| `mockDeviceUnfold`                  | `(id: string) => Promise<void>`                       | Unfold hinges                         |\n| `mockDeviceSetCameraFeed`           | `(id: string, fileUrl: string) => Promise<void>`      | Set camera feed from local video file |\n| `mockDeviceSetCapturedImage`        | `(id: string, fileUrl: string) => Promise<void>`      | Set captured image from local file    |\n| `mockDeviceSetCameraFeedFromCamera` | `(id: string, facing: CameraFacing) => Promise<void>` | Use phone camera as mock feed         |\n| `mockSetPermissionStatus`           | `(permission, status) => Promise<void>`               | Set mock permission check result      |\n| `mockSetPermissionRequestResult`    | `(permission, result) => Promise<void>`               | Set mock permission request result    |\n\n## Example App\n\nThe `example/` directory contains a full demo app:\n\n1. Copy the example credentials and fill in your values:\n\n   ```bash\n   cd example\n   ```\n\n   Edit `app.json` and replace the placeholders:\n\n   - `YOUR_APPLE_TEAM_ID` — your Apple Developer Team ID\n   - `YOUR_META_APP_ID` — from the [Meta Wearables Developer Center](https://wearables.developer.meta.com/)\n   - `YOUR_CLIENT_TOKEN` — from the same Developer Center page\n\n2. Build and run:\n   ```bash\n   npx expo prebuild --clean\n   npx expo run:ios --device\n   # or\n   npx expo run:android --device\n   ```\n\n> Requires a physical device with a paired Meta Wearables device.\n\n## Upgrading to 1.2.0 (SDK 0.6)\n\n1.2.0 migrates to Meta Wearables DAT SDK 0.6, introducing a session-based streaming model.\n\n**Deprecated (removed):**\n\n- `startStream(config?)` — use `createSession()` → `startSession(id)` → `addStreamToSession(id, config)`\n- `stopStream()` — use `stopSession(sessionId)`\n- `getStreamState()` — observe stream state via `onStreamStateChange` event\n- `streamState` and `lastError` from hook return — use events and `deviceSessionStates`/`deviceSessionErrors`\n- `SessionState` type — replaced by `DeviceSessionState`\n- `createMockDevice()` / `removeMockDevice()` — use `enableMockDeviceKit()` + `pairMockDevice()` / `unpairMockDevice()`\n\n**Added:**\n\n- Session management: `createSession`, `startSession`, `stopSession`, `addStreamToSession`, `removeStreamFromSession`\n- `DeviceSessionState`, `DeviceSessionErrorCode`, `CapabilityState` types\n- `compressVideo` and `skipAppLaunch` in `StreamSessionConfig`\n- `isCompressed` in `VideoFrameMetadata`\n- `rayBanMetaOptics` device type\n- Mock device kit lifecycle: `enableMockDeviceKit`, `disableMockDeviceKit`, `isMockDeviceKitEnabled`\n- Mock permissions: `mockSetPermissionStatus`, `mockSetPermissionRequestResult`\n- Mock phone camera: `mockDeviceSetCameraFeedFromCamera` with `CameraFacing` type\n- New events: `onDeviceSessionError`, `onCapabilityStateChange`\n\n## Troubleshooting\n\n### Pod install fails / autolinking skips EMWDAT\n\nEnsure iOS deployment target is 17.0. The config plugin sets this automatically, but if you ran `expo prebuild --clean`, check that `ios/Podfile.properties.json` contains:\n\n```json\n{ \"ios.deploymentTarget\": \"17.0\" }\n```\n\n### `MWDATCamera` / `MWDATCore` framework not found at runtime\n\nThe config plugin adds a build phase to embed these dynamic frameworks. Run `npx expo prebuild --clean` to regenerate the Xcode project.\n\n### Duplicate `MWDAT*.xcframework-ios.signature` during archive\n\nThe config plugin removes only the duplicated MWDAT derived-data signature artifacts before embedding the frameworks. This workaround is enabled by default. If a future Xcode or Meta SDK release no longer needs it, set `iosDuplicateSignatureWorkaround` to `false` in the plugin options and regenerate the native project.\n\n### Registration opens Meta AI app but callback doesn't return\n\nVerify your `urlScheme` matches the one registered in the Meta Wearables Developer Center, and that `CFBundleURLTypes` in Info.plist contains it. The config plugin handles this, but double-check after prebuild.\n\n### Stream starts but no video frames\n\nEnsure the glasses hinges are open and the device is connected (`linkState: \"connected\"`). Check `onStreamError` for `hingesClosed` or `deviceNotConnected` errors.\n\n### `expo prebuild --clean` breaks the build\n\nThis wipes `Podfile.properties.json`. Re-run prebuild (the config plugin will re-inject the deployment target) and then `pod install`.\n\n### Android: Mock device stream shows no frames\n\nThe mock video feed **must be HEVC (H.265) encoded**. The SDK requests `video/hevc` mime type and rejects H.264 (AVC) videos. Resolution does not matter — only the codec.\n\n## Privacy & Data\n\n- The library **does not store, persist, or log** personally identifiable information\n- **No network requests** are made beyond what the Meta Wearables DAT SDK itself performs\n- **Debug logging** is disabled by default (`logLevel: \"info\"`) — logs stay on the device console\n- **Photos** are saved to a local file path and never uploaded by the library\n- **Video frames** are rendered on-device and remain native-only; recording writes MP4 data only to the caller-provided local file URI\n\nSee [SECURITY.md](./SECURITY.md) for the vulnerability reporting process.\n\n## Roadmap\n\n- Background streaming (pending SDK support)\n- New Architecture validation\n\n## License\n\n[MIT](./LICENSE)\n","readmeFilename":"README.md"}