310 lines · 13.9 KB
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;