{"_id":"@app-swiss-knife/react-native-sdk","_rev":"14-642ab8cca7cd1daaff8df604802e7efe","name":"@app-swiss-knife/react-native-sdk","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@app-swiss-knife/react-native-sdk","version":"0.1.0","keywords":["react-native","sdk","subscriptions","in-app-purchases","revenuecat-compatible"],"license":"MIT","_id":"@app-swiss-knife/react-native-sdk@0.1.0","maintainers":[{"name":"inzeppelin","email":"inzeppelin@gmail.com"}],"homepage":"https://github.com/Remneys/swiss-knife#readme","bugs":{"url":"https://github.com/Remneys/swiss-knife/issues"},"dist":{"shasum":"c61a21442b723e4e26872934a53627888cd945ba","tarball":"https://registry.npmjs.org/@app-swiss-knife/react-native-sdk/-/react-native-sdk-0.1.0.tgz","fileCount":218,"integrity":"sha512-dOFqGgI3/IorG94kynqEXxYloHTf/sSM0opwbWBltrqgzKyfuhQaNfVcGYr58tzewNjvEyf01SWB40kGIgpE+g==","signatures":[{"sig":"MEYCIQCQZOOC8gJR8QdrM8mlFPfUBpac40Klj/WvzYNGOEo5cgIhAJlwaJKCO2IJh5nZUCcq+ubnUCAfZ0kW9lG+U1hGU1Iz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1526356},"main":"./lib/commonjs/index.js","_from":"file:app-swiss-knife-react-native-sdk-0.1.0.tgz","types":"./lib/typescript/commonjs/index.d.ts","module":"./lib/module/index.js","source":"./src/index.ts","exports":{".":{"import":{"types":"./lib/typescript/module/index.d.ts","default":"./lib/module/index.js"},"require":{"types":"./lib/typescript/commonjs/index.d.ts","default":"./lib/commonjs/index.js"},"react-native":"./lib/module/index.js"},"./*":{"import":{"types":"./lib/typescript/module/*.d.ts","default":"./lib/module/*.js"},"require":{"types":"./lib/typescript/commonjs/*.d.ts","default":"./lib/commonjs/*.js"},"react-native":"./lib/module/*.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/vendor-native.mjs && bob build","clean":"node -e \"for (const d of ['lib','ios/vendor','android/vendor']) require('fs').rmSync(d,{recursive:true,force:true})\"","typecheck":"tsc --noEmit","vendor:native":"node scripts/vendor-native.mjs"},"_npmUser":{"name":"inzeppelin","email":"inzeppelin@gmail.com"},"_resolved":"/private/var/folders/36/l5fhpnr1679f03n3gxrll9sc0000gn/T/57e36a741d001e34fd6589f170d19299/app-swiss-knife-react-native-sdk-0.1.0.tgz","_integrity":"sha512-dOFqGgI3/IorG94kynqEXxYloHTf/sSM0opwbWBltrqgzKyfuhQaNfVcGYr58tzewNjvEyf01SWB40kGIgpE+g==","repository":{"url":"git+https://github.com/Remneys/swiss-knife.git","type":"git","directory":"packages/react-native-sdk"},"_npmVersion":"10.9.8","description":"Subscriptions-only React Native SDK for App Swiss Knife — a drop-in replacement for RevenueCat's react-native-purchases public API.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.0.0","@types/react":"~19.2.2","react-native-builder-bob":"^0.43.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","@react-native-async-storage/async-storage":">=1.19.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react-native-sdk_0.1.0_1785928778417_0.6107733692055402","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","exclude":"**/{__tests__/**,__fixtures__/**,__mocks__/**,*.test.ts,*.test.tsx,*.spec.ts,*.spec.tsx,*.d.ts}","targets":[["commonjs",{"esm":true}],["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]}},"0.1.1":{"name":"@app-swiss-knife/react-native-sdk","version":"0.1.1","keywords":["react-native","sdk","subscriptions","in-app-purchases","revenuecat-compatible"],"license":"MIT","_id":"@app-swiss-knife/react-native-sdk@0.1.1","maintainers":[{"name":"inzeppelin","email":"inzeppelin@gmail.com"}],"homepage":"https://github.com/Remneys/swiss-knife#readme","bugs":{"url":"https://github.com/Remneys/swiss-knife/issues"},"dist":{"shasum":"cd3d7e346e80afaf6d8ef513f7c3e0b684e2d419","tarball":"https://registry.npmjs.org/@app-swiss-knife/react-native-sdk/-/react-native-sdk-0.1.1.tgz","fileCount":218,"integrity":"sha512-xQ+FuX021oEFtB/lSgHn4CR32NAux1nxgHal+RToXTD7Ss5/ARo15ZUBIP6JxEkdXkGdKVrHDc4kbDohCJDy1w==","signatures":[{"sig":"MEYCIQDOlbUAC+bfYkIjguIIOPVm9L+u539GWfX3V5+iHt/BSQIhAOGnHFWVymyoQYtzGxRuAaHcCO4LpKRX0HP6LIcfYd4g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1537766},"main":"./lib/commonjs/index.js","_from":"file:app-swiss-knife-react-native-sdk-0.1.1.tgz","types":"./lib/typescript/commonjs/index.d.ts","module":"./lib/module/index.js","source":"./src/index.ts","exports":{".":{"import":{"types":"./lib/typescript/module/index.d.ts","default":"./lib/module/index.js"},"require":{"types":"./lib/typescript/commonjs/index.d.ts","default":"./lib/commonjs/index.js"},"react-native":"./lib/module/index.js"},"./*":{"import":{"types":"./lib/typescript/module/*.d.ts","default":"./lib/module/*.js"},"require":{"types":"./lib/typescript/commonjs/*.d.ts","default":"./lib/commonjs/*.js"},"react-native":"./lib/module/*.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/vendor-native.mjs && bob build","clean":"node -e \"for (const d of ['lib','ios/vendor','android/vendor']) require('fs').rmSync(d,{recursive:true,force:true})\"","typecheck":"tsc --noEmit","vendor:native":"node scripts/vendor-native.mjs"},"_npmUser":{"name":"inzeppelin","email":"inzeppelin@gmail.com"},"_resolved":"/private/var/folders/36/l5fhpnr1679f03n3gxrll9sc0000gn/T/e6ff3761a95aa765648523d7d0b14e84/app-swiss-knife-react-native-sdk-0.1.1.tgz","_integrity":"sha512-xQ+FuX021oEFtB/lSgHn4CR32NAux1nxgHal+RToXTD7Ss5/ARo15ZUBIP6JxEkdXkGdKVrHDc4kbDohCJDy1w==","repository":{"url":"git+https://github.com/Remneys/swiss-knife.git","type":"git","directory":"packages/react-native-sdk"},"_npmVersion":"10.9.8","description":"Subscriptions-only React Native SDK for App Swiss Knife — a drop-in replacement for RevenueCat's react-native-purchases public API.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.0.0","@types/react":"~19.2.2","react-native-builder-bob":"^0.43.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","@react-native-async-storage/async-storage":">=1.19.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react-native-sdk_0.1.1_1786094698302_0.7991829389281144","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","exclude":"**/{__tests__/**,__fixtures__/**,__mocks__/**,*.test.ts,*.test.tsx,*.spec.ts,*.spec.tsx,*.d.ts}","targets":[["commonjs",{"esm":true}],["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]}},"0.2.0":{"name":"@app-swiss-knife/react-native-sdk","version":"0.2.0","keywords":["react-native","sdk","subscriptions","in-app-purchases","revenuecat-compatible"],"license":"MIT","_id":"@app-swiss-knife/react-native-sdk@0.2.0","maintainers":[{"name":"inzeppelin","email":"inzeppelin@gmail.com"}],"homepage":"https://github.com/Remneys/swiss-knife#readme","bugs":{"url":"https://github.com/Remneys/swiss-knife/issues"},"dist":{"shasum":"b0faf3ae292f2bd04f544e4fd974e15bd6d378a6","tarball":"https://registry.npmjs.org/@app-swiss-knife/react-native-sdk/-/react-native-sdk-0.2.0.tgz","fileCount":219,"integrity":"sha512-VtxLwc0CIKuIXNN42zDqA3Dia0trwqiH2gHiFrpRkIKQ9BfVlu/S5s8ISrc4fPlB9g2ctaxqu2nSVEQBXGKAsQ==","signatures":[{"sig":"MEUCIQDmJGO1LK7EGDT0bchp+Kghw3CM+f5g7PvmctQIA6tuuwIgPzoUDCHzoEP+Q10izrqn8JP90iblr0LCsouWtmc0/Ls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1622736},"main":"./lib/commonjs/index.js","_from":"file:app-swiss-knife-react-native-sdk-0.2.0.tgz","types":"./lib/typescript/commonjs/index.d.ts","module":"./lib/module/index.js","source":"./src/index.ts","exports":{".":{"import":{"types":"./lib/typescript/module/index.d.ts","default":"./lib/module/index.js"},"require":{"types":"./lib/typescript/commonjs/index.d.ts","default":"./lib/commonjs/index.js"},"react-native":"./lib/module/index.js"},"./*":{"import":{"types":"./lib/typescript/module/*.d.ts","default":"./lib/module/*.js"},"require":{"types":"./lib/typescript/commonjs/*.d.ts","default":"./lib/commonjs/*.js"},"react-native":"./lib/module/*.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/vendor-native.mjs && bob build","clean":"node -e \"for (const d of ['lib','ios/vendor','android/vendor']) require('fs').rmSync(d,{recursive:true,force:true})\"","typecheck":"tsc --noEmit","vendor:native":"node scripts/vendor-native.mjs"},"_npmUser":{"name":"inzeppelin","email":"inzeppelin@gmail.com"},"_resolved":"/private/var/folders/36/l5fhpnr1679f03n3gxrll9sc0000gn/T/60e24ffab63610e362ece8f9be40eb87/app-swiss-knife-react-native-sdk-0.2.0.tgz","_integrity":"sha512-VtxLwc0CIKuIXNN42zDqA3Dia0trwqiH2gHiFrpRkIKQ9BfVlu/S5s8ISrc4fPlB9g2ctaxqu2nSVEQBXGKAsQ==","repository":{"url":"git+https://github.com/Remneys/swiss-knife.git","type":"git","directory":"packages/react-native-sdk"},"_npmVersion":"10.9.8","description":"Subscriptions-only React Native SDK for App Swiss Knife — a drop-in replacement for RevenueCat's react-native-purchases public API.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.0.0","@types/react":"~19.2.2","react-native-builder-bob":"^0.43.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","@react-native-async-storage/async-storage":">=1.19.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react-native-sdk_0.2.0_1786112751547_0.8425962578342496","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","exclude":"**/{__tests__/**,__fixtures__/**,__mocks__/**,*.test.ts,*.test.tsx,*.spec.ts,*.spec.tsx,*.d.ts}","targets":[["commonjs",{"esm":true}],["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]}},"0.2.1":{"name":"@app-swiss-knife/react-native-sdk","version":"0.2.1","keywords":["react-native","sdk","subscriptions","in-app-purchases","revenuecat-compatible"],"license":"MIT","_id":"@app-swiss-knife/react-native-sdk@0.2.1","maintainers":[{"name":"inzeppelin","email":"inzeppelin@gmail.com"}],"homepage":"https://github.com/Remneys/swiss-knife#readme","bugs":{"url":"https://github.com/Remneys/swiss-knife/issues"},"dist":{"shasum":"e4922df77ac079bf95579d070727aaf40dfea6ee","tarball":"https://registry.npmjs.org/@app-swiss-knife/react-native-sdk/-/react-native-sdk-0.2.1.tgz","fileCount":219,"integrity":"sha512-jQ1jDTA7HJuzlOkfllzuz+0AzHXZi1ITi7RXdCIR4cXQS+xO5vN5ZBZGUo8KaMBTD5TKu0qsC0IK7NKSAsOmNQ==","signatures":[{"sig":"MEQCIGN6VHNySZGzi+28Mt8+oHAC+Jjc8HBCisG3asLFXQeTAiBFKqGSLhrmrn/JYgOBQEfFOBsmynvdMWYu+evxJMun0w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1623739},"main":"./lib/commonjs/index.js","_from":"file:app-swiss-knife-react-native-sdk-0.2.1.tgz","types":"./lib/typescript/commonjs/index.d.ts","module":"./lib/module/index.js","source":"./src/index.ts","exports":{".":{"import":{"types":"./lib/typescript/module/index.d.ts","default":"./lib/module/index.js"},"require":{"types":"./lib/typescript/commonjs/index.d.ts","default":"./lib/commonjs/index.js"},"react-native":"./lib/module/index.js"},"./*":{"import":{"types":"./lib/typescript/module/*.d.ts","default":"./lib/module/*.js"},"require":{"types":"./lib/typescript/commonjs/*.d.ts","default":"./lib/commonjs/*.js"},"react-native":"./lib/module/*.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/vendor-native.mjs && bob build","clean":"node -e \"for (const d of ['lib','ios/vendor','android/vendor']) require('fs').rmSync(d,{recursive:true,force:true})\"","typecheck":"tsc --noEmit","vendor:native":"node scripts/vendor-native.mjs"},"_npmUser":{"name":"inzeppelin","email":"inzeppelin@gmail.com"},"_resolved":"/private/var/folders/36/l5fhpnr1679f03n3gxrll9sc0000gn/T/5c2b28ada3c9a143fbd998f27a6d04f0/app-swiss-knife-react-native-sdk-0.2.1.tgz","_integrity":"sha512-jQ1jDTA7HJuzlOkfllzuz+0AzHXZi1ITi7RXdCIR4cXQS+xO5vN5ZBZGUo8KaMBTD5TKu0qsC0IK7NKSAsOmNQ==","repository":{"url":"git+https://github.com/Remneys/swiss-knife.git","type":"git","directory":"packages/react-native-sdk"},"_npmVersion":"10.9.8","description":"Subscriptions-only React Native SDK for App Swiss Knife — a drop-in replacement for RevenueCat's react-native-purchases public API.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.0.0","@types/react":"~19.2.2","react-native-builder-bob":"^0.43.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","@react-native-async-storage/async-storage":">=1.19.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react-native-sdk_0.2.1_1786364679658_0.3654842434079484","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","exclude":"**/{__tests__/**,__fixtures__/**,__mocks__/**,*.test.ts,*.test.tsx,*.spec.ts,*.spec.tsx,*.d.ts}","targets":[["commonjs",{"esm":true}],["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]}},"0.2.3":{"name":"@app-swiss-knife/react-native-sdk","version":"0.2.3","keywords":["react-native","sdk","subscriptions","in-app-purchases","revenuecat-compatible"],"license":"MIT","_id":"@app-swiss-knife/react-native-sdk@0.2.3","maintainers":[{"name":"inzeppelin","email":"inzeppelin@gmail.com"}],"homepage":"https://github.com/Remneys/swiss-knife#readme","bugs":{"url":"https://github.com/Remneys/swiss-knife/issues"},"dist":{"shasum":"2db162dd4f4caeb6f526b847af734f4d3f0c8fc6","tarball":"https://registry.npmjs.org/@app-swiss-knife/react-native-sdk/-/react-native-sdk-0.2.3.tgz","fileCount":219,"integrity":"sha512-4yFJhr6ViFCPMn3uAsg7fi3Xeum5dVmhbYpvfE+gLluL49UTgTMujZ6iRWV59BxGMVbdUaEyRmIQHlfujASixw==","signatures":[{"sig":"MEUCIQDrZNjjkCnhKSTGvwNKhwRhaAWjBG8/gKW6SrgnzM/IdwIgUmbF8snf6WZimqs+BXXnanNFpyW+b6xELN0KSB6pjU4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1681618},"main":"./lib/commonjs/index.js","_from":"file:app-swiss-knife-react-native-sdk-0.2.3.tgz","types":"./lib/typescript/commonjs/index.d.ts","module":"./lib/module/index.js","source":"./src/index.ts","exports":{".":{"import":{"types":"./lib/typescript/module/index.d.ts","default":"./lib/module/index.js"},"require":{"types":"./lib/typescript/commonjs/index.d.ts","default":"./lib/commonjs/index.js"},"react-native":"./lib/module/index.js"},"./*":{"import":{"types":"./lib/typescript/module/*.d.ts","default":"./lib/module/*.js"},"require":{"types":"./lib/typescript/commonjs/*.d.ts","default":"./lib/commonjs/*.js"},"react-native":"./lib/module/*.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/vendor-native.mjs && bob build","clean":"node -e \"for (const d of ['lib','ios/vendor','android/vendor']) require('fs').rmSync(d,{recursive:true,force:true})\"","typecheck":"tsc --noEmit","vendor:native":"node scripts/vendor-native.mjs"},"_npmUser":{"name":"inzeppelin","email":"inzeppelin@gmail.com"},"_resolved":"/private/var/folders/36/l5fhpnr1679f03n3gxrll9sc0000gn/T/62836f4b2ac9315308efc12c5a1ce767/app-swiss-knife-react-native-sdk-0.2.3.tgz","_integrity":"sha512-4yFJhr6ViFCPMn3uAsg7fi3Xeum5dVmhbYpvfE+gLluL49UTgTMujZ6iRWV59BxGMVbdUaEyRmIQHlfujASixw==","deprecated":"BROKEN on Hermes: app fails to start (TypeError assigning to read-only HermesInternal.enablePromiseRejectionTracker). Use 0.2.4+, or pass CrashReporting.init({ enablePromiseRejectionTracking: false }).","repository":{"url":"git+https://github.com/Remneys/swiss-knife.git","type":"git","directory":"packages/react-native-sdk"},"_npmVersion":"10.9.8","description":"Subscriptions-only React Native SDK for App Swiss Knife — a drop-in replacement for RevenueCat's react-native-purchases public API.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.0.0","@types/react":"~19.2.2","react-native-builder-bob":"^0.43.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","@react-native-async-storage/async-storage":">=1.19.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react-native-sdk_0.2.3_1786377860347_0.8009647511260525","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","exclude":"**/{__tests__/**,__fixtures__/**,__mocks__/**,*.test.ts,*.test.tsx,*.spec.ts,*.spec.tsx,*.d.ts}","targets":[["commonjs",{"esm":true}],["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]}},"0.2.4":{"name":"@app-swiss-knife/react-native-sdk","version":"0.2.4","keywords":["react-native","sdk","subscriptions","in-app-purchases","revenuecat-compatible"],"license":"MIT","_id":"@app-swiss-knife/react-native-sdk@0.2.4","maintainers":[{"name":"inzeppelin","email":"inzeppelin@gmail.com"}],"homepage":"https://github.com/Remneys/swiss-knife#readme","bugs":{"url":"https://github.com/Remneys/swiss-knife/issues"},"dist":{"shasum":"1e771d3b5e07b670c0e14d0433bfb77dd3e1a52a","tarball":"https://registry.npmjs.org/@app-swiss-knife/react-native-sdk/-/react-native-sdk-0.2.4.tgz","fileCount":219,"integrity":"sha512-emPaAay5nTIMiWdBcEo6BWZt3YqyxEkOS6W4ShEySNcrDZhirJFlD03OuLvxchfIVwYI4ikvMds4s4z42Ol9lQ==","signatures":[{"sig":"MEYCIQCtx0Iu+W6tY02qbYKEa7cVjgn15gBWoVowT3vdg6CsGQIhAIsB6D53wFIXgTzSslnOtqtCHwbcXmXj0XmJUwnFZOoS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1697822},"main":"./lib/commonjs/index.js","_from":"file:app-swiss-knife-react-native-sdk-0.2.4.tgz","types":"./lib/typescript/commonjs/index.d.ts","module":"./lib/module/index.js","source":"./src/index.ts","exports":{".":{"import":{"types":"./lib/typescript/module/index.d.ts","default":"./lib/module/index.js"},"require":{"types":"./lib/typescript/commonjs/index.d.ts","default":"./lib/commonjs/index.js"},"react-native":"./lib/module/index.js"},"./*":{"import":{"types":"./lib/typescript/module/*.d.ts","default":"./lib/module/*.js"},"require":{"types":"./lib/typescript/commonjs/*.d.ts","default":"./lib/commonjs/*.js"},"react-native":"./lib/module/*.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/vendor-native.mjs && bob build","clean":"node -e \"for (const d of ['lib','ios/vendor','android/vendor']) require('fs').rmSync(d,{recursive:true,force:true})\"","typecheck":"tsc --noEmit","vendor:native":"node scripts/vendor-native.mjs"},"_npmUser":{"name":"inzeppelin","email":"inzeppelin@gmail.com"},"_resolved":"/private/var/folders/36/l5fhpnr1679f03n3gxrll9sc0000gn/T/11e50e1c23f0f3ab08ada2b7eedd6e85/app-swiss-knife-react-native-sdk-0.2.4.tgz","_integrity":"sha512-emPaAay5nTIMiWdBcEo6BWZt3YqyxEkOS6W4ShEySNcrDZhirJFlD03OuLvxchfIVwYI4ikvMds4s4z42Ol9lQ==","repository":{"url":"git+https://github.com/Remneys/swiss-knife.git","type":"git","directory":"packages/react-native-sdk"},"_npmVersion":"10.9.8","description":"Subscriptions-only React Native SDK for App Swiss Knife — a drop-in replacement for RevenueCat's react-native-purchases public API.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.0.0","@types/react":"~19.2.2","react-native-builder-bob":"^0.43.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","@react-native-async-storage/async-storage":">=1.19.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react-native-sdk_0.2.4_1786462251903_0.05785199487988635","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","exclude":"**/{__tests__/**,__fixtures__/**,__mocks__/**,*.test.ts,*.test.tsx,*.spec.ts,*.spec.tsx,*.d.ts}","targets":[["commonjs",{"esm":true}],["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]}},"0.2.5":{"name":"@app-swiss-knife/react-native-sdk","version":"0.2.5","keywords":["react-native","sdk","subscriptions","in-app-purchases","revenuecat-compatible"],"license":"MIT","_id":"@app-swiss-knife/react-native-sdk@0.2.5","maintainers":[{"name":"inzeppelin","email":"inzeppelin@gmail.com"}],"homepage":"https://github.com/Remneys/swiss-knife#readme","bugs":{"url":"https://github.com/Remneys/swiss-knife/issues"},"dist":{"shasum":"6a5c8bc73a843042756b4b81aebecda23fdb7875","tarball":"https://registry.npmjs.org/@app-swiss-knife/react-native-sdk/-/react-native-sdk-0.2.5.tgz","fileCount":219,"integrity":"sha512-6aKNHSkVJs8RGfJaPcmrSx3RPQ1I4vvVqnGXhVtu5cP9jx5iMU20bzYInPi0Xczvk+leBhyOVewTF/pQv/amzQ==","signatures":[{"sig":"MEUCIQDl8LjIQPM7C3KjK3PHNd93yFMnjWrolcMFHhSfuM9jDgIgVkO/VX3IOwztR7zaRckhDcyF+teX6wWWeyqv3UpIdQs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1760319},"main":"./lib/commonjs/index.js","_from":"file:app-swiss-knife-react-native-sdk-0.2.5.tgz","types":"./lib/typescript/commonjs/index.d.ts","module":"./lib/module/index.js","source":"./src/index.ts","exports":{".":{"import":{"types":"./lib/typescript/module/index.d.ts","default":"./lib/module/index.js"},"require":{"types":"./lib/typescript/commonjs/index.d.ts","default":"./lib/commonjs/index.js"},"react-native":"./lib/module/index.js"},"./*":{"import":{"types":"./lib/typescript/module/*.d.ts","default":"./lib/module/*.js"},"require":{"types":"./lib/typescript/commonjs/*.d.ts","default":"./lib/commonjs/*.js"},"react-native":"./lib/module/*.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/vendor-native.mjs && bob build","clean":"node -e \"for (const d of ['lib','ios/vendor','android/vendor']) require('fs').rmSync(d,{recursive:true,force:true})\"","typecheck":"tsc --noEmit","check:hermes":"node scripts/hermes-boot-check.mjs","vendor:native":"node scripts/vendor-native.mjs"},"_npmUser":{"name":"inzeppelin","email":"inzeppelin@gmail.com"},"_resolved":"/private/var/folders/36/l5fhpnr1679f03n3gxrll9sc0000gn/T/fcb6e782acd63497d2f1611134f54e9a/app-swiss-knife-react-native-sdk-0.2.5.tgz","_integrity":"sha512-6aKNHSkVJs8RGfJaPcmrSx3RPQ1I4vvVqnGXhVtu5cP9jx5iMU20bzYInPi0Xczvk+leBhyOVewTF/pQv/amzQ==","repository":{"url":"git+https://github.com/Remneys/swiss-knife.git","type":"git","directory":"packages/react-native-sdk"},"_npmVersion":"10.9.8","description":"Subscriptions-only React Native SDK for App Swiss Knife — a drop-in replacement for RevenueCat's react-native-purchases public API.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.0.0","@types/react":"~19.2.2","react-native-builder-bob":"^0.43.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","@react-native-async-storage/async-storage":">=1.19.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react-native-sdk_0.2.5_1786462633648_0.3048254880326746","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","exclude":"**/{__tests__/**,__fixtures__/**,__mocks__/**,*.test.ts,*.test.tsx,*.spec.ts,*.spec.tsx,*.d.ts}","targets":[["commonjs",{"esm":true}],["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]}},"0.2.7":{"name":"@app-swiss-knife/react-native-sdk","version":"0.2.7","keywords":["react-native","sdk","subscriptions","in-app-purchases","revenuecat-compatible"],"license":"MIT","_id":"@app-swiss-knife/react-native-sdk@0.2.7","maintainers":[{"name":"inzeppelin","email":"inzeppelin@gmail.com"}],"homepage":"https://github.com/Remneys/swiss-knife#readme","bugs":{"url":"https://github.com/Remneys/swiss-knife/issues"},"dist":{"shasum":"83d36827e3c2301503057ab64d97ece6d433ab99","tarball":"https://registry.npmjs.org/@app-swiss-knife/react-native-sdk/-/react-native-sdk-0.2.7.tgz","fileCount":219,"integrity":"sha512-dfVoIhYnAYhCsjwEgRZexCEvPu98hQzVHFVE/rJ+NCZ1HScnJyblMgG8yVoA+WdMibujLpJBANsV9RZXg1hnqw==","signatures":[{"sig":"MEQCIFWVjsf1fnBQXtS1QMU5cxTtTltRUPAxlMG8CDd88fZFAiBTpPtdYbsbfMduTsSOnh5qB18c66EYzocvlWfd8cdruw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1797934},"main":"./lib/commonjs/index.js","_from":"file:app-swiss-knife-react-native-sdk-0.2.7.tgz","types":"./lib/typescript/commonjs/index.d.ts","module":"./lib/module/index.js","source":"./src/index.ts","exports":{".":{"import":{"types":"./lib/typescript/module/index.d.ts","default":"./lib/module/index.js"},"require":{"types":"./lib/typescript/commonjs/index.d.ts","default":"./lib/commonjs/index.js"},"react-native":"./lib/module/index.js"},"./*":{"import":{"types":"./lib/typescript/module/*.d.ts","default":"./lib/module/*.js"},"require":{"types":"./lib/typescript/commonjs/*.d.ts","default":"./lib/commonjs/*.js"},"react-native":"./lib/module/*.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/vendor-native.mjs && bob build","clean":"node -e \"for (const d of ['lib','ios/vendor','android/vendor']) require('fs').rmSync(d,{recursive:true,force:true})\"","typecheck":"tsc --noEmit","check:hermes":"node scripts/hermes-boot-check.mjs","vendor:native":"node scripts/vendor-native.mjs"},"_npmUser":{"name":"inzeppelin","email":"inzeppelin@gmail.com"},"_resolved":"/private/var/folders/36/l5fhpnr1679f03n3gxrll9sc0000gn/T/f26ff9de31dfce2f0eaa94e7d423db7f/app-swiss-knife-react-native-sdk-0.2.7.tgz","_integrity":"sha512-dfVoIhYnAYhCsjwEgRZexCEvPu98hQzVHFVE/rJ+NCZ1HScnJyblMgG8yVoA+WdMibujLpJBANsV9RZXg1hnqw==","repository":{"url":"git+https://github.com/Remneys/swiss-knife.git","type":"git","directory":"packages/react-native-sdk"},"_npmVersion":"10.9.8","description":"Subscriptions-only React Native SDK for App Swiss Knife — a drop-in replacement for RevenueCat's react-native-purchases public API.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.0.0","@types/react":"~19.2.2","react-native-builder-bob":"^0.43.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","@react-native-async-storage/async-storage":">=1.19.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react-native-sdk_0.2.7_1786467297807_0.6417226158007097","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","exclude":"**/{__tests__/**,__fixtures__/**,__mocks__/**,*.test.ts,*.test.tsx,*.spec.ts,*.spec.tsx,*.d.ts}","targets":[["commonjs",{"esm":true}],["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]}},"0.3.0":{"name":"@app-swiss-knife/react-native-sdk","version":"0.3.0","keywords":["react-native","sdk","subscriptions","in-app-purchases","revenuecat-compatible"],"license":"MIT","_id":"@app-swiss-knife/react-native-sdk@0.3.0","maintainers":[{"name":"inzeppelin","email":"inzeppelin@gmail.com"}],"homepage":"https://github.com/Remneys/swiss-knife#readme","bugs":{"url":"https://github.com/Remneys/swiss-knife/issues"},"dist":{"shasum":"27f8eda244a11876a8951a2cba080501105b8a2b","tarball":"https://registry.npmjs.org/@app-swiss-knife/react-native-sdk/-/react-native-sdk-0.3.0.tgz","fileCount":246,"integrity":"sha512-l6EYPklHfKhY6dFt5Mkes4CT23S1XjD7x5MQNyvt4RLKIFcisYORSznyOeWzz2WTuYB8Dv36QSw/WcQL2n3f2g==","signatures":[{"sig":"MEQCIE2slh59Mm5b3QLYuFvnskdx7aYG0OKsRVgAPjy9TjfiAiBDChetEOYQszTwOPc4EafjAC8N7aSrjCd/r3KjZgSOWA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1897394},"main":"./lib/commonjs/index.js","_from":"file:app-swiss-knife-react-native-sdk-0.3.0.tgz","types":"./lib/typescript/commonjs/index.d.ts","module":"./lib/module/index.js","source":"./src/index.ts","exports":{".":{"import":{"types":"./lib/typescript/module/index.d.ts","default":"./lib/module/index.js"},"require":{"types":"./lib/typescript/commonjs/index.d.ts","default":"./lib/commonjs/index.js"},"react-native":"./lib/module/index.js"},"./*":{"import":{"types":"./lib/typescript/module/*.d.ts","default":"./lib/module/*.js"},"require":{"types":"./lib/typescript/commonjs/*.d.ts","default":"./lib/commonjs/*.js"},"react-native":"./lib/module/*.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/vendor-native.mjs && bob build","clean":"node -e \"for (const d of ['lib','ios/vendor','android/vendor']) require('fs').rmSync(d,{recursive:true,force:true})\"","typecheck":"tsc --noEmit","check:hermes":"node scripts/hermes-boot-check.mjs","vendor:native":"node scripts/vendor-native.mjs"},"_npmUser":{"name":"inzeppelin","email":"inzeppelin@gmail.com"},"_resolved":"/private/var/folders/36/l5fhpnr1679f03n3gxrll9sc0000gn/T/0cea47e338ca07f9459df7011bf67145/app-swiss-knife-react-native-sdk-0.3.0.tgz","_integrity":"sha512-l6EYPklHfKhY6dFt5Mkes4CT23S1XjD7x5MQNyvt4RLKIFcisYORSznyOeWzz2WTuYB8Dv36QSw/WcQL2n3f2g==","repository":{"url":"git+https://github.com/Remneys/swiss-knife.git","type":"git","directory":"packages/react-native-sdk"},"_npmVersion":"10.9.8","description":"Subscriptions-only React Native SDK for App Swiss Knife — a drop-in replacement for RevenueCat's react-native-purchases public API.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.0.0","@types/react":"~19.2.2","react-native-builder-bob":"^0.43.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","@react-native-async-storage/async-storage":">=1.19.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react-native-sdk_0.3.0_1786529555751_0.2481148596435805","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","exclude":"**/{__tests__/**,__fixtures__/**,__mocks__/**,*.test.ts,*.test.tsx,*.spec.ts,*.spec.tsx,*.d.ts}","targets":[["commonjs",{"esm":true}],["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]}},"0.3.1":{"name":"@app-swiss-knife/react-native-sdk","version":"0.3.1","keywords":["react-native","sdk","subscriptions","in-app-purchases","revenuecat-compatible"],"license":"MIT","_id":"@app-swiss-knife/react-native-sdk@0.3.1","maintainers":[{"name":"inzeppelin","email":"inzeppelin@gmail.com"}],"homepage":"https://github.com/Remneys/swiss-knife#readme","bugs":{"url":"https://github.com/Remneys/swiss-knife/issues"},"dist":{"shasum":"55f40c46bd23a7893831c038b57f61db87ddb526","tarball":"https://registry.npmjs.org/@app-swiss-knife/react-native-sdk/-/react-native-sdk-0.3.1.tgz","fileCount":246,"integrity":"sha512-1EP1hq1OHeS2JZcjOg99eSmopSycjf3DSFLUMatFoYF7so11vAya5KGBuGq5ldlfsvmtIzd83fQUZZzyqla8RA==","signatures":[{"sig":"MEUCIFrW65tg6twIJxuc3w4f6opAfQlY0Q4KhF/wHQ0eYG8WAiEAtAgj+fahUzHwyfNjJa7F/eI93ff6p1dW6w0h8esFNzU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1902068},"main":"./lib/commonjs/index.js","_from":"file:app-swiss-knife-react-native-sdk-0.3.1.tgz","types":"./lib/typescript/commonjs/index.d.ts","module":"./lib/module/index.js","source":"./src/index.ts","exports":{".":{"import":{"types":"./lib/typescript/module/index.d.ts","default":"./lib/module/index.js"},"require":{"types":"./lib/typescript/commonjs/index.d.ts","default":"./lib/commonjs/index.js"},"react-native":"./lib/module/index.js"},"./*":{"import":{"types":"./lib/typescript/module/*.d.ts","default":"./lib/module/*.js"},"require":{"types":"./lib/typescript/commonjs/*.d.ts","default":"./lib/commonjs/*.js"},"react-native":"./lib/module/*.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/vendor-native.mjs && bob build","clean":"node -e \"for (const d of ['lib','ios/vendor','android/vendor']) require('fs').rmSync(d,{recursive:true,force:true})\"","typecheck":"tsc --noEmit","check:hermes":"node scripts/hermes-boot-check.mjs","vendor:native":"node scripts/vendor-native.mjs"},"_npmUser":{"name":"inzeppelin","email":"inzeppelin@gmail.com"},"_resolved":"/private/var/folders/36/l5fhpnr1679f03n3gxrll9sc0000gn/T/65717e951324217eed34077fe497398d/app-swiss-knife-react-native-sdk-0.3.1.tgz","_integrity":"sha512-1EP1hq1OHeS2JZcjOg99eSmopSycjf3DSFLUMatFoYF7so11vAya5KGBuGq5ldlfsvmtIzd83fQUZZzyqla8RA==","repository":{"url":"git+https://github.com/Remneys/swiss-knife.git","type":"git","directory":"packages/react-native-sdk"},"_npmVersion":"10.9.8","description":"Subscriptions-only React Native SDK for App Swiss Knife — a drop-in replacement for RevenueCat's react-native-purchases public API.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.0.0","@types/react":"~19.2.2","react-native-builder-bob":"^0.43.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","@react-native-async-storage/async-storage":">=1.19.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react-native-sdk_0.3.1_1786541556469_0.9854518689341036","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","exclude":"**/{__tests__/**,__fixtures__/**,__mocks__/**,*.test.ts,*.test.tsx,*.spec.ts,*.spec.tsx,*.d.ts}","targets":[["commonjs",{"esm":true}],["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]}},"0.3.2":{"name":"@app-swiss-knife/react-native-sdk","version":"0.3.2","keywords":["react-native","sdk","subscriptions","in-app-purchases","revenuecat-compatible"],"license":"MIT","_id":"@app-swiss-knife/react-native-sdk@0.3.2","maintainers":[{"name":"inzeppelin","email":"inzeppelin@gmail.com"}],"homepage":"https://github.com/Remneys/swiss-knife#readme","bugs":{"url":"https://github.com/Remneys/swiss-knife/issues"},"dist":{"shasum":"0d27c0197a779576dd67c28c00bd3c55b115f451","tarball":"https://registry.npmjs.org/@app-swiss-knife/react-native-sdk/-/react-native-sdk-0.3.2.tgz","fileCount":247,"integrity":"sha512-qIADTeHOL+gNROeHNDqnyWSkN1KtTlWS74bySa+YlrgUZabgnzukJ7x+QrOEW8McvIYZiIGmyDPXcYtXmxmyag==","signatures":[{"sig":"MEQCIEfpV3euD2gj4z/2VcH3PUp1N31etsTtBe0vA3fr0P8dAiAJz+SMQe6ZH3i1MGP3Fs7H0ejCuy35lrzu0Fu64Ac99Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1977251},"main":"./lib/commonjs/index.js","_from":"file:/home/runner/work/_temp/pack/app-swiss-knife-react-native-sdk-0.3.2.tgz","types":"./lib/typescript/commonjs/index.d.ts","module":"./lib/module/index.js","source":"./src/index.ts","exports":{".":{"import":{"types":"./lib/typescript/module/index.d.ts","default":"./lib/module/index.js"},"require":{"types":"./lib/typescript/commonjs/index.d.ts","default":"./lib/commonjs/index.js"},"react-native":"./lib/module/index.js"},"./*":{"import":{"types":"./lib/typescript/module/*.d.ts","default":"./lib/module/*.js"},"require":{"types":"./lib/typescript/commonjs/*.d.ts","default":"./lib/commonjs/*.js"},"react-native":"./lib/module/*.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"node scripts/vendor-native.mjs && bob build","clean":"node -e \"for (const d of ['lib','ios/vendor','android/vendor']) require('fs').rmSync(d,{recursive:true,force:true})\"","typecheck":"tsc --noEmit","check:hermes":"node scripts/hermes-boot-check.mjs","vendor:native":"node scripts/vendor-native.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a1e15fa8-780b-479d-b888-970b4a59f57b"}},"_resolved":"/home/runner/work/_temp/pack/app-swiss-knife-react-native-sdk-0.3.2.tgz","_integrity":"sha512-qIADTeHOL+gNROeHNDqnyWSkN1KtTlWS74bySa+YlrgUZabgnzukJ7x+QrOEW8McvIYZiIGmyDPXcYtXmxmyag==","repository":{"url":"git+https://github.com/Remneys/swiss-knife.git","type":"git","directory":"packages/react-native-sdk"},"_npmVersion":"11.17.0","description":"Subscriptions-only React Native SDK for App Swiss Knife — a drop-in replacement for RevenueCat's react-native-purchases public API.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.0.0","@types/react":"~19.2.2","react-native-builder-bob":"^0.43.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","@react-native-async-storage/async-storage":">=1.19.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react-native-sdk_0.3.2_1787820452002_0.3106734228350103","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","exclude":"**/{__tests__/**,__fixtures__/**,__mocks__/**,*.test.ts,*.test.tsx,*.spec.ts,*.spec.tsx,*.d.ts}","targets":[["commonjs",{"esm":true}],["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]}},"0.4.0":{"_id":"@app-swiss-knife/react-native-sdk@0.4.0","bugs":{"url":"https://github.com/Remneys/swiss-knife/issues"},"dist":{"shasum":"bd58e72d7a92be16135333e08e14b744e2ab9e56","tarball":"https://registry.npmjs.org/@app-swiss-knife/react-native-sdk/-/react-native-sdk-0.4.0.tgz","fileCount":248,"integrity":"sha512-1VYRzF4f5GbBnzxSu5g7SxMWPGXoB0xj42GT3b+b8r0KgFn522kN8DcGhS+Zd4xg2SiIsOb9JYRB1LDZx2vdzA==","signatures":[{"sig":"MEQCIDHMFkQ4c5hK1oMhWxCV5t27vVghMgdL//v28quDmwRDAiAiZzw9e+mtQUJfRXUk1jUQwzBWd9yu/JW9hhefbtMWGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDhGXdr9Ycv1oUWpGk4VUhOQXbH0fqkIc9veKu0UPrCrAiBgQnJZ8cD/aS7ZxD6yTxRdmOUG9F+x3XfADxGk9IFouw=="}],"unpackedSize":2059963},"main":"./lib/commonjs/index.js","name":"@app-swiss-knife/react-native-sdk","_from":"file:/home/runner/work/_temp/pack/app-swiss-knife-react-native-sdk-0.4.0.tgz","types":"./lib/typescript/commonjs/index.d.ts","module":"./lib/module/index.js","source":"./src/index.ts","exports":{".":{"import":{"types":"./lib/typescript/module/index.d.ts","default":"./lib/module/index.js"},"require":{"types":"./lib/typescript/commonjs/index.d.ts","default":"./lib/commonjs/index.js"},"react-native":"./lib/module/index.js"},"./*":{"import":{"types":"./lib/typescript/module/*.d.ts","default":"./lib/module/*.js"},"require":{"types":"./lib/typescript/commonjs/*.d.ts","default":"./lib/commonjs/*.js"},"react-native":"./lib/module/*.js"},"./package.json":"./package.json"},"license":"MIT","scripts":{"test":"vitest run","build":"node scripts/vendor-native.mjs && bob build","clean":"node -e \"for (const d of ['lib','ios/vendor','android/vendor']) require('fs').rmSync(d,{recursive:true,force:true})\"","typecheck":"tsc --noEmit","check:hermes":"node scripts/hermes-boot-check.mjs","vendor:native":"node scripts/vendor-native.mjs"},"version":"0.4.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"a1e15fa8-780b-479d-b888-970b4a59f57b"}},"homepage":"https://github.com/Remneys/swiss-knife#readme","keywords":["react-native","sdk","subscriptions","in-app-purchases","revenuecat-compatible"],"_resolved":"/home/runner/work/_temp/pack/app-swiss-knife-react-native-sdk-0.4.0.tgz","_integrity":"sha512-1VYRzF4f5GbBnzxSu5g7SxMWPGXoB0xj42GT3b+b8r0KgFn522kN8DcGhS+Zd4xg2SiIsOb9JYRB1LDZx2vdzA==","repository":{"url":"git+https://github.com/Remneys/swiss-knife.git","type":"git","directory":"packages/react-native-sdk"},"_npmVersion":"11.19.0","description":"Subscriptions-only React Native SDK for App Swiss Knife — a drop-in replacement for RevenueCat's react-native-purchases public API.","directories":{},"maintainers":[{"name":"inzeppelin","email":"inzeppelin@gmail.com"}],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.6","typescript":"^5.0.0","@types/react":"~19.2.2","react-native-builder-bob":"^0.43.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.73.0","@react-native-async-storage/async-storage":">=1.19.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-native-sdk_0.4.0_1790782250264_0.3937350664867585"},"react-native-builder-bob":{"output":"lib","source":"src","exclude":"**/{__tests__/**,__fixtures__/**,__mocks__/**,*.test.ts,*.test.tsx,*.spec.ts,*.spec.tsx,*.d.ts}","targets":[["commonjs",{"esm":true}],["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]}}},"time":{"created":"2026-08-05T11:19:38.282Z","modified":"2026-09-30T15:30:50.578Z","0.1.0":"2026-08-05T11:19:38.577Z","0.1.1":"2026-08-07T09:24:58.484Z","0.2.0":"2026-08-07T14:25:51.727Z","0.2.1":"2026-08-10T12:24:39.828Z","0.2.3":"2026-08-10T16:04:20.481Z","0.2.4":"2026-08-11T15:30:52.048Z","0.2.5":"2026-08-11T15:37:13.821Z","0.2.7":"2026-08-11T16:54:57.941Z","0.3.0":"2026-08-12T10:12:35.910Z","0.3.1":"2026-08-12T13:32:36.701Z","0.3.2":"2026-08-27T08:47:32.184Z","0.4.0":"2026-09-30T15:30:50.390Z"},"bugs":{"url":"https://github.com/Remneys/swiss-knife/issues"},"license":"MIT","homepage":"https://github.com/Remneys/swiss-knife#readme","keywords":["react-native","sdk","subscriptions","in-app-purchases","revenuecat-compatible"],"repository":{"url":"git+https://github.com/Remneys/swiss-knife.git","type":"git","directory":"packages/react-native-sdk"},"description":"Subscriptions-only React Native SDK for App Swiss Knife — a drop-in replacement for RevenueCat's react-native-purchases public API.","maintainers":[{"name":"inzeppelin","email":"inzeppelin@gmail.com"}],"readme":"# @app-swiss-knife/react-native-sdk\n\nReact Native subscriptions SDK for [App Swiss Knife](https://github.com/Remneys/swiss-knife) —\na drop-in replacement for RevenueCat's `react-native-purchases` public API.\n\n---\n\n## Three-package architecture\n\nThis SDK is part of a three-package split:\n\n| Package                                                                          | Language                         | Purpose                                                                                           |\n| -------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------- |\n| `packages/swiss-knife-android` · `com.appswissknife:swiss-knife-android:0.1.0`   | Kotlin                           | Native Android SDK — Play Billing v8 directly, own typed model layer. Owns `configure`, proxyURL. |\n| `packages/swiss-knife-ios` · Pod `SwissKnifeiOS 0.1.0`                           | Swift                            | Native iOS SDK — StoreKit 2 directly, own typed model layer. Owns `configure`, proxyURL.          |\n| `packages/react-native-sdk` · `@app-swiss-knife/react-native-sdk` (this package) | TypeScript + Kotlin/Swift bridge | React Native bridge. **Vendors both native SDKs** into its own tarball.                           |\n\n### How the bridge gets the native SDKs (vendoring)\n\nThe npm tarball is **self-contained**: neither the CocoaPods pod\n`SwissKnifeiOS` nor the Maven artifact `com.appswissknife:swiss-knife-android`\nhas to exist on any registry for a consumer app to build.\n\n`scripts/vendor-native.mjs` runs on `build` and `prepack` and copies the\nnative sources into this package:\n\n| From                                             | To                         | Compiled by                                             |\n| ------------------------------------------------ | -------------------------- | ------------------------------------------------------- |\n| `packages/swiss-knife-ios/Sources/SwissKnifeiOS` | `ios/vendor/SwissKnifeiOS` | `SwissKnifePurchases.podspec` (`source_files = ios/**`) |\n| `packages/swiss-knife-android/src/main/java`     | `android/vendor/java`      | `android/build.gradle` (`sourceSets.main.java.srcDirs`) |\n| `packages/swiss-knife-android/src/main/res`      | `android/vendor/res`       | `android/build.gradle` (`sourceSets.main.res.srcDirs`)  |\n\nThe vendored trees are **git-ignored build artifacts** (same status as `lib/`)\nbut ARE included in the tarball. The single source of truth stays in\n`packages/swiss-knife-ios` / `packages/swiss-knife-android` — never edit\nanything under `ios/vendor` or `android/vendor`.\n\n- **Android** — every bridge method calls `com.appswissknife.SwissKnife.<method>`\n  and JSON-encodes the resulting `com.appswissknife.models.*` values into the\n  `WritableMap` shape the JS-side `src/types.ts` declares (via `SwissKnifeJson`).\n  The vendored Kotlin's own dependencies (androidx annotation / security-crypto /\n  work / lifecycle-process, Play Billing v8, okhttp `compileOnly`) are declared\n  directly in `android/build.gradle` and all resolve from `google()` /\n  `mavenCentral()`.\n\n- **iOS** — every bridge method calls `SwissKnife.<method>` and JSON-encodes the\n  resulting typed values into the `[String: Any]` shape JS expects (via\n  `SwissKnifeJSON`). Because the vendored Swift compiles into the **same** pod\n  module as the bridge, the bridge files use\n  `#if canImport(SwissKnifeiOS) / import SwissKnifeiOS` (false, and unnecessary,\n  in the pod) purely to satisfy SPM consumers. **No bridge method body is\n  conditionally compiled.** They used to be gated on the podspec's\n  `SWISSKNIFE_VENDORED` flag, which meant a Podfile `post_install` that assigned\n  rather than appended to `SWIFT_ACTIVE_COMPILATION_CONDITIONS` silently\n  compiled the native crash reporter down to empty method bodies while the\n  build stayed green. A missing SDK is now a compile error instead. The\n  vendored Swift imports only system frameworks — zero third-party pods.\n\nPhase 7 of the SDK rip-and-replace removed every RevenueCat / PHC dependency\nfrom the bridge — neither the iOS pod graph nor the Android AAR graph pulls\nRC in any more. The native SDKs own purchases end-to-end via StoreKit 2 /\nPlay Billing v8 directly, with receipts validated by our own backend.\n\nThis means **proxyURL re-routing and diagnostics/device-id hardening** are\nenforced once in each native SDK, covering both native-app and RN consumers\nwith a single auditable code path.\n\n### Expo support\n\nExpo Go is **not supported** — this SDK contains native Kotlin/Swift code that\nrequires a custom dev build.\n\nAn Expo config plugin (`app.plugin.js`) is planned for SP-3. Until then:\n\n1. Run `expo prebuild` (or use a custom dev build / EAS Build).\n2. The native modules are auto-linked via React Native's standard autolinking.\n\n---\n\n## Installation\n\n```bash\nnpm install @app-swiss-knife/react-native-sdk\n```\n\n### Peer Dependencies\n\n```bash\nnpm install @react-native-async-storage/async-storage react-native-webview\n```\n\n## Quick Start\n\n```typescript\nimport {\n  SwissKnife,\n  Purchases,\n  Identity,\n  Attributes,\n} from \"@app-swiss-knife/react-native-sdk\";\n\n// Once, at app start.\nSwissKnife.configure({\n  apiKey: \"sk_...\",\n  proxyURL: \"https://your-swiss-knife-host\",\n});\n\n// Who is this device?\nawait Identity.logIn(\"user_42\");\n\n// What do we know about them? (This is the dashboard person card.)\nawait Attributes.setEmail(\"ann@example.com\");\nawait Attributes.set({ plan: \"gold\", cohort: \"2026-08\" });\n\n// Sell them something.\nconst offerings = await Purchases.getOfferings();\nconst pkg = offerings.current?.availablePackages[0];\nif (pkg) await Purchases.purchasePackage(pkg);\n```\n\n## The namespaces\n\nEverything hangs off `SwissKnife`, the same way it does in the native iOS and\nAndroid SDKs. Each namespace is also exported by name, so\n`SwissKnife.Identity` and `Identity` are the same object — import whichever\nreads better.\n\n| Namespace        | What it is                                                                                 | Needs       |\n| ---------------- | ------------------------------------------------------------------------------------------ | ----------- |\n| `SwissKnife`     | Bootstrap: `configure`, `configureCore`, `isConfigured`, `isCoreConfigured`, `setLogLevel` | —           |\n| `Purchases`      | The store: offerings, purchases, restores, `CustomerInfo`                                  | `configure` |\n| `Identity`       | `logIn` / `logOut` / `current` / `reset` / `wipe`                                          | core        |\n| `Attributes`     | Subscriber attributes — **the dashboard person card**                                      | core        |\n| `Attribution`    | Install attribution: ATT / IDFA / advertising id / referrer                                | core        |\n| `Analytics`      | `init` / `track` / `identify` / `screen`                                                   | —           |\n| `CrashReporting` | Crash + error reporting                                                                    | —           |\n| `Performance`    | Transactions and spans                                                                     | —           |\n\n\"core\" means `SwissKnife.configure(...)`, `SwissKnife.configureCore(...)` **or**\n`Analytics.init(...)` — no store required.\n\n### Migrating from `react-native-purchases`?\n\nChange nothing. `Purchases` keeps every member it has ever had, including\n`Purchases.configure`, `Purchases.configureCore`, `Purchases.isConfigured`,\n`Purchases.isCoreConfigured`, `Purchases.setLogLevel`, `Purchases.setAttributes`,\n`Purchases.setEmail`, `Purchases.setDisplayName`, `Purchases.setPhoneNumber` and\n`Purchases.setPushToken`. They are **not deprecated** and they are not wrappers —\n`Purchases.configure === SwissKnife.configure` and\n`Purchases.setAttributes === Attributes.set` are literally true, so the two\nspellings share one bootstrap state and cannot drift apart. Mix them freely\nwhile you migrate, or never migrate at all.\n\nThe four identity aliases (`Purchases.logIn`, `logOut`, `getAppUserID`,\n`isAnonymous`) are the exception and stay marked deprecated: they still work, but\n`Identity.*` is the canonical home and the RC return types misdescribe what those\ncalls do in a store-less app.\n\nNew namespaces require SDK `>= 0.3.0`.\n\n## Already using another IAP library? Use `configureCore`\n\n`SwissKnife.configure(...)` sets up two independent things: the **core** (event\ningest, `Identity`, `Attribution`, `Attributes`) and the **purchase\nengine** (StoreKit 2 on iOS, Google Play Billing on Android).\n\nThe purchase engine is not passive. On iOS it starts a process-wide\n`StoreKit.Transaction.updates` observer whose handler calls\n`transaction.finish()`; on Android it builds a `BillingClient` with its own\n`PurchasesUpdatedListener`. If RevenueCat (or your own StoreKit/Billing code)\nalready owns purchases, two observers will race to finish the same renewal.\n\nSo the two halves are separately callable:\n\n```typescript\nimport {\n  SwissKnife,\n  Identity,\n  Attributes,\n  Attribution,\n} from \"@app-swiss-knife/react-native-sdk\";\n\n// Analytics + identity + attribution + attributes. No StoreKit observer.\n// No BillingClient. No install registered as a side effect.\nSwissKnife.configureCore({\n  apiKey: \"sk_...\",\n  proxyURL: \"https://your-swiss-knife-host\",\n});\n\nawait Identity.logIn(\"user_42\");\nawait Attributes.setEmail(\"ann@example.com\"); // person card, no store needed\nawait Attribution.registerInstall(); // explicit — core never does this for you\n```\n\n- **Analytics only?** `Analytics.init({ apiKey, serverURL })` already wires core\n  natively — identity, attribution and attributes work from that call alone.\n  Reach for `configureCore` when you also want to pass an `appUserID`, an\n  attribution configuration, or a log level up front.\n- **`SwissKnife.configure(...)` is unchanged** — it is exactly core + purchases,\n  including the first-launch install registration\n  (`sendInstallOnFirstLaunch`, default `true`). Existing integrations need no\n  changes.\n- **`Attributes.*` works here.** All five setters need core only, which is why\n  they are a namespace of their own rather than members of `Purchases`: an app\n  that never sells anything still wants its person card filled in. They are the\n  only path to `POST /api/sdk/users/attributes`.\n- `SwissKnife.isConfigured()` reports the **purchase engine** and stays `false`\n  in a core-only app; `SwissKnife.isCoreConfigured()` reports the core. Both read\n  the answer from native — which is what makes `isCoreConfigured()` return\n  `true` in an `Analytics.init`-only app, where no JS configure call ever\n  happened. Neither ever throws or rejects: if the native module is not linked\n  (Expo Go, a build without `pod install` / a Gradle sync, web) they both\n  resolve `false`, because an unlinked module cannot have configured anything.\n- Native equivalents: `SwissKnife.configureCore(...)` /\n  `SwissKnife.configurePurchases(...)` on both iOS and Android — the JS root is\n  named to match.\n\n## IDFA/GAID Collection (Advertising ID)\n\nThe SDK can collect the device advertising ID (IDFA on iOS, GAID on Android) for deterministic attribution matching. This is optional — if not configured, attribution falls back to fingerprint/referrer matching.\n\n### 1. Install peer dependencies\n\n```bash\nnpm install react-native-device-info react-native-tracking-transparency\n```\n\n### 2. iOS: Add tracking permission description\n\nAdd `NSUserTrackingUsageDescription` to your `Info.plist`:\n\n```xml\n<key>NSUserTrackingUsageDescription</key>\n<string>We use this identifier to attribute your install to the correct campaign.</string>\n```\n\n### 3. That's it\n\nThe SDK automatically:\n\n- Requests App Tracking Transparency permission on iOS before reading IDFA\n- Reads GAID on Android (no extra permission needed)\n- Includes `advertising_id` in the install attribution request\n- Falls back gracefully if the user denies tracking or the libraries are not installed\n\nYou can also drive it yourself through the `Attribution` namespace — prompt\norchestration and the idempotency cache live natively, so a second call returns\nthe cached resolution without re-prompting or re-POSTing:\n\n```typescript\nimport { Attribution } from \"@app-swiss-knife/react-native-sdk\";\n\n// Auto-collect (ATT prompt + IDFA on iOS, advertising id + referrer on Android)\n// and register the install.\nconst resolved = await Attribution.requestAndRegister();\n\n// Or collect consent yourself and hand us the id (pass null if denied):\nawait Attribution.registerInstall(advertisingId);\n\n// Read the cached resolution without touching the network:\nconst current = await Attribution.resolved();\n```\n\n## Custom Storage\n\nBy default, the SDK uses `@react-native-async-storage/async-storage` for persistence. You can provide a custom storage adapter:\n\n```typescript\nimport { StorageAdapter } from \"@app-swiss-knife/react-native-sdk\";\n\nclass SecureStorageAdapter implements StorageAdapter {\n  async get(key: string): Promise<string | null> {\n    // your implementation\n  }\n  async set(key: string, value: string): Promise<void> {\n    // your implementation\n  }\n  async remove(key: string): Promise<void> {\n    // your implementation\n  }\n}\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}