Skip to content
Merged
Binary file added git_status.txt
Binary file not shown.
94 changes: 94 additions & 0 deletions git_status_after_resolve.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
On branch feat/api-v1-prefix
Your branch is up to date with 'origin/feat/api-v1-prefix'.

All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)

Changes to be committed:
modified: .env.example
modified: eslint.config.mjs
modified: src/app/api/v1/accounts/route.ts
modified: src/app/api/v1/accounts/validate/route.ts
modified: src/app/api/v1/accounts/verify/route.ts
modified: src/app/api/v1/auth/2fa/disable/route.ts
modified: src/app/api/v1/auth/2fa/regenerate-backup-codes/route.ts
modified: src/app/api/v1/auth/2fa/setup/route.ts
modified: src/app/api/v1/auth/2fa/status/route.ts
modified: src/app/api/v1/auth/2fa/verify-setup/route.ts
modified: src/app/api/v1/auth/2fa/verify/route.ts
modified: src/app/api/v1/auth/apple/route.ts
modified: src/app/api/v1/auth/change-password/route.ts
modified: src/app/api/v1/auth/google/route.ts
modified: src/app/api/v1/auth/logout/route.ts
modified: src/app/api/v1/company/profile/route.ts
modified: src/app/api/v1/dashboard/attention/route.ts
modified: src/app/api/v1/dashboard/onboarding/route.ts
modified: src/app/api/v1/dashboard/user-summary/route.ts
modified: src/app/api/v1/finance/transactions/[id]/route.ts
modified: src/app/api/v1/finance/transactions/route.ts
modified: src/app/api/v1/finance/wallet/route.ts
modified: src/app/api/v1/invitations/accept/route.ts
modified: src/app/api/v1/invitations/delete/route.ts
modified: src/app/api/v1/invitations/resend/route.ts
modified: src/app/api/v1/invitations/route.ts
modified: src/app/api/v1/kyb/status/route.ts
modified: src/app/api/v1/kyb/submit/route.ts
modified: src/app/api/v1/organizations/logo-upload-url/route.ts
modified: src/app/api/v1/organizations/logo/route.ts
modified: src/app/api/v1/team/employees/[id]/route.ts
modified: src/app/api/v1/team/employees/bank-verification/route.ts
modified: src/app/api/v1/team/employees/route.ts
modified: src/app/api/v1/team/expenses/[id]/status/route.ts
modified: src/app/api/v1/team/milestones/route.ts
modified: src/app/api/v1/team/time-off/[id]/status/route.ts
modified: src/app/api/v1/team/time-off/route.ts
modified: src/app/api/v1/team/timesheets/[id]/status/route.ts
modified: src/app/api/v1/team/timesheets/route.ts
modified: src/middleware.ts
modified: src/server/health/route.ts
modified: src/server/services/apple-oauth.service.spec.ts
modified: src/server/services/auth.service.spec.ts
modified: src/server/services/auth.service.ts
modified: src/server/services/bank-account.service.ts
modified: src/server/services/bank-verification.service.ts
modified: src/server/services/blockchain.service.spec.ts
modified: src/server/services/blockchain.service.ts
modified: src/server/services/email-verification.service.spec.ts
modified: src/server/services/fiat/flutterwave.provider.ts
new file: src/server/services/finance-wallet.service.spec.ts
modified: src/server/services/google-oauth.service.spec.ts
modified: src/server/services/google-oauth.service.ts
modified: src/server/services/invitation.service.spec.ts
modified: src/server/services/invitation.service.ts
modified: src/server/services/jwt-verification.service.spec.ts
modified: src/server/services/jwt.service.spec.ts
modified: src/server/services/jwt.service.ts
modified: src/server/services/logout.service.spec.ts
modified: src/server/services/milestone.service.ts
modified: src/server/services/oauth-user-provisioning.service.spec.ts
modified: src/server/services/otp-resend.service.spec.ts
modified: src/server/services/rate-limit.service.ts
modified: src/server/services/session.service.spec.ts
modified: src/server/services/team.service.spec.ts
modified: src/server/services/team.service.ts
modified: src/server/services/token-refresh.service.spec.ts
modified: src/server/services/two-factor.service.ts
modified: src/server/services/user.service.spec.ts
modified: src/server/services/webhook.service.ts
modified: src/server/swagger-config.ts
modified: src/server/utils/api-response.ts
modified: src/server/utils/auth-errors.ts
modified: src/server/utils/errors.ts
modified: src/server/utils/errors/index.ts
modified: src/server/utils/logout-errors.ts
new file: src/server/utils/problem-details.ts
new file: src/server/utils/role.spec.ts
new file: src/server/utils/with-error-handler.ts

