@withwiz/toolkit 0.9.3 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/{chunk-XDB3K74B.js → chunk-2QO7YXTF.js} +1 -1
  2. package/dist/{chunk-ISP4MDKW.js → chunk-5MPMPXIR.js} +1 -1
  3. package/dist/{chunk-KMUYO6YD.js → chunk-6E2Q27EN.js} +1 -1
  4. package/dist/chunk-6NFMRZWB.js +8 -0
  5. package/dist/{chunk-OXKVQGRH.js → chunk-7IOAGJMK.js} +13 -13
  6. package/dist/{chunk-ROMGYJFX.js → chunk-AWFP2KAU.js} +1 -1
  7. package/dist/chunk-BTNM5YSU.js +29 -0
  8. package/dist/chunk-CWS5RPRX.js +0 -0
  9. package/dist/{chunk-VQ47YRFC.js → chunk-DISEIUYD.js} +2 -2
  10. package/dist/{chunk-BOABYFJ7.js → chunk-DTRXWS7G.js} +22 -13
  11. package/dist/{chunk-NERL6VYQ.js → chunk-HNFYO5XV.js} +10 -6
  12. package/dist/{chunk-ZVGEGDYF.js → chunk-JRORMRVN.js} +1 -1
  13. package/dist/chunk-L2A6NGW7.js +21 -0
  14. package/dist/{chunk-CNXK3SLK.js → chunk-MJOXTFIC.js} +2 -2
  15. package/dist/chunk-MXWSG6ER.js +0 -0
  16. package/dist/chunk-NUHSUAXG.js +35 -0
  17. package/dist/{chunk-3P4TZM3O.js → chunk-QBXNL6QU.js} +1 -1
  18. package/dist/chunk-RWENSBNW.js +162 -0
  19. package/dist/{chunk-6SDUWMC3.js → chunk-RWN47K7J.js} +1 -1
  20. package/dist/chunk-TN5ZNYR2.js +0 -0
  21. package/dist/{chunk-N3TCQ5BF.js → chunk-TQMQ5XXG.js} +17 -2
  22. package/dist/chunk-XWHT53CZ.js +38 -0
  23. package/dist/{chunk-7S2PCYNT.js → chunk-YBVZ5UVC.js} +1 -1
  24. package/dist/chunk-Z4J452HD.js +24 -0
  25. package/dist/chunk-ZZTBIA57.js +18 -0
  26. package/dist/core/api-key/api-key.service.d.ts +28 -0
  27. package/dist/core/api-key/api-key.service.js +9 -0
  28. package/dist/core/api-key/index.d.ts +6 -0
  29. package/dist/core/api-key/index.js +28 -0
  30. package/dist/core/api-key/ip-whitelist.d.ts +4 -0
  31. package/dist/core/api-key/ip-whitelist.js +9 -0
  32. package/dist/core/api-key/key-generator.d.ts +6 -0
  33. package/dist/core/api-key/key-generator.js +11 -0
  34. package/dist/core/api-key/ports.d.ts +104 -0
  35. package/dist/core/api-key/ports.js +1 -0
  36. package/dist/core/api-key/types.d.ts +88 -0
  37. package/dist/core/api-key/types.js +1 -0
  38. package/dist/core/api-key/validate.d.ts +9 -0
  39. package/dist/core/api-key/validate.js +7 -0
  40. package/dist/core/auth/config.js +2 -1
  41. package/dist/core/auth/cookie-names.d.ts +3 -0
  42. package/dist/core/auth/cookie-names.js +9 -0
  43. package/dist/core/auth/index.js +13 -12
  44. package/dist/core/auth/jwt/cookie.js +3 -2
  45. package/dist/core/auth/jwt/index.js +3 -2
  46. package/dist/core/auth/oauth/index.js +7 -7
  47. package/dist/core/auth/oauth/providers/index.js +6 -6
  48. package/dist/core/auth/services/cache-token-stores.d.ts +45 -0
  49. package/dist/core/auth/services/cache-token-stores.js +59 -0
  50. package/dist/core/auth/services/index.js +7 -6
  51. package/dist/core/auth/services/login.service.js +3 -2
  52. package/dist/core/auth/services/oauth-callback.service.js +3 -2
  53. package/dist/core/auth/services/token-refresh.service.js +3 -2
  54. package/dist/core/auth/token-delivery.js +4 -3
  55. package/dist/core/cache/cache-factory.js +4 -4
  56. package/dist/core/cache/cache-invalidation.js +5 -5
  57. package/dist/core/cache/cache-redis.js +1 -1
  58. package/dist/core/cache/cache-wrapper.js +5 -5
  59. package/dist/core/cache/cache.js +10 -10
  60. package/dist/core/cache/hybrid-cache-manager.js +1 -1
  61. package/dist/core/cache/index.js +10 -10
  62. package/dist/core/cache/redis-cache-manager.js +1 -1
  63. package/dist/core/geolocation/index.js +7 -7
  64. package/dist/core/geolocation/providers/index.js +7 -7
  65. package/dist/core/system/environment.js +3 -2
  66. package/dist/core/system/health-check.js +1 -1
  67. package/dist/core/system/index.js +7 -6
  68. package/dist/initialize.js +6 -5
  69. package/dist/next/auth-handlers/index.js +20 -19
  70. package/dist/next/auth-handlers/login.handler.js +5 -4
  71. package/dist/next/auth-handlers/logout.handler.js +4 -3
  72. package/dist/next/auth-handlers/me.handler.js +5 -4
  73. package/dist/next/auth-handlers/oauth-authorize.handler.js +4 -4
  74. package/dist/next/auth-handlers/oauth-callback.handler.js +8 -7
  75. package/dist/next/auth-handlers/refresh.handler.js +5 -4
  76. package/dist/next/auth-types/handler-types.js +4 -3
  77. package/dist/next/auth-types/index.js +4 -3
  78. package/dist/next/error/error-handler.js +1 -1
  79. package/dist/next/error/index.js +1 -1
  80. package/dist/next/middleware/auth.js +6 -5
  81. package/dist/next/middleware/error-handler.js +1 -1
  82. package/dist/next/middleware/index.js +22 -21
  83. package/dist/next/middleware/wrappers.js +11 -10
  84. package/dist/next/oapi/api-key-auth.d.ts +27 -0
  85. package/dist/next/oapi/api-key-auth.js +14 -0
  86. package/dist/next/oapi/helpers.d.ts +19 -0
  87. package/dist/next/oapi/helpers.js +13 -0
  88. package/dist/next/oapi/index.d.ts +3 -0
  89. package/dist/next/oapi/index.js +28 -0
  90. package/dist/next/oapi/openapi-spec.d.ts +18 -0
  91. package/dist/next/oapi/openapi-spec.js +7 -0
  92. package/dist/next/proxy.d.ts +38 -0
  93. package/dist/next/proxy.js +53 -0
  94. package/dist/next/utils/index.js +14 -14
  95. package/package.json +21 -1
  96. package/dist/{chunk-BICSVLN7.js → chunk-NAFMJT62.js} +6 -6
  97. package/dist/{chunk-V3GEYUBG.js → chunk-UQ3Z3ZAF.js} +6 -6
  98. package/dist/{chunk-Q5RPNLET.js → chunk-VDRLJU6C.js} +6 -6
  99. /package/dist/{chunk-WU3V2AKE.js → chunk-WYA763JL.js} +0 -0
