@nodus-lib/nodus 0.0.4 → 0.0.6
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/README.md +38 -13
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -4
- package/dist/logger/nodus-server-caller.d.ts +2 -5
- package/dist/logger/nodus-server-caller.js +1 -1
- package/dist/logger/nodus-server-manager.d.ts +1 -2
- package/dist/next/nodus_proxy.d.ts +3 -0
- package/dist/next/{middleware.js → nodus_proxy.js} +2 -11
- package/package.json +1 -1
- package/dist/logger/nodus-base-request.d.ts +0 -0
- package/dist/logger/nodus-base-request.js +0 -1
- package/dist/next/middleware.d.ts +0 -6
- package/dist/session/nodus-session.d.ts +0 -2
- package/dist/session/nodus-session.js +0 -20
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# next-session-inspector
|
|
2
2
|
|
|
3
|
-
Next.js 미들웨어에서 `nodus_session`
|
|
3
|
+
Next.js 미들웨어에서 세션 쿠키(`nodus_session`)를 발급하고 유지하는 경량 패키지입니다.
|
|
4
4
|
|
|
5
5
|
## 요구 사항
|
|
6
6
|
|
|
7
7
|
- Node.js `>=18.18.0`
|
|
8
|
-
- Next.js `>=14`
|
|
8
|
+
- Next.js `>=14` (peer dependency)
|
|
9
9
|
|
|
10
10
|
## 설치
|
|
11
11
|
|
|
@@ -15,23 +15,52 @@ npm install @nodus-lib/nodus
|
|
|
15
15
|
|
|
16
16
|
## 사용법
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
앱 루트의 `middleware.ts`에서 그대로 내보냅니다.
|
|
19
19
|
|
|
20
20
|
```ts
|
|
21
21
|
export { middleware, config } from "@nodus-lib/nodus";
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
또는 한 파일에서 감싸서 추가 로직을 실행할 수 있습니다.
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import type { NextRequest } from "next/server";
|
|
28
|
+
import { middleware as baseMiddleware } from "@nodus-lib/nodus";
|
|
29
|
+
|
|
30
|
+
export function middleware(request: NextRequest) {
|
|
31
|
+
const response = baseMiddleware(request);
|
|
32
|
+
|
|
33
|
+
// 추가 로직
|
|
34
|
+
|
|
35
|
+
return response;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export { config } from "@nodus-lib/nodus";
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 환경 변수
|
|
42
|
+
|
|
43
|
+
방문 이벤트를 Nodus로 전송하려면 사이트 키를 설정합니다.
|
|
25
44
|
|
|
26
45
|
```env
|
|
27
46
|
NODUS_SITE_KEY=site_xxx
|
|
28
47
|
```
|
|
29
48
|
|
|
30
|
-
|
|
49
|
+
사이트 키가 없으면 세션 쿠키만 발급하고 방문 이벤트는 전송하지 않습니다.
|
|
50
|
+
|
|
51
|
+
## 동작
|
|
31
52
|
|
|
32
|
-
|
|
53
|
+
- 쿠키 이름: `nodus_session`
|
|
54
|
+
- 기존 쿠키가 있으면 재사용합니다.
|
|
55
|
+
- 쿠키가 없으면 `crypto.randomUUID()`로 새 세션 ID를 생성합니다.
|
|
56
|
+
- 쿠키 옵션: `httpOnly`, `sameSite: "lax"`, `secure: true`, `path: "/"`
|
|
57
|
+
- 쿠키 최대 수명: 1년
|
|
33
58
|
|
|
34
|
-
|
|
59
|
+
## config.matcher
|
|
60
|
+
|
|
61
|
+
기본 matcher는 정적 자산, API, favicon 등을 제외한 페이지 중심 경로에 적용됩니다.
|
|
62
|
+
|
|
63
|
+
제외되는 기본 경로:
|
|
35
64
|
|
|
36
65
|
- `/api`
|
|
37
66
|
- `/_next/static`
|
|
@@ -40,12 +69,8 @@ NODUS_SITE_KEY=site_xxx
|
|
|
40
69
|
- `/sitemap.xml`
|
|
41
70
|
- `/robots.txt`
|
|
42
71
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
- `session_id`
|
|
46
|
-
- `last_page`
|
|
47
|
-
- `current_page`
|
|
72
|
+
필요하면 앱의 `middleware.ts`에서 `config`를 직접 정의해 덮어쓸 수 있습니다.
|
|
48
73
|
|
|
49
74
|
## 라이선스
|
|
50
75
|
|
|
51
|
-
MIT
|
|
76
|
+
MIT. 자세한 내용은 `LICENSE` 파일을 참고하세요.
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { nodus_proxy as middleware } from "./next/nodus_proxy";
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.middleware =
|
|
4
|
-
var
|
|
5
|
-
Object.defineProperty(exports, "
|
|
6
|
-
Object.defineProperty(exports, "middleware", { enumerable: true, get: function () { return middleware_1.middleware; } });
|
|
3
|
+
exports.middleware = void 0;
|
|
4
|
+
var nodus_proxy_1 = require("./next/nodus_proxy");
|
|
5
|
+
Object.defineProperty(exports, "middleware", { enumerable: true, get: function () { return nodus_proxy_1.nodus_proxy; } });
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
session_id: string;
|
|
3
|
-
}
|
|
4
|
-
interface Prop<T extends NodusBaseRequest> {
|
|
1
|
+
interface Prop<T> {
|
|
5
2
|
data: T;
|
|
6
3
|
url: string;
|
|
7
4
|
key: string;
|
|
8
5
|
}
|
|
9
|
-
export declare function nodus_server_caller<T
|
|
6
|
+
export declare function nodus_server_caller<T>({ data, url, key }: Prop<T>): void;
|
|
10
7
|
export {};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.nodus_server_caller = nodus_server_caller;
|
|
4
4
|
function nodus_server_caller({ data, url, key }) {
|
|
5
|
-
void fetch(`https://
|
|
5
|
+
void fetch(`https://localhost:8080/sdk/${url}?key=${key}`, {
|
|
6
6
|
method: "POST",
|
|
7
7
|
headers: {
|
|
8
8
|
"Content-Type": "application/json",
|
|
@@ -1,25 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.middleware = middleware;
|
|
3
|
+
exports.nodus_proxy = nodus_proxy;
|
|
5
4
|
const server_1 = require("next/server");
|
|
6
5
|
const nodus_server_manager_1 = require("../logger/nodus-server-manager");
|
|
7
|
-
|
|
8
|
-
function middleware(request) {
|
|
6
|
+
function nodus_proxy(request) {
|
|
9
7
|
const response = server_1.NextResponse.next();
|
|
10
|
-
const sessionId = (0, nodus_session_1.nodus_cookie_manager)(request, response);
|
|
11
8
|
const key = process.env.NODUS_SITE_KEY ?? process.env.NEXT_PUBLIC_NODUS_SITE_KEY;
|
|
12
9
|
if (key) {
|
|
13
10
|
(0, nodus_server_manager_1.nodus_visit_event)({
|
|
14
|
-
session_id: sessionId,
|
|
15
11
|
last_page: request.headers.get("referer") || "",
|
|
16
12
|
current_page: request.url,
|
|
17
13
|
}, key);
|
|
18
14
|
}
|
|
19
15
|
return response;
|
|
20
16
|
}
|
|
21
|
-
exports.config = {
|
|
22
|
-
matcher: [
|
|
23
|
-
"/((?!api|_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*)",
|
|
24
|
-
],
|
|
25
|
-
};
|
package/package.json
CHANGED
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.nodus_cookie_manager = nodus_cookie_manager;
|
|
4
|
-
const COOKIE_NAME = "nodus_session";
|
|
5
|
-
const COOKIE_MAX_AGE_SECONDS = 60 * 60 * 24 * 365;
|
|
6
|
-
function nodus_cookie_manager(request, response) {
|
|
7
|
-
const existingSession = request.cookies.get(COOKIE_NAME)?.value;
|
|
8
|
-
if (existingSession) {
|
|
9
|
-
return existingSession;
|
|
10
|
-
}
|
|
11
|
-
const sessionId = crypto.randomUUID();
|
|
12
|
-
response.cookies.set(COOKIE_NAME, sessionId, {
|
|
13
|
-
httpOnly: true,
|
|
14
|
-
sameSite: "lax",
|
|
15
|
-
secure: true,
|
|
16
|
-
path: "/",
|
|
17
|
-
maxAge: COOKIE_MAX_AGE_SECONDS,
|
|
18
|
-
});
|
|
19
|
-
return sessionId;
|
|
20
|
-
}
|