Auth
AuthStrategyFactory
Factory statica per la creazione di tutte le strategie di autenticazione (JWT, Cookie, ApiKey, NoAuth). Espone metodi specifici e un metodo dinamico create(type, options).
Cosa fa
AuthStrategyFactory applica il Factory Pattern per centralizzare l'instanziazione delle quattro strategie di autenticazione supportate dalla libreria. Permette di:
- Nascondere i dettagli implementativi delle singole strategy
- Cambiare strategia senza modificare il codice client
- Selezionare la strategia dinamicamente da configurazione (env, feature flag)
- Facilitare il testing con mock strategies
Enum AuthStrategyType
enum AuthStrategyType {
JWT = 'jwt',
COOKIE = 'cookie',
API_KEY = 'apiKey',
NONE = 'none',
}
Identificatori delle strategie disponibili. Usato come discriminante nel metodo create(type, options).
Metodi specifici
createJwtStrategy(storage?)
static createJwtStrategy(storage?: JwtTokenStorage): IAuthStrategy
| Parametro | Tipo | Default | Descrizione |
|---|---|---|---|
storage | JwtTokenStorage | new SessionStorageJwtStorage() | Storage pluggable per i token |
Crea una JwtAuthStrategy con sessionStorage di default (isolato per tab, eliminato alla chiusura). Per persistenza cross-sessione passare uno storage custom.
createCookieStrategy()
static createCookieStrategy(): IAuthStrategy
Crea una CookieAuthStrategy. La config dei cookie (nome, dominio, secure, sameSite) e responsabilita del backend tramite header Set-Cookie.
createApiKeyStrategy(config)
static createApiKeyStrategy(config: ApiKeyAuthConfig): IAuthStrategy
| Parametro | Tipo | Default | Descrizione |
|---|---|---|---|
config.apiKey | string | — | API key (richiesta) |
config.headerName | string | 'x-api-key' | Nome header HTTP |
Crea una ApiKeyAuthStrategy.
createNoAuthStrategy()
static createNoAuthStrategy(): IAuthStrategy
Crea una NoAuthStrategy per endpoint pubblici.
Metodo dinamico create(type, options?)
static create(
type: AuthStrategyType,
options?: {
jwtStorage?: JwtTokenStorage
apiKeyConfig?: ApiKeyAuthConfig
}
): IAuthStrategy
Seleziona la strategy in base a type. Throw se:
typenon riconosciutotype === API_KEYsenzaoptions.apiKeyConfig
Pattern utile per leggere la strategy da config esterna o env var, senza accoppiare il codice client a una specifica implementazione.
Esempi
Selezione dinamica da env
import { AuthStrategyFactory, AuthStrategyType } from '@pzeta/postgrest'
function getAuthStrategy() {
const mode = process.env.AUTH_MODE as AuthStrategyType
return AuthStrategyFactory.create(mode, {
apiKeyConfig: { apiKey: process.env.API_KEY ?? '' },
})
}
Switch dev/prod
function getAuthStrategy(env: 'dev' | 'prod') {
return AuthStrategyFactory.create(
env === 'dev' ? AuthStrategyType.NONE : AuthStrategyType.JWT
)
}
Integrazione completa
import {
AuthStrategyFactory,
AuthServiceFactory,
HttpClientFactory,
} from '@pzeta/postgrest'
const httpClient = HttpClientFactory.createFetchClient()
const strategy = AuthStrategyFactory.createJwtStrategy()
const authService = AuthServiceFactory.create(httpClient, strategy)
httpClient.setAuthStrategy(strategy)
httpClient.setAuthHandler(authService)