Untracked files:
(use "git add <file>..." to include in what will be committed)
git_status.txt
git_status_after_resolve.txt
git_status_utf8.txt
tsc_output.txt

97 changes: 97 additions & 0 deletions git_status_utf8.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
On branch feat/api-v1-prefix
Your branch is up to date with 'origin/feat/api-v1-prefix'.

You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)

Changes to be committed:
modified: .env.example
modified: eslint.config.mjs
modified: src/app/api/v1/accounts/route.ts
modified: src/app/api/v1/accounts/validate/route.ts
modified: src/app/api/v1/accounts/verify/route.ts
modified: src/app/api/v1/auth/2fa/disable/route.ts
modified: src/app/api/v1/auth/2fa/regenerate-backup-codes/route.ts
modified: src/app/api/v1/auth/2fa/setup/route.ts
modified: src/app/api/v1/auth/2fa/status/route.ts
modified: src/app/api/v1/auth/2fa/verify-setup/route.ts
modified: src/app/api/v1/auth/2fa/verify/route.ts
modified: src/app/api/v1/auth/apple/route.ts
modified: src/app/api/v1/auth/change-password/route.ts
modified: src/app/api/v1/auth/google/route.ts
modified: src/app/api/v1/company/profile/route.ts
modified: src/app/api/v1/dashboard/attention/route.ts
modified: src/app/api/v1/dashboard/onboarding/route.ts
modified: src/app/api/v1/dashboard/user-summary/route.ts
modified: src/app/api/v1/finance/transactions/[id]/route.ts
modified: src/app/api/v1/finance/transactions/route.ts
modified: src/app/api/v1/finance/wallet/route.ts
modified: src/app/api/v1/invitations/accept/route.ts
modified: src/app/api/v1/invitations/delete/route.ts
modified: src/app/api/v1/invitations/resend/route.ts
modified: src/app/api/v1/invitations/route.ts
modified: src/app/api/v1/kyb/status/route.ts
modified: src/app/api/v1/kyb/submit/route.ts
modified: src/app/api/v1/organizations/logo-upload-url/route.ts
modified: src/app/api/v1/organizations/logo/route.ts
modified: src/app/api/v1/team/employees/[id]/route.ts
modified: src/app/api/v1/team/employees/bank-verification/route.ts
modified: src/app/api/v1/team/employees/route.ts
modified: src/app/api/v1/team/expenses/[id]/status/route.ts
modified: src/app/api/v1/team/milestones/route.ts
modified: src/app/api/v1/team/time-off/[id]/status/route.ts
modified: src/app/api/v1/team/time-off/route.ts
modified: src/app/api/v1/team/timesheets/[id]/status/route.ts
modified: src/app/api/v1/team/timesheets/route.ts
modified: src/middleware.ts
modified: src/server/services/apple-oauth.service.spec.ts
modified: src/server/services/auth.service.spec.ts
modified: src/server/services/auth.service.ts
modified: src/server/services/bank-verification.service.ts
modified: src/server/services/blockchain.service.spec.ts
modified: src/server/services/blockchain.service.ts
modified: src/server/services/email-verification.service.spec.ts
modified: src/server/services/fiat/flutterwave.provider.ts
new file: src/server/services/finance-wallet.service.spec.ts
modified: src/server/services/google-oauth.service.spec.ts
modified: src/server/services/google-oauth.service.ts
modified: src/server/services/invitation.service.spec.ts
modified: src/server/services/jwt-verification.service.spec.ts
modified: src/server/services/jwt.service.spec.ts
modified: src/server/services/jwt.service.ts
modified: src/server/services/logout.service.spec.ts
modified: src/server/services/milestone.service.ts
modified: src/server/services/oauth-user-provisioning.service.spec.ts
modified: src/server/services/otp-resend.service.spec.ts
modified: src/server/services/rate-limit.service.ts
modified: src/server/services/session.service.spec.ts
modified: src/server/services/team.service.spec.ts
modified: src/server/services/team.service.ts
modified: src/server/services/token-refresh.service.spec.ts
modified: src/server/services/two-factor.service.ts
modified: src/server/services/user.service.spec.ts
modified: src/server/utils/api-response.ts
modified: src/server/utils/auth-errors.ts
modified: src/server/utils/errors.ts
modified: src/server/utils/errors/index.ts
modified: src/server/utils/logout-errors.ts
new file: src/server/utils/problem-details.ts
new file: src/server/utils/role.spec.ts
new file: src/server/utils/with-error-handler.ts

Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: src/app/api/v1/auth/logout/route.ts
both modified: src/server/health/route.ts
both modified: src/server/services/bank-account.service.ts
both modified: src/server/services/invitation.service.ts
both modified: src/server/services/webhook.service.ts
both modified: src/server/swagger-config.ts

