Add ez-assistant and kerberos service folders
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
import type { ResolvedGoogleChatAccount } from "./accounts.js";
|
||||
import { findGoogleChatDirectMessage } from "./api.js";
|
||||
|
||||
export function normalizeGoogleChatTarget(raw?: string | null): string | undefined {
|
||||
const trimmed = raw?.trim();
|
||||
if (!trimmed) return undefined;
|
||||
const withoutPrefix = trimmed.replace(/^(googlechat|google-chat|gchat):/i, "");
|
||||
const normalized = withoutPrefix
|
||||
.replace(/^user:(users\/)?/i, "users/")
|
||||
.replace(/^space:(spaces\/)?/i, "spaces/");
|
||||
if (isGoogleChatUserTarget(normalized)) {
|
||||
const suffix = normalized.slice("users/".length);
|
||||
return suffix.includes("@") ? `users/${suffix.toLowerCase()}` : normalized;
|
||||
}
|
||||
if (isGoogleChatSpaceTarget(normalized)) return normalized;
|
||||
if (normalized.includes("@")) return `users/${normalized.toLowerCase()}`;
|
||||
return normalized;
|
||||
}
|
||||
|
||||
export function isGoogleChatUserTarget(value: string): boolean {
|
||||
return value.toLowerCase().startsWith("users/");
|
||||
}
|
||||
|
||||
export function isGoogleChatSpaceTarget(value: string): boolean {
|
||||
return value.toLowerCase().startsWith("spaces/");
|
||||
}
|
||||
|
||||
function stripMessageSuffix(target: string): string {
|
||||
const index = target.indexOf("/messages/");
|
||||
if (index === -1) return target;
|
||||
return target.slice(0, index);
|
||||
}
|
||||
|
||||
export async function resolveGoogleChatOutboundSpace(params: {
|
||||
account: ResolvedGoogleChatAccount;
|
||||
target: string;
|
||||
}): Promise<string> {
|
||||
const normalized = normalizeGoogleChatTarget(params.target);
|
||||
if (!normalized) {
|
||||
throw new Error("Missing Google Chat target.");
|
||||
}
|
||||
const base = stripMessageSuffix(normalized);
|
||||
if (isGoogleChatSpaceTarget(base)) return base;
|
||||
if (isGoogleChatUserTarget(base)) {
|
||||
const dm = await findGoogleChatDirectMessage({
|
||||
account: params.account,
|
||||
userName: base,
|
||||
});
|
||||
if (!dm?.name) {
|
||||
throw new Error(`No Google Chat DM found for ${base}`);
|
||||
}
|
||||
return dm.name;
|
||||
}
|
||||
return base;
|
||||
}
|
||||
Reference in New Issue
Block a user