@@ -1,13 +1,14 @@
1
1
  import "../../chunk-AOWUPAPS.js";
2
2
  import {
3
3
  resolveTokenDelivery
4
- } from "../../chunk-NERL6VYQ.js";
5
- import "../../chunk-BOABYFJ7.js";
6
- import "../../chunk-N3TCQ5BF.js";
4
+ } from "../../chunk-HNFYO5XV.js";
5
+ import "../../chunk-DTRXWS7G.js";
6
+ import "../../chunk-TQMQ5XXG.js";
7
7
  import "../../chunk-7YWUKMZD.js";
8
8
  import "../../chunk-OVOBSYR4.js";
9
9
  import "../../chunk-6J2EJVND.js";
10
10
  import "../../chunk-F3R3UYBF.js";
11
+ import "../../chunk-6NFMRZWB.js";
11
12
  import "../../chunk-N3ETBM74.js";
12
13
  export {
13
14
  resolveTokenDelivery
@@ -9,8 +9,8 @@ import {
9
9
  import "../../chunk-ATAQRXTH.js";
10
10
  import "../../chunk-XQIAXMRY.js";
11
11
  import "../../chunk-QAIN3WNN.js";
12
- import "../../chunk-IKZB26SK.js";
13
12
  import "../../chunk-5GWGARXI.js";
13
+ import "../../chunk-IKZB26SK.js";
14
14
  import "../../chunk-6J2EJVND.js";
15
15
  import "../../chunk-F3R3UYBF.js";
16
16
  import "../../chunk-N3ETBM74.js";
@@ -20,8 +20,8 @@ import "../../chunk-AMZWDLJ4.js";
20
20
  import "../../chunk-VUYS3SU7.js";
21
21
  import "../../chunk-XQIAXMRY.js";
22
22
  import "../../chunk-QAIN3WNN.js";
23
- import "../../chunk-IKZB26SK.js";
24
23
  import "../../chunk-5GWGARXI.js";
24
+ import "../../chunk-IKZB26SK.js";
25
25
  import "../../chunk-6J2EJVND.js";
26
26
  import "../../chunk-F3R3UYBF.js";
27
27
  import "../../chunk-N3ETBM74.js";
@@ -5,20 +5,21 @@ import {
5
5
  initializeAuthMiddleware,
6
6
  optionalAuthMiddleware,
7
7
  setAccessTokenBlacklistChecker
8
- } from "../../chunk-CNXK3SLK.js";
8
+ } from "../../chunk-MJOXTFIC.js";
9
9
  import "../../chunk-ATAQRXTH.js";
10
10
  import "../../chunk-XQIAXMRY.js";
11
11
  import "../../chunk-QAIN3WNN.js";
12
- import "../../chunk-IKZB26SK.js";
13
12
  import "../../chunk-LWHLB2Y6.js";
14
13
  import "../../chunk-5GWGARXI.js";
15
- import "../../chunk-NERL6VYQ.js";
16
- import "../../chunk-BOABYFJ7.js";
17
- import "../../chunk-N3TCQ5BF.js";
14
+ import "../../chunk-HNFYO5XV.js";
15
+ import "../../chunk-DTRXWS7G.js";
16
+ import "../../chunk-IKZB26SK.js";
17
+ import "../../chunk-TQMQ5XXG.js";
18
18
  import "../../chunk-7YWUKMZD.js";
19
19
  import "../../chunk-OVOBSYR4.js";
20
20
  import "../../chunk-6J2EJVND.js";
21
21
  import "../../chunk-F3R3UYBF.js";
22
+ import "../../chunk-6NFMRZWB.js";
22
23
  import "../../chunk-N3ETBM74.js";
23
24
  export {
24
25
  adminMiddleware,
@@ -8,8 +8,8 @@ import "../../chunk-AMZWDLJ4.js";
8
8
  import "../../chunk-VUYS3SU7.js";
9
9
  import "../../chunk-XQIAXMRY.js";
10
10
  import "../../chunk-QAIN3WNN.js";
11
- import "../../chunk-IKZB26SK.js";
12
11
  import "../../chunk-5GWGARXI.js";
12
+ import "../../chunk-IKZB26SK.js";
13
13
  import "../../chunk-6J2EJVND.js";
14
14
  import "../../chunk-F3R3UYBF.js";
15
15
  import "../../chunk-N3ETBM74.js";
@@ -4,21 +4,7 @@ import {
4
4
  withCustomApi,
5
5
  withOptionalAuthApi,
6
6
  withPublicApi
7
- } from "../../chunk-OXKVQGRH.js";
8
- import {
9
- errorHandlerMiddleware
10
- } from "../../chunk-4Y5MRUMX.js";
11
- import {
12
- initRequestMiddleware
13
- } from "../../chunk-VC2E6KYQ.js";
14
- import {
15
- MiddlewareChain
16
- } from "../../chunk-WXOWI7BJ.js";
17
- import {
18
- createRateLimitMiddleware,
19
- rateLimitMiddleware,
20
- setRateLimitAdapter
21
- } from "../../chunk-TRGFXIEF.js";
7
+ } from "../../chunk-7IOAGJMK.js";
22
8
  import {
23
9
  responseLoggerMiddleware
24
10
  } from "../../chunk-LCYDMYZS.js";
@@ -34,11 +20,25 @@ import {
34
20
  initializeAuthMiddleware,
35
21
  optionalAuthMiddleware,
36
22
  setAccessTokenBlacklistChecker
37
- } from "../../chunk-CNXK3SLK.js";
23
+ } from "../../chunk-MJOXTFIC.js";
38
24
  import {
39
25
  corsMiddleware,
40
26
  validateCorsConfiguration
41
27
  } from "../../chunk-37VGD4VX.js";
