@blueforge-studio/app-logs

SDK for app-logs, the BlueForge opt-in event lane: a batching producer client for LogEventV1 events and a reader client for events/summary queries. Zero runtime dependencies.

Información del paquete

Latest Version0.1.0
Licensenone
Keywords-
Repository-
Author-
Homepage-
Bugs-

Versiones

VersiónPublicada
0.1.02026-10-25

Cadena de suministro por versión

VersiónFirmaSBOMAtt
0.1.0

Haz clic en una versión para ver sus detalles.

Cadena de suministro

Procedencia

Publicado por
web:5
Cuándo
2026-10-25T21:36:34Z
sha256 (calculado por el registro)
20687bf4bee657c306b98819cb9808cf60ae914e40fbf1a7e7559a90db18c91d

Observado por el registro en el momento de publicar.

Declarado por la compilación

Quien publicó no declaró nada sobre su compilación.

Adjuntos

Firma
ninguno
SBOM
ninguno

Dependencias

Cargando el grafo de dependencias...

README

@blueforge-studio/app-logs

Producer + reader SDK for app-logs, the BlueForge opt-in event lane (design: docs/superpowers/specs/2026-10-23-app-logging-design.md in forge-control). Zero runtime dependencies.

import { createLogProducer, createLogReader } from '@blueforge-studio/app-logs'

// Env (operator-provisioned, mirrors APP_DEVDB_*):
//   FORGE_LOGS_URL     full ingest URL
//   FORGE_LOGS_PROJECT project UUID
//   FORGE_LOGS_SECRET  producer secret (ingest); reader secret (read-back)

const logs = createLogProducer({
  ingestUrl: process.env.FORGE_LOGS_URL!,
  secret: process.env.FORGE_LOGS_SECRET!,
  project: process.env.FORGE_LOGS_PROJECT!,
  enabled: () => consentStore.has('analytics') && flags.mediaLog !== 'off',
})

logs.emit({
  kind: 'audio.play',
  session_ref: liveHandle.session_ref,
  visitor_ref: liveHandle.visitor_ref,
  props: { hop: 'clip_served', path: '/clips/a.mp3', lang: 'da' }, // origin-relative paths!
})
await logs.flush()   // explicit flush = one deterministic receipt (CI/relay pattern)
logs.drop()          // consent revoke: discard the unsent buffer

Receipt: {accepted, deduped, quota_dropped} — the three always sum to the batch size. Batches: ≤500 events, ≤256 KB. Retries: network + 502/503/504 only (never 4xx), secret redacted from every error.

Read-back (verify what you shipped):

const reader = createLogReader({ baseUrl: FORGE_LOGS_URL, readerSecret: READER })
const page = await reader.events({ project, session_ref, kind: 'audio.play' })

An event you cannot read back is not verified. Producer secrets cannot read.