@meindesk/nextjs 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,112 @@
1
+ import { NextResponse } from 'next/server';
2
+ import { SESSION_COOKIE_NAME } from '@meindesk/sdk';
3
+
4
+ // src/middleware.ts
5
+ function normalizePath(pathname) {
6
+ if (pathname.length > 1 && pathname.endsWith("/")) {
7
+ return pathname.slice(0, -1);
8
+ }
9
+ return pathname || "/";
10
+ }
11
+ function matchRoute(pathname, pattern) {
12
+ const path = normalizePath(pathname);
13
+ const route = normalizePath(pattern.replace("(.*)", "*"));
14
+ if (route === "/*" || route === "*") return true;
15
+ if (route.endsWith("/*")) {
16
+ const base = route.slice(0, -2);
17
+ return path === base || path.startsWith(`${base}/`);
18
+ }
19
+ if (route.endsWith("*")) {
20
+ const prefix = route.slice(0, -1);
21
+ return path === prefix || path.startsWith(prefix);
22
+ }
23
+ return path === route;
24
+ }
25
+ function isPublicPath(pathname, publicRoutes) {
26
+ return publicRoutes.some((route) => matchRoute(pathname, route));
27
+ }
28
+ async function validateSessionToken(token, options) {
29
+ try {
30
+ const headers = {
31
+ Accept: "application/json",
32
+ Authorization: `Bearer ${token}`
33
+ };
34
+ if (options.publishableKey) {
35
+ headers["x-meindesk-publishable-key"] = options.publishableKey;
36
+ }
37
+ if (options.secretKey) {
38
+ headers["x-meindesk-secret-key"] = options.secretKey;
39
+ }
40
+ const response = await fetch(`${options.apiUrl}/v1/sdk/session`, {
41
+ method: "GET",
42
+ headers,
43
+ cache: "no-store"
44
+ });
45
+ if (!response.ok) return false;
46
+ const body = await response.json();
47
+ return Boolean(body.success && body.data?.session);
48
+ } catch {
49
+ return false;
50
+ }
51
+ }
52
+ function authMiddleware(options = {}) {
53
+ const {
54
+ publicRoutes = [
55
+ "/",
56
+ "/sign-in",
57
+ "/sign-in/(.*)",
58
+ "/sign-up",
59
+ "/sign-up/(.*)",
60
+ "/forgot-password",
61
+ "/reset-password",
62
+ "/magic-link",
63
+ "/verify-email",
64
+ "/sso-callback",
65
+ "/api/(.*)",
66
+ "/_next/(.*)",
67
+ "/favicon.ico",
68
+ "/robots.txt"
69
+ ],
70
+ signInUrl = "/sign-in",
71
+ apiUrl = process.env.NEXT_PUBLIC_API_URL || "http://localhost:4000"
72
+ } = options;
73
+ return async function middleware(request) {
74
+ const { pathname, searchParams } = request.nextUrl;
75
+ const oauthCode = searchParams.get("code");
76
+ const oauthProvider = searchParams.get("provider");
77
+ if (oauthCode && oauthProvider) {
78
+ return NextResponse.next();
79
+ }
80
+ if (isPublicPath(pathname, publicRoutes)) {
81
+ return NextResponse.next();
82
+ }
83
+ const token = request.cookies.get(SESSION_COOKIE_NAME)?.value;
84
+ if (!token) {
85
+ const redirectUrl = new URL(signInUrl, request.url);
86
+ redirectUrl.searchParams.set("redirect_url", pathname);
87
+ return NextResponse.redirect(redirectUrl);
88
+ }
89
+ const secretKey = process.env.MEINDESK_SECRET_KEY;
90
+ if (secretKey) {
91
+ const publishableKey = process.env.NEXT_PUBLIC_MEINDESK_PUBLISHABLE_KEY;
92
+ const valid = await validateSessionToken(token, {
93
+ apiUrl: apiUrl.replace(/\/$/, ""),
94
+ publishableKey,
95
+ secretKey
96
+ });
97
+ if (!valid) {
98
+ const redirectUrl = new URL(signInUrl, request.url);
99
+ redirectUrl.searchParams.set("redirect_url", pathname);
100
+ const response = NextResponse.redirect(redirectUrl);
101
+ response.cookies.delete(SESSION_COOKIE_NAME);
102
+ return response;
103
+ }
104
+ }
105
+ return NextResponse.next();
106
+ };
107
+ }
108
+ var middleware_default = authMiddleware;
109
+
110
+ export { authMiddleware, middleware_default };
111
+ //# sourceMappingURL=chunk-HEL2R4AQ.js.map
112
+ //# sourceMappingURL=chunk-HEL2R4AQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/middleware.ts"],"names":[],"mappings":"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","file":"chunk-HEL2R4AQ.js","sourcesContent":["import { NextResponse, type NextRequest } from \"next/server\";\nimport { SESSION_COOKIE_NAME } from \"@meindesk/sdk\";\n\nexport interface AuthMiddlewareOptions {\n /** Paths that do not require an authenticated session. Supports trailing `*` wildcards. */\n publicRoutes?: string[];\n /** Where to send unauthenticated users. Defaults to `/sign-in`. */\n signInUrl?: string;\n /** Optional API base URL for session validation when a secret key is present. */\n apiUrl?: string;\n}\n\nfunction normalizePath(pathname: string): string {\n if (pathname.length > 1 && pathname.endsWith(\"/\")) {\n return pathname.slice(0, -1);\n }\n return pathname || \"/\";\n}\n\nfunction matchRoute(pathname: string, pattern: string): boolean {\n const path = normalizePath(pathname);\n // Support both `/api/*` and `/api/(.*)` style patterns\n const route = normalizePath(pattern.replace(\"(.*)\", \"*\"));\n\n if (route === \"/*\" || route === \"*\") return true;\n\n if (route.endsWith(\"/*\")) {\n const base = route.slice(0, -2);\n return path === base || path.startsWith(`${base}/`);\n }\n\n if (route.endsWith(\"*\")) {\n const prefix = route.slice(0, -1);\n return path === prefix || path.startsWith(prefix);\n }\n\n return path === route;\n}\n\nfunction isPublicPath(pathname: string, publicRoutes: string[]): boolean {\n return publicRoutes.some((route) => matchRoute(pathname, route));\n}\n\nasync function validateSessionToken(\n token: string,\n options: { apiUrl: string; publishableKey?: string; secretKey?: string },\n): Promise<boolean> {\n try {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n };\n\n if (options.publishableKey) {\n headers[\"x-meindesk-publishable-key\"] = options.publishableKey;\n }\n if (options.secretKey) {\n headers[\"x-meindesk-secret-key\"] = options.secretKey;\n }\n\n const response = await fetch(`${options.apiUrl}/v1/sdk/session`, {\n method: \"GET\",\n headers,\n cache: \"no-store\",\n });\n\n if (!response.ok) return false;\n const body = (await response.json()) as {\n success?: boolean;\n data?: { session?: unknown | null };\n };\n return Boolean(body.success && body.data?.session);\n } catch {\n return false;\n }\n}\n\n/**\n * Next.js middleware helper.\n *\n * Zero-config usage:\n * ```ts\n * export default authMiddleware();\n * ```\n *\n * When `MEINDESK_SECRET_KEY` is set, optionally validates the session via the API.\n * Requests with OAuth `code` + `provider` query params always pass through so\n * AuthProvider can exchange the one-time code before a session cookie exists.\n */\nexport function authMiddleware(options: AuthMiddlewareOptions = {}) {\n const {\n publicRoutes = [\n \"/\",\n \"/sign-in\",\n \"/sign-in/(.*)\",\n \"/sign-up\",\n \"/sign-up/(.*)\",\n \"/forgot-password\",\n \"/reset-password\",\n \"/magic-link\",\n \"/verify-email\",\n \"/sso-callback\",\n \"/api/(.*)\",\n \"/_next/(.*)\",\n \"/favicon.ico\",\n \"/robots.txt\",\n ],\n signInUrl = \"/sign-in\",\n apiUrl = process.env.NEXT_PUBLIC_API_URL || \"http://localhost:4000\",\n } = options;\n\n return async function middleware(request: NextRequest) {\n const { pathname, searchParams } = request.nextUrl;\n\n // OAuth return: one-time code must reach the client before a session cookie exists.\n // Do not bounce to sign-in or the code is lost.\n const oauthCode = searchParams.get(\"code\");\n const oauthProvider = searchParams.get(\"provider\");\n if (oauthCode && oauthProvider) {\n return NextResponse.next();\n }\n\n if (isPublicPath(pathname, publicRoutes)) {\n return NextResponse.next();\n }\n\n const token = request.cookies.get(SESSION_COOKIE_NAME)?.value;\n\n if (!token) {\n const redirectUrl = new URL(signInUrl, request.url);\n redirectUrl.searchParams.set(\"redirect_url\", pathname);\n return NextResponse.redirect(redirectUrl);\n }\n\n const secretKey = process.env.MEINDESK_SECRET_KEY;\n if (secretKey) {\n const publishableKey = process.env.NEXT_PUBLIC_MEINDESK_PUBLISHABLE_KEY;\n const valid = await validateSessionToken(token, {\n apiUrl: apiUrl.replace(/\\/$/, \"\"),\n publishableKey,\n secretKey,\n });\n\n if (!valid) {\n const redirectUrl = new URL(signInUrl, request.url);\n redirectUrl.searchParams.set(\"redirect_url\", pathname);\n const response = NextResponse.redirect(redirectUrl);\n response.cookies.delete(SESSION_COOKIE_NAME);\n return response;\n }\n }\n\n return NextResponse.next();\n };\n}\n\nexport default authMiddleware;\n"]}
@@ -0,0 +1,20 @@
1
+ import { MeindeskClient } from '@meindesk/sdk';
2
+
3
+ // src/server.ts
4
+ function createMeindeskClient(options = {}) {
5
+ const publishableKey = options.publishableKey ?? process.env.NEXT_PUBLIC_MEINDESK_PUBLISHABLE_KEY;
6
+ if (!publishableKey) {
7
+ throw new Error(
8
+ "createMeindeskClient requires NEXT_PUBLIC_MEINDESK_PUBLISHABLE_KEY or an explicit publishableKey"
9
+ );
10
+ }
11
+ return new MeindeskClient({
12
+ publishableKey,
13
+ apiUrl: options.apiUrl ?? process.env.NEXT_PUBLIC_API_URL ?? "http://localhost:4000",
14
+ secretKey: options.secretKey ?? process.env.MEINDESK_SECRET_KEY
15
+ });
16
+ }
17
+
18
+ export { createMeindeskClient };
19
+ //# sourceMappingURL=chunk-MAVY762I.js.map
20
+ //# sourceMappingURL=chunk-MAVY762I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server.ts"],"names":[],"mappings":";;;AASO,SAAS,oBAAA,CACd,OAAA,GAAuC,EAAC,EACxB;AAChB,EAAA,MAAM,cAAA,GACJ,OAAA,CAAQ,cAAA,IACR,OAAA,CAAQ,GAAA,CAAI,oCAAA;AAEd,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAI,cAAA,CAAe;AAAA,IACxB,cAAA;AAAA,IACA,MAAA,EACE,OAAA,CAAQ,MAAA,IACR,OAAA,CAAQ,IAAI,mBAAA,IACZ,uBAAA;AAAA,IACF,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,GAAA,CAAI;AAAA,GAC7C,CAAA;AACH","file":"chunk-MAVY762I.js","sourcesContent":["import { MeindeskClient, type MeindeskClientOptions } from \"@meindesk/sdk\";\n\nexport interface CreateMeindeskClientOptions\n extends Partial<MeindeskClientOptions> {}\n\n/**\n * Server-side Meindesk client.\n * Reads `NEXT_PUBLIC_MEINDESK_PUBLISHABLE_KEY` and `MEINDESK_SECRET_KEY` from env by default.\n */\nexport function createMeindeskClient(\n options: CreateMeindeskClientOptions = {},\n): MeindeskClient {\n const publishableKey =\n options.publishableKey ??\n process.env.NEXT_PUBLIC_MEINDESK_PUBLISHABLE_KEY;\n\n if (!publishableKey) {\n throw new Error(\n \"createMeindeskClient requires NEXT_PUBLIC_MEINDESK_PUBLISHABLE_KEY or an explicit publishableKey\",\n );\n }\n\n return new MeindeskClient({\n publishableKey,\n apiUrl:\n options.apiUrl ??\n process.env.NEXT_PUBLIC_API_URL ??\n \"http://localhost:4000\",\n secretKey: options.secretKey ?? process.env.MEINDESK_SECRET_KEY,\n });\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export { AuthContextValue, AuthExperience, AuthExperienceLoading, AuthExperienceProps, AuthProvider, AuthProviderProps, ConditionalProps, ForgotPassword, ForgotPasswordProps, MagicLinkSignIn, MagicLinkSignInProps, Protect, ProtectProps, ResetPassword, ResetPasswordProps, SignIn, SignInProps, SignUp, SignUpProps, SignedIn, SignedOut, SsoCallback, SsoCallbackProps, UserButton, UserButtonProps, UserProfile, UserProfileButton, UserProfileProps, UserProfileTab, VerifyEmail, VerifyEmailProps, authConfigToExperience, authStyles, ensureAuthStyles, useAuth, useAuthContext, useSession, useUser } from '@meindesk/react';
2
+ export { AuthConfig, AuthResult, FormField, FormSchema, MeindeskApiError, MeindeskClient, MeindeskClientOptions, SESSION_COOKIE_NAME, Session, SignInData, SignUpData, User, createMeindeskClient as createBrowserMeindeskClient } from '@meindesk/sdk';
3
+ export { AuthMiddlewareOptions, authMiddleware } from './middleware.js';
4
+ export { CreateMeindeskClientOptions, createMeindeskClient } from './server.js';
5
+ import 'next/server';
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { authMiddleware } from './chunk-HEL2R4AQ.js';
2
+ export { createMeindeskClient } from './chunk-MAVY762I.js';
3
+ export { AuthExperience, AuthExperienceLoading, AuthProvider, ForgotPassword, MagicLinkSignIn, Protect, ResetPassword, SignIn, SignUp, SignedIn, SignedOut, SsoCallback, UserButton, UserProfile, UserProfileButton, VerifyEmail, authConfigToExperience, authStyles, ensureAuthStyles, useAuth, useAuthContext, useSession, useUser } from '@meindesk/react';
4
+ export { MeindeskApiError, MeindeskClient, SESSION_COOKIE_NAME, createMeindeskClient as createBrowserMeindeskClient } from '@meindesk/sdk';
5
+ //# sourceMappingURL=index.js.map
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
@@ -0,0 +1,25 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+
3
+ interface AuthMiddlewareOptions {
4
+ /** Paths that do not require an authenticated session. Supports trailing `*` wildcards. */
5
+ publicRoutes?: string[];
6
+ /** Where to send unauthenticated users. Defaults to `/sign-in`. */
7
+ signInUrl?: string;
8
+ /** Optional API base URL for session validation when a secret key is present. */
9
+ apiUrl?: string;
10
+ }
11
+ /**
12
+ * Next.js middleware helper.
13
+ *
14
+ * Zero-config usage:
15
+ * ```ts
16
+ * export default authMiddleware();
17
+ * ```
18
+ *
19
+ * When `MEINDESK_SECRET_KEY` is set, optionally validates the session via the API.
20
+ * Requests with OAuth `code` + `provider` query params always pass through so
21
+ * AuthProvider can exchange the one-time code before a session cookie exists.
22
+ */
23
+ declare function authMiddleware(options?: AuthMiddlewareOptions): (request: NextRequest) => Promise<NextResponse<unknown>>;
24
+
25
+ export { type AuthMiddlewareOptions, authMiddleware, authMiddleware as default };
@@ -0,0 +1,3 @@
1
+ export { authMiddleware, middleware_default as default } from './chunk-HEL2R4AQ.js';
2
+ //# sourceMappingURL=middleware.js.map
3
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"middleware.js"}
@@ -0,0 +1,11 @@
1
+ import { MeindeskClientOptions, MeindeskClient } from '@meindesk/sdk';
2
+
3
+ interface CreateMeindeskClientOptions extends Partial<MeindeskClientOptions> {
4
+ }
5
+ /**
6
+ * Server-side Meindesk client.
7
+ * Reads `NEXT_PUBLIC_MEINDESK_PUBLISHABLE_KEY` and `MEINDESK_SECRET_KEY` from env by default.
8
+ */
9
+ declare function createMeindeskClient(options?: CreateMeindeskClientOptions): MeindeskClient;
10
+
11
+ export { type CreateMeindeskClientOptions, createMeindeskClient };
package/dist/server.js ADDED
@@ -0,0 +1,3 @@
1
+ export { createMeindeskClient } from './chunk-MAVY762I.js';
2
+ //# sourceMappingURL=server.js.map
3
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"server.js"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@meindesk/nextjs",
3
+ "version": "0.1.0",
4
+ "description": "Meindesk Auth helpers for Next.js App Router",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "./server": {
14
+ "types": "./dist/server.d.ts",
15
+ "import": "./dist/server.js",
16
+ "default": "./dist/server.js"
17
+ },
18
+ "./middleware": {
19
+ "types": "./dist/middleware.d.ts",
20
+ "import": "./dist/middleware.js",
21
+ "default": "./dist/middleware.js"
22
+ }
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "peerDependencies": {
31
+ "next": ">=14",
32
+ "react": "^18 || ^19",
33
+ "react-dom": "^18 || ^19"
34
+ },
35
+ "dependencies": {
36
+ "@meindesk/react": "0.1.0",
37
+ "@meindesk/sdk": "0.1.0"
38
+ },
39
+ "devDependencies": {
40
+ "@types/node": "^22.15.29",
41
+ "@types/react": "^19.1.6",
42
+ "@types/react-dom": "^19.1.5",
43
+ "next": "^15.3.3",
44
+ "react": "^19.1.0",
45
+ "react-dom": "^19.1.0",
46
+ "typescript": "^5.8.3",
47
+ "@meindesk/typescript-config": "0.0.0"
48
+ },
49
+ "scripts": {
50
+ "build": "tsup",
51
+ "lint": "tsc --noEmit"
52
+ },
53
+ "main": "./dist/index.js",
54
+ "types": "./dist/index.d.ts"
55
+ }