openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
48 lines (47 loc) • 2.15 kB
JavaScript
import { r as captureOpenClawStateWorkerContext } from "./openclaw-state-worker-context-BvvgY6-t.mjs";
import { r as AUTH_RATE_LIMIT_SCOPE_DEVICE_JOIN } from "./auth-rate-limit-CKj8jGW2.mjs";
import { n as withSerializedRateLimitAttempt } from "./rate-limit-attempt-serialization-C3TDZylG.mjs";
import { u as sendJson } from "./http-common-Cr4G2eKt.mjs";
import { t as isDevicePairingJoinCode } from "./join-code-B_OfdZ-j.mjs";
import { t as redeemDevicePairingJoinCode } from "./device-pairing-join-code-hkHrxThQ.mjs";
//#region src/gateway/device-pairing-join-http.ts
/** Handle the core-owned /j namespace before hooks, plugins, and the Control UI SPA. */
async function handleDevicePairingJoinHttpRequest(params) {
const parsed = URL.parse(params.req.url ?? "/", "http://localhost");
params.res.setHeader("Cache-Control", "no-store");
const validRequest = params.req.method === "GET" && !parsed?.search && isDevicePairingJoinCode(params.shortcode);
let context;
let captureFailure;
if (validRequest) try {
context = captureOpenClawStateWorkerContext();
} catch (error) {
captureFailure = { error };
}
await withSerializedRateLimitAttempt({
ip: params.clientIp,
scope: AUTH_RATE_LIMIT_SCOPE_DEVICE_JOIN,
run: async () => {
const rateCheck = params.rateLimiter?.check(params.clientIp, AUTH_RATE_LIMIT_SCOPE_DEVICE_JOIN);
if (rateCheck && !rateCheck.allowed) {
if (rateCheck.retryAfterMs > 0) params.res.setHeader("Retry-After", String(Math.ceil(rateCheck.retryAfterMs / 1e3)));
sendJson(params.res, 429, { error: "rate_limited" });
return;
}
if (captureFailure) throw captureFailure.error;
const payload = validRequest ? await redeemDevicePairingJoinCode({
shortcode: params.shortcode,
context
}) : null;
if (!payload) {
params.rateLimiter?.recordFailure(params.clientIp, AUTH_RATE_LIMIT_SCOPE_DEVICE_JOIN);
sendJson(params.res, 404, { error: "not_found" });
return;
}
params.rateLimiter?.reset(params.clientIp, AUTH_RATE_LIMIT_SCOPE_DEVICE_JOIN);
sendJson(params.res, 200, payload);
}
});
return true;
}
//#endregion
export { handleDevicePairingJoinHttpRequest };