diff --git a/src/main/java/network/crypta/node/runtime/LegacyRuntimePorts.java b/src/main/java/network/crypta/node/runtime/LegacyRuntimePorts.java index 0983810325..40a456e7cc 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyRuntimePorts.java +++ b/src/main/java/network/crypta/node/runtime/LegacyRuntimePorts.java @@ -4,6 +4,8 @@ import java.util.Random; import network.crypta.node.Node; import network.crypta.node.NodeClientCore; +import network.crypta.runtime.admin.AdminRuntimePortsBundle; +import network.crypta.runtime.admin.AdminRuntimePortsFactory; import network.crypta.runtime.spi.ConfigPort; import network.crypta.runtime.spi.ConnectionsPagePort; import network.crypta.runtime.spi.ConnectionsSupportPort; @@ -165,28 +167,30 @@ public long startupTimeMillis() { }; this.configPort = new LegacyConfigPort(node, core); this.connectivityPort = new LegacyConnectivityPort(node); - this.connectionsPagePort = new LegacyConnectionsPagePort(node, core); - this.connectionsSupportPort = new LegacyConnectionsSupportPort(node); - this.darknetConnectionsPort = new LegacyDarknetConnectionsPort(node); - this.darknetMessagingPort = new LegacyDarknetMessagingPort(node); - this.diagnosticPort = new LegacyDiagnosticPort(node, core); - this.pageChromePort = new LegacyPageChromePort(node); this.coreUpdateActionPort = new LegacyCoreUpdateActionPort(node); - this.queueCompletionPort = new LegacyQueueCompletionPort(core); - this.queuePagePort = new LegacyQueuePagePort(core); - this.queueDownloadPort = new LegacyQueueDownloadPort(core); - this.queueInsertPort = new LegacyQueueInsertPort(core); - this.queueMutationPort = new LegacyQueueMutationPort(core); - this.queueSupportPort = new LegacyQueueSupportPort(core); - this.statisticsPort = new LegacyStatisticsPort(node, core); this.securityLevelsPort = new LegacySecurityLevelsPort(node); - this.firstTimeWizardPort = new LegacyFirstTimeWizardPort(node, core); - this.toadletSymlinkPort = new LegacyToadletSymlinkPort(node, core); - this.welcomePagePort = new LegacyWelcomePagePort(node); - this.welcomeActionPort = new LegacyWelcomeActionPort(node); this.requestQueuePort = new LegacyRequestQueuePort(core); this.nodeInfoPort = new LegacyNodeInfoPort(node); this.peerPort = new LegacyPeerPort(node); + + AdminRuntimePortsBundle adminRuntimePorts = AdminRuntimePortsFactory.create(node, core); + this.connectionsPagePort = adminRuntimePorts.connectionsPage(); + this.connectionsSupportPort = adminRuntimePorts.connectionsSupport(); + this.darknetConnectionsPort = adminRuntimePorts.darknetConnections(); + this.darknetMessagingPort = adminRuntimePorts.darknetMessaging(); + this.diagnosticPort = adminRuntimePorts.diagnostic(); + this.pageChromePort = adminRuntimePorts.pageChrome(); + this.queueCompletionPort = adminRuntimePorts.queueCompletion(); + this.queuePagePort = adminRuntimePorts.queuePage(); + this.queueDownloadPort = adminRuntimePorts.queueDownload(); + this.queueInsertPort = adminRuntimePorts.queueInsert(); + this.queueMutationPort = adminRuntimePorts.queueMutation(); + this.queueSupportPort = adminRuntimePorts.queueSupport(); + this.statisticsPort = adminRuntimePorts.statistics(); + this.firstTimeWizardPort = adminRuntimePorts.firstTimeWizard(); + this.toadletSymlinkPort = adminRuntimePorts.toadletSymlinks(); + this.welcomePagePort = adminRuntimePorts.welcomePage(); + this.welcomeActionPort = adminRuntimePorts.welcomeAction(); } /** diff --git a/src/main/java/network/crypta/runtime/admin/AdminRuntimePortsBundle.java b/src/main/java/network/crypta/runtime/admin/AdminRuntimePortsBundle.java new file mode 100644 index 0000000000..92965e79af --- /dev/null +++ b/src/main/java/network/crypta/runtime/admin/AdminRuntimePortsBundle.java @@ -0,0 +1,73 @@ +package network.crypta.runtime.admin; + +import network.crypta.runtime.spi.ConnectionsPagePort; +import network.crypta.runtime.spi.ConnectionsSupportPort; +import network.crypta.runtime.spi.DarknetConnectionsPort; +import network.crypta.runtime.spi.DarknetMessagingPort; +import network.crypta.runtime.spi.DiagnosticPort; +import network.crypta.runtime.spi.FirstTimeWizardPort; +import network.crypta.runtime.spi.PageChromePort; +import network.crypta.runtime.spi.QueueCompletionPort; +import network.crypta.runtime.spi.QueueDownloadPort; +import network.crypta.runtime.spi.QueueInsertPort; +import network.crypta.runtime.spi.QueueMutationPort; +import network.crypta.runtime.spi.QueuePagePort; +import network.crypta.runtime.spi.QueueSupportPort; +import network.crypta.runtime.spi.StatisticsPort; +import network.crypta.runtime.spi.ToadletSymlinkPort; +import network.crypta.runtime.spi.WelcomeActionPort; +import network.crypta.runtime.spi.WelcomePagePort; + +/** + * Groups the admin and page-oriented runtime SPI adapters owned by this package. + * + *
This record is the package-local handoff between {@link AdminRuntimePortsFactory} and {@link + * network.crypta.node.runtime.LegacyRuntimePorts}. It lets the admin adapter cluster move together + * without forcing the node-runtime nucleus to know which concrete classes implement the various + * page, queue, and welcome flows. Callers typically create one bundle during runtime-port assembly + * and then keep the individual port references in longer-lived wiring objects. + * + *
The record is immutable, but the contained ports are still live adapters over the mutable + * daemon state. Holding a bundle does not snapshot node data, queue state, or welcome-page values. + * It only preserves a stable set of adapter instances, so the surrounding wiring can pass them + * around as one explicit ownership boundary. + * + * @param connectionsPage adapter that renders detached connections-page snapshots for admin pages + * @param connectionsSupport adapter that exposes installer and peer-offer helpers for connections + * UI + * @param darknetConnections adapter that resolves detached darknet friend actions against live + * peers + * @param darknetMessaging adapter that sends detached darknet messages and file offers on demand + * @param diagnostic adapter that exports detached diagnostic and report-oriented admin snapshots + * @param pageChrome adapter that exposes shared page-shell status for admin toadlets and page maker + * @param queueCompletion adapter that serves queue-completion exports and completion-oriented + * actions + * @param queuePage adapter that renders detached queue-page snapshots and key-list exports + * @param queueDownload adapter that performs queue download mutations through detached inputs + * @param queueInsert adapter that performs queue insert mutations through detached inputs + * @param queueMutation adapter that applies generic queue item mutation and removal operations + * @param queueSupport adapter that exposes queue availability, persistence state, and panic helpers + * @param statistics adapter that renders detached statistics-page snapshots for the admin UI + * @param firstTimeWizard adapter that exports and applies first-time-wizard detached state + * @param toadletSymlinks adapter that persists detached symlink configuration for admin toadlets + * @param welcomePage adapter that exports detached welcome-page read state and log excerpts + * @param welcomeAction adapter that applies detached welcome-page action and bandwidth submissions + */ +public record AdminRuntimePortsBundle( + ConnectionsPagePort connectionsPage, + ConnectionsSupportPort connectionsSupport, + DarknetConnectionsPort darknetConnections, + DarknetMessagingPort darknetMessaging, + DiagnosticPort diagnostic, + PageChromePort pageChrome, + QueueCompletionPort queueCompletion, + QueuePagePort queuePage, + QueueDownloadPort queueDownload, + QueueInsertPort queueInsert, + QueueMutationPort queueMutation, + QueueSupportPort queueSupport, + StatisticsPort statistics, + FirstTimeWizardPort firstTimeWizard, + ToadletSymlinkPort toadletSymlinks, + WelcomePagePort welcomePage, + WelcomeActionPort welcomeAction) {} diff --git a/src/main/java/network/crypta/runtime/admin/AdminRuntimePortsFactory.java b/src/main/java/network/crypta/runtime/admin/AdminRuntimePortsFactory.java new file mode 100644 index 0000000000..9361c8d792 --- /dev/null +++ b/src/main/java/network/crypta/runtime/admin/AdminRuntimePortsFactory.java @@ -0,0 +1,56 @@ +package network.crypta.runtime.admin; + +import network.crypta.node.Node; +import network.crypta.node.NodeClientCore; + +/** + * Creates the legacy admin and page-oriented runtime SPI adapters as one package-owned bundle. + * + *
This factory keeps the construction details for the transitional admin cluster inside {@code + * network.crypta.runtime.admin}. The surrounding node-runtime wiring only needs to know that there + * is one coherent group of page, queue, statistics, and welcome adapters that depend on the live + * daemon {@link Node} and {@link NodeClientCore}. That keeps the move mechanical in this PR while + * making the ownership boundary explicit for later extraction work. + * + *
The factory is intentionally small. It does not cache adapters, interpret the daemon state, or + * add policy on top of the existing constructors. Each call creates a fresh immutable {@link + * AdminRuntimePortsBundle} whose members preserve the legacy adapter behavior and lifecycle + * expectations. + */ +public final class AdminRuntimePortsFactory { + private AdminRuntimePortsFactory() {} + + /** + * Creates the admin/page runtime-port bundle backed by the current daemon node and client core. + * + *
Callers normally invoke this once while assembling {@link + * network.crypta.node.runtime.LegacyRuntimePorts}. The returned bundle contains the exact legacy + * adapter set that was moved out of {@code network.crypta.node.runtime}, with queue-oriented + * adapters bound to {@code core} and page or node-state adapters bound to {@code node}. The + * method performs no validation beyond the constructors it delegates to. + * + * @param node live daemon node used by node-backed admin adapters and page state lookups + * @param core live client core used by queue, wizard, and persistence-oriented adapters + * @return immutable bundle containing the moved admin and page-oriented runtime adapters + */ + public static AdminRuntimePortsBundle create(Node node, NodeClientCore core) { + return new AdminRuntimePortsBundle( + new LegacyConnectionsPagePort(node, core), + new LegacyConnectionsSupportPort(node), + new LegacyDarknetConnectionsPort(node), + new LegacyDarknetMessagingPort(node), + new LegacyDiagnosticPort(node, core), + new LegacyPageChromePort(node), + new LegacyQueueCompletionPort(core), + new LegacyQueuePagePort(core), + new LegacyQueueDownloadPort(core), + new LegacyQueueInsertPort(core), + new LegacyQueueMutationPort(core), + new LegacyQueueSupportPort(core), + new LegacyStatisticsPort(node, core), + new LegacyFirstTimeWizardPort(node, core), + new LegacyToadletSymlinkPort(node, core), + new LegacyWelcomePagePort(node), + new LegacyWelcomeActionPort(node)); + } +} diff --git a/src/main/java/network/crypta/node/runtime/LegacyConnectionsPagePort.java b/src/main/java/network/crypta/runtime/admin/LegacyConnectionsPagePort.java similarity index 99% rename from src/main/java/network/crypta/node/runtime/LegacyConnectionsPagePort.java rename to src/main/java/network/crypta/runtime/admin/LegacyConnectionsPagePort.java index 8e8cb0fd64..555bcdd3ae 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyConnectionsPagePort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyConnectionsPagePort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.text.DecimalFormat; import java.util.ArrayList; diff --git a/src/main/java/network/crypta/node/runtime/LegacyConnectionsSupportPort.java b/src/main/java/network/crypta/runtime/admin/LegacyConnectionsSupportPort.java similarity index 98% rename from src/main/java/network/crypta/node/runtime/LegacyConnectionsSupportPort.java rename to src/main/java/network/crypta/runtime/admin/LegacyConnectionsSupportPort.java index 64006b9e2f..ea2fd3f244 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyConnectionsSupportPort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyConnectionsSupportPort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.File; import java.io.IOException; diff --git a/src/main/java/network/crypta/node/runtime/LegacyDarknetConnectionsPort.java b/src/main/java/network/crypta/runtime/admin/LegacyDarknetConnectionsPort.java similarity index 99% rename from src/main/java/network/crypta/node/runtime/LegacyDarknetConnectionsPort.java rename to src/main/java/network/crypta/runtime/admin/LegacyDarknetConnectionsPort.java index 54e9912be3..7f9c1d2849 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyDarknetConnectionsPort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyDarknetConnectionsPort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.util.ArrayList; import java.util.LinkedHashMap; diff --git a/src/main/java/network/crypta/node/runtime/LegacyDarknetMessagingPort.java b/src/main/java/network/crypta/runtime/admin/LegacyDarknetMessagingPort.java similarity index 99% rename from src/main/java/network/crypta/node/runtime/LegacyDarknetMessagingPort.java rename to src/main/java/network/crypta/runtime/admin/LegacyDarknetMessagingPort.java index caa54bd177..d3945b9dcb 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyDarknetMessagingPort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyDarknetMessagingPort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.DataOutputStream; import java.io.File; diff --git a/src/main/java/network/crypta/node/runtime/LegacyDarknetPeerResolver.java b/src/main/java/network/crypta/runtime/admin/LegacyDarknetPeerResolver.java similarity index 98% rename from src/main/java/network/crypta/node/runtime/LegacyDarknetPeerResolver.java rename to src/main/java/network/crypta/runtime/admin/LegacyDarknetPeerResolver.java index 64400a7659..c41a53ad6b 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyDarknetPeerResolver.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyDarknetPeerResolver.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.util.Objects; import network.crypta.node.DarknetPeerNode; diff --git a/src/main/java/network/crypta/node/runtime/LegacyDiagnosticPort.java b/src/main/java/network/crypta/runtime/admin/LegacyDiagnosticPort.java similarity index 99% rename from src/main/java/network/crypta/node/runtime/LegacyDiagnosticPort.java rename to src/main/java/network/crypta/runtime/admin/LegacyDiagnosticPort.java index b026d1b969..4effad6b61 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyDiagnosticPort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyDiagnosticPort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.File; import java.text.DecimalFormat; diff --git a/src/main/java/network/crypta/node/runtime/LegacyFirstTimeWizardPort.java b/src/main/java/network/crypta/runtime/admin/LegacyFirstTimeWizardPort.java similarity index 99% rename from src/main/java/network/crypta/node/runtime/LegacyFirstTimeWizardPort.java rename to src/main/java/network/crypta/runtime/admin/LegacyFirstTimeWizardPort.java index 29f81d0d33..8c31e07fdd 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyFirstTimeWizardPort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyFirstTimeWizardPort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.File; import java.io.IOException; diff --git a/src/main/java/network/crypta/node/runtime/LegacyPageChromePort.java b/src/main/java/network/crypta/runtime/admin/LegacyPageChromePort.java similarity index 99% rename from src/main/java/network/crypta/node/runtime/LegacyPageChromePort.java rename to src/main/java/network/crypta/runtime/admin/LegacyPageChromePort.java index 60adb8cc29..8e758fea65 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyPageChromePort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyPageChromePort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.util.Objects; import network.crypta.node.DarknetPeerNode; diff --git a/src/main/java/network/crypta/node/runtime/LegacyQueueCompletionPort.java b/src/main/java/network/crypta/runtime/admin/LegacyQueueCompletionPort.java similarity index 99% rename from src/main/java/network/crypta/node/runtime/LegacyQueueCompletionPort.java rename to src/main/java/network/crypta/runtime/admin/LegacyQueueCompletionPort.java index 4ae1dfaebd..eb7d00749c 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyQueueCompletionPort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyQueueCompletionPort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.BufferedInputStream; import java.io.BufferedReader; diff --git a/src/main/java/network/crypta/node/runtime/LegacyQueueDownloadPort.java b/src/main/java/network/crypta/runtime/admin/LegacyQueueDownloadPort.java similarity index 98% rename from src/main/java/network/crypta/node/runtime/LegacyQueueDownloadPort.java rename to src/main/java/network/crypta/runtime/admin/LegacyQueueDownloadPort.java index df48722258..2ad67c8169 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyQueueDownloadPort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyQueueDownloadPort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.IOException; import java.util.Objects; diff --git a/src/main/java/network/crypta/node/runtime/LegacyQueueInsertPort.java b/src/main/java/network/crypta/runtime/admin/LegacyQueueInsertPort.java similarity index 99% rename from src/main/java/network/crypta/node/runtime/LegacyQueueInsertPort.java rename to src/main/java/network/crypta/runtime/admin/LegacyQueueInsertPort.java index 22799d658f..6c9aa1f28b 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyQueueInsertPort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyQueueInsertPort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.FileNotFoundException; import java.io.IOException; diff --git a/src/main/java/network/crypta/node/runtime/LegacyQueueMutationPort.java b/src/main/java/network/crypta/runtime/admin/LegacyQueueMutationPort.java similarity index 99% rename from src/main/java/network/crypta/node/runtime/LegacyQueueMutationPort.java rename to src/main/java/network/crypta/runtime/admin/LegacyQueueMutationPort.java index 122d69cf22..f400dd6ca8 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyQueueMutationPort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyQueueMutationPort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.util.List; import java.util.Objects; diff --git a/src/main/java/network/crypta/node/runtime/LegacyQueuePagePort.java b/src/main/java/network/crypta/runtime/admin/LegacyQueuePagePort.java similarity index 99% rename from src/main/java/network/crypta/node/runtime/LegacyQueuePagePort.java rename to src/main/java/network/crypta/runtime/admin/LegacyQueuePagePort.java index acc2a891a5..525bcde544 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyQueuePagePort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyQueuePagePort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.File; import java.time.Instant; diff --git a/src/main/java/network/crypta/node/runtime/LegacyQueueSupportPort.java b/src/main/java/network/crypta/runtime/admin/LegacyQueueSupportPort.java similarity index 98% rename from src/main/java/network/crypta/node/runtime/LegacyQueueSupportPort.java rename to src/main/java/network/crypta/runtime/admin/LegacyQueueSupportPort.java index 8ef4a05a34..20aadd367f 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyQueueSupportPort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyQueueSupportPort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.IOException; import java.util.Objects; diff --git a/src/main/java/network/crypta/node/runtime/LegacyStatisticsPort.java b/src/main/java/network/crypta/runtime/admin/LegacyStatisticsPort.java similarity index 99% rename from src/main/java/network/crypta/node/runtime/LegacyStatisticsPort.java rename to src/main/java/network/crypta/runtime/admin/LegacyStatisticsPort.java index 47130b49f8..2b494a85e0 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyStatisticsPort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyStatisticsPort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; diff --git a/src/main/java/network/crypta/node/runtime/LegacyToadletSymlinkPort.java b/src/main/java/network/crypta/runtime/admin/LegacyToadletSymlinkPort.java similarity index 99% rename from src/main/java/network/crypta/node/runtime/LegacyToadletSymlinkPort.java rename to src/main/java/network/crypta/runtime/admin/LegacyToadletSymlinkPort.java index 2305569814..c5d0fafbd3 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyToadletSymlinkPort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyToadletSymlinkPort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/network/crypta/node/runtime/LegacyWelcomeActionPort.java b/src/main/java/network/crypta/runtime/admin/LegacyWelcomeActionPort.java similarity index 98% rename from src/main/java/network/crypta/node/runtime/LegacyWelcomeActionPort.java rename to src/main/java/network/crypta/runtime/admin/LegacyWelcomeActionPort.java index a41634d080..da2a755fb3 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyWelcomeActionPort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyWelcomeActionPort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.util.Objects; import network.crypta.config.InvalidConfigValueException; @@ -25,7 +25,7 @@ * present, writes the same config keys, and swallows restart-required exceptions exactly as the * legacy welcome toadlet did. The class is package-private because it is an implementation detail * behind {@link WelcomeActionPort}; callers should depend on the SPI surface exposed through {@link - * LegacyRuntimePorts} instead of constructing this adapter directly. + * network.crypta.node.runtime.LegacyRuntimePorts} instead of constructing this adapter directly. */ final class LegacyWelcomeActionPort implements WelcomeActionPort { /** Small delay that lets the HTTP layer finish its redirect before shutdown or restart begins. */ diff --git a/src/main/java/network/crypta/node/runtime/LegacyWelcomePagePort.java b/src/main/java/network/crypta/runtime/admin/LegacyWelcomePagePort.java similarity index 98% rename from src/main/java/network/crypta/node/runtime/LegacyWelcomePagePort.java rename to src/main/java/network/crypta/runtime/admin/LegacyWelcomePagePort.java index fc52636e99..608959c2d7 100644 --- a/src/main/java/network/crypta/node/runtime/LegacyWelcomePagePort.java +++ b/src/main/java/network/crypta/runtime/admin/LegacyWelcomePagePort.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.File; import java.io.IOException; diff --git a/src/main/java/network/crypta/runtime/admin/package-info.java b/src/main/java/network/crypta/runtime/admin/package-info.java new file mode 100644 index 0000000000..d11f3d8fcf --- /dev/null +++ b/src/main/java/network/crypta/runtime/admin/package-info.java @@ -0,0 +1,15 @@ +/** + * Legacy admin and page-oriented runtime SPI adapters. + * + *
This package intentionally groups the transitional runtime adapters that back the legacy admin + * pages, queue views, statistics reports, and welcome or first-time-wizard flows. The adapters + * still depend on daemon-local services such as {@code Node}, {@code NodeClientCore}, HTTP helper + * classes, and queue/reporting internals, but they present the detached {@code runtime-spi} + * interfaces expected by higher-level wiring. + * + *
Keeping these classes here makes the ownership boundary explicit. The narrower {@code + * network.crypta.node.runtime} package can keep the core runtime nucleus, while this package + * carries the page-oriented compatibility layer that may later be extracted or reshaped as a more + * focused adapter cluster. + */ +package network.crypta.runtime.admin; diff --git a/src/test/java/network/crypta/node/runtime/LegacyRuntimePortsTest.java b/src/test/java/network/crypta/node/runtime/LegacyRuntimePortsTest.java index 75ed0314a9..d4545f030a 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyRuntimePortsTest.java +++ b/src/test/java/network/crypta/node/runtime/LegacyRuntimePortsTest.java @@ -111,27 +111,76 @@ void getters_whenRequested_expectLegacyAdapterTypes() { assertAll( () -> assertInstanceOf(LegacyConfigPort.class, snapshot.configPort()), () -> assertInstanceOf(LegacyConnectivityPort.class, snapshot.connectivityPort()), - () -> assertInstanceOf(LegacyConnectionsPagePort.class, snapshot.connectionsPagePort()), () -> - assertInstanceOf(LegacyConnectionsSupportPort.class, snapshot.connectionsSupportPort()), + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyConnectionsPagePort"), + snapshot.connectionsPagePort()), () -> - assertInstanceOf(LegacyDarknetConnectionsPort.class, snapshot.darknetConnectionsPort()), - () -> assertInstanceOf(LegacyDarknetMessagingPort.class, snapshot.darknetMessagingPort()), - () -> assertInstanceOf(LegacyDiagnosticPort.class, snapshot.diagnosticPort()), - () -> assertInstanceOf(LegacyPageChromePort.class, snapshot.pageChromePort()), + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyConnectionsSupportPort"), + snapshot.connectionsSupportPort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyDarknetConnectionsPort"), + snapshot.darknetConnectionsPort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyDarknetMessagingPort"), + snapshot.darknetMessagingPort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyDiagnosticPort"), + snapshot.diagnosticPort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyPageChromePort"), + snapshot.pageChromePort()), () -> assertInstanceOf(LegacyCoreUpdateActionPort.class, snapshot.coreUpdateActionPort()), - () -> assertInstanceOf(LegacyQueueSupportPort.class, snapshot.queueSupportPort()), - () -> assertInstanceOf(LegacyQueueCompletionPort.class, snapshot.queueCompletionPort()), - () -> assertInstanceOf(LegacyQueuePagePort.class, snapshot.queuePagePort()), - () -> assertInstanceOf(LegacyQueueDownloadPort.class, snapshot.queueDownloadPort()), - () -> assertInstanceOf(LegacyQueueInsertPort.class, snapshot.queueInsertPort()), - () -> assertInstanceOf(LegacyQueueMutationPort.class, snapshot.queueMutationPort()), - () -> assertInstanceOf(LegacyStatisticsPort.class, snapshot.statisticsPort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyQueueSupportPort"), + snapshot.queueSupportPort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyQueueCompletionPort"), + snapshot.queueCompletionPort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyQueuePagePort"), + snapshot.queuePagePort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyQueueDownloadPort"), + snapshot.queueDownloadPort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyQueueInsertPort"), + snapshot.queueInsertPort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyQueueMutationPort"), + snapshot.queueMutationPort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyStatisticsPort"), + snapshot.statisticsPort()), () -> assertInstanceOf(LegacySecurityLevelsPort.class, snapshot.securityLevelsPort()), - () -> assertInstanceOf(LegacyFirstTimeWizardPort.class, snapshot.firstTimeWizardPort()), - () -> assertInstanceOf(LegacyToadletSymlinkPort.class, snapshot.toadletSymlinkPort()), - () -> assertInstanceOf(LegacyWelcomePagePort.class, snapshot.welcomePagePort()), - () -> assertInstanceOf(LegacyWelcomeActionPort.class, snapshot.welcomeActionPort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyFirstTimeWizardPort"), + snapshot.firstTimeWizardPort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyToadletSymlinkPort"), + snapshot.toadletSymlinkPort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyWelcomePagePort"), + snapshot.welcomePagePort()), + () -> + assertInstanceOf( + loadClass("network.crypta.runtime.admin.LegacyWelcomeActionPort"), + snapshot.welcomeActionPort()), () -> assertInstanceOf(LegacyRequestQueuePort.class, snapshot.requestQueuePort()), () -> assertInstanceOf(LegacyNodeInfoPort.class, snapshot.nodeInfoPort()), () -> assertInstanceOf(LegacyPeerPort.class, snapshot.peerPort())); @@ -221,6 +270,14 @@ private PortsSnapshot capturePorts() { ports.peer()); } + private static Class> loadClass(String className) { + try { + return Class.forName(className); + } catch (ClassNotFoundException exception) { + throw new AssertionError(exception); + } + } + private record PortsSnapshot( Object executionPort, Object randomnessPort, diff --git a/src/test/java/network/crypta/node/useralerts/UserAlertManagerTest.java b/src/test/java/network/crypta/node/useralerts/UserAlertManagerTest.java index 9daa8bfb79..094195ffd3 100644 --- a/src/test/java/network/crypta/node/useralerts/UserAlertManagerTest.java +++ b/src/test/java/network/crypta/node/useralerts/UserAlertManagerTest.java @@ -1,6 +1,7 @@ package network.crypta.node.useralerts; import java.io.StringReader; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -13,11 +14,14 @@ import network.crypta.client.async.ClientContext; import network.crypta.clients.fcp.FCPConnectionHandler; import network.crypta.clients.fcp.FCPMessage; +import network.crypta.l10n.BaseL10n; import network.crypta.l10n.L10nTestUtils; +import network.crypta.l10n.NodeL10n; import network.crypta.node.Node; import network.crypta.node.NodeClientCore; import network.crypta.support.HTMLNode; import network.crypta.support.PriorityAwareExecutor; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -57,9 +61,11 @@ class UserAlertManagerTest { @Mock private PriorityAwareExecutor executor; private UserAlertManager userAlertManager; + private BaseL10n originalBase; @BeforeEach void setUp() { + originalBase = NodeL10n.getBase(); L10nTestUtils.useTestTranslation(); lenient().when(nodeClientCore.getNode()).thenReturn(node); lenient().when(node.network().darknetPubKeyHash()).thenReturn(new byte[] {1, 2, 3, 4}); @@ -87,6 +93,11 @@ void setUp() { userAlertManager = new UserAlertManager(nodeClientCore); } + @AfterEach + void tearDown() throws ReflectiveOperationException { + installBase(originalBase); + } + @Test void getAtom_whenGenerated_expectFeedMetadataPresent() throws Exception { // Arrange @@ -875,6 +886,12 @@ public Type getEventType() { } } + private static void installBase(BaseL10n base) throws ReflectiveOperationException { + Method setBase = NodeL10n.class.getDeclaredMethod("setBase", BaseL10n.class); + setBase.setAccessible(true); + setBase.invoke(null, base); + } + private record EntrySnapshot( String id, String link, String updated, String title, String summary, String content) {} } diff --git a/src/test/java/network/crypta/node/runtime/LegacyConnectionsPagePortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyConnectionsPagePortTest.java similarity index 99% rename from src/test/java/network/crypta/node/runtime/LegacyConnectionsPagePortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyConnectionsPagePortTest.java index cd01030b52..2a0f75ca73 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyConnectionsPagePortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyConnectionsPagePortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.File; import java.lang.reflect.Field; diff --git a/src/test/java/network/crypta/node/runtime/LegacyConnectionsSupportPortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyConnectionsSupportPortTest.java similarity index 99% rename from src/test/java/network/crypta/node/runtime/LegacyConnectionsSupportPortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyConnectionsSupportPortTest.java index cc80a2ba5f..dca0f86ed3 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyConnectionsSupportPortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyConnectionsSupportPortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.File; import java.nio.charset.StandardCharsets; diff --git a/src/test/java/network/crypta/node/runtime/LegacyDarknetConnectionsPortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyDarknetConnectionsPortTest.java similarity index 99% rename from src/test/java/network/crypta/node/runtime/LegacyDarknetConnectionsPortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyDarknetConnectionsPortTest.java index 270ce1a1e2..1b42594e6f 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyDarknetConnectionsPortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyDarknetConnectionsPortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.util.List; import java.util.Map; diff --git a/src/test/java/network/crypta/node/runtime/LegacyDarknetMessagingPortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyDarknetMessagingPortTest.java similarity index 99% rename from src/test/java/network/crypta/node/runtime/LegacyDarknetMessagingPortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyDarknetMessagingPortTest.java index d07ccb1449..58a59549de 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyDarknetMessagingPortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyDarknetMessagingPortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.ByteArrayInputStream; import java.io.File; diff --git a/src/test/java/network/crypta/node/runtime/LegacyDarknetPeerResolverTest.java b/src/test/java/network/crypta/runtime/admin/LegacyDarknetPeerResolverTest.java similarity index 98% rename from src/test/java/network/crypta/node/runtime/LegacyDarknetPeerResolverTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyDarknetPeerResolverTest.java index 0ea480f1f2..663d469df5 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyDarknetPeerResolverTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyDarknetPeerResolverTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import network.crypta.node.DarknetPeerNode; import network.crypta.node.Node; diff --git a/src/test/java/network/crypta/node/runtime/LegacyDiagnosticPortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyDiagnosticPortTest.java similarity index 99% rename from src/test/java/network/crypta/node/runtime/LegacyDiagnosticPortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyDiagnosticPortTest.java index 01f93d7b3d..b1c2bacc75 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyDiagnosticPortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyDiagnosticPortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.util.List; import java.util.Map; diff --git a/src/test/java/network/crypta/node/runtime/LegacyFirstTimeWizardPortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyFirstTimeWizardPortTest.java similarity index 99% rename from src/test/java/network/crypta/node/runtime/LegacyFirstTimeWizardPortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyFirstTimeWizardPortTest.java index 83deedeefd..1aa5802db4 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyFirstTimeWizardPortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyFirstTimeWizardPortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.File; import java.util.Locale; diff --git a/src/test/java/network/crypta/node/runtime/LegacyPageChromePortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyPageChromePortTest.java similarity index 98% rename from src/test/java/network/crypta/node/runtime/LegacyPageChromePortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyPageChromePortTest.java index c0743e4877..0d58c7ac02 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyPageChromePortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyPageChromePortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import network.crypta.node.DarknetPeerNode; import network.crypta.node.Node; diff --git a/src/test/java/network/crypta/node/runtime/LegacyQueueCompletionPortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyQueueCompletionPortTest.java similarity index 99% rename from src/test/java/network/crypta/node/runtime/LegacyQueueCompletionPortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyQueueCompletionPortTest.java index 7d1399439a..8329c9b060 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyQueueCompletionPortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyQueueCompletionPortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.File; import java.net.MalformedURLException; diff --git a/src/test/java/network/crypta/node/runtime/LegacyQueueDownloadPortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyQueueDownloadPortTest.java similarity index 99% rename from src/test/java/network/crypta/node/runtime/LegacyQueueDownloadPortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyQueueDownloadPortTest.java index fcb0df3079..6064c25138 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyQueueDownloadPortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyQueueDownloadPortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.File; import network.crypta.client.async.PersistenceDisabledException; diff --git a/src/test/java/network/crypta/node/runtime/LegacyQueueInsertPortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyQueueInsertPortTest.java similarity index 99% rename from src/test/java/network/crypta/node/runtime/LegacyQueueInsertPortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyQueueInsertPortTest.java index 02f632b596..abb09f81bd 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyQueueInsertPortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyQueueInsertPortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; diff --git a/src/test/java/network/crypta/node/runtime/LegacyQueueMutationPortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyQueueMutationPortTest.java similarity index 99% rename from src/test/java/network/crypta/node/runtime/LegacyQueueMutationPortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyQueueMutationPortTest.java index 395f8aa042..7a6b229d46 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyQueueMutationPortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyQueueMutationPortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.util.List; import network.crypta.client.async.PersistenceDisabledException; diff --git a/src/test/java/network/crypta/node/runtime/LegacyQueuePagePortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyQueuePagePortTest.java similarity index 99% rename from src/test/java/network/crypta/node/runtime/LegacyQueuePagePortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyQueuePagePortTest.java index 584a785c32..159f201b68 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyQueuePagePortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyQueuePagePortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.File; import java.lang.reflect.Field; diff --git a/src/test/java/network/crypta/node/runtime/LegacyQueueSupportPortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyQueueSupportPortTest.java similarity index 99% rename from src/test/java/network/crypta/node/runtime/LegacyQueueSupportPortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyQueueSupportPortTest.java index 3a8639b680..7792209365 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyQueueSupportPortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyQueueSupportPortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.io.File; import java.nio.file.Path; diff --git a/src/test/java/network/crypta/node/runtime/LegacyStatisticsPortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyStatisticsPortTest.java similarity index 99% rename from src/test/java/network/crypta/node/runtime/LegacyStatisticsPortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyStatisticsPortTest.java index 41242301b5..94060d38bc 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyStatisticsPortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyStatisticsPortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.lang.reflect.Field; import java.util.Map; diff --git a/src/test/java/network/crypta/node/runtime/LegacyToadletSymlinkPortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyToadletSymlinkPortTest.java similarity index 98% rename from src/test/java/network/crypta/node/runtime/LegacyToadletSymlinkPortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyToadletSymlinkPortTest.java index ac2c90af59..5937befeca 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyToadletSymlinkPortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyToadletSymlinkPortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.util.List; import network.crypta.config.Option; diff --git a/src/test/java/network/crypta/node/runtime/LegacyWelcomeActionPortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyWelcomeActionPortTest.java similarity index 99% rename from src/test/java/network/crypta/node/runtime/LegacyWelcomeActionPortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyWelcomeActionPortTest.java index defdf25808..007fb2bc7b 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyWelcomeActionPortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyWelcomeActionPortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import network.crypta.config.NodeNeedRestartException; import network.crypta.config.PersistentConfig; diff --git a/src/test/java/network/crypta/node/runtime/LegacyWelcomePagePortTest.java b/src/test/java/network/crypta/runtime/admin/LegacyWelcomePagePortTest.java similarity index 98% rename from src/test/java/network/crypta/node/runtime/LegacyWelcomePagePortTest.java rename to src/test/java/network/crypta/runtime/admin/LegacyWelcomePagePortTest.java index 05c9514d51..ee875fbd5f 100644 --- a/src/test/java/network/crypta/node/runtime/LegacyWelcomePagePortTest.java +++ b/src/test/java/network/crypta/runtime/admin/LegacyWelcomePagePortTest.java @@ -1,4 +1,4 @@ -package network.crypta.node.runtime; +package network.crypta.runtime.admin; import java.nio.charset.StandardCharsets; import java.nio.file.Files;