(_version: V) => {
const route = OpenApiCreateRoute(updatedRouteConfig);
const handler = (
- callback: RouteHandler,
+ callback: RouteHandler,
) => ({
handler: callback,
route: route,
@@ -41,4 +91,9 @@ const createApi = (_version: V) => {
return { createRoute };
};
-export const v1Api = createApi("v1");
+export const authMiddleware = (option?: accessTokenAuthMiddlewareOptions) =>
+ some(sessionCookieAuthMiddleware(), accessTokenAuthMiddleware(option));
+
+export const ApiV1 = createApi("v1");
+
+export const withAuthApiV1 = createApi("v1", true);
diff --git a/src/server/audit/index.ts b/src/server/audit/index.ts
index 806f510ed..53fcdb5ca 100644
--- a/src/server/audit/index.ts
+++ b/src/server/audit/index.ts
@@ -20,15 +20,8 @@
// },
// });
-/* eslint-disable @typescript-eslint/no-unsafe-return */
-/* eslint-disable @typescript-eslint/no-unsafe-member-access */
-/* eslint-disable @typescript-eslint/no-unsafe-call */
-/* eslint-disable @typescript-eslint/no-unsafe-assignment */
-import {
- type AuditSchemaType,
- type TEsignAuditSchema,
-} from "@/server/audit/schema";
-import { type TPrismaOrTransaction } from "@/server/db";
+import type { AuditSchemaType, TEsignAuditSchema } from "@/server/audit/schema";
+import type { TPrismaOrTransaction } from "@/server/db";
const create = (data: AuditSchemaType, tx: TPrismaOrTransaction) => {
return tx.audit.create({
diff --git a/src/server/audit/schema.ts b/src/server/audit/schema.ts
index 57645c184..d952ead73 100644
--- a/src/server/audit/schema.ts
+++ b/src/server/audit/schema.ts
@@ -58,8 +58,8 @@ export const AuditSchema = z.object({
"update.shared",
"update.unshared",
- "apiKey.created",
- "apiKey.deleted",
+ "accessToken.created",
+ "accessToken.deleted",
"bucket.created",
@@ -96,7 +96,7 @@ export const AuditSchema = z.object({
"share",
"update",
"stakeholder",
- "apiKey",
+ "accessToken",
"bucket",
"stripeSession",
"stripeBillingPortalSession",
diff --git a/src/server/auth.ts b/src/server/auth.ts
index 35f507906..1284f0fcf 100644
--- a/src/server/auth.ts
+++ b/src/server/auth.ts
@@ -144,6 +144,7 @@ export const authOptions: NextAuthOptions = {
return token;
},
},
+ // @ts-expect-error
adapter: PrismaAdapter(db),
secret: env.NEXTAUTH_SECRET ?? "secret",
session: {
@@ -337,6 +338,13 @@ export async function checkMembership({ session, tx }: checkMembershipOptions) {
companyId: true,
role: true,
customRoleId: true,
+ userId: true,
+ user: {
+ select: {
+ name: true,
+ email: true,
+ },
+ },
},
});
diff --git a/src/server/db.ts b/src/server/db.ts
index c3b6017e3..f66e629b8 100644
--- a/src/server/db.ts
+++ b/src/server/db.ts
@@ -2,6 +2,7 @@ import { PrismaClient } from "@prisma/client";
import { env } from "@/env";
import type { TTemplateFieldMetaType } from "@/trpc/routers/template-field-router/schema";
+import { pagination } from "prisma-extension-pagination";
declare global {
namespace PrismaJson {
@@ -9,22 +10,25 @@ declare global {
}
}
+function getExtendedClient() {
+ return new PrismaClient({
+ log: env.LOGS ? ["query", "error", "warn"] : ["error"],
+ }).$extends(pagination());
+}
+
const globalForPrisma = globalThis as unknown as {
- prisma: PrismaClient | undefined;
+ prisma: ExtendedPrismaClient | undefined;
};
-export const db =
- globalForPrisma.prisma ??
- new PrismaClient({
- log: env.LOGS ? ["query", "error", "warn"] : ["error"],
- });
+export const db = globalForPrisma.prisma ?? getExtendedClient();
if (env.NODE_ENV !== "production") globalForPrisma.prisma = db;
export type PrismaTransactionalClient = Parameters<
- Parameters[0]
+ Parameters[0]
>[0];
export type TPrisma = typeof db;
export type TPrismaOrTransaction = TPrisma | PrismaTransactionalClient;
+export type ExtendedPrismaClient = ReturnType;
diff --git a/src/server/member.ts b/src/server/member.ts
index 100221205..45203e790 100644
--- a/src/server/member.ts
+++ b/src/server/member.ts
@@ -1,8 +1,6 @@
-import { env } from "@/env";
import { createHash } from "@/lib/crypto";
-import type { Prisma } from "@prisma/client";
import { nanoid } from "nanoid";
-import { db } from "./db";
+import { type TPrismaOrTransaction, db } from "./db";
export const checkVerificationToken = async (
token: string,
@@ -62,7 +60,7 @@ export async function generateInviteToken() {
interface revokeExistingInviteTokensOptions {
memberId: string;
email: string;
- tx?: Prisma.TransactionClient;
+ tx?: TPrismaOrTransaction;
}
export async function revokeExistingInviteTokens({
diff --git a/src/server/services/shares/add-share.ts b/src/server/services/shares/add-share.ts
deleted file mode 100644
index 1a9f33a25..000000000
--- a/src/server/services/shares/add-share.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-import { generatePublicId } from "@/common/id";
-import { Audit } from "@/server/audit";
-import { db } from "@/server/db";
-import type { TypeZodAddShareMutationSchema } from "@/trpc/routers/securities-router/schema";
-
-export interface AddShareType extends TypeZodAddShareMutationSchema {
- companyId: string;
- memberId: string;
- requestIP: string;
- userAgent: string;
- user: {
- id: string;
- name: string;
- };
-}
-
-export const addShare = async (input: AddShareType) => {
- try {
- const share = await db.$transaction(async (tx) => {
- const documents = input.documents;
-
- const data = {
- companyId: input.companyId,
- stakeholderId: input.stakeholderId,
- shareClassId: input.shareClassId,
- status: input.status,
- certificateId: input.certificateId,
- quantity: input.quantity,
- pricePerShare: input.pricePerShare,
- capitalContribution: input.capitalContribution,
- ipContribution: input.ipContribution,
- debtCancelled: input.debtCancelled,
- otherContributions: input.otherContributions,
- cliffYears: input.cliffYears,
- vestingYears: input.vestingYears,
- companyLegends: input.companyLegends,
- issueDate: new Date(input.issueDate),
- rule144Date: new Date(input.rule144Date),
- vestingStartDate: new Date(input.vestingStartDate),
- boardApprovalDate: new Date(input.boardApprovalDate),
- };
-
- const share = await tx.share.create({ data });
-
- if (documents && documents.length > 0) {
- const bulkDocuments = documents.map((doc) => ({
- companyId: input.companyId,
- uploaderId: input.memberId,
- publicId: generatePublicId(),
- name: doc.name,
- bucketId: doc.bucketId,
- shareId: share.id,
- }));
-
- await tx.document.createMany({
- data: bulkDocuments,
- skipDuplicates: true,
- });
- }
-
- await Audit.create(
- {
- action: "share.created",
- companyId: input.companyId,
- actor: { type: "user", id: input.user.id },
- context: {
- userAgent: input.userAgent,
- requestIp: input.requestIP,
- },
- target: [{ type: "share", id: share.id }],
- summary: `${input.user.name} added share for stakeholder ${input.stakeholderId}`,
- },
- tx,
- );
-
- return share;
- });
-
- return {
- success: true,
- message: "🎉 Successfully added a share",
- data: share,
- };
- } catch (error) {
- console.error("Error adding shares: ", error);
- return {
- success: false,
- message: "Please use unique Certificate Id.",
- };
- }
-};
diff --git a/src/server/services/shares/delete-share.ts b/src/server/services/shares/delete-share.ts
deleted file mode 100644
index 56bd05c4f..000000000
--- a/src/server/services/shares/delete-share.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-import { Audit } from "@/server/audit";
-import { db } from "@/server/db";
-
-interface DeleteShareType {
- user: {
- id: string;
- name: string;
- };
- shareId: string;
- companyId: string;
- userAgent: string;
- requestIp: string;
-}
-
-export const deleteShare = async ({
- shareId,
- companyId,
- requestIp,
- userAgent,
- user,
-}: DeleteShareType) => {
- try {
- const existingShare = await db.share.findUnique({
- where: {
- id: shareId,
- },
- });
-
- if (!existingShare) {
- return {
- success: false,
- code: "NOT_FOUND",
- message: `Share with ID ${shareId} not found`,
- };
- }
-
- const share = await db.$transaction(async (tx) => {
- const share = await tx.share.delete({
- where: {
- id: shareId,
- },
- });
-
- const { stakeholderId } = share;
-
- await Audit.create(
- {
- action: "share.deleted",
- companyId,
- actor: { type: "user", id: user.id },
- context: {
- userAgent,
- requestIp,
- },
- target: [{ type: "share", id: shareId }],
- summary: `${user.name} Deleted the share for stakeholder ${stakeholderId}`,
- },
- tx,
- );
-
- return share;
- });
-
- return {
- success: true,
- message: "🎉 Successfully Deleted the share",
- share,
- };
- } catch (error) {
- console.error("Error Deleting the share: ", error);
- return {
- success: false,
- code: "INTERNAL_SERVER_ERROR",
- message: "Error deleting the share, please try again or contact support.",
- };
- }
-};
diff --git a/src/server/services/shares/get-shares.ts b/src/server/services/shares/get-shares.ts
deleted file mode 100644
index 815ed07d9..000000000
--- a/src/server/services/shares/get-shares.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { ProxyPrismaModel } from "@/server/api/pagination/prisma-proxy";
-import { db } from "@/server/db";
-
-type GetPaginatedShares = {
- companyId: string;
- take: number;
- cursor?: string;
- total?: number;
-};
-
-export const getPaginatedShares = async (payload: GetPaginatedShares) => {
- const queryCriteria = {
- where: {
- companyId: payload.companyId,
- },
- orderBy: {
- createdAt: "desc",
- },
- };
-
- const paginationData = {
- take: payload.take,
- cursor: payload.cursor,
- total: payload.total,
- };
-
- const prismaModel = ProxyPrismaModel(db.share);
-
- const { data, count, total, cursor } = await prismaModel.findManyPaginated(
- queryCriteria,
- paginationData,
- );
-
- return {
- data,
- meta: {
- count,
- total,
- cursor,
- },
- };
-};
diff --git a/src/server/services/shares/update-share.ts b/src/server/services/shares/update-share.ts
deleted file mode 100644
index 4d7ca7cc4..000000000
--- a/src/server/services/shares/update-share.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-import { ApiError } from "@/server/api/error";
-import type { UpdateShareSchemaType } from "@/server/api/schema/shares";
-import { Audit } from "@/server/audit";
-import { db } from "@/server/db";
-import type { ShareLegendsEnum } from "@prisma/client";
-
-export type UpdateSharePayloadType = {
- shareId: string;
- companyId: string;
- requestIp: string;
- userAgent: string;
- user: {
- id: string;
- name: string;
- };
- data: UpdateShareSchemaType;
-};
-
-export const updateShare = async (payload: UpdateSharePayloadType) => {
- const { shareId, companyId, requestIp, userAgent, user, data } = payload;
-
- try {
- const existingShare = await db.share.findUnique({
- where: { id: shareId },
- });
-
- if (!existingShare) {
- return {
- success: false,
- message: `Share with ID ${shareId} not be found`,
- };
- }
-
- const shareData = {
- ...existingShare,
- ...data,
- };
-
- const share = await db.$transaction(async (tx) => {
- const share = await tx.share.update({
- where: { id: shareId },
- // @ts-ignore
- data: shareData,
- });
-
- await Audit.create(
- {
- action: "share.updated",
- companyId: companyId,
- actor: { type: "user", id: user.id },
- context: {
- userAgent: userAgent,
- requestIp: requestIp,
- },
- target: [{ type: "share", id: share.id }],
- summary: `${user.name} updated share the share ID ${shareId}`,
- },
- tx,
- );
-
- return share;
- });
-
- return {
- success: true,
- message: "🎉 Successfully updated share.",
- data: share,
- };
- } catch (error) {
- console.error("updateShare", error);
- throw new ApiError({
- code: "INTERNAL_SERVER_ERROR",
- message: "Something went wrong, please try again or contact support",
- });
- }
-};
diff --git a/src/server/services/stakeholder/add-stakeholders.ts b/src/server/services/stakeholder/add-stakeholders.ts
deleted file mode 100644
index a1d7ad881..000000000
--- a/src/server/services/stakeholder/add-stakeholders.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import type { TAddStakeholderSchema } from "@/server/api/schema/stakeholder";
-import { Audit } from "@/server/audit";
-import { db } from "@/server/db";
-
-type AddStakeholderOptions = {
- companyId: string;
- requestIp: string;
- userAgent: string;
- user: {
- id: string;
- name: string;
- };
- data: TAddStakeholderSchema;
-};
-
-export const addStakeholders = async (payload: AddStakeholderOptions) => {
- const { companyId, requestIp, userAgent, user, data } = payload;
-
- const stakeholders = await db.$transaction(async (tx) => {
- const inputDataWithCompanyId = data.map((stakeholder) => ({
- ...stakeholder,
- companyId,
- }));
-
- const addedStakeholders = await tx.stakeholder.createManyAndReturn({
- data: inputDataWithCompanyId,
- });
-
- const auditPromises = addedStakeholders.map((stakeholder) =>
- Audit.create(
- {
- action: "stakeholder.added",
- companyId: companyId,
- actor: { type: "user", id: user.id },
- context: {
- requestIp,
- userAgent,
- },
- target: [{ type: "stakeholder", id: stakeholder.id }],
- summary: `${user.name} added the stakholder in the company : ${stakeholder.name}`,
- },
- tx,
- ),
- );
-
- await Promise.all(auditPromises);
- return addedStakeholders;
- });
-
- return stakeholders;
-};
diff --git a/src/server/services/stakeholder/delete-stakeholder.ts b/src/server/services/stakeholder/delete-stakeholder.ts
deleted file mode 100644
index f132d8379..000000000
--- a/src/server/services/stakeholder/delete-stakeholder.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { Audit } from "@/server/audit";
-import { db } from "@/server/db";
-
-type DeleteStakeholderOption = {
- companyId: string;
- stakeholderId: string;
- requestIp: string;
- userAgent: string;
- user: {
- id: string;
- name: string;
- };
-};
-
-export const deleteStakeholder = async (payload: DeleteStakeholderOption) => {
- const { companyId, stakeholderId, requestIp, userAgent, user } = payload;
-
- const { deletedStakeholder } = await db.$transaction(async (tx) => {
- const deletedStakeholder = await tx.stakeholder.delete({
- where: {
- id: stakeholderId,
- companyId,
- },
- });
- await Audit.create(
- {
- action: "stakeholder.deleted",
- companyId: payload.companyId,
- actor: { type: "user", id: payload.user.id },
- context: {
- requestIp,
- userAgent,
- },
- target: [{ type: "stakeholder", id: deletedStakeholder.id }],
- summary: `${user.name} deleted the stakholder from the company : ${deletedStakeholder.name}`,
- },
- tx,
- );
- return { deletedStakeholder };
- });
- return { deletedStakeholder };
-};
diff --git a/src/server/services/stakeholder/get-stakeholder-by-id.ts b/src/server/services/stakeholder/get-stakeholder-by-id.ts
deleted file mode 100644
index 24392e758..000000000
--- a/src/server/services/stakeholder/get-stakeholder-by-id.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { db } from "@/server/db";
-
-type GetStakeholderById = {
- stakeholderId: string;
-};
-
-export const getStakeholderById = async ({
- stakeholderId,
-}: GetStakeholderById) => {
- return await db.stakeholder.findUniqueOrThrow({
- where: {
- id: stakeholderId,
- },
- include: {
- company: {
- select: {
- name: true,
- },
- },
- },
- });
-};
diff --git a/src/server/services/stakeholder/get-stakeholders.ts b/src/server/services/stakeholder/get-stakeholders.ts
deleted file mode 100644
index 69234bf61..000000000
--- a/src/server/services/stakeholder/get-stakeholders.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { ProxyPrismaModel } from "@/server/api/pagination/prisma-proxy";
-import { db } from "@/server/db";
-
-type GetPaginatedStakeholders = {
- companyId: string;
- take: number;
- cursor?: string;
-};
-
-export const getPaginatedStakeholders = async (
- payload: GetPaginatedStakeholders,
-) => {
- const queryCriteria = {
- where: {
- companyId: payload.companyId,
- },
- orderBy: {
- createdAt: "desc",
- },
- };
-
- const { take, cursor: _cursor } = payload;
-
- const paginationData = {
- take,
- cursor: _cursor,
- };
-
- const prismaModel = ProxyPrismaModel(db.stakeholder);
-
- const { data, count, total, cursor } = await prismaModel.findManyPaginated(
- queryCriteria,
- paginationData,
- );
-
- return {
- data,
- meta: {
- count,
- total,
- cursor,
- },
- };
-};
diff --git a/src/server/services/stakeholder/update-stakeholder.ts b/src/server/services/stakeholder/update-stakeholder.ts
deleted file mode 100644
index 1b2dbb898..000000000
--- a/src/server/services/stakeholder/update-stakeholder.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import type { TUpdateStakeholderSchema } from "@/server/api/schema/stakeholder";
-import { Audit } from "@/server/audit";
-import { db } from "@/server/db";
-
-export type UpdateStakeholderPayloadType = {
- stakeholderId: string;
- companyId: string;
- requestIp: string;
- userAgent: string;
- user: {
- id: string;
- name: string;
- };
- data: TUpdateStakeholderSchema;
-};
-
-export const updateStakeholder = async (
- payload: UpdateStakeholderPayloadType,
-) => {
- const { requestIp, userAgent, user } = payload;
- const data = payload.data;
-
- const { updatedStakeholder } = await db.$transaction(async (tx) => {
- const updatedStakeholder = await db.stakeholder.update({
- where: {
- id: payload.stakeholderId,
- companyId: payload.companyId,
- },
- data,
- });
- await Audit.create(
- {
- action: "stakeholder.updated",
- companyId: payload.companyId,
- actor: { type: "user", id: user.id },
- context: {
- requestIp,
- userAgent,
- },
- target: [{ type: "stakeholder", id: updatedStakeholder.id }],
- summary: `${user.name} updated the stakholder details in the company : ${updatedStakeholder.name}`,
- },
- tx,
- );
- return { updatedStakeholder };
- });
- return { updatedStakeholder };
-};
diff --git a/src/trpc/api/root.ts b/src/trpc/api/root.ts
index 998682a07..47c697db3 100644
--- a/src/trpc/api/root.ts
+++ b/src/trpc/api/root.ts
@@ -1,5 +1,5 @@
import { createTRPCRouter } from "@/trpc/api/trpc";
-import { apiKeyRouter } from "../routers/api-key/router";
+import { accessTokenRouter } from "../routers/access-token/router";
import { auditRouter } from "../routers/audit-router/router";
import { authRouter } from "../routers/auth/router";
import { bankAccountsRouter } from "../routers/bank-accounts/router";
@@ -52,7 +52,7 @@ export const appRouter = createTRPCRouter({
security: securityRouter,
billing: billingRouter,
rbac: rbacRouter,
- apiKey: apiKeyRouter,
+ accessToken: accessTokenRouter,
bankAccounts: bankAccountsRouter,
});
diff --git a/src/trpc/routers/api-key/router.ts b/src/trpc/routers/access-token/router.ts
similarity index 52%
rename from src/trpc/routers/api-key/router.ts
rename to src/trpc/routers/access-token/router.ts
index 7549aa20a..adc33320e 100644
--- a/src/trpc/routers/api-key/router.ts
+++ b/src/trpc/routers/access-token/router.ts
@@ -1,24 +1,27 @@
-import { generatePublicId } from "@/common/id";
-import { createApiToken, createSecureHash } from "@/lib/crypto";
+import { createSecureHash, initializeAccessToken } from "@/lib/crypto";
+import { AccessTokenType } from "@/prisma/enums";
import { Audit } from "@/server/audit";
+
import { createTRPCRouter, withAccessControl } from "@/trpc/api/trpc";
import { TRPCError } from "@trpc/server";
import z from "zod";
-export const apiKeyRouter = createTRPCRouter({
+export const accessTokenRouter = createTRPCRouter({
listAll: withAccessControl
- .meta({ policies: { "api-keys": { allow: ["read"] } } })
- .query(async ({ ctx }) => {
+ .input(z.object({ typeEnum: z.nativeEnum(AccessTokenType) }))
+ .query(async ({ ctx, input }) => {
const {
db,
- membership: { companyId, memberId },
+ membership: { userId },
} = ctx;
- const apiKeys = await db.apiKey.findMany({
+ const { typeEnum } = input;
+
+ const accessTokens = await db.accessToken.findMany({
where: {
active: true,
- companyId,
- membershipId: memberId,
+ userId,
+ typeEnum,
},
orderBy: {
@@ -27,95 +30,99 @@ export const apiKeyRouter = createTRPCRouter({
select: {
id: true,
- keyId: true,
+ clientId: true,
createdAt: true,
lastUsed: true,
},
});
return {
- apiKeys,
+ accessTokens,
};
}),
+
create: withAccessControl
- .meta({ policies: { "api-keys": { allow: ["create"] } } })
- .mutation(async ({ ctx }) => {
+ .input(z.object({ typeEnum: z.nativeEnum(AccessTokenType) }))
+ .mutation(async ({ ctx, input }) => {
const {
db,
- membership: { companyId, memberId },
+ membership: { userId, companyId },
userAgent,
requestIp,
session,
} = ctx;
- const token = createApiToken();
- const keyId = generatePublicId();
- const hashedToken = createSecureHash(token);
+ const { typeEnum } = input;
+
+ const { clientId, clientSecret } = initializeAccessToken({
+ prefix: typeEnum,
+ });
+
const user = session.user;
+ const hashedClientSecret = await createSecureHash(clientSecret);
- const key = await db.apiKey.create({
+ const key = await db.accessToken.create({
data: {
- keyId,
- companyId,
- membershipId: memberId,
- hashedToken,
+ userId,
+ typeEnum,
+ clientId,
+ clientSecret: hashedClientSecret,
},
});
await Audit.create(
{
- action: "apiKey.created",
+ action: "accessToken.created",
companyId,
actor: { type: "user", id: user.id },
context: {
userAgent,
requestIp,
},
- target: [{ type: "apiKey", id: key.id }],
- summary: `${user.name} created the apiKey ${key.name}`,
+ target: [{ type: "accessToken", id: key.id }],
+ summary: `${user.name} created an access token - ${clientId}`,
},
db,
);
return {
- token,
- keyId: key.keyId,
+ token: `${clientId}:${clientSecret}`,
+ partialKey: clientId,
createdAt: key.createdAt,
};
}),
delete: withAccessControl
- .input(z.object({ keyId: z.string() }))
- .meta({ policies: { "api-keys": { allow: ["delete"] } } })
+ .input(z.object({ tokenId: z.string() }))
.mutation(async ({ ctx, input }) => {
const {
db,
- membership: { memberId, companyId },
+ membership: { userId, companyId },
session,
requestIp,
userAgent,
} = ctx;
- const { keyId } = input;
+ const { tokenId } = input;
const { user } = session;
try {
- const key = await db.apiKey.delete({
+ const key = await db.accessToken.delete({
where: {
- keyId,
- membershipId: memberId,
- companyId,
+ id: tokenId,
+ userId,
},
});
+
await Audit.create(
{
- action: "apiKey.deleted",
+ action: "accessToken.deleted",
companyId,
actor: { type: "user", id: user.id },
context: {
userAgent,
requestIp,
},
- target: [{ type: "apiKey", id: key.id }],
- summary: `${user.name} deleted the apiKey ${key.name}`,
+ target: [{ type: "accessToken", id: key.id }],
+ summary: `${user.name} deleted an access token - ${key.clientId}`,
},
db,
);
@@ -125,7 +132,7 @@ export const apiKeyRouter = createTRPCRouter({
message: "Key deleted Successfully.",
};
} catch (error) {
- console.error("Error deleting the api key :", error);
+ console.error("Error deleting the access token :", error);
if (error instanceof TRPCError) {
return {
success: false,
diff --git a/src/trpc/routers/bank-accounts/router.ts b/src/trpc/routers/bank-accounts/router.ts
index b0eecf80b..a85ab30c8 100644
--- a/src/trpc/routers/bank-accounts/router.ts
+++ b/src/trpc/routers/bank-accounts/router.ts
@@ -1,5 +1,3 @@
-import { generatePublicId } from "@/common/id";
-import { createApiToken, createSecureHash } from "@/lib/crypto";
import { createTRPCRouter, withAccessControl } from "@/trpc/api/trpc";
import { TRPCError } from "@trpc/server";
import z from "zod";