From a88525feb0dcf7d46bebcb87be4125569bb5da3b Mon Sep 17 00:00:00 2001 From: MaheshtheDev <38828053+MaheshtheDev@users.noreply.github.com> Date: Tue, 11 Nov 2025 19:10:13 +0000 Subject: fix: org switch issue on consumer when dev org exists (#577) --- apps/web/middleware.ts | 58 +++++++++++++++++++++++++++++++++++++++++++ apps/web/package.json | 4 +-- apps/web/proxy.ts | 58 ------------------------------------------- bun.lock | 12 ++++++--- packages/lib/auth-context.tsx | 19 +++++++------- 5 files changed, 79 insertions(+), 72 deletions(-) create mode 100644 apps/web/middleware.ts delete mode 100644 apps/web/proxy.ts diff --git a/apps/web/middleware.ts b/apps/web/middleware.ts new file mode 100644 index 00000000..bbb63c42 --- /dev/null +++ b/apps/web/middleware.ts @@ -0,0 +1,58 @@ +import { getSessionCookie } from "better-auth/cookies" +import { NextResponse } from "next/server" + +export default async function proxy(request: Request) { + console.debug("[PROXY] === PROXY START ===") + const url = new URL(request.url) + console.debug("[PROXY] Path:", url.pathname) + console.debug("[PROXY] Method:", request.method) + + const sessionCookie = getSessionCookie(request) + console.debug("[PROXY] Session cookie exists:", !!sessionCookie) + + // Always allow access to login and waitlist pages + const publicPaths = ["/login"] + if (publicPaths.includes(url.pathname)) { + console.debug("[PROXY] Public path, allowing access") + return NextResponse.next() + } + + // If no session cookie and not on a public path, redirect to login + if (!sessionCookie) { + console.debug( + "[PROXY] No session cookie and not on public path, redirecting to /login", + ) + const url = new URL("/login", request.url) + url.searchParams.set("redirect", request.url) + return NextResponse.redirect(url) + } + + // TEMPORARILY DISABLED: Waitlist check + // if (url.pathname !== "/waitlist") { + // const response = await $fetch("@get/waitlist/status", { + // headers: { + // Authorization: `Bearer ${sessionCookie}`, + // }, + + // console.debug("[PROXY] Waitlist status:", response.data); + // if (response.data && !response.data.accessGranted) { + // return NextResponse.redirect(new URL("/waitlist", request.url)); + // } + // } + + console.debug("[PROXY] Passing through to next handler") + console.debug("[PROXY] === PROXY END ===") + const response = NextResponse.next() + response.cookies.set({ + name: "last-site-visited", + value: "https://app.supermemory.ai", + domain: "supermemory.ai", + }) + return response +} + +export const config = { + matcher: [ + "/((?!_next/static|_next/image|images|icon.png|monitoring|opengraph-image.png|ingest|api|login|api/emails).*)", + ], +} diff --git a/apps/web/package.json b/apps/web/package.json index 46bfa8fb..24f9f88f 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -22,7 +22,7 @@ "@dnd-kit/modifiers": "^9.0.0", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", - "@opennextjs/cloudflare": "^1.6.1", + "@opennextjs/cloudflare": "^1.12.0", "@radix-ui/react-accordion": "^1.2.11", "@radix-ui/react-alert-dialog": "^1.1.14", "@radix-ui/react-avatar": "^1.1.10", @@ -59,7 +59,7 @@ "embla-carousel-autoplay": "^8.6.0", "embla-carousel-react": "^8.6.0", "framer-motion": "^12.23.12", - "idb-keyval": "^6.2.2", + "idb-keyval": "^6.2.2", "is-hotkey": "^0.2.0", "lucide-react": "^0.525.0", "masonic": "^4.1.0", diff --git a/apps/web/proxy.ts b/apps/web/proxy.ts deleted file mode 100644 index 375b0c73..00000000 --- a/apps/web/proxy.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { getSessionCookie } from "better-auth/cookies" -import { NextResponse } from "next/server" - -export default async function proxy(request: Request) { - console.debug("[PROXY] === PROXY START ===") - const url = new URL(request.url) - console.debug("[PROXY] Path:", url.pathname) - console.debug("[PROXY] Method:", request.method) - - const sessionCookie = getSessionCookie(request) - console.debug("[PROXY] Session cookie exists:", !!sessionCookie) - - // Always allow access to login and waitlist pages - const publicPaths = ["/login"] - if (publicPaths.includes(url.pathname)) { - console.debug("[PROXY] Public path, allowing access") - return NextResponse.next() - } - - // If no session cookie and not on a public path, redirect to login - if (!sessionCookie) { - console.debug( - "[PROXY] No session cookie and not on public path, redirecting to /login", - ) - const url = new URL("/login", request.url) - url.searchParams.set("redirect", request.url) - return NextResponse.redirect(url) - } - - // TEMPORARILY DISABLED: Waitlist check - // if (url.pathname !== "/waitlist") { - // const response = await $fetch("@get/waitlist/status", { - // headers: { - // Authorization: `Bearer ${sessionCookie}`, - // }, - // }); - // console.debug("[PROXY] Waitlist status:", response.data); - // if (response.data && !response.data.accessGranted) { - // return NextResponse.redirect(new URL("/waitlist", request.url)); - // } - // } - - console.debug("[PROXY] Passing through to next handler") - console.debug("[PROXY] === PROXY END ===") - const response = NextResponse.next() - response.cookies.set({ - name: "last-site-visited", - value: "https://app.supermemory.ai", - domain: "supermemory.ai", - }) - return response -} - -export const config = { - matcher: [ - "/((?!_next/static|_next/image|images|icon.png|monitoring|opengraph-image.png|ingest|api|login|api/emails).*)", - ], -} diff --git a/bun.lock b/bun.lock index 2c82cc12..c9a8ca1b 100644 --- a/bun.lock +++ b/bun.lock @@ -103,7 +103,7 @@ "@dnd-kit/modifiers": "^9.0.0", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", - "@opennextjs/cloudflare": "^1.6.1", + "@opennextjs/cloudflare": "^1.12.0", "@radix-ui/react-accordion": "^1.2.11", "@radix-ui/react-alert-dialog": "^1.1.14", "@radix-ui/react-avatar": "^1.1.10", @@ -977,9 +977,9 @@ "@openapi-contrib/openapi-schema-to-json-schema": ["@openapi-contrib/openapi-schema-to-json-schema@3.2.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" } }, "sha512-Gj6C0JwCr8arj0sYuslWXUBSP/KnUlEGnPW4qxlXvAl543oaNQgMgIgkQUA6vs5BCCvwTEiL8m/wdWzfl4UvSw=="], - "@opennextjs/aws": ["@opennextjs/aws@3.8.0", "", { "dependencies": { "@ast-grep/napi": "^0.35.0", "@aws-sdk/client-cloudfront": "3.398.0", "@aws-sdk/client-dynamodb": "^3.398.0", "@aws-sdk/client-lambda": "^3.398.0", "@aws-sdk/client-s3": "^3.398.0", "@aws-sdk/client-sqs": "^3.398.0", "@node-minify/core": "^8.0.6", "@node-minify/terser": "^8.0.6", "@tsconfig/node18": "^1.0.1", "aws4fetch": "^1.0.18", "chalk": "^5.3.0", "cookie": "^1.0.2", "esbuild": "0.25.4", "express": "5.0.1", "path-to-regexp": "^6.3.0", "urlpattern-polyfill": "^10.0.0", "yaml": "^2.7.0" }, "bin": { "open-next": "dist/index.js" } }, "sha512-MIIAPuWNedAB59qMboGgIj1o1iCpIO4q1MkqfJG8LOdLeFfni6X+HSHKoEUnt9p3alsnI5r6VwpZBDlxvqWoCg=="], + "@opennextjs/aws": ["@opennextjs/aws@3.8.5", "", { "dependencies": { "@ast-grep/napi": "^0.35.0", "@aws-sdk/client-cloudfront": "3.398.0", "@aws-sdk/client-dynamodb": "^3.398.0", "@aws-sdk/client-lambda": "^3.398.0", "@aws-sdk/client-s3": "^3.398.0", "@aws-sdk/client-sqs": "^3.398.0", "@node-minify/core": "^8.0.6", "@node-minify/terser": "^8.0.6", "@tsconfig/node18": "^1.0.1", "aws4fetch": "^1.0.18", "chalk": "^5.3.0", "cookie": "^1.0.2", "esbuild": "0.25.4", "express": "5.0.1", "path-to-regexp": "^6.3.0", "urlpattern-polyfill": "^10.0.0", "yaml": "^2.7.0" }, "bin": { "open-next": "dist/index.js" } }, "sha512-elpMb0fJZc0a1VtymedFa7P1lYcyOmt+Pwqyacpq2C/SvbETIeBlW/Xle/vY95ICtccKUxITI8MtonrCo2+2/Q=="], - "@opennextjs/cloudflare": ["@opennextjs/cloudflare@1.9.1", "", { "dependencies": { "@dotenvx/dotenvx": "1.31.0", "@opennextjs/aws": "3.8.0", "cloudflare": "^4.4.1", "enquirer": "^2.4.1", "glob": "^11.0.0", "ts-tqdm": "^0.8.6", "yargs": "^18.0.0" }, "peerDependencies": { "wrangler": "^4.38.0" }, "bin": { "opennextjs-cloudflare": "dist/cli/index.js" } }, "sha512-MB5kL3g37fwrluTAfsCDDgRCknU8XD+4RJliXxHcZ144pwcWO+ngjcvzgTWQt4yc7d+Qi7ztC7H8UbQQD3rScg=="], + "@opennextjs/cloudflare": ["@opennextjs/cloudflare@1.12.0", "", { "dependencies": { "@dotenvx/dotenvx": "1.31.0", "@opennextjs/aws": "3.8.5", "@types/rclone.js": "^0.6.3", "cloudflare": "^4.4.1", "enquirer": "^2.4.1", "glob": "^11.0.0", "rclone.js": "^0.6.6", "ts-tqdm": "^0.8.6", "yargs": "^18.0.0" }, "peerDependencies": { "wrangler": "^4.38.0" }, "bin": { "opennextjs-cloudflare": "dist/cli/index.js" } }, "sha512-vTw8N9tEISI2smkB0mvVVR1DOimE942DKOxzzwaQ0RrWgLSF97qf+4rnk8wwss2RAnF41pPDHzPO1AupnJmm3Q=="], "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], @@ -1787,6 +1787,8 @@ "@types/pg-pool": ["@types/pg-pool@2.0.6", "", { "dependencies": { "@types/pg": "*" } }, "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ=="], + "@types/rclone.js": ["@types/rclone.js@0.6.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-BssKAAVRY//fxGKso8SatyOwiD7X0toDofNnVxZlIXmN7UHrn2UBTxldNAjgUvWA91qJyeEPfKmeJpZVhLugXg=="], + "@types/react": ["@types/react@19.2.2", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA=="], "@types/react-dom": ["@types/react-dom@19.2.2", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw=="], @@ -3397,6 +3399,8 @@ "motion-utils": ["motion-utils@12.23.6", "", {}, "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ=="], + "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], "multimatch": ["multimatch@6.0.0", "", { "dependencies": { "@types/minimatch": "^3.0.5", "array-differ": "^4.0.0", "array-union": "^3.0.1", "minimatch": "^3.0.4" } }, "sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ=="], @@ -3731,6 +3735,8 @@ "rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], + "rclone.js": ["rclone.js@0.6.6", "", { "dependencies": { "adm-zip": "^0.5.9", "mri": "^1.2.0" }, "os": [ "!aix", "!android", ], "cpu": [ "!ppc", "!ia32", "!s390", "!ppc64", "!s390x", ], "bin": { "rclone": "bin/rclone.js" } }, "sha512-Dxh34cab/fNjFq5SSm0fYLNkGzG2cQSBy782UW9WwxJCEiVO4cGXkvaXcNlgv817dK8K8PuQ+NHUqSAMMhWujQ=="], + "react": ["react@19.2.0", "", {}, "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ=="], "react-dom": ["react-dom@19.2.0", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.0" } }, "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ=="], diff --git a/packages/lib/auth-context.tsx b/packages/lib/auth-context.tsx index db24ec45..324b213e 100644 --- a/packages/lib/auth-context.tsx +++ b/packages/lib/auth-context.tsx @@ -41,15 +41,16 @@ export function AuthProvider({ children }: { children: ReactNode }) { authClient.organization .getFullOrganization() .then((org) => { - // TODO: Uncomment this when we have a way to handle consumer organizations better way - //if (org.metadata?.isConsumer === true) { - setOrg(org) - //} else { - // const consumerOrg = orgs?.find((o) => o.metadata?.isConsumer === true) - // if (consumerOrg) { - // setActiveOrg(consumerOrg.slug) - // } - //} + if (org.metadata?.isConsumer === true) { + console.log("Consumer organization:", org) + setOrg(org) + } else { + console.log("ALl orgs:", orgs) + const consumerOrg = orgs?.find((o) => o.metadata?.isConsumer === true) + if (consumerOrg) { + setActiveOrg(consumerOrg.slug) + } + } }) .catch((error) => { // Silently handle organization fetch failures to prevent unhandled rejections -- cgit v1.2.3