import { packageContext } from 'kody:runtime' import { createContextKey, type Middleware } from 'remix/router' import { createPackageAppAuth, type PackageAppUser, } from '../../src/auth.ts' /** * Starter pattern for package-app sign-in. Not mounted by the live demo (the * platform `/-/auth/*` host paths must exist first). To adopt: add * `currentUser()` to the router middleware, then link with `auth.loginUrl()` / * `auth.logoutUrl()` and read `context.get(CurrentUser)` in controllers. * Scaffolded apps import `kody:@kentcdodds/package-app-kit/auth` instead of * the relative path. */ export const auth = createPackageAppAuth({ mode: 'optional', hostedUrl: packageContext?.hostedUrl, }) export const CurrentUser = createContextKey() export function currentUser(): Middleware { return async (context, next) => { try { context.set(CurrentUser, await auth.resolveUser(context.request)) } catch (error) { if (error instanceof Response) return error throw error } return next() } }