kozukata-toa/src/servers/aimedb/handlers/index.ts

57 lines
2.5 KiB
TypeScript

import {
GetAimeAccountHandler,
GetAimeAccountExtendedHandler,
RegisterAimeAccountHandler,
} from "./aime-account";
import { AimeExtendedLogHandler, AimeLogHandler, StatusLogHandler } from "./aime-log";
import { GetCampaignClearInfoHandler, GetCampaignInfoHandler } from "./campaign";
import {
FelicaExtendedLookupHandler,
FelicaLookupHandler,
FelicaRegisterHandler,
} from "./felica-conversion";
import { ServiceHealthCheckHandler } from "./status-check";
import { CommandId } from "../utils/misc";
import type { AimeDBHandlerFn, AimeDBReturnTypes } from "../types/handlers";
type CommandIdRequest = {
[K in keyof typeof CommandId]: K extends `${infer _}_REQUEST` ? typeof CommandId[K] : never;
}[keyof typeof CommandId];
// We need to make the key type wider so that the request handler can still index with
// an arbitrary command ID. On the other hand, the `satisfies` clause makes TypeScript
// yells at us for any known unimplemented AimeDB commands.
export const AIMEDB_HANDLERS: Record<number, AimeDBHandlerFn<AimeDBReturnTypes>> = {
[CommandId.FELICA_LOOKUP_REQUEST]: FelicaLookupHandler,
[CommandId.FELICA_REGISTER_REQUEST]: FelicaRegisterHandler,
[CommandId.AIME_ACCOUNT_REQUEST]: GetAimeAccountHandler,
[CommandId.REGISTER_AIME_ACCOUNT_REQUEST]: RegisterAimeAccountHandler,
[CommandId.STATUS_LOG_REQUEST]: StatusLogHandler,
[CommandId.AIME_LOG_REQUEST]: AimeLogHandler,
[CommandId.EXTENDED_AIME_LOG_REQUEST]: AimeExtendedLogHandler,
[CommandId.CAMPAIGN_INFO_REQUEST]: GetCampaignInfoHandler,
[CommandId.CAMPAIGN_CLEAR_INFO_REQUEST]: GetCampaignClearInfoHandler,
[CommandId.EXTENDED_ACCOUNT_REQUEST]: GetAimeAccountExtendedHandler,
[CommandId.EXTENDED_FELICA_ACCOUNT_REQUEST]: FelicaExtendedLookupHandler,
[CommandId.SERVICE_HEALTH_REQUEST]: ServiceHealthCheckHandler,
} satisfies Record<
Exclude<CommandIdRequest, CommandId.CLIENT_END_REQUEST>,
AimeDBHandlerFn<AimeDBReturnTypes>
>;
export const EXPECTED_PACKET_LENGTH: Record<number, number> = {
[CommandId.FELICA_LOOKUP_REQUEST]: 48,
[CommandId.FELICA_REGISTER_REQUEST]: 48,
[CommandId.AIME_ACCOUNT_REQUEST]: 48,
[CommandId.REGISTER_AIME_ACCOUNT_REQUEST]: 48,
[CommandId.STATUS_LOG_REQUEST]: 48,
[CommandId.AIME_LOG_REQUEST]: 64,
[CommandId.EXTENDED_AIME_LOG_REQUEST]: 1008,
[CommandId.CAMPAIGN_INFO_REQUEST]: 48,
[CommandId.CAMPAIGN_CLEAR_INFO_REQUEST]: 48,
[CommandId.EXTENDED_ACCOUNT_REQUEST]: 48,
[CommandId.EXTENDED_FELICA_ACCOUNT_REQUEST]: 112,
[CommandId.SERVICE_HEALTH_REQUEST]: 32,
[CommandId.CLIENT_END_REQUEST]: 32,
} satisfies Record<CommandIdRequest, number>;