Address PR feedback

This commit is contained in:
Michelle Tilley
2026-02-03 14:22:44 -08:00
committed by CLAWDINATOR Bot
parent a24f31f5a9
commit 88cfc1cdd6
4 changed files with 21 additions and 4 deletions

View File

@@ -196,6 +196,12 @@ describe("handleDiscordPresenceAction", () => {
);
});
it("requires activityType when activityName is provided", async () => {
await expect(
handleDiscordPresenceAction("setPresence", { activityName: "My Game" }, presenceEnabled),
).rejects.toThrow(/activityType is required/);
});
it("rejects unknown presence actions", async () => {
await expect(handleDiscordPresenceAction("unknownAction", {}, presenceEnabled)).rejects.toThrow(
/Unknown presence action/,

View File

@@ -55,7 +55,13 @@ export async function handleDiscordPresenceAction(
const activities: Activity[] = [];
if (activityTypeRaw || activityName) {
const typeNum = activityTypeRaw ? ACTIVITY_TYPE_MAP[activityTypeRaw.toLowerCase()] : 0;
if (!activityTypeRaw) {
throw new Error(
"activityType is required when activityName is provided. " +
`Valid types: ${Object.keys(ACTIVITY_TYPE_MAP).join(", ")}`,
);
}
const typeNum = ACTIVITY_TYPE_MAP[activityTypeRaw.toLowerCase()];
if (typeNum === undefined) {
throw new Error(
`Invalid activityType "${activityTypeRaw}". Must be one of: ${Object.keys(ACTIVITY_TYPE_MAP).join(", ")}`,

View File

@@ -23,11 +23,12 @@ describe("gateway-registry", () => {
expect(getGateway("account-b")).toBeUndefined();
});
it("uses 'default' key when accountId is undefined", () => {
it("uses collision-safe key when accountId is undefined", () => {
const gateway = fakeGateway();
registerGateway(undefined, gateway);
expect(getGateway(undefined)).toBe(gateway);
expect(getGateway("default")).toBe(gateway);
// "default" as a literal account ID must not collide with the sentinel key
expect(getGateway("default")).toBeUndefined();
});
it("unregisters a gateway", () => {

View File

@@ -8,8 +8,12 @@ import type { GatewayPlugin } from "@buape/carbon/gateway";
*/
const gatewayRegistry = new Map<string, GatewayPlugin>();
// Sentinel key for the default (unnamed) account. Uses a prefix that cannot
// collide with user-configured account IDs.
const DEFAULT_ACCOUNT_KEY = "\0__default__";
function resolveAccountKey(accountId?: string): string {
return accountId ?? "default";
return accountId ?? DEFAULT_ACCOUNT_KEY;
}
/** Register a GatewayPlugin instance for an account. */