{"_id":"@exodus/react-native-bundle-loader","_rev":"22-481ec74da6e876df904a48bc2d53b9cc","name":"@exodus/react-native-bundle-loader","dist-tags":{"latest":"0.2.0-exodus.5"},"versions":{"0.2.0-exodus.1":{"name":"@exodus/react-native-bundle-loader","version":"0.2.0-exodus.1","keywords":["react-native","ios","android","bundle","remote","ota","integrity"],"author":{"name":"Exodus Movement, Inc.","email":"hello@exodus.com"},"license":"MIT","_id":"@exodus/react-native-bundle-loader@0.2.0-exodus.1","maintainers":[{"name":"juraex","email":"julio.vi@exodus.io"},{"name":"kevva","email":"kevinmartensson@gmail.com"},{"name":"doguhan","email":"doguhan.gu@exodus.io"},{"name":"janwe","email":"jan.we@exodus.io"},{"name":"ismamz","email":"hola@isma.uy"},{"name":"feri42","email":"feri@feridot.com"},{"name":"jprichardson","email":"jprichardson@gmail.com"},{"name":"farisissa","email":"farisissa8@gmail.com"},{"name":"ryanzim","email":"opensrc@ryanzim.com"},{"name":"headfire","email":"egorvodopyanov@gmail.com"},{"name":"gutenye","email":"ywzhaifei@gmail.com"},{"name":"mosesbot","email":"moses@exodus.io"},{"name":"roccomuso","email":"roccomusolino92@gmail.com"},{"name":"dcastagnoli","email":"daniel@exodus.io"},{"name":"sonaye","email":"ain@abcd.sa"},{"name":"ves","email":"ves@exodus.io"},{"name":"tenaciousmv","email":"mvayngrib@gmail.com"},{"name":"asyakost","email":"asya@exodus.io"},{"name":"bulgakovk","email":"kbulgakov@yahoo.com"},{"name":"chalker","email":"chalkerx@gmail.com"},{"name":"andrejb","email":"andrej-borstnik@hotmail.com"},{"name":"jaydp17","email":"jaydp17@gmail.com"},{"name":"olistic","email":"moliverafreire@gmail.com"},{"name":"joepie91","email":"admin@cryto.net"},{"name":"merlz","email":"john.staker@ymail.com"},{"name":"vbonini","email":"victor@bonini.tech"},{"name":"verohello","email":"veronica.parla@hellohello.is"},{"name":"devopsrobot","email":"devopsrobot@exodus.io"},{"name":"jenish-sojitra","email":"jenish@exodus.io"},{"name":"antohello","email":"antonella@hellohello.is"},{"name":"markoexodus","email":"marko.sa@exodus.io"},{"name":"nachoalvarez","email":"ignacioalvarez92@gmail.com"},{"name":"giovannirco","email":"giovannirco@gmail.com"},{"name":"filipexodus","email":"filip@exodus.io"},{"name":"cryptosgr","email":"sagar@exodus.io"},{"name":"andrescarreon","email":"andres.di@exodus.io"},{"name":"diegomura","email":"diegomuracciole@gmail.com"},{"name":"lanre-mark","email":"lanre.developer@gmail.com"},{"name":"mariosvlad","email":"marios.vladimerou@protonmail.com"},{"name":"federico-po","email":"federico.po@exodus.io"},{"name":"akinncar","email":"akinncar@hotmail.com"},{"name":"fboucquez","email":"fboucquez@gmail.com"},{"name":"lanahizzle","email":"tim.la@exodus.io"},{"name":"kwwood","email":"kevin.w@exodus.io"},{"name":"umito","email":"umitodabasi@gmail.com"},{"name":"joshuabot","email":"joshuabot@exodus.io"},{"name":"iaacek","email":"iaacek@gmail.com"},{"name":"meniem","email":"aly@exodus.io"},{"name":"ralph.ba","email":"ralph.ba@exodus.io"},{"name":"danh.t.vo","email":"danh.vo@exodus.io"},{"name":"voltagebots","email":"okpako.fr@exodus.io"},{"name":"alexandrbbm","email":"alexandr.bbm@gmail.com"},{"name":"sergii_bo","email":"sergii.bo@exodus.io"},{"name":"florianmathieu","email":"florian.ma@exodus.io"},{"name":"rgommezz","email":"hello@raulgomez.io"},{"name":"angelloz","email":"scottloz@protonmail.com"},{"name":"alex.alexandrius","email":"s.pataridze@gmail.com"},{"name":"rec","email":"espinosacurbelo@gmail.com"},{"name":"rg911","email":"xian.f.liu@gmail.com"},{"name":"jamiemaw","email":"jamie@exodus.io"},{"name":"james-gre","email":"james.gre@exodus.io"},{"name":"shehryar6","email":"shehryarshoukat6@gmail.com"},{"name":"geoffreyrousset","email":"geoffrey.ro@exodus.io"},{"name":"clarkexo","email":"clark@exodus.io"},{"name":"tunguyennnnn","email":"tunguyenuni@gmail.com"},{"name":"jschopen","email":"jeremiah.sc@exodus.io"},{"name":"exmatt192051","email":"matt.st@exodus.io"},{"name":"cawfree","email":"hello@cawfree.com"},{"name":"marcos.kichel","email":"marcos.kichel@gmail.com"},{"name":"andrewtoth-exodus","email":"andrew.to@exodus.io"},{"name":"cdotta-exodus","email":"cristian.do@exodus.io"},{"name":"exorich","email":"richard.nw@exodus.io"},{"name":"mmehta-10","email":"mmehta.ten@gmail.com"},{"name":"kryptkeep","email":"julian@exodus.io"},{"name":"633kh4ck","email":"svolsky+npm@xn--zer-2na.net"},{"name":"mbaraniak-exodus","email":"mykhailo.ba@exodus.io"},{"name":"jeehahn","email":"hahnjeong@gmail.com"},{"name":"hasakura","email":"hisashi.as@exodus.io"},{"name":"awesomeniko","email":"awesomeniko@pm.me"},{"name":"davidexodus","email":"david.ku@exodus.io"},{"name":"r4vn","email":"simon.schmell@gmail.com"},{"name":"nantoaqui","email":"valentin.renan@gmail.com"},{"name":"exoleo","email":"leonard.ga@Exodus.io"},{"name":"ale-exo","email":"alessio.li@exodus.io"},{"name":"frankliexodus","email":"haolun.li@exodus.io"},{"name":"bekatd","email":"bekatd@gmail.com"},{"name":"ronaldcrb","email":"alonzo.ronald@gmail.com"},{"name":"muratso","email":"ericarlos23@gmail.com"},{"name":"clintyn","email":"clintyn.un@exodus.io"},{"name":"phil-exodus","email":"philip.wa@exodus.io"},{"name":"exodus-justin.za","email":"justin.za@exodus.io"},{"name":"exo-jason","email":"jason.yon@exodus.io"},{"name":"exodus-neo","email":"agent-neo@exodus.io"},{"name":"guillermo_hh","email":"guillermo@Hellohello.is"},{"name":"cc-exodus","email":"cc.at.exodus@gmail.com"},{"name":"thom-exodus","email":"tom@exodus.io"},{"name":"exopetris","email":"davi.pe@exodus.io"},{"name":"exojo","email":"joshua.sc@exodus.io"},{"name":"guille-exodus","email":"guillermo@exodus.io"},{"name":"ezequieljardim","email":"ezequieljardim@gmail.com"},{"name":"yalomist","email":"yalomist@gmail.com"},{"name":"joshua-rogers-exodus","email":"joshua.ro@exodus.io"},{"name":"vikas027","email":"vikas027@gmail.com"},{"name":"angel_exodus","email":"angel.ca@exodus.io"},{"name":"sripwoud","email":"me@sripwoud.xyz"},{"name":"xogdg","email":"gdg@exodus.com"},{"name":"chrisrichexo","email":"christopher.ri@exodus.io"},{"name":"josuexo","email":"josue@exodus.io"},{"name":"garana-exodus","email":"gonzalo.ar@exodus.io"},{"name":"saravanan7mani","email":"nanosaan7@gmail.com"},{"name":"shailendrakumaromkar","email":"shailendrakumaromkar@gmail.com"},{"name":"josemiguelherreraweb3","email":"josemiguelherrera@protonmail.com"},{"name":"yevhenii-mo-exodus","email":"yevhenii.mo@exodus.io"},{"name":"bewarden","email":"bear.hu@exodus.io"},{"name":"1emu","email":"github@lemu.sh"},{"name":"andyesp","email":"andyespagnolo@gmail.com"},{"name":"dj_exodus","email":"domagoj.je@exodus.io"}],"contributors":[{"url":"original author","name":"Jusbrasil","email":"dev@jusbrasil.com.br"}],"homepage":"https://github.com/ExodusForks/react-native-bundle-loader#readme","bugs":{"url":"https://github.com/ExodusForks/react-native-bundle-loader/issues"},"dist":{"shasum":"81285e6a107904a5bbffb8812c3d2e9b1623eb43","tarball":"https://registry.npmjs.org/@exodus/react-native-bundle-loader/-/react-native-bundle-loader-0.2.0-exodus.1.tgz","fileCount":17,"integrity":"sha512-C8gyfa7QCWWSFpZwUWc0SWsTXevv6iw7fZZlrzYASUj2CCkrRorhN/PQtt6N6W5RiUtPzlbAL8mgnzYf8LQcMg==","signatures":[{"sig":"MEYCIQDIDqsjfNRGCh32vh+7MD0PjnPfSiCga/lzhsgwst+NsQIhAI80YsvcxA3qw+Fv/dPiIo+lZ45P/EDuDhRYWsUiLFXU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50724},"jest":{"preset":"react-native","modulePathIgnorePatterns":["<rootDir>/lib/"]},"main":"lib/commonjs/index","types":"lib/typescript/index.d.ts","module":"lib/module/index","source":"src/index","engines":{"node":">=18.18"},"gitHead":"eebc575b8a60a54a4146f2d4d3d8ff2b954cbdec","scripts":{"lint":"eslint \"**/*.{js,ts,tsx}\"","test":"jest","prepare":"bob build","preflight":"yarn lint && yarn typescript && yarn test --ci --runInBand && yarn verify-pack","typescript":"tsc --noEmit","verify-pack":"rm -rf _pack && mkdir _pack && yarn prepare && npm pack --pack-destination _pack && tar -tzf _pack/*.tgz | LC_ALL=C sort | sed 's|^package/||' | diff -u .npm-tarball-allowlist -"},"_npmUser":{"name":"joshua-rogers-exodus","email":"joshua.ro@exodus.io"},"prettier":{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/ExodusForks/react-native-bundle-loader.git","type":"git"},"_npmVersion":"10.9.2","description":"Loads a remote React Native JS bundle.","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@exodus/bytes":"1.15.0","@exodus/crypto":"1.0.0-rc.34"},"eslintConfig":{"rules":{"prettier/prettier":["error",{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"}]},"extends":["@react-native-community","prettier"]},"eslintIgnore":["node_modules/","lib/"],"react-native":"src/index","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"26.5.3","react":"16.11.0","eslint":"7.11.0","prettier":"2.1.2","typescript":"3.9.7","@types/jest":"26.0.14","@types/react":"16.9.52","react-native":"0.62.2","@types/react-native":"0.62.13","eslint-config-prettier":"6.13.0","eslint-plugin-prettier":"3.1.4","@react-native-community/bob":"0.16.2","@react-native-community/eslint-config":"2.0.0"},"peerDependencies":{"react":">=16.8.0","react-native":">=0.62.0"},"_npmOperationalInternal":{"tmp":"tmp/react-native-bundle-loader_0.2.0-exodus.1_1778258961228_0.2864843414497509","host":"s3://npm-registry-packages-npm-production"},"@react-native-community/bob":{"output":"lib","source":"src","targets":["commonjs","module",["typescript",{"project":"tsconfig.build.json"}]]}},"0.2.0-exodus.2":{"name":"@exodus/react-native-bundle-loader","version":"0.2.0-exodus.2","keywords":["react-native","ios","android","bundle","remote","ota","integrity"],"author":{"name":"Exodus Movement, Inc.","email":"hello@exodus.com"},"license":"MIT","_id":"@exodus/react-native-bundle-loader@0.2.0-exodus.2","maintainers":[{"name":"juraex","email":"julio.vi@exodus.io"},{"name":"kevva","email":"kevinmartensson@gmail.com"},{"name":"doguhan","email":"doguhan.gu@exodus.io"},{"name":"janwe","email":"jan.we@exodus.io"},{"name":"ismamz","email":"hola@isma.uy"},{"name":"feri42","email":"feri@feridot.com"},{"name":"jprichardson","email":"jprichardson@gmail.com"},{"name":"farisissa","email":"farisissa8@gmail.com"},{"name":"ryanzim","email":"opensrc@ryanzim.com"},{"name":"headfire","email":"egorvodopyanov@gmail.com"},{"name":"gutenye","email":"ywzhaifei@gmail.com"},{"name":"mosesbot","email":"moses@exodus.io"},{"name":"roccomuso","email":"roccomusolino92@gmail.com"},{"name":"dcastagnoli","email":"daniel@exodus.io"},{"name":"sonaye","email":"ain@abcd.sa"},{"name":"ves","email":"ves@exodus.io"},{"name":"tenaciousmv","email":"mvayngrib@gmail.com"},{"name":"asyakost","email":"asya@exodus.io"},{"name":"bulgakovk","email":"kbulgakov@yahoo.com"},{"name":"chalker","email":"chalkerx@gmail.com"},{"name":"andrejb","email":"andrej-borstnik@hotmail.com"},{"name":"jaydp17","email":"jaydp17@gmail.com"},{"name":"olistic","email":"moliverafreire@gmail.com"},{"name":"joepie91","email":"admin@cryto.net"},{"name":"merlz","email":"john.staker@ymail.com"},{"name":"vbonini","email":"victor@bonini.tech"},{"name":"verohello","email":"veronica.parla@hellohello.is"},{"name":"devopsrobot","email":"devopsrobot@exodus.io"},{"name":"jenish-sojitra","email":"jenish@exodus.io"},{"name":"antohello","email":"antonella@hellohello.is"},{"name":"markoexodus","email":"marko.sa@exodus.io"},{"name":"nachoalvarez","email":"ignacioalvarez92@gmail.com"},{"name":"giovannirco","email":"giovannirco@gmail.com"},{"name":"filipexodus","email":"filip@exodus.io"},{"name":"cryptosgr","email":"sagar@exodus.io"},{"name":"andrescarreon","email":"andres.di@exodus.io"},{"name":"diegomura","email":"diegomuracciole@gmail.com"},{"name":"lanre-mark","email":"lanre.developer@gmail.com"},{"name":"mariosvlad","email":"marios.vladimerou@protonmail.com"},{"name":"federico-po","email":"federico.po@exodus.io"},{"name":"akinncar","email":"akinncar@hotmail.com"},{"name":"fboucquez","email":"fboucquez@gmail.com"},{"name":"lanahizzle","email":"tim.la@exodus.io"},{"name":"kwwood","email":"kevin.w@exodus.io"},{"name":"umito","email":"umitodabasi@gmail.com"},{"name":"joshuabot","email":"joshuabot@exodus.io"},{"name":"iaacek","email":"iaacek@gmail.com"},{"name":"meniem","email":"aly@exodus.io"},{"name":"ralph.ba","email":"ralph.ba@exodus.io"},{"name":"danh.t.vo","email":"danh.vo@exodus.io"},{"name":"voltagebots","email":"okpako.fr@exodus.io"},{"name":"alexandrbbm","email":"alexandr.bbm@gmail.com"},{"name":"sergii_bo","email":"sergii.bo@exodus.io"},{"name":"florianmathieu","email":"florian.ma@exodus.io"},{"name":"rgommezz","email":"hello@raulgomez.io"},{"name":"angelloz","email":"scottloz@protonmail.com"},{"name":"alex.alexandrius","email":"s.pataridze@gmail.com"},{"name":"rec","email":"espinosacurbelo@gmail.com"},{"name":"rg911","email":"xian.f.liu@gmail.com"},{"name":"jamiemaw","email":"jamie@exodus.io"},{"name":"james-gre","email":"james.gre@exodus.io"},{"name":"shehryar6","email":"shehryarshoukat6@gmail.com"},{"name":"geoffreyrousset","email":"geoffrey.ro@exodus.io"},{"name":"clarkexo","email":"clark@exodus.io"},{"name":"tunguyennnnn","email":"tunguyenuni@gmail.com"},{"name":"jschopen","email":"jeremiah.sc@exodus.io"},{"name":"exmatt192051","email":"matt.st@exodus.io"},{"name":"cawfree","email":"hello@cawfree.com"},{"name":"marcos.kichel","email":"marcos.kichel@gmail.com"},{"name":"andrewtoth-exodus","email":"andrew.to@exodus.io"},{"name":"cdotta-exodus","email":"cristian.do@exodus.io"},{"name":"exorich","email":"richard.nw@exodus.io"},{"name":"mmehta-10","email":"mmehta.ten@gmail.com"},{"name":"kryptkeep","email":"julian@exodus.io"},{"name":"633kh4ck","email":"svolsky+npm@xn--zer-2na.net"},{"name":"mbaraniak-exodus","email":"mykhailo.ba@exodus.io"},{"name":"jeehahn","email":"hahnjeong@gmail.com"},{"name":"hasakura","email":"hisashi.as@exodus.io"},{"name":"awesomeniko","email":"awesomeniko@pm.me"},{"name":"davidexodus","email":"david.ku@exodus.io"},{"name":"r4vn","email":"simon.schmell@gmail.com"},{"name":"nantoaqui","email":"valentin.renan@gmail.com"},{"name":"exoleo","email":"leonard.ga@Exodus.io"},{"name":"ale-exo","email":"alessio.li@exodus.io"},{"name":"frankliexodus","email":"haolun.li@exodus.io"},{"name":"bekatd","email":"bekatd@gmail.com"},{"name":"ronaldcrb","email":"alonzo.ronald@gmail.com"},{"name":"muratso","email":"ericarlos23@gmail.com"},{"name":"clintyn","email":"clintyn.un@exodus.io"},{"name":"phil-exodus","email":"philip.wa@exodus.io"},{"name":"exodus-justin.za","email":"justin.za@exodus.io"},{"name":"exo-jason","email":"jason.yon@exodus.io"},{"name":"exodus-neo","email":"agent-neo@exodus.io"},{"name":"guillermo_hh","email":"guillermo@Hellohello.is"},{"name":"cc-exodus","email":"cc.at.exodus@gmail.com"},{"name":"thom-exodus","email":"tom@exodus.io"},{"name":"exopetris","email":"davi.pe@exodus.io"},{"name":"exojo","email":"joshua.sc@exodus.io"},{"name":"guille-exodus","email":"guillermo@exodus.io"},{"name":"ezequieljardim","email":"ezequieljardim@gmail.com"},{"name":"yalomist","email":"yalomist@gmail.com"},{"name":"joshua-rogers-exodus","email":"joshua.ro@exodus.io"},{"name":"vikas027","email":"vikas027@gmail.com"},{"name":"angel_exodus","email":"angel.ca@exodus.io"},{"name":"sripwoud","email":"me@sripwoud.xyz"},{"name":"xogdg","email":"gdg@exodus.com"},{"name":"chrisrichexo","email":"christopher.ri@exodus.io"},{"name":"josuexo","email":"josue@exodus.io"},{"name":"garana-exodus","email":"gonzalo.ar@exodus.io"},{"name":"saravanan7mani","email":"nanosaan7@gmail.com"},{"name":"shailendrakumaromkar","email":"shailendrakumaromkar@gmail.com"},{"name":"josemiguelherreraweb3","email":"josemiguelherrera@protonmail.com"},{"name":"yevhenii-mo-exodus","email":"yevhenii.mo@exodus.io"},{"name":"bewarden","email":"bear.hu@exodus.io"},{"name":"1emu","email":"github@lemu.sh"},{"name":"andyesp","email":"andyespagnolo@gmail.com"},{"name":"dj_exodus","email":"domagoj.je@exodus.io"}],"contributors":[{"url":"original author","name":"Jusbrasil","email":"dev@jusbrasil.com.br"}],"homepage":"https://github.com/ExodusForks/react-native-bundle-loader#readme","bugs":{"url":"https://github.com/ExodusForks/react-native-bundle-loader/issues"},"dist":{"shasum":"fadc74e1e41f19e5e9dc9f7483957abd4c1666e8","tarball":"https://registry.npmjs.org/@exodus/react-native-bundle-loader/-/react-native-bundle-loader-0.2.0-exodus.2.tgz","fileCount":17,"integrity":"sha512-MWxVLeYHO5jZOE5w/FTXURFJJwrUgMkSu8167+nvXj9nHCruWXD+yEhRUNQJOk805BOnvTyoL2s3HSpPhsKlvg==","signatures":[{"sig":"MEUCIDQY+aHFYcbkJRSTGu5RkS3b44HKmZIG8L2ljAeDYG4VAiEAlCUpPev8Wgx5mkbz94naGb59FjV8Uf21i1h0lP6K3zg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69147},"jest":{"preset":"react-native","modulePathIgnorePatterns":["<rootDir>/lib/"]},"main":"lib/commonjs/index","types":"lib/typescript/index.d.ts","module":"lib/module/index","source":"src/index","engines":{"node":">=18.18"},"gitHead":"e268c984bb658026fe17646ddca7500376c164c5","scripts":{"lint":"eslint \"**/*.{js,ts,tsx}\"","test":"jest","prepare":"bob build","test:ios":"xcodebuild test -project ios/BundleLoader.xcodeproj -scheme BundleLoaderTests -destination 'platform=iOS Simulator,OS=18.4,name=iPhone 16' CODE_SIGNING_ALLOWED=NO -quiet","preflight":"yarn lint && yarn typescript && yarn test --ci --runInBand && yarn test:android && yarn test:ios && yarn verify-pack","typescript":"tsc --noEmit","verify-pack":"rm -rf _pack && mkdir _pack && yarn prepare && npm pack --pack-destination _pack && tar -tzf _pack/*.tgz | LC_ALL=C sort | sed 's|^package/||' | diff -u .npm-tarball-allowlist -","test:android":"cd android && ./gradlew test"},"_npmUser":{"name":"doguhan","email":"doguhan.gu@exodus.io"},"prettier":{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/ExodusForks/react-native-bundle-loader.git","type":"git"},"_npmVersion":"11.6.1","description":"Loads a remote React Native JS bundle.","directories":{},"_nodeVersion":"24.10.0","dependencies":{},"eslintConfig":{"rules":{"prettier/prettier":["error",{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"}]},"extends":["@react-native-community","prettier"]},"eslintIgnore":["node_modules/","lib/"],"react-native":"src/index","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"26.5.3","react":"16.11.0","eslint":"7.11.0","prettier":"2.1.2","typescript":"3.9.7","@types/jest":"26.0.14","@types/react":"16.9.52","react-native":"0.62.2","@types/react-native":"0.62.13","eslint-config-prettier":"6.13.0","eslint-plugin-prettier":"3.1.4","@react-native-community/bob":"0.16.2","@react-native-community/eslint-config":"2.0.0"},"peerDependencies":{"react":">=16.8.0","react-native":">=0.62.0"},"_npmOperationalInternal":{"tmp":"tmp/react-native-bundle-loader_0.2.0-exodus.2_1778860374558_0.4199137450967412","host":"s3://npm-registry-packages-npm-production"},"@react-native-community/bob":{"output":"lib","source":"src","targets":["commonjs","module",["typescript",{"project":"tsconfig.build.json"}]]}},"0.2.0-exodus.3":{"name":"@exodus/react-native-bundle-loader","version":"0.2.0-exodus.3","keywords":["react-native","ios","android","bundle","remote","ota","integrity"],"author":{"name":"Exodus Movement, Inc.","email":"hello@exodus.com"},"license":"MIT","_id":"@exodus/react-native-bundle-loader@0.2.0-exodus.3","maintainers":[{"name":"juraex","email":"julio.vi@exodus.io"},{"name":"kevva","email":"kevinmartensson@gmail.com"},{"name":"doguhan","email":"doguhan.gu@exodus.io"},{"name":"janwe","email":"jan.we@exodus.io"},{"name":"ismamz","email":"hola@isma.uy"},{"name":"feri42","email":"feri@feridot.com"},{"name":"jprichardson","email":"jprichardson@gmail.com"},{"name":"farisissa","email":"farisissa8@gmail.com"},{"name":"ryanzim","email":"opensrc@ryanzim.com"},{"name":"headfire","email":"egorvodopyanov@gmail.com"},{"name":"gutenye","email":"ywzhaifei@gmail.com"},{"name":"mosesbot","email":"moses@exodus.io"},{"name":"roccomuso","email":"roccomusolino92@gmail.com"},{"name":"dcastagnoli","email":"daniel@exodus.io"},{"name":"sonaye","email":"ain@abcd.sa"},{"name":"ves","email":"ves@exodus.io"},{"name":"tenaciousmv","email":"mvayngrib@gmail.com"},{"name":"asyakost","email":"asya@exodus.io"},{"name":"bulgakovk","email":"kbulgakov@yahoo.com"},{"name":"chalker","email":"chalkerx@gmail.com"},{"name":"andrejb","email":"andrej-borstnik@hotmail.com"},{"name":"jaydp17","email":"jaydp17@gmail.com"},{"name":"olistic","email":"moliverafreire@gmail.com"},{"name":"joepie91","email":"admin@cryto.net"},{"name":"merlz","email":"john.staker@ymail.com"},{"name":"vbonini","email":"victor@bonini.tech"},{"name":"verohello","email":"veronica.parla@hellohello.is"},{"name":"devopsrobot","email":"devopsrobot@exodus.io"},{"name":"jenish-sojitra","email":"jenish@exodus.io"},{"name":"antohello","email":"antonella@hellohello.is"},{"name":"markoexodus","email":"marko.sa@exodus.io"},{"name":"nachoalvarez","email":"ignacioalvarez92@gmail.com"},{"name":"giovannirco","email":"giovannirco@gmail.com"},{"name":"filipexodus","email":"filip@exodus.io"},{"name":"cryptosgr","email":"sagar@exodus.io"},{"name":"andrescarreon","email":"andres.di@exodus.io"},{"name":"diegomura","email":"diegomuracciole@gmail.com"},{"name":"lanre-mark","email":"lanre.developer@gmail.com"},{"name":"mariosvlad","email":"marios.vladimerou@protonmail.com"},{"name":"federico-po","email":"federico.po@exodus.io"},{"name":"akinncar","email":"akinncar@hotmail.com"},{"name":"fboucquez","email":"fboucquez@gmail.com"},{"name":"lanahizzle","email":"tim.la@exodus.io"},{"name":"kwwood","email":"kevin.w@exodus.io"},{"name":"umito","email":"umitodabasi@gmail.com"},{"name":"joshuabot","email":"joshuabot@exodus.io"},{"name":"iaacek","email":"iaacek@gmail.com"},{"name":"meniem","email":"aly@exodus.io"},{"name":"ralph.ba","email":"ralph.ba@exodus.io"},{"name":"danh.t.vo","email":"danh.vo@exodus.io"},{"name":"voltagebots","email":"okpako.fr@exodus.io"},{"name":"alexandrbbm","email":"alexandr.bbm@gmail.com"},{"name":"sergii_bo","email":"sergii.bo@exodus.io"},{"name":"florianmathieu","email":"florian.ma@exodus.io"},{"name":"rgommezz","email":"hello@raulgomez.io"},{"name":"angelloz","email":"scottloz@protonmail.com"},{"name":"alex.alexandrius","email":"s.pataridze@gmail.com"},{"name":"rec","email":"espinosacurbelo@gmail.com"},{"name":"rg911","email":"xian.f.liu@gmail.com"},{"name":"jamiemaw","email":"jamie@exodus.io"},{"name":"james-gre","email":"james.gre@exodus.io"},{"name":"shehryar6","email":"shehryarshoukat6@gmail.com"},{"name":"geoffreyrousset","email":"geoffrey.ro@exodus.io"},{"name":"clarkexo","email":"clark@exodus.io"},{"name":"tunguyennnnn","email":"tunguyenuni@gmail.com"},{"name":"jschopen","email":"jeremiah.sc@exodus.io"},{"name":"exmatt192051","email":"matt.st@exodus.io"},{"name":"cawfree","email":"hello@cawfree.com"},{"name":"marcos.kichel","email":"marcos.kichel@gmail.com"},{"name":"andrewtoth-exodus","email":"andrew.to@exodus.io"},{"name":"cdotta-exodus","email":"cristian.do@exodus.io"},{"name":"exorich","email":"richard.nw@exodus.io"},{"name":"mmehta-10","email":"mmehta.ten@gmail.com"},{"name":"kryptkeep","email":"julian@exodus.io"},{"name":"633kh4ck","email":"svolsky+npm@xn--zer-2na.net"},{"name":"mbaraniak-exodus","email":"mykhailo.ba@exodus.io"},{"name":"jeehahn","email":"hahnjeong@gmail.com"},{"name":"hasakura","email":"hisashi.as@exodus.io"},{"name":"awesomeniko","email":"awesomeniko@pm.me"},{"name":"davidexodus","email":"david.ku@exodus.io"},{"name":"r4vn","email":"simon.schmell@gmail.com"},{"name":"nantoaqui","email":"valentin.renan@gmail.com"},{"name":"exoleo","email":"leonard.ga@Exodus.io"},{"name":"ale-exo","email":"alessio.li@exodus.io"},{"name":"bekatd","email":"bekatd@gmail.com"},{"name":"ronaldcrb","email":"alonzo.ronald@gmail.com"},{"name":"muratso","email":"ericarlos23@gmail.com"},{"name":"clintyn","email":"clintyn.un@exodus.io"},{"name":"phil-exodus","email":"philip.wa@exodus.io"},{"name":"exodus-justin.za","email":"justin.za@exodus.io"},{"name":"exo-jason","email":"jason.yon@exodus.io"},{"name":"exodus-neo","email":"agent-neo@exodus.io"},{"name":"guillermo_hh","email":"guillermo@Hellohello.is"},{"name":"cc-exodus","email":"cc.at.exodus@gmail.com"},{"name":"thom-exodus","email":"tom@exodus.io"},{"name":"exopetris","email":"davi.pe@exodus.io"},{"name":"exojo","email":"joshua.sc@exodus.io"},{"name":"arlen-exodus","email":"arlen.ca@exodus.io"},{"name":"guille-exodus","email":"guillermo@exodus.io"},{"name":"ezequieljardim","email":"ezequieljardim@gmail.com"},{"name":"yalomist","email":"yalomist@gmail.com"},{"name":"joshua-rogers-exodus","email":"joshua.ro@exodus.io"},{"name":"vikas027","email":"vikas027@gmail.com"},{"name":"angel_exodus","email":"angel.ca@exodus.io"},{"name":"sripwoud","email":"me@sripwoud.xyz"},{"name":"xogdg","email":"gdg@exodus.com"},{"name":"chrisrichexo","email":"christopher.ri@exodus.io"},{"name":"josuexo","email":"josue@exodus.io"},{"name":"garana-exodus","email":"gonzalo.ar@exodus.io"},{"name":"saravanan7mani","email":"nanosaan7@gmail.com"},{"name":"shailendrakumaromkar","email":"shailendrakumaromkar@gmail.com"},{"name":"josemiguelherreraweb3","email":"josemiguelherrera@protonmail.com"},{"name":"yevhenii-mo-exodus","email":"yevhenii.mo@exodus.io"},{"name":"bewarden","email":"bear.hu@exodus.io"},{"name":"1emu","email":"github@lemu.sh"},{"name":"andyesp","email":"andyespagnolo@gmail.com"},{"name":"dj_exodus","email":"domagoj.je@exodus.io"}],"contributors":[{"url":"original author","name":"Jusbrasil","email":"dev@jusbrasil.com.br"}],"homepage":"https://github.com/ExodusForks/react-native-bundle-loader#readme","bugs":{"url":"https://github.com/ExodusForks/react-native-bundle-loader/issues"},"dist":{"shasum":"fc805e8e13f714d9576c3c4e7688329c95715422","tarball":"https://registry.npmjs.org/@exodus/react-native-bundle-loader/-/react-native-bundle-loader-0.2.0-exodus.3.tgz","fileCount":17,"integrity":"sha512-w3DaALkyCMB6/QueGVDdg6LNWhPnx8K8k3xcGKhuLh+EstyXa/m0ZT/+5TGdqAtnHDcNoYSU7Jx1B4DnMWd+tQ==","signatures":[{"sig":"MEQCIBqVUM5U6JO3QoI+VtHVqbWfHNP330fmzG60CNqTi1iHAiATES0HpF7U/KVTJkKZfO2DTQqTp7HYjL9RPuYSZ6lMjA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69026},"jest":{"preset":"react-native","modulePathIgnorePatterns":["<rootDir>/lib/"]},"main":"lib/commonjs/index","types":"lib/typescript/index.d.ts","module":"lib/module/index","source":"src/index","engines":{"node":">=18.18"},"gitHead":"7ead0e863b7b36dc6dc638de3fa89798c5939bba","scripts":{"lint":"eslint \"**/*.{js,ts,tsx}\"","test":"jest","prepare":"bob build","test:ios":"xcodebuild test -project ios/BundleLoader.xcodeproj -scheme BundleLoaderTests -destination 'platform=iOS Simulator,OS=18.4,name=iPhone 16' CODE_SIGNING_ALLOWED=NO -quiet","preflight":"yarn lint && yarn typescript && yarn test --ci --runInBand && yarn test:android && yarn test:ios && yarn verify-pack","typescript":"tsc --noEmit","verify-pack":"rm -rf _pack && mkdir _pack && yarn prepare && npm pack --pack-destination _pack && tar -tzf _pack/*.tgz | LC_ALL=C sort | sed 's|^package/||' | diff -u .npm-tarball-allowlist -","test:android":"cd android && ./gradlew test"},"_npmUser":{"name":"doguhan","email":"doguhan.gu@exodus.io"},"prettier":{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/ExodusForks/react-native-bundle-loader.git","type":"git"},"_npmVersion":"11.6.1","description":"Loads a remote React Native JS bundle.","directories":{},"_nodeVersion":"24.10.0","dependencies":{},"eslintConfig":{"rules":{"prettier/prettier":["error",{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"}]},"extends":["@react-native-community","prettier"]},"eslintIgnore":["node_modules/","lib/"],"react-native":"src/index","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"26.5.3","react":"16.11.0","eslint":"7.11.0","prettier":"2.1.2","typescript":"3.9.7","@types/jest":"26.0.14","@types/react":"16.9.52","react-native":"0.62.2","@types/react-native":"0.62.13","eslint-config-prettier":"6.13.0","eslint-plugin-prettier":"3.1.4","@react-native-community/bob":"0.16.2","@react-native-community/eslint-config":"2.0.0"},"peerDependencies":{"react":">=16.8.0","react-native":">=0.62.0"},"_npmOperationalInternal":{"tmp":"tmp/react-native-bundle-loader_0.2.0-exodus.3_1780387864555_0.052622951745004753","host":"s3://npm-registry-packages-npm-production"},"@react-native-community/bob":{"output":"lib","source":"src","targets":["commonjs","module",["typescript",{"project":"tsconfig.build.json"}]]}},"0.2.0-exodus.4":{"name":"@exodus/react-native-bundle-loader","version":"0.2.0-exodus.4","keywords":["react-native","ios","android","bundle","remote","ota","integrity"],"author":{"name":"Exodus Movement, Inc.","email":"hello@exodus.com"},"license":"MIT","_id":"@exodus/react-native-bundle-loader@0.2.0-exodus.4","maintainers":[{"name":"juraex","email":"julio.vi@exodus.io"},{"name":"kevva","email":"kevinmartensson@gmail.com"},{"name":"doguhan","email":"doguhan.gu@exodus.io"},{"name":"janwe","email":"jan.we@exodus.io"},{"name":"jprichardson","email":"jprichardson@gmail.com"},{"name":"farisissa","email":"farisissa8@gmail.com"},{"name":"headfire","email":"egorvodopyanov@gmail.com"},{"name":"gutenye","email":"ywzhaifei@gmail.com"},{"name":"mosesbot","email":"moses@exodus.io"},{"name":"dcastagnoli","email":"daniel@exodus.io"},{"name":"sonaye","email":"ain@abcd.sa"},{"name":"tenaciousmv","email":"mvayngrib@gmail.com"},{"name":"asyakost","email":"asya@exodus.io"},{"name":"bulgakovk","email":"kbulgakov@yahoo.com"},{"name":"chalker","email":"chalkerx@gmail.com"},{"name":"andrejb","email":"andrej-borstnik@hotmail.com"},{"name":"jaydp17","email":"jaydp17@gmail.com"},{"name":"olistic","email":"moliverafreire@gmail.com"},{"name":"joepie91","email":"admin@cryto.net"},{"name":"merlz","email":"john.staker@ymail.com"},{"name":"vbonini","email":"victor@bonini.tech"},{"name":"devopsrobot","email":"devopsrobot@exodus.io"},{"name":"jenish-sojitra","email":"jenish@exodus.io"},{"name":"cryptosgr","email":"sagar@exodus.io"},{"name":"diegomura","email":"diegomuracciole@gmail.com"},{"name":"lanre-mark","email":"lanre.developer@gmail.com"},{"name":"federico-po","email":"federico.po@exodus.io"},{"name":"akinncar","email":"akinncar@hotmail.com"},{"name":"fboucquez","email":"fboucquez@gmail.com"},{"name":"lanahizzle","email":"tim.la@exodus.io"},{"name":"kwwood","email":"kevin.w@exodus.io"},{"name":"joshuabot","email":"joshuabot@exodus.io"},{"name":"meniem","email":"aly@exodus.io"},{"name":"alexandrbbm","email":"alexandr.bbm@gmail.com"},{"name":"angelloz","email":"scottloz@protonmail.com"},{"name":"nacho-exodus","email":"nacho@exodus.io"},{"name":"alex.alexandrius","email":"s.pataridze@gmail.com"},{"name":"rec","email":"espinosacurbelo@gmail.com"},{"name":"jamiemaw","email":"jamie@exodus.io"},{"name":"james-gre","email":"james.gre@exodus.io"},{"name":"shehryar6","email":"shehryarshoukat6@gmail.com"},{"name":"clarkexo","email":"clark@exodus.io"},{"name":"tunguyennnnn","email":"tunguyenuni@gmail.com"},{"name":"mikita-hr","email":"mikita.hr@exodus.io"},{"name":"jschopen","email":"jeremiah.sc@exodus.io"},{"name":"marcos.kichel","email":"marcos.kichel@gmail.com"},{"name":"andrewtoth-exodus","email":"andrew.to@exodus.io"},{"name":"kryptkeep","email":"julian@exodus.io"},{"name":"633kh4ck","email":"svolsky+npm@xn--zer-2na.net"},{"name":"mbaraniak-exodus","email":"mykhailo.ba@exodus.io"},{"name":"awesomeniko","email":"awesomeniko@pm.me"},{"name":"r4vn","email":"simon.schmell@gmail.com"},{"name":"muratso","email":"ericarlos23@gmail.com"},{"name":"clintyn","email":"clintyn.un@exodus.io"},{"name":"phil-exodus","email":"philip.wa@exodus.io"},{"name":"exo-jason","email":"jason.yon@exodus.io"},{"name":"exodus-neo","email":"agent-neo@exodus.io"},{"name":"guillermo_hh","email":"guillermo@Hellohello.is"},{"name":"rg911","email":"xian.f.liu@gmail.com"},{"name":"jdmdreamer","email":"peter.th@exodus.io"},{"name":"thom-exodus","email":"tom@exodus.io"},{"name":"arlen-exodus","email":"arlen.ca@exodus.io"},{"name":"yalomist","email":"yalomist@gmail.com"},{"name":"joshua-rogers-exodus","email":"joshua.ro@exodus.io"},{"name":"sripwoud","email":"me@sripwoud.xyz"},{"name":"xogdg","email":"gdg@exodus.com"},{"name":"chrisrichexo","email":"christopher.ri@exodus.io"},{"name":"josuexo","email":"josue@exodus.io"},{"name":"yevhenii-mo-exodus","email":"yevhenii.mo@exodus.io"},{"name":"bewarden","email":"bear.hu@exodus.io"},{"name":"1emu","email":"github@lemu.sh"},{"name":"andyesp","email":"andyespagnolo@gmail.com"},{"name":"dj_exodus","email":"domagoj.je@exodus.io"}],"contributors":[{"url":"original author","name":"Jusbrasil","email":"dev@jusbrasil.com.br"}],"homepage":"https://github.com/ExodusForks/react-native-bundle-loader#readme","bugs":{"url":"https://github.com/ExodusForks/react-native-bundle-loader/issues"},"dist":{"shasum":"3029bad84ab92bba07e447b4ad2134fef1b0eb2c","tarball":"https://registry.npmjs.org/@exodus/react-native-bundle-loader/-/react-native-bundle-loader-0.2.0-exodus.4.tgz","fileCount":17,"integrity":"sha512-D24BWdpdZ5b5c2DmjfIlWfN6wosbBL9ps4t1rNhQSR5mYAylUTHpWRPlHXITFTc+iA87hdfl+XtrGNMQbd6IUg==","signatures":[{"sig":"MEUCIAEOxZ6CQF8ew2oYEnvMMsYqoaph6aLFVZI5HGVjBJAEAiEAzNV9GmCOaPmcsQm+smcani8BormrODkpc/XuqsgFUIo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63852},"jest":{"preset":"react-native","modulePathIgnorePatterns":["<rootDir>/lib/"]},"main":"lib/commonjs/index","types":"lib/typescript/index.d.ts","module":"lib/module/index","source":"src/index","engines":{"node":">=18.18"},"gitHead":"a3e0d3c6b9e20da16c4e156f1045b59889effce1","scripts":{"lint":"eslint \"**/*.{js,ts,tsx}\"","test":"jest","prepare":"bob build","test:ios":"xcodebuild test -project ios/BundleLoader.xcodeproj -scheme BundleLoaderTests -destination 'platform=iOS Simulator,OS=18.4,name=iPhone 16' CODE_SIGNING_ALLOWED=NO -quiet","preflight":"yarn lint && yarn typescript && yarn test --ci --runInBand && yarn test:android && yarn test:ios && yarn verify-pack","typescript":"tsc --noEmit","verify-pack":"rm -rf _pack && mkdir _pack && yarn prepare && npm pack --pack-destination _pack && tar -tzf _pack/*.tgz | LC_ALL=C sort | sed 's|^package/||' | diff -u .npm-tarball-allowlist -","test:android":"cd android && ./gradlew test"},"_npmUser":{"name":"doguhan","email":"doguhan.gu@exodus.io"},"prettier":{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/ExodusForks/react-native-bundle-loader.git","type":"git"},"_npmVersion":"11.6.1","description":"Loads a remote React Native JS bundle.","directories":{},"_nodeVersion":"24.10.0","dependencies":{},"eslintConfig":{"rules":{"prettier/prettier":["error",{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"}]},"extends":["@react-native-community","prettier"]},"eslintIgnore":["node_modules/","lib/"],"react-native":"src/index","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"26.5.3","react":"16.11.0","eslint":"7.11.0","prettier":"2.1.2","typescript":"3.9.7","@types/jest":"26.0.14","@types/react":"16.9.52","react-native":"0.62.2","@types/react-native":"0.62.13","eslint-config-prettier":"6.13.0","eslint-plugin-prettier":"3.1.4","@react-native-community/bob":"0.16.2","@react-native-community/eslint-config":"2.0.0"},"peerDependencies":{"react":">=16.8.0","react-native":">=0.62.0"},"_npmOperationalInternal":{"tmp":"tmp/react-native-bundle-loader_0.2.0-exodus.4_1788266726206_0.44995947667193636","host":"s3://npm-registry-packages-npm-production"},"@react-native-community/bob":{"output":"lib","source":"src","targets":["commonjs","module",["typescript",{"project":"tsconfig.build.json"}]]}},"0.2.0-exodus.5":{"name":"@exodus/react-native-bundle-loader","version":"0.2.0-exodus.5","keywords":["react-native","ios","android","bundle","remote","ota","integrity"],"author":{"name":"Exodus Movement, Inc.","email":"hello@exodus.com"},"license":"MIT","_id":"@exodus/react-native-bundle-loader@0.2.0-exodus.5","maintainers":[{"name":"juraex","email":"julio.vi@exodus.io"},{"name":"kevva","email":"kevinmartensson@gmail.com"},{"name":"doguhan","email":"doguhan.gu@exodus.io"},{"name":"janwe","email":"jan.we@exodus.io"},{"name":"jprichardson","email":"jprichardson@gmail.com"},{"name":"farisissa","email":"farisissa8@gmail.com"},{"name":"headfire","email":"egorvodopyanov@gmail.com"},{"name":"gutenye","email":"ywzhaifei@gmail.com"},{"name":"mosesbot","email":"moses@exodus.io"},{"name":"dcastagnoli","email":"daniel@exodus.io"},{"name":"sonaye","email":"ain@abcd.sa"},{"name":"tenaciousmv","email":"mvayngrib@gmail.com"},{"name":"asyakost","email":"asya@exodus.io"},{"name":"bulgakovk","email":"kbulgakov@yahoo.com"},{"name":"chalker","email":"chalkerx@gmail.com"},{"name":"andrejb","email":"andrej-borstnik@hotmail.com"},{"name":"jaydp17","email":"jaydp17@gmail.com"},{"name":"olistic","email":"moliverafreire@gmail.com"},{"name":"joepie91","email":"admin@cryto.net"},{"name":"merlz","email":"john.staker@ymail.com"},{"name":"vbonini","email":"victor@bonini.tech"},{"name":"devopsrobot","email":"devopsrobot@exodus.io"},{"name":"jenish-sojitra","email":"jenish@exodus.io"},{"name":"cryptosgr","email":"sagar@exodus.io"},{"name":"diegomura","email":"diegomuracciole@gmail.com"},{"name":"lanre-mark","email":"lanre.developer@gmail.com"},{"name":"federico-po","email":"federico.po@exodus.io"},{"name":"akinncar","email":"akinncar@hotmail.com"},{"name":"fboucquez","email":"fboucquez@gmail.com"},{"name":"lanahizzle","email":"tim.la@exodus.io"},{"name":"kwwood","email":"kevin.w@exodus.io"},{"name":"joshuabot","email":"joshuabot@exodus.io"},{"name":"meniem","email":"aly@exodus.io"},{"name":"alexandrbbm","email":"alexandr.bbm@gmail.com"},{"name":"angelloz","email":"scottloz@protonmail.com"},{"name":"nacho-exodus","email":"nacho@exodus.io"},{"name":"alex.alexandrius","email":"s.pataridze@gmail.com"},{"name":"rec","email":"espinosacurbelo@gmail.com"},{"name":"jamiemaw","email":"jamie@exodus.io"},{"name":"james-gre","email":"james.gre@exodus.io"},{"name":"shehryar6","email":"shehryarshoukat6@gmail.com"},{"name":"clarkexo","email":"clark@exodus.io"},{"name":"tunguyennnnn","email":"tunguyenuni@gmail.com"},{"name":"mikita-hr","email":"mikita.hr@exodus.io"},{"name":"jschopen","email":"jeremiah.sc@exodus.io"},{"name":"marcos.kichel","email":"marcos.kichel@gmail.com"},{"name":"andrewtoth-exodus","email":"andrew.to@exodus.io"},{"name":"kryptkeep","email":"julian@exodus.io"},{"name":"633kh4ck","email":"svolsky+npm@xn--zer-2na.net"},{"name":"mbaraniak-exodus","email":"mykhailo.ba@exodus.io"},{"name":"awesomeniko","email":"awesomeniko@pm.me"},{"name":"r4vn","email":"simon.schmell@gmail.com"},{"name":"muratso","email":"ericarlos23@gmail.com"},{"name":"clintyn","email":"clintyn.un@exodus.io"},{"name":"phil-exodus","email":"philip.wa@exodus.io"},{"name":"exo-jason","email":"jason.yon@exodus.io"},{"name":"exodus-neo","email":"agent-neo@exodus.io"},{"name":"guillermo_hh","email":"guillermo@Hellohello.is"},{"name":"rg911","email":"xian.f.liu@gmail.com"},{"name":"jdmdreamer","email":"peter.th@exodus.io"},{"name":"thom-exodus","email":"tom@exodus.io"},{"name":"arlen-exodus","email":"arlen.ca@exodus.io"},{"name":"yalomist","email":"yalomist@gmail.com"},{"name":"joshua-rogers-exodus","email":"joshua.ro@exodus.io"},{"name":"sripwoud","email":"me@sripwoud.xyz"},{"name":"xogdg","email":"gdg@exodus.com"},{"name":"chrisrichexo","email":"christopher.ri@exodus.io"},{"name":"josuexo","email":"josue@exodus.io"},{"name":"yevhenii-mo-exodus","email":"yevhenii.mo@exodus.io"},{"name":"bewarden","email":"bear.hu@exodus.io"},{"name":"1emu","email":"github@lemu.sh"},{"name":"andyesp","email":"andyespagnolo@gmail.com"},{"name":"dj_exodus","email":"domagoj.je@exodus.io"}],"contributors":[{"url":"original author","name":"Jusbrasil","email":"dev@jusbrasil.com.br"}],"homepage":"https://github.com/ExodusForks/react-native-bundle-loader#readme","bugs":{"url":"https://github.com/ExodusForks/react-native-bundle-loader/issues"},"dist":{"shasum":"7198adaeae5ff9f41d9cad4cb899d21270641e67","tarball":"https://registry.npmjs.org/@exodus/react-native-bundle-loader/-/react-native-bundle-loader-0.2.0-exodus.5.tgz","fileCount":17,"integrity":"sha512-ALVmR1Uo0op6/LBE5/kVmlB4TYuKph3flYo88RM12Jib6tmuJHeyD0kaaIxuT/e5BAzLwojbKj7bTC/vhpy+jg==","signatures":[{"sig":"MEUCIEaY3bXU+mVEIfgOXkw+vJmwJZahJfZMnoQpDSfMqhC0AiEAhsLCy8XoJKTksKPX10w79NSE+IOjyBH65vO8hlr3KXE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64381},"jest":{"preset":"react-native","modulePathIgnorePatterns":["<rootDir>/lib/"]},"main":"lib/commonjs/index","types":"lib/typescript/index.d.ts","module":"lib/module/index","source":"src/index","engines":{"node":">=18.18"},"gitHead":"73008f1111f9a5f08d988d969877c3c1adb57885","scripts":{"lint":"eslint \"**/*.{js,ts,tsx}\"","test":"jest","prepare":"bob build","test:ios":"xcodebuild test -project ios/BundleLoader.xcodeproj -scheme BundleLoaderTests -destination 'platform=iOS Simulator,OS=18.4,name=iPhone 16' CODE_SIGNING_ALLOWED=NO -quiet","preflight":"yarn lint && yarn typescript && yarn test --ci --runInBand && yarn test:android && yarn test:ios && yarn verify-pack","typescript":"tsc --noEmit","verify-pack":"rm -rf _pack && mkdir _pack && yarn prepare && npm pack --pack-destination _pack && tar -tzf _pack/*.tgz | LC_ALL=C sort | sed 's|^package/||' | diff -u .npm-tarball-allowlist -","test:android":"cd android && ./gradlew test"},"_npmUser":{"name":"doguhan","email":"doguhan.gu@exodus.io"},"prettier":{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/ExodusForks/react-native-bundle-loader.git","type":"git"},"_npmVersion":"11.6.1","description":"Loads a remote React Native JS bundle.","directories":{},"_nodeVersion":"24.10.0","dependencies":{},"eslintConfig":{"rules":{"prettier/prettier":["error",{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"}]},"extends":["@react-native-community","prettier"]},"eslintIgnore":["node_modules/","lib/"],"react-native":"src/index","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"26.5.3","react":"16.11.0","eslint":"7.11.0","prettier":"2.1.2","typescript":"3.9.7","@types/jest":"26.0.14","@types/react":"16.9.52","react-native":"0.62.2","@types/react-native":"0.62.13","eslint-config-prettier":"6.13.0","eslint-plugin-prettier":"3.1.4","@react-native-community/bob":"0.16.2","@react-native-community/eslint-config":"2.0.0"},"peerDependencies":{"react":">=16.8.0","react-native":">=0.62.0"},"_npmOperationalInternal":{"tmp":"tmp/react-native-bundle-loader_0.2.0-exodus.5_1788441879377_0.5372433198934867","host":"s3://npm-registry-packages-npm-production"},"@react-native-community/bob":{"output":"lib","source":"src","targets":["commonjs","module",["typescript",{"project":"tsconfig.build.json"}]]}}},"time":{"created":"2026-05-08T16:49:21.121Z","modified":"2026-09-25T18:32:55.924Z","0.2.0-exodus.1":"2026-05-08T16:49:21.380Z","0.2.0-exodus.2":"2026-05-15T15:52:54.701Z","0.2.0-exodus.3":"2026-06-02T08:11:04.701Z","0.2.0-exodus.4":"2026-09-01T12:45:26.345Z","0.2.0-exodus.5":"2026-09-03T13:24:39.506Z"},"bugs":{"url":"https://github.com/ExodusForks/react-native-bundle-loader/issues"},"author":{"name":"Exodus Movement, Inc.","email":"hello@exodus.com"},"license":"MIT","homepage":"https://github.com/ExodusForks/react-native-bundle-loader#readme","keywords":["react-native","ios","android","bundle","remote","ota","integrity"],"repository":{"url":"git+https://github.com/ExodusForks/react-native-bundle-loader.git","type":"git"},"description":"Loads a remote React Native JS bundle.","contributors":[{"url":"original author","name":"Jusbrasil","email":"dev@jusbrasil.com.br"}],"maintainers":[{"email":"julio.vi@exodus.io","name":"juraex"},{"email":"kevinmartensson@gmail.com","name":"kevva"},{"email":"doguhan.gu@exodus.io","name":"doguhan"},{"email":"jan.we@exodus.io","name":"janwe"},{"email":"jprichardson@gmail.com","name":"jprichardson"},{"email":"farisissa8@gmail.com","name":"farisissa"},{"email":"egorvodopyanov@gmail.com","name":"headfire"},{"email":"ywzhaifei@gmail.com","name":"gutenye"},{"email":"moses@exodus.io","name":"mosesbot"},{"email":"daniel@exodus.io","name":"dcastagnoli"},{"email":"ain@abcd.sa","name":"sonaye"},{"email":"mvayngrib@gmail.com","name":"tenaciousmv"},{"email":"asya@exodus.io","name":"asyakost"},{"email":"kbulgakov@yahoo.com","name":"bulgakovk"},{"email":"chalkerx@gmail.com","name":"chalker"},{"email":"andrej-borstnik@hotmail.com","name":"andrejb"},{"email":"jaydp17@gmail.com","name":"jaydp17"},{"email":"moliverafreire@gmail.com","name":"olistic"},{"email":"admin@cryto.net","name":"joepie91"},{"email":"john.staker@ymail.com","name":"merlz"},{"email":"victor@bonini.tech","name":"vbonini"},{"email":"devopsrobot@exodus.io","name":"devopsrobot"},{"email":"jenish@exodus.io","name":"jenish-sojitra"},{"email":"sagar@exodus.io","name":"cryptosgr"},{"email":"diegomuracciole@gmail.com","name":"diegomura"},{"email":"lanre.developer@gmail.com","name":"lanre-mark"},{"email":"federico.po@exodus.io","name":"federico-po"},{"email":"akinncar@hotmail.com","name":"akinncar"},{"email":"fboucquez@gmail.com","name":"fboucquez"},{"email":"tim.la@exodus.io","name":"lanahizzle"},{"email":"kevin.w@exodus.io","name":"kwwood"},{"email":"joshuabot@exodus.io","name":"joshuabot"},{"email":"aly@exodus.io","name":"meniem"},{"email":"alexandr.bbm@gmail.com","name":"alexandrbbm"},{"email":"scottloz@protonmail.com","name":"angelloz"},{"email":"nacho@exodus.io","name":"nacho-exodus"},{"email":"s.pataridze@gmail.com","name":"alex.alexandrius"},{"email":"espinosacurbelo@gmail.com","name":"rec"},{"email":"jamie@exodus.io","name":"jamiemaw"},{"email":"james.gre@exodus.io","name":"james-gre"},{"email":"shehryarshoukat6@gmail.com","name":"shehryar6"},{"email":"clark@exodus.io","name":"clarkexo"},{"email":"tunguyenuni@gmail.com","name":"tunguyennnnn"},{"email":"mikita.hr@exodus.io","name":"mikita-hr"},{"email":"jeremiah.sc@exodus.io","name":"jschopen"},{"email":"marcos.kichel@gmail.com","name":"marcos.kichel"},{"email":"andrew.to@exodus.io","name":"andrewtoth-exodus"},{"email":"julian@exodus.io","name":"kryptkeep"},{"email":"svolsky+npm@xn--zer-2na.net","name":"633kh4ck"},{"email":"mykhailo.ba@exodus.io","name":"mbaraniak-exodus"},{"email":"awesomeniko@pm.me","name":"awesomeniko"},{"email":"simon.schmell@gmail.com","name":"r4vn"},{"email":"ericarlos23@gmail.com","name":"muratso"},{"email":"clintyn.un@exodus.io","name":"clintyn"},{"email":"philip.wa@exodus.io","name":"phil-exodus"},{"email":"jason.yon@exodus.io","name":"exo-jason"},{"email":"agent-neo@exodus.io","name":"exodus-neo"},{"email":"richard.nw@exodus.io","name":"exorich"},{"email":"xian.f.liu@gmail.com","name":"rg911"},{"email":"peter.th@exodus.io","name":"jdmdreamer"},{"email":"tom@exodus.io","name":"thom-exodus"},{"email":"ruben@exodus.io","name":"uanl619"},{"email":"arlen.ca@exodus.io","name":"arlen-exodus"},{"email":"yalomist@gmail.com","name":"yalomist"},{"email":"joshua.ro@exodus.io","name":"joshua-rogers-exodus"},{"email":"me@sripwoud.xyz","name":"sripwoud"},{"email":"gdg@exodus.com","name":"xogdg"},{"email":"christopher.ri@exodus.io","name":"chrisrichexo"},{"email":"josue@exodus.io","name":"josuexo"},{"email":"yevhenii.mo@exodus.io","name":"yevhenii-mo-exodus"},{"email":"bear.hu@exodus.io","name":"bewarden"},{"email":"github@lemu.sh","name":"1emu"},{"email":"andyespagnolo@gmail.com","name":"andyesp"},{"email":"domagoj.je@exodus.io","name":"dj_exodus"}],"readme":"# @exodus/react-native-bundle-loader\n\nLoads a remote React Native JS bundle, with optional **hash-pinned integrity verification** before the bridge reloads.\n\n> This is the Exodus security-hardened fork of [`react-native-bundle-loader`](https://www.npmjs.com/package/react-native-bundle-loader)\n> (originally by Jusbrasil; upstream GitHub repo deleted; see [provenance](#provenance) for details).\n\n## Threat model\n\nLoading a remote JS bundle is, by construction, remote code execution inside the host app. **This library is intended for internal/development builds only — do not ship it in store builds without an out-of-band, statically-stripped feature flag.** See `SECURITY.md`.\n\nThe `loadVerified()` API closes the dominant runtime risk: it downloads the bundle natively, hashes the bytes with platform crypto (iOS: `CommonCrypto CC_SHA256`, Android: `MessageDigest SHA-256`), compares the hash to a caller-supplied digest in constant time, and only then loads the verified bytes from app-private storage. Anything that mutates the response between fetch and reload is rejected.\n\n## Installation\n\n```sh\nyarn add @exodus/react-native-bundle-loader\n```\n\niOS:\n\n```sh\ncd ios && pod install\n```\n\nAndroid: requires both Gradle wiring and host app changes — see [Android integration](#android-integration) below.\n\n## Usage\n\n### Verified loading (recommended)\n\n```ts\nimport BundleLoader from '@exodus/react-native-bundle-loader';\n\nawait BundleLoader.loadVerified(\n  'https://bundles.example.com/main.jsbundle',\n  // Lower-case hex sha256, exactly 64 chars\n  '4f1b9c…ec'\n);\n```\n\nBehavior:\n\n- The URL must use the `https:` scheme.\n- The expected sha256 must be a 64-character hex string.\n- Download, SHA-256 hashing, and constant-time comparison all happen in native code. This avoids the Hermes `RangeError` that JS-side `response.arrayBuffer()` causes on large bundles (≥ ~70 MB).\n- On match, the bytes are written to app-private storage and the bundle is loaded (see platform notes below).\n- On mismatch, an error is thrown and the current bundle is left untouched.\n- The remote bundle is active for **one session only**. The next cold start returns to the local bundle — matching the behaviour consumers expect from a developer preview tool.\n\nWorks on iOS and Android.\n\n> The library exposes **only** the verified path. There is no unverified `load()`\n> API: loading a remote bundle without native SHA-256 verification is an\n> unauthenticated remote-code-execution primitive, so it was removed.\n\n## Platform support\n\n| Capability                  | iOS | Android |\n| --------------------------- | --- | ------- |\n| `loadVerified(url, sha256)` | ✅  | ✅      |\n| `runningMode()`             | ✅  | ✅      |\n\n### How bundle loading works\n\n**iOS** downloads and verifies the bundle natively via `NSURLSession` + `CommonCrypto CC_SHA256`, then writes the verified bytes to `NSTemporaryDirectory()` with `NSDataWritingAtomic | NSDataWritingFileProtectionComplete` (nothing is written before verification). It stores that file URL in `NSUserDefaults` under `RNBundleLoaderPendingURLKey` and calls `[bridge reload]`; the host app's `loadSourceForBridge:` reads the pending URL and loads from it, so the bridge's own `bundleURL` — and therefore `SourceCode.scriptURL` — is never mutated, keeping asset resolution correct. This is an in-process reload; under ARC the old bridge (and its Hermes runtime) is freed before the new one allocates, so there is no double-memory peak.\n\n**Android** uses a process restart instead of an in-process bridge swap. The reason: Android's ART garbage collector is non-deterministic. When a new React context is created alongside an existing one, ART does not guarantee the old Hermes runtime's native heap is freed before the new runtime allocates. On real-world bundle sizes (~50 MB of Hermes bytecode) this causes OOM. The process restart avoids the problem entirely by ensuring only one runtime is ever live.\n\nAfter download and hash verification, the module:\n\n1. Downloads to a **per-call unique temp file** (`File.createTempFile` in `Context.getCacheDir()`), verifies the SHA-256, then **atomically promotes** it to `Context.getCacheDir()/verified-bundle.jsbundle` — the canonical path never holds unverified or partial bytes. A unique temp per call (rather than a shared fixed path) means two overlapping loads can never swap each other's file between verify and rename. On a hash mismatch or download error the temp file is deleted and the current bundle is left untouched.\n2. Sets a one-shot flag in `SharedPreferences` (`\"BundleLoader\"` / `\"pending_remote_bundle\"`), using a synchronous `commit()` so the flag survives the imminent process kill.\n3. Restarts the process via `startActivity` + `Process.killProcess`.\n\nOn the next launch, the host app reads the flag, disables Metro (so `ReactInstanceManager` does not query the packager and ignore the file — confirmed necessary by bytecode analysis of RN 0.78), and serves `verified-bundle.jsbundle` as the JS bundle for this session. The flag is consumed on first use so subsequent restarts return to Metro.\n\n## Android integration\n\nBecause Android requires host app changes that cannot be encapsulated in the module itself, the following manual steps are required.\n\n### 1. Gradle wiring\n\n`settings.gradle` — include the subproject conditionally (the module is a `devDependency`; prod CI runs `yarn install --production` and the directory won't exist):\n\n```groovy\ndef bundleLoaderDir = new File(rootProject.projectDir, '../node_modules/@exodus/react-native-bundle-loader/android')\nif (bundleLoaderDir.exists()) {\n    include ':@exodus_react-native-bundle-loader'\n    project(':@exodus_react-native-bundle-loader').projectDir = bundleLoaderDir\n}\n```\n\n`app/build.gradle` — depend only in debug builds:\n\n```groovy\nif (new File(\"$rootDir/../node_modules/@exodus/react-native-bundle-loader/android\").exists()) {\n    debugImplementation project(':@exodus_react-native-bundle-loader')\n}\n```\n\n### 2. Register the package\n\nIn `MainApplication.java`, inside `getPackages()`, add the package via reflection so a missing module (absent in prod CI) doesn't cause a compile-time error:\n\n```java\nif (BuildConfig.DEBUG) {\n    // devDependency absent in prod CI (yarn install --production); reflection avoids a compile-time import\n    try {\n        packages.add((ReactPackage) Class.forName(\"com.reactnativebundleloader.BundleLoaderPackage\")\n                .getDeclaredConstructor().newInstance());\n    } catch (ReflectiveOperationException e) {\n        throw new RuntimeException(e);\n    }\n}\n```\n\n### 3. Hook bundle loading into ReactNativeHost\n\nAdd these three methods to your `ReactNativeHost` anonymous subclass in `MainApplication.java`:\n\n```java\nimport java.io.File;\n\n// ...\n\n@Override\npublic boolean getUseDeveloperSupport() {\n    if (BuildConfig.DEBUG && hasPendingRemoteBundle()) {\n        // Must disable dev support: when enabled and Metro is reachable,\n        // ReactInstanceManager queries the packager and ignores getJSBundleFile().\n        return false;\n    }\n    // No pending bundle — clear the active flag so runningMode() returns LOCAL.\n    getSharedPreferences(\"BundleLoader\", MODE_PRIVATE)\n            .edit().remove(\"active_remote_bundle\").apply();\n    return BuildConfig.DEBUG;\n}\n\n@Override\nprotected String getJSBundleFile() {\n    if (BuildConfig.DEBUG && hasPendingRemoteBundle()) {\n        File cachedBundle = new File(getCacheDir(), \"verified-bundle.jsbundle\");\n        if (cachedBundle.exists()) {\n            // Consume the one-shot latch: next restart goes back to Metro.\n            getSharedPreferences(\"BundleLoader\", MODE_PRIVATE).edit()\n                    .remove(\"pending_remote_bundle\")\n                    .putBoolean(\"active_remote_bundle\", true)\n                    .apply();\n            return cachedBundle.getAbsolutePath();\n        }\n    }\n    return null;\n}\n\nprivate boolean hasPendingRemoteBundle() {\n    return getSharedPreferences(\"BundleLoader\", MODE_PRIVATE)\n            .getBoolean(\"pending_remote_bundle\", false);\n}\n```\n\nThe SharedPreferences keys (`\"BundleLoader\"`, `\"pending_remote_bundle\"`, `\"active_remote_bundle\"`) must match the constants defined in `BundleLoaderModule` (`PREFS_NAME`, `PREFS_PENDING_KEY`, `PREFS_ACTIVE_KEY`).\n\n## Provenance\n\nThis is a fork of `react-native-bundle-loader@0.1.0` originally published by Jusbrasil (2020-10-21, npm publisher `helielson`, commit `ec3d4520`). The upstream GitHub repo at `github.com/jusbrasil/react-native-bundle-loader` was subsequently deleted. The complete original git history is preserved through the v0.1.0 release commit; the Android implementation was contributed by `milad.bagherii@digikala.com` in the `mldb/react-native-bundle-loader` mirror in 2021.\n\n## Security\n\nSee `SECURITY.md` for the threat model, accepted residual risks, and disclosure procedure.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}