33 lines
1010 B
TypeScript
33 lines
1010 B
TypeScript
"use server";
|
|
|
|
import "@/features/housekeeping/commands";
|
|
import { dispatchHousekeepingCommand } from "@/features/housekeeping/foundation/commands/dispatcher";
|
|
import {
|
|
type HousekeepingResult,
|
|
mapUnknownError,
|
|
} from "@/features/housekeeping/foundation/contracts";
|
|
import { getHousekeepingCapabilityContext } from "@/features/housekeeping/foundation/server-capability-context";
|
|
import { clientIp, rateLimit } from "@/lib/rate-limit";
|
|
import { housekeepingAuditWriter } from "@/lib/services/audit";
|
|
|
|
export async function executeHousekeepingCommand(
|
|
request: unknown,
|
|
): Promise<HousekeepingResult<unknown>> {
|
|
try {
|
|
const [context, ipAddress] = await Promise.all([
|
|
getHousekeepingCapabilityContext(),
|
|
clientIp(),
|
|
]);
|
|
|
|
return await dispatchHousekeepingCommand(request, {
|
|
context,
|
|
ipAddress,
|
|
audit: housekeepingAuditWriter,
|
|
rateLimit: async (key, attempts, windowMs) =>
|
|
(await rateLimit(key, attempts, windowMs)).ok,
|
|
});
|
|
} catch (error) {
|
|
return mapUnknownError(error);
|
|
}
|
|
}
|