@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.

Informations sur le paquet

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

Versions

VersionPubliée
0.1.02026-10-25

Chaîne d'approvisionnement par version

VersionSigSBOMAtt
0.1.0

Cliquez sur une version pour voir ses détails.

Chaîne d'approvisionnement

Provenance

Publié par
web:5
Quand
2026-10-25T21:36:34Z
sha256 (calculé par le registre)
20687bf4bee657c306b98819cb9808cf60ae914e40fbf1a7e7559a90db18c91d

Observé par le registre au moment de la publication.

Déclaré par la compilation

L'éditeur n'a rien déclaré sur sa compilation.

Pièces jointes

Signature
aucune
SBOM
aucune

Dépendances

Chargement du graphe de dépendances...

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.