196 lines · 7.3 KB
import { env } from "cloudflare:workers";
import { invalidateUnread } from "../user-inbox";
import { z } from "zod";
import { placeholders } from "../db";
import { accountDb } from "../scoped-db";
import { filterReadable } from "../notification-store";
import { lfsUsage } from "../lfs/quota";
import { limitWrite, limitAccountWrite } from "../limits";
import { loadNotificationSettings } from "../notification-prefs";
import {
  createWebhookIntegration,
  deleteIntegrationById,
  listIntegrationsFor,
  redeliverDelivery,
  sendTestEvent,
} from "../integrations/manage";
import type { ScopeRef } from "../integrations/scope";
import { noContent, readJson, requireAccountScope, requireScopedAdminWrite, requireScopedRepo } from "./http";
import type { ApiContext } from "./http";
import { INTEGRATION_EVENTS } from "~/lib/integrations";

const MAX_IDS = 100;

export async function getLfsQuota(ctx: ApiContext): Promise<Response> {
  requireAccountScope(ctx);
  const usage = await lfsUsage(ctx.viewer.id);
  return Response.json({
    storage_bytes: usage.storageBytes,
    storage_limit: usage.storageLimit,
    bandwidth_bytes: usage.bandwidthBytes,
    bandwidth_limit: usage.bandwidthLimit,
    period: usage.period,
  });
}

function settingsJson(settings: Awaited<ReturnType<typeof loadNotificationSettings>>) {
  return {
    email_participating: settings.emailParticipating,
    email_watching: settings.emailWatching,
    web_participating: settings.webParticipating,