28
+ import {
29
+ errorHandlerMiddleware
30
+ } from "../../chunk-4Y5MRUMX.js";
31
+ import {
32
+ initRequestMiddleware
33
+ } from "../../chunk-VC2E6KYQ.js";
34
+ import {
35
+ MiddlewareChain
36
+ } from "../../chunk-WXOWI7BJ.js";
37
+ import {
38
+ createRateLimitMiddleware,
39
+ rateLimitMiddleware,
40
+ setRateLimitAdapter
41
+ } from "../../chunk-TRGFXIEF.js";
42
42
  import "../../chunk-AYCXN6QJ.js";
43
43
  import "../../chunk-K2PNAQI4.js";
44
44
  import "../../chunk-ATAQRXTH.js";
@@ -47,17 +47,18 @@ import "../../chunk-AMZWDLJ4.js";
47
47
  import "../../chunk-VUYS3SU7.js";
48
48
  import "../../chunk-XQIAXMRY.js";
49
49
  import "../../chunk-QAIN3WNN.js";
50
- import "../../chunk-7ZO5UNTJ.js";
51
- import "../../chunk-IKZB26SK.js";
52
50
  import "../../chunk-LWHLB2Y6.js";
53
51
  import "../../chunk-5GWGARXI.js";
54
- import "../../chunk-NERL6VYQ.js";
55
- import "../../chunk-BOABYFJ7.js";
56
- import "../../chunk-N3TCQ5BF.js";
52
+ import "../../chunk-HNFYO5XV.js";
53
+ import "../../chunk-DTRXWS7G.js";
54
+ import "../../chunk-7ZO5UNTJ.js";
55
+ import "../../chunk-IKZB26SK.js";
56
+ import "../../chunk-TQMQ5XXG.js";
57
57
  import "../../chunk-7YWUKMZD.js";
