@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.
- package/README.md +79 -133
- package/dist/auth/auth-token-payload.js +2 -1
- package/dist/auth/auth-token-payload.js.map +1 -6
- package/dist/auth/jwt-manager.js +21 -21
- package/dist/auth/jwt-manager.js.map +1 -6
- package/dist/core/define-service.d.ts +12 -12
- package/dist/core/define-service.d.ts.map +1 -1
- package/dist/core/define-service.js +77 -63
- package/dist/core/define-service.js.map +1 -6
- package/dist/core/service-executor.d.ts.map +1 -1
- package/dist/core/service-executor.js +42 -32
- package/dist/core/service-executor.js.map +1 -6
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -6
- package/dist/legacy/v1-auto-update-handler.d.ts +2 -2
- package/dist/legacy/v1-auto-update-handler.js +42 -35
- package/dist/legacy/v1-auto-update-handler.js.map +1 -6
- package/dist/protocol/protocol-wrapper.d.ts +9 -9
- package/dist/protocol/protocol-wrapper.js +64 -46
- package/dist/protocol/protocol-wrapper.js.map +1 -6
- package/dist/service-server.d.ts +2 -1
- package/dist/service-server.d.ts.map +1 -1
- package/dist/service-server.js +183 -165
- package/dist/service-server.js.map +1 -6
- package/dist/services/auto-update-service.js +35 -34
- package/dist/services/auto-update-service.js.map +1 -6
- package/dist/services/orm-service.js +114 -120
- package/dist/services/orm-service.js.map +1 -6
- package/dist/transport/http/http-request-handler.d.ts.map +1 -1
- package/dist/transport/http/http-request-handler.js +58 -46
- package/dist/transport/http/http-request-handler.js.map +1 -6
- package/dist/transport/http/static-file-handler.js +42 -39
- package/dist/transport/http/static-file-handler.js.map +1 -6
- package/dist/transport/http/upload-handler.d.ts.map +1 -1
- package/dist/transport/http/upload-handler.js +60 -55
- package/dist/transport/http/upload-handler.js.map +1 -6
- package/dist/transport/socket/service-socket.d.ts +13 -13
- package/dist/transport/socket/service-socket.js +132 -108
- package/dist/transport/socket/service-socket.js.map +1 -6
- package/dist/transport/socket/websocket-handler.d.ts +9 -13
- package/dist/transport/socket/websocket-handler.d.ts.map +1 -1
- package/dist/transport/socket/websocket-handler.js +148 -139
- package/dist/transport/socket/websocket-handler.js.map +1 -6
- package/dist/types/server-options.d.ts +1 -1
- package/dist/types/server-options.d.ts.map +1 -1
- package/dist/types/server-options.js +2 -1
- package/dist/types/server-options.js.map +1 -6
- package/dist/utils/config-manager.js +48 -46
- package/dist/utils/config-manager.js.map +1 -6
- package/dist/workers/service-protocol.worker.js +8 -11
- package/dist/workers/service-protocol.worker.js.map +1 -6
- package/docs/auth.md +28 -16
- package/docs/core.md +113 -54
- package/docs/legacy.md +21 -0
- package/docs/main.md +81 -0
- package/docs/protocol.md +31 -0
- package/docs/services.md +49 -44
- package/docs/transport.md +81 -76
- package/docs/types.md +31 -0
- package/docs/utilities.md +27 -0
- package/package.json +12 -13
- package/src/auth/jwt-manager.ts +2 -2
- package/src/core/define-service.ts +19 -19
- package/src/core/service-executor.ts +23 -17
- package/src/index.ts +10 -12
- package/src/legacy/v1-auto-update-handler.ts +10 -10
- package/src/protocol/protocol-wrapper.ts +16 -16
- package/src/service-server.ts +51 -43
- package/src/services/auto-update-service.ts +1 -1
- package/src/services/orm-service.ts +7 -7
- package/src/transport/http/http-request-handler.ts +16 -10
- package/src/transport/http/static-file-handler.ts +8 -8
- package/src/transport/http/upload-handler.ts +16 -9
- package/src/transport/socket/service-socket.ts +22 -22
- package/src/transport/socket/websocket-handler.ts +50 -70
- package/src/types/server-options.ts +1 -1
- package/src/utils/config-manager.ts +11 -11
- package/dist/services/smtp-client-service.d.ts +0 -8
- package/dist/services/smtp-client-service.d.ts.map +0 -1
- package/dist/services/smtp-client-service.js +0 -46
- package/dist/services/smtp-client-service.js.map +0 -6
- package/docs/server.md +0 -126
- package/src/services/smtp-client-service.ts +0 -59
- package/tests/define-service.spec.ts +0 -66
- package/tests/orm-service.spec.ts +0 -83
- package/tests/service-executor.spec.ts +0 -114
package/README.md
CHANGED
|
@@ -1,131 +1,68 @@
|
|
|
1
1
|
# @simplysm/service-server
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
##
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
|
17
|
-
|
|
18
|
-
| `
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
|
24
|
-
|
|
25
|
-
| `
|
|
26
|
-
| `
|
|
27
|
-
| `
|
|
28
|
-
| `
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
|
34
|
-
|
|
35
|
-
| `
|
|
36
|
-
| `
|
|
37
|
-
| `
|
|
38
|
-
| `
|
|
39
|
-
| `
|
|
40
|
-
| `
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
```
|
|
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
|
|
113
|
-
const
|
|
114
|
-
|
|
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
|
-
//
|
|
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:
|
|
62
|
+
rootPath: process.cwd(),
|
|
126
63
|
port: 3000,
|
|
127
64
|
auth: { jwtSecret: "my-secret" },
|
|
128
|
-
services: [
|
|
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
|
-
```
|
|
73
|
+
```ts
|
|
137
74
|
import { signJwt, verifyJwt } from "@simplysm/service-server";
|
|
138
75
|
|
|
139
|
-
// Sign token
|
|
140
|
-
const token = await
|
|
141
|
-
roles: ["
|
|
142
|
-
data: { userId:
|
|
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
|
|
147
|
-
console.log(payload.data.name); // "John"
|
|
82
|
+
// Verify a token
|
|
83
|
+
const payload = await verifyJwt("my-secret", token);
|
|
148
84
|
```
|
|
149
85
|
|
|
150
|
-
###
|
|
86
|
+
### Event Broadcasting
|
|
151
87
|
|
|
152
|
-
```
|
|
88
|
+
```ts
|
|
153
89
|
import { defineEvent } from "@simplysm/service-common";
|
|
154
90
|
|
|
155
|
-
const
|
|
91
|
+
const NotifyEvent = defineEvent<{ userId: number }, { text: string }>("Notify");
|
|
156
92
|
|
|
157
|
-
// Emit
|
|
158
|
-
await server.emitEvent(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
-
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=auth-token-payload.js.map
|
package/dist/auth/jwt-manager.js
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import * as jose from "jose";
|
|
2
|
-
async function signJwt(jwtSecret, payload) {
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
23
|
+
export function decodeJwt(token) {
|
|
24
|
+
return jose.decodeJwt(token);
|
|
20
25
|
}
|
|
21
|
-
|
|
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
|
|
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
|
-
/**
|
|
26
|
+
/** auth()로 래핑된 함수에서 인증 권한을 읽는다. 래핑되지 않은 경우 undefined를 반환한다. */
|
|
27
27
|
export declare function getServiceAuthPermissions(fn: Function): string[] | undefined;
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
29
|
+
* 서비스 팩토리 및 메서드용 인증 래퍼.
|
|
30
30
|
*
|
|
31
|
-
* -
|
|
32
|
-
* -
|
|
33
|
-
* -
|
|
34
|
-
* -
|
|
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
|
-
*
|
|
44
|
+
* 이름과 팩토리 함수로 서비스를 정의한다.
|
|
45
45
|
*
|
|
46
46
|
* @example
|
|
47
|
-
* //
|
|
47
|
+
* // 기본 서비스
|
|
48
48
|
* const HealthService = defineService("Health", (ctx) => ({
|
|
49
49
|
* check: () => ({ status: "ok" }),
|
|
50
50
|
* }));
|
|
51
51
|
*
|
|
52
|
-
* //
|
|
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
|
-
*
|
|
60
|
+
* 클라이언트 측 타입 공유를 위해 ServiceDefinition에서 메서드 시그니처를 추출한다.
|
|
61
61
|
*
|
|
62
62
|
* @example
|
|
63
63
|
* export type UserServiceType = ServiceMethods<typeof UserService>;
|
|
64
|
-
* //
|
|
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
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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
|
-
|
|
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,
|
|
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"}
|