From 1ec0bb1ce627b973d1cdb336ed81573ac81e8501 Mon Sep 17 00:00:00 2001 From: Hernan Alvarado Date: Sat, 11 Apr 2026 15:20:11 -0500 Subject: [PATCH 1/9] feat(next): add next integration package (@aura-stack/next) --- apps/elysia/src/lib/auth.ts | 2 +- apps/elysia/src/lib/handler.ts | 6 - apps/nextjs/app-router/package.json | 3 +- apps/nextjs/app-router/src/@types/props.ts | 7 +- apps/nextjs/app-router/src/@types/types.ts | 10 -- .../src/app/api/auth/[...aura]/route.ts | 4 +- .../app-router/src/components/auth-client.tsx | 6 +- .../app-router/src/components/auth-server.tsx | 12 +- .../app-router/src/components/header.tsx | 2 +- .../app-router/src/components/ui/button.tsx | 6 +- apps/nextjs/app-router/src/contexts/auth.tsx | 2 +- apps/nextjs/app-router/src/lib/auth-client.ts | 2 +- apps/nextjs/app-router/src/lib/auth.ts | 5 +- apps/nextjs/app-router/src/lib/server.ts | 66 ---------- apps/vercel/tsconfig.json | 8 +- bun.lock | 24 +++- packages/core/src/@types/index.ts | 1 + packages/core/src/index.ts | 3 + packages/next/CHANGELOG.md | 13 ++ packages/next/README.md | 116 ++++++++++++++++++ packages/next/deno.json | 18 +++ packages/next/package.json | 70 +++++++++++ packages/next/src/@types/core.ts | 1 + packages/next/src/client.ts | 11 ++ packages/next/src/createAuth.ts | 20 +++ packages/next/src/index.ts | 4 + packages/next/src/lib/api.ts | 100 +++++++++++++++ packages/next/src/oauth/index.ts | 1 + packages/next/tsconfig.json | 11 ++ packages/next/tsup.config.ts | 4 + packages/react/package.json | 7 +- packages/react/src/@types/core.ts | 1 + packages/react/src/@types/index.ts | 2 + packages/react/src/{ => @types}/types.ts | 0 packages/react/src/context.tsx | 4 +- packages/react/src/hooks.ts | 2 +- packages/react/src/index.tsx | 6 +- packages/react/src/oauth/index.ts | 1 + packages/react/test/hooks.test.tsx | 2 +- pnpm-lock.yaml | 42 ++++++- 40 files changed, 476 insertions(+), 129 deletions(-) delete mode 100644 apps/elysia/src/lib/handler.ts delete mode 100644 apps/nextjs/app-router/src/@types/types.ts delete mode 100644 apps/nextjs/app-router/src/lib/server.ts create mode 100644 packages/next/CHANGELOG.md create mode 100644 packages/next/README.md create mode 100644 packages/next/deno.json create mode 100644 packages/next/package.json create mode 100644 packages/next/src/@types/core.ts create mode 100644 packages/next/src/client.ts create mode 100644 packages/next/src/createAuth.ts create mode 100644 packages/next/src/index.ts create mode 100644 packages/next/src/lib/api.ts create mode 100644 packages/next/src/oauth/index.ts create mode 100644 packages/next/tsconfig.json create mode 100644 packages/next/tsup.config.ts create mode 100644 packages/react/src/@types/core.ts create mode 100644 packages/react/src/@types/index.ts rename packages/react/src/{ => @types}/types.ts (100%) create mode 100644 packages/react/src/oauth/index.ts diff --git a/apps/elysia/src/lib/auth.ts b/apps/elysia/src/lib/auth.ts index 7794e5c7..881ecbb7 100644 --- a/apps/elysia/src/lib/auth.ts +++ b/apps/elysia/src/lib/auth.ts @@ -5,4 +5,4 @@ export const auth = createAuth({ basePath: "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/api/auth", }) -export const { api, jose, toHandler, withAuth } = auth +export const { api, jose, handlers, toHandler, withAuth } = auth diff --git a/apps/elysia/src/lib/handler.ts b/apps/elysia/src/lib/handler.ts deleted file mode 100644 index 6ea50f05..00000000 --- a/apps/elysia/src/lib/handler.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { handlers } from "../auth" -import type { Context } from "elysia" - -export const toElysiaHandler = async (ctx: Context) => { - return await handlers.ALL(ctx.request) -} diff --git a/apps/nextjs/app-router/package.json b/apps/nextjs/app-router/package.json index aa4195d8..74f490fc 100644 --- a/apps/nextjs/app-router/package.json +++ b/apps/nextjs/app-router/package.json @@ -12,8 +12,7 @@ "format:check": "oxfmt --check" }, "dependencies": { - "@aura-stack/auth": "workspace:*", - "@aura-stack/react": "workspace:*", + "@aura-stack/next": "workspace:*", "@radix-ui/react-slot": "^1.2.4", "lucide-react": "catalog:lucide-react", "next": "catalog:next", diff --git a/apps/nextjs/app-router/src/@types/props.ts b/apps/nextjs/app-router/src/@types/props.ts index 1f69ec00..f250af92 100644 --- a/apps/nextjs/app-router/src/@types/props.ts +++ b/apps/nextjs/app-router/src/@types/props.ts @@ -1,9 +1,4 @@ -import type { ComponentProps, PropsWithChildren } from "react" -import type { Session } from "@aura-stack/auth/types" - -export interface AuthProviderProps extends PropsWithChildren { - session?: Session | null -} +import type { ComponentProps } from "react" export interface ButtonProps extends ComponentProps<"button"> { variant?: "default" | "outline" diff --git a/apps/nextjs/app-router/src/@types/types.ts b/apps/nextjs/app-router/src/@types/types.ts deleted file mode 100644 index 5fad8d84..00000000 --- a/apps/nextjs/app-router/src/@types/types.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { authClient } from "@/lib/auth-client" -import type { Session } from "@aura-stack/auth" - -export interface AuthContextValue { - session: Session | null - isLoading: boolean - isAuthenticated: boolean - signIn: typeof authClient.signIn - signOut: typeof authClient.signOut -} diff --git a/apps/nextjs/app-router/src/app/api/auth/[...aura]/route.ts b/apps/nextjs/app-router/src/app/api/auth/[...aura]/route.ts index b09c68bb..79effe2b 100644 --- a/apps/nextjs/app-router/src/app/api/auth/[...aura]/route.ts +++ b/apps/nextjs/app-router/src/app/api/auth/[...aura]/route.ts @@ -1,3 +1,3 @@ -import { handlers } from "@/lib/auth" +import { core } from "@/lib/auth" -export const { GET, POST, PATCH } = handlers +export const { GET, POST, PATCH } = core.handlers diff --git a/apps/nextjs/app-router/src/components/auth-client.tsx b/apps/nextjs/app-router/src/components/auth-client.tsx index 3f919b5b..6a060855 100644 --- a/apps/nextjs/app-router/src/components/auth-client.tsx +++ b/apps/nextjs/app-router/src/components/auth-client.tsx @@ -1,8 +1,8 @@ "use client" import { LayoutDashboard } from "lucide-react" -import { Button } from "./ui/button" -import { useAuth } from "@aura-stack/react/hooks" +import { Button } from "@/components/ui/button" +import { useAuth } from "@aura-stack/next" export const AuthClient = () => { const { session, status, isPending, signIn, signOut } = useAuth() @@ -14,7 +14,7 @@ export const AuthClient = () => { Client Component {isAuthenticated ? (
-
+
client session active diff --git a/apps/nextjs/app-router/src/components/auth-server.tsx b/apps/nextjs/app-router/src/components/auth-server.tsx index 5dd51236..cf704a45 100644 --- a/apps/nextjs/app-router/src/components/auth-server.tsx +++ b/apps/nextjs/app-router/src/components/auth-server.tsx @@ -1,19 +1,19 @@ +import { api } from "@/lib/auth" import { LayoutDashboard } from "lucide-react" -import { Button } from "./ui/button" -import { getSession, signIn, signOut } from "@/lib/server" +import { Button } from "@/components/ui/button" export const AuthServer = async () => { - const session = await getSession() + const session = await api.getSession() const isAuthenticated = Boolean(session && session?.user) const signInAction = async (oauth: string) => { "use server" - await signIn(oauth) + await api.signIn(oauth) } const signOutAction = async () => { "use server" - await signOut() + await api.signOut() } return ( @@ -23,7 +23,7 @@ export const AuthServer = async () => { {isAuthenticated ? ( <>
-
+
server session active diff --git a/apps/nextjs/app-router/src/components/header.tsx b/apps/nextjs/app-router/src/components/header.tsx index cfc8f191..647a5259 100644 --- a/apps/nextjs/app-router/src/components/header.tsx +++ b/apps/nextjs/app-router/src/components/header.tsx @@ -4,7 +4,7 @@ import Link from "next/link" import { useState } from "react" import { Menu, X } from "lucide-react" import { Button } from "@/components/ui/button" -import { useAuth } from "@aura-stack/react" +import { useAuth } from "@aura-stack/next" export const Header = () => { const [mobileMenuOpen, setMobileMenuOpen] = useState(false) diff --git a/apps/nextjs/app-router/src/components/ui/button.tsx b/apps/nextjs/app-router/src/components/ui/button.tsx index a63789e6..f48181c3 100644 --- a/apps/nextjs/app-router/src/components/ui/button.tsx +++ b/apps/nextjs/app-router/src/components/ui/button.tsx @@ -4,7 +4,7 @@ import { Slot } from "@radix-ui/react-slot" export const Button = ({ className, variant = "default", size = "default", asChild, ...props }: ButtonProps) => { const Component = asChild ? Slot : "button" const defaultClasses = - "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive" + "inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive" const variants = { variant: { @@ -15,8 +15,8 @@ export const Button = ({ className, variant = "default", size = "default", asChi }, size: { default: "h-9 px-4 py-2 has-[>svg]:px-3", - sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5", - lg: "h-10 rounded-md px-6 has-[>svg]:px-4", + sm: "h-8 gap-1.5 px-3 has-[>svg]:px-2.5", + lg: "h-10 px-6 has-[>svg]:px-4", icon: "size-9", "icon-sm": "size-8", "icon-lg": "size-10", diff --git a/apps/nextjs/app-router/src/contexts/auth.tsx b/apps/nextjs/app-router/src/contexts/auth.tsx index d07de890..4238699f 100644 --- a/apps/nextjs/app-router/src/contexts/auth.tsx +++ b/apps/nextjs/app-router/src/contexts/auth.tsx @@ -1,5 +1,5 @@ "use client" -import { AuthProvider as AuraAuthProvider, type AuthProviderProps } from "@aura-stack/react" +import { AuthProvider as AuraAuthProvider, type AuthProviderProps } from "@aura-stack/next" import { authClient } from "@/lib/auth-client" export const AuthProvider = ({ children, initialSession }: Omit) => { diff --git a/apps/nextjs/app-router/src/lib/auth-client.ts b/apps/nextjs/app-router/src/lib/auth-client.ts index 7e5687df..41969c28 100644 --- a/apps/nextjs/app-router/src/lib/auth-client.ts +++ b/apps/nextjs/app-router/src/lib/auth-client.ts @@ -1,4 +1,4 @@ -import { createAuthClient } from "@aura-stack/auth/client" +import { createAuthClient } from "@aura-stack/next/client" export const authClient = createAuthClient({ basePath: "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/api/auth", diff --git a/apps/nextjs/app-router/src/lib/auth.ts b/apps/nextjs/app-router/src/lib/auth.ts index 7ef41eb5..635c0032 100644 --- a/apps/nextjs/app-router/src/lib/auth.ts +++ b/apps/nextjs/app-router/src/lib/auth.ts @@ -1,10 +1,9 @@ -import { createAuth } from "@aura-stack/auth" -import { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/auth/oauth/index" +import { createAuth, builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/next" export const oauth = Object.keys(builtInOAuthProviders) as BuiltInOAuthProvider[] export const providers = [builtInOAuthProviders.github(), builtInOAuthProviders.gitlab(), builtInOAuthProviders.bitbucket()] -export const { handlers, jose, api } = createAuth({ +export const { api, core } = createAuth({ oauth, basePath: "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/api/auth", baseURL: "http://localhost:3000", diff --git a/apps/nextjs/app-router/src/lib/server.ts b/apps/nextjs/app-router/src/lib/server.ts deleted file mode 100644 index 008ac01d..00000000 --- a/apps/nextjs/app-router/src/lib/server.ts +++ /dev/null @@ -1,66 +0,0 @@ -"use server" - -import { api } from "@/lib/auth" -import { redirect } from "next/navigation" -import { cookies, headers } from "next/headers" -import { isRedirectError } from "next/dist/client/components/redirect-error" -import type { - Session, - LiteralUnion, - BuiltInOAuthProvider, - GetSessionAPIOptions, - SignInAPIOptions, - SignOutAPIOptions, -} from "@aura-stack/auth" - -export const getSession = async (options?: GetSessionAPIOptions): Promise => { - try { - const session = await api.getSession({ - headers: await headers(), - ...options, - }) - if (!session.authenticated) { - return null - } - return session.session - } catch { - console.error("[error:server] getSession - Failed to retrieve session") - return null - } -} - -export const signIn = async (provider: LiteralUnion, options?: SignInAPIOptions) => { - "use server" - const signIn = await api.signIn(provider, { - headers: await headers(), - ...options, - redirect: false, - }) - return redirect(signIn.signInURL) -} - -export const signOut = async (options?: SignOutAPIOptions) => { - "use server" - try { - const cookieStore = await cookies() - const response = await api.signOut({ - headers: await headers(), - ...options, - }) - if (response.status === 202) { - const setCookies = response.headers.getSetCookie() - for (const cookie of setCookies) { - const nameMatch = cookie.match(/^([^=]+)=/) - if (nameMatch) { - cookieStore.delete(nameMatch[1]) - } - } - redirect(options?.redirectTo ?? "/") - } - return response.json() - } catch (error) { - if (isRedirectError(error)) throw error - console.error("[error:server] signOut", error) - return null - } -} diff --git a/apps/vercel/tsconfig.json b/apps/vercel/tsconfig.json index f64fb102..c618146b 100644 --- a/apps/vercel/tsconfig.json +++ b/apps/vercel/tsconfig.json @@ -1,7 +1,5 @@ { - "extends": "@aura-stack/tsconfig/tsconfig.base.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["api"] + "extends": "@aura-stack/tsconfig/tsconfig.base.json", + "include": ["api"], + "exclude": ["dist", "node_modules"], } diff --git a/bun.lock b/bun.lock index 2db15f7a..17d8497f 100644 --- a/bun.lock +++ b/bun.lock @@ -110,8 +110,7 @@ "name": "app-router", "version": "0.1.0", "dependencies": { - "@aura-stack/auth": "workspace:*", - "@aura-stack/react": "workspace:*", + "@aura-stack/next": "workspace:*", "@radix-ui/react-slot": "^1.2.4", "lucide-react": "catalog:lucide-react", "next": "catalog:next", @@ -377,6 +376,25 @@ "typescript": "catalog:typescript", }, }, + "packages/next": { + "name": "@aura-stack/next", + "version": "0.0.0", + "dependencies": { + "@aura-stack/react": "workspace:*", + }, + "devDependencies": { + "@aura-stack/tsconfig": "workspace:*", + "@aura-stack/tsup-config": "workspace:*", + "next": "catalog:next", + "react": "catalog:react", + "react-dom": "catalog:react", + }, + "peerDependencies": { + "next": ">=16.0.0", + "react": ">=19.0.0", + "react-dom": ">=19.0.0", + }, + }, "packages/rate-limiter": { "name": "@aura-stack/rate-limiter", "version": "0.0.0", @@ -503,6 +521,8 @@ "@aura-stack/jose": ["@aura-stack/jose@workspace:packages/jose"], + "@aura-stack/next": ["@aura-stack/next@workspace:packages/next"], + "@aura-stack/rate-limiter": ["@aura-stack/rate-limiter@workspace:packages/rate-limiter"], "@aura-stack/react": ["@aura-stack/react@workspace:packages/react"], diff --git a/packages/core/src/@types/index.ts b/packages/core/src/@types/index.ts index 700e6f20..1cf3151e 100644 --- a/packages/core/src/@types/index.ts +++ b/packages/core/src/@types/index.ts @@ -28,6 +28,7 @@ export type JWTPayloadWithToken = JWTPayload & { token: string } export type OAuthEnv = z.infer export type AuthClient = ReturnType["handlers"] + export type AuthClientOptions = Prettify< Omit & { baseURL?: string diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index e350acd4..0e71abbd 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -49,6 +49,9 @@ export type { UpdateSessionReturn, SignOutOptions, SignInCredentialsOptions, + CredentialsProvider, + CookieStoreConfig, + CookieStrategyAttributes, } from "@/@types/index.ts" export type { Merge, ShapeToObject, EditableShape, InferShape, InferIdentity, InferAuthIdentity } from "@/@types/utility.ts" diff --git a/packages/next/CHANGELOG.md b/packages/next/CHANGELOG.md new file mode 100644 index 00000000..b4b590f7 --- /dev/null +++ b/packages/next/CHANGELOG.md @@ -0,0 +1,13 @@ +# Changelog - `@aura-stack/next` + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +--- + +## [Unreleased] + +### Added + +- Introduced a dedicated Next.js integration package with optimized "Concentrated API" and aggregated client entry points for the App Router. diff --git a/packages/next/README.md b/packages/next/README.md new file mode 100644 index 00000000..dde5e4cc --- /dev/null +++ b/packages/next/README.md @@ -0,0 +1,116 @@ +
+ +

@aura-stack/next

+ +**Aura Auth adapter and utilities for the Next.js ecosystem** + +[![npm version](https://img.shields.io/npm/v/@aura-stack/next.svg)](https://www.npmjs.com/package/@aura-stack/next) +[![JSR version](https://jsr.io/badges/@aura-stack/next)](https://jsr.io/@aura-stack/next) +[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) + +[Official Docs](https://aura-stack-auth.vercel.app/docs) · [Next.js Package Docs](https://aura-stack-auth.vercel.app/docs/packages/next) + +
+ +## Overview + +`@aura-stack/next` provides a high-level, type-safe integration for **Next.js** applications using **Aura Auth**. It is designed for maximum developer experience in the App Router, offering dedicated utilities for Server Components, Server Actions, Middleware, and Route Handlers. + +By utilizing a **"Concentrated API"** pattern, it optimizes core authentication logic for the Next.js runtime, automatically managing context-aware data like cookies and headers via `next/headers`. + +## Features + +- **App Router Optimized** — Full support for React Server Components (RSC) and Server Actions. +- **Concentrated API** — Dedicated `auth.api` for Next.js that automates session fetching and redirects. +- **Aggregated Client Entry** — Consolidated `import { ... } from "@aura-stack/next/client"` for all hooks and context. +- **Middleware-Ready** — Fast and weightless `withAuth` wrapper for standard Next.js Middleware. +- **Route Handler Bridge** — Simple `toHandler` for mounting Aura Auth on `app/api/auth/[...auth]/route.ts`. +- **Type-safe by design** — Automatic type inference from your identity schema. + +## Installation + +```bash +pnpm add @aura-stack/next +``` + +## Structure + +The package follows a clear environment-based separation: + +- **`@aura-stack/next`**: All server-side logic (Factory, Server API, Middleware). +- **`@aura-stack/next/client`**: All client-side logic (Provider, Hooks, UI Components). +- **`@aura-stack/next/types`**: Universal Type definitions. + +## Quick Start + +### 1. Initialize Auth + +Configure your auth instance in a shared file (e.g., `lib/auth.ts`). + +```tsx +import { createAuth } from "@aura-stack/next" + +export const auth = createAuth({ + oauth: ["github"], +}) + +export const { core } = auth +``` + +### 2. Set Up Route Handler + +Configure the catch-all route in `app/api/auth/[...auth]/route.ts`. + +```tsx +import { core } from "@/lib/auth" + +export const { GET, POST, PATCH } = core.handlers +``` + +### 3. Access Session (Server-side) + +Use the optimized API in your Server Components. + +```tsx +import { api } from "@/lib/auth" + +export default async function Page() { + const session = await api.getSession() + + if (!session) return
Not signed in
+ + return
Welcome, {session.user.name}
+} +``` + +### 4. Client-side Implementation + +Use the consolidated client entry for hooks and context. + +```tsx +"use client" +import { useSession } from "@aura-stack/next/client" + +export function Profile() { + const { session, status } = useSession() + + if (status === "loading") return

Loading...

+ if (!session) return + + return
Signed in as {session.user.email}
+} +``` + +## Documentation + +Visit the [**official documentation website**](https://aura-stack-auth.vercel.app). + +## License + +Licensed under the [MIT License](../../LICENSE). © [Aura Stack](https://github.com/aura-stack-ts) + +--- + +

+ Made with ❤️ by Aura Stack team +

diff --git a/packages/next/deno.json b/packages/next/deno.json new file mode 100644 index 00000000..d117de75 --- /dev/null +++ b/packages/next/deno.json @@ -0,0 +1,18 @@ +{ + "name": "@aura-stack/next", + "version": "0.0.0", + "license": "MIT", + "exports": { + ".": "./src/index.ts", + "./client": "./src/client.ts", + "./oauth": "./src/oauth/index.ts" + }, + "imports": { + "@/": "./src/", + "next": "npm:next@^16.0.0" + }, + "publish": { + "include": ["src/**/*.ts", "README.md", "CHANGELOG.md"] + }, + "exclude": ["dist", "node_modules"] +} diff --git a/packages/next/package.json b/packages/next/package.json new file mode 100644 index 00000000..0e50e7f2 --- /dev/null +++ b/packages/next/package.json @@ -0,0 +1,70 @@ +{ + "name": "@aura-stack/next", + "version": "0.0.0", + "private": false, + "description": "", + "scripts": { + "dev": "tsup --watch", + "build": "tsup", + "lint": "oxlint", + "lint:fix": "oxlint --fix", + "test": "vitest --run", + "test:watch": "vitest", + "test:coverage": "vitest --run --coverage", + "format": "oxfmt", + "format:check": "oxfmt --check", + "type-check": "tsc --noEmit", + "clean": "rm -rf dist", + "clean:cts": "if [ -d dist ]; then find dist -type f -name \"*.cts\" -delete; fi", + "prepublish": "pnpm clean:cts" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aura-stack-ts/auth" + }, + "sideEffects": false, + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "./client": { + "types": "./dist/client.d.ts", + "import": "./dist/client.js", + "require": "./dist/client.cjs" + }, + "./oauth": { + "types": "./dist/oauth/index.d.ts", + "import": "./dist/oauth/index.js", + "require": "./dist/oauth/index.cjs" + }, + "./types": "./dist/types.d.ts" + }, + "keywords": [], + "author": "Aura Stack | Hernan Alvarado ", + "homepage": "https://aura-stack-auth.vercel.app", + "bugs": { + "url": "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/aura-stack-ts/auth/issues" + }, + "license": "MIT", + "dependencies": { + "@aura-stack/react": "workspace:*" + }, + "devDependencies": { + "@aura-stack/tsconfig": "workspace:*", + "@aura-stack/tsup-config": "workspace:*", + "next": "catalog:next", + "react": "catalog:react", + "react-dom": "catalog:react" + }, + "peerDependencies": { + "next": ">=16.0.0", + "react": ">=19.0.0", + "react-dom": ">=19.0.0" + }, + "packageManager": "pnpm@10.15.0" +} diff --git a/packages/next/src/@types/core.ts b/packages/next/src/@types/core.ts new file mode 100644 index 00000000..b3e3e144 --- /dev/null +++ b/packages/next/src/@types/core.ts @@ -0,0 +1 @@ +export type * from "@aura-stack/react/types" diff --git a/packages/next/src/client.ts b/packages/next/src/client.ts new file mode 100644 index 00000000..a5528b07 --- /dev/null +++ b/packages/next/src/client.ts @@ -0,0 +1,11 @@ +export { + createAuthClient, + AuthProvider, + useAuth, + useSession, + useSignIn, + useSignInCredentials, + useSignOut, + type AuthProviderProps, + type AuthClientOptions, +} from "@aura-stack/react" diff --git a/packages/next/src/createAuth.ts b/packages/next/src/createAuth.ts new file mode 100644 index 00000000..23a96dc2 --- /dev/null +++ b/packages/next/src/createAuth.ts @@ -0,0 +1,20 @@ +import { + createAuth as createAuthInstance, + type AuthConfig, + type EditableShape, + type ShapeToObject, + type UserShape, +} from "@aura-stack/auth" +import { api } from "@/lib/api" + +export const createAuth = >(config: AuthConfig) => { + const auth = createAuthInstance(config) + return { + /** + * The core auth instance. It can be used to advanced use cases, such as creating custom behaviors. + * For most use cases, the `api` property should be sufficient, as it provides a higher-level API for common authentication tasks. + */ + core: auth, + api: api>(auth), + } +} diff --git a/packages/next/src/index.ts b/packages/next/src/index.ts new file mode 100644 index 00000000..decd4f26 --- /dev/null +++ b/packages/next/src/index.ts @@ -0,0 +1,4 @@ +export { createAuth } from "@/createAuth" +export * from "@/client" +export { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/auth/oauth/index" +export type { User, Session, AuthConfig, AuthInstance } from "@/@types/core.ts" diff --git a/packages/next/src/lib/api.ts b/packages/next/src/lib/api.ts new file mode 100644 index 00000000..b26a9ddd --- /dev/null +++ b/packages/next/src/lib/api.ts @@ -0,0 +1,100 @@ +import { redirect } from "next/navigation" +import { cookies, headers } from "next/headers" +import type { + AuthInstance, + BuiltInOAuthProvider, + CredentialsPayload, + DeepPartial, + GetSessionAPIOptions, + LiteralUnion, + Session, + SignInAPIOptions, + SignOutAPIOptions, + User, +} from "@aura-stack/auth" + +export const getSession = ({ api }: AuthInstance) => { + return async (options?: GetSessionAPIOptions): Promise | null> => { + try { + const session = await api.getSession({ + headers: await headers(), + ...options, + }) + if (!session.authenticated) { + return null + } + return session.session + } catch { + console.error("[error:server] getSession - Failed to retrieve session") + return null + } + } +} + +export const signIn = ({ api }: AuthInstance) => { + return async (provider: LiteralUnion, options?: SignInAPIOptions) => { + const signIn = await api.signIn(provider, { + headers: await headers(), + ...options, + redirect: false, + }) + return redirect(signIn.signInURL) + } +} + +export const signInCredentials = ({ api }: AuthInstance) => { + return async (payload: CredentialsPayload, options: SignInAPIOptions) => { + const signIn = await api.signInCredentials({ + payload, + headers: await headers(), + ...options, + redirect: false, + }) + if (options.redirect && signIn.success && signIn.redirectURL) { + return redirect(signIn.redirectURL) + } + return signIn + } +} + +export const updateSession = ({ api }: AuthInstance) => { + return async (session: DeepPartial>, options?: GetSessionAPIOptions) => { + const updated = await api.updateSession({ + session, + headers: await headers(), + ...options, + }) + return updated + } +} + +export const signOut = ({ api }: AuthInstance) => { + return async (options?: SignOutAPIOptions) => { + const cookieStore = await cookies() + const response = await api.signOut({ + headers: await headers(), + ...options, + }) + if (response.status === 202) { + const setCookies = response.headers.getSetCookie() + for (const cookie of setCookies) { + const nameMatch = cookie.match(/^([^=]+)=/) + if (nameMatch) { + cookieStore.delete(nameMatch[1]) + } + } + redirect(options?.redirectTo ?? "/") + } + return response.json() + } +} + +export const api = (config: AuthInstance) => { + return { + getSession: getSession(config), + signIn: signIn(config), + signInCredentials: signInCredentials(config), + updateSession: updateSession(config), + signOut: signOut(config), + } +} diff --git a/packages/next/src/oauth/index.ts b/packages/next/src/oauth/index.ts new file mode 100644 index 00000000..6b627037 --- /dev/null +++ b/packages/next/src/oauth/index.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/oauth/index" diff --git a/packages/next/tsconfig.json b/packages/next/tsconfig.json new file mode 100644 index 00000000..0eab5a83 --- /dev/null +++ b/packages/next/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@aura-stack/tsconfig/next.json", + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + }, + "incremental": false + }, + "include": ["src"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/next/tsup.config.ts b/packages/next/tsup.config.ts new file mode 100644 index 00000000..923888bc --- /dev/null +++ b/packages/next/tsup.config.ts @@ -0,0 +1,4 @@ +import { tsupConfig } from "@aura-stack/tsup-config" +import { defineConfig } from "tsup" + +export default defineConfig(tsupConfig) diff --git a/packages/react/package.json b/packages/react/package.json index e8b0537c..4570ddf9 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -43,7 +43,12 @@ "import": "./dist/context.js", "require": "./dist/context.cjs" }, - "./types": "./dist/types.d.ts" + "./oauth": { + "types": "./dist/oauth/index.d.ts", + "import": "./dist/oauth/index.js", + "require": "./dist/oauth/index.cjs" + }, + "./types": "./dist/@types/index.d.ts" }, "keywords": [], "author": "Aura Stack | Hernan Alvarado ", diff --git a/packages/react/src/@types/core.ts b/packages/react/src/@types/core.ts new file mode 100644 index 00000000..553531a6 --- /dev/null +++ b/packages/react/src/@types/core.ts @@ -0,0 +1 @@ +export type * from "@aura-stack/auth" diff --git a/packages/react/src/@types/index.ts b/packages/react/src/@types/index.ts new file mode 100644 index 00000000..d36a24f8 --- /dev/null +++ b/packages/react/src/@types/index.ts @@ -0,0 +1,2 @@ +export type * from "@/@types/core.ts" +export type * from "@/@types/types.ts" diff --git a/packages/react/src/types.ts b/packages/react/src/@types/types.ts similarity index 100% rename from packages/react/src/types.ts rename to packages/react/src/@types/types.ts diff --git a/packages/react/src/context.tsx b/packages/react/src/context.tsx index 3edf8ddd..465fcf8d 100644 --- a/packages/react/src/context.tsx +++ b/packages/react/src/context.tsx @@ -11,13 +11,15 @@ import type { SignOutOptions, User, } from "@aura-stack/auth" -import type { AuthProviderProps, AuthReactContextValue, UpdateSessionCallOptions } from "@/types.ts" +import type { AuthProviderProps, AuthReactContextValue, UpdateSessionCallOptions } from "@/@types/types.ts" /** * React context for {@link AuthReactContextValue}. Use {@link AuthProvider} to supply a client and {@link useAuth} (or other hooks) to read it. */ export const AuthContext = createContext | null>(null) +export type { AuthProviderProps } + /** * Provides session state and auth actions for the tree, using the {@link AuthProviderProps.client} you pass in. * Swap or recreate `client` when you need different configuration; when `client` changes, session is re-synced like on mount. diff --git a/packages/react/src/hooks.ts b/packages/react/src/hooks.ts index a0cb097a..3cd9fc9a 100644 --- a/packages/react/src/hooks.ts +++ b/packages/react/src/hooks.ts @@ -12,7 +12,7 @@ import type { User, } from "@aura-stack/auth/types" import { AuthContext } from "@/context.tsx" -import type { AuthReactContextValue, UpdateSessionCallOptions } from "@/types.ts" +import type { AuthReactContextValue, UpdateSessionCallOptions } from "@/@types/types.ts" export const useAuth = (): AuthReactContextValue => { const ctx = use(AuthContext) diff --git a/packages/react/src/index.tsx b/packages/react/src/index.tsx index e6b3578b..c17ced2c 100644 --- a/packages/react/src/index.tsx +++ b/packages/react/src/index.tsx @@ -1,3 +1,5 @@ -export { AuthProvider } from "@/context.tsx" +export { createAuthClient, type AuthClientOptions } from "@aura-stack/auth/client" +export { AuthProvider, type AuthProviderProps } from "@/context.tsx" export { useAuth, useSession, useSignIn, useSignInCredentials, useSignOut, useUpdateSession } from "@/hooks.ts" -export type { AuthProviderProps, AuthClientInstance, AuthReactContextValue, AuthStatus } from "@/types.ts" +export { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/auth/oauth/index" +export type { User, Session, AuthConfig, AuthInstance } from "@/@types/core.ts" diff --git a/packages/react/src/oauth/index.ts b/packages/react/src/oauth/index.ts new file mode 100644 index 00000000..6b627037 --- /dev/null +++ b/packages/react/src/oauth/index.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/oauth/index" diff --git a/packages/react/test/hooks.test.tsx b/packages/react/test/hooks.test.tsx index 3f6c6fc4..4afe2958 100644 --- a/packages/react/test/hooks.test.tsx +++ b/packages/react/test/hooks.test.tsx @@ -3,7 +3,7 @@ import { describe, expect, test, vi } from "vitest" import { AuthProvider } from "@/context.tsx" import { useAuth, useSession, useSignIn, useSignInCredentials, useSignOut, useUpdateSession } from "@/hooks.ts" import type { ReactNode } from "react" -import type { AuthClientInstance } from "@/types.ts" +import type { AuthClientInstance } from "@/@types/types.ts" const mockUser = { id: "1", email: "test@example.com", name: "Test User" } const mockSession = { user: mockUser, expires: new Date(Date.now() + 3600 * 1000).toISOString() } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c184a2f4..619c02a0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -250,12 +250,9 @@ importers: apps/nextjs/app-router: dependencies: - '@aura-stack/auth': + '@aura-stack/next': specifier: workspace:* - version: link:../../../packages/core - '@aura-stack/react': - specifier: workspace:* - version: link:../../../packages/react + version: link:../../../packages/next '@radix-ui/react-slot': specifier: ^1.2.4 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) @@ -760,6 +757,28 @@ importers: specifier: catalog:typescript version: 5.9.3 + packages/next: + dependencies: + '@aura-stack/react': + specifier: workspace:* + version: link:../react + devDependencies: + '@aura-stack/tsconfig': + specifier: workspace:* + version: link:../../configs/tsconfig + '@aura-stack/tsup-config': + specifier: workspace:* + version: link:../../configs/tsup-config + next: + specifier: catalog:next + version: 16.1.7(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: + specifier: catalog:react + version: 19.2.4 + react-dom: + specifier: catalog:react + version: 19.2.4(react@19.2.4) + packages/rate-limiter: devDependencies: '@aura-stack/tsconfig': @@ -794,6 +813,19 @@ importers: specifier: ^16.3.2 version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + packages/template: + dependencies: + '@aura-stack/auth': + specifier: workspace:* + version: link:../core + devDependencies: + '@aura-stack/tsconfig': + specifier: workspace:* + version: link:../../configs/tsconfig + '@aura-stack/tsup-config': + specifier: workspace:* + version: link:../../configs/tsup-config + packages: '@acemir/cssom@0.9.31': From 7901c58e283ecda7a14a9facd8e7cb61759d9e8a Mon Sep 17 00:00:00 2001 From: Hernan Alvarado Date: Sat, 11 Apr 2026 21:17:55 -0500 Subject: [PATCH 2/9] refactor: clean up exports --- .../app-router/src/components/auth-client.tsx | 2 +- .../app-router/src/components/header.tsx | 2 +- apps/nextjs/app-router/src/contexts/auth.tsx | 2 +- apps/nextjs/app-router/src/lib/auth.ts | 10 +- bun.lock | 2 + deno.lock | 297 +++++++++++++++++- packages/core/CHANGELOG.md | 2 + packages/core/deno.json | 9 +- packages/core/package.json | 20 ++ packages/core/src/@types/config.ts | 78 ++--- packages/core/src/@types/session.ts | 6 +- .../core/src/actions/callback/callback.ts | 2 +- .../core/src/actions/callback/userinfo.ts | 2 +- .../core/src/actions/csrfToken/csrfToken.ts | 2 +- .../src/actions/signIn/authorization-url.ts | 2 +- packages/core/src/api/credentials.ts | 2 +- packages/core/src/client/client.ts | 6 +- packages/core/src/client/index.ts | 6 +- packages/core/src/index.ts | 57 +--- packages/core/src/session/stateless.ts | 2 +- .../src/shared/{security.ts => crypto.ts} | 0 packages/core/src/shared/identity.ts | 6 +- packages/core/src/shared/index.ts | 5 + .../actions/callback/access-token.test.ts | 2 +- .../test/actions/callback/callback.test.ts | 2 +- .../core/test/actions/session/session.test.ts | 2 +- .../core/test/actions/signOut/signOut.test.ts | 2 +- .../updateSession/updateSession.test.ts | 2 +- packages/core/test/api/updateSession.test.ts | 2 +- packages/core/test/env.test.ts | 2 +- packages/core/test/jose.test.ts | 2 +- packages/core/test/secure.test.ts | 2 +- packages/core/test/types.test-d.ts | 3 +- packages/next/deno.json | 6 +- packages/next/package.json | 17 +- packages/next/src/@types/index.ts | 1 + packages/next/src/_core/crypto.ts | 1 + packages/next/src/_core/identity.ts | 1 + packages/next/src/_core/shared.ts | 1 + packages/next/src/createAuth.ts | 9 +- packages/next/src/index.ts | 2 - packages/next/src/lib/api.ts | 20 +- packages/next/src/oauth/index.ts | 2 +- packages/react/deno.json | 4 + packages/react/package.json | 19 +- packages/react/src/@types/core.ts | 2 +- packages/react/src/_core/crypto.ts | 1 + packages/react/src/_core/identity.ts | 1 + packages/react/src/_core/shared.ts | 1 + packages/react/src/context.tsx | 13 +- packages/react/src/hooks.ts | 1 - packages/react/src/index.tsx | 4 +- packages/react/tsconfig.json | 24 +- packages/react/tsup.config.ts | 13 +- pnpm-lock.yaml | 25 +- 55 files changed, 509 insertions(+), 202 deletions(-) rename packages/core/src/shared/{security.ts => crypto.ts} (100%) create mode 100644 packages/core/src/shared/index.ts create mode 100644 packages/next/src/@types/index.ts create mode 100644 packages/next/src/_core/crypto.ts create mode 100644 packages/next/src/_core/identity.ts create mode 100644 packages/next/src/_core/shared.ts create mode 100644 packages/react/src/_core/crypto.ts create mode 100644 packages/react/src/_core/identity.ts create mode 100644 packages/react/src/_core/shared.ts diff --git a/apps/nextjs/app-router/src/components/auth-client.tsx b/apps/nextjs/app-router/src/components/auth-client.tsx index 6a060855..b7c9134a 100644 --- a/apps/nextjs/app-router/src/components/auth-client.tsx +++ b/apps/nextjs/app-router/src/components/auth-client.tsx @@ -2,7 +2,7 @@ import { LayoutDashboard } from "lucide-react" import { Button } from "@/components/ui/button" -import { useAuth } from "@aura-stack/next" +import { useAuth } from "@aura-stack/next/client" export const AuthClient = () => { const { session, status, isPending, signIn, signOut } = useAuth() diff --git a/apps/nextjs/app-router/src/components/header.tsx b/apps/nextjs/app-router/src/components/header.tsx index 647a5259..91147f12 100644 --- a/apps/nextjs/app-router/src/components/header.tsx +++ b/apps/nextjs/app-router/src/components/header.tsx @@ -4,7 +4,7 @@ import Link from "next/link" import { useState } from "react" import { Menu, X } from "lucide-react" import { Button } from "@/components/ui/button" -import { useAuth } from "@aura-stack/next" +import { useAuth } from "@aura-stack/next/client" export const Header = () => { const [mobileMenuOpen, setMobileMenuOpen] = useState(false) diff --git a/apps/nextjs/app-router/src/contexts/auth.tsx b/apps/nextjs/app-router/src/contexts/auth.tsx index 4238699f..ca047566 100644 --- a/apps/nextjs/app-router/src/contexts/auth.tsx +++ b/apps/nextjs/app-router/src/contexts/auth.tsx @@ -1,5 +1,5 @@ "use client" -import { AuthProvider as AuraAuthProvider, type AuthProviderProps } from "@aura-stack/next" +import { AuthProvider as AuraAuthProvider, type AuthProviderProps } from "@aura-stack/next/client" import { authClient } from "@/lib/auth-client" export const AuthProvider = ({ children, initialSession }: Omit) => { diff --git a/apps/nextjs/app-router/src/lib/auth.ts b/apps/nextjs/app-router/src/lib/auth.ts index 635c0032..322c4c84 100644 --- a/apps/nextjs/app-router/src/lib/auth.ts +++ b/apps/nextjs/app-router/src/lib/auth.ts @@ -1,7 +1,11 @@ -import { createAuth, builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/next" +import { createAuth } from "@aura-stack/next" +//import { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/next/oauth" +//console.log("Built-in OAuth providers:", builtInOAuthProviders) -export const oauth = Object.keys(builtInOAuthProviders) as BuiltInOAuthProvider[] -export const providers = [builtInOAuthProviders.github(), builtInOAuthProviders.gitlab(), builtInOAuthProviders.bitbucket()] +//export const oauth = Object.keys(builtInOAuthProviders) as BuiltInOAuthProvider[] +export const oauth = [] +//export const providers = [builtInOAuthProviders.github(), builtInOAuthProviders.gitlab(), builtInOAuthProviders.bitbucket()] +export const providers = [{}, {}, {}] export const { api, core } = createAuth({ oauth, diff --git a/bun.lock b/bun.lock index 17d8497f..cbd77b4f 100644 --- a/bun.lock +++ b/bun.lock @@ -414,6 +414,8 @@ "@aura-stack/tsup-config": "workspace:*", "@testing-library/dom": "^10.4.1", "@testing-library/react": "^16.3.2", + "@types/react": "catalog:react", + "react": "catalog:react", }, "peerDependencies": { "@types/react": ">=19.0.0", diff --git a/deno.lock b/deno.lock index c653e61c..f0547e89 100644 --- a/deno.lock +++ b/deno.lock @@ -22,6 +22,7 @@ "npm:eslint@^9.35.0": "9.39.4", "npm:hono@4": "4.12.1", "npm:jose@^6.1.2": "6.2.1", + "npm:next@16": "16.2.3_react@19.2.4_react-dom@19.2.4__react@19.2.4", "npm:openai@^4.52.5": "4.104.0_zod@4.3.5", "npm:oxfmt@0.41": "0.41.0", "npm:oxlint@^1.56.0": "1.56.0", @@ -360,6 +361,161 @@ "@humanwhocodes/retry@0.4.3": { "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==" }, + "@img/colour@1.0.0": { + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==" + }, + "@img/sharp-darwin-arm64@0.34.5": { + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "optionalDependencies": [ + "@img/sharp-libvips-darwin-arm64" + ], + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@img/sharp-darwin-x64@0.34.5": { + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "optionalDependencies": [ + "@img/sharp-libvips-darwin-x64" + ], + "os": ["darwin"], + "cpu": ["x64"] + }, + "@img/sharp-libvips-darwin-arm64@1.2.4": { + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@img/sharp-libvips-darwin-x64@1.2.4": { + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@img/sharp-libvips-linux-arm64@1.2.4": { + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@img/sharp-libvips-linux-arm@1.2.4": { + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@img/sharp-libvips-linux-ppc64@1.2.4": { + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@img/sharp-libvips-linux-riscv64@1.2.4": { + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@img/sharp-libvips-linux-s390x@1.2.4": { + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "os": ["linux"], + "cpu": ["s390x"] + }, + "@img/sharp-libvips-linux-x64@1.2.4": { + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@img/sharp-libvips-linuxmusl-arm64@1.2.4": { + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@img/sharp-libvips-linuxmusl-x64@1.2.4": { + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@img/sharp-linux-arm64@0.34.5": { + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "optionalDependencies": [ + "@img/sharp-libvips-linux-arm64" + ], + "os": ["linux"], + "cpu": ["arm64"] + }, + "@img/sharp-linux-arm@0.34.5": { + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "optionalDependencies": [ + "@img/sharp-libvips-linux-arm" + ], + "os": ["linux"], + "cpu": ["arm"] + }, + "@img/sharp-linux-ppc64@0.34.5": { + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "optionalDependencies": [ + "@img/sharp-libvips-linux-ppc64" + ], + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@img/sharp-linux-riscv64@0.34.5": { + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "optionalDependencies": [ + "@img/sharp-libvips-linux-riscv64" + ], + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@img/sharp-linux-s390x@0.34.5": { + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "optionalDependencies": [ + "@img/sharp-libvips-linux-s390x" + ], + "os": ["linux"], + "cpu": ["s390x"] + }, + "@img/sharp-linux-x64@0.34.5": { + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "optionalDependencies": [ + "@img/sharp-libvips-linux-x64" + ], + "os": ["linux"], + "cpu": ["x64"] + }, + "@img/sharp-linuxmusl-arm64@0.34.5": { + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "optionalDependencies": [ + "@img/sharp-libvips-linuxmusl-arm64" + ], + "os": ["linux"], + "cpu": ["arm64"] + }, + "@img/sharp-linuxmusl-x64@0.34.5": { + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "optionalDependencies": [ + "@img/sharp-libvips-linuxmusl-x64" + ], + "os": ["linux"], + "cpu": ["x64"] + }, + "@img/sharp-wasm32@0.34.5": { + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "dependencies": [ + "@emnapi/runtime" + ], + "cpu": ["wasm32"] + }, + "@img/sharp-win32-arm64@0.34.5": { + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@img/sharp-win32-ia32@0.34.5": { + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "os": ["win32"], + "cpu": ["ia32"] + }, + "@img/sharp-win32-x64@0.34.5": { + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "os": ["win32"], + "cpu": ["x64"] + }, "@isaacs/fs-minipass@4.0.1": { "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "dependencies": [ @@ -394,6 +550,49 @@ "@tybys/wasm-util" ] }, + "@next/env@16.2.3": { + "integrity": "sha512-ZWXyj4uNu4GCWQw9cjRxWlbD+33mcDszIo9iQxFnBX3Wmgq9ulaSJcl6VhuWx5pCWqqD+9W6Wfz7N0lM5lYPMA==" + }, + "@next/swc-darwin-arm64@16.2.3": { + "integrity": "sha512-u37KDKTKQ+OQLvY+z7SNXixwo4Q2/IAJFDzU1fYe66IbCE51aDSAzkNDkWmLN0yjTUh4BKBd+hb69jYn6qqqSg==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@next/swc-darwin-x64@16.2.3": { + "integrity": "sha512-gHjL/qy6Q6CG3176FWbAKyKh9IfntKZTB3RY/YOJdDFpHGsUDXVH38U4mMNpHVGXmeYW4wj22dMp1lTfmu/bTQ==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@next/swc-linux-arm64-gnu@16.2.3": { + "integrity": "sha512-U6vtblPtU/P14Y/b/n9ZY0GOxbbIhTFuaFR7F4/uMBidCi2nSdaOFhA0Go81L61Zd6527+yvuX44T4ksnf8T+Q==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@next/swc-linux-arm64-musl@16.2.3": { + "integrity": "sha512-/YV0LgjHUmfhQpn9bVoGc4x4nan64pkhWR5wyEV8yCOfwwrH630KpvRg86olQHTwHIn1z59uh6JwKvHq1h4QEw==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@next/swc-linux-x64-gnu@16.2.3": { + "integrity": "sha512-/HiWEcp+WMZ7VajuiMEFGZ6cg0+aYZPqCJD3YJEfpVWQsKYSjXQG06vJP6F1rdA03COD9Fef4aODs3YxKx+RDQ==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@next/swc-linux-x64-musl@16.2.3": { + "integrity": "sha512-Kt44hGJfZSefebhk/7nIdivoDr3Ugp5+oNz9VvF3GUtfxutucUIHfIO0ZYO8QlOPDQloUVQn4NVC/9JvHRk9hw==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@next/swc-win32-arm64-msvc@16.2.3": { + "integrity": "sha512-O2NZ9ie3Tq6xj5Z5CSwBT3+aWAMW2PIZ4egUi9MaWLkwaehgtB7YZjPm+UpcNpKOme0IQuqDcor7BsW6QBiQBw==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@next/swc-win32-x64-msvc@16.2.3": { + "integrity": "sha512-Ibm29/GgB/ab5n7XKqlStkm54qqZE8v2FnijUPBgrd67FWrac45o/RsNlaOWjme/B5UqeWt/8KM4aWBwA1D2Kw==", + "os": ["win32"], + "cpu": ["x64"] + }, "@noble/hashes@1.8.0": { "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==" }, @@ -810,6 +1009,12 @@ "@standard-schema/spec@1.1.0": { "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==" }, + "@swc/helpers@0.5.15": { + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "dependencies": [ + "tslib" + ] + }, "@testing-library/dom@10.4.1": { "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "dependencies": [ @@ -1082,6 +1287,10 @@ "balanced-match@1.0.2": { "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "baseline-browser-mapping@2.10.0": { + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", + "bin": true + }, "bin-links@6.0.0": { "integrity": "sha512-X4CiKlcV2GjnCMwnKAfbVWpHa++65th9TuzAEYtZoATiOE2DQKhSp4CJlyLoTqdhBKlXjpXjCTYPNNFS33Fi6w==", "dependencies": [ @@ -1126,6 +1335,9 @@ "callsites@3.1.0": { "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, + "caniuse-lite@1.0.30001772": { + "integrity": "sha512-mIwLZICj+ntVTw4BT2zfp+yu/AqV6GMKfJVJMx3MwPxs+uk/uj2GLl2dH8LQbjiLDX66amCga5nKFyDgRR43kg==" + }, "chai@6.2.2": { "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==" }, @@ -1145,6 +1357,9 @@ "chownr@3.0.0": { "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==" }, + "client-only@0.0.1": { + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, "cmd-shim@8.0.0": { "integrity": "sha512-Jk/BK6NCapZ58BKUxlSI+ouKRbjH1NLZCgJkYoab+vEHUY3f6OzpNBN9u7HFSv9J6TRDGs4PLOHezoKGaFRSCA==" }, @@ -1863,6 +2078,31 @@ "natural-compare@1.4.0": { "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, + "next@16.2.3_react@19.2.4_react-dom@19.2.4__react@19.2.4": { + "integrity": "sha512-9V3zV4oZFza3PVev5/poB9g0dEafVcgNyQ8eTRop8GvxZjV2G15FC5ARuG1eFD42QgeYkzJBJzHghNP8Ad9xtA==", + "dependencies": [ + "@next/env", + "@swc/helpers", + "baseline-browser-mapping", + "caniuse-lite", + "postcss@8.4.31", + "react", + "react-dom", + "styled-jsx" + ], + "optionalDependencies": [ + "@next/swc-darwin-arm64", + "@next/swc-darwin-x64", + "@next/swc-linux-arm64-gnu", + "@next/swc-linux-arm64-musl", + "@next/swc-linux-x64-gnu", + "@next/swc-linux-x64-musl", + "@next/swc-win32-arm64-msvc", + "@next/swc-win32-x64-msvc", + "sharp" + ], + "bin": true + }, "node-domexception@1.0.0": { "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "deprecated": true @@ -2039,6 +2279,14 @@ "lilconfig" ] }, + "postcss@8.4.31": { + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dependencies": [ + "nanoid", + "picocolors", + "source-map-js" + ] + }, "postcss@8.5.8": { "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", "dependencies": [ @@ -2162,6 +2410,41 @@ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "bin": true }, + "sharp@0.34.5": { + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "dependencies": [ + "@img/colour", + "detect-libc", + "semver" + ], + "optionalDependencies": [ + "@img/sharp-darwin-arm64", + "@img/sharp-darwin-x64", + "@img/sharp-libvips-darwin-arm64", + "@img/sharp-libvips-darwin-x64", + "@img/sharp-libvips-linux-arm", + "@img/sharp-libvips-linux-arm64", + "@img/sharp-libvips-linux-ppc64", + "@img/sharp-libvips-linux-riscv64", + "@img/sharp-libvips-linux-s390x", + "@img/sharp-libvips-linux-x64", + "@img/sharp-libvips-linuxmusl-arm64", + "@img/sharp-libvips-linuxmusl-x64", + "@img/sharp-linux-arm", + "@img/sharp-linux-arm64", + "@img/sharp-linux-ppc64", + "@img/sharp-linux-riscv64", + "@img/sharp-linux-s390x", + "@img/sharp-linux-x64", + "@img/sharp-linuxmusl-arm64", + "@img/sharp-linuxmusl-x64", + "@img/sharp-wasm32", + "@img/sharp-win32-arm64", + "@img/sharp-win32-ia32", + "@img/sharp-win32-x64" + ], + "scripts": true + }, "shebang-command@2.0.0": { "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": [ @@ -2234,6 +2517,13 @@ "@tokenizer/token" ] }, + "styled-jsx@5.1.6_react@19.2.4": { + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "dependencies": [ + "client-only", + "react" + ] + }, "sucrase@3.35.1": { "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", "dependencies": [ @@ -2413,7 +2703,7 @@ "@oxc-project/runtime", "lightningcss", "picomatch", - "postcss", + "postcss@8.5.8", "rolldown", "tinyglobby" ], @@ -2586,6 +2876,11 @@ ] } }, + "packages/next": { + "dependencies": [ + "npm:next@16" + ] + }, "packages/react": { "packageJson": { "dependencies": [ diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index d60afdfd..7632bbc8 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -10,6 +10,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Added +- Removed and cleaned up the types and functions exported from the main `/` entry point to reduce import noise, and introduced `/identity`, `/shared`, and `/crypto` as direct entry points for specific utilities. Utilities and types previously exposed via `/` are now accessible through these direct entry points. Additionally, removed the `StrippedUserIdentity` Zod schema and added the `UpdateSessionOptions` type. [#141](https://github.com/aura-stack-ts/auth/pull/141) + - Introduced experimental credentials-based authentication via the `/session` endpoint, enabling username/password sign-in on the client side. [#136](https://github.com/aura-stack-ts/auth/pull/136) - Introduced experimental credentials-based authentication via the `signInCredentials` API, enabling username/password sign-in on the server side. [#136](https://github.com/aura-stack-ts/auth/pull/136) diff --git a/packages/core/deno.json b/packages/core/deno.json index fcf6e156..ac22343b 100644 --- a/packages/core/deno.json +++ b/packages/core/deno.json @@ -7,6 +7,11 @@ }, "exports": { ".": "./src/index.ts", + "./client": "./src/client/index.ts", + "./identity": "./src/shared/identity.ts", + "./crypto": "./src/shared/crypto.ts", + "./shared": "./src/shared/index.ts", + "./types": "./src/@types/index.ts", "./oauth": "./src/oauth/index.ts", "./oauth/atlassian": "./src/oauth/atlassian.ts", "./oauth/bitbucket": "./src/oauth/bitbucket.ts", @@ -21,9 +26,7 @@ "./oauth/spotify": "./src/oauth/spotify.ts", "./oauth/strava": "./src/oauth/strava.ts", "./oauth/twitch": "./src/oauth/twitch.ts", - "./oauth/x": "./src/oauth/x.ts", - "./types": "./src/@types/index.ts", - "./client": "./src/client/index.ts" + "./oauth/x": "./src/oauth/x.ts" }, "imports": { "@/": "./src/", diff --git a/packages/core/package.json b/packages/core/package.json index bda285cc..6c0c01ac 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -37,6 +37,11 @@ "import": "./dist/index.js", "require": "./dist/index.cjs" }, + "./oauth": { + "types": "./dist/oauth/index.d.ts", + "import": "./dist/oauth/index.js", + "require": "./dist/oauth/index.cjs" + }, "./oauth/*": { "types": "./dist/oauth/*.d.ts", "import": "./dist/oauth/*.js", @@ -51,6 +56,21 @@ "types": "./dist/client/index.d.ts", "import": "./dist/client/index.js", "require": "./dist/client/index.cjs" + }, + "./identity": { + "types": "./dist/shared/identity.d.ts", + "import": "./dist/shared/identity.js", + "require": "./dist/shared/identity.cjs" + }, + "./crypto": { + "types": "./dist/shared/crypto.d.ts", + "import": "./dist/shared/crypto.js", + "require": "./dist/shared/crypto.cjs" + }, + "./shared": { + "types": "./dist/shared/index.d.ts", + "import": "./dist/shared/index.js", + "require": "./dist/shared/index.cjs" } }, "keywords": [ diff --git a/packages/core/src/@types/config.ts b/packages/core/src/@types/config.ts index 76f8934e..061673e1 100644 --- a/packages/core/src/@types/config.ts +++ b/packages/core/src/@types/config.ts @@ -9,45 +9,6 @@ import type { EditableShape, Prettify, ShapeToObject } from "@/@types/utility.ts import type { OAuthProviderCredentials, OAuthProviderRecord } from "@/@types/oauth.ts" import type { JWTKey, SessionConfig, SessionStrategy, User, UserShape } from "@/@types/session.ts" -export interface CredentialsPayload { - username: string - password: string -} - -/** - * Context provided to the credentials provider's authorize function. - * It includes the credentials sent by the user and hashing utilities. - */ -export interface CredentialsProviderContext { - /** - * User-provided credentials (e.g., email, password). - */ - credentials: T - /** - * Hashes a password using the internal hashing algorithm (PBKDF2). - */ - deriveSecret: (password: string, salt?: string, iterations?: number) => Promise - /** - * Verifies a password against a hashed value. - */ - verifySecret: (password: string, hashedPassword: string) => Promise -} - -/** - * Interface for the credentials provider. - */ -export interface CredentialsProvider = EditableShape> { - hash?: (password: string, salt?: string, iterations?: number) => Promise - verify?: (password: string, hashedPassword: string) => Promise - /** - * Authenticates a user using credentials. - * Must return a User object or the identity type if the identity schema is provided. - */ - authorize: ( - ctx: CredentialsProviderContext - ) => Promise | null> | ShapeToObject | null -} - /** * Main configuration interface for Aura Auth. * This is the user-facing configuration object passed to `createAuth()`. @@ -295,6 +256,45 @@ export interface IdentityConfig = typeof UserIdent unknownKeys?: "passthrough" | "strict" | "strip" } +export interface CredentialsPayload { + username: string + password: string +} + +/** + * Context provided to the credentials provider's authorize function. + * It includes the credentials sent by the user and hashing utilities. + */ +export interface CredentialsProviderContext { + /** + * User-provided credentials (e.g., email, password). + */ + credentials: T + /** + * Hashes a password using the internal hashing algorithm (PBKDF2). + */ + deriveSecret: (password: string, salt?: string, iterations?: number) => Promise + /** + * Verifies a password against a hashed value. + */ + verifySecret: (password: string, hashedPassword: string) => Promise +} + +/** + * Interface for the credentials provider. + */ +export interface CredentialsProvider = EditableShape> { + hash?: (password: string, salt?: string, iterations?: number) => Promise + verify?: (password: string, hashedPassword: string) => Promise + /** + * Authenticates a user using credentials. + * Must return a User object or the identity type if the identity schema is provided. + */ + authorize: ( + ctx: CredentialsProviderContext + ) => Promise | null> | ShapeToObject | null +} + export interface RouterGlobalContext { oauth: OAuthProviderRecord credentials?: CredentialsProvider diff --git a/packages/core/src/@types/session.ts b/packages/core/src/@types/session.ts index 496cb09a..275f6c05 100644 --- a/packages/core/src/@types/session.ts +++ b/packages/core/src/@types/session.ts @@ -261,10 +261,12 @@ export interface GetSessionReturn { headers: Headers } -export interface GetSessionAPIOptions { +export interface GetSessionOptions { headers: HeadersInit } +export type GetSessionAPIOptions = GetSessionOptions + export type SessionResponse = | { session: Session; headers: Headers; authenticated: true } | { session: null; headers: Headers; authenticated: false } @@ -280,6 +282,8 @@ export interface SignOutAPIOptions { skipCSRFCheck?: boolean } +export type UpdateSessionOptions = DeepPartial> + export interface UpdateSessionAPIOptions { headers: HeadersInit session: DeepPartial> diff --git a/packages/core/src/actions/callback/callback.ts b/packages/core/src/actions/callback/callback.ts index dab8a46d..79d2d012 100644 --- a/packages/core/src/actions/callback/callback.ts +++ b/packages/core/src/actions/callback/callback.ts @@ -1,6 +1,6 @@ import { z } from "zod/v4" import { createEndpoint, createEndpointConfig, HeadersBuilder } from "@aura-stack/router" -import { createCSRF } from "@/shared/security.ts" +import { createCSRF } from "@/shared/crypto.ts" import { cacheControl } from "@/shared/headers.ts" import { isRelativeURL, isSameOrigin, isTrustedOrigin } from "@/shared/assert.ts" import { getUserInfo } from "@/actions/callback/userinfo.ts" diff --git a/packages/core/src/actions/callback/userinfo.ts b/packages/core/src/actions/callback/userinfo.ts index dee59df5..f8982113 100644 --- a/packages/core/src/actions/callback/userinfo.ts +++ b/packages/core/src/actions/callback/userinfo.ts @@ -1,5 +1,5 @@ import { fetchAsync } from "@/shared/fetch-async.ts" -import { createSecretValue } from "@/shared/security.ts" +import { createSecretValue } from "@/shared/crypto.ts" import { AURA_AUTH_VERSION } from "@/shared/utils.ts" import { OAuthErrorResponse } from "@/schemas.ts" import { isNativeError, isOAuthProtocolError, OAuthProtocolError } from "@/shared/errors.ts" diff --git a/packages/core/src/actions/csrfToken/csrfToken.ts b/packages/core/src/actions/csrfToken/csrfToken.ts index 5eb860a1..b546a41d 100644 --- a/packages/core/src/actions/csrfToken/csrfToken.ts +++ b/packages/core/src/actions/csrfToken/csrfToken.ts @@ -1,5 +1,5 @@ import { createEndpoint } from "@aura-stack/router" -import { createCSRF } from "@/shared/security.ts" +import { createCSRF } from "@/shared/crypto.ts" import { secureApiHeaders } from "@/shared/headers.ts" import { setCookie, getCookie } from "@/cookie.ts" diff --git a/packages/core/src/actions/signIn/authorization-url.ts b/packages/core/src/actions/signIn/authorization-url.ts index 853aa64d..3289d0b4 100644 --- a/packages/core/src/actions/signIn/authorization-url.ts +++ b/packages/core/src/actions/signIn/authorization-url.ts @@ -1,7 +1,7 @@ import { OAuthProvider } from "@/@types/index.ts" import { AuthInternalError } from "@/shared/errors.ts" import { OAuthAuthorization } from "@/schemas.ts" -import { createPKCE, createSecretValue } from "@/shared/security.ts" +import { createPKCE, createSecretValue } from "@/shared/crypto.ts" import type { GlobalContext } from "@aura-stack/router" export const setSearchParams = (url: URL, params: Record) => { diff --git a/packages/core/src/api/credentials.ts b/packages/core/src/api/credentials.ts index b9261eac..317325c9 100644 --- a/packages/core/src/api/credentials.ts +++ b/packages/core/src/api/credentials.ts @@ -1,7 +1,7 @@ import { HeadersBuilder } from "@aura-stack/router" import { secureApiHeaders } from "@/shared/headers.ts" import { AuthValidationError } from "@/shared/errors.ts" -import { createCSRF, hashPassword, verifyPassword } from "@/shared/security.ts" +import { createCSRF, hashPassword, verifyPassword } from "@/shared/crypto.ts" import { createRedirectTo, getBaseURL, getOriginURL } from "@/actions/signIn/authorization.ts" import type { SignInCredentialsOptions, SignInCredentialsReturn } from "@/@types/session.ts" diff --git a/packages/core/src/client/client.ts b/packages/core/src/client/client.ts index 59b33062..398b24a8 100644 --- a/packages/core/src/client/client.ts +++ b/packages/core/src/client/client.ts @@ -9,10 +9,12 @@ import type { SignInOptions, SignOutOptions, User, - DeepPartial, CredentialsPayload, + UpdateSessionOptions, } from "@/@types/index.ts" +export type { AuthClientOptions } + export const createClient = createClientAPI export const createAuthClient = (options: AuthClientOptions) => { @@ -103,7 +105,7 @@ export const createAuthClient = (options: AuthC } } - const updateSession = async (session: DeepPartial>) => { + const updateSession = async (session: UpdateSessionOptions) => { try { const csrfToken = await getCSRFToken() if (!csrfToken) { diff --git a/packages/core/src/client/index.ts b/packages/core/src/client/index.ts index 43d31c02..f0057c19 100644 --- a/packages/core/src/client/index.ts +++ b/packages/core/src/client/index.ts @@ -1,5 +1 @@ -export { createClient, createAuthClient } from "@/client/client.ts" - -export type { AuthClient, AuthClientOptions, SignInOptions, SignOutOptions } from "@/@types/index.ts" - -export type { Client, ClientOptions } from "@aura-stack/router/types" +export { createAuthClient, type AuthClientOptions } from "@/client/client.ts" diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 0e71abbd..ad3ad62c 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,57 +1,2 @@ export { createAuth } from "@/createAuth.ts" -export { createJoseInstance } from "@/jose.ts" -export { createSyslogMessage } from "@/shared/logger.ts" -export { builtInOAuthProviders } from "@/oauth/index.ts" -export { createAuthClient, createClient } from "@/client/index.ts" -export { createIdentity, UserIdentity, StrippedUserIdentity } from "@/shared/identity.ts" - -export type * from "@/client/index.ts" -export type { - AuthConfig, - AuthInstance, - JoseInstance, - Session, - User, - CookieConfig, - OAuthProvider, - OAuthProviderConfig, - OAuthProviderCredentials, - ErrorType, - Logger, - LogLevel, - TrustedOrigin, - BuiltInOAuthProvider, - LiteralUnion, - AuthAPI, - Prettify, - GetSessionAPIOptions, - SignInAPIOptions, - SignOutAPIOptions, - JWTConfig, - JWTKey, - JWTMode, - JWTSigningAlgorithm, - JWTKeyAlgorithm, - JWTEncryptedMode, - JWTSignedMode, - JWTEncryptionAlgorithm, - JWTSealedMode, - JWTConfigBase, - JWTExpirationStrategy, - StatelessStrategyConfig, - SessionConfig, - SessionStrategy, - UserIdentityType, - UserShape, - CredentialsPayload, - DeepPartial, - UpdateSessionAPIOptions, - UpdateSessionReturn, - SignOutOptions, - SignInCredentialsOptions, - CredentialsProvider, - CookieStoreConfig, - CookieStrategyAttributes, -} from "@/@types/index.ts" - -export type { Merge, ShapeToObject, EditableShape, InferShape, InferIdentity, InferAuthIdentity } from "@/@types/utility.ts" +export type { User, Session, AuthConfig, AuthInstance } from "@/@types/index.ts" diff --git a/packages/core/src/session/stateless.ts b/packages/core/src/session/stateless.ts index 6dc9310e..36ec8f20 100644 --- a/packages/core/src/session/stateless.ts +++ b/packages/core/src/session/stateless.ts @@ -1,5 +1,5 @@ import { getCookie } from "@/cookie.ts" -import { verifyCSRF } from "@/shared/security.ts" +import { verifyCSRF } from "@/shared/crypto.ts" import { getErrorName } from "@/shared/utils.ts" import { AuthSecurityError } from "@/shared/errors.ts" import { createJoseManager } from "@/session/jose-manager.ts" diff --git a/packages/core/src/shared/security.ts b/packages/core/src/shared/crypto.ts similarity index 100% rename from packages/core/src/shared/security.ts rename to packages/core/src/shared/crypto.ts diff --git a/packages/core/src/shared/identity.ts b/packages/core/src/shared/identity.ts index e3d7900b..ae782481 100644 --- a/packages/core/src/shared/identity.ts +++ b/packages/core/src/shared/identity.ts @@ -1,5 +1,7 @@ import { string, z } from "zod/v4" -import { EditableShape } from "@/@types/utility.ts" +import type { EditableShape } from "@/@types/utility.ts" + +export type { InferAuthIdentity, InferIdentity, InferShape, ShapeToObject, EditableShape } from "@/@types/utility.ts" export const UserIdentity = z.object({ sub: string(), @@ -8,8 +10,6 @@ export const UserIdentity = z.object({ email: string().nullable().optional(), }) -export const StrippedUserIdentity = UserIdentity.omit({ sub: true }) - export type UserShape = (typeof UserIdentity)["shape"] export type UserIdentityType = z.infer diff --git a/packages/core/src/shared/index.ts b/packages/core/src/shared/index.ts new file mode 100644 index 00000000..ef0498a5 --- /dev/null +++ b/packages/core/src/shared/index.ts @@ -0,0 +1,5 @@ +/** + * This file re-exports the public functions + */ +export { createBasicAuthHeader } from "@/shared/utils.ts" +export { createSyslogMessage } from "@/shared/logger.ts" diff --git a/packages/core/test/actions/callback/access-token.test.ts b/packages/core/test/actions/callback/access-token.test.ts index 8de87603..86fed620 100644 --- a/packages/core/test/actions/callback/access-token.test.ts +++ b/packages/core/test/actions/callback/access-token.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect, vi } from "vitest" -import { createPKCE } from "@/shared/security.ts" +import { createPKCE } from "@/shared/crypto.ts" import { oauthCustomService } from "@test/presets.ts" import { createAccessToken } from "@/actions/callback/access-token.ts" diff --git a/packages/core/test/actions/callback/callback.test.ts b/packages/core/test/actions/callback/callback.test.ts index 6b21d850..47d76ecf 100644 --- a/packages/core/test/actions/callback/callback.test.ts +++ b/packages/core/test/actions/callback/callback.test.ts @@ -1,6 +1,6 @@ import { describe, test, expect, vi, beforeEach, afterEach } from "vitest" import { GET, jose, oauthCustomService } from "@test/presets.ts" -import { createPKCE } from "@/shared/security.ts" +import { createPKCE } from "@/shared/crypto.ts" import { setCookie, getSetCookie } from "@/cookie.ts" import { AURA_AUTH_VERSION } from "@/shared/utils.ts" import { createAuth } from "@/createAuth.ts" diff --git a/packages/core/test/actions/session/session.test.ts b/packages/core/test/actions/session/session.test.ts index 3e0eaa55..3de520a0 100644 --- a/packages/core/test/actions/session/session.test.ts +++ b/packages/core/test/actions/session/session.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect, vi, afterEach, beforeEach } from "vitest" -import { createPKCE } from "@/shared/security.ts" +import { createPKCE } from "@/shared/crypto.ts" import { AURA_AUTH_VERSION } from "@/shared/utils.ts" import { GET, jose, sessionPayload } from "@test/presets.ts" import { setCookie, getSetCookie, createCookieStore } from "@/cookie.ts" diff --git a/packages/core/test/actions/signOut/signOut.test.ts b/packages/core/test/actions/signOut/signOut.test.ts index cdb4001a..7fdfd1d4 100644 --- a/packages/core/test/actions/signOut/signOut.test.ts +++ b/packages/core/test/actions/signOut/signOut.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect, vi, beforeEach, afterEach } from "vitest" -import { createCSRF } from "@/shared/security.ts" +import { createCSRF } from "@/shared/crypto.ts" import { POST, jose, sessionPayload } from "@test/presets.ts" beforeEach(() => { diff --git a/packages/core/test/actions/updateSession/updateSession.test.ts b/packages/core/test/actions/updateSession/updateSession.test.ts index 4315e018..d99004d1 100644 --- a/packages/core/test/actions/updateSession/updateSession.test.ts +++ b/packages/core/test/actions/updateSession/updateSession.test.ts @@ -1,4 +1,4 @@ -import { createCSRF } from "@/shared/security.ts" +import { createCSRF } from "@/shared/crypto.ts" import { jose, PATCH } from "@test/presets.ts" import { describe, test, expect } from "vitest" diff --git a/packages/core/test/api/updateSession.test.ts b/packages/core/test/api/updateSession.test.ts index 30630fce..9523930b 100644 --- a/packages/core/test/api/updateSession.test.ts +++ b/packages/core/test/api/updateSession.test.ts @@ -2,7 +2,7 @@ import { describe, test, expect } from "vitest" import { z } from "zod/v4" import { createAuth } from "@/createAuth.ts" import { api, jose } from "@test/presets.ts" -import { createCSRF } from "@/shared/security.ts" +import { createCSRF } from "@/shared/crypto.ts" import { UserIdentity } from "@/shared/identity.ts" describe("updateSession API", () => { diff --git a/packages/core/test/env.test.ts b/packages/core/test/env.test.ts index 6dfe6876..ce5e3c04 100644 --- a/packages/core/test/env.test.ts +++ b/packages/core/test/env.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, test, vi } from "vitest" import { env } from "@/shared/env.ts" -import { createSecretValue } from "@/shared/security.ts" +import { createSecretValue } from "@/shared/crypto.ts" describe("env", () => { afterEach(() => { diff --git a/packages/core/test/jose.test.ts b/packages/core/test/jose.test.ts index 14e7ddda..9d2c5fa2 100644 --- a/packages/core/test/jose.test.ts +++ b/packages/core/test/jose.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, test, vi } from "vitest" import { createJoseInstance } from "@/jose.ts" -import { createSecretValue } from "@/shared/security.ts" +import { createSecretValue } from "@/shared/crypto.ts" const payload = { sub: "1234567890", diff --git a/packages/core/test/secure.test.ts b/packages/core/test/secure.test.ts index faf41e54..d38875f1 100644 --- a/packages/core/test/secure.test.ts +++ b/packages/core/test/secure.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect } from "vitest" -import { createPKCE } from "@/shared/security.ts" +import { createPKCE } from "@/shared/crypto.ts" describe("createPKCE", () => { test("generates a valid code verifier and code challenge", async () => { diff --git a/packages/core/test/types.test-d.ts b/packages/core/test/types.test-d.ts index ce85b84c..4b30fb89 100644 --- a/packages/core/test/types.test-d.ts +++ b/packages/core/test/types.test-d.ts @@ -4,7 +4,6 @@ import { createAuth } from "@/createAuth.ts" import { UserIdentity } from "@/shared/identity.ts" import { github, type GitHubProfile } from "@/oauth/github.ts" import { JWTHeaderParameters, JWTVerifyOptions, TypedJWTPayload } from "@aura-stack/jose" -import type { AuthConfig, AuthInstance, OAuthProviderCredentials, User } from "@/index.ts" import type { GetSessionAPIOptions, SessionResponse, @@ -12,6 +11,8 @@ import type { UpdateSessionReturn, UserShape, } from "@/@types/session.ts" +import type { AuthConfig, AuthInstance, User } from "@/index.ts" +import type { OAuthProviderCredentials } from "@/@types/oauth.ts" import type { EditableShape, ShapeToObject } from "@/@types/utility.ts" describe("createAuth", () => { diff --git a/packages/next/deno.json b/packages/next/deno.json index d117de75..7126ce78 100644 --- a/packages/next/deno.json +++ b/packages/next/deno.json @@ -5,7 +5,11 @@ "exports": { ".": "./src/index.ts", "./client": "./src/client.ts", - "./oauth": "./src/oauth/index.ts" + "./oauth": "./src/oauth/index.ts", + "./identity": "./src/_core/identity.ts", + "./crypto": "./src/_core/crypto.ts", + "./shared": "./src/_core/shared.ts", + "./types": "./src/@types/index.ts" }, "imports": { "@/": "./src/", diff --git a/packages/next/package.json b/packages/next/package.json index 0e50e7f2..f8d2276e 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -42,7 +42,22 @@ "import": "./dist/oauth/index.js", "require": "./dist/oauth/index.cjs" }, - "./types": "./dist/types.d.ts" + "./identity": { + "types": "./dist/_core/identity.d.ts", + "import": "./dist/_core/identity.js", + "require": "./dist/_core/identity.cjs" + }, + "./crypto": { + "types": "./dist/_core/crypto.d.ts", + "import": "./dist/_core/crypto.js", + "require": "./dist/_core/crypto.cjs" + }, + "./shared": { + "types": "./dist/_core/shared.d.ts", + "import": "./dist/_core/shared.js", + "require": "./dist/_core/shared.cjs" + }, + "./types": "./dist/@types/index.d.ts" }, "keywords": [], "author": "Aura Stack | Hernan Alvarado ", diff --git a/packages/next/src/@types/index.ts b/packages/next/src/@types/index.ts new file mode 100644 index 00000000..a6e6c16f --- /dev/null +++ b/packages/next/src/@types/index.ts @@ -0,0 +1 @@ +export type * from "@/@types/core" diff --git a/packages/next/src/_core/crypto.ts b/packages/next/src/_core/crypto.ts new file mode 100644 index 00000000..43af97db --- /dev/null +++ b/packages/next/src/_core/crypto.ts @@ -0,0 +1 @@ +export * from "@aura-stack/react/crypto" diff --git a/packages/next/src/_core/identity.ts b/packages/next/src/_core/identity.ts new file mode 100644 index 00000000..24f471d7 --- /dev/null +++ b/packages/next/src/_core/identity.ts @@ -0,0 +1 @@ +export * from "@aura-stack/react/identity" diff --git a/packages/next/src/_core/shared.ts b/packages/next/src/_core/shared.ts new file mode 100644 index 00000000..16044265 --- /dev/null +++ b/packages/next/src/_core/shared.ts @@ -0,0 +1 @@ +export * from "@aura-stack/react/shared" diff --git a/packages/next/src/createAuth.ts b/packages/next/src/createAuth.ts index 23a96dc2..e9b845e8 100644 --- a/packages/next/src/createAuth.ts +++ b/packages/next/src/createAuth.ts @@ -1,11 +1,6 @@ -import { - createAuth as createAuthInstance, - type AuthConfig, - type EditableShape, - type ShapeToObject, - type UserShape, -} from "@aura-stack/auth" import { api } from "@/lib/api" +import { createAuth as createAuthInstance, type AuthConfig } from "@aura-stack/react" +import type { EditableShape, ShapeToObject, UserShape } from "@aura-stack/react/identity" export const createAuth = >(config: AuthConfig) => { const auth = createAuthInstance(config) diff --git a/packages/next/src/index.ts b/packages/next/src/index.ts index decd4f26..3339352d 100644 --- a/packages/next/src/index.ts +++ b/packages/next/src/index.ts @@ -1,4 +1,2 @@ export { createAuth } from "@/createAuth" -export * from "@/client" -export { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/auth/oauth/index" export type { User, Session, AuthConfig, AuthInstance } from "@/@types/core.ts" diff --git a/packages/next/src/lib/api.ts b/packages/next/src/lib/api.ts index b26a9ddd..bba33361 100644 --- a/packages/next/src/lib/api.ts +++ b/packages/next/src/lib/api.ts @@ -1,17 +1,25 @@ import { redirect } from "next/navigation" import { cookies, headers } from "next/headers" -import type { - AuthInstance, - BuiltInOAuthProvider, +import type { AuthInstance, Session, User } from "@aura-stack/react" +import { + GetSessionAPIOptions, + SignInAPIOptions, + SignOutAPIOptions, CredentialsPayload, DeepPartial, - GetSessionAPIOptions, LiteralUnion, + BuiltInOAuthProvider, +} from "@aura-stack/react/types" +export type { Session, + GetSessionAPIOptions, SignInAPIOptions, SignOutAPIOptions, - User, -} from "@aura-stack/auth" + CredentialsPayload, + DeepPartial, + LiteralUnion, + BuiltInOAuthProvider, +} from "@aura-stack/react/types" export const getSession = ({ api }: AuthInstance) => { return async (options?: GetSessionAPIOptions): Promise | null> => { diff --git a/packages/next/src/oauth/index.ts b/packages/next/src/oauth/index.ts index 6b627037..b1fa6473 100644 --- a/packages/next/src/oauth/index.ts +++ b/packages/next/src/oauth/index.ts @@ -1 +1 @@ -export * from "@aura-stack/auth/oauth/index" +export * from "@aura-stack/react/oauth" diff --git a/packages/react/deno.json b/packages/react/deno.json index 798f9149..4e579a84 100644 --- a/packages/react/deno.json +++ b/packages/react/deno.json @@ -9,6 +9,10 @@ ".": "./src/index.tsx", "./hooks": "./src/hooks.ts", "./context": "./src/context.ts", + "./oauth": "./src/oauth/index.ts", + "./identity": "./src/_core/identity.ts", + "./crypto": "./src/_core/crypto.ts", + "./shared": "./src/_core/shared.ts", "./types": "./src/types.ts" }, "imports": { diff --git a/packages/react/package.json b/packages/react/package.json index 4570ddf9..1fdd187c 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -48,6 +48,21 @@ "import": "./dist/oauth/index.js", "require": "./dist/oauth/index.cjs" }, + "./identity": { + "types": "./dist/_core/identity.d.ts", + "import": "./dist/_core/identity.js", + "require": "./dist/_core/identity.cjs" + }, + "./crypto": { + "types": "./dist/_core/crypto.d.ts", + "import": "./dist/_core/crypto.js", + "require": "./dist/_core/crypto.cjs" + }, + "./shared": { + "types": "./dist/_core/shared.d.ts", + "import": "./dist/_core/shared.js", + "require": "./dist/_core/shared.cjs" + }, "./types": "./dist/@types/index.d.ts" }, "keywords": [], @@ -64,7 +79,9 @@ "@aura-stack/tsconfig": "workspace:*", "@aura-stack/tsup-config": "workspace:*", "@testing-library/dom": "^10.4.1", - "@testing-library/react": "^16.3.2" + "@testing-library/react": "^16.3.2", + "react": "catalog:react", + "@types/react": "catalog:react" }, "peerDependencies": { "react": ">=19.0.0", diff --git a/packages/react/src/@types/core.ts b/packages/react/src/@types/core.ts index 553531a6..b738f3ab 100644 --- a/packages/react/src/@types/core.ts +++ b/packages/react/src/@types/core.ts @@ -1 +1 @@ -export type * from "@aura-stack/auth" +export type * from "@aura-stack/auth/types" diff --git a/packages/react/src/_core/crypto.ts b/packages/react/src/_core/crypto.ts new file mode 100644 index 00000000..daaa48f0 --- /dev/null +++ b/packages/react/src/_core/crypto.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/crypto" diff --git a/packages/react/src/_core/identity.ts b/packages/react/src/_core/identity.ts new file mode 100644 index 00000000..2588736b --- /dev/null +++ b/packages/react/src/_core/identity.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/identity" diff --git a/packages/react/src/_core/shared.ts b/packages/react/src/_core/shared.ts new file mode 100644 index 00000000..f67f5e78 --- /dev/null +++ b/packages/react/src/_core/shared.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/shared" diff --git a/packages/react/src/context.tsx b/packages/react/src/context.tsx index 465fcf8d..0144355a 100644 --- a/packages/react/src/context.tsx +++ b/packages/react/src/context.tsx @@ -1,16 +1,7 @@ "use client" - import { createContext, useCallback, useEffect, useMemo, useState, useTransition } from "react" -import type { - CredentialsPayload, - DeepPartial, - LiteralUnion, - BuiltInOAuthProvider, - Session, - SignInOptions, - SignOutOptions, - User, -} from "@aura-stack/auth" +import type { BuiltInOAuthProvider, Session, User } from "@aura-stack/auth" +import type { DeepPartial, LiteralUnion, CredentialsPayload, SignInOptions, SignOutOptions } from "@aura-stack/auth/types" import type { AuthProviderProps, AuthReactContextValue, UpdateSessionCallOptions } from "@/@types/types.ts" /** diff --git a/packages/react/src/hooks.ts b/packages/react/src/hooks.ts index 3cd9fc9a..d65be3d5 100644 --- a/packages/react/src/hooks.ts +++ b/packages/react/src/hooks.ts @@ -1,5 +1,4 @@ "use client" - import { use, useCallback, useRef } from "react" import type { CredentialsPayload, diff --git a/packages/react/src/index.tsx b/packages/react/src/index.tsx index c17ced2c..ee8b3bd7 100644 --- a/packages/react/src/index.tsx +++ b/packages/react/src/index.tsx @@ -1,5 +1,5 @@ +export { createAuth } from "@aura-stack/auth" export { createAuthClient, type AuthClientOptions } from "@aura-stack/auth/client" export { AuthProvider, type AuthProviderProps } from "@/context.tsx" export { useAuth, useSession, useSignIn, useSignInCredentials, useSignOut, useUpdateSession } from "@/hooks.ts" -export { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/auth/oauth/index" -export type { User, Session, AuthConfig, AuthInstance } from "@/@types/core.ts" +export type { User, Session, AuthConfig, AuthInstance } from "@aura-stack/auth" diff --git a/packages/react/tsconfig.json b/packages/react/tsconfig.json index 683985e3..fd78ea27 100644 --- a/packages/react/tsconfig.json +++ b/packages/react/tsconfig.json @@ -1,14 +1,14 @@ { - "extends": "@aura-stack/tsconfig/tsconfig.base.json", - "compilerOptions": { - "jsx": "react-jsx", - "allowImportingTsExtensions": true, - "noEmit": true, - "paths": { - "@/*": ["./src/*"], - "@test/*": ["./test/*"] - } - }, - "include": ["src", "test"], - "exclude": ["dist", "node_modules"] + "extends": "@aura-stack/tsconfig/tsconfig.base.json", + "compilerOptions": { + "jsx": "react-jsx", + "allowImportingTsExtensions": true, + "noEmit": true, + "paths": { + "@/*": ["./src/*"], + "@test/*": ["./test/*"], + }, + }, + "include": ["src", "test"], + "exclude": ["dist", "node_modules"], } diff --git a/packages/react/tsup.config.ts b/packages/react/tsup.config.ts index d970bafe..9f588da6 100644 --- a/packages/react/tsup.config.ts +++ b/packages/react/tsup.config.ts @@ -1,9 +1,12 @@ import { defineConfig } from "tsup" import { tsupConfig } from "@aura-stack/tsup-config" -export default defineConfig({ - ...tsupConfig, - banner: { - js: `"use client"`, +export default defineConfig([ + { + ...tsupConfig, + entry: ["src", "!src/index.ts"], + banner: { + //js: `"use client"`, + }, }, -}) +]) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 619c02a0..f6d986b3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -793,12 +793,6 @@ importers: '@aura-stack/auth': specifier: workspace:* version: link:../core - '@types/react': - specifier: '>=19.0.0' - version: 19.2.14 - react: - specifier: '>=19.0.0' - version: 19.2.4 devDependencies: '@aura-stack/tsconfig': specifier: workspace:* @@ -812,19 +806,12 @@ importers: '@testing-library/react': specifier: ^16.3.2 version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - - packages/template: - dependencies: - '@aura-stack/auth': - specifier: workspace:* - version: link:../core - devDependencies: - '@aura-stack/tsconfig': - specifier: workspace:* - version: link:../../configs/tsconfig - '@aura-stack/tsup-config': - specifier: workspace:* - version: link:../../configs/tsup-config + '@types/react': + specifier: catalog:react + version: 19.2.14 + react: + specifier: catalog:react + version: 19.2.4 packages: From b3134a6c4585ed77be28d46a04419ebd4d978082 Mon Sep 17 00:00:00 2001 From: Hernan Alvarado Date: Sat, 11 Apr 2026 21:31:27 -0500 Subject: [PATCH 3/9] fix(next): fix createAuth import from @aura-stack/react --- packages/next/src/client.ts | 1 + packages/next/src/createAuth.ts | 5 +++-- packages/next/src/lib/api.ts | 12 +----------- packages/react/package.json | 5 +++++ packages/react/src/index.tsx | 2 +- packages/react/src/server.ts | 1 + packages/react/tsconfig.json | 24 ++++++++++++------------ 7 files changed, 24 insertions(+), 26 deletions(-) create mode 100644 packages/react/src/server.ts diff --git a/packages/next/src/client.ts b/packages/next/src/client.ts index a5528b07..3c60505a 100644 --- a/packages/next/src/client.ts +++ b/packages/next/src/client.ts @@ -1,3 +1,4 @@ +"use client" export { createAuthClient, AuthProvider, diff --git a/packages/next/src/createAuth.ts b/packages/next/src/createAuth.ts index e9b845e8..d4876cc0 100644 --- a/packages/next/src/createAuth.ts +++ b/packages/next/src/createAuth.ts @@ -1,6 +1,7 @@ import { api } from "@/lib/api" -import { createAuth as createAuthInstance, type AuthConfig } from "@aura-stack/react" -import type { EditableShape, ShapeToObject, UserShape } from "@aura-stack/react/identity" +import { type AuthConfig } from "@aura-stack/react" +import { createAuth as createAuthInstance } from "@aura-stack/react/server" +import type { EditableShape, ShapeToObject, UserShape } from "@aura-stack/react/types" export const createAuth = >(config: AuthConfig) => { const auth = createAuthInstance(config) diff --git a/packages/next/src/lib/api.ts b/packages/next/src/lib/api.ts index bba33361..85e41886 100644 --- a/packages/next/src/lib/api.ts +++ b/packages/next/src/lib/api.ts @@ -1,17 +1,7 @@ import { redirect } from "next/navigation" import { cookies, headers } from "next/headers" import type { AuthInstance, Session, User } from "@aura-stack/react" -import { - GetSessionAPIOptions, - SignInAPIOptions, - SignOutAPIOptions, - CredentialsPayload, - DeepPartial, - LiteralUnion, - BuiltInOAuthProvider, -} from "@aura-stack/react/types" -export type { - Session, +import type { GetSessionAPIOptions, SignInAPIOptions, SignOutAPIOptions, diff --git a/packages/react/package.json b/packages/react/package.json index 1fdd187c..5f265258 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -33,6 +33,11 @@ "import": "./dist/index.js", "require": "./dist/index.cjs" }, + "./server": { + "types": "./dist/server.d.ts", + "import": "./dist/server.js", + "require": "./dist/server.cjs" + }, "./hooks": { "types": "./dist/hooks.d.ts", "import": "./dist/hooks.js", diff --git a/packages/react/src/index.tsx b/packages/react/src/index.tsx index ee8b3bd7..312b729b 100644 --- a/packages/react/src/index.tsx +++ b/packages/react/src/index.tsx @@ -1,4 +1,4 @@ -export { createAuth } from "@aura-stack/auth" +//export { createAuth } from "@aura-stack/auth" export { createAuthClient, type AuthClientOptions } from "@aura-stack/auth/client" export { AuthProvider, type AuthProviderProps } from "@/context.tsx" export { useAuth, useSession, useSignIn, useSignInCredentials, useSignOut, useUpdateSession } from "@/hooks.ts" diff --git a/packages/react/src/server.ts b/packages/react/src/server.ts new file mode 100644 index 00000000..b67bce1b --- /dev/null +++ b/packages/react/src/server.ts @@ -0,0 +1 @@ +export { createAuth } from "@aura-stack/auth" diff --git a/packages/react/tsconfig.json b/packages/react/tsconfig.json index fd78ea27..683985e3 100644 --- a/packages/react/tsconfig.json +++ b/packages/react/tsconfig.json @@ -1,14 +1,14 @@ { - "extends": "@aura-stack/tsconfig/tsconfig.base.json", - "compilerOptions": { - "jsx": "react-jsx", - "allowImportingTsExtensions": true, - "noEmit": true, - "paths": { - "@/*": ["./src/*"], - "@test/*": ["./test/*"], - }, - }, - "include": ["src", "test"], - "exclude": ["dist", "node_modules"], + "extends": "@aura-stack/tsconfig/tsconfig.base.json", + "compilerOptions": { + "jsx": "react-jsx", + "allowImportingTsExtensions": true, + "noEmit": true, + "paths": { + "@/*": ["./src/*"], + "@test/*": ["./test/*"] + } + }, + "include": ["src", "test"], + "exclude": ["dist", "node_modules"] } From 74e2edfce549cb398c78144201d11b68cda64ec3 Mon Sep 17 00:00:00 2001 From: Hernan Alvarado Date: Sun, 12 Apr 2026 11:14:16 -0500 Subject: [PATCH 4/9] chore: remove unused code --- apps/astro/package.json | 1 - apps/astro/src/@types/props.ts | 6 ----- apps/astro/src/@types/types.ts | 10 ------- apps/astro/src/contexts/auth.tsx | 2 +- .../src/lib/{client.ts => auth-client.ts} | 2 +- apps/astro/src/{ => lib}/auth.ts | 4 +-- apps/astro/src/lib/server.ts | 5 ++-- apps/astro/src/pages/api/auth/[...all].ts | 2 +- apps/nextjs/app-router/src/lib/auth.ts | 9 +++---- apps/nextjs/pages-router/package.json | 1 - apps/nextjs/pages-router/src/@types/props.ts | 7 +---- apps/nextjs/pages-router/src/@types/types.ts | 10 ------- .../src/components/auth-client.tsx | 2 +- .../nextjs/pages-router/src/contexts/auth.tsx | 2 +- .../src/lib/{client.ts => auth-client.ts} | 2 +- .../nextjs/pages-router/src/{ => lib}/auth.ts | 6 ++--- apps/nextjs/pages-router/src/pages/_app.tsx | 2 +- .../src/pages/api/auth/[...aura].ts | 2 +- apps/nextjs/pages-router/src/pages/index.tsx | 9 +++---- apps/react-router/app/@types/props.ts | 7 +---- apps/react-router/app/@types/types.ts | 10 ------- apps/react-router/app/actions/auth-server.ts | 5 ++-- apps/react-router/app/contexts/auth.tsx | 2 +- .../auth.client.ts => lib/auth-client.ts} | 0 apps/react-router/app/{ => lib}/auth.ts | 4 +-- apps/react-router/app/routes/api.auth.$.tsx | 2 +- apps/react-router/package.json | 1 - apps/tanstack-start/package.json | 1 - apps/tanstack-start/src/@types/props.ts | 6 ----- apps/tanstack-start/src/@types/types.ts | 10 ------- apps/tanstack-start/src/lib/auth-client.ts | 2 +- apps/tanstack-start/src/lib/auth-server.ts | 2 +- apps/tanstack-start/src/{ => lib}/auth.ts | 6 ++--- apps/tanstack-start/src/routes/api/auth.$.ts | 2 +- packages/hono/src/createAuth.ts | 9 ++----- packages/hono/src/index.ts | 27 ------------------- packages/hono/src/oauth/index.ts | 2 +- packages/next/CHANGELOG.md | 2 +- packages/next/README.md | 4 +-- packages/next/src/createAuth.ts | 2 +- packages/next/src/lib/api.ts | 3 ++- packages/react/src/context.tsx | 1 - packages/react/src/hooks.ts | 1 - packages/react/src/index.tsx | 1 - packages/react/src/oauth/index.ts | 2 +- pnpm-lock.yaml | 12 --------- 46 files changed, 47 insertions(+), 163 deletions(-) delete mode 100644 apps/astro/src/@types/props.ts delete mode 100644 apps/astro/src/@types/types.ts rename apps/astro/src/lib/{client.ts => auth-client.ts} (65%) rename apps/astro/src/{ => lib}/auth.ts (74%) delete mode 100644 apps/nextjs/pages-router/src/@types/types.ts rename apps/nextjs/pages-router/src/lib/{client.ts => auth-client.ts} (68%) rename apps/nextjs/pages-router/src/{ => lib}/auth.ts (53%) delete mode 100644 apps/react-router/app/@types/types.ts rename apps/react-router/app/{actions/auth.client.ts => lib/auth-client.ts} (100%) rename apps/react-router/app/{ => lib}/auth.ts (75%) delete mode 100644 apps/tanstack-start/src/@types/props.ts delete mode 100644 apps/tanstack-start/src/@types/types.ts rename apps/tanstack-start/src/{ => lib}/auth.ts (57%) diff --git a/apps/astro/package.json b/apps/astro/package.json index dc7213f3..2cc20ec2 100644 --- a/apps/astro/package.json +++ b/apps/astro/package.json @@ -16,7 +16,6 @@ "@astrojs/check": "^0.9.8", "@astrojs/node": "^10.0.2", "@astrojs/react": "^5.0.0", - "@aura-stack/auth": "workspace:*", "@aura-stack/react": "workspace:*", "@radix-ui/react-slot": "^1.2.4", "astro": "^6.0.5", diff --git a/apps/astro/src/@types/props.ts b/apps/astro/src/@types/props.ts deleted file mode 100644 index 0898f052..00000000 --- a/apps/astro/src/@types/props.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { Session } from "@aura-stack/auth" -import type { PropsWithChildren } from "react" - -export interface AuthProviderProps extends PropsWithChildren { - session?: Session | null -} diff --git a/apps/astro/src/@types/types.ts b/apps/astro/src/@types/types.ts deleted file mode 100644 index 63d2ea67..00000000 --- a/apps/astro/src/@types/types.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { authClient } from "@/lib/client" -import type { Session } from "@aura-stack/auth" - -export interface AuthContextValue { - session: Session | null - isLoading: boolean - isAuthenticated: boolean - signIn: typeof authClient.signIn - signOut: typeof authClient.signOut -} diff --git a/apps/astro/src/contexts/auth.tsx b/apps/astro/src/contexts/auth.tsx index 3d9518e2..63d05484 100644 --- a/apps/astro/src/contexts/auth.tsx +++ b/apps/astro/src/contexts/auth.tsx @@ -1,5 +1,5 @@ import { AuthProvider as AuraAuthProvider, type AuthProviderProps } from "@aura-stack/react" -import { authClient } from "@/lib/client" +import { authClient } from "@/lib/auth-client" export const AuthProvider = ({ children, initialSession }: Omit) => { return ( diff --git a/apps/astro/src/lib/client.ts b/apps/astro/src/lib/auth-client.ts similarity index 65% rename from apps/astro/src/lib/client.ts rename to apps/astro/src/lib/auth-client.ts index 746513b5..497d84ce 100644 --- a/apps/astro/src/lib/client.ts +++ b/apps/astro/src/lib/auth-client.ts @@ -1,4 +1,4 @@ -import { createAuthClient } from "@aura-stack/auth/client" +import { createAuthClient } from "@aura-stack/react" export const authClient = createAuthClient({ basePath: "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/api/auth", diff --git a/apps/astro/src/auth.ts b/apps/astro/src/lib/auth.ts similarity index 74% rename from apps/astro/src/auth.ts rename to apps/astro/src/lib/auth.ts index cf46bf86..90031a6c 100644 --- a/apps/astro/src/auth.ts +++ b/apps/astro/src/lib/auth.ts @@ -1,5 +1,5 @@ -import { createAuth } from "@aura-stack/auth" -import { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/auth/oauth/index" +import { createAuth } from "@aura-stack/react/server" +import { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/react/oauth" export const oauth = Object.keys(builtInOAuthProviders) as BuiltInOAuthProvider[] diff --git a/apps/astro/src/lib/server.ts b/apps/astro/src/lib/server.ts index bbb20690..86f87ed9 100644 --- a/apps/astro/src/lib/server.ts +++ b/apps/astro/src/lib/server.ts @@ -1,5 +1,6 @@ -import { api } from "@/auth" -import type { Session, SignOutAPIOptions, GetSessionAPIOptions } from "@aura-stack/auth" +import { api } from "@/lib/auth" +import type { Session } from "@aura-stack/react" +import type { SignOutAPIOptions, GetSessionAPIOptions } from "@aura-stack/react/types" export const getSession = async (request: Request, options?: GetSessionAPIOptions): Promise => { try { diff --git a/apps/astro/src/pages/api/auth/[...all].ts b/apps/astro/src/pages/api/auth/[...all].ts index eb44762d..1278c0ab 100644 --- a/apps/astro/src/pages/api/auth/[...all].ts +++ b/apps/astro/src/pages/api/auth/[...all].ts @@ -1,4 +1,4 @@ -import { handlers } from "@/auth" +import { handlers } from "@/lib/auth" import type { APIRoute } from "astro" export const GET: APIRoute = async ({ request }) => { diff --git a/apps/nextjs/app-router/src/lib/auth.ts b/apps/nextjs/app-router/src/lib/auth.ts index 322c4c84..757bf913 100644 --- a/apps/nextjs/app-router/src/lib/auth.ts +++ b/apps/nextjs/app-router/src/lib/auth.ts @@ -1,11 +1,8 @@ import { createAuth } from "@aura-stack/next" -//import { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/next/oauth" -//console.log("Built-in OAuth providers:", builtInOAuthProviders) +import { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/next/oauth" -//export const oauth = Object.keys(builtInOAuthProviders) as BuiltInOAuthProvider[] -export const oauth = [] -//export const providers = [builtInOAuthProviders.github(), builtInOAuthProviders.gitlab(), builtInOAuthProviders.bitbucket()] -export const providers = [{}, {}, {}] +export const oauth = Object.keys(builtInOAuthProviders) as BuiltInOAuthProvider[] +export const providers = [builtInOAuthProviders.github(), builtInOAuthProviders.gitlab(), builtInOAuthProviders.bitbucket()] export const { api, core } = createAuth({ oauth, diff --git a/apps/nextjs/pages-router/package.json b/apps/nextjs/pages-router/package.json index d28b8691..879c8393 100644 --- a/apps/nextjs/pages-router/package.json +++ b/apps/nextjs/pages-router/package.json @@ -11,7 +11,6 @@ "format:check": "oxfmt --check" }, "dependencies": { - "@aura-stack/auth": "workspace:*", "@aura-stack/react": "workspace:*", "@radix-ui/react-slot": "^1.2.4", "lucide-react": "catalog:lucide-react", diff --git a/apps/nextjs/pages-router/src/@types/props.ts b/apps/nextjs/pages-router/src/@types/props.ts index 6dc61cd9..f250af92 100644 --- a/apps/nextjs/pages-router/src/@types/props.ts +++ b/apps/nextjs/pages-router/src/@types/props.ts @@ -1,12 +1,7 @@ -import type { Session } from "@aura-stack/auth" -import type { ComponentProps, PropsWithChildren } from "react" +import type { ComponentProps } from "react" export interface ButtonProps extends ComponentProps<"button"> { variant?: "default" | "outline" size?: "default" | "sm" | "lg" | "icon" | "icon-sm" | "icon-lg" asChild?: boolean } - -export interface AuthProviderProps extends PropsWithChildren { - session?: Session | null -} diff --git a/apps/nextjs/pages-router/src/@types/types.ts b/apps/nextjs/pages-router/src/@types/types.ts deleted file mode 100644 index 63d2ea67..00000000 --- a/apps/nextjs/pages-router/src/@types/types.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { authClient } from "@/lib/client" -import type { Session } from "@aura-stack/auth" - -export interface AuthContextValue { - session: Session | null - isLoading: boolean - isAuthenticated: boolean - signIn: typeof authClient.signIn - signOut: typeof authClient.signOut -} diff --git a/apps/nextjs/pages-router/src/components/auth-client.tsx b/apps/nextjs/pages-router/src/components/auth-client.tsx index 365d97c1..b9f4617d 100644 --- a/apps/nextjs/pages-router/src/components/auth-client.tsx +++ b/apps/nextjs/pages-router/src/components/auth-client.tsx @@ -1,5 +1,5 @@ import { LayoutDashboard } from "lucide-react" -import { Button } from "./ui/button" +import { Button } from "@/components/ui/button" import { useAuth } from "@aura-stack/react" export const AuthClient = () => { diff --git a/apps/nextjs/pages-router/src/contexts/auth.tsx b/apps/nextjs/pages-router/src/contexts/auth.tsx index 3d9518e2..63d05484 100644 --- a/apps/nextjs/pages-router/src/contexts/auth.tsx +++ b/apps/nextjs/pages-router/src/contexts/auth.tsx @@ -1,5 +1,5 @@ import { AuthProvider as AuraAuthProvider, type AuthProviderProps } from "@aura-stack/react" -import { authClient } from "@/lib/client" +import { authClient } from "@/lib/auth-client" export const AuthProvider = ({ children, initialSession }: Omit) => { return ( diff --git a/apps/nextjs/pages-router/src/lib/client.ts b/apps/nextjs/pages-router/src/lib/auth-client.ts similarity index 68% rename from apps/nextjs/pages-router/src/lib/client.ts rename to apps/nextjs/pages-router/src/lib/auth-client.ts index 4a066c25..00a7f92c 100644 --- a/apps/nextjs/pages-router/src/lib/client.ts +++ b/apps/nextjs/pages-router/src/lib/auth-client.ts @@ -1,4 +1,4 @@ -import { createAuthClient } from "@aura-stack/auth" +import { createAuthClient } from "@aura-stack/react" export const authClient = createAuthClient({ baseURL: "http://localhost:3000", diff --git a/apps/nextjs/pages-router/src/auth.ts b/apps/nextjs/pages-router/src/lib/auth.ts similarity index 53% rename from apps/nextjs/pages-router/src/auth.ts rename to apps/nextjs/pages-router/src/lib/auth.ts index d605f985..0fb6b0fd 100644 --- a/apps/nextjs/pages-router/src/auth.ts +++ b/apps/nextjs/pages-router/src/lib/auth.ts @@ -1,9 +1,9 @@ -import { type AuthInstance, createAuth } from "@aura-stack/auth" -import { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/auth/oauth/index" +import { createAuth } from "@aura-stack/react/server" +import { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/react/oauth" export const oauth = Object.keys(builtInOAuthProviders) as BuiltInOAuthProvider[] -export const { handlers, jose, api }: AuthInstance = createAuth({ +export const { api, handlers } = createAuth({ oauth, basePath: "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/api/auth", }) diff --git a/apps/nextjs/pages-router/src/pages/_app.tsx b/apps/nextjs/pages-router/src/pages/_app.tsx index 63060bc4..ec26186f 100644 --- a/apps/nextjs/pages-router/src/pages/_app.tsx +++ b/apps/nextjs/pages-router/src/pages/_app.tsx @@ -5,7 +5,7 @@ import "@/styles/globals.css" export default function App({ Component, pageProps }: AppProps) { return ( - + diff --git a/apps/nextjs/pages-router/src/pages/api/auth/[...aura].ts b/apps/nextjs/pages-router/src/pages/api/auth/[...aura].ts index 9ffa55bb..b913a967 100644 --- a/apps/nextjs/pages-router/src/pages/api/auth/[...aura].ts +++ b/apps/nextjs/pages-router/src/pages/api/auth/[...aura].ts @@ -1,4 +1,4 @@ -import { handlers } from "@/auth" +import { handlers } from "@/lib/auth" import type { NextApiRequest, NextApiResponse } from "next" const getBaseURL = (request: NextApiRequest) => { diff --git a/apps/nextjs/pages-router/src/pages/index.tsx b/apps/nextjs/pages-router/src/pages/index.tsx index 0607d112..02acc5a2 100644 --- a/apps/nextjs/pages-router/src/pages/index.tsx +++ b/apps/nextjs/pages-router/src/pages/index.tsx @@ -1,14 +1,13 @@ -import { api } from "@/auth" +import { api } from "@/lib/auth" import { AuthClient } from "@/components/auth-client" import { Fingerprint, LayoutDashboard } from "lucide-react" -import type { Session } from "@aura-stack/auth" -import type { GetServerSideProps, InferGetServerSidePropsType } from "next" +import type { InferGetServerSidePropsType } from "next" +import type { IncomingMessage } from "http" -export const getServerSideProps: GetServerSideProps<{ session: Session | null }> = async ({ req }) => { +export const getServerSideProps = async ({ req }: { req: IncomingMessage }) => { const session = await api.getSession({ headers: req.headers as Record, }) - return { props: { session: session.authenticated ? session.session : null, diff --git a/apps/react-router/app/@types/props.ts b/apps/react-router/app/@types/props.ts index b1762977..f250af92 100644 --- a/apps/react-router/app/@types/props.ts +++ b/apps/react-router/app/@types/props.ts @@ -1,9 +1,4 @@ -import type { Session } from "@aura-stack/auth/types" -import type { ComponentProps, PropsWithChildren } from "react" - -export interface AuthProviderProps extends PropsWithChildren { - session?: Session | null -} +import type { ComponentProps } from "react" export interface ButtonProps extends ComponentProps<"button"> { variant?: "default" | "outline" diff --git a/apps/react-router/app/@types/types.ts b/apps/react-router/app/@types/types.ts deleted file mode 100644 index d44ad4e5..00000000 --- a/apps/react-router/app/@types/types.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { Session } from "@aura-stack/auth" -import type { authClient } from "~/actions/auth.client" - -export interface AuthContextValue { - session: Session | null - isLoading: boolean - isAuthenticated: boolean - signIn: typeof authClient.signIn - signOut: typeof authClient.signOut -} diff --git a/apps/react-router/app/actions/auth-server.ts b/apps/react-router/app/actions/auth-server.ts index 9a40d385..8019afe7 100644 --- a/apps/react-router/app/actions/auth-server.ts +++ b/apps/react-router/app/actions/auth-server.ts @@ -1,6 +1,7 @@ -import { api } from "~/auth" +import { api } from "~/lib/auth" import { redirect } from "react-router" -import type { GetSessionAPIOptions, Session, SignInAPIOptions, SignOutAPIOptions } from "@aura-stack/auth" +import type { Session } from "@aura-stack/react" +import type { GetSessionAPIOptions, SignInAPIOptions, SignOutAPIOptions } from "@aura-stack/react/types" export const getSession = async (request: Request, options?: GetSessionAPIOptions): Promise => { try { diff --git a/apps/react-router/app/contexts/auth.tsx b/apps/react-router/app/contexts/auth.tsx index 9f0084b7..d7c619f1 100644 --- a/apps/react-router/app/contexts/auth.tsx +++ b/apps/react-router/app/contexts/auth.tsx @@ -1,5 +1,5 @@ import { AuthProvider as AuraAuthProvider, type AuthProviderProps } from "@aura-stack/react" -import { authClient } from "~/actions/auth.client" +import { authClient } from "~/lib/auth-client" export const AuthProvider = ({ children, initialSession }: Omit) => { return ( diff --git a/apps/react-router/app/actions/auth.client.ts b/apps/react-router/app/lib/auth-client.ts similarity index 100% rename from apps/react-router/app/actions/auth.client.ts rename to apps/react-router/app/lib/auth-client.ts diff --git a/apps/react-router/app/auth.ts b/apps/react-router/app/lib/auth.ts similarity index 75% rename from apps/react-router/app/auth.ts rename to apps/react-router/app/lib/auth.ts index cf46bf86..71de9935 100644 --- a/apps/react-router/app/auth.ts +++ b/apps/react-router/app/lib/auth.ts @@ -1,5 +1,5 @@ -import { createAuth } from "@aura-stack/auth" -import { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/auth/oauth/index" +import { createAuth } from "@aura-stack/react/server" +import { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/auth/oauth" export const oauth = Object.keys(builtInOAuthProviders) as BuiltInOAuthProvider[] diff --git a/apps/react-router/app/routes/api.auth.$.tsx b/apps/react-router/app/routes/api.auth.$.tsx index 1fb43cf4..fd86fb14 100644 --- a/apps/react-router/app/routes/api.auth.$.tsx +++ b/apps/react-router/app/routes/api.auth.$.tsx @@ -1,4 +1,4 @@ -import { handlers } from "~/auth" +import { handlers } from "~/lib/auth" import type { Route } from "./+types/api.auth.$" export const loader = async ({ request }: Route.LoaderArgs) => { diff --git a/apps/react-router/package.json b/apps/react-router/package.json index fa4a7806..14fbf879 100644 --- a/apps/react-router/package.json +++ b/apps/react-router/package.json @@ -11,7 +11,6 @@ "format:check": "oxfmt --check" }, "dependencies": { - "@aura-stack/auth": "workspace:*", "@aura-stack/react": "workspace:*", "@radix-ui/react-slot": "^1.2.4", "@react-router/node": "7.12.0", diff --git a/apps/tanstack-start/package.json b/apps/tanstack-start/package.json index e6ca99f4..b5ce00eb 100644 --- a/apps/tanstack-start/package.json +++ b/apps/tanstack-start/package.json @@ -11,7 +11,6 @@ "format:check": "oxfmt --check" }, "dependencies": { - "@aura-stack/auth": "workspace:*", "@aura-stack/react": "workspace:*", "@hookform/resolvers": "^5.2.2", "@radix-ui/react-label": "^2.1.8", diff --git a/apps/tanstack-start/src/@types/props.ts b/apps/tanstack-start/src/@types/props.ts deleted file mode 100644 index a1ab087e..00000000 --- a/apps/tanstack-start/src/@types/props.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { PropsWithChildren } from "react" -import type { Session } from "@aura-stack/auth" - -export interface AuthProviderProps extends PropsWithChildren { - session?: Session | null -} diff --git a/apps/tanstack-start/src/@types/types.ts b/apps/tanstack-start/src/@types/types.ts deleted file mode 100644 index d20e2240..00000000 --- a/apps/tanstack-start/src/@types/types.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { Session } from "@aura-stack/auth" -import type { authClient } from "@/lib/auth-client" - -export interface AuthContextValue { - session: Session | null - isAuthenticated: boolean - isLoading: boolean - signIn: typeof authClient.signIn - signOut: typeof authClient.signOut -} diff --git a/apps/tanstack-start/src/lib/auth-client.ts b/apps/tanstack-start/src/lib/auth-client.ts index 7e5687df..3eade0ef 100644 --- a/apps/tanstack-start/src/lib/auth-client.ts +++ b/apps/tanstack-start/src/lib/auth-client.ts @@ -1,4 +1,4 @@ -import { createAuthClient } from "@aura-stack/auth/client" +import { createAuthClient } from "@aura-stack/react" export const authClient = createAuthClient({ basePath: "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/api/auth", diff --git a/apps/tanstack-start/src/lib/auth-server.ts b/apps/tanstack-start/src/lib/auth-server.ts index 610c211b..491f32ea 100644 --- a/apps/tanstack-start/src/lib/auth-server.ts +++ b/apps/tanstack-start/src/lib/auth-server.ts @@ -1,4 +1,4 @@ -import { api } from "@/auth" +import { api } from "@/lib/auth" import { redirect } from "@tanstack/react-router" import { createServerFn } from "@tanstack/react-start" import { getRequest, getRequestHeaders } from "@tanstack/react-start/server" diff --git a/apps/tanstack-start/src/auth.ts b/apps/tanstack-start/src/lib/auth.ts similarity index 57% rename from apps/tanstack-start/src/auth.ts rename to apps/tanstack-start/src/lib/auth.ts index 6cab7c54..f5a74640 100644 --- a/apps/tanstack-start/src/auth.ts +++ b/apps/tanstack-start/src/lib/auth.ts @@ -1,9 +1,9 @@ -import { type AuthInstance, createAuth } from "@aura-stack/auth" -import { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/auth/oauth/index" +import { createAuth } from "@aura-stack/react/server" +import { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/react/oauth" export const oauth = Object.keys(builtInOAuthProviders) as BuiltInOAuthProvider[] -export const { handlers, jose, api }: AuthInstance = createAuth({ +export const { handlers, jose, api } = createAuth({ oauth, basePath: "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/api/auth", trustedProxyHeaders: true, diff --git a/apps/tanstack-start/src/routes/api/auth.$.ts b/apps/tanstack-start/src/routes/api/auth.$.ts index 88ef0e37..add153bb 100644 --- a/apps/tanstack-start/src/routes/api/auth.$.ts +++ b/apps/tanstack-start/src/routes/api/auth.$.ts @@ -1,4 +1,4 @@ -import { handlers } from "@/auth" +import { handlers } from "@/lib/auth" import { createFileRoute } from "@tanstack/react-router" export const Route = createFileRoute("/api/auth/$")({ diff --git a/packages/hono/src/createAuth.ts b/packages/hono/src/createAuth.ts index ac587d72..8f5d016c 100644 --- a/packages/hono/src/createAuth.ts +++ b/packages/hono/src/createAuth.ts @@ -1,13 +1,8 @@ -import { - createAuth as createAuthBasic, - type ShapeToObject, - type AuthConfig, - type EditableShape, - type UserShape, -} from "@aura-stack/auth" +import { createAuth as createAuthBasic, type AuthConfig } from "@aura-stack/auth" import { toHandler } from "@/lib/handler" import { withAuth } from "@/lib/with-auth" import type { Context } from "hono" +import type { ShapeToObject, EditableShape, UserShape } from "@aura-stack/auth/identity" export const createAuth = >(config: AuthConfig) => { const auth = createAuthBasic(config) diff --git a/packages/hono/src/index.ts b/packages/hono/src/index.ts index 71ecf5db..5fac9eea 100644 --- a/packages/hono/src/index.ts +++ b/packages/hono/src/index.ts @@ -1,30 +1,3 @@ export { createAuth } from "@/createAuth" export { toHandler } from "@/lib/handler" export { withAuth, type EnvWithSession } from "@/lib/with-auth" -export { builtInOAuthProviders } from "@aura-stack/auth/oauth/index" -export type { - User, - Session, - AuthConfig, - AuthInstance, - AuthAPI, - JoseInstance, - BuiltInOAuthProvider, - CookieConfig, - Logger, - LogLevel, - TrustedOrigin, - SessionConfig, - CredentialsProvider, - UserShape, - UserIdentityType, - EditableShape, - InferAuthIdentity, - InferIdentity, - InferShape, - ShapeToObject, - OAuthProvider, - OAuthProviderConfig, - OAuthProviderCredentials, - OAuthProviderRecord, -} from "@aura-stack/auth/types" diff --git a/packages/hono/src/oauth/index.ts b/packages/hono/src/oauth/index.ts index 6b627037..b907f35b 100644 --- a/packages/hono/src/oauth/index.ts +++ b/packages/hono/src/oauth/index.ts @@ -1 +1 @@ -export * from "@aura-stack/auth/oauth/index" +export * from "@aura-stack/auth/oauth" diff --git a/packages/next/CHANGELOG.md b/packages/next/CHANGELOG.md index b4b590f7..f488af45 100644 --- a/packages/next/CHANGELOG.md +++ b/packages/next/CHANGELOG.md @@ -10,4 +10,4 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Added -- Introduced a dedicated Next.js integration package with optimized "Concentrated API" and aggregated client entry points for the App Router. +- Introduced a dedicated Next.js integration package with optimized "Concentrated API" and aggregated client entry points for the App Router. [#141](https://github.com/aura-stack-ts/auth/pull/141) diff --git a/packages/next/README.md b/packages/next/README.md index dde5e4cc..d98300c7 100644 --- a/packages/next/README.md +++ b/packages/next/README.md @@ -23,8 +23,6 @@ By utilizing a **"Concentrated API"** pattern, it optimizes core authentication - **App Router Optimized** — Full support for React Server Components (RSC) and Server Actions. - **Concentrated API** — Dedicated `auth.api` for Next.js that automates session fetching and redirects. - **Aggregated Client Entry** — Consolidated `import { ... } from "@aura-stack/next/client"` for all hooks and context. -- **Middleware-Ready** — Fast and weightless `withAuth` wrapper for standard Next.js Middleware. -- **Route Handler Bridge** — Simple `toHandler` for mounting Aura Auth on `app/api/auth/[...auth]/route.ts`. - **Type-safe by design** — Automatic type inference from your identity schema. ## Installation @@ -54,7 +52,7 @@ export const auth = createAuth({ oauth: ["github"], }) -export const { core } = auth +export const { api, core } = auth ``` ### 2. Set Up Route Handler diff --git a/packages/next/src/createAuth.ts b/packages/next/src/createAuth.ts index d4876cc0..fedea9c9 100644 --- a/packages/next/src/createAuth.ts +++ b/packages/next/src/createAuth.ts @@ -1,6 +1,6 @@ import { api } from "@/lib/api" -import { type AuthConfig } from "@aura-stack/react" import { createAuth as createAuthInstance } from "@aura-stack/react/server" +import type { AuthConfig } from "@aura-stack/react" import type { EditableShape, ShapeToObject, UserShape } from "@aura-stack/react/types" export const createAuth = >(config: AuthConfig) => { diff --git a/packages/next/src/lib/api.ts b/packages/next/src/lib/api.ts index 85e41886..fad9ed3a 100644 --- a/packages/next/src/lib/api.ts +++ b/packages/next/src/lib/api.ts @@ -22,7 +22,8 @@ export const getSession = ({ api }: AuthInstanc return null } return session.session - } catch { + } catch (error) { + console.log("error", error) console.error("[error:server] getSession - Failed to retrieve session") return null } diff --git a/packages/react/src/context.tsx b/packages/react/src/context.tsx index 0144355a..f8760a83 100644 --- a/packages/react/src/context.tsx +++ b/packages/react/src/context.tsx @@ -1,4 +1,3 @@ -"use client" import { createContext, useCallback, useEffect, useMemo, useState, useTransition } from "react" import type { BuiltInOAuthProvider, Session, User } from "@aura-stack/auth" import type { DeepPartial, LiteralUnion, CredentialsPayload, SignInOptions, SignOutOptions } from "@aura-stack/auth/types" diff --git a/packages/react/src/hooks.ts b/packages/react/src/hooks.ts index d65be3d5..beda1edf 100644 --- a/packages/react/src/hooks.ts +++ b/packages/react/src/hooks.ts @@ -1,4 +1,3 @@ -"use client" import { use, useCallback, useRef } from "react" import type { CredentialsPayload, diff --git a/packages/react/src/index.tsx b/packages/react/src/index.tsx index 312b729b..a25a8cdf 100644 --- a/packages/react/src/index.tsx +++ b/packages/react/src/index.tsx @@ -1,4 +1,3 @@ -//export { createAuth } from "@aura-stack/auth" export { createAuthClient, type AuthClientOptions } from "@aura-stack/auth/client" export { AuthProvider, type AuthProviderProps } from "@/context.tsx" export { useAuth, useSession, useSignIn, useSignInCredentials, useSignOut, useUpdateSession } from "@/hooks.ts" diff --git a/packages/react/src/oauth/index.ts b/packages/react/src/oauth/index.ts index 6b627037..b907f35b 100644 --- a/packages/react/src/oauth/index.ts +++ b/packages/react/src/oauth/index.ts @@ -1 +1 @@ -export * from "@aura-stack/auth/oauth/index" +export * from "@aura-stack/auth/oauth" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f6d986b3..33590a85 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -112,9 +112,6 @@ importers: '@astrojs/react': specifier: ^5.0.0 version: 5.0.0(@types/node@24.12.0)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(jiti@2.6.1)(lightningcss@1.32.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - '@aura-stack/auth': - specifier: workspace:* - version: link:../../packages/core '@aura-stack/react': specifier: workspace:* version: link:../../packages/react @@ -296,9 +293,6 @@ importers: apps/nextjs/pages-router: dependencies: - '@aura-stack/auth': - specifier: workspace:* - version: link:../../../packages/core '@aura-stack/react': specifier: workspace:* version: link:../../../packages/react @@ -379,9 +373,6 @@ importers: apps/react-router: dependencies: - '@aura-stack/auth': - specifier: workspace:* - version: link:../../packages/core '@aura-stack/react': specifier: workspace:* version: link:../../packages/react @@ -449,9 +440,6 @@ importers: apps/tanstack-start: dependencies: - '@aura-stack/auth': - specifier: workspace:* - version: link:../../packages/core '@aura-stack/react': specifier: workspace:* version: link:../../packages/react From 5428167996f83ea9851c6298556e2dfd39db0ef7 Mon Sep 17 00:00:00 2001 From: Hernan Alvarado Date: Sun, 12 Apr 2026 14:39:38 -0500 Subject: [PATCH 5/9] chore: apply coderabbit --- packages/core/src/client/client.ts | 2 +- packages/next/src/client.ts | 1 + packages/next/src/lib/api.ts | 40 ++++++++++++++++++------------ packages/react/src/context.tsx | 11 ++++++-- packages/react/tsup.config.ts | 10 +------- 5 files changed, 36 insertions(+), 28 deletions(-) diff --git a/packages/core/src/client/client.ts b/packages/core/src/client/client.ts index 398b24a8..2db243fc 100644 --- a/packages/core/src/client/client.ts +++ b/packages/core/src/client/client.ts @@ -109,7 +109,7 @@ export const createAuthClient = (options: AuthC try { const csrfToken = await getCSRFToken() if (!csrfToken) { - throw new AuthClientError("Failed to fetch CSRF token for sign-out.") + throw new AuthClientError("Failed to fetch CSRF token for session update.") } const { sub: _sub, ...spread } = (session.user ?? {}) as DefaultUser const response = await client.patch("/session", { diff --git a/packages/next/src/client.ts b/packages/next/src/client.ts index 3c60505a..f8e58611 100644 --- a/packages/next/src/client.ts +++ b/packages/next/src/client.ts @@ -1,4 +1,5 @@ "use client" + export { createAuthClient, AuthProvider, diff --git a/packages/next/src/lib/api.ts b/packages/next/src/lib/api.ts index fad9ed3a..45aedd37 100644 --- a/packages/next/src/lib/api.ts +++ b/packages/next/src/lib/api.ts @@ -11,6 +11,19 @@ import type { BuiltInOAuthProvider, } from "@aura-stack/react/types" +/** + * Internal helper to sync Set-Cookie headers from Aura Auth to Next.js cookie store. + */ +async function applyCookies(responseHeaders: Headers) { + const cookieStore = await cookies() + const setCookies = responseHeaders.getSetCookie() + for (const cookieStr of setCookies) { + const [nameValue] = cookieStr.split(";").map((s) => s.trim()) + const [name, value] = nameValue.split("=") + cookieStore.set(name, value, {}) + } +} + export const getSession = ({ api }: AuthInstance) => { return async (options?: GetSessionAPIOptions): Promise | null> => { try { @@ -22,8 +35,7 @@ export const getSession = ({ api }: AuthInstanc return null } return session.session - } catch (error) { - console.log("error", error) + } catch { console.error("[error:server] getSession - Failed to retrieve session") return null } @@ -43,45 +55,41 @@ export const signIn = ({ api }: AuthInstance({ api }: AuthInstance) => { return async (payload: CredentialsPayload, options: SignInAPIOptions) => { - const signIn = await api.signInCredentials({ + const result = await api.signInCredentials({ payload, headers: await headers(), ...options, redirect: false, }) - if (options.redirect && signIn.success && signIn.redirectURL) { - return redirect(signIn.redirectURL) + await applyCookies(result.headers) + if (options.redirect && result.success && result.redirectURL) { + return redirect(result.redirectURL) } - return signIn + return result } } export const updateSession = ({ api }: AuthInstance) => { return async (session: DeepPartial>, options?: GetSessionAPIOptions) => { - const updated = await api.updateSession({ + const result = await api.updateSession({ session, headers: await headers(), + skipCSRFCheck: true, ...options, }) - return updated + await applyCookies(result.headers) + return result } } export const signOut = ({ api }: AuthInstance) => { return async (options?: SignOutAPIOptions) => { - const cookieStore = await cookies() const response = await api.signOut({ headers: await headers(), ...options, }) + await applyCookies(response.headers) if (response.status === 202) { - const setCookies = response.headers.getSetCookie() - for (const cookie of setCookies) { - const nameMatch = cookie.match(/^([^=]+)=/) - if (nameMatch) { - cookieStore.delete(nameMatch[1]) - } - } redirect(options?.redirectTo ?? "/") } return response.json() diff --git a/packages/react/src/context.tsx b/packages/react/src/context.tsx index f8760a83..4a83105c 100644 --- a/packages/react/src/context.tsx +++ b/packages/react/src/context.tsx @@ -1,6 +1,13 @@ import { createContext, useCallback, useEffect, useMemo, useState, useTransition } from "react" -import type { BuiltInOAuthProvider, Session, User } from "@aura-stack/auth" -import type { DeepPartial, LiteralUnion, CredentialsPayload, SignInOptions, SignOutOptions } from "@aura-stack/auth/types" +import type { Session, User } from "@aura-stack/auth" +import type { + DeepPartial, + LiteralUnion, + CredentialsPayload, + SignInOptions, + SignOutOptions, + BuiltInOAuthProvider, +} from "@aura-stack/auth/types" import type { AuthProviderProps, AuthReactContextValue, UpdateSessionCallOptions } from "@/@types/types.ts" /** diff --git a/packages/react/tsup.config.ts b/packages/react/tsup.config.ts index 9f588da6..bfbee890 100644 --- a/packages/react/tsup.config.ts +++ b/packages/react/tsup.config.ts @@ -1,12 +1,4 @@ import { defineConfig } from "tsup" import { tsupConfig } from "@aura-stack/tsup-config" -export default defineConfig([ - { - ...tsupConfig, - entry: ["src", "!src/index.ts"], - banner: { - //js: `"use client"`, - }, - }, -]) +export default defineConfig(tsupConfig) From be87e8d5de44589e50cb7b38857ad72ed6ff9a07 Mon Sep 17 00:00:00 2001 From: Hernan Alvarado Date: Sun, 12 Apr 2026 15:37:49 -0500 Subject: [PATCH 6/9] chore: sync dep and updates CHANGELOG.md files --- bun.lock | 4 ---- packages/elysia/CHANGELOG.md | 2 ++ packages/elysia/deno.json | 5 ++++- packages/elysia/package.json | 15 +++++++++++++ packages/elysia/src/_core/crypto.ts | 1 + packages/elysia/src/_core/identity.ts | 1 + packages/elysia/src/_core/shared.ts | 1 + packages/elysia/src/createAuth.ts | 9 ++------ packages/elysia/src/index.ts | 30 +------------------------ packages/elysia/src/oauth/index.ts | 1 + packages/express/CHANGELOG.md | 2 ++ packages/express/deno.json | 5 ++++- packages/express/package.json | 15 +++++++++++++ packages/express/src/_core/crypto.ts | 1 + packages/express/src/_core/identity.ts | 1 + packages/express/src/_core/shared.ts | 1 + packages/express/src/createAuth.ts | 9 ++------ packages/express/src/index.ts | 31 ++------------------------ packages/express/test/types.test-d.ts | 3 ++- packages/hono/CHANGELOG.md | 2 ++ packages/hono/deno.json | 5 ++++- packages/hono/package.json | 15 +++++++++++++ packages/hono/src/_core/crypto.ts | 1 + packages/hono/src/_core/identity.ts | 1 + packages/hono/src/_core/shared.ts | 1 + packages/hono/src/index.ts | 3 +-- packages/next/CHANGELOG.md | 2 +- packages/react/CHANGELOG.md | 2 ++ 28 files changed, 86 insertions(+), 83 deletions(-) create mode 100644 packages/elysia/src/_core/crypto.ts create mode 100644 packages/elysia/src/_core/identity.ts create mode 100644 packages/elysia/src/_core/shared.ts create mode 100644 packages/elysia/src/oauth/index.ts create mode 100644 packages/express/src/_core/crypto.ts create mode 100644 packages/express/src/_core/identity.ts create mode 100644 packages/express/src/_core/shared.ts create mode 100644 packages/hono/src/_core/crypto.ts create mode 100644 packages/hono/src/_core/identity.ts create mode 100644 packages/hono/src/_core/shared.ts diff --git a/bun.lock b/bun.lock index cbd77b4f..c57f32e3 100644 --- a/bun.lock +++ b/bun.lock @@ -23,7 +23,6 @@ "@astrojs/check": "^0.9.8", "@astrojs/node": "^10.0.2", "@astrojs/react": "^5.0.0", - "@aura-stack/auth": "workspace:*", "@aura-stack/react": "workspace:*", "@radix-ui/react-slot": "^1.2.4", "astro": "^6.0.5", @@ -132,7 +131,6 @@ "name": "pages-router", "version": "0.1.0", "dependencies": { - "@aura-stack/auth": "workspace:*", "@aura-stack/react": "workspace:*", "@radix-ui/react-slot": "^1.2.4", "lucide-react": "catalog:lucide-react", @@ -171,7 +169,6 @@ "apps/react-router": { "name": "react-router", "dependencies": { - "@aura-stack/auth": "workspace:*", "@aura-stack/react": "workspace:*", "@radix-ui/react-slot": "^1.2.4", "@react-router/node": "7.12.0", @@ -205,7 +202,6 @@ "apps/tanstack-start": { "name": "tanstack-start", "dependencies": { - "@aura-stack/auth": "workspace:*", "@aura-stack/react": "workspace:*", "@hookform/resolvers": "^5.2.2", "@radix-ui/react-label": "^2.1.8", diff --git a/packages/elysia/CHANGELOG.md b/packages/elysia/CHANGELOG.md index d5f1da45..89516e6c 100644 --- a/packages/elysia/CHANGELOG.md +++ b/packages/elysia/CHANGELOG.md @@ -10,4 +10,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Added +- Removed and clean up the types and functions exported from the index `/` entry point to reduce import nose and introduced `/identity`, `/crypto` and `/shared` as direct entry points for specific utilities. [#141](https://github.com/aura-stack-ts/auth/pull/141) + - Introduced seamless Elysia integration package that encapsulates the core authentication logic into plugins and handlers for session management and authentication flows. [#140](https://github.com/aura-stack-ts/auth/pull/140) diff --git a/packages/elysia/deno.json b/packages/elysia/deno.json index 01652a8a..f8f30264 100644 --- a/packages/elysia/deno.json +++ b/packages/elysia/deno.json @@ -7,7 +7,10 @@ }, "exports": { ".": "./src/index.ts", - "./oauth": "./src/oauth/index.ts" + "./oauth": "./src/oauth/index.ts", + "./identity": "./src/_core/identity.ts", + "./crypto": "./src/_core/crypto.ts", + "./shared": "./src/_core/shared.ts" }, "imports": { "@/": "./src/", diff --git a/packages/elysia/package.json b/packages/elysia/package.json index 50874c4f..759cff62 100644 --- a/packages/elysia/package.json +++ b/packages/elysia/package.json @@ -37,6 +37,21 @@ "types": "./dist/oauth/index.d.ts", "import": "./dist/oauth/index.js", "require": "./dist/oauth/index.cjs" + }, + "./identity": { + "types": "./dist/_core/identity.d.ts", + "import": "./dist/_core/identity.js", + "require": "./dist/_core/identity.cjs" + }, + "./crypto": { + "types": "./dist/_core/crypto.d.ts", + "import": "./dist/_core/crypto.js", + "require": "./dist/_core/crypto.cjs" + }, + "./shared": { + "types": "./dist/_core/shared.d.ts", + "import": "./dist/_core/shared.js", + "require": "./dist/_core/shared.cjs" } }, "keywords": [ diff --git a/packages/elysia/src/_core/crypto.ts b/packages/elysia/src/_core/crypto.ts new file mode 100644 index 00000000..daaa48f0 --- /dev/null +++ b/packages/elysia/src/_core/crypto.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/crypto" diff --git a/packages/elysia/src/_core/identity.ts b/packages/elysia/src/_core/identity.ts new file mode 100644 index 00000000..2588736b --- /dev/null +++ b/packages/elysia/src/_core/identity.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/identity" diff --git a/packages/elysia/src/_core/shared.ts b/packages/elysia/src/_core/shared.ts new file mode 100644 index 00000000..f67f5e78 --- /dev/null +++ b/packages/elysia/src/_core/shared.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/shared" diff --git a/packages/elysia/src/createAuth.ts b/packages/elysia/src/createAuth.ts index 687581d5..957f7e0c 100644 --- a/packages/elysia/src/createAuth.ts +++ b/packages/elysia/src/createAuth.ts @@ -1,12 +1,7 @@ -import { - createAuth as createAuthBasic, - type ShapeToObject, - type AuthConfig, - type EditableShape, - type UserShape, -} from "@aura-stack/auth" +import { createAuth as createAuthBasic, type AuthConfig } from "@aura-stack/auth" import { toHandler } from "@/lib/handler" import { withAuth } from "@/lib/with-auth" +import type { ShapeToObject, EditableShape, UserShape } from "@aura-stack/auth/identity" /** * Creates an Aura Auth instance with Elysia-specific utilities. diff --git a/packages/elysia/src/index.ts b/packages/elysia/src/index.ts index 4065297e..e499c36a 100644 --- a/packages/elysia/src/index.ts +++ b/packages/elysia/src/index.ts @@ -1,30 +1,2 @@ export { createAuth } from "@/createAuth" -export { toHandler } from "@/lib/handler" -export { withAuth, type WithAuthContext } from "@/lib/with-auth" -export { builtInOAuthProviders } from "@aura-stack/auth/oauth/index" -export type { - User, - Session, - AuthConfig, - AuthInstance, - AuthAPI, - JoseInstance, - BuiltInOAuthProvider, - CookieConfig, - Logger, - LogLevel, - TrustedOrigin, - SessionConfig, - CredentialsProvider, - UserShape, - UserIdentityType, - EditableShape, - InferAuthIdentity, - InferIdentity, - InferShape, - ShapeToObject, - OAuthProvider, - OAuthProviderConfig, - OAuthProviderCredentials, - OAuthProviderRecord, -} from "@aura-stack/auth/types" +export type { User, Session, AuthConfig, AuthInstance } from "@aura-stack/auth/types" diff --git a/packages/elysia/src/oauth/index.ts b/packages/elysia/src/oauth/index.ts new file mode 100644 index 00000000..b907f35b --- /dev/null +++ b/packages/elysia/src/oauth/index.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/oauth" diff --git a/packages/express/CHANGELOG.md b/packages/express/CHANGELOG.md index f79c1e19..e77dcd0e 100644 --- a/packages/express/CHANGELOG.md +++ b/packages/express/CHANGELOG.md @@ -10,4 +10,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Added +- Removed and clean up the types and functions exported from the index `/` entry point to reduce import nose and introduced `/identity`, `/crypto` and `/shared` as direct entry points for specific utilities. [#141](https://github.com/aura-stack-ts/auth/pull/141) + - Introduced a seamless Express integration package that encapsulates the core authentication logic into middleware and handlers for session management and authentication flows. [#138](https://github.com/aura-stack-ts/auth/pull/138) diff --git a/packages/express/deno.json b/packages/express/deno.json index 5c235620..aa5a1288 100644 --- a/packages/express/deno.json +++ b/packages/express/deno.json @@ -7,7 +7,10 @@ }, "exports": { ".": "./src/index.ts", - "./oauth": "./src/oauth/index.ts" + "./oauth": "./src/oauth/index.ts", + "./identity": "./src/_core/identity.ts", + "./crypto": "./src/_core/crypto.ts", + "./shared": "./src/_core/shared.ts" }, "imports": { "@/": "./src/" diff --git a/packages/express/package.json b/packages/express/package.json index 0020023b..337ae057 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -37,6 +37,21 @@ "types": "./dist/oauth.d.ts", "import": "./dist/oauth.js", "require": "./dist/oauth.cjs" + }, + "./identity": { + "types": "./dist/_core/identity.d.ts", + "import": "./dist/_core/identity.js", + "require": "./dist/_core/identity.cjs" + }, + "./crypto": { + "types": "./dist/_core/crypto.d.ts", + "import": "./dist/_core/crypto.js", + "require": "./dist/_core/crypto.cjs" + }, + "./shared": { + "types": "./dist/_core/shared.d.ts", + "import": "./dist/_core/shared.js", + "require": "./dist/_core/shared.cjs" } }, "keywords": [], diff --git a/packages/express/src/_core/crypto.ts b/packages/express/src/_core/crypto.ts new file mode 100644 index 00000000..daaa48f0 --- /dev/null +++ b/packages/express/src/_core/crypto.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/crypto" diff --git a/packages/express/src/_core/identity.ts b/packages/express/src/_core/identity.ts new file mode 100644 index 00000000..2588736b --- /dev/null +++ b/packages/express/src/_core/identity.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/identity" diff --git a/packages/express/src/_core/shared.ts b/packages/express/src/_core/shared.ts new file mode 100644 index 00000000..f67f5e78 --- /dev/null +++ b/packages/express/src/_core/shared.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/shared" diff --git a/packages/express/src/createAuth.ts b/packages/express/src/createAuth.ts index ba6a85e5..fab284d6 100644 --- a/packages/express/src/createAuth.ts +++ b/packages/express/src/createAuth.ts @@ -1,13 +1,8 @@ -import { - createAuth as createBasicAuth, - type EditableShape, - type ShapeToObject, - type UserShape, - type AuthConfig, -} from "@aura-stack/auth" +import { createAuth as createBasicAuth, type AuthConfig } from "@aura-stack/auth" import { withAuth } from "@/lib/with-auth.ts" import { toExpressHandler } from "@/lib/handler.ts" import type { Request, Response } from "express" +import type { EditableShape, ShapeToObject, UserShape } from "@aura-stack/auth/identity" export const createAuth = >(config: AuthConfig) => { const auth = createBasicAuth(config) diff --git a/packages/express/src/index.ts b/packages/express/src/index.ts index dde97d39..5a334e96 100644 --- a/packages/express/src/index.ts +++ b/packages/express/src/index.ts @@ -1,30 +1,3 @@ export { createAuth } from "@/createAuth.ts" -export { toExpressHandler, toExpressResponse, toWebRequest } from "@/lib/handler.ts" -export { withAuth, type LocalsWithSession } from "@/lib/with-auth.ts" -export { builtInOAuthProviders } from "@aura-stack/auth/oauth/index" -export type { - User, - Session, - AuthConfig, - AuthInstance, - AuthAPI, - JoseInstance, - BuiltInOAuthProvider, - CookieConfig, - Logger, - LogLevel, - TrustedOrigin, - SessionConfig, - CredentialsProvider, - UserShape, - UserIdentityType, - EditableShape, - InferAuthIdentity, - InferIdentity, - InferShape, - ShapeToObject, - OAuthProvider, - OAuthProviderConfig, - OAuthProviderCredentials, - OAuthProviderRecord, -} from "@aura-stack/auth/types" +export { toExpressResponse, toWebRequest } from "@/lib/handler.ts" +export type { User, Session, AuthConfig, AuthInstance } from "@aura-stack/auth/types" diff --git a/packages/express/test/types.test-d.ts b/packages/express/test/types.test-d.ts index a83d87d9..f5d9d1e8 100644 --- a/packages/express/test/types.test-d.ts +++ b/packages/express/test/types.test-d.ts @@ -1,7 +1,8 @@ import { describe, expectTypeOf, test } from "vitest" import { app, auth } from "./presets.ts" import type { Locals } from "express" -import type { EditableShape, Session, ShapeToObject, UserShape } from "@aura-stack/auth/types" +import type { Session } from "@aura-stack/auth" +import type { EditableShape, ShapeToObject, UserShape } from "@aura-stack/auth/identity" describe("Type definitions", () => { test("should correctly type the Express app", () => { diff --git a/packages/hono/CHANGELOG.md b/packages/hono/CHANGELOG.md index 73c2eb35..6940b117 100644 --- a/packages/hono/CHANGELOG.md +++ b/packages/hono/CHANGELOG.md @@ -10,4 +10,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Added +- Removed and clean up the types and functions exported from the index `/` entry point to reduce import nose and introduced `/identity`, `/crypto` and `/shared` as direct entry points for specific utilities. [#141](https://github.com/aura-stack-ts/auth/pull/141) + - Introduced a seamless Hono integration package that encapsulates the core authentication logic into middleware and handlers for session management and authentication flows. [#139](https://github.com/aura-stack-ts/auth/pull/139) diff --git a/packages/hono/deno.json b/packages/hono/deno.json index d784f5ed..a4633967 100644 --- a/packages/hono/deno.json +++ b/packages/hono/deno.json @@ -7,7 +7,10 @@ }, "exports": { ".": "./src/index.ts", - "./oauth": "./src/oauth/index.ts" + "./oauth": "./src/oauth/index.ts", + "./identity": "./src/_core/identity.ts", + "./crypto": "./src/_core/crypto.ts", + "./shared": "./src/_core/shared.ts" }, "imports": { "@/": "./src/", diff --git a/packages/hono/package.json b/packages/hono/package.json index e13ef778..843811a5 100644 --- a/packages/hono/package.json +++ b/packages/hono/package.json @@ -37,6 +37,21 @@ "types": "./dist/oauth/index.d.ts", "import": "./dist/oauth/index.js", "require": "./dist/oauth/index.cjs" + }, + "./identity": { + "types": "./dist/_core/identity.d.ts", + "import": "./dist/_core/identity.js", + "require": "./dist/_core/identity.cjs" + }, + "./crypto": { + "types": "./dist/_core/crypto.d.ts", + "import": "./dist/_core/crypto.js", + "require": "./dist/_core/crypto.cjs" + }, + "./shared": { + "types": "./dist/_core/shared.d.ts", + "import": "./dist/_core/shared.js", + "require": "./dist/_core/shared.cjs" } }, "keywords": [], diff --git a/packages/hono/src/_core/crypto.ts b/packages/hono/src/_core/crypto.ts new file mode 100644 index 00000000..daaa48f0 --- /dev/null +++ b/packages/hono/src/_core/crypto.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/crypto" diff --git a/packages/hono/src/_core/identity.ts b/packages/hono/src/_core/identity.ts new file mode 100644 index 00000000..2588736b --- /dev/null +++ b/packages/hono/src/_core/identity.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/identity" diff --git a/packages/hono/src/_core/shared.ts b/packages/hono/src/_core/shared.ts new file mode 100644 index 00000000..f67f5e78 --- /dev/null +++ b/packages/hono/src/_core/shared.ts @@ -0,0 +1 @@ +export * from "@aura-stack/auth/shared" diff --git a/packages/hono/src/index.ts b/packages/hono/src/index.ts index 5fac9eea..e499c36a 100644 --- a/packages/hono/src/index.ts +++ b/packages/hono/src/index.ts @@ -1,3 +1,2 @@ export { createAuth } from "@/createAuth" -export { toHandler } from "@/lib/handler" -export { withAuth, type EnvWithSession } from "@/lib/with-auth" +export type { User, Session, AuthConfig, AuthInstance } from "@aura-stack/auth/types" diff --git a/packages/next/CHANGELOG.md b/packages/next/CHANGELOG.md index f488af45..f8057270 100644 --- a/packages/next/CHANGELOG.md +++ b/packages/next/CHANGELOG.md @@ -10,4 +10,4 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Added -- Introduced a dedicated Next.js integration package with optimized "Concentrated API" and aggregated client entry points for the App Router. [#141](https://github.com/aura-stack-ts/auth/pull/141) +- Introduced a seamless Next.js integration package that encapsulates Next.js authentication logic for both client-side and server-side rendering by integrating the `@aura-stack/react` package. It supports both rendering strategies, with primary support for server-side rendering (SSR). For client-side usage, import the modules from the `/client` entry point. [#141](https://github.com/aura-stack-ts/auth/pull/141) diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index 465837dc..4bb280c0 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -10,4 +10,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Added +- Removed and clean up the types and functions exported from the index `/` entry point to reduce import nose and introduced `/identity`, `/crypto` and `/shared` as direct entry points for specific utilities. [#141](https://github.com/aura-stack-ts/auth/pull/141) + - Introduced seamless React integration package that encapsulates the core authentication logic into a single React context, exposing powerful and easy-to-use hooks for session management and authentication flows. [#137](https://github.com/aura-stack-ts/auth/pull/137) From 5770c4d42ec64dee7047b3b41606003dd7ee4b68 Mon Sep 17 00:00:00 2001 From: Hernan Alvarado Date: Sun, 12 Apr 2026 15:40:17 -0500 Subject: [PATCH 7/9] chore(next): remove test scripts --- packages/next/package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/next/package.json b/packages/next/package.json index f8d2276e..5fe82e78 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -8,9 +8,6 @@ "build": "tsup", "lint": "oxlint", "lint:fix": "oxlint --fix", - "test": "vitest --run", - "test:watch": "vitest", - "test:coverage": "vitest --run --coverage", "format": "oxfmt", "format:check": "oxfmt --check", "type-check": "tsc --noEmit", From 89105a44ed8d1bea6d26e27fae5922114aec1277 Mon Sep 17 00:00:00 2001 From: Hernan Alvarado Date: Sun, 12 Apr 2026 15:44:09 -0500 Subject: [PATCH 8/9] chore(turborepo): refresh cache From 75ea7556d046ccba11411ae53bd7022596cde675 Mon Sep 17 00:00:00 2001 From: Hernan Alvarado Date: Sun, 12 Apr 2026 17:03:16 -0500 Subject: [PATCH 9/9] chore: apply coderabbit --- apps/express/package.json | 1 - apps/express/src/lib/auth.ts | 3 ++- apps/express/tsconfig.json | 2 ++ apps/vercel/tsconfig.json | 4 ++++ bun.lock | 2 -- packages/elysia/CHANGELOG.md | 2 +- packages/express/CHANGELOG.md | 2 +- packages/express/package.json | 7 +++---- packages/express/src/oauth/index.ts | 2 +- packages/hono/CHANGELOG.md | 2 +- packages/react/CHANGELOG.md | 2 +- packages/react/deno.json | 1 + pnpm-lock.yaml | 3 --- 13 files changed, 17 insertions(+), 16 deletions(-) diff --git a/apps/express/package.json b/apps/express/package.json index 5efb3def..f9df8b0c 100644 --- a/apps/express/package.json +++ b/apps/express/package.json @@ -13,7 +13,6 @@ "format:check": "oxfmt --check" }, "dependencies": { - "@aura-stack/auth": "workspace:*", "@aura-stack/express": "workspace:*", "express": "catalog:express" }, diff --git a/apps/express/src/lib/auth.ts b/apps/express/src/lib/auth.ts index feac38fc..d2a62071 100644 --- a/apps/express/src/lib/auth.ts +++ b/apps/express/src/lib/auth.ts @@ -1,4 +1,5 @@ -import { createAuth, builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/express" +import { createAuth } from "@aura-stack/express" +import { builtInOAuthProviders, type BuiltInOAuthProvider } from "@aura-stack/express/oauth" export const oauth = Object.keys(builtInOAuthProviders) as BuiltInOAuthProvider[] diff --git a/apps/express/tsconfig.json b/apps/express/tsconfig.json index 2aca6a65..cb8c52c6 100644 --- a/apps/express/tsconfig.json +++ b/apps/express/tsconfig.json @@ -1,6 +1,8 @@ { "extends": "@aura-stack/tsconfig/tsconfig.base.json", "compilerOptions": { + "rootDir": "src", + "outDir": "dist", "paths": { "@/*": ["./src/*"] } diff --git a/apps/vercel/tsconfig.json b/apps/vercel/tsconfig.json index c618146b..dacc6b77 100644 --- a/apps/vercel/tsconfig.json +++ b/apps/vercel/tsconfig.json @@ -1,5 +1,9 @@ { "extends": "@aura-stack/tsconfig/tsconfig.base.json", + "compilerOptions": { + "rootDir": "api", + "outDir": "dist", + }, "include": ["api"], "exclude": ["dist", "node_modules"], } diff --git a/bun.lock b/bun.lock index c57f32e3..a198ccf1 100644 --- a/bun.lock +++ b/bun.lock @@ -81,7 +81,6 @@ "name": "express", "version": "0.1.0", "dependencies": { - "@aura-stack/auth": "workspace:*", "@aura-stack/express": "workspace:*", "express": "catalog:express", }, @@ -340,7 +339,6 @@ "supertest": "^7.2.2", }, "peerDependencies": { - "@types/express": ">=4.0.0", "express": ">=4.0.0", }, }, diff --git a/packages/elysia/CHANGELOG.md b/packages/elysia/CHANGELOG.md index 89516e6c..3177cc94 100644 --- a/packages/elysia/CHANGELOG.md +++ b/packages/elysia/CHANGELOG.md @@ -10,6 +10,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Added -- Removed and clean up the types and functions exported from the index `/` entry point to reduce import nose and introduced `/identity`, `/crypto` and `/shared` as direct entry points for specific utilities. [#141](https://github.com/aura-stack-ts/auth/pull/141) +- Removed and cleaned up types and functions exported from the index `/` entry point to reduce import noise, and introduced `/identity`, `/crypto`, and `/shared` as direct entry points for specific utilities. [`#141`](https://github.com/aura-stack-ts/auth/pull/141) - Introduced seamless Elysia integration package that encapsulates the core authentication logic into plugins and handlers for session management and authentication flows. [#140](https://github.com/aura-stack-ts/auth/pull/140) diff --git a/packages/express/CHANGELOG.md b/packages/express/CHANGELOG.md index e77dcd0e..753dda4f 100644 --- a/packages/express/CHANGELOG.md +++ b/packages/express/CHANGELOG.md @@ -10,6 +10,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Added -- Removed and clean up the types and functions exported from the index `/` entry point to reduce import nose and introduced `/identity`, `/crypto` and `/shared` as direct entry points for specific utilities. [#141](https://github.com/aura-stack-ts/auth/pull/141) +- Removed and cleaned up types and functions exported from the index `/` entry point to reduce import noise, and introduced `/identity`, `/crypto`, and `/shared` as direct entry points for specific utilities. [`#141`](https://github.com/aura-stack-ts/auth/pull/141) - Introduced a seamless Express integration package that encapsulates the core authentication logic into middleware and handlers for session management and authentication flows. [#138](https://github.com/aura-stack-ts/auth/pull/138) diff --git a/packages/express/package.json b/packages/express/package.json index 337ae057..17d6ba6c 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -34,9 +34,9 @@ "require": "./dist/index.cjs" }, "./oauth": { - "types": "./dist/oauth.d.ts", - "import": "./dist/oauth.js", - "require": "./dist/oauth.cjs" + "types": "./dist/oauth/index.d.ts", + "import": "./dist/oauth/index.js", + "require": "./dist/oauth/index.cjs" }, "./identity": { "types": "./dist/_core/identity.d.ts", @@ -73,7 +73,6 @@ "@types/express": "catalog:express" }, "peerDependencies": { - "@types/express": ">=4.0.0", "express": ">=4.0.0" }, "packageManager": "pnpm@10.15.0" diff --git a/packages/express/src/oauth/index.ts b/packages/express/src/oauth/index.ts index 6b627037..b907f35b 100644 --- a/packages/express/src/oauth/index.ts +++ b/packages/express/src/oauth/index.ts @@ -1 +1 @@ -export * from "@aura-stack/auth/oauth/index" +export * from "@aura-stack/auth/oauth" diff --git a/packages/hono/CHANGELOG.md b/packages/hono/CHANGELOG.md index 6940b117..4729838e 100644 --- a/packages/hono/CHANGELOG.md +++ b/packages/hono/CHANGELOG.md @@ -10,6 +10,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Added -- Removed and clean up the types and functions exported from the index `/` entry point to reduce import nose and introduced `/identity`, `/crypto` and `/shared` as direct entry points for specific utilities. [#141](https://github.com/aura-stack-ts/auth/pull/141) +- Removed and cleaned up types and functions exported from the index `/` entry point to reduce import noise, and introduced `/identity`, `/crypto`, and `/shared` as direct entry points for specific utilities. [`#141`](https://github.com/aura-stack-ts/auth/pull/141) - Introduced a seamless Hono integration package that encapsulates the core authentication logic into middleware and handlers for session management and authentication flows. [#139](https://github.com/aura-stack-ts/auth/pull/139) diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index 4bb280c0..4594c948 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -10,6 +10,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Added -- Removed and clean up the types and functions exported from the index `/` entry point to reduce import nose and introduced `/identity`, `/crypto` and `/shared` as direct entry points for specific utilities. [#141](https://github.com/aura-stack-ts/auth/pull/141) +- Removed and cleaned up types and functions exported from the index `/` entry point to reduce import noise, and introduced `/identity`, `/crypto`, and `/shared` as direct entry points for specific utilities. [`#141`](https://github.com/aura-stack-ts/auth/pull/141) - Introduced seamless React integration package that encapsulates the core authentication logic into a single React context, exposing powerful and easy-to-use hooks for session management and authentication flows. [#137](https://github.com/aura-stack-ts/auth/pull/137) diff --git a/packages/react/deno.json b/packages/react/deno.json index 4e579a84..4094dbba 100644 --- a/packages/react/deno.json +++ b/packages/react/deno.json @@ -10,6 +10,7 @@ "./hooks": "./src/hooks.ts", "./context": "./src/context.ts", "./oauth": "./src/oauth/index.ts", + "./server": "./src/server.ts", "./identity": "./src/_core/identity.ts", "./crypto": "./src/_core/crypto.ts", "./shared": "./src/_core/shared.ts", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 33590a85..6eb534c9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -203,9 +203,6 @@ importers: apps/express: dependencies: - '@aura-stack/auth': - specifier: workspace:* - version: link:../../packages/core '@aura-stack/express': specifier: workspace:* version: link:../../packages/express