Files
ipal-kit/docs/payload-helpers.md
2026-08-04 19:37:23 +02:00

54 lines
1.8 KiB
Markdown

# payload-helpers
Typowany dostęp do globali pluginu (SiteSettings, SiteIntegrations) przez
Local API. Zgodnie z zasadą: helpery przyjmują `payload` jako argument —
plugin nigdy nie woła `getPayload` sam.
## Config
Brak — te globale są zawsze budowane przez plugin. Nie ma osobnej opcji.
## Front — odczyt globali
```ts
import { getSiteSettings, getSiteIntegrations } from '@intecion/ipal-kit'
import type { SiteSetting, SiteIntegration } from '@/payload-types'
const payload = await getPayload({ config })
// SiteSettings (publiczne — siteName, logo, favicon, theme, system pages)
const settings = await getSiteSettings<SiteSetting>(payload, { locale: 'pl' })
// SiteIntegrations (admin-only; Local API omija access control)
const integrations = await getSiteIntegrations<SiteIntegration>(payload)
```
Generyk `<T>` pozwala wstrzyknąć wygenerowany typ klienta. Bez niego zwraca
`Record<string, unknown>`.
## ⚠️ SiteIntegrations zawiera sekrety
Local API domyślnie omija access control (`overrideAccess: true`), więc
`getSiteIntegrations` **zwróci sekrety** (SMTP password, Turnstile secret,
R2 keys) mimo bariery admin-only na globalu. To zamierzone — logika serwerowa
tego potrzebuje.
**Nigdy nie przekazuj surowego wyniku do przeglądarki.** Czytaj konkretne
wartości server-side, do klienta wysyłaj tylko bezpieczne (np. `turnstileSiteKey`,
nie `turnstileSecretKey`):
```ts
// ŹLE — wyciek sekretów do klienta
return <Form data={await getSiteIntegrations(payload)} />
// DOBRZE — tylko publiczna wartość
const { turnstileSiteKey } = await getSiteIntegrations(payload)
return <Form siteKey={turnstileSiteKey} />
```
## Niższy poziom: getGlobal
```ts
import { getGlobal } from '@intecion/ipal-kit'
const data = await getGlobal<MyType>(payload, 'moj-global', { locale: 'pl', depth: 1 })
```