{"_id":"@pixygon/auth","name":"@pixygon/auth","description":"Shared authentication package for all Pixygon applications","license":"MIT","homepage":"https://github.com/pixygon/pixygon-packages#readme","repository":{"type":"git","url":"git+https://github.com/pixygon/pixygon-packages.git"},"keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist-tags":{"latest":"1.7.1"},"versions":{"1.0.0":{"name":"@pixygon/auth","version":"1.0.0","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.0.0","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"f86cd03fa1f3bd895eebd39835a3c757fc34687d","unpackedSize":311287,"fileCount":27,"integrity":"sha512-4GxahxtcGtNvuIwGkUEFq6mWn/TuEbGdgFzM8amj1G9BKZ9sJJotCdDln5q9kKouducq0vnEdrjSlkbBp5KA0g==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.0.0.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"849d9d2c71b609a4816ce9175ee6e3940064c2fb","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.7.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"25.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.0.0_1769793395732_0.5539140301475647","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@pixygon/auth","version":"1.1.0","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.1.0","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"0ab4a3b34769e3bd769319b0612657439e3471aa","unpackedSize":325076,"fileCount":27,"integrity":"sha512-e5JWPlcUUaTOc7Rq+LwNy2jpiSk+lwL6a1hBcfX/jmkuapv3eRJt0DcFZGySHBIlLvpkE/XtvZC5uAhQ9KaTXQ==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.1.0.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"4ed237b7741ef7ada8f46f90e0148a314a411b5b","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.12.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.1.0_1775662093915_0.6264856539377153","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@pixygon/auth","version":"1.2.0","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.2.0","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"cae1be298643d0aa6b32349d70193245a2488beb","unpackedSize":328383,"fileCount":27,"integrity":"sha512-DIIwZVg0WnbPAmDuBnPV1EzPc94AwW2mHKLI90vhVIs7JuqMEBmIbdBieup5HNac8/tHic2dXqUbqCx0JATLsw==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.2.0.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"4d501aee0367854ac5465f4782f5a39e73eb6e0a","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.12.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.2.0_1776177910098_0.07556052036353544","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@pixygon/auth","version":"1.2.1","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.2.1","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"0a0772dc3102eaaba71d9e8f70b92ce8d8a3329a","unpackedSize":329019,"fileCount":27,"integrity":"sha512-rzs7iF3KxNwXO/CxUAKwXfrSqv9g0uGtRXi8zZrTIVY75myOKkpTeIhYfkvQMaDuiFurQMt2uu+HzXi/oIZeSg==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.2.1.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"4d501aee0367854ac5465f4782f5a39e73eb6e0a","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.12.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.2.1_1777030512179_0.12892447654156736","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@pixygon/auth","version":"1.3.0","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.3.0","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"1281582904bd07254426445cada9f7dfcdc42921","unpackedSize":344365,"fileCount":28,"integrity":"sha512-nM8W/ihWcQOyxIx2JODCfxeyj+gDwxczzR5lYu+rCX0/74zwcMFlFYQMdbMviDPznp16RYa6xhbhN8iwqx535g==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.3.0.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"8d81a3dd1b47e08bd2d14aadec2d047f8718d499","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.12.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.3.0_1777031769507_0.3684801951892607","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@pixygon/auth","version":"1.3.1","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.3.1","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"c9ef737baf56e25f9beac59b9720ecee64718bb4","unpackedSize":353224,"fileCount":28,"integrity":"sha512-yaWPG30Ev44E5DYfMItS9ta0D1QIt1aCM+oPnfjJU07Cbg0kGhPA3vEzCFwWghM7AV87ufdLU+dvyLnJx/v4Pg==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.3.1.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"f0afbba0dc1a55206ac362ac69967e89c93ffd18","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.12.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.3.1_1777032635941_0.35242776407392973","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@pixygon/auth","version":"1.3.2","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.3.2","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"1c510022c3d3b91bbbb917a44d56999cad29150b","unpackedSize":354269,"fileCount":28,"integrity":"sha512-UsRBpElnJ8sY0PbDxzXU4jCqJbmF/tT36ohxOZ+iTjffpr/N4N7pXwjDDgitaV36YTglsewJZ6hXLq80Hgxbkg==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.3.2.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"6403f4fb07b58d1a27313b32a57bdd8e983c09e9","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.12.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.3.2_1777033979286_0.24061228504401222","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@pixygon/auth","version":"1.4.0","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.4.0","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"7a4a8d611c254d1d8f7e9d80b52f768e97bf2342","unpackedSize":418566,"fileCount":29,"integrity":"sha512-Ic2zTVTQdtoTcU6IuqXAUNhhtS7amwi51U5kR7HSTY3bxLNFYoa5T8a86K0TrdOeH/7vVE5Q+gYcZVuqz8vRQQ==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.4.0.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"ce9520521e1f08c3c7abe809769f9f14f1bd9947","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.12.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.4.0_1777035733505_0.1376296609085288","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@pixygon/auth","version":"1.4.1","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.4.1","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"70ab44df34faf72c6e58f22c70eb4cd566b45346","unpackedSize":418668,"fileCount":29,"integrity":"sha512-y+AQ2lWcnZmyYl4XWxUihJmaek02xAHB/DZ8+fA7oFPYjFx0hdYnvNQMd1104l9SzVkJfaGdvwR07qNsXuAOxw==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.4.1.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"b05acec3df6de2c107b2e3f432c60e2084fbf2fd","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.12.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.4.1_1777037712460_0.5636344679281002","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@pixygon/auth","version":"1.4.2","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.4.2","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"7192d22b82d99c75ae9ff3d05596e34cd89eab33","unpackedSize":419216,"fileCount":29,"integrity":"sha512-ywc04IOpVkBNkctWCO4Yj8h4j1oqiHeSjnYkGQE4sOo/t4gZHzHx4qUrdLk7O4eLzL7NtXxqv+mF5Ba/i5HCCA==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.4.2.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"21113d337b1c1790f8b8c4d6c97913d151b003cf","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.12.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.4.2_1777039064639_0.40149210438769023","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"@pixygon/auth","version":"1.4.3","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.4.3","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"474433bef5a74e25f5449d2dac1df62e3df7d5d0","unpackedSize":419408,"fileCount":29,"integrity":"sha512-cuQ0Z+sFgNvOXATl2V+7SameJid6gLKaqb+YyT0yC5fQ3cK6K9zL3QoJ5Fq6LMhl4B08qC493q5D8BTnM7KQpg==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.4.3.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"652f39e9fa19950aa229eb58dc7614fa2c0922e4","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.12.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.4.3_1777159971309_0.50019928648362","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"@pixygon/auth","version":"1.4.4","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.4.4","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"63063b1152660e870c70f551e8c32b00368627af","unpackedSize":419558,"fileCount":29,"integrity":"sha512-Gb/0SHIE5NKFQmQ0E/rPDIrdhmaK0Q3/VvJjKpP79VT5jL4vCBQvC7PCVI+WZf0Ul6znEGQWVTgDeCVecaYxjw==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.4.4.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"3f6abf80c887dfcabbbc8334d1058e9a6ac7a2f4","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.12.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.4.4_1777162206790_0.3224635123033195","host":"s3://npm-registry-packages-npm-production"}},"1.4.5":{"name":"@pixygon/auth","version":"1.4.5","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.4.5","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"3dbbde44bf48a129706736d3414ecfe6a5d488df","unpackedSize":419834,"fileCount":29,"integrity":"sha512-Ecs9ovn2fGWRYZufwqOrmhowgrRr0Wr561CPD5RiOohaNue3VGY1kGOp0mPNiARplZnzg1WbtSl8gjiGEzcjng==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.4.5.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"56c882f01926672ba3dbba7ba2a9baeacff5334a","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.12.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.4.5_1777162675943_0.4088699130772926","host":"s3://npm-registry-packages-npm-production"}},"1.4.6":{"name":"@pixygon/auth","version":"1.4.6","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.4.6","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"93234dded74ec7465b0fb2dca35c6d8b1a9b70da","unpackedSize":420079,"fileCount":29,"integrity":"sha512-xQx95RC6Gbu343kn4CD62r6E+N9egP+xAn1XpA4fHT6NGcVbz/Mzx7wLWpZa6bCTx/xlX5a8JHBqgkNEzPVm5Q==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.4.6.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"9725a44f5f624539464c1c245ea1b9fc956131a0","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.12.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.4.6_1777164038807_0.0312875149618741","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@pixygon/auth","version":"1.5.0","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.5.0","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"dist":{"shasum":"e9600de470fb3b54ecc0323582441cfe8d457ff7","unpackedSize":424444,"fileCount":29,"integrity":"sha512-nADe7/koy2cFPrKc/nYrFyWrvgE3ly9c4ZMPQwuxdy4ZcJg45vYt8/SF5V1d41QkryI+OhnKuc0kqszo/7Q4/Q==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.5.0.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"ae669f13122f2887f15885ef07e37efd2d9a0e33","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.16.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"26.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.5.0_1784896364747_0.582626359773387","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@pixygon/auth","version":"1.6.0","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.6.0","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"bin":{"pixygon-verify-auth":"verify.mjs"},"dist":{"shasum":"2f5a531e4e0797615142e6a45e1bf557fa626963","unpackedSize":533530,"fileCount":35,"integrity":"sha512-VGFOxmF7PNRLK9pOYSd05vETrBQl2xIA1OKdA/v3hxLukzelI8aB3KGkclXC5T4JaT7u49srgZQOmG2DvyK9jg==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.6.0.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"dec2a09e1b134a971a5a344cfc5f5da10a6a43b2","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","verify":"node verify.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"11.16.0","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"26.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.6.0_1786212546479_0.29126379775988775","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@pixygon/auth","version":"1.6.1","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.6.1","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"bin":{"pixygon-verify-auth":"verify.mjs"},"dist":{"shasum":"a6bce4b4ca0f9d444352023fc6d8a0af89116d35","unpackedSize":534380,"fileCount":35,"integrity":"sha512-23gQG2+tHYppilBrx6tQ0XyBiAuLw5Na9R/5NXXdpukvQBSKktkR5YBmPd7LsAavHiZsLpiL4QEXtZVpP9v/7g==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.6.1.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"e531472840b8764eafb4c73d3a2e8db892bff330","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","verify":"node verify.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"26.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.6.1_1788434649220_0.8805731569595494","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"@pixygon/auth","version":"1.6.2","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.6.2","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"bin":{"pixygon-verify-auth":"verify.mjs"},"dist":{"shasum":"04b55fdd4e58ac2e90a5a4bb0d6232d6d687cd4d","unpackedSize":535528,"fileCount":35,"integrity":"sha512-gCZ1AaC73/xPQi+80tCWKBaNlc+FKlmBY5EdqEa15neWKD2ZSLtN3y5zOI0q6MFbPQZY1NAhLD+1ZHP87obisA==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.6.2.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"c373b78224d9a89f12652666de75e1972156e3d0","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","verify":"node verify.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"26.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.6.2_1788706363062_0.2338932064135275","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@pixygon/auth","version":"1.7.0","keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","_id":"@pixygon/auth@1.7.0","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"homepage":"https://github.com/pixygon/pixygon-packages#readme","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"bin":{"pixygon-verify-auth":"verify.mjs"},"dist":{"shasum":"e1e039ec46c30a9445debc7c115dccddbc2b1a2e","unpackedSize":555398,"fileCount":35,"integrity":"sha512-yyUwfGO8iVmq71JdC/SKHmpffejJaUXuIPeEAzqINTaTVtDNdB9Tlu6tFtemdNRPpUyukltL2jeqFd2y9JwrwQ==","tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.7.0.tgz"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"gitHead":"27cd315c52203c61d5b73eee84b35fe7b3fec240","scripts":{"dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","verify":"node verify.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"repository":{"url":"git+https://github.com/pixygon/pixygon-packages.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared authentication package for all Pixygon applications","directories":{},"_nodeVersion":"26.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth_1.7.0_1788726303854_0.853208857030187","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@pixygon/auth","version":"1.7.1","description":"Shared authentication package for all Pixygon applications","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.mjs","require":"./dist/components/index.js"}},"scripts":{"build":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --clean","dev":"tsup src/index.ts src/components/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","typecheck":"tsc --noEmit","verify":"node verify.mjs"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"devDependencies":{"@types/react":"^18.2.0","@types/react-dom":"^18.2.0","react":"^18.2.0","react-dom":"^18.2.0","tsup":"^8.0.0","typescript":"^5.3.0"},"keywords":["pixygon","auth","authentication","react","typescript"],"author":{"name":"Pixygon"},"license":"MIT","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/pixygon/pixygon-packages.git"},"bin":{"pixygon-verify-auth":"verify.mjs"},"gitHead":"fec8217d385f643715f0cf5a07519214f2865ce0","_id":"@pixygon/auth@1.7.1","bugs":{"url":"https://github.com/pixygon/pixygon-packages/issues"},"homepage":"https://github.com/pixygon/pixygon-packages#readme","_nodeVersion":"26.8.1","_npmVersion":"12.0.2","dist":{"integrity":"sha512-fjPNXvkW3/1xZEkJYPrSGAf7TocgCJwMzYUAtz30cTsyS3XooROCC850lhMHcHFg4KJcr1yV8CYsjQu1i/9K6Q==","shasum":"63172c2b6354c0cc4699bd699bfa0b901fcb80d0","unpackedSize":573438,"fileCount":36,"tarball":"https://ppm.pixygon.io/@pixygon/auth/-/auth-1.7.1.tgz"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"directories":{},"maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/auth_1.7.1_1788772184422_0.23982449473907397"},"_hasShrinkwrap":false}},"time":{"1.0.0":"2026-01-30T17:16:35.879Z","modified":"2026-09-30T23:30:34.856Z","created":"2026-01-30T17:16:35.879Z","1.1.0":"2026-04-08T15:28:14.070Z","1.2.0":"2026-04-14T14:45:10.280Z","1.2.1":"2026-04-24T11:35:12.326Z","1.3.0":"2026-04-24T11:56:09.654Z","1.3.1":"2026-04-24T12:10:36.089Z","1.3.2":"2026-04-24T12:32:59.421Z","1.4.0":"2026-04-24T13:02:13.649Z","1.4.1":"2026-04-24T13:35:12.627Z","1.4.2":"2026-04-24T13:57:44.793Z","1.4.3":"2026-04-25T23:32:51.439Z","1.4.4":"2026-04-26T00:10:06.948Z","1.4.5":"2026-04-26T00:17:56.091Z","1.4.6":"2026-04-26T00:40:38.946Z","1.5.0":"2026-07-24T12:32:44.972Z","1.6.0":"2026-08-08T18:09:06.614Z","1.6.1":"2026-09-03T11:24:09.381Z","1.6.2":"2026-09-06T14:52:43.197Z","1.7.0":"2026-09-06T20:25:04.026Z","1.7.1":"2026-09-07T09:09:44.606Z"},"readme":"# @pixygon/auth\n\nThe shared account spine for every Pixygon web app — one Pixygon account,\none token store, one set of branded forms. **16 repos** depend on it, second\nonly to `@pixygon/analytics`.\n\nIt talks to the central Pixygon API (`https://api.pixygon.com/v1`): register,\nverify, login, refresh, password recovery, `/users/me`. The Unity counterpart\nis `com.pixygon.passport` (related system, deliberately separate package).\n\n---\n\n## Retrofitting it into an existing app (≈20 minutes)\n\nWritten for an agent. Do these in order.\n\n### 1. Install\n\n```bash\nnpm i @pixygon/auth@^1.6.0\n```\n\n`>= 1.4.7` sends `X-App-Id` on every request (server-side per-app attribution\nfor emails and Discord notices); `1.5.0` returns a **soft-verification\nsession on register**, so a new user is logged in immediately instead of being\nstranded on a \"check your email\" screen; `1.6.0` adds the opt-in\n[**SSO client**](#single-sign-on-optional--log-in-once-be-logged-in-everywhere)\n(nothing changes unless you set `config.sso`).\n\n### 2. Know your ids\n\n| Field | Value |\n|---|---|\n| `appId` | the **MongoDB ObjectId** from this repo's `.pixygon.json` |\n| `appName` | human name — appears in verification/recovery emails and Discord |\n| `baseUrl` | `https://api.pixygon.com/v1` (with an env override) |\n\n`appId` does two jobs: it namespaces the localStorage token keys\n(`<appId>_access_token`, …) and it is sent as `X-App-Id` so the server knows\nwhich app the request came from. **Use the ObjectId, not a slug** — a slug\nstill isolates tokens but the server can't attribute it to a project.\n\n⚠ Changing `appId` later logs everyone out (the storage keys move).\n\n⚠ One exception: an app that deliberately shares the hub's session (e.g.\nPixygonAdmin) sets `appId` to the **pixygon.io** project\n`65481fec93ee5f866ade917f`. Only do that on purpose.\n\n### 3. Mount the provider\n\nThe estate pattern is a thin local wrapper (`src/providers/AuthProvider.tsx`)\nthat owns the config and re-exports the hooks, so the rest of the app never\nimports the package directly:\n\n```tsx\n// src/providers/AuthProvider.tsx  — copied from Tastebud\nimport { AuthProvider as PixygonAuthProvider, useAuth, useUser } from '@pixygon/auth'\nimport type { ReactNode } from 'react'\n\nconst AUTH_CONFIG = {\n  baseUrl: import.meta.env.VITE_API_URL || 'https://api.pixygon.com/v1',\n  appId: '69ee9b3f7a116f8ba90d0890',        // from .pixygon.json\n  appName: 'Tastebud',\n  recoveryBaseUrl: `${window.location.origin}/reset-password`,\n}\n\nexport function AuthProvider({ children }: { children: ReactNode }) {\n  return <PixygonAuthProvider config={AUTH_CONFIG}>{children}</PixygonAuthProvider>\n}\n\nexport { useAuth, useUser }\n```\n\nMount it **outside** the router and outside every other pearl provider —\nsubscription, social and savedata all read the token from it:\n\n```tsx\n<AuthProvider>\n  <PixygonPlusProvider>      {/* @pixygon/subscription */}\n    <SocialProvider>         {/* @pixygon/social       */}\n      <SaveDataProvider>     {/* @pixygon/savedata     */}\n        <BrowserRouter><App /></BrowserRouter>\n      </SaveDataProvider>\n    </SocialProvider>\n  </PixygonPlusProvider>\n</AuthProvider>\n```\n\n### 4. Use it\n\n```tsx\nimport { useAuth, useUser, useToken, useRequireAuth } from '@pixygon/auth'\n\nconst { login, register, logout, isAuthenticated, isLoading, error } = useAuth()\nconst { userName, email, subscriptionTier } = useUser()\nconst { accessToken, getAccessToken } = useToken()   // pass getAccessToken to the other pearls\n\n// protected route\nconst { isAuthorized } = useRequireAuth({ roles: ['admin'], onUnauthorized: () => nav('/login') })\n```\n\nOr drop in the branded forms instead of writing your own:\n\n```tsx\nimport { PixygonAuth } from '@pixygon/auth/components'\n<PixygonAuth mode=\"login\" theme=\"dark\" onSuccess={() => nav('/')} onModeChange={(m) => nav(`/auth/${m}`)} />\n```\n\nModes: `login | register | verify | forgot-password | recover-password`.\nFor `recover-password`, pass the `email` + `code` from the recovery link, and\nset `recoveryBaseUrl` in the config to the route that renders it.\n\n### 5. Verify it worked\n\n```bash\nnode node_modules/@pixygon/auth/verify.mjs\n# or:\npearl verify auth\n```\n\nStatic check — installed version, `<AuthProvider>` mounted, non-placeholder\n`appId` that agrees with `.pixygon.json`, `baseUrl` pointing at the real\ncentral API (localhost with no fallback fails). Exit 0 pass, 1 fail.\n\n**What verify cannot prove:** that logging in works. It never touches the\nnetwork. Auth is money-adjacent, so after any auth change also run the live\nend-to-end smoke against the real API — import-level tests have missed a\nprod-breaking register bug before:\n\n```bash\nAPI=https://api.pixygon.com/v1\nU=smoke$RANDOM\n# 1. register (1.5.0+ returns a session token straight away)\nTOK=$(curl -s -X POST $API/auth/register -H 'Content-Type: application/json' \\\n  -d \"{\\\"userName\\\":\\\"$U\\\",\\\"email\\\":\\\"$U@example.com\\\",\\\"password\\\":\\\"Passw0rd!23\\\"}\" \\\n  | node -pe 'JSON.parse(require(\"fs\").readFileSync(0)).token')\n# 2. use the token on an authenticated endpoint\ncurl -s $API/users/me -H \"Authorization: Bearer $TOK\" | head -c 200\n```\n\n---\n\n## Single sign-on (optional) — log in once, be logged in everywhere\n\nEvery Pixygon app already shares **one identity** (the same accounts, the same\n`/v1/auth`). What it lacked was **one session**: tokens live in `localStorage`\nkeyed `<appId>_access_token`, which is per-origin by browser design, and most\napps sit on their own apex (pixiel.ai, lonnlyst.no, kikortet.no …).\n\nSSO closes that gap with an authorization-code + PKCE **top-level redirect**\nagainst the central auth origin. Contract:\n[`Dyson/docs/SSO_DESIGN.md`](../../../Dyson/docs/SSO_DESIGN.md).\n\n```\nGET  {baseUrl}/auth/sso/authorize ?app&redirect_uri&state&code_challenge[&prompt=none]\n     -> 302 back to redirect_uri?code=<one-time>&state=<state>\nPOST {baseUrl}/auth/sso/token      { code, code_verifier, app }\n     -> { token, refreshToken, expiresIn, user }   (same shape as /auth/login)\nGET  {baseUrl}/auth/sso/logout    ?redirect_uri&state   (TOP-LEVEL navigation)\n     -> 302 back to redirect_uri, central session revoked\n```\n\n**Entirely opt-in.** An app that doesn't set `config.sso` behaves exactly as it\ndid before — same storage keys, same hooks, same everything. Upgrading the\npackage changes nothing on its own.\n\n> ⚠ **Server status:** the `/auth/sso/*` endpoints are being built in parallel\n> against this same contract. Until they are live, `startLogin()` will redirect\n> to a 404. Ship the client wiring behind a flag if that matters to you.\n\n### 1. Turn it on\n\nOne key in the config you already have:\n\n```tsx\nconst AUTH_CONFIG = {\n  baseUrl: import.meta.env.VITE_API_URL || 'https://api.pixygon.com/v1',\n  appId: '69ee9b3f7a116f8ba90d0890',        // from .pixygon.json\n  appName: 'Tastebud',\n  sso: true,                                 // <- that's the whole retrofit\n}\n```\n\n`sso: true` means: expose `useSso()`, and **auto-finish** an SSO callback when\nthe app loads with `?code` in the URL. Tune it with an object instead:\n\n```ts\nsso: {\n  autoComplete: true,          // finish ?code callbacks on mount (default true)\n  redirectUri: undefined,      // default: current origin + pathname\n  cleanUrl: true,              // strip code/state from the address bar (default true)\n}\n```\n\nThe `redirect_uri` must be on the server's allow-list (same ownership rule as\nCORS), so a new domain needs registering server-side before it will work.\n\n### 2. Send people to it\n\n```tsx\nimport { useSso, useAuth } from '@pixygon/auth'\n\nfunction LoginButton() {\n  const { startLogin, status, error } = useSso()\n  return (\n    <button onClick={() => startLogin()} disabled={status === 'starting'}>\n      Continue with Pixygon\n    </button>\n  )\n}\n```\n\n`startLogin()` navigates away — treat every line after it as unreachable.\nKeep your password form: SSO is an additional door, not a replacement.\n\n### 3. (Optional) the silent check for returning visitors\n\nTo answer \"is this person already logged in centrally?\" without a click:\n\n```tsx\nfunction SilentSsoProbe() {\n  const { isAuthenticated, isLoading } = useAuth()\n  const { enabled, trySilentLogin } = useSso()\n  useEffect(() => {\n    if (enabled && !isLoading && !isAuthenticated) trySilentLogin()\n  }, [enabled, isLoading, isAuthenticated, trySilentLogin])\n  return null\n}\n```\n\n`trySilentLogin()` uses `prompt=none`: the auth origin either bounces back with\na `code` (invisible, fast) or with `error=login_required`. It runs **at most\nonce per tab per app** — the package marks the probe in `sessionStorage`, which\nis what stops a server that keeps answering `login_required` from becoming an\ninfinite redirect loop. Don't hand-roll this with `startLogin({ prompt: 'none' })`\nin an effect; that is exactly the loop.\n\n### What actually happens\n\n**First visit, never logged in anywhere**\n`startLogin()` → authorize → no central session → the auth origin shows its\nlogin → user signs in → central `pxg_sso` cookie is set → 302 back with `?code`\n→ the provider exchanges it → tokens land in `<appId>_access_token` → `useAuth()`\nreports authenticated. The URL is cleaned; your app never sees a token in it.\n\n**Returning visit, already signed in at another Pixygon app**\n`trySilentLogin()` (or `startLogin()`) → authorize sees the cookie → 302 straight\nback with `?code` → exchanged on mount → signed in with no form and no click.\nTwo fast redirects, no password.\n\n**Returning visit, no central session, `prompt=none`**\n302 back with `error=login_required` → `useSso().status === 'login_required'` →\nrender your normal login. Not an error, not a throw.\n\n**Any callback that doesn't match**\nWrong/absent `state`, a code with no request pending in this tab, a stale\nrequest (>10 min): nothing is exchanged, the stash is dropped, the URL is\ncleaned, and you get `{ status: 'error' }`. `completeSsoLogin` never throws.\n\n### Honest limits\n\n- **No silent cross-domain check without a top-level redirect.** Hidden iframes\n  need third-party cookies, which browsers block by default. `prompt=none` is\n  fast and invisible, but it is still a real navigation — the page unloads and\n  comes back. Don't call it mid-form.\n- **Logout is not a kill switch.** `useSso().logout()` ends the *central*\n  session (no more silent grants) and clears *this* app's tokens. Other apps\n  that already hold a token keep working until it expires (max 7d access) unless\n  they log out themselves. Anyone promising \"log out everywhere, instantly\" is\n  promising something this design does not deliver.\n- **Logout is a page navigation, not a fetch.** `pxg_sso` is `SameSite=Lax` and\n  the auth origin is cross-site for every app (a different registrable domain\n  even from `*.pixygon.io`), so the cookie is NOT sent on a cross-site fetch — a\n  POST would arrive without it and revoke nothing while looking like it worked.\n  `ssoLogout()` therefore clears local tokens first and then navigates\n  top-level to the auth origin, where the cookie is first-party and IS sent.\n  Expect the page to leave; the returned `central: 'navigating'` says exactly\n  that rather than claiming a confirmed revocation it cannot observe.\n- **Secure context required.** PKCE uses `crypto.subtle`, which does not exist\n  on plain `http://` origins (localhost is fine). On an insecure origin\n  `startLogin()` sets `status: 'error'` with a message saying so.\n- **sessionStorage required.** The verifier must survive the redirect without\n  leaking to other tabs. If storage is blocked (some private modes), SSO fails\n  closed and the password form still works.\n- **Changing `appId` still logs everyone out** — the storage keys move. SSO\n  doesn't change that.\n\n### Verify it worked\n\nThere is no static check for this — `verify.mjs` reports adoption but cannot\nprove a redirect flow works. Drive it once, by hand:\n\n1. Click your SSO button. The address bar goes to\n   `…/v1/auth/sso/authorize?app=<your ObjectId>&redirect_uri=<your origin+path>&state=…&code_challenge=…`.\n   **`code_verifier` must NOT be in that URL** — only the challenge.\n2. In DevTools → Application → Session Storage, there is one\n   `pxg_sso_pending_<appId>` entry while the redirect is in flight.\n3. After landing back: the address bar has **no** `code`/`state` (they were\n   stripped via `history.replaceState`, so they're not in history or the\n   Referer either), and Local Storage has `<appId>_access_token`,\n   `<appId>_refresh_token`, `<appId>_user`, `<appId>_expires_at` — the exact\n   same keys a password login writes.\n4. Network tab: exactly one `POST /auth/sso/token`, body\n   `{ code, code_verifier, app }`, response identical in shape to `/auth/login`.\n5. Reload. You stay logged in, and there is no second token exchange.\n6. Negative test: paste `?code=x&state=y` onto your app URL by hand. Nothing is\n   exchanged, the params are stripped, `useSso().status === 'error'`.\n\n### Imperative (non-React) use\n\n```ts\nimport { startSsoLogin, completeSsoLogin, ssoLogout, hasSsoCallback } from '@pixygon/auth'\n\nif (hasSsoCallback()) {\n  const result = await completeSsoLogin({ appId, baseUrl })   // never throws\n  // 'success' | 'login_required' | 'error' | 'no_callback'\n}\nawait startSsoLogin({ appId, baseUrl, prompt: 'none' })\nawait ssoLogout({ baseUrl, appId })\n```\n\n---\n\n## API\n\n| Export | Use |\n|---|---|\n| `<AuthProvider config>` | the mount; everything else needs it |\n| `useAuth()` | `user, status, isAuthenticated, isLoading, error, login, register, logout, verify, forgotPassword, recoverPassword, changePassword, hasRole` |\n| `useUser()` | `user, userName, email, role, subscriptionTier, totalTokens` |\n| `useToken()` | `accessToken, refreshToken, getAccessToken, refreshTokens` — this is what you hand to social/savedata/subscription |\n| `useAuthStatus()` | `isIdle, isLoading, isAuthenticated, isUnauthenticated, isVerifying` |\n| `useRequireAuth({roles, onUnauthorized})` | route guards |\n| `useProfileSync()` | keeps the cached user fresh |\n| `useSso()` | `enabled, status, error, startLogin, trySilentLogin, completeLogin, logout` — central SSO (opt-in via `config.sso`) |\n| `startSsoLogin`, `completeSsoLogin`, `ssoLogout`, `trySilentSsoLogin`, `hasSsoCallback` | the same flow without React |\n| `generateCodeVerifier`, `createCodeChallenge`, `generateState` | PKCE primitives (Web Crypto, no deps) |\n| `PixygonAuth`, `LoginForm`, `RegisterForm`, `VerifyForm`, `ForgotPasswordForm`, `RecoverPasswordForm` | `@pixygon/auth/components` |\n| `createAuthApiClient`, `createTokenStorage` | non-React / imperative use |\n\n### AuthConfig\n\n```ts\n{\n  baseUrl: string            // REQUIRED — https://api.pixygon.com/v1\n  appId: string              // REQUIRED — .pixygon.json ObjectId\n  appName?: string           // shown in emails + Discord\n  language?: 'en' | 'no'     // auth UI + email language\n  recoveryBaseUrl?: string   // where the recovery link lands\n  autoRefresh?: boolean      // default true\n  refreshThreshold?: number  // seconds before expiry (default 300)\n  onLogin?, onLogout?, onTokenRefresh?, onError?\n  storage?: AuthStorage      // default localStorage\n  theme?: AuthTheme\n  debug?: boolean\n  sso?: boolean | {          // central SSO — omitted = off, nothing changes\n    autoComplete?: boolean   //   finish ?code callbacks on mount (default true)\n    redirectUri?: string     //   default: current origin + pathname\n    cleanUrl?: boolean       //   strip code/state afterwards (default true)\n  }\n}\n```\n\n## Gotchas\n\n- **Hooks outside the provider silently no-op** — `isAuthenticated` stays\n  `false` forever. If login \"does nothing\", check the provider is above the\n  component in the tree.\n- **`appId` is a storage namespace.** Changing it, or using two different\n  values in one app, splits the session in two.\n- **Don't confuse it with the other pearls' `appId`.** `@pixygon/subscription`\n  and `@pixygon/social` take their own `appId` (a lowercase app slug like\n  `tastebud`) — those are unrelated to the auth one and are usually declared in\n  the same file.\n- **Register returns a token in 1.5.0+ only.** On older versions the app must\n  send the user through the verify screen before it has a session.\n- **SSO is off unless you ask for it.** No `config.sso` means no redirect\n  handling, no new storage, no behaviour change. `useSso()` still works — it\n  reports `enabled: false` and its actions are no-ops, so a button can render\n  behind that flag without ceremony.\n- **Redux apps** need a small sync component (see below) — the package is the\n  source of truth, Redux is a mirror.\n\n```tsx\nfunction AuthReduxSync({ children }) {\n  const { user, accessToken, isAuthenticated } = useAuth()\n  const dispatch = useDispatch()\n  useEffect(() => {\n    if (isAuthenticated && user && accessToken) dispatch(setLogin({ user, token: accessToken }))\n    else if (!isAuthenticated) dispatch(setLogout())\n  }, [isAuthenticated, user, accessToken, dispatch])\n  return children\n}\n```\n\n## Publishing\n\n```bash\nnpm run build && npm publish --access public\n```\n\nApps consume a change here only **once it is published** — `1.6.0` (the SSO\nclient) is committed but not yet on npm, so `npm i @pixygon/auth@^1.6.0` in a\nconsuming repo will resolve to the last published version until someone with a\ntoken runs the two commands above.\n\nMIT — Pixygon\n","readmeFilename":"README.md"}