{"_id":"@agdsoftware/react-sso","_rev":"3-5e9f6fc721e957b0f9355130ef69fbd2","name":"@agdsoftware/react-sso","dist-tags":{"latest":"1.1.1"},"versions":{"1.1.0":{"name":"@agdsoftware/react-sso","version":"1.1.0","keywords":["sso","keycloak","oidc","authorization","iam","agd"],"license":"UNLICENSED","_id":"@agdsoftware/react-sso@1.1.0","maintainers":[{"name":"agdmgv","email":"yazilimvebilisim@agd.org.tr"}],"homepage":"https://github.com/karademirmustafa/agd-sso/tree/main/packages/react-sso#readme","bugs":{"url":"https://github.com/karademirmustafa/agd-sso/issues"},"dist":{"shasum":"e479d92757da6b0c17142e6bd57af58798603ad9","tarball":"https://registry.npmjs.org/@agdsoftware/react-sso/-/react-sso-1.1.0.tgz","fileCount":25,"integrity":"sha512-Aram9cRnLwi+3yLfCN9e/BxWuYYfsHew6qF4Il6tY9ex6H+sDPC9u3itn2k1G3tKc9GEEvTAkGMauNKes0yf9w==","signatures":[{"sig":"MEUCIHcb6aPwR/zx2B+7DgM3A0PqgJIqPgGojsZ9SaLnrbGoAiEA3u5A1fqOSmfTTx5VsPHMZgWo+v3gYVTo1jsOon4QHkk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53856},"main":"dist/cjs/index.js","type":"commonjs","_from":"file:/Users/karademir/yazilimvebilisimkomisyonu/52.Dönem/projeler/sso-yetkilendirme/dist-sdk/agdsoftware-react-sso-1.1.0.tgz","types":"dist/cjs/index.d.ts","module":"dist/esm/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/cjs/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest --passWithNoTests","build":"tsc -p tsconfig.json && tsc -p tsconfig.esm.json && node ../../scripts/dist-bicim-isareti.mjs .","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"agdmgv","email":"yazilimvebilisim@agd.org.tr"},"_resolved":"/Users/karademir/yazilimvebilisimkomisyonu/52.Dönem/projeler/sso-yetkilendirme/dist-sdk/agdsoftware-react-sso-1.1.0.tgz","_integrity":"sha512-Aram9cRnLwi+3yLfCN9e/BxWuYYfsHew6qF4Il6tY9ex6H+sDPC9u3itn2k1G3tKc9GEEvTAkGMauNKes0yf9w==","repository":{"url":"git+https://github.com/karademirmustafa/agd-sso.git","type":"git","directory":"packages/react-sso"},"_npmVersion":"11.8.0","description":"AGD SSO/IAM için React entegrasyon paketi — OIDC PKCE oturumu, aktif birim, izin hook'ları","directories":{},"sideEffects":false,"_nodeVersion":"24.13.1","dependencies":{"oidc-client-ts":"^3.1.0","@agdsoftware/sso-client":"1.1.0"},"publishConfig":{"access":"public"},"//dependencies":"pnpm pack/publish sırasında 'workspace:*' gerçek sürüme çevrilir.","_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.0","typescript":"^5.5.4","@types/react":"^19.2.5"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-sso_1.1.0_1786337001668_0.6105803498574935","host":"s3://npm-registry-packages-npm-production"},"deprecated":"→ @agdsoftware/sso-sdk/react"},"1.1.1":{"name":"@agdsoftware/react-sso","version":"1.1.1","keywords":["react","sso","keycloak","oidc","authorization","permissions","hooks","pkce","iam"],"license":"UNLICENSED","_id":"@agdsoftware/react-sso@1.1.1","maintainers":[{"name":"agdmgv","email":"yazilimvebilisim@agd.org.tr"}],"homepage":"https://github.com/karademirmustafa/agd-sso/tree/main/packages/react-sso#readme","bugs":{"url":"https://github.com/karademirmustafa/agd-sso/issues"},"dist":{"shasum":"99fe6bc08660dc09e9ca2f217b9f885e4a1de565","tarball":"https://registry.npmjs.org/@agdsoftware/react-sso/-/react-sso-1.1.1.tgz","fileCount":25,"integrity":"sha512-SDoKDgSQxJ8BWxA0xzLNZQrLBzqbeHtiG1jHAp+ADrPpL8El79UtPz08/8VMw1vbByZHGeDK5V2OjzgCtkHPYw==","signatures":[{"sig":"MEUCIQDWHixOy05x3yzIVdZ7JA2pNKdtJU2M3KO87qN6whG90gIgAqW3rmXv9pAP37vV3I3QPkRUNmHltUSFnOPJwKSKe+g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54037},"main":"dist/cjs/index.js","type":"commonjs","_from":"file:/Users/karademir/yazilimvebilisimkomisyonu/52.Dönem/projeler/sso-yetkilendirme/dist-sdk/agdsoftware-react-sso-1.1.1.tgz","types":"dist/cjs/index.d.ts","module":"dist/esm/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/cjs/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest --passWithNoTests","build":"tsc -p tsconfig.json && tsc -p tsconfig.esm.json && node ../../scripts/dist-bicim-isareti.mjs .","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"agdmgv","email":"yazilimvebilisim@agd.org.tr"},"_resolved":"/Users/karademir/yazilimvebilisimkomisyonu/52.Dönem/projeler/sso-yetkilendirme/dist-sdk/agdsoftware-react-sso-1.1.1.tgz","_integrity":"sha512-SDoKDgSQxJ8BWxA0xzLNZQrLBzqbeHtiG1jHAp+ADrPpL8El79UtPz08/8VMw1vbByZHGeDK5V2OjzgCtkHPYw==","repository":{"url":"git+https://github.com/karademirmustafa/agd-sso.git","type":"git","directory":"packages/react-sso"},"_npmVersion":"11.8.0","description":"Keycloak/OIDC tabanlı merkezi yetkilendirme için React entegrasyonu — PKCE oturumu, aktif birim değiştirme, izin hook’ları ve kimlikli fetch.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.1","dependencies":{"oidc-client-ts":"^3.1.0","@agdsoftware/sso-client":"1.1.1"},"publishConfig":{"access":"public"},"//dependencies":"pnpm pack/publish sırasında 'workspace:*' gerçek sürüme çevrilir.","_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.0","typescript":"^5.5.4","@types/react":"^19.2.5"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-sso_1.1.1_1786337637772_0.23932660101350067","host":"s3://npm-registry-packages-npm-production"},"deprecated":"→ @agdsoftware/sso-sdk/react"}},"time":{"created":"2026-08-10T04:43:21.485Z","modified":"2026-08-10T11:55:14.532Z","1.1.0":"2026-08-10T04:43:21.812Z","1.1.1":"2026-08-10T04:53:57.919Z"},"bugs":{"url":"https://github.com/karademirmustafa/agd-sso/issues"},"license":"UNLICENSED","homepage":"https://github.com/karademirmustafa/agd-sso/tree/main/packages/react-sso#readme","keywords":["react","sso","keycloak","oidc","authorization","permissions","hooks","pkce","iam"],"repository":{"url":"git+https://github.com/karademirmustafa/agd-sso.git","type":"git","directory":"packages/react-sso"},"description":"Keycloak/OIDC tabanlı merkezi yetkilendirme için React entegrasyonu — PKCE oturumu, aktif birim değiştirme, izin hook’ları ve kimlikli fetch.","maintainers":[{"name":"agdmgv","email":"yazilimvebilisim@agd.org.tr"}],"readme":"# @agdsoftware/react-sso\n\nKimliği **Keycloak/OIDC**'den, yetkiyi **merkezi bir IAM servisinden** alan\n**React** uygulamaları için entegrasyon paketi: OIDC (Authorization Code + PKCE)\noturumu, aktif birim seçimi, izin hook'ları.\n\n> Arayüzde izin kontrolü **görgü kuralıdır, güvenlik sınırı değil**: gizlenen\n> buton isteği elle atmayı engellemez. Gerçek kontrol her zaman API'dedir.\n\n## Kurulum\n\n```bash\nnpm i @agdsoftware/react-sso\n```\n\nRegistry'siz ortamda tarball ile: `pnpm sdk:pack` → `npm i\n./vendor/agdsoftware-sso-client-*.tgz ./vendor/agdsoftware-react-sso-*.tgz` (ikisi tek komutta).\n\n## Bağlanma\n\n```tsx\nimport { SsoProvider, RequireSso, ssoConfigFromEnv } from '@agdsoftware/react-sso';\n\n// Standart isimleri okur ve DOĞRULAR:\n//   VITE_SSO_ISSUER · VITE_SSO_CLIENT_ID · VITE_SSO_REDIRECT_URI · VITE_API_BASE_URL\n// (Next.js: ssoConfigFromEnv(process.env, 'NEXT_PUBLIC_'))\n<SsoProvider config={ssoConfigFromEnv(import.meta.env)} fallback={<Splash />}>\n  <RequireSso loading={<Splash />}>\n    <App />\n  </RequireSso>\n</SsoProvider>\n```\n\nElle vermek isterseniz `config` nesnesi aynen kabul edilir\n(`{ issuer, clientId, redirectUri, apiBaseUrl }`).\n\n`redirectUri` **tam adres** olmalı — joker (`http://localhost:5173/*`) SSO\ntarafında `IAM_CLIENT_WILDCARD_FORBIDDEN` ile reddedilir (açık yönlendirme riski).\n\n## İzinler\n\n```tsx\nconst can = usePermission('mgkys:toplanti:guncelle');\n\nif (can === 'loading') return <Skeleton />;   // ÖNCE bunu yazın\nreturn can ? <EditButton /> : null;\n```\n\n`'loading'` **truthy bir string'tir**: `{can && <EditButton/>}` yazmak butonu\nyükleme sırasında gösterir. Üç durum bilerek var — iki duruma indirmek ilk\nboyamada menüyü zıplatır.\n\n```tsx\n<Can permission=\"mgkys:toplanti:olustur\" loading={<Skeleton/>}>\n  <NewMeetingButton />\n</Can>\n```\n\nKaynak-kısıtlı yetki (yalnız belirli kayıtlar):\n\n```tsx\nconst canEdit = useResourcePermission('mgkys:toplanti:guncelle', 'toplanti', meeting.id);\n```\n\n## Aktif birim\n\nKullanıcı birden fazla birimde görevli olabilir; izinler **birime bağlıdır**.\n\n```tsx\nconst { groups, activeGroup, setActiveGroup } = useGroups();\n\n<select value={activeGroup?.id} onChange={(e) => setActiveGroup(e.target.value)}>\n  {groups.map((g) => <option key={g.id} value={g.id}>{g.path}</option>)}\n</select>\n```\n\nBirim değişince izinler otomatik yeniden çekilir.\n\n## İstekler\n\nToken'ı bileşenlere dağıtmayın; istek katmanına bağlayın.\n\n```tsx\n// fetch\nconst ssoFetch = useSsoFetch();\nawait ssoFetch('/api/toplantilar');\n\n// axios\nconst { getAuthHeaders } = useSso();\nuseEffect(() => attachSsoToAxios(api, getAuthHeaders), [getAuthHeaders]);\n```\n\nİkisi de `Authorization: Bearer …` ve `X-Organization-Group-Id` başlıklarını ekler.\n\n## Çıkış\n\n```tsx\nconst { logout } = useSso();\n```\n\nOIDC end-session ucuna `id_token_hint` ile gider: Keycloak oturumu da kapanır.\nYalnız yerel state'i temizlemek, kullanıcının bir sonraki girişte **şifresiz**\ngeri dönmesi demektir — SSO'da \"çıktım\" yanılsamasının klasik kaynağı.\n\n## API\n\n| Hook / Bileşen | İş |\n|---|---|\n| `useSso()` | Durum, kullanıcı, birimler, izinler, `login`/`logout`/`refresh` |\n| `usePermission(code)` | `'loading' \\| true \\| false` |\n| `useAnyPermission(...codes)` | Herhangi biri |\n| `useResourcePermission(code, type, id)` | Kayıt bazlı yetki |\n| `useGroups()` | Birim listesi + aktif birim + değiştirme |\n| `useSsoFetch()` | Başlıkları ekleyen `fetch` |\n| `attachSsoToAxios(instance, getAuthHeaders)` | axios interceptor (axios'a bağımlılık yok) |\n| `<RequireSso>` | Oturum kurulana kadar bekletir, yoksa girişe yollar |\n| `<Can permission>` | İzin varsa çocukları gösterir |\n","readmeFilename":"README.md"}