No description
  • TypeScript 92.2%
  • C++ 5.6%
  • Python 2.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-19 00:39:09 +02:00
.voidbot/state Seed Heimdall social interpretation biases 2026-05-24 20:39:24 +01:00
assets Add Heimdall profile avatar 2026-05-20 18:52:21 +01:00
docs Add Ghostlight Dungeon Heimdall profile 2026-08-19 00:39:09 +02:00
notes Publish Heimdall daemon boundary state for Idunn 2026-06-16 18:01:07 +01:00
src Add Ghostlight Dungeon Heimdall profile 2026-08-19 00:39:09 +02:00
state Publish Heimdall daemon boundary state for Idunn 2026-06-16 18:01:07 +01:00
tests Add Ghostlight Dungeon Heimdall profile 2026-08-19 00:39:09 +02:00
tools Rename repo to Heimdall 2026-04-26 11:41:27 +01:00
.env.example Allow configured Spotiverse portal callbacks 2026-06-02 19:25:14 +01:00
.gitignore Ignore local secret files 2026-04-29 12:23:45 +01:00
AGENTS.md Add Spotiverse Spotify credential custody 2026-06-02 16:25:38 +01:00
package.json Publish Heimdall daemon boundary state for Idunn 2026-06-16 18:01:07 +01:00
pnpm-lock.yaml Publish Heimdall daemon boundary state for Idunn 2026-06-16 18:01:07 +01:00
README.md Publish Heimdall daemon boundary state for Idunn 2026-06-16 18:01:07 +01:00
tsconfig.json Land Heimdall service skeleton 2026-04-26 12:25:11 +01:00
vitest.config.ts Limit Vitest to source test tree 2026-04-26 12:25:53 +01:00

Heimdall

Heimdall is the shared auth authority taking shape for GameCult-hosted experiments.

The point is painfully simple:

  • stop rebuilding Discord/Patreon login glue in every app
  • keep provider OAuth, linked identities, grants, entitlements, and session issuance in one place
  • let app runtimes verify signed claims locally so "shared auth" does not become "everything phones home for every request"
  • keep app-domain data separate so "shared auth" does not become "shared swamp"

Current Shape

This repo now has a stateful first slice instead of a decorative skeleton.

Landed right now:

  • a TypeScript/Fastify service scaffold under src/
  • Ed25519 JWT signing plus /.well-known/jwks.json
  • file-backed signing-key loading/bootstrap so restart does not vaporize the service identity when you configure a real key path
  • signed OAuth start-state scaffolding for Discord, Patreon, GitHub, Twitch, YouTube, and Spotify
  • durable auth/control-plane storage with in-memory and Postgres backends
  • account, linked-identity, session, grant, entitlement snapshot, and audit persistence
  • a real Discord OAuth callback path for the first Repixelizer access flow
  • direct backend callback handoff for same-host or Yggdrasil-reachable app backends
  • AES-256-GCM sealing for managed provider tokens at rest
  • a one-time browser completion exchange kept as fallback for opener postMessage handoff
  • app profile surfaces for Repixelizer, StreamPixels, and Spotiverse
  • signed claim issuance for app-local verification experiments
  • a local verifier helper in src/verifier.ts so app backends can validate Heimdall JWTs without phoning home on every guarded request
  • a read-only Odin/Eve provider advertisement export that names redacted CultCache witness document shapes and paths without touching live secrets
  • a daemon-owned CultCache boundary witness at GC_ACCESS_CULTCACHE_PATH containing the Heimdall provider advertisement, command boundary, transport profile, and Idunn daemon-health summary
  • optional Idunn daemon-health publication over cultnet.transport.rudp.v0 when GC_ACCESS_IDUNN_RUDP_HEALTH is configured

Still not landed:

  • end-to-end app integrations in consumer repos
  • refresh/revocation flows and admin surfaces
  • full redacted per-document Heimdall auth witness export or CultMesh publication

Canonical docs:

  • docs/architecture.md
  • docs/implementation-plan.md
  • docs/service-contract.md
  • docs/verse-service-contract.md
  • docs/app-profiles/repixelizer.md
  • docs/app-profiles/streampixels.md
  • docs/app-profiles/spotiverse.md
  • state/map.yaml
  • notes/fresh-workspace-handoff.md

Dev Commands

pnpm install
pnpm dev
pnpm test
pnpm build
pnpm export:provider-advertisement

Working Loop

  1. Rehydrate from canonical state.
  2. Keep identity authority central and app-domain data local.
  3. Prefer a Yggdrasil-hosted shared service over duplicated per-app provider stacks.
  4. Let app backends verify signed claims locally instead of begging Heimdall on every guarded route.
  5. Commit finished passes before the notes start breeding.