Vai al contenuto
PuraPura Developers

SDK in abbonamento

OAuth per utente · limiti del piano condivisi tra le app · modello gestito da Pura.

Cerchi le API a consumo?
Developers/SDK TypeScript

SDK TypeScript

Node e browser: servizi, chat, streaming, audio e consumo.

Configura il client

PuraInferenceClient riceve apiBase terminante in /v1, clientId e il TokenStore del grant. clientSecret è previsto solo su backend confidential. fetch è opzionale per adattare il trasporto; in produzione preserva HTTPS, header e body del contratto.

typescript
import {PuraInferenceClient} from '@pura-ai/sdk';
const pura = new PuraInferenceClient({
  apiBase: 'https://ai.puradigital.it/v1',
  clientId: process.env.PURA_CLIENT_ID!,
  clientSecret: process.env.PURA_CLIENT_SECRET!,
  store: userTokenStore,
});
const capabilities = await pura.capabilities();
const usage = await pura.usage();

Metodi di inferenza

capabilities() restituisce services.chat e services.audio_transcription. chat(body) restituisce il JSON della risposta. streamChat(body) restituisce una Response con un ReadableStream SSE; gestisci parsing e cancellazione. transcribe(options) restituisce text. usage() espone le percentuali dell’account. Nessuno di questi metodi consente di scegliere un modello.

Consuma lo stream

Il reader riceve chunk, non eventi completi: il confine di un chunk non coincide necessariamente con una riga SSE. Decodifica con TextDecoder in modalità stream e mantieni un buffer fino al separatore tra eventi. Chiudi il reader quando l’utente interrompe.

typescript
const response = await pura.streamChat({
  messages: [{role: 'user', content: 'Hello'}],
});
const reader = response.body!.getReader();
const decoder = new TextDecoder();
try {
  while (true) {
    const {done, value} = await reader.read();
    if (done) break;
    consumeSseChunk(decoder.decode(value, {stream: true}));
  }
  consumeSseChunk(decoder.decode());
} finally {
  await reader.cancel();
  reader.releaseLock();
}

Errori tipizzati

PuraError.status e PuraError.code permettono di distinguere autenticazione, revoca, limiti e indisponibilità. L’SDK rinnova il token quando necessario; non cambia provider, non addebita il wallet e non ripete automaticamente una richiesta di inferenza con esito ambiguo.

typescript
import {PuraError} from '@pura-ai/sdk';
try {
  await pura.chat({messages});
} catch (error) {
  if (error instanceof PuraError && error.status === 402) {
    showSubscriptionLimit(error.code);
  } else {
    throw error;
  }
}