// Events that node-role sessions must receive even when the event's operator // scope would otherwise reject non-operator roles. Nodes act on these updates // (e.g. reconfiguring wake-word triggers). const NODE_ALLOWED_EVENTS = new Set<string>(["voicewake.changed"]);
export type {
GatewayBroadcastFn,
GatewayBroadcastOpts,
GatewayBroadcastStateVersion,
GatewayBroadcastToConnIdsFn,
} from "./server-broadcast-types.js";
function hasEventScope(client: GatewayWsClient, event: string): boolean { const required = EVENT_SCOPE_GUARDS[event]; // Plugin-defined gateway broadcast events (plugin.* namespace) are allowed // for operator.write and operator.admin scopes. Explicit plugin.* entries // in EVENT_SCOPE_GUARDS take precedence (e.g., plugin.approval.*). if (!required && event.startsWith("plugin.")) { const role = client.connect.role ?? "operator"; if (role !== "operator") { returnfalse;
} const scopes = Array.isArray(client.connect.scopes) ? client.connect.scopes : []; return scopes.includes(WRITE_SCOPE) || scopes.includes(ADMIN_SCOPE);
} if (!required) { returnfalse;
} if (required.length === 0) { returntrue;
} const role = client.connect.role ?? "operator"; if (role !== "operator") { return role === "node" && NODE_ALLOWED_EVENTS.has(event);
} const scopes = Array.isArray(client.connect.scopes) ? client.connect.scopes : []; if (scopes.includes(ADMIN_SCOPE)) { returntrue;
} if (required.includes(READ_SCOPE)) { return scopes.includes(READ_SCOPE) || scopes.includes(WRITE_SCOPE);
} return required.some((scope) => scopes.includes(scope));
}
export function createGatewayBroadcaster(params: { clients: Set<GatewayWsClient> }) { const clientSeq = new WeakMap<GatewayWsClient, number>(); const reportedSlowPayloadClients = new WeakSet<GatewayWsClient>();
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.