@simplysm/service-server 13.0.100 → 14.0.4

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 (88) hide show
  1. package/README.md +79 -133
  2. package/dist/auth/auth-token-payload.js +2 -1
  3. package/dist/auth/auth-token-payload.js.map +1 -6
  4. package/dist/auth/jwt-manager.js +21 -21
  5. package/dist/auth/jwt-manager.js.map +1 -6
  6. package/dist/core/define-service.d.ts +12 -12
  7. package/dist/core/define-service.d.ts.map +1 -1
  8. package/dist/core/define-service.js +77 -63
  9. package/dist/core/define-service.js.map +1 -6
  10. package/dist/core/service-executor.d.ts.map +1 -1
  11. package/dist/core/service-executor.js +42 -32
  12. package/dist/core/service-executor.js.map +1 -6
  13. package/dist/index.d.ts +0 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +11 -2
  16. package/dist/index.js.map +1 -6
  17. package/dist/legacy/v1-auto-update-handler.d.ts +2 -2
  18. package/dist/legacy/v1-auto-update-handler.js +42 -35
  19. package/dist/legacy/v1-auto-update-handler.js.map +1 -6
  20. package/dist/protocol/protocol-wrapper.d.ts +9 -9
  21. package/dist/protocol/protocol-wrapper.js +64 -46
  22. package/dist/protocol/protocol-wrapper.js.map +1 -6
  23. package/dist/service-server.d.ts +2 -1
  24. package/dist/service-server.d.ts.map +1 -1
  25. package/dist/service-server.js +183 -165
  26. package/dist/service-server.js.map +1 -6
  27. package/dist/services/auto-update-service.js +35 -34
  28. package/dist/services/auto-update-service.js.map +1 -6
  29. package/dist/services/orm-service.js +114 -120
  30. package/dist/services/orm-service.js.map +1 -6
  31. package/dist/transport/http/http-request-handler.d.ts.map +1 -1
  32. package/dist/transport/http/http-request-handler.js +58 -46
  33. package/dist/transport/http/http-request-handler.js.map +1 -6
  34. package/dist/transport/http/static-file-handler.js +42 -39
  35. package/dist/transport/http/static-file-handler.js.map +1 -6
  36. package/dist/transport/http/upload-handler.d.ts.map +1 -1
  37. package/dist/transport/http/upload-handler.js +60 -55
  38. package/dist/transport/http/upload-handler.js.map +1 -6
  39. package/dist/transport/socket/service-socket.d.ts +13 -13
  40. package/dist/transport/socket/service-socket.js +132 -108
  41. package/dist/transport/socket/service-socket.js.map +1 -6
  42. package/dist/transport/socket/websocket-handler.d.ts +9 -13
  43. package/dist/transport/socket/websocket-handler.d.ts.map +1 -1
  44. package/dist/transport/socket/websocket-handler.js +148 -139
  45. package/dist/transport/socket/websocket-handler.js.map +1 -6
  46. package/dist/types/server-options.d.ts +1 -1
  47. package/dist/types/server-options.d.ts.map +1 -1
  48. package/dist/types/server-options.js +2 -1
  49. package/dist/types/server-options.js.map +1 -6
  50. package/dist/utils/config-manager.js +48 -46
  51. package/dist/utils/config-manager.js.map +1 -6
  52. package/dist/workers/service-protocol.worker.js +8 -11
  53. package/dist/workers/service-protocol.worker.js.map +1 -6
  54. package/docs/auth.md +28 -16
  55. package/docs/core.md +113 -54
  56. package/docs/legacy.md +21 -0
  57. package/docs/main.md +81 -0
  58. package/docs/protocol.md +31 -0
  59. package/docs/services.md +49 -44
  60. package/docs/transport.md +81 -76
  61. package/docs/types.md +31 -0
  62. package/docs/utilities.md +27 -0
  63. package/package.json +12 -13
  64. package/src/auth/jwt-manager.ts +2 -2
  65. package/src/core/define-service.ts +19 -19
  66. package/src/core/service-executor.ts +23 -17
  67. package/src/index.ts +10 -12
  68. package/src/legacy/v1-auto-update-handler.ts +10 -10
  69. package/src/protocol/protocol-wrapper.ts +16 -16
  70. package/src/service-server.ts +51 -43
  71. package/src/services/auto-update-service.ts +1 -1
  72. package/src/services/orm-service.ts +7 -7
  73. package/src/transport/http/http-request-handler.ts +16 -10
  74. package/src/transport/http/static-file-handler.ts +8 -8
  75. package/src/transport/http/upload-handler.ts +16 -9
  76. package/src/transport/socket/service-socket.ts +22 -22
  77. package/src/transport/socket/websocket-handler.ts +50 -70
  78. package/src/types/server-options.ts +1 -1
  79. package/src/utils/config-manager.ts +11 -11
  80. package/dist/services/smtp-client-service.d.ts +0 -8
  81. package/dist/services/smtp-client-service.d.ts.map +0 -1
  82. package/dist/services/smtp-client-service.js +0 -46
  83. package/dist/services/smtp-client-service.js.map +0 -6
  84. package/docs/server.md +0 -126
  85. package/src/services/smtp-client-service.ts +0 -59
  86. package/tests/define-service.spec.ts +0 -66
  87. package/tests/orm-service.spec.ts +0 -83
  88. package/tests/service-executor.spec.ts +0 -114
