From 351f70245bd27552ed1921861ddf36dbef32dcba Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Wed, 19 Aug 2026 03:29:46 +0200 Subject: [PATCH] Bind Eve navigation to an authority runtime --- .../dist/generated/command-receipt.d.ts | 1 + .../eve-contracts/src/generated/command-receipt.ts | 1 + packages/eve-contracts/src/generated/schemas.ts | 4 ++++ .../GameCult.Eve.Surface.csproj | 2 +- .../Runtime/EveProviderDocuments.cs | 13 ++++++++++--- packages/org.gamecult.eve.surface/package.json | 2 +- schemas/gamecult.eve.command_receipt.v1.schema.json | 4 ++++ .../EveSurfaceSerializationCompatibilityTests.cs | 5 ++++- 8 files changed, 26 insertions(+), 6 deletions(-) diff --git a/packages/eve-contracts/dist/generated/command-receipt.d.ts b/packages/eve-contracts/dist/generated/command-receipt.d.ts index 7c6c6c4..c6b4005 100644 --- a/packages/eve-contracts/dist/generated/command-receipt.d.ts +++ b/packages/eve-contracts/dist/generated/command-receipt.d.ts @@ -16,6 +16,7 @@ export interface EveCommandReceipt { sourceVersion: number; navigation?: { verseId: string; + authorityRuntimeId?: string; providerId?: string; surfaceId: string; surfaceKind?: string; diff --git a/packages/eve-contracts/src/generated/command-receipt.ts b/packages/eve-contracts/src/generated/command-receipt.ts index 46a6db4..dee7125 100644 --- a/packages/eve-contracts/src/generated/command-receipt.ts +++ b/packages/eve-contracts/src/generated/command-receipt.ts @@ -18,6 +18,7 @@ issuedAtUtc?: string sourceVersion: number navigation?: { verseId: string +authorityRuntimeId?: string providerId?: string surfaceId: string surfaceKind?: string diff --git a/packages/eve-contracts/src/generated/schemas.ts b/packages/eve-contracts/src/generated/schemas.ts index a77d3e3..d54289d 100644 --- a/packages/eve-contracts/src/generated/schemas.ts +++ b/packages/eve-contracts/src/generated/schemas.ts @@ -757,6 +757,10 @@ export const eveContractSchemas = { "type": "string", "minLength": 1 }, + "authorityRuntimeId": { + "type": "string", + "minLength": 1 + }, "providerId": { "type": "string" }, diff --git a/packages/org.gamecult.eve.surface/GameCult.Eve.Surface.csproj b/packages/org.gamecult.eve.surface/GameCult.Eve.Surface.csproj index 72b5b3f..c3efc08 100644 --- a/packages/org.gamecult.eve.surface/GameCult.Eve.Surface.csproj +++ b/packages/org.gamecult.eve.surface/GameCult.Eve.Surface.csproj @@ -6,7 +6,7 @@ enable Portable Eve surface and provider contracts. GameCult.Eve.Surface - 0.3.2 + 0.3.3 GameCult MPL-2.0 https://github.com/GameCult/Eve diff --git a/packages/org.gamecult.eve.surface/Runtime/EveProviderDocuments.cs b/packages/org.gamecult.eve.surface/Runtime/EveProviderDocuments.cs index 052f05e..7b4621a 100644 --- a/packages/org.gamecult.eve.surface/Runtime/EveProviderDocuments.cs +++ b/packages/org.gamecult.eve.surface/Runtime/EveProviderDocuments.cs @@ -546,8 +546,9 @@ namespace GameCult.Eve.Surface { if (navigation == null) { writer.WriteNil(); return; } - writer.WriteMapHeader(5); + writer.WriteMapHeader(6); Write(ref writer, "verseId", navigation.VerseId); + Write(ref writer, "authorityRuntimeId", navigation.AuthorityRuntimeId); Write(ref writer, "providerId", navigation.ProviderId); Write(ref writer, "surfaceId", navigation.SurfaceId); Write(ref writer, "surfaceKind", navigation.SurfaceKind); @@ -571,6 +572,7 @@ namespace GameCult.Eve.Surface try { var verseId = ""; + var authorityRuntimeId = ""; var providerId = ""; var surfaceId = ""; var surfaceKind = ""; @@ -581,6 +583,7 @@ namespace GameCult.Eve.Surface switch (reader.ReadString()) { case "verseId": verseId = ReadString(ref reader); break; + case "authorityRuntimeId": authorityRuntimeId = ReadString(ref reader); break; case "providerId": providerId = ReadString(ref reader); break; case "surfaceId": surfaceId = ReadString(ref reader); break; case "surfaceKind": surfaceKind = ReadString(ref reader); break; @@ -588,7 +591,8 @@ namespace GameCult.Eve.Surface default: reader.Skip(); break; } } - return new EveSurfaceNavigationTarget(verseId, providerId, surfaceId, surfaceKind, endpoints); + return new EveSurfaceNavigationTarget( + verseId, providerId, surfaceId, surfaceKind, endpoints, authorityRuntimeId); } finally { reader.Depth--; } } @@ -626,9 +630,11 @@ namespace GameCult.Eve.Surface string providerId, string surfaceId, string surfaceKind, - string[]? rendezvousEndpoints = null) + string[]? rendezvousEndpoints = null, + string authorityRuntimeId = "") { VerseId = verseId ?? ""; + AuthorityRuntimeId = authorityRuntimeId ?? ""; ProviderId = providerId ?? ""; SurfaceId = surfaceId ?? ""; SurfaceKind = surfaceKind ?? ""; @@ -640,5 +646,6 @@ namespace GameCult.Eve.Surface [Key(2)] public string SurfaceId { get; } [Key(3)] public string SurfaceKind { get; } [Key(4)] public string[] RendezvousEndpoints { get; } + [Key(5)] public string AuthorityRuntimeId { get; } } } diff --git a/packages/org.gamecult.eve.surface/package.json b/packages/org.gamecult.eve.surface/package.json index c4b93b8..a2badf5 100644 --- a/packages/org.gamecult.eve.surface/package.json +++ b/packages/org.gamecult.eve.surface/package.json @@ -1,7 +1,7 @@ { "name": "org.gamecult.eve.surface", "displayName": "Eve Surface Contract", - "version": "0.3.2", + "version": "0.3.3", "unity": "2021.3", "description": "Renderer-neutral C# contracts and builders for gamecult.eve.surface.v1 documents.", "dependencies": { diff --git a/schemas/gamecult.eve.command_receipt.v1.schema.json b/schemas/gamecult.eve.command_receipt.v1.schema.json index 90ea3fb..f0c3091 100644 --- a/schemas/gamecult.eve.command_receipt.v1.schema.json +++ b/schemas/gamecult.eve.command_receipt.v1.schema.json @@ -80,6 +80,10 @@ "type": "string", "minLength": 1 }, + "authorityRuntimeId": { + "type": "string", + "minLength": 1 + }, "providerId": { "type": "string" }, diff --git a/tests/GameCult.Eve.Surface.Serialization.Tests/EveSurfaceSerializationCompatibilityTests.cs b/tests/GameCult.Eve.Surface.Serialization.Tests/EveSurfaceSerializationCompatibilityTests.cs index df83356..4c44d62 100644 --- a/tests/GameCult.Eve.Surface.Serialization.Tests/EveSurfaceSerializationCompatibilityTests.cs +++ b/tests/GameCult.Eve.Surface.Serialization.Tests/EveSurfaceSerializationCompatibilityTests.cs @@ -208,7 +208,8 @@ public sealed class EveSurfaceSerializationCompatibilityTests "aetheria.daemon", "aetheria.pilot", "interactive-world", - new[] { "cultnet+tcp://odin.gamecult.example:3076" })); + new[] { "cultnet+tcp://odin.gamecult.example:3076" }, + "commander-daemon")); var bytes = MessagePackSerializer.Serialize(document, Options); var reader = new MessagePackReader(bytes); @@ -220,6 +221,7 @@ public sealed class EveSurfaceSerializationCompatibilityTests Assert.That(wireJson.RootElement.GetProperty("navigation").ValueKind, Is.EqualTo(JsonValueKind.Object)); Assert.That(restored.Navigation, Is.Not.Null); Assert.That(restored.Navigation!.VerseId, Is.EqualTo("gamecult.aetheria")); + Assert.That(restored.Navigation.AuthorityRuntimeId, Is.EqualTo("commander-daemon")); Assert.That(restored.Navigation.SurfaceId, Is.EqualTo("aetheria.pilot")); Assert.That(restored.Navigation.SurfaceKind, Is.EqualTo("interactive-world")); Assert.That(restored.Navigation.RendezvousEndpoints, Is.EqualTo(new[] { "cultnet+tcp://odin.gamecult.example:3076" })); @@ -260,6 +262,7 @@ public sealed class EveSurfaceSerializationCompatibilityTests Assert.That(restored.CommandId, Is.EqualTo("legacy-command")); Assert.That(restored.Navigation, Is.Not.Null); Assert.That(restored.Navigation!.SurfaceId, Is.EqualTo("aetheria.pilot")); + Assert.That(restored.Navigation.AuthorityRuntimeId, Is.Empty); }); }