feat: enrich presence with roles

This commit is contained in:
Peter Steinberger
2026-01-20 12:16:36 +00:00
parent 7720106624
commit 409a16060b
8 changed files with 81 additions and 0 deletions

View File

@@ -15,6 +15,9 @@ export const PresenceEntrySchema = Type.Object(
tags: Type.Optional(Type.Array(NonEmptyString)),
text: Type.Optional(Type.String()),
ts: Type.Integer({ minimum: 0 }),
deviceId: Type.Optional(NonEmptyString),
roles: Type.Optional(Type.Array(NonEmptyString)),
scopes: Type.Optional(Type.Array(NonEmptyString)),
instanceId: Type.Optional(NonEmptyString),
},
{ additionalProperties: false },

View File

@@ -37,6 +37,7 @@ export const systemHandlers: GatewayRequestHandlers = {
return;
}
const sessionKey = resolveMainSessionKeyFromConfig();
const deviceId = typeof params.deviceId === "string" ? params.deviceId : undefined;
const instanceId = typeof params.instanceId === "string" ? params.instanceId : undefined;
const host = typeof params.host === "string" ? params.host : undefined;
const ip = typeof params.ip === "string" ? params.ip : undefined;
@@ -51,12 +52,21 @@ export const systemHandlers: GatewayRequestHandlers = {
? params.lastInputSeconds
: undefined;
const reason = typeof params.reason === "string" ? params.reason : undefined;
const roles =
Array.isArray(params.roles) && params.roles.every((t) => typeof t === "string")
? (params.roles as string[])
: undefined;
const scopes =
Array.isArray(params.scopes) && params.scopes.every((t) => typeof t === "string")
? (params.scopes as string[])
: undefined;
const tags =
Array.isArray(params.tags) && params.tags.every((t) => typeof t === "string")
? (params.tags as string[])
: undefined;
const presenceUpdate = updateSystemPresence({
text,
deviceId,
instanceId,
host,
ip,
@@ -67,6 +77,8 @@ export const systemHandlers: GatewayRequestHandlers = {
modelIdentifier,
lastInputSeconds,
reason,
roles,
scopes,
tags,
});
const isNodePresenceLine = text.startsWith("Node:");

View File

@@ -619,6 +619,9 @@ export function attachGatewayWsMessageHandler(params: {
deviceFamily: connectParams.client.deviceFamily,
modelIdentifier: connectParams.client.modelIdentifier,
mode: connectParams.client.mode,
deviceId: connectParams.device?.id,
roles: [role],
scopes,
instanceId: connectParams.device?.id ?? instanceId,
reason: "connect",
});