Skip to content
← Public packages

@kentcdodds/package-app-kit

Design tokens, PWA install/update, About/version, cache helpers, and optional realtime notes sync for Kody package apps.

FollowFork

app/middleware/auth.ts

33 lines · 1.0 KB · TypeScript
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()
	}
}