refactor: extract shared dedupe helpers for runtime paths

This commit is contained in:
Peter Steinberger
2026-02-23 05:43:21 +00:00
parent 9f508056d3
commit 8af19ddc5b
16 changed files with 307 additions and 275 deletions

View File

@@ -200,6 +200,21 @@ function parseSessionKeyFromPayloadJSON(payloadJSON: string): string | null {
return sessionKey.length > 0 ? sessionKey : null;
}
function parsePayloadObject(payloadJSON?: string | null): Record<string, unknown> | null {
if (!payloadJSON) {
return null;
}
let payload: unknown;
try {
payload = JSON.parse(payloadJSON) as unknown;
} catch {
return null;
}
return typeof payload === "object" && payload !== null
? (payload as Record<string, unknown>)
: null;
}
async function sendReceiptAck(params: {
cfg: ReturnType<typeof loadConfig>;
deps: NodeEventContext["deps"];
@@ -232,17 +247,10 @@ async function sendReceiptAck(params: {
export const handleNodeEvent = async (ctx: NodeEventContext, nodeId: string, evt: NodeEvent) => {
switch (evt.event) {
case "voice.transcript": {
if (!evt.payloadJSON) {
const obj = parsePayloadObject(evt.payloadJSON);
if (!obj) {
return;
}
let payload: unknown;
try {
payload = JSON.parse(evt.payloadJSON) as unknown;
} catch {
return;
}
const obj =
typeof payload === "object" && payload !== null ? (payload as Record<string, unknown>) : {};
const text = typeof obj.text === "string" ? obj.text.trim() : "";
if (!text) {
return;
@@ -455,17 +463,10 @@ export const handleNodeEvent = async (ctx: NodeEventContext, nodeId: string, evt
case "exec.started":
case "exec.finished":
case "exec.denied": {
if (!evt.payloadJSON) {
const obj = parsePayloadObject(evt.payloadJSON);
if (!obj) {
return;
}
let payload: unknown;
try {
payload = JSON.parse(evt.payloadJSON) as unknown;
} catch {
return;
}
const obj =
typeof payload === "object" && payload !== null ? (payload as Record<string, unknown>) : {};
const sessionKey =
typeof obj.sessionKey === "string" ? obj.sessionKey.trim() : `node-${nodeId}`;
if (!sessionKey) {
@@ -519,17 +520,10 @@ export const handleNodeEvent = async (ctx: NodeEventContext, nodeId: string, evt
return;
}
case "push.apns.register": {
if (!evt.payloadJSON) {
const obj = parsePayloadObject(evt.payloadJSON);
if (!obj) {
return;
}
let payload: unknown;
try {
payload = JSON.parse(evt.payloadJSON) as unknown;
} catch {
return;
}
const obj =
typeof payload === "object" && payload !== null ? (payload as Record<string, unknown>) : {};
const token = typeof obj.token === "string" ? obj.token : "";
const topic = typeof obj.topic === "string" ? obj.topic : "";
const environment = obj.environment;

View File

@@ -1,23 +1,9 @@
import { vi } from "vitest";
import type { PluginRegistry } from "../plugins/registry.js";
import { createEmptyPluginRegistry, type PluginRegistry } from "../plugins/registry.js";
import { setActivePluginRegistry } from "../plugins/runtime.js";
export const registryState: { registry: PluginRegistry } = {
registry: {
plugins: [],
tools: [],
hooks: [],
typedHooks: [],
channels: [],
providers: [],
gatewayHandlers: {},
httpHandlers: [],
httpRoutes: [],
cliRegistrars: [],
services: [],
commands: [],
diagnostics: [],
} as PluginRegistry,
registry: createEmptyPluginRegistry(),
};
export function setRegistry(registry: PluginRegistry) {