package/README.md CHANGED
@@ -1,131 +1,68 @@
1
1
  # @simplysm/service-server
2
2
 
3
- Simplysm package - service module (server)
4
-
5
- Fastify-based service server with WebSocket support, JWT authentication, and built-in ORM/SMTP/auto-update services. Works with `@simplysm/service-client` for client-server communication.
6
-
7
- ## Installation
8
-
9
- ```bash
10
- npm install @simplysm/service-server
11
- ```
12
-
13
- ## API Overview
14
-
15
- ### Types
16
- | API | Type | Description |
17
- |-----|------|-------------|
18
- | `ServiceServerOptions` | interface | Server config (rootPath, port, ssl, auth, services) |
19
-
20
- -> See [docs/server.md](./docs/server.md) for details.
21
-
22
- ### Auth
23
- | API | Type | Description |
24
- |-----|------|-------------|
25
- | `AuthTokenPayload` | interface | JWT payload with roles and custom data |
26
- | `signJwt` | function | Sign a JWT token (HS256, 12h expiry) |
27
- | `verifyJwt` | function | Verify and decode a JWT token |
28
- | `decodeJwt` | function | Decode JWT without verification |
29
-
30
- -> See [docs/auth.md](./docs/auth.md) for details.
31
-
32
- ### Core
33
- | API | Type | Description |
34
- |-----|------|-------------|
35
- | `ServiceContext` | interface | Context with server, socket, auth, config access |
36
- | `createServiceContext` | function | Create a service context |
37
- | `ServiceDefinition` | interface | Service definition (name, factory, auth) |
38
- | `defineService` | function | Define a service with name and factory |
39
- | `auth` | function | Auth wrapper for services/methods (login/roles) |
40
- | `getServiceAuthPermissions` | function | Read auth permissions from wrapped function |
41
- | `ServiceMethods` | type | Extract method types from ServiceDefinition |
42
- | `executeServiceMethod` | function | Execute service method with auth checks |
43
-
44
- -> See [docs/core.md](./docs/core.md) for details.
45
-
46
- ### Transport - Socket
47
- | API | Type | Description |
48
- |-----|------|-------------|
49
- | `WebSocketHandler` | interface | Multi-connection WebSocket manager |
50
- | `createWebSocketHandler` | function | Create WebSocket handler |
51
- | `ServiceSocket` | interface | Single WebSocket connection manager |
52
- | `createServiceSocket` | function | Create service socket |
53
-
54
- -> See [docs/transport.md](./docs/transport.md) for details.
55
-
56
- ### Transport - HTTP
57
- | API | Type | Description |
58
- |-----|------|-------------|
59
- | `handleHttpRequest` | function | Handle HTTP API requests |
60
- | `handleUpload` | function | Handle file upload (multipart) |
61
- | `handleStaticFile` | function | Serve static files from www/ |
62
-
63
- -> See [docs/transport.md](./docs/transport.md) for details.
64
-
65
- ### Protocol
66
- | API | Type | Description |
67
- |-----|------|-------------|
68
- | `ServerProtocolWrapper` | interface | Server protocol with worker thread offloading |
69
- | `createServerProtocolWrapper` | function | Create server protocol wrapper |
70
-
71
- -> See [docs/transport.md](./docs/transport.md) for details.
72
-
73
- ### Services
74
- | API | Type | Description |
75
- |-----|------|-------------|
76
- | `OrmService` | const | Built-in ORM service (DB connection, queries) |
77
- | `AutoUpdateService` | const | Built-in auto-update service |
78
- | `SmtpClientService` | const | Built-in SMTP email service |
79
-
80
- -> See [docs/services.md](./docs/services.md) for details.
81
-
82
- ### Utils
83
- | API | Type | Description |
84
- |-----|------|-------------|
85
- | `getConfig` | function | Read JSON config with caching and live-reload |
86
-
87
- -> See [docs/server.md](./docs/server.md) for details.
88
-
89
- ### Main
90
- | API | Type | Description |
91
- |-----|------|-------------|
92
- | `ServiceServer` | class | Main server (Fastify, WebSocket, auth, events) |
93
- | `createServiceServer` | function | Factory to create ServiceServer |
94
-
95
- -> See [docs/server.md](./docs/server.md) for details.
96
-
97
- ### Legacy
98
- | API | Type | Description |
99
- |-----|------|-------------|
100
- | `handleV1Connection` | function | V1 legacy client handler (auto-update only) |
101
-
102
- -> See [docs/server.md](./docs/server.md) for details.
103
-
104
- ## Usage Examples
3
+ Service server framework -- Fastify-based RPC server with WebSocket support, JWT authentication, service definitions, file upload/download, and built-in ORM/auto-update services.
4
+
5
+ Depends on `@simplysm/service-common` for shared protocol and types.
6
+
7
+ ## API
8
+
9
+ | Export | Kind | Category | Docs |
10
+ |--------|------|----------|------|
11
+ | `ServiceServerOptions` | interface | Types | [docs/types.md](docs/types.md) |
12
+ | `AuthTokenPayload` | interface | Auth | [docs/auth.md](docs/auth.md) |
13
+ | `signJwt` | function | Auth | [docs/auth.md](docs/auth.md) |
14
+ | `verifyJwt` | function | Auth | [docs/auth.md](docs/auth.md) |
15
+ | `decodeJwt` | function | Auth | [docs/auth.md](docs/auth.md) |
16
+ | `ServiceContext` | interface | Core | [docs/core.md](docs/core.md) |
17
+ | `createServiceContext` | function | Core | [docs/core.md](docs/core.md) |
18
+ | `getServiceAuthPermissions` | function | Core | [docs/core.md](docs/core.md) |
19
+ | `auth` | function | Core | [docs/core.md](docs/core.md) |
20
+ | `ServiceDefinition` | interface | Core | [docs/core.md](docs/core.md) |
21
+ | `defineService` | function | Core | [docs/core.md](docs/core.md) |
22
+ | `ServiceMethods` | type | Core | [docs/core.md](docs/core.md) |
23
+ | `executeServiceMethod` | function | Core | [docs/core.md](docs/core.md) |
24
+ | `WebSocketHandler` | interface | Transport | [docs/transport.md](docs/transport.md) |
25
+ | `createWebSocketHandler` | function | Transport | [docs/transport.md](docs/transport.md) |
26
+ | `ServiceSocket` | interface | Transport | [docs/transport.md](docs/transport.md) |
27
+ | `createServiceSocket` | function | Transport | [docs/transport.md](docs/transport.md) |
28
+ | `handleHttpRequest` | function | Transport | [docs/transport.md](docs/transport.md) |
29
+ | `handleUpload` | function | Transport | [docs/transport.md](docs/transport.md) |
30
+ | `handleStaticFile` | function | Transport | [docs/transport.md](docs/transport.md) |
31
+ | `ServerProtocolWrapper` | interface | Protocol | [docs/protocol.md](docs/protocol.md) |
32
+ | `createServerProtocolWrapper` | function | Protocol | [docs/protocol.md](docs/protocol.md) |
33
+ | `OrmService` | const | Services | [docs/services.md](docs/services.md) |
34
+ | `OrmServiceType` | type | Services | [docs/services.md](docs/services.md) |
35
+ | `AutoUpdateService` | const | Services | [docs/services.md](docs/services.md) |
36
+ | `AutoUpdateServiceType` | type | Services | [docs/services.md](docs/services.md) |
37
+ | `getConfig` | function | Utilities | [docs/utilities.md](docs/utilities.md) |
38
+ | `handleV1Connection` | function | Legacy | [docs/legacy.md](docs/legacy.md) |
39
+ | `ServiceServer` | class | Main | [docs/main.md](docs/main.md) |
40
+ | `createServiceServer` | function | Main | [docs/main.md](docs/main.md) |
41
+
42
+ ## Usage
105
43
 
