2026-04-26 12:25:11 +01:00
|
|
|
{
|
|
|
|
|
"name": "heimdall",
|
|
|
|
|
"private": true,
|
|
|
|
|
"type": "module",
|
|
|
|
|
"packageManager": "pnpm@10.33.0",
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=24.0.0"
|
|
|
|
|
},
|
|
|
|
|
"scripts": {
|
|
|
|
|
"build": "tsc -p tsconfig.json",
|
|
|
|
|
"dev": "tsx watch src/index.ts",
|
|
|
|
|
"start": "node dist/index.js",
|
2026-04-26 12:25:53 +01:00
|
|
|
"test": "vitest run --config vitest.config.ts",
|
2026-06-03 03:21:31 +01:00
|
|
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
2026-08-22 02:35:20 +02:00
|
|
|
"export:provider-health-public-key": "tsx src/export-provider-health-public-key.ts",
|
2026-09-06 16:51:59 +02:00
|
|
|
"export:provider-advertisement": "tsx src/export-provider-advertisement.ts --pretty",
|
|
|
|
|
"bundle": "esbuild src/index.ts --bundle --platform=node --format=esm --target=node24 --outfile=dist/heimdall --external:pg-native --banner:js=\"#!/usr/bin/env node\nimport{createRequire}from'node:module';const require=createRequire(import.meta.url);\""
|
2026-04-26 12:25:11 +01:00
|
|
|
},
|
|
|
|
|
"dependencies": {
|
|
|
|
|
"@fastify/cors": "^11.2.0",
|
2026-06-16 18:01:07 +01:00
|
|
|
"@msgpack/msgpack": "^3.1.3",
|
2026-09-07 22:26:24 +02:00
|
|
|
"@gamecult/cultcache-ts": "file:vendor/CultLib/packages/cultcache-ts",
|
Vendor CultLib as a gitlink so Heimdall's source can be sealed
Heimdall took CultLib as file:../CultLib/packages/*, a sibling checkout
outside this repository. Nothing pinned which CultLib a given Heimdall
commit was built against, and a sealed source could not reach it. The
deploy manifest worked around this by cloning CultLib separately to
/srv/build/CultLib with cultlib_commit=5cefa0db hardcoded in shell -- the
pin existed, it just lived in an untyped place where no build could see it.
vendor/CultLib is now a submodule pinned at exactly 5cefa0db, the commit
the manifest already used, so this change is purely structural: the
dependency does not move. Bumping to a current CultLib is a separate
change, and should be, or a failure could not be attributed.
This also uncovered that the build was never reproducible from a clean
checkout. The sibling directory had dist/ present because someone had
built it by hand at some point; a fresh CultLib clone has none, and the
packages' main/types point straight at dist/. Building Heimdall against a
fresh CultLib fails with thirteen TS2307s. The manifest knew -- it runs
npm ci then npm run build for cultcache-ts, cultnet-ts and cultmesh-ts
before touching Heimdall -- but that knowledge lived only in the shell
script. It belongs in the recipe's steps, which is where it goes next.
Verified end to end on a fresh submodule clone: the three CultLib packages
build, pnpm install resolves, tsc exits 0, dist/src/index.js is produced
(the exact path heimdall.service runs), and vitest passes 38 tests in 9
files.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 00:42:45 +02:00
|
|
|
"cultmesh-ts": "file:vendor/CultLib/packages/cultmesh-ts",
|
|
|
|
|
"cultnet-ts": "file:vendor/CultLib/packages/cultnet-ts",
|
2026-10-22 21:00:47 +02:00
|
|
|
"fastify": "^5.12.6",
|
2026-08-22 03:30:56 +02:00
|
|
|
"pg": "^8.20.0",
|
|
|
|
|
"zod": "^3.25.76"
|
2026-04-26 12:25:11 +01:00
|
|
|
},
|
|
|
|
|
"devDependencies": {
|
|
|
|
|
"@types/node": "^25.6.0",
|
2026-04-26 12:50:07 +01:00
|
|
|
"@types/pg": "^8.20.0",
|
|
|
|
|
"pg-mem": "^3.0.14",
|
2026-04-26 12:25:11 +01:00
|
|
|
"tsx": "^4.21.0",
|
|
|
|
|
"typescript": "^6.0.3",
|
2026-09-06 16:51:59 +02:00
|
|
|
"vitest": "^4.1.5",
|
|
|
|
|
"esbuild": "^0.27.7"
|
2026-08-22 03:30:56 +02:00
|
|
|
},
|
|
|
|
|
"pnpm": {
|
|
|
|
|
"overrides": {
|
2026-09-07 22:26:24 +02:00
|
|
|
"@gamecult/cultcache-ts": "file:vendor/CultLib/packages/cultcache-ts",
|
Vendor CultLib as a gitlink so Heimdall's source can be sealed
Heimdall took CultLib as file:../CultLib/packages/*, a sibling checkout
outside this repository. Nothing pinned which CultLib a given Heimdall
commit was built against, and a sealed source could not reach it. The
deploy manifest worked around this by cloning CultLib separately to
/srv/build/CultLib with cultlib_commit=5cefa0db hardcoded in shell -- the
pin existed, it just lived in an untyped place where no build could see it.
vendor/CultLib is now a submodule pinned at exactly 5cefa0db, the commit
the manifest already used, so this change is purely structural: the
dependency does not move. Bumping to a current CultLib is a separate
change, and should be, or a failure could not be attributed.
This also uncovered that the build was never reproducible from a clean
checkout. The sibling directory had dist/ present because someone had
built it by hand at some point; a fresh CultLib clone has none, and the
packages' main/types point straight at dist/. Building Heimdall against a
fresh CultLib fails with thirteen TS2307s. The manifest knew -- it runs
npm ci then npm run build for cultcache-ts, cultnet-ts and cultmesh-ts
before touching Heimdall -- but that knowledge lived only in the shell
script. It belongs in the recipe's steps, which is where it goes next.
Verified end to end on a fresh submodule clone: the three CultLib packages
build, pnpm install resolves, tsc exits 0, dist/src/index.js is produced
(the exact path heimdall.service runs), and vitest passes 38 tests in 9
files.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 00:42:45 +02:00
|
|
|
"cultnet-ts": "file:vendor/CultLib/packages/cultnet-ts"
|
2026-08-22 03:30:56 +02:00
|
|
|
}
|
2026-04-26 12:25:11 +01:00
|
|
|
}
|
|
|
|
|
}
|