@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 CHANGED
@@ -1,11 +1,11 @@
1
1
  # next-session-inspector
2
2
 
3
- Next.js 미들웨어에서 `nodus_session` 쿠키를 발급하고 유지하며, 방문 이벤트를 Nodus로 전송하는 경량 패키지입니다.
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
- 프로젝트의 `middleware.ts` 파일을 만들거나 수정합니다.
18
+ 루트의 `middleware.ts`에서 그대로 내보냅니다.
19
19
 
20
20
  ```ts
21
21
  export { middleware, config } from "@nodus-lib/nodus";
22
22
  ```
23
23
 
24
- Nodus 사이트 키를 환경 변수로 설정합니다.
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
- 미들웨어는 페이지 요청에서 실행되며, 기존 `nodus_session` 쿠키가 있으면 재사용하고 없으면 새로 발급합니다.
53
+ - 쿠키 이름: `nodus_session`
54
+ - 기존 쿠키가 있으면 재사용합니다.
55
+ - 쿠키가 없으면 `crypto.randomUUID()`로 새 세션 ID를 생성합니다.
56
+ - 쿠키 옵션: `httpOnly`, `sameSite: "lax"`, `secure: true`, `path: "/"`
57
+ - 쿠키 최대 수명: 1년
33
58
 
34
- 기본 matcher는 다음 요청을 제외합니다.
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 { config, middleware } from "./next/middleware";
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 = exports.config = void 0;
4
- var middleware_1 = require("./next/middleware");
5
- Object.defineProperty(exports, "config", { enumerable: true, get: function () { return middleware_1.config; } });
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
- export interface NodusBaseRequest {
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 extends NodusBaseRequest>({ data, url, key }: Prop<T>): void;
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://api.ministudiolab.com/sdk/${url}?key=${key}`, {
5
+ void fetch(`https://localhost:8080/sdk/${url}?key=${key}`, {
6
6
  method: "POST",
7
7
  headers: {
8
8
  "Content-Type": "application/json",
@@ -1,5 +1,4 @@
1
- import { NodusBaseRequest } from "./nodus-server-caller";
2
- export interface NodusVisitEventProp extends NodusBaseRequest {
1
+ export interface NodusVisitEventProp {
3
2
  last_page: string;
4
3
  current_page: string;
5
4
  }
@@ -0,0 +1,3 @@
1
+ import type { NextRequest } from "next/server";
2
+ import { NextResponse } from "next/server";
3
+ export declare function nodus_proxy(request: NextRequest): NextResponse<unknown>;
@@ -1,25 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.config = void 0;
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
- const nodus_session_1 = require("../session/nodus-session");
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nodus-lib/nodus",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
File without changes
@@ -1 +0,0 @@
1
- "use strict";
@@ -1,6 +0,0 @@
1
- import type { NextRequest } from "next/server";
2
- import { NextResponse } from "next/server";
3
- export declare function middleware(request: NextRequest): NextResponse<unknown>;
4
- export declare const config: {
5
- matcher: string[];
6
- };
@@ -1,2 +0,0 @@
1
- import type { NextRequest, NextResponse } from "next/server";
2
- export declare function nodus_cookie_manager(request: NextRequest, response: NextResponse): string;
@@ -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
- }