58
58
  import "../../chunk-OVOBSYR4.js";
59
59
  import "../../chunk-6J2EJVND.js";
60
60
  import "../../chunk-F3R3UYBF.js";
61
+ import "../../chunk-6NFMRZWB.js";
61
62
  import "../../chunk-N3ETBM74.js";
62
63
  export {
63
64
  MiddlewareChain,
@@ -4,15 +4,15 @@ import {
4
4
  withCustomApi,
5
5
  withOptionalAuthApi,
6
6
  withPublicApi
7
- } from "../../chunk-OXKVQGRH.js";
7
+ } from "../../chunk-7IOAGJMK.js";
8
+ import "../../chunk-LCYDMYZS.js";
9
+ import "../../chunk-Y4WPEIKW.js";
10
+ import "../../chunk-MJOXTFIC.js";
11
+ import "../../chunk-37VGD4VX.js";
8
12
  import "../../chunk-4Y5MRUMX.js";
9
13
  import "../../chunk-VC2E6KYQ.js";
10
14
  import "../../chunk-WXOWI7BJ.js";
11
15
  import "../../chunk-TRGFXIEF.js";
12
- import "../../chunk-LCYDMYZS.js";
13
- import "../../chunk-Y4WPEIKW.js";
14
- import "../../chunk-CNXK3SLK.js";
15
- import "../../chunk-37VGD4VX.js";
16
16
  import "../../chunk-AYCXN6QJ.js";
17
17
  import "../../chunk-K2PNAQI4.js";
18
18
  import "../../chunk-ATAQRXTH.js";
@@ -21,17 +21,18 @@ import "../../chunk-AMZWDLJ4.js";
21
21
  import "../../chunk-VUYS3SU7.js";
22
22
  import "../../chunk-XQIAXMRY.js";
23
23
  import "../../chunk-QAIN3WNN.js";
24
- import "../../chunk-7ZO5UNTJ.js";
25
- import "../../chunk-IKZB26SK.js";
26
24
  import "../../chunk-LWHLB2Y6.js";
27
25
  import "../../chunk-5GWGARXI.js";
28
- import "../../chunk-NERL6VYQ.js";
29
- import "../../chunk-BOABYFJ7.js";
30
- import "../../chunk-N3TCQ5BF.js";
26
+ import "../../chunk-HNFYO5XV.js";
27
+ import "../../chunk-DTRXWS7G.js";
28
+ import "../../chunk-7ZO5UNTJ.js";
29
+ import "../../chunk-IKZB26SK.js";
30
+ import "../../chunk-TQMQ5XXG.js";
31
31
  import "../../chunk-7YWUKMZD.js";
32
32
  import "../../chunk-OVOBSYR4.js";
33
33
  import "../../chunk-6J2EJVND.js";
34
34
  import "../../chunk-F3R3UYBF.js";
35
+ import "../../chunk-6NFMRZWB.js";
35
36
  import "../../chunk-N3ETBM74.js";
