@e-volv/flags-client
v0.1.1
Published
e-volv Launch — the runtime-agnostic client flags core: context fitting and fingerprinting, the evaluated-values store, polling, cache envelopes and exposures. Shared by the browser entry of @e-volv/logs and the React Native JavaScript fallback.
Readme
@e-volv/flags-client
The runtime-agnostic client flags core of e-volv Launch.
Shared by the browser entry of @e-volv/logs (@e-volv/logs/browser/flags)
and the React Native JavaScript fallback, so every client platform serves one
implementation of:
- context fitting — drop attributes largest-first until the context JSON
fits the 4,096-character query budget, never dropping
key,kindortargetingKey(contract §2.2), plus the canonical-JSON fingerprint a values cache is tied to (§6). - the evaluated-values store — client SDKs never evaluate; they read the values served for the current context, synchronously and without I/O (§3).
- polling delivery — clients poll (min 15 s, default 60 s); they never
stream (§2.3), degrade per the §2.6 status table, and re-fetch on
identify. - cache envelopes — one storage entry per key (
evolve-flags-<hash>), atomically written, rejected when corrupt, foreign-environment or from an unreadable ruleset version (§6). - exposures — deduplicated (client default window 300 s), sampled, capped at 10,000 pending, flushed by the host's sender.
There is deliberately no evaluator here: a client key receives evaluated
values only (§1). The package's only value-level dependency is the kernel's
synchronous SHA-1 (@e-volv/flags-kernel/sha1), used for cache names and
fingerprints; it imports the kernel index for types only, so a browser bundle
never pulls flag evaluation logic.
Hosts inject everything runtime-shaped through ClientFlagsDeps: fetch,
key/value storage, timers, the SDK-identifying header(s), and the exposure
sender. See src/browser/flags.ts in @e-volv/logs for the reference host.
The behaviour is pinned by docs/LAUNCH-SDK.md and its delivery suite in
packages/flags-conformance.
