@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.
- package/dist/{chunk-XDB3K74B.js → chunk-2QO7YXTF.js} +1 -1
- package/dist/{chunk-ISP4MDKW.js → chunk-5MPMPXIR.js} +1 -1
- package/dist/{chunk-KMUYO6YD.js → chunk-6E2Q27EN.js} +1 -1
- package/dist/chunk-6NFMRZWB.js +8 -0
- package/dist/{chunk-OXKVQGRH.js → chunk-7IOAGJMK.js} +13 -13
- package/dist/{chunk-ROMGYJFX.js → chunk-AWFP2KAU.js} +1 -1
- package/dist/chunk-BTNM5YSU.js +29 -0
- package/dist/chunk-CWS5RPRX.js +0 -0
- package/dist/{chunk-VQ47YRFC.js → chunk-DISEIUYD.js} +2 -2
- package/dist/{chunk-BOABYFJ7.js → chunk-DTRXWS7G.js} +22 -13
- package/dist/{chunk-NERL6VYQ.js → chunk-HNFYO5XV.js} +10 -6
- package/dist/{chunk-ZVGEGDYF.js → chunk-JRORMRVN.js} +1 -1
- package/dist/chunk-L2A6NGW7.js +21 -0
- package/dist/{chunk-CNXK3SLK.js → chunk-MJOXTFIC.js} +2 -2
- package/dist/chunk-MXWSG6ER.js +0 -0
- package/dist/chunk-NUHSUAXG.js +35 -0
- package/dist/{chunk-3P4TZM3O.js → chunk-QBXNL6QU.js} +1 -1
- package/dist/chunk-RWENSBNW.js +162 -0
- package/dist/{chunk-6SDUWMC3.js → chunk-RWN47K7J.js} +1 -1
- package/dist/chunk-TN5ZNYR2.js +0 -0
- package/dist/{chunk-N3TCQ5BF.js → chunk-TQMQ5XXG.js} +17 -2
- package/dist/chunk-XWHT53CZ.js +38 -0
- package/dist/{chunk-7S2PCYNT.js → chunk-YBVZ5UVC.js} +1 -1
- package/dist/chunk-Z4J452HD.js +24 -0
- package/dist/chunk-ZZTBIA57.js +18 -0
- package/dist/core/api-key/api-key.service.d.ts +28 -0
- package/dist/core/api-key/api-key.service.js +9 -0
- package/dist/core/api-key/index.d.ts +6 -0
- package/dist/core/api-key/index.js +28 -0
- package/dist/core/api-key/ip-whitelist.d.ts +4 -0
- package/dist/core/api-key/ip-whitelist.js +9 -0
- package/dist/core/api-key/key-generator.d.ts +6 -0
- package/dist/core/api-key/key-generator.js +11 -0
- package/dist/core/api-key/ports.d.ts +104 -0
- package/dist/core/api-key/ports.js +1 -0
- package/dist/core/api-key/types.d.ts +88 -0
- package/dist/core/api-key/types.js +1 -0
- package/dist/core/api-key/validate.d.ts +9 -0
- package/dist/core/api-key/validate.js +7 -0
- package/dist/core/auth/config.js +2 -1
- package/dist/core/auth/cookie-names.d.ts +3 -0
- package/dist/core/auth/cookie-names.js +9 -0
- package/dist/core/auth/index.js +13 -12
- package/dist/core/auth/jwt/cookie.js +3 -2
- package/dist/core/auth/jwt/index.js +3 -2
- package/dist/core/auth/oauth/index.js +7 -7
- package/dist/core/auth/oauth/providers/index.js +6 -6
- package/dist/core/auth/services/cache-token-stores.d.ts +45 -0
- package/dist/core/auth/services/cache-token-stores.js +59 -0
- package/dist/core/auth/services/index.js +7 -6
- package/dist/core/auth/services/login.service.js +3 -2
- package/dist/core/auth/services/oauth-callback.service.js +3 -2
- package/dist/core/auth/services/token-refresh.service.js +3 -2
- package/dist/core/auth/token-delivery.js +4 -3
- package/dist/core/cache/cache-factory.js +4 -4
- package/dist/core/cache/cache-invalidation.js +5 -5
- package/dist/core/cache/cache-redis.js +1 -1
- package/dist/core/cache/cache-wrapper.js +5 -5
- package/dist/core/cache/cache.js +10 -10
- package/dist/core/cache/hybrid-cache-manager.js +1 -1
- package/dist/core/cache/index.js +10 -10
- package/dist/core/cache/redis-cache-manager.js +1 -1
- package/dist/core/geolocation/index.js +7 -7
- package/dist/core/geolocation/providers/index.js +7 -7
- package/dist/core/system/environment.js +3 -2
- package/dist/core/system/health-check.js +1 -1
- package/dist/core/system/index.js +7 -6
- package/dist/initialize.js +6 -5
- package/dist/next/auth-handlers/index.js +20 -19
- package/dist/next/auth-handlers/login.handler.js +5 -4
- package/dist/next/auth-handlers/logout.handler.js +4 -3
- package/dist/next/auth-handlers/me.handler.js +5 -4
- package/dist/next/auth-handlers/oauth-authorize.handler.js +4 -4
- package/dist/next/auth-handlers/oauth-callback.handler.js +8 -7
- package/dist/next/auth-handlers/refresh.handler.js +5 -4
- package/dist/next/auth-types/handler-types.js +4 -3
- package/dist/next/auth-types/index.js +4 -3
- package/dist/next/error/error-handler.js +1 -1
- package/dist/next/error/index.js +1 -1
- package/dist/next/middleware/auth.js +6 -5
- package/dist/next/middleware/error-handler.js +1 -1
- package/dist/next/middleware/index.js +22 -21
- package/dist/next/middleware/wrappers.js +11 -10
- package/dist/next/oapi/api-key-auth.d.ts +27 -0
- package/dist/next/oapi/api-key-auth.js +14 -0
- package/dist/next/oapi/helpers.d.ts +19 -0
- package/dist/next/oapi/helpers.js +13 -0
- package/dist/next/oapi/index.d.ts +3 -0
- package/dist/next/oapi/index.js +28 -0
- package/dist/next/oapi/openapi-spec.d.ts +18 -0
- package/dist/next/oapi/openapi-spec.js +7 -0
- package/dist/next/proxy.d.ts +38 -0
- package/dist/next/proxy.js +53 -0
- package/dist/next/utils/index.js +14 -14
- package/package.json +21 -1
- package/dist/{chunk-BICSVLN7.js → chunk-NAFMJT62.js} +6 -6
- package/dist/{chunk-V3GEYUBG.js → chunk-UQ3Z3ZAF.js} +6 -6
- package/dist/{chunk-Q5RPNLET.js → chunk-VDRLJU6C.js} +6 -6
- /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-
|
|
5
|
-
import "../../chunk-
|
|
6
|
-
import "../../chunk-
|
|
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";
|
package/dist/next/error/index.js
CHANGED
|
@@ -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-
|
|
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-
|
|
16
|
-
import "../../chunk-
|
|
17
|
-
import "../../chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
55
|
-
import "../../chunk-
|
|
56
|
-
import "../../chunk-
|
|
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-
|
|
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-
|
|
29
|
-
import "../../chunk-
|
|
30
|
-
import "../../chunk-
|
|
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,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,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
|
+
};
|
package/dist/next/utils/index.js
CHANGED
|
@@ -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.
|
|
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
|