Skip to content
This repository has been archived by the owner on Sep 26, 2024. It is now read-only.

Commit

Permalink
TRPC v10 (#1215)
Browse files Browse the repository at this point in the history
  • Loading branch information
luixo authored May 23, 2023
1 parent c8ab661 commit f4320e9
Show file tree
Hide file tree
Showing 113 changed files with 1,839 additions and 2,034 deletions.
3 changes: 1 addition & 2 deletions backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
},
"homepage": "https://github.com/near/near-explorer#readme",
"dependencies": {
"@trpc/server": "^9.27.4",
"@trpc/server": "^10.26.0",
"cors": "^2.8.5",
"date-fns": "^2.28.0",
"dotenv-cli": "^5.0.0",
Expand All @@ -43,7 +43,6 @@
"near-api-js": "^0.44.1",
"pg": "^8.7.3",
"ts-node": "^10.4.0",
"tsafe": "^0.10.0",
"tsconfig-paths": "^4.1.2",
"ws": "^8.6.0",
"zod": "^3.16.0",
Expand Down
8 changes: 4 additions & 4 deletions backend/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { config } from "@/backend/config";
import { Context } from "@/backend/context";
import { runTasks } from "@/backend/cron";
import { initGlobalState } from "@/backend/global-state";
import { AppRouter, router } from "@/backend/router";
import { AppRouter, appRouter } from "@/backend/router";
import {
connectWebsocketServer,
createApp,
Expand All @@ -14,7 +14,7 @@ import {
import { onError } from "@/backend/utils/error";
import { setupTelemetryDb } from "@/backend/utils/telemetry";

async function main(appRouter: AppRouter): Promise<void> {
async function main(indexRouter: AppRouter): Promise<void> {
// eslint-disable-next-line no-console
console.log("Starting Explorer backend...");
const context: Context = {
Expand All @@ -28,7 +28,7 @@ async function main(appRouter: AppRouter): Promise<void> {
// Therefore we set max listeners to limit to infinity
context.subscriptionsEventEmitter.setMaxListeners(0);
const trpcOptions: RouterOptions & WebsocketRouterOptions = {
router: appRouter,
router: indexRouter,
createContext: ({ req, res }) => ({ ...context, req, res }),
onError,
};
Expand Down Expand Up @@ -79,4 +79,4 @@ async function main(appRouter: AppRouter): Promise<void> {
console.log("Explorer backend started");
}

void main(router);
void main(appRouter);
22 changes: 11 additions & 11 deletions backend/src/router/account/activity.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import * as trpc from "@trpc/server";
import { z } from "zod";

import { RequestContext } from "@/backend/context";
import {
indexerActivityDatabase,
indexerDatabase,
} from "@/backend/database/databases";
import { div } from "@/backend/database/utils";
import { t } from "@/backend/router/trpc";
import { validators } from "@/backend/router/validators";
import {
Action,
Expand Down Expand Up @@ -483,13 +482,15 @@ const getTransactionsByHashes = async (
}, new Map<string, TransactionPreview>());
};

export const router = trpc.router<RequestContext>().query("activity", {
input: z.strictObject({
accountId: validators.accountId,
limit: validators.limit,
cursor: validators.accountActivityCursor.optional(),
}),
resolve: async ({ input }) => {
export const procedure = t.procedure
.input(
z.strictObject({
accountId: validators.accountId,
limit: validators.limit,
cursor: validators.accountActivityCursor.optional(),
})
)
.query(async ({ input }) => {
const changes = await queryBalanceChanges(
input.accountId,
input.limit,
Expand Down Expand Up @@ -537,5 +538,4 @@ export const router = trpc.router<RequestContext>().query("activity", {
}
: undefined,
};
},
});
});
12 changes: 5 additions & 7 deletions backend/src/router/account/balance.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import * as trpc from "@trpc/server";
import { TRPCError } from "@trpc/server";
import { z } from "zod";

import { RequestContext } from "@/backend/context";
import { getAccountRpcData } from "@/backend/router/account/by-id";
import { t } from "@/backend/router/trpc";
import { validators } from "@/backend/router/validators";

export const router = trpc.router<RequestContext>().query("nonStakedBalance", {
input: z.strictObject({ id: validators.accountId }),
resolve: async ({ input: { id } }) => {
export const procedure = t.procedure
.input(z.strictObject({ id: validators.accountId }))
.query(async ({ input: { id } }) => {
const rpcData = await getAccountRpcData(id);
if (!rpcData) {
throw new TRPCError({
Expand All @@ -17,5 +16,4 @@ export const router = trpc.router<RequestContext>().query("nonStakedBalance", {
});
}
return rpcData.amount.toString();
},
});
});
29 changes: 14 additions & 15 deletions backend/src/router/account/by-id.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import * as trpc from "@trpc/server";
import { sha256 } from "js-sha256";
import { z } from "zod";

import { config } from "@/backend/config";
import { RequestContext } from "@/backend/context";
import { indexerDatabase } from "@/backend/database/databases";
import { div } from "@/backend/database/utils";
import { getAccountTransactionsCount } from "@/backend/router/account/utils";
import { t } from "@/backend/router/trpc";
import { validators } from "@/backend/router/validators";
import * as nearApi from "@/backend/utils/near";
import { ignoreIfDoesNotExist } from "@/backend/utils/near";
Expand Down Expand Up @@ -120,11 +119,10 @@ const getAccountInfo = async (accountId: string) => {
};
};

export const router = trpc
.router<RequestContext>()
.query("byIdOld", {
input: z.strictObject({ id: validators.accountId }),
resolve: async ({ input: { id } }) => {
export const procedures = {
byIdOld: t.procedure
.input(z.strictObject({ id: validators.accountId }))
.query(async ({ input: { id } }) => {
const [accountInfo, accountDetails] = await Promise.all([
getAccountInfo(id),
getAccountDetails(id),
Expand All @@ -136,13 +134,14 @@ export const router = trpc
...accountInfo,
details: accountDetails,
};
},
})
.query("byId", {
input: z.strictObject({
id: validators.accountId,
}),
resolve: async ({ input: { id } }) => {
byId: t.procedure
.input(
z.strictObject({
id: validators.accountId,
})
)
.query(async ({ input: { id } }) => {
if (/[A-Z]/.test(id)) {
return null;
}
Expand Down Expand Up @@ -178,5 +177,5 @@ export const router = trpc
transactionsCount.outTransactionsCount
: undefined,
};
},
});
}),
};
49 changes: 29 additions & 20 deletions backend/src/router/account/fungible-tokens.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import * as trpc from "@trpc/server";
import { z } from "zod";

import { RequestContext } from "@/backend/context";
import { FungibleTokenMetadata } from "@/backend/router/fungible-tokens";
import { t } from "@/backend/router/trpc";
import { validators } from "@/backend/router/validators";
import * as nearApi from "@/backend/utils/near";
import { notNullishGuard } from "@/common/utils/utils";
Expand All @@ -17,15 +16,16 @@ export const validateBase64Image = (
return base64ImageRegex.test(base64Image) ? base64Image : null;
};

export const router = trpc
.router<RequestContext>()
.query("fungibleTokens", {
input: z.strictObject({
accountId: validators.accountId,
}),
resolve: async ({ input: { accountId } }) => {
export const procedures = {
fungibleTokens: t.procedure
.input(
z.strictObject({
accountId: validators.accountId,
})
)
.query(async ({ input: { accountId } }) => {
// TODO: add data from Enhanced API
const selection: any[] = [];
const selection: { contractId: string }[] = [];
const contractIds = selection.map((row) => row.contractId);
const tokens = await Promise.all(
contractIds.map(async (contractId) => {
Expand Down Expand Up @@ -55,16 +55,25 @@ export const router = trpc
})
);
return tokens.filter(notNullishGuard);
},
})
.query("fungibleTokenHistory", {
input: z.strictObject({
accountId: validators.accountId,
tokenAuthorAccountId: validators.accountId,
}),
resolve: async ({ input: { accountId, tokenAuthorAccountId } }) => {
fungibleTokenHistory: t.procedure
.input(
z.strictObject({
accountId: validators.accountId,
tokenAuthorAccountId: validators.accountId,
})
)
.query(async ({ input: { accountId, tokenAuthorAccountId } }) => {
// TODO: add data from Enhanced API
const elements: any[] = [];
const elements: {
amount: string;
prevAccountId: string;
nextAccountId: string;
receiptId: string;
timestamp: string;
transactionHash: string;
blockHeight: string;
}[] = [];
const baseAmount = await nearApi.callViewMethod<string>(
tokenAuthorAccountId,
"ft_balance_of",
Expand All @@ -85,5 +94,5 @@ export const router = trpc
timestamp: parseInt(element.timestamp, 10),
})),
};
},
});
}),
};
42 changes: 23 additions & 19 deletions backend/src/router/account/index.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
import * as trpc from "@trpc/server";
import { t } from "@/backend/router/trpc";

import { RequestContext } from "@/backend/context";
import { procedure as activity } from "./activity";
import { procedure as nonStakedBalance } from "./balance";
import { procedures as byIdProcedures } from "./by-id";
import { procedures as fungibleTokensProcedures } from "./fungible-tokens";
import { procedure as listByTimestamp } from "./list";
import { procedures as nonFungibleTokensProcedures } from "./non-fungible-tokens";
import { procedure as transactionsCount } from "./transactions-count";

import { router as activityRouter } from "./activity";
import { router as balanceRouter } from "./balance";
import { router as byIdRouter } from "./by-id";
import { router as fungibleTokensRouter } from "./fungible-tokens";
import { router as listRouter } from "./list";
import { router as nonFungibleTokensRouter } from "./non-fungible-tokens";
import { router as transactionsCountRouter } from "./transactions-count";

export const router = trpc
.router<RequestContext>()
.merge(byIdRouter)
.merge(listRouter)
.merge(transactionsCountRouter)
.merge(fungibleTokensRouter)
.merge(activityRouter)
.merge(nonFungibleTokensRouter)
.merge(balanceRouter);
export const router = t.router({
byId: byIdProcedures.byId,
byIdOld: byIdProcedures.byIdOld,
listByTimestamp,
transactionsCount,
fungibleTokens: fungibleTokensProcedures.fungibleTokens,
fungibleTokenHistory: fungibleTokensProcedures.fungibleTokenHistory,
activity,
nonFungibleTokenContracts:
nonFungibleTokensProcedures.nonFungibleTokenContracts,
nonFungibleTokenHistory: nonFungibleTokensProcedures.nonFungibleTokenHistory,
nonFungibleTokens: nonFungibleTokensProcedures.nonFungibleTokens,
nonFungibleTokensCount: nonFungibleTokensProcedures.nonFungibleTokensCount,
nonStakedBalance,
});
20 changes: 10 additions & 10 deletions backend/src/router/account/list.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
import * as trpc from "@trpc/server";
import { z } from "zod";

import { RequestContext } from "@/backend/context";
import { indexerDatabase } from "@/backend/database/databases";
import { div } from "@/backend/database/utils";
import { t } from "@/backend/router/trpc";
import { validators } from "@/backend/router/validators";

export const router = trpc.router<RequestContext>().query("listByTimestamp", {
input: z.strictObject({
limit: validators.limit,
cursor: validators.accountPagination.nullish(),
}),
resolve: async ({ input: { limit, cursor } }) => {
export const procedure = t.procedure
.input(
z.strictObject({
limit: validators.limit,
cursor: validators.accountPagination.nullish(),
})
)
.query(async ({ input: { limit, cursor } }) => {
let selection = indexerDatabase
.selectFrom("accounts")
.leftJoin("receipts as creationReceipt", (jb) =>
Expand Down Expand Up @@ -63,5 +64,4 @@ export const router = trpc.router<RequestContext>().query("listByTimestamp", {
? parseInt(account.deletedTimestamp, 10)
: undefined,
}));
},
});
});
Loading

0 comments on commit f4320e9

Please sign in to comment.