{"_id":"@codebird/react","_rev":"8-1329d0211b2d0f8eee01440e3e98260e","name":"@codebird/react","dist-tags":{"latest":"0.4.3"},"versions":{"0.2.1":{"name":"@codebird/react","version":"0.2.1","license":"MIT","_id":"@codebird/react@0.2.1","maintainers":[{"name":"liushaofan","email":"50491609@qq.com"}],"homepage":"https://github.com/lshaofan/codebird-react-sdk#readme","bugs":{"url":"https://github.com/lshaofan/codebird-react-sdk/issues"},"dist":{"shasum":"6e0c24f3090c83ede656b95a7d8cb39504f78357","tarball":"https://registry.npmjs.org/@codebird/react/-/react-0.2.1.tgz","fileCount":6,"integrity":"sha512-kutm5TXjL1+LKnD7efwOlMwhSENyjgP8Ie9MygSd4hMWq0SLjQu5DfM9SyXQ7MPxYxUNw+HumSSYC7UUN51uQw==","signatures":[{"sig":"MEYCIQCqew1vyWBVeTqHH0DS0wF+sWgm6GCuGycUJKa+4uYTpQIhAJfxebDkmBiuazTYcIl4/LOWUc0UNHosR0noef4iotWm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60161},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"06553213447836d56527723e70e21d50ff765584","private":false,"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","prepublishOnly":"pnpm build"},"_npmUser":{"name":"liushaofan","email":"50491609@qq.com"},"repository":{"url":"git+https://github.com/lshaofan/codebird-react-sdk.git","type":"git"},"_npmVersion":"11.6.2","description":"React SDK for Code Bird Cloud SPA authentication and organization-aware access tokens.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"oidc-client-ts":"^3.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^26.0.0","react":"^19.0.0","vitest":"^3.0.7","react-dom":"^19.0.0","typescript":"~5.7.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.2.1_1773427589195_0.5268799517753451","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@codebird/react","version":"0.2.2","license":"MIT","_id":"@codebird/react@0.2.2","maintainers":[{"name":"liushaofan","email":"50491609@qq.com"}],"homepage":"https://github.com/lshaofan/codebird-react-sdk#readme","bugs":{"url":"https://github.com/lshaofan/codebird-react-sdk/issues"},"dist":{"shasum":"e744e33359541bb63cd9c4227046939874d8fd92","tarball":"https://registry.npmjs.org/@codebird/react/-/react-0.2.2.tgz","fileCount":6,"integrity":"sha512-dSLv5Jl+9V11alqyBJe+GJJpVfXi88f9IUS1mRsXLaxwVFKUpLJE4TDI91WtWw6CqFy8tlb+OQO8n0yAOPRmcQ==","signatures":[{"sig":"MEUCIDeDp8/bS8NDNjfhU0grAqWox2yBZrp5PwrVkdubnHMnAiEA5S/pvTY3QyharIqecpLqoMPuEF0ZMy8jWv+BRjd4Bfg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codebird%2freact@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":60161},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"bb14e734f562b957bb0bca119207a5b4483ea25a","private":false,"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19590d64-cfc7-4548-aeca-9f4261093a63"}},"repository":{"url":"git+https://github.com/lshaofan/codebird-react-sdk.git","type":"git"},"_npmVersion":"11.9.0","description":"React SDK for Code Bird Cloud SPA authentication and organization-aware access tokens.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"oidc-client-ts":"^3.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^26.0.0","react":"^19.0.0","vitest":"^3.0.7","react-dom":"^19.0.0","typescript":"~5.7.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.2.2_1773427762559_0.4164070996711464","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@codebird/react","version":"0.2.3","license":"MIT","_id":"@codebird/react@0.2.3","maintainers":[{"name":"liushaofan","email":"50491609@qq.com"}],"homepage":"https://github.com/lshaofan/codebird-react-sdk#readme","bugs":{"url":"https://github.com/lshaofan/codebird-react-sdk/issues"},"dist":{"shasum":"1d63b83ffcaa266bcfd7a7cba8a0781a4f7037d3","tarball":"https://registry.npmjs.org/@codebird/react/-/react-0.2.3.tgz","fileCount":6,"integrity":"sha512-zLD0Mcdns2DlRlzIWo8e33ThPI/WDOPTBMf7dv1YMxl94Gmsw3dB6U6bhZ0n7fOnjq++PMNoAgp6K49hyfOYzg==","signatures":[{"sig":"MEQCIEMRHW+G4WfuaIomU+hsrxWVP5WS2zZXWD3YLuN6peAAAiAegCIcBICamOtusfV+b6+z85+JGuFc7FvJi9PeaHtgHg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codebird%2freact@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":60970},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"1b1ceec79f70e7349177dc324f95794f759c23a7","private":false,"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19590d64-cfc7-4548-aeca-9f4261093a63"}},"repository":{"url":"git+https://github.com/lshaofan/codebird-react-sdk.git","type":"git"},"_npmVersion":"11.9.0","description":"React SDK for Code Bird Cloud SPA authentication and organization-aware access tokens.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"oidc-client-ts":"^3.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^26.0.0","react":"^19.0.0","vitest":"^3.0.7","react-dom":"^19.0.0","typescript":"~5.7.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.2.3_1773509257514_0.1595832549038554","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@codebird/react","version":"0.3.0","license":"MIT","_id":"@codebird/react@0.3.0","maintainers":[{"name":"liushaofan","email":"50491609@qq.com"}],"homepage":"https://github.com/lshaofan/codebird-react-sdk#readme","bugs":{"url":"https://github.com/lshaofan/codebird-react-sdk/issues"},"dist":{"shasum":"d32307a57bbe6708e32f80a249f6dabc42e75441","tarball":"https://registry.npmjs.org/@codebird/react/-/react-0.3.0.tgz","fileCount":6,"integrity":"sha512-ZLGFKujH99eNuowRjNNPdQZCuaPWVyb98FqBJaQ6dEA3cpI9d/pWjb0KALHeX7+X4w/avfRGQr0BYlVdbSHGPQ==","signatures":[{"sig":"MEUCICzBL4viZq2/5PvuSuy9/voXJqJAELtVIhs35N5gR2/gAiEA/pBMJNHMqe0WXTPBNaI46/a7NXYb93RPOGrUBLn7Vyo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codebird%2freact@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":66573},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"467be0db530ab1cbcb116ce6e0de16b6bfac9e54","private":false,"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19590d64-cfc7-4548-aeca-9f4261093a63"}},"repository":{"url":"git+https://github.com/lshaofan/codebird-react-sdk.git","type":"git"},"_npmVersion":"11.9.0","description":"React SDK for Code Bird Cloud SPA authentication and organization-aware access tokens.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"oidc-client-ts":"^3.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^26.0.0","react":"^19.0.0","vitest":"^3.0.7","react-dom":"^19.0.0","typescript":"~5.7.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.3.0_1773652138803_0.6304636154773373","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@codebird/react","version":"0.4.0","license":"MIT","_id":"@codebird/react@0.4.0","maintainers":[{"name":"liushaofan","email":"50491609@qq.com"}],"homepage":"https://github.com/lshaofan/codebird-react-sdk#readme","bugs":{"url":"https://github.com/lshaofan/codebird-react-sdk/issues"},"dist":{"shasum":"b3a313f45ad292177b917ec1eb7ec20527ae3e6a","tarball":"https://registry.npmjs.org/@codebird/react/-/react-0.4.0.tgz","fileCount":6,"integrity":"sha512-hkIB/uKo5EChs7f1kZaXu6MNfoWWiy4QrOYtusleS2ePCyuKTjli0Atq8UkJShNw011tG81IvfCW72YAjmAPZA==","signatures":[{"sig":"MEYCIQDtVTGG3W8mhZ0XcWTheIPaU6uR8rIzd5HKrKV1oho/iQIhAJZqVFzzSC+8MkghexHn0m2iwOkcTI49PyRp6a8KDpw1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codebird%2freact@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78329},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"12f0843ca4377ea686e7e2276713eb920652a4a4","private":false,"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19590d64-cfc7-4548-aeca-9f4261093a63"}},"repository":{"url":"git+https://github.com/lshaofan/codebird-react-sdk.git","type":"git"},"_npmVersion":"11.9.0","description":"React SDK for Code Bird Cloud SPA authentication and organization-aware access tokens.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"oidc-client-ts":"^3.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^26.0.0","react":"^19.0.0","vitest":"^3.0.7","react-dom":"^19.0.0","typescript":"~5.7.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.4.0_1773665780477_0.043881419139573996","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@codebird/react","version":"0.4.1","license":"MIT","_id":"@codebird/react@0.4.1","maintainers":[{"name":"liushaofan","email":"50491609@qq.com"}],"homepage":"https://github.com/lshaofan/codebird-react-sdk#readme","bugs":{"url":"https://github.com/lshaofan/codebird-react-sdk/issues"},"dist":{"shasum":"a366b87772bc34c72b213325437523338fdbe0c9","tarball":"https://registry.npmjs.org/@codebird/react/-/react-0.4.1.tgz","fileCount":6,"integrity":"sha512-jcAPs1SNTSPrL61kmPQSKs3tWcKyEtYoBih6OHz6i7drF39kNPpQPFaFXjTUjU1OX+zRTBOGkMSZDyMpkVHY1A==","signatures":[{"sig":"MEUCIBx5LAv7pT5ZzRFulWGrKDaFA/WeV+h/MZ6EYvhtiQkPAiEA0s5diM+JAVd6jsmPgX1oH4zNjpNV/M0H4BR4fwi2Gd4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codebird%2freact@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78619},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"1457a2620524f40bda2c938447278a79a1ff2216","private":false,"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19590d64-cfc7-4548-aeca-9f4261093a63"}},"repository":{"url":"git+https://github.com/lshaofan/codebird-react-sdk.git","type":"git"},"_npmVersion":"11.9.0","description":"React SDK for Code Bird Cloud SPA authentication and organization-aware access tokens.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"oidc-client-ts":"^3.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^26.0.0","react":"^19.0.0","vitest":"^3.0.7","react-dom":"^19.0.0","typescript":"~5.7.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.4.1_1773679098612_0.3705400968764714","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@codebird/react","version":"0.4.2","license":"MIT","_id":"@codebird/react@0.4.2","maintainers":[{"name":"liushaofan","email":"50491609@qq.com"}],"homepage":"https://github.com/lshaofan/codebird-react-sdk#readme","bugs":{"url":"https://github.com/lshaofan/codebird-react-sdk/issues"},"dist":{"shasum":"dfc2b65531333d9d538e0635b12f8d89aaf585a2","tarball":"https://registry.npmjs.org/@codebird/react/-/react-0.4.2.tgz","fileCount":6,"integrity":"sha512-QhAYofqfeRpSFXz/bM3TD4JH3jug3Yf4OrTkrM9okrEdznoDCWL/KPdH0Kz/FH6L0X+nRagbFQ3T/9+PAO9/sw==","signatures":[{"sig":"MEUCIQCT+S0R/z+lQY2jq7i4JLs28IpM6W5shMRymFDi9r4xNQIgNDVNRlAIft8W538jKpb4I7TyodLdH9+P5IEzndYvOSg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codebird%2freact@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":82189},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"82479d97d052b5991d52c5939f69cdb85872e01c","private":false,"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19590d64-cfc7-4548-aeca-9f4261093a63"}},"repository":{"url":"git+https://github.com/lshaofan/codebird-react-sdk.git","type":"git"},"_npmVersion":"11.9.0","description":"React SDK for Code Bird Cloud SPA authentication and organization-aware access tokens.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"oidc-client-ts":"^3.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","jsdom":"^26.0.0","react":"^19.0.0","vitest":"^3.0.7","react-dom":"^19.0.0","typescript":"~5.7.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.4.2_1773745641308_0.33929557453092785","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@codebird/react","version":"0.4.3","private":false,"description":"React SDK for Code Bird Cloud SPA authentication and organization-aware access tokens.","license":"MIT","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"repository":{"type":"git","url":"git+https://github.com/lshaofan/codebird-react-sdk.git"},"homepage":"https://github.com/lshaofan/codebird-react-sdk#readme","bugs":{"url":"https://github.com/lshaofan/codebird-react-sdk/issues"},"publishConfig":{"access":"public"},"scripts":{"build":"tsup","test":"vitest run","dev":"tsup --watch","prepublishOnly":"pnpm build"},"dependencies":{"oidc-client-ts":"^3.1.0"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"devDependencies":{"@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","jsdom":"^26.0.0","react":"^19.0.0","react-dom":"^19.0.0","tsup":"^8.3.5","typescript":"~5.7.0","vitest":"^3.0.7"},"gitHead":"a4105ce41bcea2aa4ab95ad9fcae8bd2561172ff","_id":"@codebird/react@0.4.3","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-9/nkFdZmxiL3mcgpl5fxnN8p7H00nr5LM8t3wcD3Tczm9CEO9KyosNnKpxuRkNRNmjMOuq4gAzPxYcweJdlPHA==","shasum":"60e4e53c79b41a812499d8638cd67f9dfcca07bc","tarball":"https://registry.npmjs.org/@codebird/react/-/react-0.4.3.tgz","fileCount":6,"unpackedSize":97791,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codebird%2freact@0.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICh/cCmNwd4f+EXROLNIdodg39x1XW1HcbOT8F7tT/4/AiA80BeCcYAGmlEqiJu+lSDIFlss6nVzw8WPQ22aFvR9kg=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19590d64-cfc7-4548-aeca-9f4261093a63"}},"directories":{},"maintainers":[{"name":"liushaofan","email":"50491609@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react_0.4.3_1773755277302_0.5552437943309589"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-13T18:46:29.069Z","modified":"2026-03-17T13:47:58.136Z","0.2.1":"2026-03-13T18:46:29.362Z","0.2.2":"2026-03-13T18:49:22.700Z","0.2.3":"2026-03-14T17:27:37.656Z","0.3.0":"2026-03-16T09:08:58.961Z","0.4.0":"2026-03-16T12:56:20.646Z","0.4.1":"2026-03-16T16:38:18.780Z","0.4.2":"2026-03-17T11:07:21.513Z","0.4.3":"2026-03-17T13:47:57.435Z"},"bugs":{"url":"https://github.com/lshaofan/codebird-react-sdk/issues"},"license":"MIT","homepage":"https://github.com/lshaofan/codebird-react-sdk#readme","repository":{"type":"git","url":"git+https://github.com/lshaofan/codebird-react-sdk.git"},"description":"React SDK for Code Bird Cloud SPA authentication and organization-aware access tokens.","maintainers":[{"name":"liushaofan","email":"50491609@qq.com"}],"readme":"# @codebird/react\n\nCode Bird Cloud 的 React SPA 认证接入 SDK。\n\n它负责：\n\n- 登录、登出、callback 处理\n- 当前用户与组织上下文\n- 实时会话上下文获取\n- 面向目标 `resource` 的 access token 获取\n- organization token 获取\n- 本地 state / storage / token 生命周期托管\n\n## 安装\n\n```bash\npnpm add @codebird/react\n```\n\n## 最小示例\n\n```tsx\nimport { CodeBirdProvider } from '@codebird/react';\n\nexport function AuthBootstrap() {\n  return (\n    <CodeBirdProvider\n      endpoint=\"https://auth.codebird.cloud\"\n      appId=\"YOUR_APP_ID\"\n      redirectUri=\"https://app.example.com/callback\"\n      postLogoutRedirectUri=\"https://app.example.com\"\n      defaultResource=\"https://api.example.com\"\n      scopes={['openid', 'profile', 'email', 'offline_access']}\n    >\n      <App />\n    </CodeBirdProvider>\n  );\n}\n```\n\n## 组织级登录\n\n单组织后台通常建议直接配置：\n\n```tsx\n<CodeBirdProvider\n  endpoint=\"https://auth.codebird.cloud\"\n  appId=\"YOUR_APP_ID\"\n  redirectUri=\"https://app.example.com/callback\"\n  postLogoutRedirectUri=\"https://app.example.com/login\"\n  defaultResource=\"https://api.example.com\"\n  defaultOrganizationId=\"org_xxx\"\n  scopes={[\n    'openid',\n    'profile',\n    'email',\n    'offline_access',\n    'urn:codebird:scope:organizations',\n    'urn:codebird:scope:organization_roles',\n  ]}\n>\n  <App />\n</CodeBirdProvider>\n```\n\n登录时：\n\n```ts\nawait auth.signIn();\n```\n\n也可以显式传入组织参数：\n\n```ts\nawait auth.signIn({\n  organizationId: 'org_xxx',\n  resource: 'https://api.example.com',\n});\n```\n\n## Token 获取\n\n推荐直接通过 SDK 获取 token：\n\n```ts\nconst accessToken = await auth.getAccessToken();\nconst organizationToken = await auth.getOrganizationToken('org_xxx');\n```\n\nSDK 会尽量保证：\n\n- `getAccessToken()` 返回的 token 面向当前目标 `resource`\n- token 已过期或即将过期时自动续期\n- organization token 做同样的有效期与缓存处理\n\n## 获取实时会话上下文\n\n如果第三方系统需要拿到数据库实时状态，而不是登录时 claims 快照，可以直接通过 SDK 拉取实时上下文。\n\n适合的场景：\n\n- 管理员刚刚修改了用户资料\n- 用户在使用过程中被移出组织\n- 第三方系统需要按最新组织关系判断权限\n\n命令式调用：\n\n```ts\nconst context = await auth.getSessionContext({\n  organizationId: 'org_xxx',\n});\n```\n\nReact 页面内也可以直接使用 hook：\n\n```ts\nconst { data, loading, error, refresh } = useSessionContext({\n  organizationId: 'org_xxx',\n});\n```\n\n返回结果包含：\n\n- `tenant`\n- `user`\n- `application`\n- `organization`\n- `organizations`\n- `session`\n\n其中 `tenant.slug` 是终端用户租户化入口的标准标识，可用于识别：\n\n- `/t/{tenant.slug}/sign-in`\n- `/t/{tenant.slug}/account-center/...`\n\n推荐约定：\n\n- `useCodeBirdUser()` 继续用于轻量展示\n- 敏感权限判断改用 `getSessionContext()` / `useSessionContext()`\n\n## 构造租户化终端用户入口\n\n当第三方系统需要主动跳转到认证中心终端用户页面时，不要再手工拼裸路径。可以直接使用 SDK 提供的租户化 URL helper：\n\n```ts\nconst signInUrl = auth.buildTenantSignInUrl('tenant-demo');\nconst registerUrl = auth.buildTenantRegisterUrl('tenant-demo');\nconst forgotPasswordUrl = auth.buildTenantForgotPasswordUrl('tenant-demo');\n```\n\n对应结果分别是：\n\n- `/t/{tenantSlug}/sign-in`\n- `/t/{tenantSlug}/register`\n- `/t/{tenantSlug}/forgot-password`\n\n注意：\n\n- `tenantSlug` 不能为空\n- 这组 helper 只用于终端用户入口地址构造\n- 账户中心仍然应优先使用 `openAccountCenter()`，不要自己拼 `/account-center/...`\n\n## 官方认证守卫\n\n如果第三方系统希望尽量少写一层自己的认证守卫逻辑，可以直接使用 SDK 提供的 `CodeBirdAuthGuard`。\n\n它只负责：\n\n- 等待 SDK 完成登录态恢复\n- 已登录时渲染受保护内容\n- 未登录时执行你提供的未认证处理逻辑\n\n它不会绑定任何特定路由库，也不会默认替你决定跳转方式。\n\n```tsx\nimport { CodeBirdAuthGuard, useCodeBirdAuth } from '@codebird/react';\n\nfunction ProtectedApp() {\n  const auth = useCodeBirdAuth();\n\n  return (\n    <CodeBirdAuthGuard\n      loadingFallback={<div>Loading...</div>}\n      unauthenticatedFallback={<div>Redirecting...</div>}\n      onUnauthenticated={() => auth.signIn()}\n    >\n      <App />\n    </CodeBirdAuthGuard>\n  );\n}\n```\n\n建议：\n\n- 不要在第三方项目里再自己根据 `expires_at` 判断是否跳登录页\n- 不要再自行监听 token 过期事件后立刻清本地登录态\n- 守卫只基于 SDK 的 `isLoading` / `isAuthenticated` 工作\n\n## 组织角色 claims 格式\n\nReact SDK 当前只支持新版 `organization_roles` 字符串数组格式：\n\n```json\n[\"org_123:admin\", \"org_456:member\"]\n```\n\nSDK 会将其归一化为：\n\n```ts\n{\n  org_123: ['admin'],\n  org_456: ['member'],\n}\n```\n\n旧版对象格式不再兼容。\n\n组织管理员身份请始终以 `organization_is_admin` 为准，不要再根据 `organization_roles` 中是否包含 `admin` 推断。\n\n## 打开个人中心\n\n如果第三方系统里的用户已经完成登录，可以直接通过 SDK 打开 CodeBird 账户中心。\n\nSDK 会自动：\n\n- 使用当前用户 access token 调用 `/api/account/sso-ticket`\n- 获取一次性 `redirect_url`\n- 使用浏览器新标签页打开账户中心\n\n注意：\n\n- 账户中心最终落点由后端返回\n- 当前标准落点是租户化路径，如 `/t/{tenant.slug}/account-center/...`\n- 不要再在第三方项目中手工拼裸 `/account-center/...`\n\n```ts\nawait auth.openAccountCenter();\n```\n\n也可以指定目标页和组织上下文：\n\n```ts\nawait auth.openAccountCenter({\n  target: 'security',\n  organizationId: 'org_xxx',\n});\n```\n\n当前支持的 `target`：\n\n- `overview`\n- `profile`\n- `security`\n- `connections`\n\n## 本地开发\n\n```bash\npnpm install\npnpm test\npnpm build\n```\n\n## 发布\n\n建议通过 GitHub Actions 在 tag 时自动发布：\n\n- tag 格式：`vX.Y.Z`\n- 发布命令：`npm publish --access public`\n\n## License\n\nMIT\n","readmeFilename":"README.md"}