106
44
  ### Basic Server Setup
107
45
 
108
- ```typescript
46
+ ```ts
109
47
  import { createServiceServer, defineService, auth } from "@simplysm/service-server";
110
- import { OrmService, AutoUpdateService } from "@simplysm/service-server";
111
48
 
112
- // Define a custom service
113
- const HealthService = defineService("Health", (ctx) => ({
114
- check: () => ({ status: "ok", time: new Date().toISOString() }),
49
+ // Define a service
50
+ const GreetService = defineService("Greet", (ctx) => ({
51
+ hello(name: string) {
52
+ return `Hello, ${name}!`;
53
+ },
54
+ // Protected method requiring authentication
55
+ secret: auth(["admin"], (msg: string) => {
56
+ return `Secret for ${ctx.authInfo}: ${msg}`;
57
+ }),
115
58
  }));
116
59
 
117
- // Define an authenticated service
118
- const UserService = defineService("User", auth((ctx) => ({
119
- getProfile: () => ctx.authInfo,
120
- adminOnly: auth(["admin"], () => "admin-only data"),
121
- })));
122
-
123
- // Create and start server
60
+ // Create and start the server
124
61
  const server = createServiceServer({
125
- rootPath: "/app",
62
+ rootPath: process.cwd(),
126
63
  port: 3000,
127
64
  auth: { jwtSecret: "my-secret" },
128
- services: [HealthService, UserService, OrmService, AutoUpdateService],
65
+ services: [GreetService],
129
66
  });
130
67
 
131
68
  await server.listen();
@@ -133,31 +70,40 @@ await server.listen();
133
70
 
134
71
  ### JWT Authentication
135
72
 
136
- ```typescript
73
+ ```ts
137
74
  import { signJwt, verifyJwt } from "@simplysm/service-server";
138
75
 
139
- // Sign token (in login handler)
140
- const token = await server.signAuthToken({
141
- roles: ["user", "admin"],
142
- data: { userId: 123, name: "John" },
76
+ // Sign a token
77
+ const token = await signJwt("my-secret", {
78
+ roles: ["admin"],
79
+ data: { userId: 1 },
143
80
  });
144
81
 
145
- // Verify token
146
- const payload = await server.verifyAuthToken(token);
147
- console.log(payload.data.name); // "John"
82
+ // Verify a token
83
+ const payload = await verifyJwt("my-secret", token);
148
84
  ```
149
85
 
150
- ### Server-Side Event Emission
86
+ ### Event Broadcasting
151
87
 
152
- ```typescript
88
+ ```ts
153
89
  import { defineEvent } from "@simplysm/service-common";
154
90
 
155
- const OrderUpdated = defineEvent<{ orderId: number }, { status: string }>("OrderUpdated");
91
+ const NotifyEvent = defineEvent<{ userId: number }, { text: string }>("Notify");
156
92
 
157
- // Emit to all listeners with matching orderId
158
- await server.emitEvent(
159
- OrderUpdated,
160
- (info) => info.orderId === 123,
161
- { status: "shipped" },
162
- );
93
+ // Emit from server
94
+ await server.emitEvent(NotifyEvent, (info) => info.userId === 42, { text: "Hello!" });
95
+ ```
96
+
97
+ ### ORM Service
98
+
99
+ The server includes a built-in `OrmService` for database operations. Include it in your service list:
100
+
101
+ ```ts
102
+ import { createServiceServer, OrmService } from "@simplysm/service-server";
103
+
104
+ const server = createServiceServer({
105
+ rootPath: process.cwd(),
106
+ port: 3000,
107
+ services: [OrmService],
108
+ });
163
109
  ```
@@ -1 +1,2 @@
1
- //# sourceMappingURL=auth-token-payload.js.map
1
+ export {};
2
+ //# sourceMappingURL=auth-token-payload.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "mappings": "",
5
- "names": []
6
- }
1
+ {"version":3,"file":"auth-token-payload.js","sourceRoot":"","sources":["..\\..\\src\\auth\\auth-token-payload.ts"],"names":[],"mappings":""}
@@ -1,26 +1,26 @@
1
1
  import * as jose from "jose";
2
- async function signJwt(jwtSecret, payload) {
3
- const secret = new TextEncoder().encode(jwtSecret);
4
- return new jose.SignJWT(payload).setProtectedHeader({ alg: "HS256" }).setIssuedAt().setExpirationTime("12h").sign(secret);
2
+ export async function signJwt(jwtSecret, payload) {
3
+ const secret = new TextEncoder().encode(jwtSecret);
4
+ return new jose.SignJWT(payload)
5
+ .setProtectedHeader({ alg: "HS256" })
6
+ .setIssuedAt()
7
+ .setExpirationTime("12h")
8
+ .sign(secret);
5
9
  }
6
- async function verifyJwt(jwtSecret, token) {
7
- const secret = new TextEncoder().encode(jwtSecret);
8
- try {
9
- const { payload } = await jose.jwtVerify(token, secret);
10
- return payload;
11
- } catch (err) {
12
- if (err != null && typeof err === "object" && "code" in err && err.code === "ERR_JWT_EXPIRED") {
13
- throw new Error("Token has expired.");
10
+ export async function verifyJwt(jwtSecret, token) {
11
+ const secret = new TextEncoder().encode(jwtSecret);
12
+ try {
13
+ const { payload } = await jose.jwtVerify(token, secret);
14
+ return payload;
15
+ }
16
+ catch (err) {
17
+ if (err != null && typeof err === "object" && "code" in err && err.code === "ERR_JWT_EXPIRED") {
18
+ throw new Error("토큰이 만료되었습니다.");
19
+ }
20
+ throw new Error("유효하지 않은 토큰입니다.");
14
21
  }
15
- throw new Error("Invalid token.");
16
- }
17
22
  }
18
- function decodeJwt(token) {
19
- return jose.decodeJwt(token);
23
+ export function decodeJwt(token) {
24
+ return jose.decodeJwt(token);
20
25
  }
21
- export {
22
- decodeJwt,
23
- signJwt,
24
- verifyJwt
25
- };
26
- //# sourceMappingURL=jwt-manager.js.map
26
+ //# sourceMappingURL=jwt-manager.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/auth/jwt-manager.ts"],
4
- "mappings": "AAAA,YAAY,UAAU;AAGtB,eAAsB,QACpB,WACA,SACiB;AACjB,QAAM,SAAS,IAAI,YAAY,EAAE,OAAO,SAAS;AAEjD,SAAO,IAAI,KAAK,QAAQ,OAAO,EAC5B,mBAAmB,EAAE,KAAK,QAAQ,CAAC,EACnC,YAAY,EACZ,kBAAkB,KAAK,EACvB,KAAK,MAAM;AAChB;AAEA,eAAsB,UACpB,WACA,OACsC;AACtC,QAAM,SAAS,IAAI,YAAY,EAAE,OAAO,SAAS;AAEjD,MAAI;AACF,UAAM,EAAE,QAAQ,IAAI,MAAM,KAAK,UAAU,OAAO,MAAM;AACtD,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,QAAI,OAAO,QAAQ,OAAO,QAAQ,YAAY,UAAU,OAAO,IAAI,SAAS,mBAAmB;AAC7F,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AACA,UAAM,IAAI,MAAM,gBAAgB;AAAA,EAClC;AACF;AAEO,SAAS,UAA+B,OAA4C;AACzF,SAAO,KAAK,UAAU,KAAK;AAC7B;",
5
- "names": []
6
- }
1
+ {"version":3,"file":"jwt-manager.js","sourceRoot":"","sources":["..\\..\\src\\auth\\jwt-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,SAAiB,EACjB,OAAoC;IAEpC,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEnD,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;SAC7B,kBAAkB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;SACpC,WAAW,EAAE;SACb,iBAAiB,CAAC,KAAK,CAAC;SACxB,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,SAAiB,EACjB,KAAa;IAEb,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO,OAAsC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC9F,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAsB,KAAa;IAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAgC,CAAC;AAC9D,CAAC"}
@@ -8,7 +8,7 @@ export interface ServiceContext<TAuthInfo = unknown> {
8
8
  clientName: string;
9
9
  authTokenPayload?: AuthTokenPayload<TAuthInfo>;
10
10
  };
11
- /** V1 legacy context (auto-update only) */
11
+ /** V1 레거시 컨텍스트 (자동 업데이트 전용) */
12
12
  legacy?: {
13
13
  clientName?: string;
14
14
  };
@@ -23,15 +23,15 @@ export declare function createServiceContext<TAuthInfo = unknown>(server: Servic
23
23
  }, legacy?: {
24
24
  clientName?: string;
25
25
  }): ServiceContext<TAuthInfo>;
26
- /** Read auth permissions from an auth()-wrapped function. Returns undefined if not wrapped. */
26
+ /** auth()로 래핑된 함수에서 인증 권한을 읽는다. 래핑되지 않은 경우 undefined를 반환한다. */
27
27
  export declare function getServiceAuthPermissions(fn: Function): string[] | undefined;
28
28
  /**
29
- * Auth wrapper for service factories and methods.
29
+ * 서비스 팩토리 메서드용 인증 래퍼.
30
30
  *
31
- * - Service-level: `auth((ctx) => ({ ... }))` — all methods require login
32
- * - Service-level with roles: `auth(["admin"], (ctx) => ({ ... }))`
33
- * - Method-level: `auth(() => result)` — this method requires login
34
- * - Method-level with roles: `auth(["admin"], () => result)`
31
+ * - 서비스 수준: `auth((ctx) => ({ ... }))` — 모든 메서드에 로그인 필요
32
+ * - 서비스 수준 (역할 지정): `auth(["admin"], (ctx) => ({ ... }))`
33
+ * - 메서드 수준: `auth(() => result)` — 해당 메서드에 로그인 필요
34
+ * - 메서드 수준 (역할 지정): `auth(["admin"], () => result)`
35
35
  */
36
36
  export declare function auth<TFunction extends (...args: any[]) => any>(fn: TFunction): TFunction;
37
37
  export declare function auth<TFunction extends (...args: any[]) => any>(permissions: string[], fn: TFunction): TFunction;
@@ -41,15 +41,15 @@ export interface ServiceDefinition<TMethods = Record<string, (...args: any[]) =>
41
41
  authPermissions?: string[];
42
42
  }
43
43
  /**
44
- * Define a service with a name and factory function.
44
+ * 이름과 팩토리 함수로 서비스를 정의한다.
45
45
  *
46
46
  * @example
47
- * // Basic service
47
+ * // 기본 서비스
48
48
  * const HealthService = defineService("Health", (ctx) => ({
49
49
  * check: () => ({ status: "ok" }),
50
50
  * }));
51
51
  *
52
- * // Service with auth
52
+ * // 인증이 필요한 서비스
53
53
  * const UserService = defineService("User", auth((ctx) => ({
54
54
  * getProfile: () => ctx.authInfo,
55
55
  * adminOnly: auth(["admin"], () => "admin"),
@@ -57,11 +57,11 @@ export interface ServiceDefinition<TMethods = Record<string, (...args: any[]) =>
57
57
  */
58
58
  export declare function defineService<TMethods extends Record<string, (...args: any[]) => any>>(name: string, factory: (ctx: ServiceContext) => TMethods): ServiceDefinition<TMethods>;
59
59
  /**
60
- * Extract method signatures from a ServiceDefinition for client-side type sharing.
60
+ * 클라이언트 타입 공유를 위해 ServiceDefinition에서 메서드 시그니처를 추출한다.
61
61
  *
62
62
  * @example
63
63
  * export type UserServiceType = ServiceMethods<typeof UserService>;
64
- * // Client: client.getService<UserServiceType>("User");
64
+ * // 클라이언트: client.getService<UserServiceType>("User");
65
65
  */
66
66
  export type ServiceMethods<TDefinition> = TDefinition extends ServiceDefinition<infer M> ? M : never;
67
67
  //# sourceMappingURL=define-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"define-service.d.ts","sourceRoot":"","sources":["..\\..\\src\\core\\define-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAOnE,MAAM,WAAW,cAAc,CAAC,SAAS,GAAG,OAAO;IACjD,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;KAChD,CAAC;IAEF,2CAA2C;IAC3C,MAAM,CAAC,EAAE;QACP,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,IAAI,QAAQ,IAAI,SAAS,GAAG,SAAS,CAAC;IACtC,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAAC;IACrC,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAAC;IACrC,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC3C;AAED,wBAAgB,oBAAoB,CAAC,SAAS,GAAG,OAAO,EACtD,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,EAChC,MAAM,CAAC,EAAE,aAAa,EACtB,IAAI,CAAC,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAA;CAAE,EAC7E,MAAM,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B,cAAc,CAAC,SAAS,CAAC,CAoD3B;AAMD,+FAA+F;AAC/F,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,EAAE,GAAG,SAAS,CAE5E;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,SAAS,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,SAAS,GAAG,SAAS,CAAC;AAC1F,wBAAgB,IAAI,CAAC,SAAS,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC5D,WAAW,EAAE,MAAM,EAAE,EACrB,EAAE,EAAE,SAAS,GACZ,SAAS,CAAC;AAcb,MAAM,WAAW,iBAAiB,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,QAAQ,CAAC;IAC3C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EACpF,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,QAAQ,GACzC,iBAAiB,CAAC,QAAQ,CAAC,CAM7B;AAID;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,CAAC,WAAW,IACpC,WAAW,SAAS,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"define-service.d.ts","sourceRoot":"","sources":["..\\..\\src\\core\\define-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAOnE,MAAM,WAAW,cAAc,CAAC,SAAS,GAAG,OAAO;IACjD,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;KAChD,CAAC;IAEF,+BAA+B;IAC/B,MAAM,CAAC,EAAE;QACP,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,IAAI,QAAQ,IAAI,SAAS,GAAG,SAAS,CAAC;IACtC,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAAC;IACrC,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAAC;IACrC,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC3C;AAED,wBAAgB,oBAAoB,CAAC,SAAS,GAAG,OAAO,EACtD,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,EAChC,MAAM,CAAC,EAAE,aAAa,EACtB,IAAI,CAAC,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAA;CAAE,EAC7E,MAAM,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B,cAAc,CAAC,SAAS,CAAC,CAoD3B;AAMD,+DAA+D;AAC/D,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,EAAE,GAAG,SAAS,CAE5E;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,SAAS,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,SAAS,GAAG,SAAS,CAAC;AAC1F,wBAAgB,IAAI,CAAC,SAAS,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC5D,WAAW,EAAE,MAAM,EAAE,EACrB,EAAE,EAAE,SAAS,GACZ,SAAS,CAAC;AAcb,MAAM,WAAW,iBAAiB,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,QAAQ,CAAC;IAC3C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EACpF,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,QAAQ,GACzC,iBAAiB,CAAC,QAAQ,CAAC,CAM7B;AAID;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,CAAC,WAAW,IACpC,WAAW,SAAS,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC"}
@@ -1,70 +1,84 @@
1
1
  import { obj } from "@simplysm/core-common";
2
2
  import { getConfig } from "../utils/config-manager.js";
3
3
  import path from "path";
4
- function createServiceContext(server, socket, http, legacy) {
5
- return {
6
- server,
7
- socket,
8
- http,
9
- legacy,
10
- get authInfo() {
11
- return socket?.authTokenPayload?.data ?? http?.authTokenPayload?.data;
12
- },
13
- get clientName() {
14
- const name = socket?.clientName ?? http?.clientName ?? legacy?.clientName;
15
- if (name == null) return void 0;
16
- if (name === "" || name.includes("..") || name.includes("/") || name.includes("\\")) {
17
- throw new Error(`Invalid client name: ${name}`);
18
- }
19
- return name;
20
- },
21
- get clientPath() {
22
- const name = this.clientName;
23
- return name == null ? void 0 : path.resolve(server.options.rootPath, "www", name);
24
- },
25
- async getConfig(section) {
26
- let configParent = {};
27
- const rootFilePath = path.resolve(server.options.rootPath, ".config.json");
28
- const rootConfig = await getConfig(rootFilePath);
29
- if (rootConfig != null) {
30
- configParent = rootConfig;
31
- }
32
- const targetPath = this.clientPath;
33
- if (targetPath != null) {
34
- const clientFilePath = path.resolve(targetPath, ".config.json");
35
- const clientConfig = await getConfig(clientFilePath);
36
- if (clientConfig != null) {
37
- configParent = obj.merge(configParent, clientConfig);
38
- }
39
- }
40
- const config = configParent[section];
41
- if (config == null) throw new Error(`Configuration section not found: ${section}`);
42
- return config;
43
- }
44
- };
4
+ export function createServiceContext(server, socket, http, legacy) {
5
+ return {
6
+ server,
7
+ socket,
8
+ http,
9
+ legacy,
10
+ get authInfo() {
11
+ return (socket?.authTokenPayload?.data ?? http?.authTokenPayload?.data);
12
+ },
13
+ get clientName() {
14
+ const name = socket?.clientName ?? http?.clientName ?? legacy?.clientName;
15
+ if (name == null)
16
+ return undefined;
17
+ if (name === "" || name.includes("..") || name.includes("/") || name.includes("\\")) {
18
+ throw new Error(`유효하지 않은 클라이언트 이름: ${name}`);
19
+ }
20
+ return name;
21
+ },
22
+ get clientPath() {
23
+ const name = this.clientName;
24
+ return name == null ? undefined : path.resolve(server.options.rootPath, "www", name);
25
+ },
26
+ async getConfig(section) {
27
+ let configParent = {};
28
+ const rootFilePath = path.resolve(server.options.rootPath, ".config.json");
29
+ const rootConfig = await getConfig(rootFilePath);
30
+ if (rootConfig != null) {
31
+ configParent = rootConfig;
32
+ }
33
+ const targetPath = this.clientPath;
34
+ if (targetPath != null) {
35
+ const clientFilePath = path.resolve(targetPath, ".config.json");
36
+ const clientConfig = await getConfig(clientFilePath);
37
+ if (clientConfig != null) {
38
+ configParent = obj.merge(configParent, clientConfig);
39
+ }
40
+ }
41
+ const config = configParent[section];
42
+ if (config == null)
43
+ throw new Error(`설정 섹션을 찾을 수 없습니다: ${section}`);
44
+ return config;
45
+ },
46
+ };
45
47
  }
46
- const AUTH_PERMISSIONS = /* @__PURE__ */ Symbol("authPermissions");
47
- function getServiceAuthPermissions(fn) {
48
- return fn[AUTH_PERMISSIONS];
48
+ // ── 인증 ──
49
+ const AUTH_PERMISSIONS = Symbol("authPermissions");
50
+ /** auth()로 래핑된 함수에서 인증 권한을 읽는다. 래핑되지 않은 경우 undefined를 반환한다. */
51
+ export function getServiceAuthPermissions(fn) {
52
+ return fn[AUTH_PERMISSIONS];
49
53
  }
50
- function auth(permissionsOrFn, maybeFn) {
51
- const permissions = Array.isArray(permissionsOrFn) ? permissionsOrFn : [];
52
- const fn = Array.isArray(permissionsOrFn) ? maybeFn : permissionsOrFn;
53
- const wrapper = (...args) => fn(...args);
54
- wrapper[AUTH_PERMISSIONS] = permissions;
55
- return wrapper;
54
+ export function auth(permissionsOrFn, maybeFn) {
55
+ const permissions = Array.isArray(permissionsOrFn) ? permissionsOrFn : [];
56
+ const fn = Array.isArray(permissionsOrFn) ? maybeFn : permissionsOrFn;
57
+ // 호출 동작을 유지하는 래퍼 생성
58
+ const wrapper = (...args) => fn(...args);
59
+ wrapper[AUTH_PERMISSIONS] = permissions;
60
+ return wrapper;
56
61
  }
57
- function defineService(name, factory) {
58
- return {
59
- name,
60
- factory,
61
- authPermissions: getServiceAuthPermissions(factory)
62
- };
62
+ /**
63
+ * 이름과 팩토리 함수로 서비스를 정의한다.
64
+ *
65
+ * @example
66
+ * // 기본 서비스
67
+ * const HealthService = defineService("Health", (ctx) => ({
68
+ * check: () => ({ status: "ok" }),
69
+ * }));
70
+ *
71
+ * // 인증이 필요한 서비스
72
+ * const UserService = defineService("User", auth((ctx) => ({
73
+ * getProfile: () => ctx.authInfo,
74
+ * adminOnly: auth(["admin"], () => "admin"),
75
+ * })));
76
+ */
77
+ export function defineService(name, factory) {
78
+ return {
79
+ name,
80
+ factory,
81
+ authPermissions: getServiceAuthPermissions(factory),
82
+ };
63
83
  }
64
- export {
65
- auth,
66
- createServiceContext,
67
- defineService,
68
- getServiceAuthPermissions
69
- };
70
- //# sourceMappingURL=define-service.js.map
84
+ //# sourceMappingURL=define-service.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/core/define-service.ts"],
4
- "mappings": "AAGA,SAAS,WAAW;AACpB,SAAS,iBAAiB;AAC1B,OAAO,UAAU;AAuBV,SAAS,qBACd,QACA,QACA,MACA,QAC2B;AAC3B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA,IAAI,WAAkC;AACpC,aAAQ,QAAQ,kBAAkB,QAAQ,MAAM,kBAAkB;AAAA,IAGpE;AAAA,IAEA,IAAI,aAAiC;AACnC,YAAM,OAAO,QAAQ,cAAc,MAAM,cAAc,QAAQ;AAC/D,UAAI,QAAQ,KAAM,QAAO;AAEzB,UAAI,SAAS,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,GAAG,KAAK,KAAK,SAAS,IAAI,GAAG;AACnF,cAAM,IAAI,MAAM,wBAAwB,IAAI,EAAE;AAAA,MAChD;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,IAAI,aAAiC;AACnC,YAAM,OAAO,KAAK;AAClB,aAAO,QAAQ,OAAO,SAAY,KAAK,QAAQ,OAAO,QAAQ,UAAU,OAAO,IAAI;AAAA,IACrF;AAAA,IAEA,MAAM,UAAa,SAA6B;AAC9C,UAAI,eAA8C,CAAC;AAEnD,YAAM,eAAe,KAAK,QAAQ,OAAO,QAAQ,UAAU,cAAc;AACzE,YAAM,aAAa,MAAM,UAA6B,YAAY;AAClE,UAAI,cAAc,MAAM;AACtB,uBAAe;AAAA,MACjB;AAEA,YAAM,aAAa,KAAK;AACxB,UAAI,cAAc,MAAM;AACtB,cAAM,iBAAiB,KAAK,QAAQ,YAAY,cAAc;AAC9D,cAAM,eAAe,MAAM,UAA6B,cAAc;AACtE,YAAI,gBAAgB,MAAM;AACxB,yBAAe,IAAI,MAAM,cAAc,YAAY;AAAA,QACrD;AAAA,MACF;AAEA,YAAM,SAAS,aAAa,OAAO;AACnC,UAAI,UAAU,KAAM,OAAM,IAAI,MAAM,oCAAoC,OAAO,EAAE;AACjF,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAIA,MAAM,mBAAmB,uBAAO,iBAAiB;AAG1C,SAAS,0BAA0B,IAAoC;AAC5E,SAAQ,GAA0C,gBAAgB;AACpE;AAeO,SAAS,KAAK,iBAAsC,SAA8B;AACvF,QAAM,cAAc,MAAM,QAAQ,eAAe,IAAI,kBAAkB,CAAC;AACxE,QAAM,KAAK,MAAM,QAAQ,eAAe,IAAI,UAAW;AAGvD,QAAM,UAAU,IAAI,SAAoB,GAAG,GAAG,IAAI;AAClD,EAAC,QAA+C,gBAAgB,IAAI;AAEpE,SAAO;AACT;AAyBO,SAAS,cACd,MACA,SAC6B;AAC7B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,iBAAiB,0BAA0B,OAAO;AAAA,EACpD;AACF;",
5
- "names": []
6
- }
1
+ {"version":3,"file":"define-service.js","sourceRoot":"","sources":["..\\..\\src\\core\\define-service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"service-executor.d.ts","sourceRoot":"","sources":["..\\..\\src\\core\\service-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;CACpE,GACA,OAAO,CAAC,OAAO,CAAC,CAoDlB"}
1
+ {"version":3,"file":"service-executor.d.ts","sourceRoot":"","sources":["..\\..\\src\\core\\service-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;CACpE,GACA,OAAO,CAAC,OAAO,CAAC,CA0DlB"}