{"_id":"@hotfyllc/sdk","_rev":"27-fec740796a6125ab3be0c4393fcc3828","name":"@hotfyllc/sdk","dist-tags":{"latest":"2.4.0"},"versions":{"1.2.1":{"name":"@hotfyllc/sdk","version":"1.2.1","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@1.2.1","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"be5745fb8c467390adff77c754ac949b7461dc5e","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-1.2.1.tgz","fileCount":129,"integrity":"sha512-G4RvL7Ybxtok/b2qoNIgaGdvC6S0xZDTq0b34llDLk0eWJ/aa51zvM6Tp+Q509wZemap55NlZM69tCSXhbOr3A==","signatures":[{"sig":"MEUCIQCQwTCShRNqWDFVD5MCsf0I7+kkn1IKOjST/lH2DBZuHgIgOgWTazxdYUmAPDqLPoW1TvoJ1BCBYI0x49jOFM1YFwI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":218700},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"6a860fef5b0fdfd209e6e992b42a578229c77693","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.16.0","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.2.1_1780967916752_0.7156480601166946","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@hotfyllc/sdk","version":"1.3.0","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@1.3.0","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"40e90cc1f9a38ab3c9e8e1caa6f3b8ad42c127b1","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-1.3.0.tgz","fileCount":131,"integrity":"sha512-hGVOHN6SA8L0cNt6/GT3cFyOXANbWASBix/ncV4T/DlGWbFn/V0YzM1q4KQGUvSgjnyqA0rqRdntif/tiKSClw==","signatures":[{"sig":"MEQCIAjIHPBmxEyCeT8v7BGCWrVji7BDYk2Gb6zSLSdl4fq0AiALPWopsBCX5O34jdUGniYPNVRPF7cBxLdlBnMnSgmGvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":219863},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"54c661134b1585de22b5a4a5530d283d39e58071","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.16.0","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.3.0_1781007543990_0.8046021304382129","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@hotfyllc/sdk","version":"1.4.0","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@1.4.0","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"f28d4cbc75d48bba0cd9e0c0118580af75c7b3c4","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-1.4.0.tgz","fileCount":143,"integrity":"sha512-H9kNXJHB/S1Yf+uNGKjIU/zmJz5v1+ybtdvjuj4OuJSqV+Q5MyuhC/f284UM7OM597IY7P1A9dCZLh2HjYUm/g==","signatures":[{"sig":"MEQCIBrrFIxBlqJV6vEHmwMc4UW9kJsFRiZsuor1bKI5Gu1qAiB9zgVnu+V31/iuSEiAdS9LqE/A0BZsg7P39ZYW71nmnQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256655},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"fd2f547dc9bcd294a2bc36957f1f3ee9889bd061","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.16.0","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.4.0_1781142295653_0.4234396679866752","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@hotfyllc/sdk","version":"1.4.1","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@1.4.1","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"e03f089b2d49cb5b224ede93951ef3a251391bf5","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-1.4.1.tgz","fileCount":143,"integrity":"sha512-6H9Rp2UQd/jUURMKefsc/oEGeiSA3E0eiAzc2+HTqLMautwkiIaafiBEEaOBJiCv4Me67qoSC5vjD8S6waZYMA==","signatures":[{"sig":"MEUCIA8/BPR3gjlnYIuoLiMtZWzAR3pnzP+SgZsYRPMlhM0yAiEArTmboCrwW/aPT+/piE3miM29wknhDAZyJSvIIUcrSTo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":259231},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"fbb24fb2de0b40cc36c34d05c1a4c8d0de4f0485","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.16.0","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.4.1_1781148814107_0.36879959357033165","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@hotfyllc/sdk","version":"1.4.2","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@1.4.2","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"b8afa94fd8a103306d9ebd9bd8e1080a8b0d520d","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-1.4.2.tgz","fileCount":143,"integrity":"sha512-f85nRmLdqK8H3aG7FWfcN71+NyDgakMm/lRJCqGCbGykZaiq9rnLnclrPPVMtNwFCdXCZjQ+oU+XQ48MEcnFwA==","signatures":[{"sig":"MEUCIQCpxnB+yvteIWLjm8pd/ecTLvXxyQdPSQvkYMjNbw6lpQIgI/NF/7u8VeCIAHump5Ke2LIyGYxYlM3fL2eZlqjDWYU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":260457},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"780afc43dc82d8d2c013e9e26f9e76d70b179654","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.17.0","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.4.2_1781466695811_0.7126585523462068","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@hotfyllc/sdk","version":"1.7.1","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@1.7.1","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"a2f74ae4812f2f9d6379970b9c2c147aced3f087","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-1.7.1.tgz","fileCount":151,"integrity":"sha512-ZWg7P9q1BRyoz10YLBS/PothPw8tQ7AxrgG3b1AxmKFJFwLRp/6PXzRDq+myMpZd3NXoVdfIYzLRBa+Kop0NqA==","signatures":[{"sig":"MEYCIQDT/H4VKFR9S2k/cYtAf01jmRrV+9h/W/DyF3vv4GLkCQIhAMK2Ydvu0/IMFdisnoEsL/noPuoHQBXXTIwDkfroUROQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":275753},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"dffec617454882efaf62e2b0f3ab61b0469d2bad","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"node ./scripts/gen-version.mjs && tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.17.0","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.7.1_1781981304946_0.7344599328278869","host":"s3://npm-registry-packages-npm-production"}},"1.7.2":{"name":"@hotfyllc/sdk","version":"1.7.2","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@1.7.2","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"68672df5f01d6c5b712ab315bcb9a76ab8ae2246","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-1.7.2.tgz","fileCount":153,"integrity":"sha512-r5DWGfOW4NvDNOmtCaRejq8QTANGFkn7T2ck3WWrWM+sOxRyv5SQ32bN4ZgmcG1p31QafjHOhMN38w8o8+eqYQ==","signatures":[{"sig":"MEUCIQDOlLdboIb++vrtmtrwk1iN8AVevE2UPZl4PVAsSUJargIgFv8U5ilzcRtZECrsu2YaJV3o/wyEVU0Nk9QQ8QUSMQ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":281838},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"a281ebd0acdcc4d3014c5cf79c1e5135419f3f6a","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"node ./scripts/gen-version.mjs && tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.17.0","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.7.2_1782240683965_0.18713209824839283","host":"s3://npm-registry-packages-npm-production"}},"1.7.3":{"name":"@hotfyllc/sdk","version":"1.7.3","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@1.7.3","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"4e14dadcdbaf24687b35ad1a58b774ea0d8cd5b2","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-1.7.3.tgz","fileCount":157,"integrity":"sha512-lD12GbXLUIFNBouep/fggHiYCa04ZFVtiSqu4lTG4IkkJukkMZICOst1OY/KHEb0z5yablTI/GUJ0Y3TlymMyg==","signatures":[{"sig":"MEUCIQCvt8ngeO681D3f7co8/744OsuwgZyyDlHjnS4pBlurNAIgUWR+JY9hVgKlNDiJtbZjnRGLfyC4StFUCL6BfEX96tk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288162},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"d35f27bdad99d0ed58ae5cde9dfa3b660ac74ad0","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"node ./scripts/gen-version.mjs && tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.17.0","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.7.3_1782243475016_0.09810085199652518","host":"s3://npm-registry-packages-npm-production"}},"1.7.4":{"name":"@hotfyllc/sdk","version":"1.7.4","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@1.7.4","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"13bb5563543cb8385b54aed72215f839e36841a5","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-1.7.4.tgz","fileCount":157,"integrity":"sha512-2McLxZza00ODAK5UMdgiYzoSxf4SYknAgkKvUT7DIW51OQf3r5q3J58Vxh2wL0e6mXyF1CE/hJZB/WCAqR03wg==","signatures":[{"sig":"MEYCIQD6cjkocGUySfILUOlVDMvmHtC2MaUwOVVqYzjCt8CGTgIhAM5pwtdj6QBxfDlHhfSz2y18NXVnaiR/rfr753DyzK9B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288378},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"ed745796c2081ce720c569d15b17688d95d0ae85","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"node ./scripts/gen-version.mjs && tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.17.0","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.7.4_1782246456787_0.9359718284121377","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@hotfyllc/sdk","version":"2.0.0","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@2.0.0","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"d94e2ae9b54432fbdbea4d7499b4100180c3b897","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-2.0.0.tgz","fileCount":157,"integrity":"sha512-bDI7UZA2OFDYt2EsPMuiYYJaVsMEwg4xN77vNq0Kf7WGHWEjFWODng2JGNP7f0cfpjURF5axH/+pKYVJL605xg==","signatures":[{"sig":"MEUCIBknTlN27960JJd1vDekSM09vVYBypJIAXJcBtXdJ0msAiEArp6uiLqv/hFUWJEF5KPZYnJo9UWUYWghapBwm8j//F4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288993},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"6f133b557b6403c57408b7838588df008829b5fd","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"node ./scripts/gen-version.mjs && tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.17.0","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.23.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_2.0.0_1782504850980_0.25746090779173403","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@hotfyllc/sdk","version":"2.0.1","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@2.0.1","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"d6f6f1bc7d4a4e03e6827dfae2997e78e3a3a6b7","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-2.0.1.tgz","fileCount":157,"integrity":"sha512-Cs8C8cxKf7mNtjvOXl1YHpYcN/ngs4UI3oT7UCVN7oa9h8nfpStmtA2/i1/h688BnZ9ZCh++CbkHg+mm5hfV1w==","signatures":[{"sig":"MEUCIQD9pckKOwxaOSC63SXa20tpsA9ZSbIIE4xkejI5iboKfwIgadbWc3scUlTel0Kikrz9SjNKHbbLkRJ8+GKASm3R5ko=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":289221},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"0cc96bc5f1563fd69fcdfc0dce7dd9a5f9aefde5","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"node ./scripts/gen-version.mjs && tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.17.0","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.23.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_2.0.1_1782513620526_0.5222928232316464","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@hotfyllc/sdk","version":"2.1.0","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@2.1.0","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"718ad0204e5a8ad4169dfcfad11c734c2f15c823","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-2.1.0.tgz","fileCount":161,"integrity":"sha512-XiYcHiPucgj6cznl8xYXf17KNBSBaIlRC2ExocKh5ZA7auLL59aJP3hBP6s1+ZUH89MH7/kKrPPaoyCZAPPmmQ==","signatures":[{"sig":"MEYCIQCPXJeY9NgsG7kKikFKiC8hogvuLoC4KJXAL1PB75UXnAIhAN2l4VOLMw5644+c5MONIxct3P8y1Ry3PyLv/2yZEn2W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":293161},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"c66473ca30102ec016ee38e493bea0f6355e9445","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"node ./scripts/gen-version.mjs && tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.5.1","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_2.1.0_1783631153755_0.2894827954990862","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@hotfyllc/sdk","version":"2.1.1","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@2.1.1","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"5a1bd8ed3a5f58dfbc930258dcc8435e25d9f5f8","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-2.1.1.tgz","fileCount":161,"integrity":"sha512-fbBjgm0T6n8sEhvcn1lMralzLJ5PHtHjsXBDdJ9eec7+DMcn/zBY97VuvVpy1OU9Urd0RxM7LwOGmdNcLpVYyw==","signatures":[{"sig":"MEQCIFkh4xKZu1171SIUmodCZ5NfYb3YdSW961vEsrfsbx/+AiAaXfuEqgJLpnNte8tj+4Sv+OHkVqSwWIWbRZMQR2Pdqg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":293222},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"80dbb88c5d530cc17058d6d59f5af587d6d20493","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"node ./scripts/gen-version.mjs && tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.5.1","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_2.1.1_1784040286188_0.4954556765898661","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"@hotfyllc/sdk","version":"2.1.2","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@2.1.2","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"ecd63833f9281775e46be6111e9909e12c30a61b","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-2.1.2.tgz","fileCount":161,"integrity":"sha512-XRWuQYwp0ldZi3WGTHQN7HSnNZMHcdeZ3PKZO9lbodLzP4Td8YbOYuOXiaSvxuFPcV8sgwHyKBAMz3LiTgKPmg==","signatures":[{"sig":"MEUCIQCxWfnmrs1Zy0ns2VJ2D2qJOzmmrLBnXPJll7yoT5j91QIgVV72Kv8K09kAXdu2bTuw+ad2+0GYij3vUWCgUO0bFFQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":295141},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"300fb22c912f59111ed2034af053c4d198c335ea","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"node ./scripts/gen-version.mjs && tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.5.1","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_2.1.2_1784125118200_0.7314569758341434","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@hotfyllc/sdk","version":"2.2.0","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@2.2.0","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"65b538df2f9ba3a988b93264f666aa8c9cbf7b3e","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-2.2.0.tgz","fileCount":173,"integrity":"sha512-ypkyryO8WeZ0zHCxH0mMSrFqL56kTPHy2qA5EXdELVyvDcwHXyYtnIUaH/aMCfNNmEJEfRkWq1vfHoxTbYG+QQ==","signatures":[{"sig":"MEUCIQClWJhLC5StgRjMUPonR6Y1L1Fa/dZHbfMy9FmaYBtuPwIgEfVroxsZqjGqPwMki52o3FIqizTamqNGaPZAfZXFJFg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":325768},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"70de55b50d84b7c0623fd881e934111c9b77875e","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"node ./scripts/gen-version.mjs && tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.5.1","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_2.2.0_1784753466526_0.7343771955232161","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@hotfyllc/sdk","version":"2.2.1","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@2.2.1","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"8617ecc5baa449ee130edd0a0ad4bdb2848d5cdb","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-2.2.1.tgz","fileCount":173,"integrity":"sha512-rPJXTPTEQqS+XrU+JYyp4gDPPtaHbnKF8sI/2ZaEXbIQdKpVEvrk04ryZjNzLi1SYbn2Fb7B04EVkb95biHkvQ==","signatures":[{"sig":"MEUCIQD1gxiRgvMoWHqL6ZzwAXObYXWQlph4wKwijaKLxtvGEgIgQFUTNAnicYFepJipnCsbPivSwwGiT4HEOcQq3Izqjwo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":327074},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"eb11b4254948d032cab0fec7b3a148422664b727","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"node ./scripts/gen-version.mjs && tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.5.1","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_2.2.1_1784817600095_0.4423369498772509","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"@hotfyllc/sdk","version":"2.2.2","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@2.2.2","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"1280c4bf5ad388b67d4c64334162dd6a59641dc8","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-2.2.2.tgz","fileCount":173,"integrity":"sha512-dGZTMbzm52nuGWB5vx9ca2YuSUdfZ1aCQ8voOk8F/WhpZfNy4/l0tGg5nlMYWP8gR9mq5DEyj3OSn2tym28qXg==","signatures":[{"sig":"MEUCIF1VzYeagNpPscNWhM5e+iCGweEqYGuhdr/IjzJUPkXMAiEAiuFVIZxJIWV2cU2sv/MJdo5eNX1EB8sSiC1S35/3ooQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":335231},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"6430226137cac80265e6f27744e8a1e9b661d269","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"node ./scripts/gen-version.mjs && tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.5.1","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_2.2.2_1785693435591_0.14213488567801935","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"@hotfyllc/sdk","version":"2.3.1","author":{"name":"Hotfy LLC"},"license":"UNLICENSED","_id":"@hotfyllc/sdk@2.3.1","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"dist":{"shasum":"7e5b8afa72c19f4658bbfc1110e8f0f8ec76f549","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-2.3.1.tgz","fileCount":177,"integrity":"sha512-JDb5TRv3edExzL9yf/A2yli9GB7r8C1m+J8/enfkrGfB29IYHPphx1fKBGUF26w0ginZah+9NJ1RGHTk5mQeQg==","signatures":[{"sig":"MEUCIH6iwxBp98TgMZl7Lmws3x2Uy5CJS6M2xI0e/SN9ub7GAiEA9tOsf9WRAcyk7fLnIJKdUIK0xVC/onkXssd9KD6QiNQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":341116},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"ca28f681a5da31a62cc8aceb548659d2388893d4","private":false,"scripts":{"lint":"eslint --fix . && prettier --write .","test":"vitest run","build":"node ./scripts/gen-version.mjs && tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","prepare":"husky","typecheck":"tsc --noEmit","lint:check":"eslint . && prettier --check .","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"_npmVersion":"11.5.1","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","react":"18.2.0","eslint":"^9.0.0","vitest":"^2.0.0","esbuild":"^0.24.2","prettier":"^3.0.0","typescript":"^5.3.0","lint-staged":"^17.0.0","@types/react":"^18.2.0","react-native":"0.74.0","typescript-eslint":"^8.0.0","eslint-config-prettier":"^10.0.0","react-native-device-info":"^15.0.2","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","@react-native-async-storage/async-storage":"^1.21.0"},"peerDependencies":{"react":"*","react-native":">=0.70.0","react-native-device-info":">=10.0.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0","@react-native-async-storage/async-storage":">=1.17.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sdk_2.3.1_1785693475001_0.3895746850948234","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@hotfyllc/sdk","version":"2.4.0","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"node ./scripts/gen-version.mjs && tsc && node ./scripts/minify-dist.mjs","clean":"rm -rf dist","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","lint":"eslint --fix . && prettier --write .","lint:check":"eslint . && prettier --check .","prepare":"husky","prepublishOnly":"npm run clean && npm run build"},"publishConfig":{"access":"public"},"peerDependencies":{"@react-native-async-storage/async-storage":">=1.17.0","@sparkfabrik/react-native-idfa-aaid":">=1.2.0","react":"*","react-native":">=0.70.0","react-native-device-info":">=10.0.0","react-native-google-mobile-ads":">=14.0.0","react-native-play-install-referrer":">=1.1.0"},"peerDependenciesMeta":{"@react-native-async-storage/async-storage":{"optional":false}},"devDependencies":{"@react-native-async-storage/async-storage":"^1.21.0","@sparkfabrik/react-native-idfa-aaid":"^1.2.0","@types/react":"^18.2.0","esbuild":"^0.24.2","eslint":"^9.0.0","eslint-config-prettier":"^10.0.0","husky":"^9.0.0","lint-staged":"^17.0.0","prettier":"^3.0.0","react":"18.2.0","react-native":"0.74.0","react-native-device-info":"^15.0.2","react-native-google-mobile-ads":"^14.0.0","react-native-play-install-referrer":"^1.1.9","typescript":"^5.3.0","typescript-eslint":"^8.0.0","vitest":"^2.0.0"},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md}":["prettier --write"]},"author":{"name":"Hotfy LLC"},"license":"UNLICENSED","private":false,"engines":{"node":">=18"},"_id":"@hotfyllc/sdk@2.4.0","gitHead":"7b36e739c25c58d32b30ba75ec10b7df561f0620","_nodeVersion":"22.23.1","_npmVersion":"11.5.1","dist":{"integrity":"sha512-RS2B4vSNnr9jmSqBjERJXq+zFnV0hWBjdoQQ6viPMaqJxIXXPuHPbOP6IPyDg6is6WPOMqLvmZQe7pkwSnRruQ==","shasum":"48922d28a05db241ba8933edd186e9d347df724a","tarball":"https://registry.npmjs.org/@hotfyllc/sdk/-/sdk-2.4.0.tgz","fileCount":179,"unpackedSize":348032,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDJzOrulG9YXHkdqDtTa4BsnTJ86XSMc0Oo6IXsxsaLQwIgLjXkNX03Fy+1vGpvkHAHaUohvXvvRuoH3DwL4Zx+vD8="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb607043-bb2d-4667-875d-49836771edf6"}},"directories":{},"maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_2.4.0_1785953727543_0.2664214233618767"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-08T23:24:17.363Z","modified":"2026-08-05T18:15:27.888Z","1.0.0":"2026-06-08T23:24:17.707Z","1.0.1":"2026-06-08T23:57:48.136Z","1.1.0":"2026-06-09T00:30:59.293Z","1.2.0":"2026-06-09T00:49:22.522Z","1.2.1":"2026-06-09T01:18:36.910Z","1.3.0":"2026-06-09T12:19:04.154Z","1.4.0":"2026-06-11T01:44:55.822Z","1.4.1":"2026-06-11T03:33:34.269Z","1.4.2":"2026-06-14T19:51:35.952Z","1.7.1":"2026-06-20T18:48:25.074Z","1.7.2":"2026-06-23T18:51:24.127Z","1.7.3":"2026-06-23T19:37:55.179Z","1.7.4":"2026-06-23T20:27:36.926Z","2.0.0":"2026-06-26T20:14:11.130Z","2.0.1":"2026-06-26T22:40:20.660Z","2.1.0":"2026-07-09T21:05:53.902Z","2.1.1":"2026-07-14T14:44:46.387Z","2.1.2":"2026-07-15T14:18:38.330Z","2.2.0":"2026-07-22T20:51:06.677Z","2.2.1":"2026-07-23T14:40:00.232Z","2.2.2":"2026-08-02T17:57:15.737Z","2.3.1":"2026-08-02T17:57:55.130Z","2.4.0":"2026-08-05T18:15:27.699Z"},"author":{"name":"Hotfy LLC"},"license":"UNLICENSED","description":"Hotfy SDK unificado para React Native — wrapper config (ads), CDP (eventos + atribuição + revenue) e device token registration em um único init.","maintainers":[{"name":"mateus-gustavo","email":"mateus20040914@gmail.com"}],"readme":"# @hotfyllc/sdk\n\nSDK unificado da Hotfy para React Native. Em um único pacote:\n\n- **Ads** — orquestração remota de anúncios (interstitial, app open, rewarded, banner, native) integrada com AdMob/GAM, com attribution capture, daysSinceInstall e event system.\n- **Analytics** — eventos custom, screen views, identify, atribuição, ad revenue (ILAR), push events.\n- **Device token** — registro automático do FCM/APNS, com change-detection, retry e safety re-sync.\n\n---\n\n## Instalação\n\n```bash\nnpm install @hotfyllc/sdk\n```\n\n### Peer dependencies (obrigatórias)\n\n```bash\nnpm install \\\n  @react-native-async-storage/async-storage \\\n  react-native-google-mobile-ads \\\n  react-native-play-install-referrer \\\n  react-native-device-info\n```\n\nVersões mínimas:\n- `react-native >= 0.70.0`\n- `react-native-google-mobile-ads >= 14.0.0`\n- `react-native-play-install-referrer >= 1.1.0` (Android)\n- `@react-native-async-storage/async-storage >= 1.17.0`\n- `react-native-device-info >= 10.0.0`\n\n> **Por que são peer deps e não dependências do SDK:** todas são módulos **nativos**. Se o SDK\n> as declarasse como dependências próprias e o app instalasse outra versão, haveria duas cópias\n> em `node_modules` e o autolinking poderia registrar as duas — classe duplicada no Android,\n> símbolo duplicado no iOS. Como peer deps obrigatórias, o npm 7+ instala junto e existe uma\n> única cópia.\n\n> **`react-native-device-info` é o que alimenta `app_version` e `device_model`.** Sem ela o SDK\n> continua funcionando, mas envia `app_version: '0.0.0'` e `device_model: 'Android'` em todos os\n> eventos — e emite um `console.warn` no primeiro evento. Isso inutiliza qualquer análise por\n> versão de app ou por aparelho no CDP.\n\n---\n\n## Onde pegar a API key\n\nO SDK usa **uma única chave** — a `API Key` do app no Hotfy Console. Vai no header `x-api-key` de todas as chamadas (ads, analytics, devices, push events) e o backend resolve o `app_id`.\n\n**Onde pegar:** painel do Hotfy Console → seu app → Settings → \"API Key\".\n\n### Env var recomendada\n\n```bash\n# .env do seu app (não commitar)\nEXPO_PUBLIC_HOTFY_API_KEY=your-console-api-key\n```\n\n---\n\n## Inicialização\n\nChame `Hotfy.init(...)` **uma vez** no boot do app (ex: dentro de um `useEffect` em `_layout.tsx`).\n\n```ts\nimport { Hotfy } from '@hotfyllc/sdk'\nimport AsyncStorage from '@react-native-async-storage/async-storage'\n\nawait Hotfy.init({\n  apiKey: process.env.EXPO_PUBLIC_HOTFY_API_KEY!,\n  storage: AsyncStorage,\n})\n```\n\n`ads` e `analytics` já vêm **ligados** com a `apiKey` do topo — no caso comum, é só `apiKey` + `storage`. O `init()` é **bloqueante** até os ads resolverem a config (cache local, fetch fresco, ou response default empty); analytics roda em paralelo. Device token aguarda o app chamar `setNativeToken(...)` — não bloqueia.\n\n**Overrides e defaults:**\n\n- `analytics: { ... }` — overrides do módulo de analytics (ex: `baseUrl` default `https://api.cdp.hotfy.com`, `flushAt`).\n- `ads: { ... }` — overrides dos ads (ex: `baseUrl` default `https://wrapper.hotfy.com`). Plataforma detectada automaticamente via `Platform.OS`.\n- `ads: false` — desliga a orquestração de anúncios (app só de analytics).\n- `deviceToken` herda a `apiKey` do topo; omita o bloco se **não precisa de push**.\n\n---\n\n## Mostrar anúncios\n\n```ts\nimport {\n  Hotfy,\n  loadAndShowBootAd,\n  showInterstitial,\n  showRewarded,\n  startAdPreload,\n  AdBanner,\n  useNativeAd,\n} from '@hotfyllc/sdk'\n\n// Splash / cold start\nawait loadAndShowBootAd()\n\n// Pré-carrega pool de interstitials (chame depois do init)\nstartAdPreload()\n\n// Transição entre telas\nawait showInterstitial('home_to_offers')\n\n// \"Desbloqueio\" — premiado\nawait showRewarded({ screenKey: 'premium_unlock' })\n```\n\nTodos os helpers resolvem **sem lançar** mesmo em falha (sem fill, user fechou cedo, ads off no segmento, ad unit não configurado pra essa tela). O caller pode navegar logo após — não bloqueia UX.\n\n### Banner\n\n```tsx\n<AdBanner screenKey=\"home\" size=\"banner\" />\n```\n\n### Native ad (hook)\n\n```ts\nconst { nativeAd, error } = useNativeAd({ screenKey: 'home' })\n```\n\nOs ad units são resolvidos pelo Hotfy Console por `(screenKey, format)` — mude no painel sem rebuild do app.\n\n---\n\n## Tracking de eventos (Analytics)\n\n```ts\n// Evento custom\nHotfy.track('signup', { plan: 'pro', source: 'home_cta' })\n\n// Screen view\nHotfy.screen('Home')\n\n// Identify — vincula anonymousId ao userId autenticado\nawait Hotfy.identify('user-123', { email: 'jane@example.com' })\n\n// Flush manual da queue (raramente necessário — auto-flush a cada 30s ou 20 eventos)\nawait Hotfy.flush()\n```\n\nO `anonymousId` é gerado no primeiro boot e persiste cross-install via attribution.\n\n---\n\n## Ad revenue tracking (ILAR)\n\nEncaminhar PAID events do AdMob pro Analytics automaticamente:\n\n```ts\nHotfy.on('impression', (e) => {\n  Hotfy.trackAdImpression({\n    revenueMicros: e.revenueMicros ?? 0,\n    currency: e.currency,\n    precision: e.precision,\n    adUnitId: e.adUnitId,\n    adSource: e.network,\n    adFormat: e.format,\n  })\n})\n```\n\n`revenueMicros` precisa estar em micros (USD * 1.000.000). O `precision` ('precise' / 'estimated' / 'publisher_provided' / 'unknown') vem do AdMob.\n\n---\n\n## Integração com outros analytics\n\n`Hotfy.on(...)` permite encaminhar eventos de ad pra qualquer outro destino (Meta Events, Firebase Analytics, Appsflyer, etc.). Eventos disponíveis: `show`, `close`, `error`, `impression`, `click`, `load`, `skip`.\n\n```ts\nimport { Hotfy } from '@hotfyllc/sdk'\nimport { AppEventsLogger } from 'react-native-fbsdk-next'\nimport { getAnalytics, logEvent } from '@react-native-firebase/analytics'\n\n// Impressão — Hotfy + Meta + Firebase\nHotfy.on('impression', (e) => {\n  // Hotfy Analytics — revenue tracking\n  Hotfy.trackAdImpression({\n    revenueMicros: e.revenueMicros ?? 0,\n    currency: e.currency,\n    precision: e.precision,\n    adUnitId: e.adUnitId,\n    adSource: e.network,\n    adFormat: e.format,\n  })\n\n  // Meta App Events (só impressões pagas)\n  if (typeof e.value === 'number' && typeof e.currency === 'string') {\n    AppEventsLogger.logEvent('AdImpression', e.value, {\n      ad_type: e.format,\n      ad_platform: e.network,\n      currency: e.currency,\n    })\n  }\n\n  // Firebase Analytics\n  logEvent(getAnalytics(), 'ad_impression', {\n    ad_platform: e.network,\n    ad_source: e.network,\n    ad_format: e.format,\n    ad_unit_name: e.adUnitId,\n    currency: e.currency,\n    value: e.value,\n  })\n})\n\n// Clique\nHotfy.on('click', (e) => {\n  AppEventsLogger.logEvent('AdClick', { ad_format: e.format })\n  logEvent(getAnalytics(), 'ad_click', {\n    ad_platform: e.network,\n    ad_format: e.format,\n  })\n})\n\n// Ad mostrado em fullscreen — supressão de AppState 'background' falso no Android\nHotfy.on('show', (e) => {\n  AppEventsLogger.logEvent('AdShown', { ad_format: e.format })\n})\n```\n\nCada call de `Hotfy.on(...)` retorna uma função pra unsubscribe — chame em cleanup se subscrever dentro de hook:\n\n```ts\nuseEffect(() => {\n  const unsub = Hotfy.on('impression', handler)\n  return unsub\n}, [])\n```\n\n---\n\n## Push notification (Console)\n\nPrimeiro, **habilite o módulo** passando `deviceToken: {}` no `init()` (ele herda a `apiKey` do topo; omita se o app não usa push):\n\n```ts\nawait Hotfy.init({\n  apiKey: process.env.EXPO_PUBLIC_HOTFY_API_KEY!,\n  storage: AsyncStorage,\n  deviceToken: {}, // habilita push\n})\n```\n\n### Recomendado: `Hotfy.attachPush(...)` — 1 chamada, tudo automático\n\nUma única chamada no boot liga o push do Console inteiro. Você injeta o módulo de notificação da stack (`notifications`) e o navegador (`navigate`), e passa o mapa de rotas do app (`routes`). O SDK cuida de: registrar o token, escutar o tap (foreground/background **e cold start**), deduplicar, reportar `opened` ao Console (com `anonymous_id` do CDP) e navegar.\n\n```ts\nimport { Hotfy } from '@hotfyllc/sdk'\nimport * as Notifications from 'expo-notifications'\nimport { router } from 'expo-router'\n\n// screen_key (cadastrada no Console) → rota do app. Única coisa que fica no app —\n// e OPCIONAL: se a campanha mandar `deeplink`, o SDK navega sem mapa nenhum.\nconst PUSH_ROUTES = {\n  card_detalhe: (p) => (p.card_id ? `/card/${p.card_id}` : null),\n  ofertas_lista: () => '/(tabs)/ofertas',\n}\n\nuseEffect(() => Hotfy.attachPush({\n  notifications: Notifications,           // motor de push da stack (injetado)\n  navigate: (path) => router.push(path),  // navegador da stack (injetado)\n  routes: PUSH_ROUTES,\n  requestPermission: true,                // SDK pede a permissão\n  foreground: 'banner',                   // SDK configura banner em foreground\n}), []) // retorna cleanup — o React chama no unmount\n```\n\n- **A ordem não importa.** Se `attachPush` for chamado antes do `Hotfy.init` terminar, o SDK **espera** — não falha.\n- **Não** importa `expo-notifications` nem `expo-router` dentro do SDK (agnóstico) — você injeta ambos.\n- **Convive** com outros fluxos de push: pushes sem `campaign_id` (ex.: chat) são ignorados.\n- `requestPermission` e `foreground` são **opt-in**: apps que já têm fluxo próprio de permissão, ou que já configuram o handler de foreground (por outro fluxo de push), simplesmente não passam essas opções.\n- `onOpen?: (data) => void` — hook opcional chamado a cada open, com o payload já parseado.\n\n#### Sem mapa de rotas: use `deeplink`\n\nSe a campanha no Console mandar um `deeplink` (caminho pronto), o SDK navega direto — o app não declara mapa algum:\n\n```ts\nHotfy.attachPush({ notifications: Notifications, navigate: (p) => router.push(p) })\n```\n\nO `routes` só é necessário quando há **lógica** (montar path a partir de params, ou exigir param obrigatório). A ordem é: `routes[target_screen]` primeiro, `deeplink` como fallback.\n\n#### Apps com splash / boot ad: use `coldStart: 'track'`\n\nSe o seu boot (splash, App Open ad) **já navega** no cold start, o `attachPush` navegando também causaria corrida — os dois disputam o router. Nesse caso deixe o tracking com o SDK e a navegação com o boot:\n\n```ts\nHotfy.attachPush({\n  notifications: Notifications,\n  navigate: (path) => router.push(path), // usado só no tap WARM\n  routes: PUSH_ROUTES,\n  coldStart: 'track', // cold start: contabiliza o open, mas NÃO navega\n})\n```\n\n| `coldStart` | Cold start (app estava morto) | Tap warm (app vivo) |\n|---|---|---|\n| `'navigate'` (default) | rastreia **e** navega | rastreia e navega |\n| `'track'` | **só** rastreia (seu boot navega) | rastreia e navega |\n| `'off'` | ignora completamente | rastreia e navega |\n\nNo modo `'track'` o open do cold start **continua sendo contabilizado** — é justamente o gap que derrubava a taxa de abertura.\n\nE o destino você pega do SDK, no momento em que o seu boot estiver pronto pra navegar:\n\n```ts\n// no fim da sua sequência de boot (após splash / boot ad):\nconst dest = await Hotfy.getLaunchPushDestination() // { path, campaignId } | null\nrouter.replace(dest ? dest.path : '/(tabs)/home')\n```\n\nO SDK já leu o tap, descartou o valor stale, parseou o payload, contabilizou o `opened` e resolveu a rota. Você só decide **quando** navegar — a única parte que depende do fluxo do seu app. É one-shot (a segunda chamada devolve `null`, pra não re-navegar).\n\n### Manual (avançado): montar o wiring à mão\n\nSe precisar de controle fino (ou usar outra lib de push), use as primitivas. Ao conceder permissão, pegue o token e passe ao SDK:\n\n```ts\nimport { Hotfy } from '@hotfyllc/sdk'\nimport * as Notifications from 'expo-notifications'\nimport { Platform } from 'react-native'\n\nconst { data: token } = await Notifications.getDevicePushTokenAsync()\nHotfy.setNativeToken(token, Platform.OS === 'ios' ? 'ios' : 'android')\n\n// No handler de tap:\nconst parsed = Hotfy.parsePushData(response.notification.request.content.data)\nif (parsed.campaignId) Hotfy.trackConsolePushOpened(parsed.campaignId)\nconst dest = Hotfy.resolvePushDestination(parsed, PUSH_ROUTES) // { path, campaignId } | null\n```\n\nEm ambos os caminhos o registro de token cuida de:\n\n- **Change-detection** — skip se o token não mudou e foi sincronizado nos últimos 30 dias.\n- **Retry idempotente** — marca `pending=true` em falha e re-tenta no próximo boot.\n- **Sync dual** — registra no Hotfy Console (`/v1/devices`) E no CDP, em paralelo.\n\nStatus pra UI:\n\n```ts\nconst status = Hotfy.getPushTokenStatus()\n// {\n//   platform: 'android' | 'ios',\n//   hasToken: boolean,\n//   console: { synced, lastSyncedAt, pending },\n//   cdp:     { synced, lastSyncedAt, pending },\n// }\n```\n\n---\n\n## Attribution\n\nO SDK captura automaticamente no primeiro install:\n\n- **Android** — Google Play Install Referrer (autoritativo, com `installBeginTimestamp`).\n- **iOS** — deep link inicial via `Linking.getInitialURL()`.\n\nAcesso síncrono após o `init()`:\n\n```ts\nconst attribution = Hotfy.getAttribution()\n// { utmSource?, utmMedium?, utmCampaign?, gclid?, gbraid?, wbraid?, metaCampaignGroupId?, networkClickId?, ... }\n\nconst days = Hotfy.getDaysSinceInstall()\n// number — dias inteiros desde o install\n\n// Repassa attribution crua pro Analytics (enrich + storage)\nawait Hotfy.captureAttribution(attribution)\n```\n\n---\n\n## Logout\n\n```ts\nawait Hotfy.reset()\n```\n\nReseta o analytics — gera novo `anonymousId` e limpa `userId`. Não afeta a config de ads nem device token.\n\n---\n\n## API completa\n\n### Init\n\n| Método | Descrição |\n|---|---|\n| `Hotfy.init(config)` | Bootstrap — bloqueante nos ads, analytics em paralelo |\n\n### Analytics — tracking, identity, revenue\n\n| Método | Descrição |\n|---|---|\n| `Hotfy.track(event, props?)` | Evento custom |\n| `Hotfy.screen(name, props?)` | Screen view |\n| `Hotfy.identify(userId, traits?)` | Vincula anonymous → user ID |\n| `Hotfy.getAnonymousId()` | Anonymous ID atual (string) |\n| `Hotfy.getUserId()` | User ID setado via identify (ou undefined) |\n| `Hotfy.captureAttribution(params?)` | Envia attribution pro backend de analytics |\n| `Hotfy.registerPushToken(token, meta?)` | (uso direto raro — prefira `setNativeToken`) |\n| `Hotfy.trackPushDelivered(sendId)` | Reporta delivery de push |\n| `Hotfy.trackPushOpened(sendId)` | Reporta tap em push |\n| `Hotfy.trackAdImpression(data)` | Reporta impressão paga (ILAR) |\n| `Hotfy.flush()` | Flush manual da queue |\n| `Hotfy.getDeviceContext()` | OS, advertising_id, app version, locale, timezone |\n| `Hotfy.getAdvertisingId()` | IDFA/AAID (Promise, requer permissão iOS) |\n| `Hotfy.reset()` | Logout — novo anonymousId |\n| `Hotfy.shutdown()` | Para o analytics graciosamente |\n\n### Ads — config + eventos + attribution\n\n| Método | Descrição |\n|---|---|\n| `Hotfy.on(event, handler)` | Subscreve evento (retorna unsub fn) |\n| `Hotfy.off(event, handler)` | Remove listener manualmente |\n| `Hotfy.getConfig()` | `AdsResolvedConfig` resolvida ou null |\n| `Hotfy.getAttribution()` | `AttributionData` capturada (sync) |\n| `Hotfy.getDaysSinceInstall()` | Dias desde install (number) |\n| `Hotfy.getAdUnit(screen, format)` | Ad unit por (screen, format) ou null |\n| `Hotfy.getFallbackAdUnit(screen, format)` | Ad unit fallback |\n| `Hotfy.getAppOpen()` | Ad unit do slot app_open |\n| `Hotfy.getAppOpenType()` | `'app_open' \\| 'interstitial'` |\n| `Hotfy.getAppOpenFallback()` | Ad unit fallback do app_open |\n| `Hotfy.getAppOpenFallbackType()` | Tipo do fallback |\n| `Hotfy.isActive()` | True se ads ativos no segmento |\n| `Hotfy.isReady()` | True quando os ads resolveram |\n| `Hotfy.refresh()` | Força refetch (limpa cache local) |\n| `Hotfy.disableAppOpenOnForeground()` | Opt-out manual do App Open ao voltar do background |\n\n### Push (Console) — device token + open tracking\n\n| Método | Descrição |\n|---|---|\n| `Hotfy.attachPush({ notifications, navigate, routes })` | **Recomendado** — liga tudo em 1 chamada (token + tap warm/cold + dedup + open + navega). Retorna cleanup |\n| `Hotfy.resolvePushDestination(parsed, routes)` | `screen_key` → `{ path, campaignId }` (ou null) — usado internamente pelo attachPush |\n| `Hotfy.parsePushData(data)` | Parse tipado do payload (`campaignId`, `targetScreen`, `targetParams`, …) |\n| `Hotfy.trackConsolePushOpened(campaignId)` | Reporta `opened` ao Console (api_key-only) |\n| `Hotfy.setNativeToken(token, platform)` | Registra FCM/APNS — dispara sync em background |\n| `Hotfy.syncIfNeeded()` | Manual, idempotente |\n| `Hotfy.forceSyncNow()` | Ignora change-detection (debug) |\n| `Hotfy.getPushTokenStatus()` | Status dos sync alvos (console + CDP) |\n\n### Helpers de ad orchestration\n\n| Helper | Descrição |\n|---|---|\n| `loadAndShowBootAd()` | App Open ad na splash |\n| `showInterstitial(screenKey)` | Interstitial via pool pré-carregado |\n| `showRewarded({ screenKey })` | Rewarded ad |\n| `startAdPreload()` | Pré-carrega pool de interstitials |\n| `AdBanner` | Componente banner |\n| `useNativeAd` | Hook pra native ads |\n| `NativeAdView`, `NativeAsset`, `NativeAssetType` | Primitivos de render do native (re-exports do `react-native-google-mobile-ads`) |\n\n---\n\n## Eventos de ad\n\n| Evento | Payload (resumo) | Quando |\n|---|---|---|\n| `load` | `{ format, adUnitId, network }` | Ad carregou |\n| `show` | `{ format, adUnitId, network }` | Ad apresentado fullscreen / em tela |\n| `impression` | `{ format, adUnitId, network, value, currency, precision, revenueMicros }` | PAID event do AdMob (ILAR) |\n| `click` | `{ format, adUnitId, network }` | User clicou no ad |\n| `close` | `{ format, adUnitId, network }` | Ad fechou (rewarded / interstitial) |\n| `error` | `{ format, adUnitId, error }` | Falha de load / show |\n| `skip` | `{ format, screenKey, reason }` | Helper decidiu não mostrar (cooldown, segmento off, sem unit, etc.) |\n\n---\n\n## License\n\nUNLICENSED\n","readmeFilename":"README.md"}