← Public packages
@kentcdodds/package-app-kit
Design tokens, PWA install/update, About/version, cache helpers, and optional realtime notes sync for Kody package apps.
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<PackageAppUser | null>()
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()
}
}