mirror of
https://github.com/logto-io/logto.git
synced 2025-01-27 21:39:16 -05:00
refactor(core): fixing router types
This commit is contained in:
parent
43456aae9b
commit
7c6602a1ac
6 changed files with 25 additions and 11 deletions
|
@ -1,5 +1,4 @@
|
|||
import { Applications } from '@logto/schemas';
|
||||
import Router from 'koa-router';
|
||||
import { object, string } from 'zod';
|
||||
|
||||
import koaGuard from '@/middleware/koa-guard';
|
||||
|
@ -11,9 +10,11 @@ import {
|
|||
} from '@/queries/application';
|
||||
import { buildIdGenerator } from '@/utils/id';
|
||||
|
||||
import { AuthedRouter } from './types';
|
||||
|
||||
const applicationId = buildIdGenerator(21);
|
||||
|
||||
export default function applicationRoutes<StateT, ContextT>(router: Router<StateT, ContextT>) {
|
||||
export default function applicationRoutes<T extends AuthedRouter>(router: T) {
|
||||
router.post(
|
||||
'/application',
|
||||
koaGuard({
|
||||
|
|
|
@ -3,20 +3,22 @@ import mount from 'koa-mount';
|
|||
import Router from 'koa-router';
|
||||
import { Provider } from 'oidc-provider';
|
||||
|
||||
import koaAuth, { WithAuthContext } from '@/middleware/koa-auth';
|
||||
import koaAuth from '@/middleware/koa-auth';
|
||||
import applicationRoutes from '@/routes/application';
|
||||
import sessionRoutes from '@/routes/session';
|
||||
import swaggerRoutes from '@/routes/swagger';
|
||||
import userRoutes from '@/routes/user';
|
||||
|
||||
import { AnonymousRouter, AuthedRouter } from './types';
|
||||
|
||||
const createRouters = (provider: Provider) => {
|
||||
const anonymousRouter = new Router();
|
||||
const anonymousRouter: AnonymousRouter = new Router();
|
||||
|
||||
sessionRoutes(anonymousRouter, provider);
|
||||
userRoutes(anonymousRouter);
|
||||
swaggerRoutes(anonymousRouter);
|
||||
|
||||
const router = new Router<unknown, WithAuthContext>();
|
||||
const router: AuthedRouter = new Router();
|
||||
router.use(koaAuth());
|
||||
applicationRoutes(router);
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import { conditional } from '@logto/essentials';
|
||||
import { LogtoErrorCode } from '@logto/phrases';
|
||||
import Router from 'koa-router';
|
||||
import { Provider } from 'oidc-provider';
|
||||
import { object, string } from 'zod';
|
||||
|
||||
|
@ -10,7 +9,9 @@ import { findUserByUsername } from '@/queries/user';
|
|||
import assert from '@/utils/assert';
|
||||
import { encryptPassword } from '@/utils/password';
|
||||
|
||||
export default function sessionRoutes(router: Router, provider: Provider) {
|
||||
import { AnonymousRouter } from './types';
|
||||
|
||||
export default function sessionRoutes<T extends AnonymousRouter>(router: T, provider: Provider) {
|
||||
router.post(
|
||||
'/session',
|
||||
koaGuard({ body: object({ username: string().optional(), password: string().optional() }) }),
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
import Router, { IMiddleware } from 'koa-router';
|
||||
import { IMiddleware } from 'koa-router';
|
||||
import { OpenAPIV3 } from 'openapi-types';
|
||||
|
||||
import { isGuardMiddleware, WithGuardConfig } from '@/middleware/koa-guard';
|
||||
import { toTitle } from '@/utils/string';
|
||||
import { zodTypeToSwagger } from '@/utils/zod';
|
||||
|
||||
export default function swaggerRoutes(router: Router) {
|
||||
import { AnonymousRouter } from './types';
|
||||
|
||||
export default function swaggerRoutes<T extends AnonymousRouter>(router: T) {
|
||||
router.get('/swagger.json', async (ctx, next) => {
|
||||
const routes = ctx.router.stack.map(({ path, stack, methods }) => {
|
||||
const guard = stack.find((function_): function_ is WithGuardConfig<IMiddleware> =>
|
||||
|
|
7
packages/core/src/routes/types.ts
Normal file
7
packages/core/src/routes/types.ts
Normal file
|
@ -0,0 +1,7 @@
|
|||
import Router from 'koa-router';
|
||||
|
||||
import { WithAuthContext } from '@/middleware/koa-auth';
|
||||
import { WithI18nContext } from '@/middleware/koa-i18next';
|
||||
|
||||
export type AnonymousRouter = Router<unknown, WithI18nContext>;
|
||||
export type AuthedRouter = Router<unknown, WithAuthContext<WithI18nContext>>;
|
|
@ -1,5 +1,4 @@
|
|||
import { PasswordEncryptionMethod } from '@logto/schemas';
|
||||
import Router from 'koa-router';
|
||||
import { nanoid } from 'nanoid';
|
||||
import { object, string } from 'zod';
|
||||
|
||||
|
@ -9,6 +8,8 @@ import { hasUser, hasUserWithId, insertUser } from '@/queries/user';
|
|||
import { buildIdGenerator } from '@/utils/id';
|
||||
import { encryptPassword } from '@/utils/password';
|
||||
|
||||
import { AnonymousRouter } from './types';
|
||||
|
||||
const userId = buildIdGenerator(12);
|
||||
|
||||
const generateUserId = async (maxRetries = 500) => {
|
||||
|
@ -23,7 +24,7 @@ const generateUserId = async (maxRetries = 500) => {
|
|||
throw new Error('Cannot generate user ID in reasonable retries');
|
||||
};
|
||||
|
||||
export default function userRoutes(router: Router) {
|
||||
export default function userRoutes<T extends AnonymousRouter>(router: T) {
|
||||
router.post(
|
||||
'/user',
|
||||
koaGuard({
|
||||
|
|
Loading…
Add table
Reference in a new issue