{"_id":"@codedartdev/coinsentry-react","_rev":"12-53f8b230820c830dbf93c39eceefa661","name":"@codedartdev/coinsentry-react","dist-tags":{"next":"0.1.4","latest":"0.2.2"},"versions":{"0.1.0":{"name":"@codedartdev/coinsentry-react","version":"0.1.0","license":"UNLICENSED","_id":"@codedartdev/coinsentry-react@0.1.0","maintainers":[{"name":"erickcrus","email":"erickcrus@gmail.com"}],"homepage":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","bugs":{"url":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend"},"dist":{"shasum":"f2e742dcb39d4d140c43c8a0d6f7777e2f084315","tarball":"https://registry.npmjs.org/@codedartdev/coinsentry-react/-/coinsentry-react-0.1.0.tgz","fileCount":6,"integrity":"sha512-QQKUpaP2co+TP2nesDpbDHPAXIUKeAd2Zk3vg+E6oil9CTKW5I6QQaYPZhSoiR+SoF7THsglyiWgMbDvZeomZg==","signatures":[{"sig":"MEUCIDJdDYc+yLXTxAJ/m3t4blvs/NiqVbTN9V23jqsfsmeCAiEAyf9Tz9HHv5hKKalRYlRhhssd4calyJ5XbXsKieC4GsA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79014},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"54ccb6be4dc10449026cd77de85a354498109023","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"erickcrus","email":"erickcrus@gmail.com"},"repository":{"url":"git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Headless React provider and hooks for CoinSentry SDK session, auth, entity, KYC and realtime state.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"tag":"next","access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.2 <20","@codedartdev/coinsentry-sdk":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/coinsentry-react_0.1.0_1782350417025_0.4175197952687908","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@codedartdev/coinsentry-react","version":"0.1.1","license":"UNLICENSED","_id":"@codedartdev/coinsentry-react@0.1.1","maintainers":[{"name":"erickcrus","email":"erickcrus@gmail.com"}],"homepage":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","bugs":{"url":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend"},"dist":{"shasum":"3308c5e0b1fda6827c857a12e071fe90cd549550","tarball":"https://registry.npmjs.org/@codedartdev/coinsentry-react/-/coinsentry-react-0.1.1.tgz","fileCount":6,"integrity":"sha512-rNf3yZ7skdZHyZs8bN1Cbx1FwF4EGRXSKZxdLqReLpK8yAywm3sPw2XiRMy/Zc/zV3POl5VSglC+cuPP9XegBw==","signatures":[{"sig":"MEUCIQDeSBsnSgl8uaQJv3z9yI6KpLYvH8/m4heruutEPBY3hQIgYcDvMZ2+cvex8FciCuM4gCWKZY5eTFd4+A3NlGf/L+g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202471},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"d7b69add95896f9991a2d21b85241c9a9fa787b3","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"erickcrus","email":"erickcrus@gmail.com"},"repository":{"url":"git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Headless React provider and hooks for CoinSentry SDK session, auth, entity, KYC and realtime state.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"tag":"next","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":">=18.2 <20","@codedartdev/coinsentry-sdk":"0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/coinsentry-react_0.1.1_1783581079835_0.8856749319378878","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@codedartdev/coinsentry-react","version":"0.1.2","license":"UNLICENSED","_id":"@codedartdev/coinsentry-react@0.1.2","maintainers":[{"name":"erickcrus","email":"erickcrus@gmail.com"}],"homepage":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","bugs":{"url":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend"},"dist":{"shasum":"ec46077e066d508d72480e429d896de6c93ac07d","tarball":"https://registry.npmjs.org/@codedartdev/coinsentry-react/-/coinsentry-react-0.1.2.tgz","fileCount":6,"integrity":"sha512-aNPYqECs6TG87ZdC9ZR6XQomB5qAM5bSiweUiGOyOwfFmTjb3FluIC1heojdjxvpnp2PkQCjrgB5neSVr9dWZw==","signatures":[{"sig":"MEUCIQCqVoTXlUWHT/7TGObs2sSeaV+uIOtxCLEKPUK65HGBqgIgDQ9GHDASJmlkFrsT4Ta/PwwaFVPzASiNWyb80B4IKZU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202473},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"7a402e20bada884d420349a14760eaff711801a2","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"erickcrus","email":"erickcrus@gmail.com"},"repository":{"url":"git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Headless React provider and hooks for CoinSentry SDK session, auth, entity, KYC and realtime state.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"tag":"next","access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.2 <20","@codedartdev/coinsentry-sdk":"0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/coinsentry-react_0.1.2_1784034192799_0.21820546896239024","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@codedartdev/coinsentry-react","version":"0.1.3","license":"UNLICENSED","_id":"@codedartdev/coinsentry-react@0.1.3","maintainers":[{"name":"erickcrus","email":"erickcrus@gmail.com"}],"homepage":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","bugs":{"url":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend"},"dist":{"shasum":"8023df39b4c2bfc1600c482001e559bbdb9e5daa","tarball":"https://registry.npmjs.org/@codedartdev/coinsentry-react/-/coinsentry-react-0.1.3.tgz","fileCount":6,"integrity":"sha512-izG2Yidom0dMDiBN4r//roWOK+x4EX1hO6IPII0ePn5ZRQOSVQE7K6BE9xWJlPJcV9iZLypXo43Eiz0PVUYQdg==","signatures":[{"sig":"MEQCIHSRv4bSd3UtvZf0HTeNrYmANF/mAwkFpgPSCRz60wsNAiB25T5gXSg8vY5ezJd6RGFdHHLenk8fAosvp10EfYsQVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202473},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"d80f043ac84a9ad8408fcbe884e4908b23b6174e","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"erickcrus","email":"erickcrus@gmail.com"},"repository":{"url":"git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Headless React provider and hooks for CoinSentry SDK session, auth, entity, KYC and realtime state.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"tag":"next","access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.2 <20","@codedartdev/coinsentry-sdk":"0.1.3"},"_npmOperationalInternal":{"tmp":"tmp/coinsentry-react_0.1.3_1784128878820_0.7733603305249486","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@codedartdev/coinsentry-react","version":"0.1.4","license":"UNLICENSED","_id":"@codedartdev/coinsentry-react@0.1.4","maintainers":[{"name":"erickcrus","email":"erickcrus@gmail.com"}],"homepage":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","bugs":{"url":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend"},"dist":{"shasum":"d969c5ae41c24f29b4772e867bd4b8a14e80c366","tarball":"https://registry.npmjs.org/@codedartdev/coinsentry-react/-/coinsentry-react-0.1.4.tgz","fileCount":6,"integrity":"sha512-6UMPdcyp/cLJDQhk5rN11h+iIaIElZ6cVUw5zMCmETPtqbvVU0/GN7PWAXeiGAtFli4RUrk6w+dCJIS/WQTTig==","signatures":[{"sig":"MEUCIGJ8/nUBs9q6tKom1+OFCrro/g2mhS3VCZUnk+wO4ZaJAiEAxxvZ673kfWdh2Zw8g5Sn/0KE/FyUeHwIGyC8uVUzDcM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":203509},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"e7f328d8806761c18cf37d0034c5685dd8f41741","scripts":{"build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"erickcrus","email":"erickcrus@gmail.com"},"repository":{"url":"git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Headless React provider and hooks for CoinSentry SDK session, auth, entity, KYC and realtime state.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"tag":"next","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":">=18.2 <20","@codedartdev/coinsentry-sdk":"0.1.3"},"_npmOperationalInternal":{"tmp":"tmp/coinsentry-react_0.1.4_1784161509684_0.28136314700494647","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@codedartdev/coinsentry-react","version":"0.1.5","license":"UNLICENSED","_id":"@codedartdev/coinsentry-react@0.1.5","maintainers":[{"name":"erickcrus","email":"erickcrus@gmail.com"}],"homepage":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","bugs":{"url":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend"},"dist":{"shasum":"23b6477ed0c904f91e286c5da0272fff8723ebb9","tarball":"https://registry.npmjs.org/@codedartdev/coinsentry-react/-/coinsentry-react-0.1.5.tgz","fileCount":10,"integrity":"sha512-heaVkaEf0N9K1+uUTiXesQkC6SI4qY5mpWOq2ZF2sh4vWlPUgPQH8XeTKGm8hup0huBNXXM5l3jUdM3p6CJG7A==","signatures":[{"sig":"MEUCIQDV02ddh+/kTfzCDwdgUfXDPb8vl0reBNF0F9ZOJ+8KVQIgetUlBtwPkuJ/bT4/PSPsh57UnwoAvMXQ+zT3lhw4jXE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243591},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./brand":{"types":"./dist/brand.d.ts","import":"./dist/brand.js","default":"./dist/brand.js"}},"gitHead":"ff836ad61526f14d39aea0c37cec759957068b67","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"erickcrus","email":"erickcrus@gmail.com"},"repository":{"url":"git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Headless React provider and hooks for CoinSentry SDK session, auth, entity, KYC and realtime state.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"tag":"next","access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.2 <20","@codedartdev/coinsentry-sdk":"^0.1.4"},"_npmOperationalInternal":{"tmp":"tmp/coinsentry-react_0.1.5_1784323090425_0.5872558132319845","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@codedartdev/coinsentry-react","version":"0.1.6","license":"UNLICENSED","_id":"@codedartdev/coinsentry-react@0.1.6","maintainers":[{"name":"erickcrus","email":"erickcrus@gmail.com"}],"homepage":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","bugs":{"url":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend"},"dist":{"shasum":"eca7f772851331ffe3d44a0e706019448092b63a","tarball":"https://registry.npmjs.org/@codedartdev/coinsentry-react/-/coinsentry-react-0.1.6.tgz","fileCount":10,"integrity":"sha512-50/AIT4tjTFE8reat39cduigFVjSAIyJ52ZX8jJEXE6tcm3MjG/DE9s8eyMPOMCj6gmVceg9hdjNNOxOsuidMw==","signatures":[{"sig":"MEUCIA4Jbl+yxZYxdLMwhwCH4+uyqfE0s/58TPCA43fhZhhrAiEAtZmNH0CxvLFQScQTvmadvPqFjXl6z0qKJYikXO40Xzo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243586},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./brand":{"types":"./dist/brand.d.ts","import":"./dist/brand.js","default":"./dist/brand.js"}},"gitHead":"74d5b991242f56452ef6cbf6a61ee6421a16b27d","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"erickcrus","email":"erickcrus@gmail.com"},"repository":{"url":"git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Headless React provider and hooks for CoinSentry SDK session, auth, entity, KYC and realtime state.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"tag":"next","access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.2 <20","@codedartdev/coinsentry-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/coinsentry-react_0.1.6_1784323613528_0.10435356531472828","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@codedartdev/coinsentry-react","version":"0.1.7","license":"UNLICENSED","_id":"@codedartdev/coinsentry-react@0.1.7","maintainers":[{"name":"erickcrus","email":"erickcrus@gmail.com"}],"homepage":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","bugs":{"url":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend"},"dist":{"shasum":"bcf6295a4c5da152f71b110470ec5ae9154f8506","tarball":"https://registry.npmjs.org/@codedartdev/coinsentry-react/-/coinsentry-react-0.1.7.tgz","fileCount":10,"integrity":"sha512-TxyXJxFjcUZ0g4cOX0Yd+cmIcD7IE2n7+9A3V9LyF1OZAcuUmFuCSj0gQlr6i4Wz/a6fZsZ2nxG7vRK5bg2vnw==","signatures":[{"sig":"MEUCIQCCaE6qdQJ3YBxZq21qoLFRGvmOwxcMtUg0VkPmV02AzQIgFHpoBdJBG67p5/L+ex3VdAGIMyGaS6NvYaIjSz+yyEM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244347},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./brand":{"types":"./dist/brand.d.ts","import":"./dist/brand.js","default":"./dist/brand.js"}},"gitHead":"26003c09d57e7b6f2c1918372599f1c149e3a39b","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"erickcrus","email":"erickcrus@gmail.com"},"repository":{"url":"git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Headless React provider and hooks for CoinSentry SDK session, auth, entity, KYC and realtime state.","directories":{},"sideEffects":false,"_nodeVersion":"18.20.4","publishConfig":{"tag":"next","access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.2 <20","@codedartdev/coinsentry-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/coinsentry-react_0.1.7_1785253440000_0.668521921410073","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@codedartdev/coinsentry-react","version":"0.1.8","license":"UNLICENSED","_id":"@codedartdev/coinsentry-react@0.1.8","maintainers":[{"name":"erickcrus","email":"erickcrus@gmail.com"}],"homepage":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","bugs":{"url":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend"},"dist":{"shasum":"61019c9b794f5ff2016c3d73bbd95d3d68c7075b","tarball":"https://registry.npmjs.org/@codedartdev/coinsentry-react/-/coinsentry-react-0.1.8.tgz","fileCount":10,"integrity":"sha512-CqQ78aSYJYU+GXSltKh1kqqSdPGR0KSYbJ1G01uCoLmTGDVUzZi7XmsSHOL3f25KlyRmBUigk8J7TA5OQ5Mo2A==","signatures":[{"sig":"MEQCIBFqGprBTnpDGHKXawdsrYlxDadxhLNA/nwq+THyMu4uAiAEG6jyA0y+6MLec4Bsx19UVe+o3X54CC/l/TKXcTKoaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":260621},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./brand":{"types":"./dist/brand.d.ts","import":"./dist/brand.js","default":"./dist/brand.js"}},"gitHead":"6bf46e86846c03f25babbe8078fee0316c4c0da0","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.build.json"},"_npmUser":{"name":"erickcrus","email":"erickcrus@gmail.com"},"repository":{"url":"git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Headless React provider and hooks for CoinSentry SDK session, auth, entity, KYC and realtime state.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"tag":"next","access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.2 <20","@codedartdev/coinsentry-sdk":"*"},"_npmOperationalInternal":{"tmp":"tmp/coinsentry-react_0.1.8_1785264822133_0.5442594095476068","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@codedartdev/coinsentry-react","version":"0.2.0","license":"UNLICENSED","_id":"@codedartdev/coinsentry-react@0.2.0","maintainers":[{"name":"erickcrus","email":"erickcrus@gmail.com"}],"homepage":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","bugs":{"url":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend"},"dist":{"shasum":"5f8b3a711d3332b992454e36a55c0397fea6bb6b","tarball":"https://registry.npmjs.org/@codedartdev/coinsentry-react/-/coinsentry-react-0.2.0.tgz","fileCount":15,"integrity":"sha512-XprNzz02meYa6cRqNd/pz/1UoXhCVB0640BCjNID4BZWIuvQ15bpR+Yxj4JTj35tprNL9CC3kPt+02jRx8L+tQ==","signatures":[{"sig":"MEYCIQCDQeOK7zowVO4SJ2wPfoU/aYFiHPB+44/3N1cGYxPFdwIhAPHbSlxwj4gqT5HYFS7MgDAyK0B4KGVk6UuWf8gl9jNh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":357892},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./brand":{"types":"./dist/brand.d.ts","import":"./dist/brand.js","default":"./dist/brand.js"},"./admin-step-up":{"types":"./dist/admin-step-up.d.ts","import":"./dist/admin-step-up.js","default":"./dist/admin-step-up.js"}},"gitHead":"39cfc444808e26395aa964de77a47a566e8e9d5a","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc -p tsconfig.build.json","clean":"node scripts/clean.mjs","prepack":"npm run build"},"_npmUser":{"name":"erickcrus","email":"erickcrus@gmail.com"},"repository":{"url":"git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Headless React provider and hooks for CoinSentry SDK session, auth, entity, KYC and realtime state.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@codedartdev/slide-captcha-react":"^0.1.9"},"peerDependencies":{"react":">=18.2 <20","@codedartdev/coinsentry-sdk":"^0.2.0","@codedartdev/slide-captcha-react":"^0.1.9"},"_npmOperationalInternal":{"tmp":"tmp/coinsentry-react_0.2.0_1785433871832_0.4485271149857064","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@codedartdev/coinsentry-react","version":"0.2.1","license":"UNLICENSED","_id":"@codedartdev/coinsentry-react@0.2.1","maintainers":[{"name":"erickcrus","email":"erickcrus@gmail.com"}],"homepage":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","bugs":{"url":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend"},"dist":{"shasum":"9e0a99967292766a4096a3606618bfc7ac20f8b8","tarball":"https://registry.npmjs.org/@codedartdev/coinsentry-react/-/coinsentry-react-0.2.1.tgz","fileCount":15,"integrity":"sha512-592GWGwJUPSkJSlgYHBPJy0IUAxeEnYTVtCkG0RcvtMRu3eHeVYb7DCpnhDwo5BEG9/vD/mJXTZsNr2ggDMt2g==","signatures":[{"sig":"MEUCIQCdnS8LEVr2R7L6lop9ZCqj1s885nVLWm79eHQuRoqUvwIgF0Ur5WTwK2FrK/WGPPK9KQl4SwQrOrE4Z/cXloDltFw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":402574},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./brand":{"types":"./dist/brand.d.ts","import":"./dist/brand.js","default":"./dist/brand.js"},"./admin-step-up":{"types":"./dist/admin-step-up.d.ts","import":"./dist/admin-step-up.js","default":"./dist/admin-step-up.js"}},"gitHead":"9b18f571cfa3e3ea0600d833afd237ce078d5469","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc -p tsconfig.build.json","clean":"node scripts/clean.mjs","prepack":"npm run build"},"_npmUser":{"name":"erickcrus","email":"erickcrus@gmail.com"},"repository":{"url":"git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Headless React provider and hooks for CoinSentry SDK session, auth, entity, KYC and realtime state.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@codedartdev/slide-captcha-react":"^0.1.10"},"peerDependencies":{"react":">=18.2 <20","@codedartdev/coinsentry-sdk":"^0.2.2","@codedartdev/slide-captcha-react":"^0.1.10"},"_npmOperationalInternal":{"tmp":"tmp/coinsentry-react_0.2.1_1788203557515_0.04966356532149252","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"_id":"@codedartdev/coinsentry-react@0.2.2","bugs":{"url":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend"},"dist":{"shasum":"c72fc66d3a53602329307c3755d007679e338025","tarball":"https://registry.npmjs.org/@codedartdev/coinsentry-react/-/coinsentry-react-0.2.2.tgz","fileCount":15,"integrity":"sha512-KHD413NI/Q10/pybdaq2yvXRPmlR3W9cncnyqhK8a54beIOFk+d4UaznmE9Kf2MoEV46Xrx9VLn5SY5mrJWXEg==","signatures":[{"sig":"MEYCIQCtdb5ztg2Ky/RNYeO2ARGn7BFqSKzLnIU9AhunJf++AgIhAInyide7FcxeXEapIyaTt7tuTSZwnyaJ+0xzcIsSmrhH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBlbiGFfrYm15sAySAWCw84Pgg6E9ZC47kAnbpsDGD+yAiACxhi6eLOKo9s0CuZtWN2uVTqGJ9sPTLCrTvYaiE2ACw=="}],"unpackedSize":428677},"name":"@codedartdev/coinsentry-react","type":"module","_from":"file:.tmp/snapshot-release/codedartdev-coinsentry-react-0.2.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./brand":{"types":"./dist/brand.d.ts","import":"./dist/brand.js","default":"./dist/brand.js"},"./admin-step-up":{"types":"./dist/admin-step-up.d.ts","import":"./dist/admin-step-up.js","default":"./dist/admin-step-up.js"}},"license":"UNLICENSED","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc -p tsconfig.build.json","clean":"node scripts/clean.mjs","prepack":"npm run build"},"version":"0.2.2","_npmUser":{"name":"erickcrus","email":"erickcrus@gmail.com"},"homepage":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","_resolved":"/Volumes/Drive/Repos/coinsentry-frontend/.tmp/snapshot-release/codedartdev-coinsentry-react-0.2.2.tgz","_integrity":"sha512-KHD413NI/Q10/pybdaq2yvXRPmlR3W9cncnyqhK8a54beIOFk+d4UaznmE9Kf2MoEV46Xrx9VLn5SY5mrJWXEg==","repository":{"url":"git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","type":"git","directory":"packages/react"},"_npmVersion":"10.9.3","description":"Headless React provider and hooks for CoinSentry SDK session, auth, entity, KYC and realtime state.","directories":{},"maintainers":[{"name":"erickcrus","email":"erickcrus@gmail.com"}],"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@codedartdev/slide-captcha-react":"^0.1.10"},"peerDependencies":{"react":">=18.2 <20","@codedartdev/coinsentry-sdk":"^0.2.4","@codedartdev/slide-captcha-react":"^0.1.10"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/coinsentry-react_0.2.2_1789299592187_0.2442416701609802"}}},"time":{"created":"2026-06-25T01:20:16.868Z","modified":"2026-09-13T11:39:52.463Z","0.1.0":"2026-06-25T01:20:17.153Z","0.1.1":"2026-07-09T07:11:20.006Z","0.1.2":"2026-07-14T13:03:12.933Z","0.1.3":"2026-07-15T15:21:18.954Z","0.1.4":"2026-07-16T00:25:09.882Z","0.1.5":"2026-07-17T21:18:10.593Z","0.1.6":"2026-07-17T21:26:53.667Z","0.1.7":"2026-07-28T15:44:00.165Z","0.1.8":"2026-07-28T18:53:42.278Z","0.2.0":"2026-07-30T17:51:11.980Z","0.2.1":"2026-08-31T19:12:37.670Z","0.2.2":"2026-09-13T11:39:52.286Z"},"bugs":{"url":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend"},"license":"UNLICENSED","homepage":"https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","repository":{"url":"git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/coinsentry-frontend","type":"git","directory":"packages/react"},"description":"Headless React provider and hooks for CoinSentry SDK session, auth, entity, KYC and realtime state.","maintainers":[{"name":"erickcrus","email":"erickcrus@gmail.com"}],"readme":"# @codedartdev/coinsentry-react\n\nConsulte o [changelog](./CHANGELOG.md) e o guia de migração v2 publicado com o\nSDK/Next.\n\nProviders e hooks React headless para o SDK CoinSentry. Este pacote gerencia\nestado de sessao, autenticacao, entidade ativa, KYC inicial, realtime e tema\nwhitelabel. As UIs opinativas são o modal CAPTCHA opcional e o botão de acesso\nexplícito ao Admin.\n\n```bash\nnpm install @codedartdev/coinsentry-react@latest\n```\n\nA versão `0.2.1` é publicada no canal npm padrão `latest` e deve ser usada com\n`@codedartdev/coinsentry-sdk@^0.2.2` e\n`@codedartdev/slide-captcha-react@^0.1.10`.\n\n## Responsabilidade\n\n- `CoinSentryProvider`.\n- `useCoinSentryClient`.\n- `useCoinSentryAuth`.\n- `useCoinSentrySession`.\n- `useCoinSentryEntity`.\n- `useCoinSentryKyc`.\n- `useCoinSentryRealtime`.\n- `useCoinSentryOrderbook`.\n- `useCoinSentryPublicTrades`.\n- `CoinSentryThemeProvider`.\n- `useCoinSentryTheme`.\n- `useCoinSentryBrand`.\n- `useCoinSentryAdminSurface`.\n- `CoinSentryAdminPanelButton`.\n- `CoinSentryAdminStepUp` pelo subpath\n  `@codedartdev/coinsentry-react/admin-step-up`.\n- `CoinSentryLogo`.\n- `CoinSentryFaviconSync`.\n- Callbacks para erros, precondicoes e mudanca de sessao.\n\n## Fora Do Escopo\n\n- HeroUI, Tailwind ou layout da whitelabel.\n- Modal global de entidade ou KYC.\n- Redirect automatico para login.\n- Toasts ou mensagens de produto.\n- Resolver KYC visualmente; use `@codedartdev/coinsentry-kyc-react`.\n\n## Uso\n\n```tsx\n'use client';\n\nimport { createCoinSentryClient, createCoinSentryRealtime } from '@codedartdev/coinsentry-sdk';\nimport {\n  CoinSentryCaptchaProvider,\n  CoinSentryProvider,\n} from '@codedartdev/coinsentry-react';\n\nconst client = createCoinSentryClient({ baseUrl: '/' });\nconst realtime = createCoinSentryRealtime(adapter);\n\nexport function App({ session, kyc }) {\n  return (\n    <CoinSentryProvider\n      client={client}\n      realtime={realtime}\n      initialSession={session}\n      initialKycOverview={kyc}\n      callbacks={{\n        onUnauthorized: () => router.push('/login'),\n        onEntityRequired: () => openEntitySelector(),\n        onKycRequired: () => openKyc(),\n        onProxyRejected: (error) => reportDiagnostic(error),\n        onSessionChanged: (nextSession) => persistSessionState(nextSession),\n      }}\n    >\n      <CoinSentryCaptchaProvider>\n        <Dashboard />\n      </CoinSentryCaptchaProvider>\n    </CoinSentryProvider>\n  );\n}\n```\n\n## Tema Whitelabel\n\n`CoinSentryThemeProvider` carrega `GET /api/brand/theme` pelo cliente\nCoinSentry ou usa `initialBrandConfig` vindo do SSR. Ele aplica CSS variables,\n`data-theme`, classe `dark`, fonte base e favicon, mas nao exige Tailwind,\nHeroUI ou componentes visuais da whitelabel.\n\n```tsx\nimport { CoinSentryProvider, CoinSentryThemeProvider, CoinSentryLogo } from '@codedartdev/coinsentry-react';\n\nexport function App({ client, brand }) {\n  return (\n    <CoinSentryProvider client={client}>\n      <CoinSentryThemeProvider initialBrandConfig={brand}>\n        <header>\n          <CoinSentryLogo />\n        </header>\n        <Dashboard />\n      </CoinSentryThemeProvider>\n    </CoinSentryProvider>\n  );\n}\n```\n\nSem SSR, omita `initialBrandConfig`; o provider buscara o payload via\n`client.brand.getConfig()`.\n\n```tsx\nfunction ThemeToggle() {\n  const { mode, resolvedMode, setMode, status } = useCoinSentryTheme();\n\n  return (\n    <button type=\"button\" onClick={() => setMode(resolvedMode === 'dark' ? 'light' : 'dark')}>\n      {status === 'ready' ? mode : 'loading'}\n    </button>\n  );\n}\n```\n\nTokens emitidos incluem `--background`, `--foreground`, `--primary`,\n`--rising`, `--downing`, `--font-sans`, `--font-size-base`,\n`--text-title`, `--text-body`, `--text-title-color` e demais tokens do\ncontrato de branding. Use esses tokens no CSS da aplicacao cliente.\n\n### Entry point isolado\n\nPara branding, importe `@codedartdev/coinsentry-react/brand`. Esse subpath nao\ncarrega sessao, KYC, orderbook ou realtime.\n\n```tsx\nimport {\n  CoinSentryBrandProvider,\n  CoinSentryBrandStyle,\n  CoinSentryLogo,\n  useCoinSentryTheme,\n} from '@codedartdev/coinsentry-react/brand';\n\nexport function BrandRoot({ config, mode, nonce, client, children }) {\n  return (\n    <CoinSentryBrandProvider client={client} initialBrandConfig={config} initialMode={mode} nonce={nonce}>\n      <CoinSentryBrandStyle config={config} nonce={nonce} />\n      {children}\n    </CoinSentryBrandProvider>\n  );\n}\n```\n\nCom `initialBrandConfig`, a hidratacao nao busca a brand nem regenera a folha\nSSR. `updatePreview`, `resetPreview`, `saveBrand`, `isDirty` e `saveError`\npertencem ao provider. A preferencia light/dark e a unica informacao persistida\nautomaticamente; preview de configuracao nunca substitui o backend em paginas\npublicas.\n\nUse `textTitle`, `textSubtitle`, `textPrimary`, `textSecondary` e `textLink`\npara hierarquia textual; `button*` e `input*` para controles; `rising` e\n`downing` apenas para direcao de mercado.\n\n`realtime` e opcional. Quando fornecido, o provider assina o evento\n`balance.updated` da entidade ativa somente para snapshots com\n`authorities.customer === true` e atualiza `activeEntity.balances`. A UI\ncontinua dona de notificacoes, toasts, modais e outros eventos de produto.\n\nO provider conecta o adapter automaticamente. `false` fica reservado para\nintegracoes que deliberadamente possuem outro owner; nao combine ownership\nmanual com o do provider.\n\nA autorização de um canal privado acontece somente depois de o adapter receber\num `socket_id` da conexão. Portanto, ausência de `/broadcasting/auth` junto de\numa falha de conexão WebSocket não significa que a assinatura React foi\nremovida; consumidores devem observar o status do adapter e corrigir o\ntransporte antes de diagnosticar a autorização HTTP.\n\n## Hooks\n\n```tsx\nfunction AccountButton() {\n  const { user, isAuthenticated } = useCoinSentryAuthState();\n  const { login, logout, clearSession } = useCoinSentryAuthActions();\n  const security = useCoinSentryAccountSecurity();\n  const { session, refresh } = useCoinSentrySession();\n  const { activeEntity, entities, selectEntity } = useCoinSentryEntity();\n  const { initialOverview, refreshOverview } = useCoinSentryKyc();\n  const realtime = useCoinSentryRealtime();\n\n  // UI totalmente do cliente\n}\n```\n\nPara contatos de saque, `useCoinSentryWalletContacts({ networkId })` carrega e\nfaz mutações pelo domínio tipado do SDK, descartando respostas quando entidade\nou rede mudam. `useCoinSentryWalletContactJurisdiction({ countryCode, locale })`\nconsome uma projeção same-origin opcional publicada pelo pacote Next. Ela serve\nsomente para apresentação de inputs e nunca determina o que a API financeira\naceita; locale altera apenas a apresentação e a entidade ativa participa do\nisolamento do estado.\n\n`useCoinSentryWalletContactReferenceCatalog({locale, enabled})` lê a projeção\nsame-origin mínima usada no cadastro: somente países e custódias publicados\npelo backend. Ative o hook ao abrir o formulário. O BFF mantém contextos e a\nlista extensa de finalidades fora do browser, evitando uma transferência grande\ne uma chamada desnecessária na entrada da tela. Países são consumidos por\n`third_party_self_custody`, `third_party_exchange` e `payment`; os tipos de\nmesma titularidade não dependem dessa lista.\n\n```tsx\nimport {\n  useCoinSentryCryptoTransferReferences,\n  useCoinSentryWalletContactReferenceCatalog,\n  useCoinSentryWalletContacts,\n} from '@codedartdev/coinsentry-react';\n\nfunction WalletContactFields({\n  networkId,\n  locale,\n  selectedContact,\n  listedCoinId,\n  amount,\n  transferType,\n}: {\n  networkId: number | null;\n  locale: string;\n  selectedContact: {id: number | string} | null;\n  listedCoinId: number | null;\n  amount: string;\n  transferType: string;\n}) {\n  const {\n    contacts,\n    purposes,\n    status: contactsStatus,\n    error: contactsError,\n    refresh: refreshContacts,\n    createContact,\n    updateContact,\n  } = useCoinSentryWalletContacts({networkId, locale});\n  const transferReferences = useCoinSentryCryptoTransferReferences({\n    direction: 'withdrawal',\n    locale,\n    enabled: Boolean(selectedContact),\n    walletContactId: selectedContact?.id,\n    listedCoinId,\n    networkId,\n    amount,\n    transferType,\n  });\n  const contactInputCatalog = useCoinSentryWalletContactReferenceCatalog({\n    locale,\n    enabled: true,\n  });\n\n  void {\n    contacts, purposes, contactsStatus, contactsError, refreshContacts,\n    createContact, updateContact, transferReferences, contactInputCatalog,\n  };\n  return null;\n}\n```\n\n`useCoinSentryWalletContacts` retorna `contacts`, `purposes`, `status`, `error`,\n`refresh`, `createContact` e `updateContact`. A troca de entidade ou rede limpa o\nestado antes da nova leitura, nunca expõe a projeção do escopo anterior nem por\num render e ignora respostas atrasadas. Os payloads de criação e edição usam a\ntaxonomia publicada pelo SDK: `self_custody` e `exchange` omitem\n`beneficiary`; `third_party_self_custody`, `third_party_exchange` e `payment`\nexigem o campo, e somente `payment` recebe a custódia explicitamente.\n`ownership_type` é consumido apenas da resposta. Falhas do GET permanecem em `error`\naté `refresh`; um `404` no update remove o item obsoleto e recarrega a rede antes\nde propagar o erro para a interface.\n\n`useCoinSentryCryptoTransferReferences` publica a projeção contextual da\noperação. Em saques, informe `walletContactId` e, progressivamente,\nesses fatos ao backend e não decide se o contato é compatível. Leituras equivalentes de contatos e referências são\nsingle-flight por client, entidade e escopo: o replay de efeitos do Strict Mode\ncompartilha a requisição em voo, sem iniciar e cancelar uma segunda chamada.\nTrocas reais de entidade, rede, contato, direção, locale ou contexto continuam\nproduzindo uma nova leitura canônica.\n\nUse `enabled: false` para catálogos necessários somente em uma interação, como\num modal. Ative a leitura quando o usuário abrir o fluxo e mantenha-a ativa\nenquanto o mesmo escopo for reutilizado; assim a entrada passiva na página não\ncria uma chamada e reaberturas não repetem uma leitura já resolvida.\n\nPara o cadastro de wallet contact, prefira o hook específico de referência em\nvez de solicitar `direction: 'deposit'` diretamente. A rota de saque pode exigir\num contato antes de publicar seu contexto, enquanto a projeção do BFF entrega\nsomente as opções de entrada necessárias e conserva o catálogo grande no\nservidor.\n\nO hook devolve a projeção sem reinterpretar códigos. Para um saque, combine-o\ncom `applicableCryptoWithdrawalNatureCodes` do SDK; o helper usa apenas os\nmetadados de aplicabilidade publicados e não deriva finalidade por texto,\ncategoria ou código regulatório.\n\nAs coleções do catálogo são normalizadas pelo SDK na fronteira HTTP. Se uma\nresposta parcial omitir uma lista, o hook expõe uma lista vazia em vez de\ninventar opções ou lançar uma exceção durante o render. A ausência de uma lista\nopcional não reprova um contato persistido; a aceitação final ocorre no backend\ndurante a solicitação.\n\n## Auth E Session\n\n- O contrato Auth v2 usa somente `next_action` para distinguir\n  `authenticated`, `two_factor_required`, `entity_selection_required` e\n  `mfa_enrollment_required`.\n- O fluxo SDK mantém `challenge.id` somente em memória; componentes e hooks não\n  recebem nem persistem o identificador em URL ou storage.\n- `useCoinSentryAuth()` expoe `login`, `register`, `completeTwoFactor`,\n  `selectAuthenticationEntity`, `bootstrap`,\n  `logout`, `refresh`, `user`, `setUser`, `updateUser`, `isAuthenticated`,\n  `isLoading`, `requiresEntitySelection`, `recentTransactions` e\n  `syncRecentTransactions`.\n- Para reduzir rerenders, prefira `useCoinSentryAuthState()` e\n  `useCoinSentryAuthActions()`. Entidades possuem a mesma separacao com\n  `useCoinSentryEntityState()` e `useCoinSentryEntityActions()`.\n- `clearSession()` limpa localmente sessao, usuario, entidades, saldos e\n  transacoes. Use-o ao receber uma expiracao ja confirmada; ele nao repete a\n  chamada de logout.\n- `useCoinSentryRecentTransactions<T>()` isola consumidores da lista recente.\n- `useCoinSentryAccountSecurity()` expoe senha, 2FA, sessoes e verificacao de\n  e-mail pelo SDK, sem criar estado global para segredos efemeros.\n- `useCoinSentrySession()` expoe a sessao atual e refresh sem duplicar UI.\n- `refresh()` usa o bootstrap canônico `GET /user`. Para bootstraps e troca de\n  rota, use `refresh({ staleMs: 60_000 })` para reaproveitar uma sessao recente\n  sem repetir `/user`.\n- Chamadas concorrentes de `refresh()` compartilham o mesmo request em voo.\n- Login e 2FA completos hidratam diretamente o payload validado pelo SDK.\n  Registro executa um unico refresh canonico antes de expor o resultado.\n- `onSessionChanged` tambem e chamado quando a sessao e limpa no logout ou em\n  erro `unauthenticated`.\n- Requests assíncronos possuem ownership de lifecycle: unmount cancela o\n  trabalho em voo, respostas antigas são descartadas e setters não são\n  executados durante render ou depois da desmontagem.\n\n### Alternancia explicita para o Admin\n\n`CoinSentryAdminPanelButton` aparece somente quando\n`session.authorities.admin.available === true`. Essa autoridade controla apenas\nvisibilidade: não autentica o Admin e nunca inicia step-up em efeito ou\nrestauração de sessão.\n\n```tsx\nimport {\n  CoinSentryAdminPanelButton,\n  useCoinSentryAdminSurface,\n} from '@codedartdev/coinsentry-react';\n\nfunction Header() {\n  const { isAvailable, openAdminPanel } = useCoinSentryAdminSurface();\n\n  return (\n    <header>\n      {isAvailable ? (\n        <CoinSentryAdminPanelButton\n          label=\"Acessar painel Admin\"\n          variant=\"subtle\"\n        />\n      ) : null}\n    </header>\n  );\n}\n```\n\nO componente usa os tokens CSS do branding, nao faz prefetch e executa uma\nnavegacao documental fixa para `/admin`. `openAdminPanel()` expoe a mesma acao\npara UIs proprias. A autorizacao e o step-up continuam no BFF.\n\nO controlador `CoinSentryAdminStepUp` é uma máquina explícita com os estados\n`idle`, `checking`, `challenge_required`, `enrolling`,\n`acknowledging_recovery_codes`, `authenticated`, `redirecting` e `error`. Ele\ncoalesce uma operação em voo, cancela no unmount, ignora respostas obsoletas,\nconsulta `/admin/api/me` uma única vez depois de `authenticated` e executa o\nredirect apenas uma vez. TOTP, recovery codes e challenge permanecem somente\nem memória. Um `401` limpa esse estado e chama `onUnauthorized` uma única vez;\no comportamento padrão usa `window.location.replace('/login')`, podendo ser\nsubstituído por aplicações que componham sua própria navegação.\n\nO pacote Next compõe esse controlador com `CoinSentryThemeProvider`,\n`CoinSentryLogo` e o snapshot server-side da brand. Aplicações que optarem por\ncomposição própria devem fazer o mesmo, em vez de manter outra máquina de\nstep-up.\n\n## Entity\n\n`useCoinSentryEntity()` preserva a política headless da whitelabel:\n\n- um snapshot autenticado pode não ter entidade ativa;\n- `selectAuthenticationEntity(uuid)` conclui a seleção pendente na máquina de\n  autenticação e preserva o challenge somente dentro do SDK;\n- `switchEntity(uuid)` troca a entidade depois da autenticação pelo endpoint de\n  settings;\n- ambas aceitam `{ signal }` e bloqueiam submissões concorrentes;\n- `401`, `419`, cancelamento ou snapshot inconsistente não fabricam sessão;\n- `refreshEntities` e `updateBalance`;\n- saldos vindos no topo de sessao/login/select sao mesclados na entidade ativa;\n- `updateBalance` aceita tanto\n  `updateBalance('BRL', '10.00', '0.00', '10.00')` quanto\n  `updateBalance({ currency: 'BRL', available: '10.00', locked: '0.00' })`;\n- nenhum modal obrigatorio.\n\n## CAPTCHA\n\n`CoinSentryCaptchaProvider` deve ficar dentro do `CoinSentryProvider` e,\nnormalmente, apenas no layout de autenticação. O SDK abre o modal sob demanda;\nlogin, registro e recuperação recebem somente seus campos funcionais. A prova\nnão entra em estado público, URL ou storage.\n\nO provider cria um adapter estável e mantém no máximo uma aquisição lógica por\nformulário e propósito. Consumidores concorrentes do mesmo propósito recebem a\nmesma promise; a requisição `GET /slide-captcha/new` em voo também é\ncompartilhada. Desafios carregados, provas verificadas e provas consumidas têm\nciclos separados, de modo que uma prova consumida nunca seja reutilizada.\n\nNo unmount, requests e listeners são cancelados, mapas internos são limpos e\nrespostas tardias são ignoradas. O replay de setup/cleanup do React Strict Mode\nnão registra outro adapter nem cria uma segunda inicialização lógica. Novo\ndesafio só ocorre após expiração, erro recuperável, recuperação controlada de\nCSRF ou ação explícita.\n\n## KYC E Realtime\n\n`useCoinSentryKyc()` expoe o overview SSR inicial e helpers para buscar\noverview/status. Ele nao decide fluxo localmente.\n\n`useCoinSentryRealtime()` retorna o adapter injetado ou `null`. O provider usa\nesse adapter apenas para manter saldo de entidade em tempo real. A UI do\ncliente decide quais outros canais assinar e como renderizar esses eventos.\n\n## Market Realtime\n\n`useCoinSentryOrderbook()` e `useCoinSentryPublicTrades()` entregam dados de\nmercado prontos para UI sem expor store, snapshot HTTP ou assinatura de canal:\n\n```tsx\nfunction Book() {\n  const book = useCoinSentryOrderbook({ symbol: 'BTC_USDT', depth: 50 });\n  const trades = useCoinSentryPublicTrades({ symbol: 'BTC_USDT', limit: 50 });\n\n  return (\n    <>\n      <span>{book.bids[0]?.price ?? '-'}</span>\n      <span>{trades.trades[0]?.price ?? '-'}</span>\n    </>\n  );\n}\n```\n\nO hook carrega snapshot HTTP inicial, assina `orderbook.{symbol}` e substitui\no book em `.orderbook.updated`. Trades publicos chegam por `.trade.executed`\nno mesmo canal, com dedupe por `id`.\n\nSe o adapter realtime expuser `subscribeStatus`, os hooks refazem o snapshot\nHTTP ao reconectar para reancorar o estado local. Payload invalido de\n`.orderbook.updated` tambem dispara refresh e nao corrompe o book atual.\nCancelamentos por cleanup ou troca de simbolo sao tratados como neutros: nao\nmudam o status para `error`.\n\nPara reduzir churn em React Strict Mode e dispositivos lentos, os hooks mantem\ncache HTTP curto e adiam o release final por uma janela pequena. Remount rapido\nreaproveita o request/subscription em voo; quando nao ha consumidores, o timer\nlimpa subscriptions, abort pendente e entradas internas.\n\n## Contrato De UI\n\nO pacote nunca abre modal sozinho. Ele apenas expoe estado e callbacks:\n\n- `requiresEntitySelection`;\n- `onUnauthorized`;\n- `onKycRequired`;\n- `onEntityRequired`;\n- `onProxyRejected`;\n- `onSessionChanged`.\n\nIsso preserva liberdade de UI sem esconder diagnosticos importantes.\n\n## Estado Atual\n\nVersão atual `0.2.1`, publicada no dist-tag npm padrão `latest`. O pacote\ngera `dist`, `.d.ts`, `.d.ts.map` e sourcemaps por um `prepack` limpo e\nreprodutível. O pacote permanece `UNLICENSED`.\n\n### Snapshot autenticado e lifecycle (0.2.2)\n\nLogin, cadastro, 2FA, seleção de entidade e `refresh()` instalam o mesmo snapshot\ncompleto, incluindo `assets`, `customer_context` e `snapshot`. O provider mantém\nesse estado em memória e não usa `generated_at` como TTL ou revisão.\n\n`refresh({staleMs: 60000})` reutiliza um login recente. Leituras simultâneas\ncompartilham `/user`. O `signal` cancela a espera do consumidor; o transporte\ncompartilhado pertence ao provider e é invalidado no logout ou troca de contexto.\nApós uma resposta de bloqueio, use `refresh({reason: 'blocking_response'})`:\napenas uma revalidação por geração impede loops. Refresh manual continua\npossível. Reconexão, retomada e eventos de KYC devem chamar a mesma ação.\n\nA troca de entidade remove imediatamente catálogo, saldos e entidade ativa\nanteriores enquanto espera o novo snapshot. Uma falha não restaura dados antigos\ncomo se estivessem validados. Trocar o cliente ou a identidade do `initialSession`\nremonta os contextos; alteração visual de tema não é troca de contexto financeiro.\n\n`useCoinSentrySession().contextKey` é uma identidade opaca em memória para chaves\nde leituras privadas e reset de formulários na troca de geração. Não a envie ao\nbackend. Mudanças de saldo/KYC na mesma identidade não alteram essa chave.\n\nConsuma `resolveCoinSentryAssetAvailability` do SDK 0.2.4 para apresentar os estados\nno web/nativo. Bloqueios de cliente não concedem autoridade nem MFA administrativo.\n","readmeFilename":"README.md"}