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
ParametroTipoDefaultDescrizione
storageJwtTokenStoragenew 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
ParametroTipoDefaultDescrizione
config.apiKeystringAPI key (richiesta)
config.headerNamestring'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:

  • type non riconosciuto
  • type === API_KEY senza options.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)

Vedi anche