Address PR feedback
parent
5af322f710
commit
f04e84f194
|
|
@ -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 () => {
|
it("rejects unknown presence actions", async () => {
|
||||||
await expect(handleDiscordPresenceAction("unknownAction", {}, presenceEnabled)).rejects.toThrow(
|
await expect(handleDiscordPresenceAction("unknownAction", {}, presenceEnabled)).rejects.toThrow(
|
||||||
/Unknown presence action/,
|
/Unknown presence action/,
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,13 @@ export async function handleDiscordPresenceAction(
|
||||||
const activities: Activity[] = [];
|
const activities: Activity[] = [];
|
||||||
|
|
||||||
if (activityTypeRaw || activityName) {
|
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) {
|
if (typeNum === undefined) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Invalid activityType "${activityTypeRaw}". Must be one of: ${Object.keys(ACTIVITY_TYPE_MAP).join(", ")}`,
|
`Invalid activityType "${activityTypeRaw}". Must be one of: ${Object.keys(ACTIVITY_TYPE_MAP).join(", ")}`,
|
||||||
|
|
|
||||||
|
|
@ -23,11 +23,12 @@ describe("gateway-registry", () => {
|
||||||
expect(getGateway("account-b")).toBeUndefined();
|
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();
|
const gateway = fakeGateway();
|
||||||
registerGateway(undefined, gateway);
|
registerGateway(undefined, gateway);
|
||||||
expect(getGateway(undefined)).toBe(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", () => {
|
it("unregisters a gateway", () => {
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,12 @@ import type { GatewayPlugin } from "@buape/carbon/gateway";
|
||||||
*/
|
*/
|
||||||
const gatewayRegistry = new Map<string, GatewayPlugin>();
|
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 {
|
function resolveAccountKey(accountId?: string): string {
|
||||||
return accountId ?? "default";
|
return accountId ?? DEFAULT_ACCOUNT_KEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Register a GatewayPlugin instance for an account. */
|
/** Register a GatewayPlugin instance for an account. */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue