Skip to content

Commit 6cfefc1

Browse files
committed
migrate analytics params from clientId/accountId to teamId/projectId
1 parent 1fa36c1 commit 6cfefc1

File tree

5 files changed

+66
-62
lines changed

5 files changed

+66
-62
lines changed

apps/dashboard/src/@/api/analytics.ts

Lines changed: 42 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { fetchAnalytics } from "data/analytics/fetch-analytics";
22
import type {
33
AnalyticsQueryParams,
4-
AnalyticsQueryParamsV2,
54
InAppWalletStats,
65
RpcMethodStats,
76
TransactionStats,
@@ -11,24 +10,13 @@ import type {
1110
} from "types/analytics";
1211
import { getChains } from "./chain";
1312

14-
function buildSearchParams(
15-
params: AnalyticsQueryParams | AnalyticsQueryParamsV2,
16-
): URLSearchParams {
13+
function buildSearchParams(params: AnalyticsQueryParams): URLSearchParams {
1714
const searchParams = new URLSearchParams();
1815

19-
// v1 params
20-
if ("clientId" in params && params.clientId) {
21-
searchParams.append("clientId", params.clientId);
22-
}
23-
if ("accountId" in params && params.accountId) {
24-
searchParams.append("accountId", params.accountId);
25-
}
26-
2716
// v2 params
28-
if ("teamId" in params && params.teamId) {
29-
searchParams.append("teamId", params.teamId);
30-
}
31-
if ("projectId" in params && params.projectId) {
17+
searchParams.append("teamId", params.teamId);
18+
19+
if (params.projectId) {
3220
searchParams.append("projectId", params.projectId);
3321
}
3422

@@ -46,7 +34,7 @@ function buildSearchParams(
4634
}
4735

4836
export async function getWalletConnections(
49-
params: AnalyticsQueryParamsV2,
37+
params: AnalyticsQueryParams,
5038
): Promise<WalletStats[]> {
5139
const searchParams = buildSearchParams(params);
5240
const res = await fetchAnalytics(
@@ -70,7 +58,7 @@ export async function getWalletConnections(
7058
}
7159

7260
export async function getInAppWalletUsage(
73-
params: AnalyticsQueryParamsV2,
61+
params: AnalyticsQueryParams,
7462
): Promise<InAppWalletStats[]> {
7563
const searchParams = buildSearchParams(params);
7664
const res = await fetchAnalytics(
@@ -94,7 +82,7 @@ export async function getInAppWalletUsage(
9482
}
9583

9684
export async function getUserOpUsage(
97-
params: AnalyticsQueryParamsV2,
85+
params: AnalyticsQueryParams,
9886
): Promise<UserOpStats[]> {
9987
const searchParams = buildSearchParams(params);
10088
const res = await fetchAnalytics(
@@ -118,7 +106,7 @@ export async function getUserOpUsage(
118106
}
119107

120108
export async function getAggregateUserOpUsage(
121-
params: Omit<AnalyticsQueryParamsV2, "period">,
109+
params: Omit<AnalyticsQueryParams, "period">,
122110
): Promise<UserOpStats> {
123111
const [userOpStats, chains] = await Promise.all([
124112
getUserOpUsage({ ...params, period: "all" }),
@@ -152,7 +140,7 @@ export async function getAggregateUserOpUsage(
152140
}
153141

154142
export async function getClientTransactions(
155-
params: AnalyticsQueryParamsV2,
143+
params: AnalyticsQueryParams,
156144
): Promise<TransactionStats[]> {
157145
const searchParams = buildSearchParams(params);
158146
const res = await fetchAnalytics(
@@ -180,7 +168,7 @@ export async function getRpcMethodUsage(
180168
): Promise<RpcMethodStats[]> {
181169
const searchParams = buildSearchParams(params);
182170
const res = await fetchAnalytics(
183-
`v1/rpc/evm-methods?${searchParams.toString()}`,
171+
`v2/rpc/evm-methods?${searchParams.toString()}`,
184172
{
185173
method: "GET",
186174
headers: { "Content-Type": "application/json" },
@@ -201,7 +189,7 @@ export async function getWalletUsers(
201189
): Promise<WalletUserStats[]> {
202190
const searchParams = buildSearchParams(params);
203191
const res = await fetchAnalytics(
204-
`v1/wallets/users?${searchParams.toString()}`,
192+
`v2/wallet-connects/users?${searchParams.toString()}`,
205193
{
206194
method: "GET",
207195
headers: { "Content-Type": "application/json" },
@@ -220,23 +208,47 @@ export async function getWalletUsers(
220208
return json.data as WalletUserStats[];
221209
}
222210

211+
type ActiveStatus = {
212+
bundler: boolean;
213+
storage: boolean;
214+
rpc: boolean;
215+
nebula: boolean;
216+
sdk: boolean;
217+
insight: boolean;
218+
pay: boolean;
219+
inAppWallet: boolean;
220+
};
221+
223222
export async function isProjectActive(
224223
params: AnalyticsQueryParams,
225-
): Promise<boolean> {
224+
): Promise<ActiveStatus> {
226225
const searchParams = buildSearchParams(params);
227-
const res = await fetchAnalytics(`v1/active?${searchParams.toString()}`, {
228-
method: "GET",
229-
headers: { "Content-Type": "application/json" },
230-
});
226+
const res = await fetchAnalytics(
227+
`v2/active-usage?${searchParams.toString()}`,
228+
{
229+
method: "GET",
230+
headers: { "Content-Type": "application/json" },
231+
},
232+
);
231233

232234
if (res?.status !== 200) {
233235
const reason = await res?.text();
234236
console.error(
235237
`Failed to fetch project active status: ${res?.status} - ${res.statusText} - ${reason}`,
236238
);
237-
return false;
239+
return {
240+
bundler: false,
241+
storage: false,
242+
rpc: false,
243+
nebula: false,
244+
sdk: false,
245+
insight: false,
246+
pay: false,
247+
inAppWallet: false,
248+
ecosystemWallet: false,
249+
} as ActiveStatus;
238250
}
239251

240252
const json = await res.json();
241-
return json.data.isActive as boolean;
253+
return json.data as ActiveStatus;
242254
}

apps/dashboard/src/app/team/[team_slug]/(team)/~/analytics/page.tsx

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,25 @@ import {
55
getWalletConnections,
66
getWalletUsers,
77
} from "@/api/analytics";
8-
import { redirect } from "next/navigation";
9-
10-
import type {
11-
InAppWalletStats,
12-
WalletStats,
13-
WalletUserStats,
14-
} from "types/analytics";
15-
168
import {
179
type DurationId,
1810
type Range,
1911
getLastNDaysRange,
2012
} from "components/analytics/date-range-selector";
21-
13+
import { redirect } from "next/navigation";
2214
import { type WalletId, getWalletInfo } from "thirdweb/wallets";
15+
import type {
16+
InAppWalletStats,
17+
WalletStats,
18+
WalletUserStats,
19+
} from "types/analytics";
2320
import { AnalyticsHeader } from "../../../../components/Analytics/AnalyticsHeader";
2421
import { CombinedBarChartCard } from "../../../../components/Analytics/CombinedBarChartCard";
2522
import { EmptyState } from "../../../../components/Analytics/EmptyState";
2623
import { PieChartCard } from "../../../../components/Analytics/PieChartCard";
2724

2825
import { getTeamBySlug } from "@/api/team";
2926
import { GenericLoadingPage } from "@/components/blocks/skeletons/GenericLoadingPage";
30-
import type { Account } from "@3rdweb-sdk/react/hooks/useApi";
31-
import { getValidAccount } from "app/account/settings/getAccount";
3227
import { EmptyStateCard } from "app/team/components/Analytics/EmptyStateCard";
3328
import { Suspense } from "react";
3429
import { TotalSponsoredChartCardUI } from "../../_components/TotalSponsoredCard";
@@ -51,7 +46,6 @@ export default async function TeamOverviewPage(props: {
5146
props.searchParams,
5247
]);
5348

54-
const account = await getValidAccount(`/team/${params.team_slug}`);
5549
const team = await getTeamBySlug(params.team_slug);
5650

5751
if (!team) {
@@ -75,7 +69,6 @@ export default async function TeamOverviewPage(props: {
7569
<Suspense fallback={<GenericLoadingPage />}>
7670
<OverviewPageContent
7771
teamId={team.id}
78-
account={account}
7972
range={range}
8073
interval={interval}
8174
searchParams={searchParams}
@@ -88,12 +81,11 @@ export default async function TeamOverviewPage(props: {
8881

8982
async function OverviewPageContent(props: {
9083
teamId: string;
91-
account: Account;
9284
range: Range;
9385
interval: "day" | "week";
9486
searchParams: SearchParams;
9587
}) {
96-
const { teamId, account, range, interval, searchParams } = props;
88+
const { teamId, range, interval, searchParams } = props;
9789

9890
const [
9991
walletConnections,
@@ -113,7 +105,7 @@ async function OverviewPageContent(props: {
113105
}),
114106
// Time series data for wallet users
115107
getWalletUsers({
116-
accountId: account.id,
108+
teamId: teamId,
117109
from: range.from,
118110
to: range.to,
119111
period: interval,

apps/dashboard/src/app/team/[team_slug]/[project_slug]/components/Transactions/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { LoadingChartState } from "components/analytics/empty-chart-state";
22
import { Suspense } from "react";
3-
import type { AnalyticsQueryParamsV2 } from "types/analytics";
3+
import type { AnalyticsQueryParams } from "types/analytics";
44
import { getClientTransactions } from "../../../../../../@/api/analytics";
55
import { TransactionsChartsUI } from "./TransactionCharts";
66

77
export function TransactionsCharts(
8-
props: AnalyticsQueryParamsV2 & {
8+
props: AnalyticsQueryParams & {
99
searchParams: { [key: string]: string | string[] | undefined };
1010
},
1111
) {
@@ -24,7 +24,7 @@ export function TransactionsCharts(
2424
}
2525

2626
async function TransactionsChartCardAsync(
27-
props: AnalyticsQueryParamsV2 & {
27+
props: AnalyticsQueryParams & {
2828
searchParams: { [key: string]: string | string[] | undefined };
2929
},
3030
) {

apps/dashboard/src/app/team/[team_slug]/[project_slug]/page.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,13 @@ export default async function ProjectOverviewPage(props: PageProps) {
7070
type: rangeType,
7171
};
7272

73-
const isActive = await isProjectActive({ clientId: project.publishableKey });
73+
const activeStatus = await isProjectActive({
74+
teamId: project.teamId,
75+
projectId: project.id,
76+
});
77+
78+
// is any analytics data active?
79+
const isActive = Object.values(activeStatus).some((v) => !!v);
7480

7581
return (
7682
<div className="flex grow flex-col">
@@ -127,7 +133,8 @@ async function ProjectAnalytics(props: {
127133
}),
128134
// Time series data for wallet users
129135
getWalletUsers({
130-
clientId: project.publishableKey,
136+
teamId: project.teamId,
137+
projectId: project.id,
131138
from: range.from,
132139
to: range.to,
133140
period: interval,
@@ -227,7 +234,8 @@ async function ProjectAnalytics(props: {
227234
from={range.from}
228235
to={range.to}
229236
period={interval}
230-
clientId={project.publishableKey}
237+
teamId={project.teamId}
238+
projectId={project.id}
231239
/>
232240
</div>
233241
);

apps/dashboard/src/types/analytics.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,9 @@ export interface RpcMethodStats {
4242
}
4343

4444
export interface AnalyticsQueryParams {
45-
clientId?: string;
46-
accountId?: string;
45+
teamId: string;
46+
projectId?: string;
4747
from?: Date;
4848
to?: Date;
4949
period?: "day" | "week" | "month" | "year" | "all";
5050
}
51-
52-
export type AnalyticsQueryParamsV2 = Omit<
53-
AnalyticsQueryParams,
54-
"clientId" | "accountId"
55-
> & {
56-
teamId: string;
57-
projectId?: string;
58-
};

0 commit comments

Comments
 (0)