{"_id":"@drkaachen/content-sanity","_rev":"4-313d19880078857099421b7bd1ff5f55","name":"@drkaachen/content-sanity","dist-tags":{"latest":"1.2.1"},"versions":{"1.0.1":{"name":"@drkaachen/content-sanity","version":"1.0.1","license":"MIT","_id":"@drkaachen/content-sanity@1.0.1","maintainers":[{"name":"alikilicaslan","email":"ali.kilicaslan@drk-aachen.de"}],"homepage":"https://github.com/DRKAachen/drk-design-system/tree/main/packages/content-sanity","bugs":{"url":"https://github.com/DRKAachen/drk-design-system/issues"},"dist":{"shasum":"80e45531a978ce7a20f0a6f268069ad7844e52ec","tarball":"https://registry.npmjs.org/@drkaachen/content-sanity/-/content-sanity-1.0.1.tgz","fileCount":6,"integrity":"sha512-UrKr1UQt2lRxcmSoqBxj3YaAOljzulZ0ZqTtBo5lZlos0JLQYeuzr0JTfjkv6dpEHjoAXL6+KL9tqeavkPtfDQ==","signatures":[{"sig":"MEYCIQDyCm2ZtNiaYNeBeJ/a6C2Zt7TlqM5g3+qVCgQmjT33SwIhAJYY6wJqgJXYY91Zv1UfRQkOwt6y71J+aS8mG/3WLJie","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drkaachen%2fcontent-sanity@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8894},"main":"./index.ts","types":"./index.ts","exports":{".":"./index.ts","./lib/*":"./lib/*"},"gitHead":"46a94dba99e32a65d90d2f45e680305ffeb2670f","private":false,"scripts":{"typecheck":"tsc --noEmit"},"_npmUser":{"name":"alikilicaslan","email":"ali.kilicaslan@drk-aachen.de"},"repository":{"url":"git+https://github.com/DRKAachen/drk-design-system.git","type":"git"},"_npmVersion":"11.9.0","description":"Optional Sanity content adapter for DRK apps","directories":{},"_nodeVersion":"24.14.0","dependencies":{"groq":"^5.13.0","@sanity/client":"^7.16.0","@sanity/image-url":"^2.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"next":">=14.0.0","react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-sanity_1.0.1_1772714119385_0.8714835351493126","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@drkaachen/content-sanity","version":"1.1.1","license":"MIT","_id":"@drkaachen/content-sanity@1.1.1","maintainers":[{"name":"afielen","email":"axel.fielen@drk-aachen.de"},{"name":"alikilicaslan","email":"ali.kilicaslan@drk-aachen.de"}],"homepage":"https://github.com/DRKAachen/drk-design-system/tree/main/packages/content-sanity","bugs":{"url":"https://github.com/DRKAachen/drk-design-system/issues"},"dist":{"shasum":"0b8db267a6331ac016843262a15667c5e3ed3b1b","tarball":"https://registry.npmjs.org/@drkaachen/content-sanity/-/content-sanity-1.1.1.tgz","fileCount":6,"integrity":"sha512-ahYJZVN4+BQA80ITNIBom071CETqTHa6yojJgcea1BqPZvORwEzjyR+A7zcQgjL0cyu8MHdIoBl3jradEcTC7g==","signatures":[{"sig":"MEQCICHSzTIUdsIpzuKPrJA3Iq4+/wB6+G/Mc6Cjn33fREjhAiBoOc4Kg2oEVs7fdUVH2SHWcb1psaQJUnqTQbfEKjKFNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drkaachen%2fcontent-sanity@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11152},"main":"./index.ts","types":"./index.ts","exports":{".":"./index.ts","./lib/*":"./lib/*"},"gitHead":"0995b7523a95586042332ad00ab4f0ce59e9e302","private":false,"scripts":{"typecheck":"tsc --noEmit"},"_npmUser":{"name":"alikilicaslan","email":"ali.kilicaslan@drk-aachen.de"},"repository":{"url":"git+https://github.com/DRKAachen/drk-design-system.git","type":"git"},"_npmVersion":"11.9.0","description":"Optional Sanity content adapter for DRK apps","directories":{},"_nodeVersion":"24.14.0","dependencies":{"groq":"^5.13.0","@sanity/client":"^7.16.0","@sanity/image-url":"^2.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"next":">=14.0.0","react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-sanity_1.1.1_1772796416225_0.5267033918492938","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@drkaachen/content-sanity","version":"1.2.1","description":"Optional Sanity content adapter for DRK apps","repository":{"type":"git","url":"git+https://github.com/DRKAachen/drk-design-system.git"},"homepage":"https://github.com/DRKAachen/drk-design-system/tree/main/packages/content-sanity","private":false,"license":"MIT","main":"./index.ts","types":"./index.ts","exports":{".":"./index.ts","./lib/*":"./lib/*"},"publishConfig":{"access":"public"},"peerDependencies":{"next":">=14.0.0","react":">=18.0.0","react-dom":">=18.0.0"},"dependencies":{"@sanity/client":"^7.16.0","@sanity/image-url":"^2.0.3","groq":"^5.13.0"},"scripts":{"typecheck":"tsc --noEmit"},"gitHead":"1c92f5e60ef7f0251917de3da11462a2df8aab10","_id":"@drkaachen/content-sanity@1.2.1","bugs":{"url":"https://github.com/DRKAachen/drk-design-system/issues"},"_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-oQwazfC3fr+sp/nAFeTWP6UQuySyL8EfVCpmUda07J/aEZi781XaZzSqhd/FZEtRG2cjRnQx3DbqKmxwVHa47A==","shasum":"60e03ad7f091c4e7ff368d3f553ce38784edcc41","tarball":"https://registry.npmjs.org/@drkaachen/content-sanity/-/content-sanity-1.2.1.tgz","fileCount":6,"unpackedSize":11152,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@drkaachen%2fcontent-sanity@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIECaRluH1dC7Gmr6Cv327MVuWVtUCrOJFU/V9drA2ms5AiBcHB6Go/GLoaWGU/U4ztEfzfTo0RJo9v1XXjXhtQkGdA=="}]},"_npmUser":{"name":"alikilicaslan","email":"ali.kilicaslan@drk-aachen.de"},"directories":{},"maintainers":[{"name":"afielen","email":"axel.fielen@drk-aachen.de"},{"name":"alikilicaslan","email":"ali.kilicaslan@drk-aachen.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/content-sanity_1.2.1_1773142100264_0.10600284605022736"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-05T12:35:19.304Z","modified":"2026-03-10T11:28:20.767Z","1.0.1":"2026-03-05T12:35:19.540Z","1.1.1":"2026-03-06T11:26:56.379Z","1.2.1":"2026-03-10T11:28:20.423Z"},"bugs":{"url":"https://github.com/DRKAachen/drk-design-system/issues"},"license":"MIT","homepage":"https://github.com/DRKAachen/drk-design-system/tree/main/packages/content-sanity","repository":{"type":"git","url":"git+https://github.com/DRKAachen/drk-design-system.git"},"description":"Optional Sanity content adapter for DRK apps","maintainers":[{"name":"afielen","email":"axel.fielen@drk-aachen.de"},{"name":"alikilicaslan","email":"ali.kilicaslan@drk-aachen.de"}],"readme":"# @drkaachen/content-sanity\n\nOptional Sanity integration package for DRK apps.\n\nThis package contains:\n- Sanity client setup\n- image URL builder (`urlFor`)\n- GROQ queries\n- hostname-based site loading (`getSiteByHostname`)\n\n## When to use\n\nUse this package only in apps that actually need Sanity CMS data.\n\nIf your app is UI-only, install only `@drkaachen/design-system-ui`.\n\n## Installation\n\n```bash\nnpm install @drkaachen/content-sanity\n```\n\n## Exports\n\n```ts\nimport {\n  client,\n  urlFor,\n  getSiteByHostname,\n  siteByHostnameQuery,\n  pageBySlugQuery,\n  blogPostsQuery,\n  blogPostBySlugQuery,\n  legalPageBySlugQuery,\n} from '@drkaachen/content-sanity'\n```\n\n## Environment Variables\n\nRequired:\n- `NEXT_PUBLIC_SANITY_PROJECT_ID`\n\nRecommended:\n- `NEXT_PUBLIC_SANITY_DATASET` (default: `production`)\n- `NEXT_PUBLIC_SANITY_API_VERSION` (default: `2024-01-01`)\n- `NEXT_PUBLIC_DEFAULT_SITE_HOSTNAME` (optional fallback hostname)\n\n## Typical Usage\n\n```ts\nimport { getSiteByHostname, urlFor } from '@drkaachen/content-sanity'\nimport type { SiteConfig as UiSiteConfig } from '@drkaachen/design-system-ui'\n\nexport async function getUiSite(hostname: string): Promise<UiSiteConfig | null> {\n  const cmsSite = await getSiteByHostname(hostname)\n  if (!cmsSite) return null\n\n  return {\n    _id: cmsSite._id,\n    name: cmsSite.name,\n    hostname: cmsSite.hostname,\n    defaultLocale: cmsSite.defaultLocale,\n    logoUrl: cmsSite.logo ? urlFor(cmsSite.logo).height(120).fit('max').auto('format').url() : undefined,\n    navigation: cmsSite.navigation,\n    footerLinks: cmsSite.footerLinks,\n  }\n}\n```\n\n## Boundaries\n\n- Keep CMS-specific logic in this package.\n- Do not import this package from `@drkaachen/design-system-ui`.\n- Keep UI package consumers free from Sanity dependencies unless explicitly needed.\n\n## Privacy and Security Notes\n\n- Store secrets and tokens in environment variables only.\n- Validate all hostnames and request inputs before using them in fetch parameters.\n- Keep CMS integration optional to reduce GDPR/DSGVO risk surface for apps that do not need external content services.\n\n## Data Privacy & DSGVO\n\nUsing this package means your application makes API requests to Sanity.io servers to fetch content. This has several DSGVO (Datenschutz-Grundverordnung) implications:\n\n- **IP address transmission:** Every Sanity API/CDN request transmits the visitor's IP address to Sanity servers. This constitutes personal data processing under DSGVO.\n- **Data Processing Agreement (DPA):** A Auftragsverarbeitungsvertrag (AVV / DPA) with Sanity.io must be in place before processing any visitor data through their services.\n- **International data transfer:** Sanity.io is a US-based service. Standard Contractual Clauses (SCCs) for international data transfer must be executed to comply with DSGVO Chapter V requirements.\n- **Privacy policy disclosure:** Your site's privacy policy (Datenschutzerklärung) must mention Sanity.io as a data processor, the categories of data processed, and the legal basis for the transfer.\n- **Public datasets:** Sanity public datasets are readable by anyone with the project ID. Never store personal data (e.g. user submissions, contact details) in public datasets.\n- **Client-exposed env vars:** All `NEXT_PUBLIC_` environment variables are embedded in the client-side JavaScript bundle by design. `NEXT_PUBLIC_SANITY_PROJECT_ID` and `NEXT_PUBLIC_SANITY_DATASET` will be visible to end users.\n- **CDN routing:** When `useCdn: true` is set (the default for production), content requests are routed through Sanity's CDN, which is likely US-hosted. Consider this when evaluating data residency requirements.\n\n## Security\n\n- **`NEXT_PUBLIC_SANITY_PROJECT_ID` is intentionally public.** It is required on the client to fetch content and only grants read access to public datasets. This is safe as long as public datasets contain only published content data.\n- **Never store sensitive or personal data in public Sanity datasets.** Use private datasets with token-based access for any data that should not be publicly accessible.\n- **Configure Sanity Studio access controls properly.** Restrict editor/admin roles to authorized personnel. Enable two-factor authentication for Sanity accounts. Review the project's CORS origins and API token permissions regularly.\n","readmeFilename":"README.md"}