Solverify Kernel Registry token auth

Build and persona registry for the Solverify node fleet. Nodes install vendored browser kernels and mint per-launch fingerprints from this service — a node only ever needs to reach this host.

Authentication

Every /v1/* call must send Authorization: Bearer <token>. /healthz is always open for health checkers.

curl -H "Authorization: Bearer <token>" "kernelserver.theyka.net/v1/kernel?type=chrome&kernel=154&system=x64"

Endpoints

RouteDescription
GET /healthzLiveness and registry status.
GET /v1/kernel?type=chrome&kernel=154&system=x64[&refresh=1]One build descriptor. Served from cache; refresh=1 forces a re-query.
GET /v1/manifest?spec=chrome:140-154,firefox:144,147,150,153&system=x64[&refresh=1]Bulk lookup used by node installs; returns { kernels, missing }.
GET /v1/download?type=…&kernel=…&system=…Streams the kernel zip. Supports Range / resume and adds X-Kernel-* metadata headers.
POST /v1/refresh?spec=…Forces a re-query of a kernel set.
GET /v1/personas/manifestPersona inventory: per-family counts, kernel list, per-OS breakdown.
POST /v1/personas/mintOne persona for a browser launch (body: { family, count?, kernels?, os? }).

system is one of x64 / x86 (Windows), mac / arm64 (macOS), linux_x64 (Linux). It defaults to this service's own platform.

Build descriptor

{
  "type": "chrome", "kernel": "154", "system": "x64",
  "version": "20261009", "name": "kernel-chrome-154-20261009.zip",
  "md5": "E1B6518DF54ACA807A9C644D165131BD",
  "size": "240.53MB", "sizeBytes": 252213985,
  "url": "kernelserver.theyka.net/v1/download?type=chrome&kernel=154&system=x64"
}

Personas (per-launch fingerprints)

The node engine asks for one persona at browser launch and drops it when the browser closes — nothing is stored on the node. Pools live on this host under personas/ (fingerprints-chrome.jsonl, fingerprints-firefox.jsonl; built by the Node project's harvest pipeline). Each record is served at most once per cycle, so the fleet walks the whole pool before any persona repeats.

RouteDescription
GET /v1/personas/manifestPer-family record counts, kernel list and per-OS breakdown. Node installs plan their kernel set from it.
POST /v1/personas/mintBody { "family": "chrome", "kernels": ["153","154"], "os": "windows" } → { records: [ … ] }. Errors: 404 no pool, 409 no match.
curl -X POST -H "Authorization: Bearer <token>" -H "content-type: application/json" \
  -d '{"family":"chrome","kernels":["153","154"]}' kernelserver.theyka.net/v1/personas/mint

Node side: SOLVERIFY_PERSONA_SOURCE=server mints per launch (defaults to SOLVERIFY_KERNEL_API / SOLVERIFY_KERNEL_API_TOKEN). With local (default), nodes read the JSONL pools themselves.

Node usage

$env:SOLVERIFY_KERNEL_API = "kernelserver.theyka.net"
$env:SOLVERIFY_KERNEL_API_TOKEN = "<token>"   # only when token auth is enabled
npm run kernel-install

The worker runs the same installer automatically before its browser pool starts; fully installed machines skip it without any network call.