Untracked files:
(use "git add <file>..." to include in what will be committed)
git_status.txt
git_status_utf8.txt
tsc_output.txt

Binary file added git_status_v2.txt
Binary file not shown.
29 changes: 29 additions & 0 deletions lint_output_utf8.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@

> vestroll-frontend@0.1.0 lint C:\Users\USER\Desktop\drips\vestroll
> eslint


C:\Users\USER\Desktop\drips\vestroll\src\server\services\blockchain.service.ts
544:45 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any
623:28 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any
641:42 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any
645:37 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any

C:\Users\USER\Desktop\drips\vestroll\src\server\services\fiat\monnify.provider.test.ts
136:60 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any

C:\Users\USER\Desktop\drips\vestroll\src\server\services\rate-limit.service.ts
106:40 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any
108:44 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any

C:\Users\USER\Desktop\drips\vestroll\src\server\services\user.service.ts
61:24 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any
61:29 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any
61:34 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any

C:\Users\USER\Desktop\drips\vestroll\src\server\services\webhook.service.ts
4:39 error Unexpected any. Specify a different type @typescript-eslint/no-explicit-any

Γ£û 11 problems (11 errors, 0 warnings)

ΓÇëELIFECYCLEΓÇë Command failed with exit code 1.
Binary file added lint_results_v2.txt
Binary file not shown.
8 changes: 8 additions & 0 deletions next.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@ const nextConfig: NextConfig = {
},
],
},
async rewrites() {
return [
{
source: "/api/:path((?!v1/).*)",
destination: "/api/v1/:path",
},
];
},
};

