File size: 2,203 Bytes
cd8bd0a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
type UsageLimitRecord = Record<string, unknown>;

export interface ApiKeyUsageLimitFields {
  usageLimitEnabled: boolean;
  dailyUsageLimitUsd: number | null;
  weeklyUsageLimitUsd: number | null;
}

export function parseUsageLimitEnabled(value: unknown): boolean {
  return value === true || value === 1 || value === "1";
}

export function parseNullablePositiveNumber(value: unknown): number | null {
  if (typeof value === "number" && Number.isFinite(value) && value > 0) return value;
  if (typeof value === "string" && value.trim()) {
    const parsed = Number(value);
    return Number.isFinite(parsed) && parsed > 0 ? parsed : null;
  }
  return null;
}

export function parseApiKeyUsageLimitFields(record: UsageLimitRecord): ApiKeyUsageLimitFields {
  return {
    usageLimitEnabled: parseUsageLimitEnabled(
      record.usage_limit_enabled ?? record.usageLimitEnabled
    ),
    dailyUsageLimitUsd: parseNullablePositiveNumber(
      record.daily_usage_limit_usd ?? record.dailyUsageLimitUsd
    ),
    weeklyUsageLimitUsd: parseNullablePositiveNumber(
      record.weekly_usage_limit_usd ?? record.weeklyUsageLimitUsd
    ),
  };
}

export function hasUsageLimitUpdate(update: UsageLimitRecord): boolean {
  return (
    update.usageLimitEnabled !== undefined ||
    update.dailyUsageLimitUsd !== undefined ||
    update.weeklyUsageLimitUsd !== undefined
  );
}

export function appendUsageLimitUpdates(
  update: UsageLimitRecord,
  updates: string[],
  params: {
    usageLimitEnabled?: number;
    dailyUsageLimitUsd?: number | null;
    weeklyUsageLimitUsd?: number | null;
  }
) {
  if (update.usageLimitEnabled !== undefined) {
    updates.push("usage_limit_enabled = @usageLimitEnabled");
    params.usageLimitEnabled = update.usageLimitEnabled === true ? 1 : 0;
  }
  if (update.dailyUsageLimitUsd !== undefined) {
    updates.push("daily_usage_limit_usd = @dailyUsageLimitUsd");
    params.dailyUsageLimitUsd = parseNullablePositiveNumber(update.dailyUsageLimitUsd);
  }
  if (update.weeklyUsageLimitUsd !== undefined) {
    updates.push("weekly_usage_limit_usd = @weeklyUsageLimitUsd");
    params.weeklyUsageLimitUsd = parseNullablePositiveNumber(update.weeklyUsageLimitUsd);
  }
}