feat(plugins): publish host.created when a host is added (#1668)

Plugins that keep an inventory of hosts had no way to hear about a new
one short of polling. Core now publishes host.created with the same
{ hostId, userId } payload as host.updated wherever a host row is
created: the host create route, ctx.hosts.create, JSON and SSH config
bulk import, database file import, and sync writing a host it did not
have yet.
This commit is contained in:
ZacharyZcR authored and GitHub committed 2026-10-17 19:03:08 -05:00
1 parent 893e7e5a4b
commit 16f2f509f2
12 files changed
+185 -6

No files matched your search

+5 -1
View File
@@ -22,6 +22,7 @@ import {
import { FieldCrypto } from "../utils/field-crypto.js";
import { syncLogger } from "../utils/logger.js";
import { getPluginRuntime } from "../plugins/index.js";
import { pluginEvents, TOPICS } from "../plugins/events.js";
import { singletonSyncId } from "./wire.js";
import { parseDefaultOverrides } from "../../types/host-defaults.js";
import {
@@ -174,7 +175,7 @@ export function registerCoreSyncEntities(): void {
)
: {},
}),
afterWrite: async ({ id, userId, wire, resolveId }) => {
afterWrite: async ({ id, userId, wire, created, resolveId }) => {
if (id === null) return;
// The server owns host defaults: it keeps what the host set itself
// and resolves the rest. A desktop takes the server's values as sent.
@@ -195,6 +196,9 @@ export function registerCoreSyncEntities(): void {
const { SharedHostSecretsManager } =
await import("../utils/shared-host-secrets-manager.js");
await SharedHostSecretsManager.getInstance().resyncHost(id);
if (created) {
pluginEvents.emit(TOPICS.hostCreated, { hostId: id, userId });
}
},
remove: async (row, userId) => {
const { deleteOwnedHost } = await import("../hosts/delete-host.js");