export default nextConfig;
9 changes: 5 additions & 4 deletions src/app/(dashboard)/settings/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,9 @@ export default function Page() {

/**
* 3-step logo upload:
* 1. GET /api/organizations/logo-upload-url → { signedUrl, key }
* 1. GET /api/v1/organizations/logo-upload-url → { signedUrl, key }
* 2. PUT blob → S3 via signedUrl
* 3. PATCH /api/organizations/logo { key } → { logoUrl }
* 3. PATCH /api/v1/organizations/logo { key } → { logoUrl }
*
* Optimistic update: show the local blob URL immediately while upload runs.
*/
Expand Down Expand Up @@ -172,7 +172,7 @@ export default function Page() {
try {
// Step 1 — get presigned S3 upload URL
const urlRes = await fetch(
`/api/organizations/logo-upload-url?filename=${encodeURIComponent(file.name)}&contentType=${encodeURIComponent(file.type)}`,
`/api/v1/organizations/logo-upload-url?filename=${encodeURIComponent(file.name)}&contentType=${encodeURIComponent(file.type)}`,
{ headers: authHeaders },
);
if (!urlRes.ok) throw new Error("Failed to get upload URL");
Expand All @@ -188,7 +188,7 @@ export default function Page() {
if (!s3Res.ok) throw new Error("Failed to upload logo to storage");

// Step 3 — save the S3 key to the database
const patchRes = await fetch("/api/organizations/logo", {
const patchRes = await fetch("/api/v1/organizations/logo", {
method: "PATCH",
headers: { "Content-Type": "application/json", ...authHeaders },
body: JSON.stringify({ key }),
Expand Down Expand Up @@ -478,3 +478,4 @@ export default function Page() {
);
}


9 changes: 5 additions & 4 deletions src/app/(dashboard)/team/invitations/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export default function InvitationsPage() {
setError(null);

try {
const response = await fetch("/api/invitations");
const response = await fetch("/api/v1/invitations");

if (!response.ok) {
const errorData = await response.json();
Expand All @@ -61,7 +61,7 @@ export default function InvitationsPage() {
setError(null);

try {
const response = await fetch("/api/invitations", {
const response = await fetch("/api/v1/invitations", {
method: "POST",
headers: {
"Content-Type": "application/json",
Expand All @@ -86,7 +86,7 @@ export default function InvitationsPage() {
setError(null);

try {
const response = await fetch("/api/invitations/resend", {
const response = await fetch("/api/v1/invitations/resend", {
method: "POST",
headers: {
"Content-Type": "application/json",
Expand All @@ -111,7 +111,7 @@ export default function InvitationsPage() {
setError(null);

try {
const response = await fetch("/api/invitations/delete", {
const response = await fetch("/api/v1/invitations/delete", {
method: "DELETE",
headers: {
"Content-Type": "application/json",
Expand Down Expand Up @@ -150,3 +150,4 @@ export default function InvitationsPage() {
</div>
);
}

5 changes: 4 additions & 1 deletion src/app/api-docs/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ const SwaggerUI = dynamic<SwaggerUIProps>(() => import("swagger-ui-react"), {
export default function ApiDocsPage() {
return (
<div className="bg-white min-h-screen">
<SwaggerUI url="/api/docs" />
<SwaggerUI url="/api/v1/docs" />
</div>
);
}



File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ vi.mock("@/server/services/two-factor.service");
vi.mock("@/server/utils/auth");
vi.mock("@/server/services/email.service");

describe("POST /api/auth/2fa/disable", () => {
describe("POST /api/v1/auth/2fa/disable", () => {
beforeEach(() => {
vi.clearAllMocks();
});
Expand Down Expand Up @@ -137,3 +137,6 @@ describe("POST /api/auth/2fa/disable", () => {
expect(data.message).toBe("Invalid password");
});
});



Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ vi.mock("@/server/services/two-factor.service");
vi.mock("@/server/utils/auth");
vi.mock("@/server/services/email.service");

describe("POST /api/auth/2fa/regenerate-backup-codes", () => {
describe("POST /api/v1/auth/2fa/regenerate-backup-codes", () => {
beforeEach(() => {
vi.clearAllMocks();
});
Expand Down Expand Up @@ -80,3 +80,6 @@ describe("POST /api/auth/2fa/regenerate-backup-codes", () => {
expect(response.status).toBe(401);
});
});



Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
vi.mock("@/server/services/two-factor.service");
vi.mock("@/server/utils/auth");

describe("POST /api/auth/2fa/setup", () => {
describe("POST /api/v1/auth/2fa/setup", () => {
beforeEach(() => {
vi.clearAllMocks();
});
Expand Down Expand Up @@ -124,3 +124,6 @@ describe("POST /api/auth/2fa/setup", () => {
});
});




Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { UnauthorizedError } from "@/server/utils/errors";
vi.mock("@/server/services/two-factor.service");
vi.mock("@/server/utils/auth");

describe("GET /api/auth/2fa/status", () => {
describe("GET /api/v1/auth/2fa/status", () => {
beforeEach(() => {
vi.clearAllMocks();
});
Expand Down Expand Up @@ -48,3 +48,6 @@ describe("GET /api/auth/2fa/status", () => {
});
});




Loading
Loading