Skip to content

Commit 94c8558

Browse files
author
Justin Torre
committed
more admin shtuff
1 parent fe4ea3c commit 94c8558

File tree

5 files changed

+25
-21
lines changed

5 files changed

+25
-21
lines changed

.claude/settings.local.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@
4545
"mcp__linear-server__list_comments",
4646
"mcp__playwright__browser_console_messages",
4747
"mcp__playwright__browser_network_requests",
48-
"mcp__playwright__browser_evaluate"
48+
"mcp__playwright__browser_evaluate",
49+
"Bash(yarn build)"
4950
],
5051
"deny": []
5152
}

valhalla/jawn/src/controllers/private/adminController.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ export class AdminController extends Controller {
122122

123123
// Get ClickHouse spending for these organizations
124124
const orgIds = paymentsResult.data.map((org) => org.org_id);
125-
const orgIds = paymentsResult.data.map((org) => org.org_id);
125+
126126
const clickhouseSpendResult = await clickhouseDb.dbQuery<{
127127
organization_id: string;
128128
total_cost: number;
@@ -136,7 +136,6 @@ export class AdminController extends Controller {
136136
`,
137137
[]
138138
);
139-
const clickhouseSpendMap = new Map<string, number>();
140139

141140
const clickhouseSpendMap = new Map<string, number>();
142141
if (!clickhouseSpendResult.error && clickhouseSpendResult.data) {
@@ -156,7 +155,9 @@ export class AdminController extends Controller {
156155
stripeCustomerId: org.stripe_customer_id,
157156
totalPayments: org.total_amount_received / 100, // Convert cents to dollars
158157
clickhouseTotalSpend: clickhouseSpendMap.get(org.org_id) || 0,
159-
lastPaymentDate: org.last_payment_date ? Number(org.last_payment_date) * 1000 : null, // Convert seconds to milliseconds
158+
lastPaymentDate: org.last_payment_date
159+
? Number(org.last_payment_date) * 1000
160+
: null, // Convert seconds to milliseconds
160161
tier: org.tier || "free",
161162
ownerEmail: org.owner_email || "Unknown",
162163
}));
@@ -1630,7 +1631,9 @@ export class AdminController extends Controller {
16301631

16311632
// Get the wallet state from the worker API using admin credentials
16321633
const workerApiUrl =
1633-
process.env.HELICONE_WORKER_API || process.env.WORKER_API_URL || "https://api.helicone.ai";
1634+
process.env.HELICONE_WORKER_API ||
1635+
process.env.WORKER_API_URL ||
1636+
"https://api.helicone.ai";
16341637
const adminAccessKey = process.env.HELICONE_MANUAL_ACCESS_KEY;
16351638

16361639
if (!adminAccessKey) {
@@ -1687,7 +1690,9 @@ export class AdminController extends Controller {
16871690

16881691
// Get table data from the worker API using admin credentials
16891692
const workerApiUrl =
1690-
process.env.HELICONE_WORKER_API || process.env.WORKER_API_URL || "https://api.helicone.ai";
1693+
process.env.HELICONE_WORKER_API ||
1694+
process.env.WORKER_API_URL ||
1695+
"https://api.helicone.ai";
16911696
const adminAccessKey = process.env.HELICONE_MANUAL_ACCESS_KEY;
16921697

16931698
if (!adminAccessKey) {
@@ -1697,9 +1702,9 @@ export class AdminController extends Controller {
16971702
try {
16981703
// Build query params for pagination
16991704
const params = new URLSearchParams();
1700-
if (page !== undefined) params.set('page', page.toString());
1701-
if (pageSize !== undefined) params.set('pageSize', pageSize.toString());
1702-
1705+
if (page !== undefined) params.set("page", page.toString());
1706+
if (pageSize !== undefined) params.set("pageSize", pageSize.toString());
1707+
17031708
// Use the admin endpoint that can query any org's table data
17041709
const response = await fetch(
17051710
`${workerApiUrl}/admin/wallet/${orgId}/tables/${tableName}?${params.toString()}`,

web/components/templates/admin/adminWallet.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@ import {
2727
AlertCircle,
2828
ExternalLink,
2929
} from "lucide-react";
30-
import { formatCurrency } from "@/lib/utils";
30+
import { formatCurrency as remoteFormatCurrency } from "@/lib/uiUtils";
31+
32+
const formatCurrency = (amount: number) => {
33+
return remoteFormatCurrency(amount, "USD", 6);
34+
}
3135

3236
interface DashboardData {
3337
organizations: Array<{
@@ -88,7 +92,7 @@ export default function AdminWallet() {
8892
queryKey: ["admin-wallet-dashboard"],
8993
queryFn: async () => {
9094
console.log("Fetching dashboard data...");
91-
const response = await jawn.POST("/v1/admin/gateway/dashboard_data");
95+
const response = await jawn.POST("/v1/admin/gateway/dashboard_data", {}) as any;
9296
console.log("Dashboard API response:", response);
9397
console.log("Response data:", response.data);
9498
console.log("Response error:", response.error);
@@ -116,7 +120,7 @@ export default function AdminWallet() {
116120
queryFn: async () => {
117121
if (!selectedOrg) throw new Error("No org selected");
118122
console.log("Fetching wallet details for org:", selectedOrg);
119-
const response = await jawn.POST(`/v1/admin/wallet/${selectedOrg}`, {});
123+
const response = await (jawn as any).POST(`/v1/admin/wallet/${selectedOrg}`, {});
120124
console.log("Wallet details API response:", response);
121125
console.log("Wallet response data:", response.data);
122126
console.log("Wallet response error:", response.error);
@@ -145,7 +149,7 @@ export default function AdminWallet() {
145149
"table:",
146150
selectedTable,
147151
);
148-
const response = await jawn.POST(
152+
const response = await (jawn as any).POST(
149153
`/v1/admin/wallet/${selectedOrg}/tables/${selectedTable}?page=${tablePage}&pageSize=50`,
150154
{},
151155
);

web/lib/uiUtils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ export function getStripeLink(
2222
export const formatCurrency = (
2323
amount: number | null | undefined,
2424
currency = "usd",
25+
maximumFractionDigits: number | undefined = undefined,
2526
): string => {
2627
if (amount === null || amount === undefined) return "$0.00";
2728
return new Intl.NumberFormat("en-US", {
2829
style: "currency",
2930
currency: currency.toUpperCase(),
3031
minimumFractionDigits: 2,
32+
maximumFractionDigits: maximumFractionDigits, // Support small amounts like $0.0003049
3133
}).format(amount);
3234
};
3335

web/lib/utils.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,3 @@ export function isJson(content: string) {
1717
}
1818
}
1919

20-
export function formatCurrency(amount: number): string {
21-
return new Intl.NumberFormat("en-US", {
22-
style: "currency",
23-
currency: "USD",
24-
minimumFractionDigits: 2,
25-
maximumFractionDigits: 6,
26-
}).format(amount);
27-
}

0 commit comments

Comments
 (0)