From 1086aee01169bf60e8a492b2740db1c6f3e8cabf Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 22 Aug 2026 03:47:02 +0200 Subject: [PATCH] Give Heimdall Odin documents unique catalog keys --- src/odin-publication.ts | 17 ++++++++++++++++- tests/odin-publication.test.ts | 16 ++++++++-------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/odin-publication.ts b/src/odin-publication.ts index 3580928..702f3a3 100644 --- a/src/odin-publication.ts +++ b/src/odin-publication.ts @@ -36,7 +36,22 @@ export async function publishHeimdallOdinState( ); const publish = options.publish ?? publishRecord; for (const record of buildHeimdallVerseRecords(config, pulse)) { - await publish(record, endpoint); + await publish({ ...record, key: odinCatalogKey(record) }, endpoint); + } +} + +function odinCatalogKey(record: CultCacheRecord): string { + switch (record.schemaId) { + case "gamecult.eve.provider_advertisement.v1": + return "eve:provider:heimdall"; + case "heimdall.command_boundary.v1": + return "heimdall:command-boundary"; + case "gamecult.eve.plugin_advertisement.v1": + return "eve:plugin:gamecult.heimdall.access"; + case "heimdall.transport_profile.v1": + return "heimdall:transport-profile"; + default: + throw new Error(`Heimdall has no Odin catalog key for ${record.schemaId}`); } } diff --git a/tests/odin-publication.test.ts b/tests/odin-publication.test.ts index 6eaed8a..6518999 100644 --- a/tests/odin-publication.test.ts +++ b/tests/odin-publication.test.ts @@ -36,10 +36,10 @@ describe("Heimdall Odin publication", () => { }); expect(published.map((record) => [record.schemaId, record.key])).toEqual([ - ["gamecult.eve.provider_advertisement.v1", "heimdall"], - ["heimdall.command_boundary.v1", "heimdall"], - ["gamecult.eve.plugin_advertisement.v1", "gamecult.heimdall.access"], - ["heimdall.transport_profile.v1", "heimdall"], + ["gamecult.eve.provider_advertisement.v1", "eve:provider:heimdall"], + ["heimdall.command_boundary.v1", "heimdall:command-boundary"], + ["gamecult.eve.plugin_advertisement.v1", "eve:plugin:gamecult.heimdall.access"], + ["heimdall.transport_profile.v1", "heimdall:transport-profile"], ]); const serialized = JSON.stringify(published); expect(serialized).not.toContain("must-never-publish"); @@ -85,10 +85,10 @@ describe("Heimdall Odin publication", () => { environment: { CULTMESH_URI_ODIN_RUDP: `127.0.0.1:${server.bind.port}` }, }); expect([...received].sort()).toEqual([ - "gamecult.eve.plugin_advertisement.v1:gamecult.heimdall.access", - "gamecult.eve.provider_advertisement.v1:heimdall", - "heimdall.command_boundary.v1:heimdall", - "heimdall.transport_profile.v1:heimdall", + "gamecult.eve.plugin_advertisement.v1:eve:plugin:gamecult.heimdall.access", + "gamecult.eve.provider_advertisement.v1:eve:provider:heimdall", + "heimdall.command_boundary.v1:heimdall:command-boundary", + "heimdall.transport_profile.v1:heimdall:transport-profile", ]); } finally { server.close();