Files
buzz/desktop/src/shared/api/tauriAgentOwnership.ts
Taylor Ho 6e79470f3f feat(agents): refine activity visibility ownership checks
- Extend canViewAgentActivity coverage for relay-backed agent sessions
- Harden Tauri ownership resolution and observer relay scoping
- Wire updated visibility rules through profile panel and popover surfaces
2026-06-14 22:23:47 -07:00

49 lines
1.3 KiB
TypeScript

import { invokeTauri } from "@/shared/api/tauri";
import { resolveOaOwner } from "@/shared/api/tauriIdentityArchive";
export type AgentOwnershipStatus = {
/** Lowercase hex pubkey of the queried agent. */
agentPubkey: string;
/** Lowercase hex owner pubkey from relay `agent_owner_pubkey`, if set. */
ownerPubkey: string | null;
/** True iff the current workspace identity is the relay-recorded owner. */
isOwner: boolean;
};
type RawAgentOwnershipStatus = {
agent_pubkey: string;
owner_pubkey: string | null;
is_owner: boolean;
};
/**
* Resolve whether the current identity owns `agentPubkey` per relay DB.
* Authoritative gate for observer activity visibility.
*/
export async function resolveAgentOwnership(
agentPubkey: string,
): Promise<AgentOwnershipStatus> {
try {
const raw = await invokeTauri<RawAgentOwnershipStatus>(
"resolve_agent_ownership",
{ agentPubkey },
);
return {
agentPubkey: raw.agent_pubkey,
ownerPubkey: raw.owner_pubkey,
isOwner: raw.is_owner,
};
} catch (error) {
const owner = await resolveOaOwner(agentPubkey).catch(() => null);
if (!owner) {
throw error;
}
return {
agentPubkey: agentPubkey.toLowerCase(),
ownerPubkey: owner.owner,
isOwner: owner.isMe,
};
}
}