feat: implement URL plugins with table/row actions and prefill support

- Add URL plugin effects (register, export_url, clear_urls) in core
- Add PluginHostnameInfo, HostnameMetadata::Plugin, and plugin registration types
- Implement plugin URL table in web UI with tableAction button and rowAction overflow menus
- Thread urlPluginMetadata (packageId, hostId, interfaceId, internalPort) as prefill to actions
- Add prefill support to PackageActionData so metadata passes through form dialogs
- Add i18n translations for plugin error messages
- Clean up plugin URLs on package uninstall
This commit is contained in:
Aiden McClelland
2026-02-18 17:51:13 -07:00
parent dce975410f
commit 9c3053f103
53 changed files with 792 additions and 278 deletions

View File

@@ -1822,8 +1822,8 @@ export class MockApiService extends ApiService {
if (h.port === null) return
const sa =
h.metadata.kind === 'ipv6'
? `[${h.host}]:${h.port}`
: `${h.host}:${h.port}`
? `[${h.hostname}]:${h.port}`
: `${h.hostname}:${h.port}`
const arr = [...current.enabled]
@@ -1841,11 +1841,11 @@ export class MockApiService extends ApiService {
} else {
const port = h.port ?? 0
const arr = current.disabled.filter(
([dHost, dPort]) => !(dHost === h.host && dPort === port),
([dHost, dPort]) => !(dHost === h.hostname && dPort === port),
)
if (!enabled) {
arr.push([h.host, port])
arr.push([h.hostname, port])
}
current.disabled = arr