import { sameOriginReport } from "./report-origin";
import { env } from "cloudflare:workers";
import { repoDb } from "../scoped-db";
import { forgetLocator, locate, locatedScopes, locatorsBefore, registerLocator } from "../scoped-db/locators";
import { backfillDone, backfillOnce } from "../backfill";
import { claimHost, forgetSite, registerOwnedSite, releaseHost, siteDb } from "./store";
import { sha256Hex } from "../crypto";
import { HttpError, badRequest } from "../errors";
import { enforceRateLimit, requestIp } from "../limits";
import { extractArtifact, storeFile } from "./collect";
import { manifestKey, metaKey, publishMeta, SCRATCH_LIMITS, slotKey } from "./config";
import { assertLabelFree, loadSiteById, unpublishSite } from "./deploy";
import { claimedLabel } from "./naming";
import { onScratchClaimed } from "./metering";
import {
CLAIM_PREFIX,
deployUpload,
forgetScratchExpiry,
registerScratchExpiry,
reserveScratch,
scratchExpiryKey,
scratchResult,
} from "./scratch-core";
import {
assertScratchRepoTransferable,
createScratchRepo,
sweepOrphanScratchRepos,
transferScratchRepo,
} from "./scratch-git";
import type { CollectedFiles } from "./collect";
import type { ScratchResult } from "./scratch-core";
import { plain } from "./static";
import { guessAbuseCategory, recordAbuseReport } from "../abuse";
import type { SiteMeta, SiteRow } from "./config";
import type { Viewer } from "~/lib/types";
const HTTP_TOO_LARGE = 413;
const MIB = 1024 * 1024;
const SWEEP_BATCH = 50;