{"_id":"@codemagic/react-native-patch","_rev":"8-e6749c32b012275e07fc87f68e34b83c","name":"@codemagic/react-native-patch","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@codemagic/react-native-patch","version":"0.1.0","keywords":["react-native","expo","ota","over-the-air","code-push","hot-update","codemagic","codemagic-patch"],"license":"Apache-2.0","_id":"@codemagic/react-native-patch@0.1.0","maintainers":[{"name":"kimminsik","email":"kmsbernard@gmail.com"},{"name":"tokarev","email":"team@nevercode.io"},{"name":"choiminseok","email":"cms3718@gmail.com"}],"homepage":"https://github.com/codemagic-ci-cd/codemagic-patch/tree/main/client#readme","bugs":{"url":"https://github.com/codemagic-ci-cd/codemagic-patch/issues"},"dist":{"shasum":"63cba734f2c500fa57676618aed598ed11156dd5","tarball":"https://registry.npmjs.org/@codemagic/react-native-patch/-/react-native-patch-0.1.0.tgz","fileCount":325,"integrity":"sha512-M0U3keUAayNpKIj4kmQjBPKur+HAFdeGJZ4DTqLeV+HsaZzikaTd190jrJEASLMUKIRkaUKniiXJMgXw05Szdw==","signatures":[{"sig":"MEUCIHt6wNPX+KsTDqdFEG8mlOb1yHUdPNWrh+/Irbckf8R0AiEA5WRC8fiVMRa2VDHQdaRuIIigHiOo0ZX/LFFNFL5ZeKw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4842078},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","react-native":"./src/index.ts"},"./testing":{"types":"./testing.ts","default":"./dist/testing.js","react-native":"./testing.ts"},"./package.json":"./package.json","./app.plugin.js":"./app.plugin.js"},"gitHead":"e2e0bc34dde8fdf7eddd419f703d4a98542398e7","scripts":{"lint":"yarn exec eslint \"src/**/*.ts\" \"test/**/*.ts\" \"e2e/**/*.ts\" \"plugin/**/*.ts\"","test":"yarn exec vitest run test/**/*.test.ts","build":"yarn exec rimraf dist plugin/build node_modules/.cache && yarn exec tsc -p tsconfig.build.json && yarn exec tsc -p tsconfig.plugin.json","clean":"yarn exec rimraf dist plugin/build node_modules/.cache","prepare":"rimraf dist plugin/build node_modules/.cache && tsc -p tsconfig.build.json && tsc -p tsconfig.plugin.json","typecheck":"yarn exec tsc -p tsconfig.json","describe:e2e":"node ./e2e/scripts/describe-e2e-setup.mjs","e2e:lane:ios":"node ./e2e/scripts/run-maestro-lane.mjs --platform ios","e2e:ios:smoke":"bash ./e2e/scripts/ios-smoke.sh","e2e:server:test":"yarn exec vitest run test/e2e-server/**/*.test.ts","e2e:lane:android":"node ./e2e/scripts/run-maestro-lane.mjs --platform android","e2e:server:start":"node --import ../node_modules/tsx/dist/loader.mjs ./e2e/scripts/start-scenario-server.ts","e2e:android:smoke":"bash ./e2e/scripts/android-smoke.sh","e2e:scaffold:test":"yarn exec vitest run test/e2e-lanes.test.ts"},"_npmUser":{"name":"kimminsik","email":"kmsbernard@gmail.com"},"repository":{"url":"git+https://github.com/codemagic-ci-cd/codemagic-patch.git","type":"git","directory":"client"},"_npmVersion":"10.8.2","description":"React Native client SDK for Codemagic Patch — over-the-air JavaScript & asset updates for React Native and Expo apps.","directories":{},"_nodeVersion":"20.20.2","react-native":"./src/index.ts","codegenConfig":{"ios":{"modulesConformingToProtocol":{"RCTTurboModule":["CodemagicPatchModule"]}},"name":"CodemagicPatchSpec","type":"modules","android":{"javaPackageName":"io.codemagic.patch"},"jsSrcsDir":"src"},"installConfig":{"hoistingLimits":"workspaces"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"testing":["./testing.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"expo":"~56.0.9","react":"19.2.4","eslint":"^9.36.0","rimraf":"^6.0.1","vitest":"^3.2.4","typescript":"^5.9.3","react-native":"0.84.1"},"peerDependencies":{"react":">=18","react-native":">=0.76"},"_npmOperationalInternal":{"tmp":"tmp/react-native-patch_0.1.0_1782865708783_0.8770100151584206","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@codemagic/react-native-patch","version":"0.1.1","keywords":["react-native","expo","ota","over-the-air","code-push","hot-update","codemagic","codemagic-patch"],"license":"Apache-2.0","_id":"@codemagic/react-native-patch@0.1.1","maintainers":[{"name":"kimminsik","email":"kmsbernard@gmail.com"},{"name":"tokarev","email":"team@nevercode.io"},{"name":"choiminseok","email":"cms3718@gmail.com"}],"homepage":"https://github.com/codemagic-ci-cd/codemagic-patch/tree/main/client#readme","bugs":{"url":"https://github.com/codemagic-ci-cd/codemagic-patch/issues"},"dist":{"shasum":"6d473fc382bc89492df89207b43c9d59294e74be","tarball":"https://registry.npmjs.org/@codemagic/react-native-patch/-/react-native-patch-0.1.1.tgz","fileCount":325,"integrity":"sha512-CDWeymcdeo9XwwsS2plE0TZjnkbD37nS2zWJr3uPF+aTaRuCufmHcZpBm4DDx1RTJxV4jETKWIa2Y4wiccFaww==","signatures":[{"sig":"MEUCIEdhwk5gor7GUMDyrAgbRTcYKN8b3jmcxtmXnLqqN5zyAiEAlzb7q+/oJRwQOL/2quD5VfKLqr42Hx8vXRrjQjuAfeo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4845471},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","react-native":"./src/index.ts"},"./testing":{"types":"./testing.ts","default":"./dist/testing.js","react-native":"./testing.ts"},"./package.json":"./package.json","./app.plugin.js":"./app.plugin.js"},"gitHead":"ff0848b98a2ce16d675567c93cc560c7146f2b81","scripts":{"lint":"yarn exec eslint \"src/**/*.ts\" \"test/**/*.ts\" \"e2e/**/*.ts\" \"plugin/**/*.ts\"","test":"yarn exec vitest run test/**/*.test.ts","build":"yarn exec rimraf dist plugin/build node_modules/.cache && yarn exec tsc -p tsconfig.build.json && yarn exec tsc -p tsconfig.plugin.json","clean":"yarn exec rimraf dist plugin/build node_modules/.cache","prepare":"rimraf dist plugin/build node_modules/.cache && tsc -p tsconfig.build.json && tsc -p tsconfig.plugin.json","typecheck":"yarn exec tsc -p tsconfig.json","describe:e2e":"node ./e2e/scripts/describe-e2e-setup.mjs","e2e:lane:ios":"node ./e2e/scripts/run-maestro-lane.mjs --platform ios","e2e:ios:smoke":"bash ./e2e/scripts/ios-smoke.sh","e2e:server:test":"yarn exec vitest run test/e2e-server/**/*.test.ts","e2e:lane:android":"node ./e2e/scripts/run-maestro-lane.mjs --platform android","e2e:server:start":"node --import ../node_modules/tsx/dist/loader.mjs ./e2e/scripts/start-scenario-server.ts","e2e:android:smoke":"bash ./e2e/scripts/android-smoke.sh","e2e:scaffold:test":"yarn exec vitest run test/e2e-lanes.test.ts"},"_npmUser":{"name":"kimminsik","email":"kmsbernard@gmail.com"},"repository":{"url":"git+https://github.com/codemagic-ci-cd/codemagic-patch.git","type":"git","directory":"client"},"_npmVersion":"10.9.3","description":"React Native client SDK for Codemagic Patch — over-the-air JavaScript & asset updates for React Native and Expo apps.","directories":{},"_nodeVersion":"22.20.0","react-native":"./src/index.ts","codegenConfig":{"ios":{"modulesConformingToProtocol":{"RCTTurboModule":["CodemagicPatchModule"]}},"name":"CodemagicPatchSpec","type":"modules","android":{"javaPackageName":"io.codemagic.patch"},"jsSrcsDir":"src"},"installConfig":{"hoistingLimits":"workspaces"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"testing":["./testing.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"expo":"~56.0.9","react":"19.2.4","eslint":"^9.36.0","rimraf":"^6.0.1","vitest":"^3.2.4","typescript":"^5.9.3","react-native":"0.84.1"},"peerDependencies":{"react":">=18","react-native":">=0.76"},"_npmOperationalInternal":{"tmp":"tmp/react-native-patch_0.1.1_1784696616999_0.8190684760555824","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@codemagic/react-native-patch","version":"0.1.2","keywords":["react-native","expo","ota","over-the-air","code-push","hot-update","codemagic","codemagic-patch"],"license":"Apache-2.0","_id":"@codemagic/react-native-patch@0.1.2","maintainers":[{"name":"kimminsik","email":"kmsbernard@gmail.com"},{"name":"tokarev","email":"team@nevercode.io"},{"name":"choiminseok","email":"cms3718@gmail.com"}],"homepage":"https://github.com/codemagic-ci-cd/codemagic-patch/tree/main/client#readme","bugs":{"url":"https://github.com/codemagic-ci-cd/codemagic-patch/issues"},"dist":{"shasum":"485c759b1bdaa85390db4cfd1a822571f8cac005","tarball":"https://registry.npmjs.org/@codemagic/react-native-patch/-/react-native-patch-0.1.2.tgz","fileCount":328,"integrity":"sha512-N8CCCmWbSE3Ka27Pc4l3nd4POu7xpchpeJZFjwHP8qZONtNnZLdp4K+RjMxik1YMkxaSe4gl4NyX3R4zJVVeVg==","signatures":[{"sig":"MEQCIC2f9I4ipjeUevbg9TF+r3wt4+fJS37vq5lPnZjwHrq7AiAKJC2AzEaaTwDGXFTgtoG/LyEi9TKtUDorQG2ZFHr9Xw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4859084},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","react-native":"./src/index.ts"},"./testing":{"types":"./testing.ts","default":"./dist/testing.js","react-native":"./testing.ts"},"./package.json":"./package.json","./app.plugin.js":"./app.plugin.js"},"gitHead":"1b97c73220c83a95fd2958561999fe981cf03575","scripts":{"lint":"yarn exec eslint \"src/**/*.ts\" \"test/**/*.ts\" \"e2e/**/*.ts\" \"plugin/**/*.ts\"","test":"yarn exec vitest run test/**/*.test.ts","build":"yarn exec rimraf dist plugin/build node_modules/.cache && yarn exec tsc -p tsconfig.build.json && yarn exec tsc -p tsconfig.plugin.json","clean":"yarn exec rimraf dist plugin/build node_modules/.cache","prepare":"rimraf dist plugin/build node_modules/.cache && tsc -p tsconfig.build.json && tsc -p tsconfig.plugin.json","typecheck":"yarn exec tsc -p tsconfig.json","describe:e2e":"node ./e2e/scripts/describe-e2e-setup.mjs","e2e:lane:ios":"node ./e2e/scripts/run-maestro-lane.mjs --platform ios","e2e:ios:smoke":"bash ./e2e/scripts/ios-smoke.sh","e2e:server:test":"yarn exec vitest run test/e2e-server/**/*.test.ts","e2e:lane:android":"node ./e2e/scripts/run-maestro-lane.mjs --platform android","e2e:server:start":"node --import ../node_modules/tsx/dist/loader.mjs ./e2e/scripts/start-scenario-server.ts","e2e:android:smoke":"bash ./e2e/scripts/android-smoke.sh","e2e:scaffold:test":"yarn exec vitest run test/e2e-lanes.test.ts"},"_npmUser":{"name":"choiminseok","email":"cms3718@gmail.com"},"repository":{"url":"git+https://github.com/codemagic-ci-cd/codemagic-patch.git","type":"git","directory":"client"},"_npmVersion":"10.9.4","description":"React Native client SDK for Codemagic Patch — over-the-air JavaScript & asset updates for React Native and Expo apps.","directories":{},"_nodeVersion":"22.22.0","react-native":"./src/index.ts","codegenConfig":{"ios":{"modulesConformingToProtocol":{"RCTTurboModule":["CodemagicPatchModule"]}},"name":"CodemagicPatchSpec","type":"modules","android":{"javaPackageName":"io.codemagic.patch"},"jsSrcsDir":"src"},"installConfig":{"hoistingLimits":"workspaces"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"testing":["./testing.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"expo":"~56.0.9","react":"19.2.4","eslint":"^9.36.0","rimraf":"^6.0.1","vitest":"^3.2.4","typescript":"^5.9.3","react-native":"0.84.1"},"peerDependencies":{"react":">=18","react-native":">=0.73"},"_npmOperationalInternal":{"tmp":"tmp/react-native-patch_0.1.2_1785339393701_0.5869672846813871","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@codemagic/react-native-patch","version":"0.1.3","keywords":["react-native","expo","ota","over-the-air","code-push","hot-update","codemagic","codemagic-patch"],"license":"Apache-2.0","_id":"@codemagic/react-native-patch@0.1.3","maintainers":[{"name":"kimminsik","email":"kmsbernard@gmail.com"},{"name":"tokarev","email":"team@nevercode.io"},{"name":"choiminseok","email":"cms3718@gmail.com"}],"homepage":"https://github.com/codemagic-ci-cd/codemagic-patch/tree/main/client#readme","bugs":{"url":"https://github.com/codemagic-ci-cd/codemagic-patch/issues"},"dist":{"shasum":"ab730a010cdef355efd542b9fc39befb5c46c573","tarball":"https://registry.npmjs.org/@codemagic/react-native-patch/-/react-native-patch-0.1.3.tgz","fileCount":327,"integrity":"sha512-XhMEGHli+vGMd9VcMZYfBfYhqAIQ1sojLEp+Tj7gm/x0MpfrvqcNgLn0UYO4Gt3QADDRNEmQ2CWY7jn4ziSGZg==","signatures":[{"sig":"MEQCIF+RSiw5SiHICbSINLbdQNb1tcFeZVWE8H4jxbYwQgzbAiA58JUemMQy6Sw/RRzSqt1/nYhetT/X+BmmgO1imln9Xg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4853956},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","react-native":"./src/index.ts"},"./testing":{"types":"./testing.ts","default":"./dist/testing.js","react-native":"./testing.ts"},"./package.json":"./package.json","./app.plugin.js":"./app.plugin.js"},"gitHead":"450cb17a216453d3a3121c33a88a2b9e63bafd68","scripts":{"lint":"yarn exec eslint \"src/**/*.ts\" \"test/**/*.ts\" \"e2e/**/*.ts\" \"plugin/**/*.ts\"","test":"yarn exec vitest run test/**/*.test.ts","build":"yarn exec rimraf dist plugin/build node_modules/.cache && yarn exec tsc -p tsconfig.build.json && yarn exec tsc -p tsconfig.plugin.json","clean":"yarn exec rimraf dist plugin/build node_modules/.cache","prepare":"rimraf dist plugin/build node_modules/.cache && tsc -p tsconfig.build.json && tsc -p tsconfig.plugin.json","typecheck":"yarn exec tsc -p tsconfig.json","describe:e2e":"node ./e2e/scripts/describe-e2e-setup.mjs","e2e:lane:ios":"node ./e2e/scripts/run-maestro-lane.mjs --platform ios","e2e:ios:smoke":"bash ./e2e/scripts/ios-smoke.sh","e2e:server:test":"yarn exec vitest run test/e2e-server/**/*.test.ts","e2e:lane:android":"node ./e2e/scripts/run-maestro-lane.mjs --platform android","e2e:server:start":"node --import ../node_modules/tsx/dist/loader.mjs ./e2e/scripts/start-scenario-server.ts","e2e:android:smoke":"bash ./e2e/scripts/android-smoke.sh","e2e:scaffold:test":"yarn exec vitest run test/e2e-lanes.test.ts"},"_npmUser":{"name":"choiminseok","email":"cms3718@gmail.com"},"repository":{"url":"git+https://github.com/codemagic-ci-cd/codemagic-patch.git","type":"git","directory":"client"},"_npmVersion":"11.17.0","description":"React Native client SDK for Codemagic Patch — over-the-air JavaScript & asset updates for React Native and Expo apps.","directories":{},"_nodeVersion":"26.5.0","react-native":"./src/index.ts","codegenConfig":{"ios":{"modulesConformingToProtocol":{"RCTTurboModule":["CodemagicPatchModule"]}},"name":"CodemagicPatchSpec","type":"modules","android":{"javaPackageName":"io.codemagic.patch"},"jsSrcsDir":"src"},"installConfig":{"hoistingLimits":"workspaces"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"testing":["./testing.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"expo":"~56.0.9","react":"19.2.4","eslint":"^9.36.0","rimraf":"^6.0.1","vitest":"^3.2.4","typescript":"^5.9.3","react-native":"0.84.1"},"peerDependencies":{"react":">=18","react-native":">=0.73"},"_npmOperationalInternal":{"tmp":"tmp/react-native-patch_0.1.3_1785341388196_0.12419593160027187","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@codemagic/react-native-patch","version":"0.1.4","keywords":["react-native","expo","ota","over-the-air","code-push","hot-update","codemagic","codemagic-patch"],"license":"Apache-2.0","_id":"@codemagic/react-native-patch@0.1.4","maintainers":[{"name":"kimminsik","email":"kmsbernard@gmail.com"},{"name":"tokarev","email":"team@nevercode.io"},{"name":"choiminseok","email":"cms3718@gmail.com"}],"homepage":"https://github.com/codemagic-ci-cd/codemagic-patch/tree/main/client#readme","bugs":{"url":"https://github.com/codemagic-ci-cd/codemagic-patch/issues"},"dist":{"shasum":"536737941175cb4dfeda2afd84a33141e9098e97","tarball":"https://registry.npmjs.org/@codemagic/react-native-patch/-/react-native-patch-0.1.4.tgz","fileCount":327,"integrity":"sha512-eurkOyzx0llvlfjOtLYhbxf90UJAa2/1OhgrMiux5lURwIJZ92uLKQPz57uxxFWH2D6vQ4goUP2t9JHIGOZsIQ==","signatures":[{"sig":"MEQCIHfk65zVIPzvVFC+GpbiA7KX1x0+G3k3NSslobiP5zzoAiA7fwmRp0rqIR/4oSKu1uL04plKcFecch0AfiZwMkNPgQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4857562},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","react-native":"./src/index.ts"},"./testing":{"types":"./testing.ts","default":"./dist/testing.js","react-native":"./testing.ts"},"./package.json":"./package.json","./app.plugin.js":"./app.plugin.js"},"gitHead":"5e4ae8a1ebe2c28350184532d3e360d505dccb69","scripts":{"lint":"yarn exec eslint \"src/**/*.ts\" \"test/**/*.ts\" \"e2e/**/*.ts\" \"plugin/**/*.ts\"","test":"yarn exec vitest run test/**/*.test.ts","build":"yarn exec rimraf dist plugin/build node_modules/.cache && yarn exec tsc -p tsconfig.build.json && yarn exec tsc -p tsconfig.plugin.json","clean":"yarn exec rimraf dist plugin/build node_modules/.cache","prepare":"rimraf dist plugin/build node_modules/.cache && tsc -p tsconfig.build.json && tsc -p tsconfig.plugin.json","typecheck":"yarn exec tsc -p tsconfig.json","describe:e2e":"node ./e2e/scripts/describe-e2e-setup.mjs","e2e:lane:ios":"node ./e2e/scripts/run-maestro-lane.mjs --platform ios","e2e:ios:smoke":"bash ./e2e/scripts/ios-smoke.sh","e2e:server:test":"yarn exec vitest run test/e2e-server/**/*.test.ts","e2e:lane:android":"node ./e2e/scripts/run-maestro-lane.mjs --platform android","e2e:server:start":"node --import ../node_modules/tsx/dist/loader.mjs ./e2e/scripts/start-scenario-server.ts","e2e:android:smoke":"bash ./e2e/scripts/android-smoke.sh","e2e:scaffold:test":"yarn exec vitest run test/e2e-lanes.test.ts"},"_npmUser":{"name":"kimminsik","email":"kmsbernard@gmail.com"},"repository":{"url":"git+https://github.com/codemagic-ci-cd/codemagic-patch.git","type":"git","directory":"client"},"_npmVersion":"10.8.2","description":"React Native client SDK for Codemagic Patch — over-the-air JavaScript & asset updates for React Native and Expo apps.","directories":{},"_nodeVersion":"20.20.2","react-native":"./src/index.ts","codegenConfig":{"ios":{"modulesConformingToProtocol":{"RCTTurboModule":["CodemagicPatchModule"]}},"name":"CodemagicPatchSpec","type":"modules","android":{"javaPackageName":"io.codemagic.patch"},"jsSrcsDir":"src"},"installConfig":{"hoistingLimits":"workspaces"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"testing":["./testing.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"expo":"~56.0.9","react":"19.2.4","eslint":"^9.36.0","rimraf":"^6.0.1","vitest":"^3.2.4","typescript":"^5.9.3","react-native":"0.84.1"},"peerDependencies":{"react":">=18","react-native":">=0.73"},"_npmOperationalInternal":{"tmp":"tmp/react-native-patch_0.1.4_1785602831028_0.2816548695789234","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@codemagic/react-native-patch","version":"0.1.5","keywords":["react-native","expo","ota","over-the-air","code-push","hot-update","codemagic","codemagic-patch"],"license":"Apache-2.0","_id":"@codemagic/react-native-patch@0.1.5","maintainers":[{"name":"kimminsik","email":"kmsbernard@gmail.com"},{"name":"tokarev","email":"team@nevercode.io"},{"name":"choiminseok","email":"cms3718@gmail.com"}],"homepage":"https://github.com/codemagic-ci-cd/codemagic-patch/tree/main/client#readme","bugs":{"url":"https://github.com/codemagic-ci-cd/codemagic-patch/issues"},"dist":{"shasum":"3f1412a53bce40ada3923db93ab0a2c6becbe921","tarball":"https://registry.npmjs.org/@codemagic/react-native-patch/-/react-native-patch-0.1.5.tgz","fileCount":327,"integrity":"sha512-Mm7ToedY+lIJoI2/pVQ1CPa4VkK+dTB5T5HWC4g2zFTlZNqCBTxuMW84pYR5q9TUgPx5kbuOcFH626azjqoKzg==","signatures":[{"sig":"MEYCIQCVi6r4i4qZs4atLHWKVVWk3OSwVEKmuzt3iViyOSgGWgIhAONlezWgV18CGOU2W6o1h2hHch/I+lskyJbLfPgR252N","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4857792},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","react-native":"./src/index.ts"},"./testing":{"types":"./testing.ts","default":"./dist/testing.js","react-native":"./testing.ts"},"./package.json":"./package.json","./app.plugin.js":"./app.plugin.js"},"gitHead":"1fe39c0b1a4ed87314e57126096331b2c1bbfc03","scripts":{"lint":"yarn exec eslint \"src/**/*.ts\" \"test/**/*.ts\" \"e2e/**/*.ts\" \"plugin/**/*.ts\"","test":"yarn exec vitest run test/**/*.test.ts","build":"yarn exec rimraf dist plugin/build node_modules/.cache && yarn exec tsc -p tsconfig.build.json && yarn exec tsc -p tsconfig.plugin.json","clean":"yarn exec rimraf dist plugin/build node_modules/.cache","prepare":"rimraf dist plugin/build node_modules/.cache && tsc -p tsconfig.build.json && tsc -p tsconfig.plugin.json","typecheck":"yarn exec tsc -p tsconfig.json","describe:e2e":"node ./e2e/scripts/describe-e2e-setup.mjs","e2e:lane:ios":"node ./e2e/scripts/run-maestro-lane.mjs --platform ios","e2e:ios:smoke":"bash ./e2e/scripts/ios-smoke.sh","e2e:server:test":"yarn exec vitest run test/e2e-server/**/*.test.ts","e2e:lane:android":"node ./e2e/scripts/run-maestro-lane.mjs --platform android","e2e:server:start":"node --import ../node_modules/tsx/dist/loader.mjs ./e2e/scripts/start-scenario-server.ts","e2e:android:smoke":"bash ./e2e/scripts/android-smoke.sh","e2e:scaffold:test":"yarn exec vitest run test/e2e-lanes.test.ts"},"_npmUser":{"name":"kimminsik","email":"kmsbernard@gmail.com"},"repository":{"url":"git+https://github.com/codemagic-ci-cd/codemagic-patch.git","type":"git","directory":"client"},"_npmVersion":"10.8.2","description":"React Native client SDK for Codemagic Patch — over-the-air JavaScript & asset updates for React Native and Expo apps.","directories":{},"_nodeVersion":"20.20.2","react-native":"./src/index.ts","codegenConfig":{"ios":{"modulesConformingToProtocol":{"RCTTurboModule":["CodemagicPatchModule"]}},"name":"CodemagicPatchSpec","type":"modules","android":{"javaPackageName":"io.codemagic.patch"},"jsSrcsDir":"src"},"installConfig":{"hoistingLimits":"workspaces"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"testing":["./testing.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"expo":"~56.0.9","react":"19.2.4","eslint":"^9.36.0","rimraf":"^6.0.1","vitest":"^3.2.4","typescript":"^5.9.3","react-native":"0.84.1"},"peerDependencies":{"react":">=18","react-native":">=0.73"},"_npmOperationalInternal":{"tmp":"tmp/react-native-patch_0.1.5_1786506183155_0.6734312889697909","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@codemagic/react-native-patch","version":"0.1.6","keywords":["react-native","expo","ota","over-the-air","code-push","hot-update","codemagic","codemagic-patch"],"license":"Apache-2.0","_id":"@codemagic/react-native-patch@0.1.6","maintainers":[{"name":"kimminsik","email":"kmsbernard@gmail.com"},{"name":"tokarev","email":"team@nevercode.io"},{"name":"choiminseok","email":"cms3718@gmail.com"}],"homepage":"https://github.com/codemagic-ci-cd/codemagic-patch/tree/main/client#readme","bugs":{"url":"https://github.com/codemagic-ci-cd/codemagic-patch/issues"},"dist":{"shasum":"08b9a738caeaecf3e3543fdfa3459066caf599e3","tarball":"https://registry.npmjs.org/@codemagic/react-native-patch/-/react-native-patch-0.1.6.tgz","fileCount":327,"integrity":"sha512-kTc4bqPHuvfrhSVKnJ/xXbrNDAAZTgSD9PFczcTeEedP/JFyRVLaeni1Nd4LeS0dQld4g6vjRS8v6DwVhvaghA==","signatures":[{"sig":"MEUCIQCp8YA/AS9horMu8TB+mSeSnj4QIWNIfIvT9LBtmnKtOAIgQmWZcWl1P3FCFlXAmtxJEOkJ+aT6LCgCGMJd/K4KMQs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4857805},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","react-native":"./src/index.ts"},"./testing":{"types":"./testing.ts","default":"./dist/testing.js","react-native":"./testing.ts"},"./package.json":"./package.json","./app.plugin.js":"./app.plugin.js"},"gitHead":"e5ebe71da496e8d9182e4a6f8626cb87b60a3d6e","scripts":{"lint":"yarn exec eslint \"src/**/*.ts\" \"test/**/*.ts\" \"e2e/**/*.ts\" \"plugin/**/*.ts\"","test":"yarn exec vitest run test/**/*.test.ts","build":"yarn exec rimraf dist plugin/build node_modules/.cache && yarn exec tsc -p tsconfig.build.json && yarn exec tsc -p tsconfig.plugin.json","clean":"yarn exec rimraf dist plugin/build node_modules/.cache","prepare":"rimraf dist plugin/build node_modules/.cache && tsc -p tsconfig.build.json && tsc -p tsconfig.plugin.json","typecheck":"yarn exec tsc -p tsconfig.json","describe:e2e":"node ./e2e/scripts/describe-e2e-setup.mjs","e2e:lane:ios":"node ./e2e/scripts/run-maestro-lane.mjs --platform ios","e2e:ios:smoke":"bash ./e2e/scripts/ios-smoke.sh","e2e:server:test":"yarn exec vitest run test/e2e-server/**/*.test.ts","e2e:lane:android":"node ./e2e/scripts/run-maestro-lane.mjs --platform android","e2e:server:start":"node --import ../node_modules/tsx/dist/loader.mjs ./e2e/scripts/start-scenario-server.ts","e2e:android:smoke":"bash ./e2e/scripts/android-smoke.sh","e2e:scaffold:test":"yarn exec vitest run test/e2e-lanes.test.ts"},"_npmUser":{"name":"kimminsik","email":"kmsbernard@gmail.com"},"repository":{"url":"git+https://github.com/codemagic-ci-cd/codemagic-patch.git","type":"git","directory":"client"},"_npmVersion":"10.8.2","description":"React Native client SDK for Codemagic Patch — over-the-air JavaScript & asset updates for React Native and Expo apps.","directories":{},"_nodeVersion":"20.20.2","react-native":"./src/index.ts","codegenConfig":{"ios":{"modulesConformingToProtocol":{"RCTTurboModule":["CodemagicPatchModule"]}},"name":"CodemagicPatchSpec","type":"modules","android":{"javaPackageName":"io.codemagic.patch"},"jsSrcsDir":"src"},"installConfig":{"hoistingLimits":"workspaces"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"testing":["./testing.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"expo":"~56.0.9","react":"19.2.4","eslint":"^9.36.0","rimraf":"^6.0.1","vitest":"^3.2.4","typescript":"^5.9.3","react-native":"0.84.1"},"peerDependencies":{"react":">=18","react-native":">=0.73"},"_npmOperationalInternal":{"tmp":"tmp/react-native-patch_0.1.6_1786684898643_0.8242096736969626","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@codemagic/react-native-patch","version":"0.2.0","description":"React Native client SDK for Codemagic Patch — over-the-air JavaScript & asset updates for React Native and Expo apps.","keywords":["react-native","expo","ota","over-the-air","code-push","hot-update","codemagic","codemagic-patch"],"license":"Apache-2.0","homepage":"https://github.com/codemagic-ci-cd/codemagic-patch/tree/main/client#readme","repository":{"type":"git","url":"git+https://github.com/codemagic-ci-cd/codemagic-patch.git","directory":"client"},"bugs":{"url":"https://github.com/codemagic-ci-cd/codemagic-patch/issues"},"publishConfig":{"access":"public"},"main":"./dist/index.js","types":"./dist/index.d.ts","react-native":"./src/index.ts","codegenConfig":{"name":"CodemagicPatchSpec","type":"modules","jsSrcsDir":"src","android":{"javaPackageName":"io.codemagic.patch"},"ios":{"modulesConformingToProtocol":{"RCTTurboModule":["CodemagicPatchModule"]}}},"exports":{".":{"react-native":"./src/index.ts","types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"react-native":"./testing.ts","types":"./testing.ts","default":"./dist/testing.js"},"./app.plugin.js":"./app.plugin.js","./package.json":"./package.json"},"typesVersions":{"*":{"testing":["./testing.ts"]}},"peerDependencies":{"react":">=18","react-native":">=0.73"},"installConfig":{"hoistingLimits":"workspaces"},"devDependencies":{"eslint":"^9.36.0","expo":"~56.0.9","react":"19.2.4","react-native":"0.84.1","rimraf":"^6.0.1","typescript":"^5.9.3","vitest":"^3.2.4"},"scripts":{"build":"yarn exec rimraf dist plugin/build node_modules/.cache && yarn exec tsc -p tsconfig.build.json && yarn exec tsc -p tsconfig.plugin.json","prepare":"rimraf dist plugin/build node_modules/.cache && tsc -p tsconfig.build.json && tsc -p tsconfig.plugin.json","clean":"yarn exec rimraf dist plugin/build node_modules/.cache","describe:e2e":"node ./e2e/scripts/describe-e2e-setup.mjs","e2e:scaffold:test":"yarn exec vitest run test/e2e-lanes.test.ts","e2e:server:test":"yarn exec vitest run test/e2e-server/**/*.test.ts","lint":"yarn exec eslint \"src/**/*.ts\" \"test/**/*.ts\" \"e2e/**/*.ts\" \"plugin/**/*.ts\"","test":"yarn exec vitest run test/**/*.test.ts","typecheck":"yarn exec tsc -p tsconfig.json","e2e:ios:smoke":"bash ./e2e/scripts/ios-smoke.sh","e2e:android:smoke":"bash ./e2e/scripts/android-smoke.sh","e2e:lane:ios":"node ./e2e/scripts/run-maestro-lane.mjs --platform ios","e2e:lane:android":"node ./e2e/scripts/run-maestro-lane.mjs --platform android","e2e:server:start":"node --import ../node_modules/tsx/dist/loader.mjs ./e2e/scripts/start-scenario-server.ts"},"_id":"@codemagic/react-native-patch@0.2.0","gitHead":"27cc015236468a90edef8f2a493abd79f9f81ade","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-wtqg1q6RH2Fityu7FNWIHTr7MGrhCkFRX94d1XXUgPw3SrJAaT2kWwPNP2+HVXFkaAioOEx/9CnzvwbMrrSaFw==","shasum":"24f7b0065a60be1c72ecbe328f616ea988b273be","tarball":"https://registry.npmjs.org/@codemagic/react-native-patch/-/react-native-patch-0.2.0.tgz","fileCount":332,"unpackedSize":4863680,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCI+a+kzHKyRL9WjEaNOajtt/pnIjavClRsvYZSHg2EPwIgLq3k43bt2NacH7CB967jfbVkAO1Mac4/agqGyCC+ky4="}]},"_npmUser":{"name":"choiminseok","email":"cms3718@gmail.com"},"directories":{},"maintainers":[{"name":"kimminsik","email":"kmsbernard@gmail.com"},{"name":"tokarev","email":"team@nevercode.io"},{"name":"choiminseok","email":"cms3718@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-native-patch_0.2.0_1787368719697_0.5092950727044385"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-01T00:28:28.587Z","modified":"2026-08-22T03:18:40.037Z","0.1.0":"2026-07-01T00:28:28.991Z","0.1.1":"2026-07-22T05:03:37.190Z","0.1.2":"2026-07-29T15:36:33.916Z","0.1.3":"2026-07-29T16:09:48.434Z","0.1.4":"2026-08-01T16:47:11.272Z","0.1.5":"2026-08-12T03:43:03.385Z","0.1.6":"2026-08-14T05:21:38.849Z","0.2.0":"2026-08-22T03:18:39.890Z"},"bugs":{"url":"https://github.com/codemagic-ci-cd/codemagic-patch/issues"},"license":"Apache-2.0","homepage":"https://github.com/codemagic-ci-cd/codemagic-patch/tree/main/client#readme","keywords":["react-native","expo","ota","over-the-air","code-push","hot-update","codemagic","codemagic-patch"],"repository":{"type":"git","url":"git+https://github.com/codemagic-ci-cd/codemagic-patch.git","directory":"client"},"description":"React Native client SDK for Codemagic Patch — over-the-air JavaScript & asset updates for React Native and Expo apps.","maintainers":[{"name":"kimminsik","email":"kmsbernard@gmail.com"},{"name":"tokarev","email":"team@nevercode.io"},{"name":"choiminseok","email":"cms3718@gmail.com"}],"readme":"# `@codemagic/react-native-patch`\n\nClient SDK for [Codemagic Patch](https://github.com/codemagic-ci-cd/codemagic-patch): a self-hosted CodePush successor for over-the-air updates on React Native and Expo apps. Download, verify, and boot JS/asset bundles on device so you can ship JS changes without a new store binary.\n\nThis package is only the on-device side. You also need a Patch server (self-hosted) and the [`cmpatch` CLI](https://github.com/codemagic-ci-cd/codemagic-patch/tree/main/cli) to publish releases. The monorepo has both, plus a dashboard and a local evaluation stack.\n\n## What you get\n\nFrom the [monorepo](https://github.com/codemagic-ci-cd/codemagic-patch):\n\n- Full stack via Docker Compose (API, worker, Postgres, MinIO, dashboard)\n- Web dashboard with RBAC and release management\n- On-device demo app for trying OTA updates quickly\n\nFrom this SDK:\n\n- Binary patches when available, for smaller downloads (falls back to a full bundle)\n- Signature verification when you configure a public key\n- Automatic rollback if a new package fails before the app reports ready\n- Expo config plugin for prebuild projects, plus bare React Native wiring\n- CodePush-style `sync()`, or step-by-step APIs when you need control\n\n  <img width=\"700\" alt=\"the self-hosted Patch dashboard\" src=\"https://github.com/user-attachments/assets/e48f2c99-78e9-48c0-ae75-5a5278581e7d\" />\n\n## Requirements\n\n- React Native `0.73+` — New Architecture support starts at RN 0.76; RN 0.73–0.75 are supported on the Old (Paper) Architecture only\n- Android `minSdkVersion` 23+ (the library follows the host's `rootProject.ext.minSdkVersion`; without one it builds at 23)\n- Android native build with CMake/JNI support\n- iOS native build with CocoaPods and mixed Swift/ObjC++ compilation\n- Expo SDK 52+ (via the bundled config plugin — see [Expo apps](#expo-apps))\n- **Expo Go is not supported** — the native module is not part of the Expo Go runtime\n\n## Installation\n\n```sh\nnpm install @codemagic/react-native-patch\n# or\nyarn add @codemagic/react-native-patch\n```\n\n`react` (`>=18`) and `react-native` (`>=0.73`) are peer dependencies. On iOS, install the native pod:\n\n```sh\ncd ios && pod install\n```\n## Quick start\n\nConfiguration lives in **native resources** (deployment key, API URL, download base URL, optional public key), not in a JS config object. The Expo plugin writes those for you; bare apps set them in `Info.plist` / `strings.xml` and wire bundle selection.\n\n### Expo (config plugin)\n\n```json\n{\n  \"plugins\": [\n    [\"@codemagic/react-native-patch\", {\n      \"ios\": {\n        \"deploymentKey\": \"<key>\",\n        \"downloadBaseUrl\": \"<url>\",\n        \"apiUrl\": \"<url>\",\n        \"publicKey\": \"<pem>\"\n      },\n      \"android\": {\n        \"deploymentKey\": \"<key>\",\n        \"downloadBaseUrl\": \"<url>\",\n        \"apiUrl\": \"<url>\",\n        \"publicKey\": \"<pem>\"\n      }\n    }]\n  ]\n}\n```\n\nConfigure at least one platform. Every block you provide needs `deploymentKey`, `downloadBaseUrl`, and `apiUrl` (`publicKey` is optional). Then run `expo prebuild`. See [Configuration](#configuration) for where each value comes from.\n\n### Bare React Native\n\nAdd `CodemagicPatchDeploymentKey`, `CodemagicPatchApiUrl`, and `CodemagicPatchDownloadBaseUrl` (optional `CodemagicPatchPublicKey`) to Android `strings.xml` and iOS `Info.plist`, then point RN’s JS bundle path at `CodemagicPatch.getJSBundleFile` / `CodemagicPatch.bundleURL()` so boot order is pending package → current package → embedded bundle. Full snippets are in [Configuration](#configuration) below.\n\n### Call `sync()`\n\n```ts\nimport { sync } from \"@codemagic/react-native-patch\";\n\nconst status = await sync();\n// \"update-installed\" | \"up-to-date\" | \"embedded-revert-applied\"\n// | \"sync-in-progress\" | \"error\"\n```\n\n`sync()` never throws. It checks for an update, downloads and installs when appropriate, and reports app readiness so a bad package can roll back.\n\nFor check / download / install as separate steps, restart timing helpers (`restartApp`, `allowRestart` / `disallowRestart`), or `getRunningBundleUpdateMetadata()` to read which OTA release is running, see the [SDK types](https://github.com/codemagic-ci-cd/codemagic-patch/blob/main/client/src/types.ts).\n\n## Configuration\n\nCodemagic Patch is configured through **native resources**, not a JS API — the deployment key, URLs, public key, and binary version are read natively before the SDK initializes. Provide these values per host app:\n\n| Resource | Required | Meaning |\n| --- | --- | --- |\n| `CodemagicPatchDeploymentKey` | yes | Deployment key for this app/track |\n| `CodemagicPatchApiUrl` | yes | API server origin (the server's `SERVER_URL`), e.g. `https://updates.example.com`. The SDK appends `/v1/...` |\n| `CodemagicPatchDownloadBaseUrl` | yes | Artifact origin (the server's `PUBLIC_BASE_URL`), e.g. `https://storage.example.com/codemagic-patch`. May include a bucket/path prefix; the SDK appends manifest/artifact paths |\n| `CodemagicPatchPublicKey` | no | PEM public key; required only when enforcing client-side signature verification |\n\nThe two URLs point at different systems (API server vs. object storage / CDN), which is why one usually carries a path and the other does not.\n\n**Where the values come from:** the deployment key is the `DEPLOYMENT_KEY` column of `cmpatch deployment list --app <app-name> --format table` (or the deployment's page in the dashboard); the API URL and download base URL are printed by the self-host installer when the server is set up. Use **separate apps — and therefore separate deployment keys — for iOS and Android**.\n\n### Bare React Native\n\n1. **Declare the resources.**\n\n   iOS — `ios/<YourApp>/Info.plist`:\n\n   ```xml\n   <key>CodemagicPatchDeploymentKey</key>\n   <string>ios-staging-deployment-key</string>\n   <key>CodemagicPatchDownloadBaseUrl</key>\n   <string>https://storage.updates.example.com/codemagic-patch</string>\n   <key>CodemagicPatchApiUrl</key>\n   <string>https://updates.example.com</string>\n   <!-- optional, only when enforcing code signing -->\n   <key>CodemagicPatchPublicKey</key>\n   <string>-----BEGIN PUBLIC KEY-----\\n...\\n-----END PUBLIC KEY-----</string>\n   ```\n\n   Android — `android/app/src/main/res/values/strings.xml`:\n\n   ```xml\n   <resources>\n     <string name=\"CodemagicPatchDeploymentKey\" translatable=\"false\">android-staging-deployment-key</string>\n     <string name=\"CodemagicPatchDownloadBaseUrl\" translatable=\"false\">https://storage.updates.example.com/codemagic-patch</string>\n     <string name=\"CodemagicPatchApiUrl\" translatable=\"false\">https://updates.example.com</string>\n     <!-- optional, only when enforcing code signing -->\n     <string name=\"CodemagicPatchPublicKey\" translatable=\"false\">-----BEGIN PUBLIC KEY-----\\n...\\n-----END PUBLIC KEY-----</string>\n   </resources>\n   ```\n\n2. **Wire native bundle selection** before the RN bridge starts, so boot order is **pending package → current package → embedded bundle**.\n\n   Android — feed `CodemagicPatch.getJSBundleFile(applicationContext)` into React Native in `MainApplication`. On RN ≤ 0.81 (`ReactNativeHost`), override `getJSBundleFile()`:\n\n   ```kotlin\n   override fun getJSBundleFile(): String? =\n       CodemagicPatch.getJSBundleFile(applicationContext)\n   ```\n\n   On RN 0.82+ (new-arch `reactHost`), pass it as `jsBundleFilePath`:\n\n   ```kotlin\n   override val reactHost: ReactHost by lazy {\n     getDefaultReactHost(\n       context = applicationContext,\n       packageList = PackageList(this).packages,\n       jsBundleFilePath = CodemagicPatch.getJSBundleFile(applicationContext),\n     )\n   }\n   ```\n\n   iOS — import `CodemagicPatchClient` and override `bundleURL()` / `sourceURL(for:)` in `AppDelegate` with the same selection order. Keep the `DEBUG` branch pointing at Metro so local development keeps working:\n\n   ```swift\n   import CodemagicPatchClient\n\n   class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate {\n     override func sourceURL(for bridge: RCTBridge) -> URL? {\n       self.bundleURL()\n     }\n\n     override func bundleURL() -> URL? {\n   #if DEBUG\n       RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: \"index\")\n   #else\n       CodemagicPatch.bundleURL() ?? Bundle.main.url(forResource: \"main\", withExtension: \"jsbundle\")\n   #endif\n     }\n   }\n   ```\n\n   On RN ≤ 0.76, where the app template still ships an Objective-C++ `AppDelegate.mm`, override `sourceURLForBridge:` with the same selection. The native module is a Swift pod exposed to Objective-C as `@objc(CodemagicPatch)`; its generated `-Swift.h` is not on the host target's header search paths and `@import` is unavailable in ObjC++, so forward-declare the surface you call:\n\n   ```objc\n   // CodemagicPatch is a Swift pod exposed as @objc(CodemagicPatch); forward-declare it —\n   // the implementation links in from the pod's static library.\n   @interface CodemagicPatch : NSObject\n   + (NSURL *_Nullable)bundleURL;\n   @end\n\n   - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge\n   {\n   #if DEBUG\n     return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@\"index\"];\n   #else\n     return [CodemagicPatch bundleURL] ?: [[NSBundle mainBundle] URLForResource:@\"main\" withExtension:@\"jsbundle\"];\n   #endif\n   }\n   ```\n\n   Expected embedded bundle names are `index.android.bundle` (Android) and `main.jsbundle` (iOS). If the SDK cannot determine a non-blank binary version (`versionName` / `CFBundleShortVersionString`), it no-ops and falls back to the embedded bundle.\n\n   > **Debug builds load JS from Metro**, so OTA updates are not picked up there — that is expected, not a wiring problem. To see an update apply, run a release-style build.\n\n3. **Register the native module** for your architecture — the TurboModule (New Architecture) or the bridge module/package (Old Architecture). Autolinking handles this in most apps.\n\n### Expo apps\n\nThe package ships a bundled Expo config plugin (`app.plugin.js`). Add it to `app.json` with per-platform props and run `expo prebuild`:\n\n```json\n{\n  \"plugins\": [\n    [\"@codemagic/react-native-patch\", {\n      \"ios\":     { \"deploymentKey\": \"<key>\", \"downloadBaseUrl\": \"<url>\", \"apiUrl\": \"<url>\", \"publicKey\": \"<pem>\" },\n      \"android\": { \"deploymentKey\": \"<key>\", \"downloadBaseUrl\": \"<url>\", \"apiUrl\": \"<url>\", \"publicKey\": \"<pem>\" }\n    }]\n  ]\n}\n```\n\nThe plugin writes the native resources and wires bundle selection automatically (Configuration steps 1–3). Configure **at least one platform**, and complete every block you provide — `deploymentKey`, `downloadBaseUrl`, and `apiUrl` are all required per block (`publicKey` is optional). The plugin resolves `expo/config-plugins` from your app's own Expo SDK, so there is nothing extra to install; `expo` is not a runtime or peer dependency of this package.\n\n## Usage\n\nThe simplest integration is `sync()`, which checks for an update, downloads it, installs it, and reports app readiness in one call. It never throws — it resolves to a status string.\n\n```ts\nimport { sync } from \"@codemagic/react-native-patch\";\n\nconst status = await sync();\n// \"update-installed\" | \"up-to-date\" | \"embedded-revert-applied\"\n// | \"sync-in-progress\" | \"error\"\n```\n\nFor finer control, drive the steps yourself and call `notifyAppReady()` once the app has started successfully (so the update is not rolled back):\n\n```ts\nimport {\n  checkForUpdate,\n  downloadUpdate,\n  installUpdate,\n  notifyAppReady,\n} from \"@codemagic/react-native-patch\";\n```\n\n`restartApp`, `allowRestart` / `disallowRestart`, and `hydrate` are also exported for controlling reload timing, and `getRunningBundleUpdateMetadata()` reports the running OTA release (`{ label, packageHash, releaseNotes }`, or `null` on the embedded bundle). See the [type definitions](https://github.com/codemagic-ci-cd/codemagic-patch/tree/main/client/src/types.ts) for the full API surface.\n\n## Documentation\n\nFull integration guide, update protocol, and self-hosting instructions live in the [Codemagic Patch repository](https://github.com/codemagic-ci-cd/codemagic-patch).\n\nComing from `react-native-code-push`? The [CodePush migration guide](https://github.com/codemagic-ci-cd/codemagic-patch/blob/main/docs/migrate-from-codepush.md) maps the native config resources, JS APIs, and CLI commands to their Codemagic Patch equivalents.\n\n## License\n\n[Apache-2.0](./LICENSE)\n","readmeFilename":"README.md"}