36
37
  export {
37
38
  withAdminApi,
@@ -0,0 +1,27 @@
1
+ import { NextResponse } from 'next/server';
2
+ import type { NextRequest } from 'next/server';
3
+ import type { ApiKeyService, IUsageTracker } from '@withwiz/toolkit/core/api-key';
4
+ export interface AuthedUser {
5
+ id: string;
6
+ email: string;
7
+ role: 'USER' | 'ADMIN';
8
+ plan: string;
9
+ apiKeyId: string;
10
+ }
11
+ export interface ApiKeyAuthOptions {
12
+ service: Pick<ApiKeyService, 'validateApiKey' | 'trackUsage'>;
13
+ usage: IUsageTracker;
14
+ extractClientIp: (h: Headers) => string;
15
+ resolveRole: (userId: string) => Promise<'USER' | 'ADMIN'>;
16
+ }
17
+ type AuthResult = {
18
+ user: AuthedUser;
19
+ } | {
20
+ response: NextResponse;
21
+ };
22
+ /**
23
+ * x-api-key 인증 미들웨어 팩토리. core ApiKeyService로 키 검증,
24
+ * IP 화이트리스트(core isIpAllowed)·사용량(IUsageTracker) 확인 후 인증 사용자 반환.
25
+ */
26
+ export declare function createApiKeyAuth(options: ApiKeyAuthOptions): (req: NextRequest) => Promise<AuthResult>;
27
+ export {};
@@ -0,0 +1,14 @@
1
+ import {
2
+ createApiKeyAuth
3
+ } from "../../chunk-XWHT53CZ.js";
4
+ import "../../chunk-MXWSG6ER.js";
5
+ import "../../chunk-RWENSBNW.js";
6
+ import "../../chunk-BTNM5YSU.js";
7
+ import "../../chunk-NUHSUAXG.js";
8
+ import "../../chunk-ZZTBIA57.js";
9
+ import "../../chunk-N3ETBM74.js";
10
+ import "../../chunk-CWS5RPRX.js";
11
+ import "../../chunk-TN5ZNYR2.js";
12
+ export {
13
+ createApiKeyAuth
14
+ };
@@ -0,0 +1,19 @@
1
+ import { NextResponse } from 'next/server';
2
+ /** 페이지네이션 파라미터 파싱(범용). page≥1, pageSize 1~100. */
3
+ export declare function parsePaginationParams(sp: URLSearchParams): {
4
+ page: number;
5
+ pageSize: number;
6
+ };
7
+ /** 페이지네이션 메타데이터 생성. */
8
+ export declare function createPaginationMeta(total: number, page: number, pageSize: number): {
9
+ total: number;
10
+ page: number;
11
+ pageSize: number;
12
+ hasMore: boolean;
13
+ };
14
+ /** 검색 파라미터 파싱. */
15
+ export declare function parseSearchParams(sp: URLSearchParams): {
16
+ search: string | undefined;
17
+ };
18
+ /** 필수 파라미터 검증. 없으면 400 NextResponse, 있으면 null. */
19
+ export declare function requireParam(value: string | undefined | null, label: string): NextResponse | null;
@@ -0,0 +1,13 @@
1
+ import {
2
+ createPaginationMeta,
3
+ parsePaginationParams,
4
+ parseSearchParams,
5
+ requireParam
6
+ } from "../../chunk-Z4J452HD.js";
7
+ import "../../chunk-N3ETBM74.js";
8
+ export {
9
+ createPaginationMeta,
10
+ parsePaginationParams,
11
+ parseSearchParams,
12
+ requireParam
13
+ };
@@ -0,0 +1,3 @@
1
+ export * from '@withwiz/toolkit/next/oapi/api-key-auth';
2
+ export * from '@withwiz/toolkit/next/oapi/openapi-spec';
3
+ export * from '@withwiz/toolkit/next/oapi/helpers';
@@ -0,0 +1,28 @@
1
+ import {
2
+ createApiKeyAuth
3
+ } from "../../chunk-XWHT53CZ.js";
4
+ import {
5
+ createPaginationMeta,
6
+ parsePaginationParams,
7
+ parseSearchParams,
8
+ requireParam
9
+ } from "../../chunk-Z4J452HD.js";
10
+ import {
11
+ buildOpenApiSpec
12
+ } from "../../chunk-L2A6NGW7.js";
13
+ import "../../chunk-MXWSG6ER.js";
14
+ import "../../chunk-RWENSBNW.js";
15
+ import "../../chunk-BTNM5YSU.js";
16
+ import "../../chunk-NUHSUAXG.js";
17
+ import "../../chunk-ZZTBIA57.js";
18
+ import "../../chunk-N3ETBM74.js";
19
+ import "../../chunk-CWS5RPRX.js";
20
+ import "../../chunk-TN5ZNYR2.js";
21
+ export {
22
+ buildOpenApiSpec,
23
+ createApiKeyAuth,
24
+ createPaginationMeta,
25
+ parsePaginationParams,
26
+ parseSearchParams,
27
+ requireParam
28
+ };
@@ -0,0 +1,18 @@
1
+ export interface OpenApiInput {
2
+ info: {
3
+ title: string;
4
+ version: string;
5
+ description?: string;
6
+ };
7
+ servers?: {
8
+ url: string;
9
+ description?: string;
10
+ }[];
11
+ paths: Record<string, unknown>;
12
+ schemas?: Record<string, unknown>;
13
+ }
14
+ /**
15
+ * OpenAPI 3.0.3 스펙 골격 빌더. X-API-Key securityScheme(ApiKeyAuth)을 자동 주입하고
16
+ * 전역 security를 ApiKeyAuth로 설정한다. paths/schemas는 호출측이 주입.
17
+ */
18
+ export declare function buildOpenApiSpec(input: OpenApiInput): Record<string, unknown>;
@@ -0,0 +1,7 @@
1
+ import {
2
+ buildOpenApiSpec
3
+ } from "../../chunk-L2A6NGW7.js";
4
+ import "../../chunk-N3ETBM74.js";
5
+ export {
6
+ buildOpenApiSpec
7
+ };
@@ -0,0 +1,38 @@
1
+ /**
2
+ * 엣지 라우트 가드 — Next middleware.ts/proxy.ts 에서 쿠키의 access_token 을
3
+ * 검증해 리다이렉트하는 헬퍼.
4
+ *
5
+ * 엣지 안전 제약: 이 모듈은 `next/server` + `jose` + cookie-names leaf 외에는
6
+ * 절대 import 하지 않는다. core auth 배럴(JWTManager)·winston·node:crypto 를
7
+ * 끌어오면 엣지 런타임에서 깨진다. 검증은 jose 의 jwtVerify 직접 호출이며,
8
+ * HS256 대칭키를 우선 지원한다(비대칭 RS256/JWKS 는 후속 범위).
9
+ */
10
+ import { NextResponse } from 'next/server';
11
+ import type { NextRequest } from 'next/server';
12
+ import { type JWTPayload } from 'jose';
13
+ export interface AuthProxyOptions {
14
+ /** JWT_SECRET (HS256 대칭키) */
15
+ secret: string;
16
+ /** 허용 알고리즘. 기본 ['HS256'] */
17
+ algorithms?: string[];
18
+ /** access 토큰 쿠키명. 기본 'access_token' */
19
+ cookieName?: string;
20
+ /** 미인증 리다이렉트 대상. 기본 '/login' */
21
+ loginPath?: string;
22
+ /** 원래 목적지를 붙일 쿼리 파라미터명. false면 미부착. 기본 false */
23
+ redirectParam?: string | false;
24
+ /** 이 경로를 보호할지 판정. true인 경로만 가드가 동작. */
25
+ isProtected: (pathname: string) => boolean;
26
+ }
27
+ /**
28
+ * 엣지 라우트 가드 팩토리. 반환 함수는:
29
+ * - 보호 대상이 아니면 `undefined` (호출측 proxy 로직과 합성 가능 — 라우팅/locale 등)
30
+ * - 미인증/무효면 로그인 리다이렉트 NextResponse
31
+ * - 유효면 NextResponse.next()
32
+ */
33
+ export declare function createAuthProxy(opts: AuthProxyOptions): (req: NextRequest) => Promise<NextResponse | undefined>;
34
+ /** 저수준: 커스텀 합성용. 유효하면 payload, 아니면 null. */
35
+ export declare function verifyAccessTokenEdge(token: string, args: {
36
+ secret: string;
37
+ algorithms?: string[];
38
+ }): Promise<JWTPayload | null>;
@@ -0,0 +1,53 @@
1
+ import {
2
+ ACCESS_TOKEN_COOKIE
3
+ } from "../chunk-6NFMRZWB.js";
4
+ import "../chunk-N3ETBM74.js";
5
+
6
+ // src/next/proxy.ts
7
+ import { NextResponse } from "next/server";
8
+ import { jwtVerify } from "jose";
9
+ function redirectToLogin(req, opts) {
10
+ var _a, _b;
11
+ const url = new URL((_a = opts.loginPath) != null ? _a : "/login", req.url);
12
+ if (opts.redirectParam) {
13
+ url.searchParams.set(opts.redirectParam, req.nextUrl.pathname + req.nextUrl.search);
14
+ }
15
+ const res = NextResponse.redirect(url);
16
+ res.cookies.delete((_b = opts.cookieName) != null ? _b : ACCESS_TOKEN_COOKIE);
17
+ return res;
18
+ }
19
+ function createAuthProxy(opts) {
20
+ var _a, _b;
21
+ const key = new TextEncoder().encode(opts.secret);
22
+ const algorithms = (_a = opts.algorithms) != null ? _a : ["HS256"];
23
+ const cookieName = (_b = opts.cookieName) != null ? _b : ACCESS_TOKEN_COOKIE;
24
+ return async function authProxy(req) {
25
+ var _a2;
26
+ if (!opts.isProtected(req.nextUrl.pathname)) return void 0;
27
+ const token = (_a2 = req.cookies.get(cookieName)) == null ? void 0 : _a2.value;
28
+ if (!token) return redirectToLogin(req, opts);
29
+ try {
30
+ await jwtVerify(token, key, { algorithms });
31
+ return NextResponse.next();
32
+ } catch (e) {
33
+ return redirectToLogin(req, opts);
34
+ }
35
+ };
36
+ }
37
+ async function verifyAccessTokenEdge(token, args) {
38
+ var _a;
39
+ try {
40
+ const { payload } = await jwtVerify(
41
+ token,
42
+ new TextEncoder().encode(args.secret),
43
+ { algorithms: (_a = args.algorithms) != null ? _a : ["HS256"] }
44
+ );
45
+ return payload;
46
+ } catch (e) {
47
+ return null;
48
+ }
49
+ }
50
+ export {
51
+ createAuthProxy,
52
+ verifyAccessTokenEdge
53
+ };
@@ -1,3 +1,17 @@
1
+ import {
2
+ ErrorProcessor,
3
+ errorToResponse,
4
+ handlePrismaError,
5
+ processError,
6
+ throwBadRequestError,
7
+ throwBusinessRuleError,
8
+ throwConflictError,
9
+ throwForbiddenError,
10
+ throwNotFoundError,
11
+ throwUnauthorizedError,
12
+ throwValidationError,
13
+ withErrorHandling
14
+ } from "../../chunk-BRFW2LL2.js";
1
15
  import {
2
16
  createPaginatedResponse,
3
17
  getReferer,
@@ -31,20 +45,6 @@ import {
31
45
  escapeCsvField,
32
46
  rowToCsv
33
47
  } from "../../chunk-DVCGAI5N.js";
34
- import {
35
- ErrorProcessor,
36
- errorToResponse,
37
- handlePrismaError,
38
- processError,
39
- throwBadRequestError,
40
- throwBusinessRuleError,
41
- throwConflictError,
42
- throwForbiddenError,
43
- throwNotFoundError,
44
- throwUnauthorizedError,
45
- throwValidationError,
46
- withErrorHandling
47
- } from "../../chunk-BRFW2LL2.js";
48
48
  import "../../chunk-ATAQRXTH.js";
49
49
  import "../../chunk-XQIAXMRY.js";
50
50
  import "../../chunk-QAIN3WNN.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@withwiz/toolkit",
3
- "version": "0.9.3",
3
+ "version": "0.11.0",
4
4
  "description": "Shared utility library for withwiz projects",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -31,9 +31,20 @@
31
31
  },
32
32
  "exports": {
33
33
  "./initialize": "./dist/initialize.js",
34
+ "./core/api-key": {
35
+ "types": "./dist/core/api-key/index.d.ts",
36
+ "import": "./dist/core/api-key/index.js"
37
+ },
38
+ "./core/api-key/types": "./dist/core/api-key/types.js",
39
+ "./core/api-key/ports": "./dist/core/api-key/ports.js",
40
+ "./core/api-key/key-generator": "./dist/core/api-key/key-generator.js",
41
+ "./core/api-key/ip-whitelist": "./dist/core/api-key/ip-whitelist.js",
42
+ "./core/api-key/validate": "./dist/core/api-key/validate.js",
43
+ "./core/api-key/api-key.service": "./dist/core/api-key/api-key.service.js",
34
44
  "./core/auth": "./dist/core/auth/index.js",
35
45
  "./core/auth/adapters/sql": "./dist/core/auth/adapters/sql/index.js",
36
46
  "./core/auth/config": "./dist/core/auth/config.js",
47
+ "./core/auth/cookie-names": "./dist/core/auth/cookie-names.js",
37
48
  "./core/auth/duration": "./dist/core/auth/duration.js",
38
49
  "./core/auth/email": "./dist/core/auth/email/index.js",
39
50
  "./core/auth/email/sender": "./dist/core/auth/email/sender.js",
@@ -54,6 +65,7 @@
54
65
  "./core/auth/password/client-helper": "./dist/core/auth/password/client-helper.js",
55
66
  "./core/auth/password/hasher": "./dist/core/auth/password/hasher.js",
56
67
  "./core/auth/services": "./dist/core/auth/services/index.js",
68
+ "./core/auth/services/cache-token-stores": "./dist/core/auth/services/cache-token-stores.js",
57
69
  "./core/auth/services/email-verification.service": "./dist/core/auth/services/email-verification.service.js",
58
70
  "./core/auth/services/login.service": "./dist/core/auth/services/login.service.js",
59
71
  "./core/auth/services/oauth-callback.service": "./dist/core/auth/services/oauth-callback.service.js",
@@ -163,6 +175,14 @@
163
175
  "import": "./dist/next/error/index.js"
164
176
  },
165
177
  "./next/error/locale-detector": "./dist/next/error/locale-detector.js",
178
+ "./next/oapi": {
179
+ "types": "./dist/next/oapi/index.d.ts",
180
+ "import": "./dist/next/oapi/index.js"
181
+ },
182
+ "./next/oapi/api-key-auth": "./dist/next/oapi/api-key-auth.js",
183
+ "./next/oapi/openapi-spec": "./dist/next/oapi/openapi-spec.js",
184
+ "./next/oapi/helpers": "./dist/next/oapi/helpers.js",
185
+ "./next/proxy": "./dist/next/proxy.js",
166
186
  "./next/middleware": "./dist/next/middleware/index.js",
167
187
  "./next/middleware/auth": "./dist/next/middleware/auth.js",
168
188
  "./next/middleware/cors": "./dist/next/middleware/cors.js",
@@ -1,15 +1,15 @@
1
- import {
2
- NoopCacheManager
3
- } from "./chunk-XF3WUF3F.js";
4
- import {
5
- RedisCacheManager
6
- } from "./chunk-4TGPAUJV.js";
7
1
  import {
8
2
  HybridCacheManager
9
3
  } from "./chunk-2GK4LDPV.js";
10
4
  import {
11
5
  InMemoryCacheManager
12
6
  } from "./chunk-YYTA6ERS.js";
7
+ import {
8
+ NoopCacheManager
9
+ } from "./chunk-XF3WUF3F.js";
10
+ import {
11
+ RedisCacheManager
12
+ } from "./chunk-4TGPAUJV.js";
13
13
  import {
14
14
  isRedisAvailableNow,
15
15
  isRedisGloballyDisabled
@@ -1,9 +1,3 @@
1
- import {
2
- GitHubOAuthProvider
3
- } from "./chunk-HIZ7USIF.js";
4
- import {
5
- GoogleOAuthProvider
6
- } from "./chunk-GF3DKZIW.js";
7
1
  import {
8
2
  KakaoOAuthProvider
9
3
  } from "./chunk-65HVR74O.js";
@@ -13,6 +7,12 @@ import {
13
7
  import {
14
8
  MicrosoftOAuthProvider
15
9
  } from "./chunk-GSSHHVHF.js";
10
+ import {
11
+ GitHubOAuthProvider
12
+ } from "./chunk-HIZ7USIF.js";
13
+ import {
14
+ GoogleOAuthProvider
15
+ } from "./chunk-GF3DKZIW.js";
16
16
  import {
17
17
  OAuthError
18
18
  } from "./chunk-5GWGARXI.js";
@@ -1,15 +1,15 @@
1
- import {
2
- IPGeolocationProvider
3
- } from "./chunk-GJYHMHTU.js";
4
- import {
5
- MaxMindProvider
6
- } from "./chunk-R463CTX4.js";
7
1
  import {
8
2
  IPApiProvider
9
3
  } from "./chunk-E27YZK7O.js";
10
4
  import {
11
5
  IPApiCoProvider
12
6
  } from "./chunk-MRNRC45L.js";
7
+ import {
8
+ IPGeolocationProvider
9
+ } from "./chunk-GJYHMHTU.js";
10
+ import {
11
+ MaxMindProvider
12
+ } from "./chunk-R463CTX4.js";
13
13
 
14
14
  // src/core/geolocation/providers/index.ts
15
15
  var GeoIPProviderFactory = class {
File without changes