Private
Public Access
CI / js (push) Successful in 18s
CI / go (push) Successful in 36s
CI / rust (push) Successful in 2m3s
Each package gets a small example program that exercises the real client: with no ORIGIN_SERVICE_KEY set it runs against a local mock check-in server, otherwise it checks in against ORIGIN_URL/Origin's public endpoint. Wired into CI (mock mode) as a regression check, and documented per README. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@warkanum/origin-client (JS/TS)
npm install @warkanum/origin-client
Node >=18, ESM only.
Usage
import { OriginClient } from "@warkanum/origin-client";
const client = new OriginClient({
serviceKey: "...",
type: "myservice",
version: "1.2.3",
name: "myservice-nova",
});
client.start(); // immediate check-in, then every 24h until stop()
Call client.checkinOnce() directly instead of start() to send a single
check-in and observe the result/error.
Config
| Field | Required | Default |
|---|---|---|
serviceKey |
yes | — |
type, version, name |
yes | — |
url |
no | DEFAULT_URL (https://origin.warky.dev/api/public/service-checkin) |
appType |
no | "javascript" |
hostname |
no | OS hostname |
containerId |
no | best-effort Docker/cgroup detection |
orchestrator |
no | best-effort Kubernetes/Docker detection |
installId |
no | OS machine ID, else a generated UUID persisted to installIdPath |
intervalHours |
no | DEFAULT_INTERVAL_HOURS (24) |
logger |
no | discards warnings |
site, environment, databaseType, databaseName, port, baseUrl,
internalUrl, description are optional metadata with no default.
hostname(), outboundIp(), containerId(), orchestrator(), and
resolveMachineId() are exported standalone for callers that want the
detection logic without the HTTP client.
Manual smoke test
npm run example # single check-in, local mock server
node examples/testclient.mjs --watch # loops via start() until Ctrl-C
Set ORIGIN_SERVICE_KEY (and optionally ORIGIN_URL, ORIGIN_TYPE,
ORIGIN_VERSION, ORIGIN_NAME, ORIGIN_SITE, ORIGIN_ENVIRONMENT,
ORIGIN_INTERVAL_HOURS) to check in against a real endpoint instead.