@simplysm/service-server 13.0.25 → 13.0.27
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 +6 -6
- package/dist/services/orm-service.d.ts.map +1 -1
- package/dist/services/orm-service.js +13 -17
- package/dist/services/orm-service.js.map +1 -1
- package/docs/authentication.md +2 -2
- package/docs/server.md +4 -4
- package/package.json +6 -6
- package/src/services/orm-service.ts +15 -18
package/README.md
CHANGED
|
@@ -96,7 +96,7 @@ Services are defined using the `defineService` function. Service methods are cal
|
|
|
96
96
|
```typescript
|
|
97
97
|
import { defineService } from "@simplysm/service-server";
|
|
98
98
|
|
|
99
|
-
export const MyService = defineService("
|
|
99
|
+
export const MyService = defineService("My", (ctx) => ({
|
|
100
100
|
hello: async (name: string): Promise<string> => {
|
|
101
101
|
return `Hello, ${name}!`;
|
|
102
102
|
},
|
|
@@ -134,7 +134,7 @@ interface UserAuthInfo {
|
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
// Service-level auth: all methods require authentication
|
|
137
|
-
export const UserService = defineService("
|
|
137
|
+
export const UserService = defineService("User", auth((ctx) => ({
|
|
138
138
|
getProfile: async (): Promise<unknown> => {
|
|
139
139
|
const userId = (ctx.authInfo as UserAuthInfo)?.userId;
|
|
140
140
|
// ...
|
|
@@ -152,7 +152,7 @@ export type UserServiceMethods = import("@simplysm/service-server").ServiceMetho
|
|
|
152
152
|
|
|
153
153
|
**Method-level auth only:**
|
|
154
154
|
```typescript
|
|
155
|
-
export const MyService = defineService("
|
|
155
|
+
export const MyService = defineService("My", (ctx) => ({
|
|
156
156
|
publicMethod: async (): Promise<void> => {
|
|
157
157
|
// No auth required
|
|
158
158
|
},
|
|
@@ -170,7 +170,7 @@ export const MyService = defineService("MyService", (ctx) => ({
|
|
|
170
170
|
**Service-level auth with method override:**
|
|
171
171
|
```typescript
|
|
172
172
|
// All methods require authentication by default
|
|
173
|
-
export const SecureService = defineService("
|
|
173
|
+
export const SecureService = defineService("Secure", auth((ctx) => ({
|
|
174
174
|
normalMethod: async (): Promise<void> => {
|
|
175
175
|
// Auth required (inherited from service level)
|
|
176
176
|
},
|
|
@@ -188,8 +188,8 @@ See [Authentication](docs/authentication.md) for JWT token management and permis
|
|
|
188
188
|
Service methods can be called via HTTP or WebSocket:
|
|
189
189
|
|
|
190
190
|
```
|
|
191
|
-
GET /api/
|
|
192
|
-
POST /api/
|
|
191
|
+
GET /api/My/hello?json=["World"]
|
|
192
|
+
POST /api/My/hello
|
|
193
193
|
```
|
|
194
194
|
|
|
195
195
|
See [HTTP API Call](docs/transport.md#http-api-call) and [ServiceSocket](docs/transport.md#servicesocket) for transport layer details.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orm-service.d.ts","sourceRoot":"","sources":["../../src/services/orm-service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,OAAO,EACZ,KAAK,cAAc,EAEnB,KAAK,QAAQ,EACb,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAS9D,eAAO,MAAM,UAAU;iBA6BE,aAAa,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAClE,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;iBASiB,aAAa,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;kBA2CvD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;6BASX,MAAM,mBAAmB,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;8BAKtD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;gCAKpB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;gCAKtB,MAAM,SAAS,MAAM,WAAW,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;wBAKxE,MAAM,QAAQ,QAAQ,EAAE,YAAY,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"orm-service.d.ts","sourceRoot":"","sources":["../../src/services/orm-service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,OAAO,EACZ,KAAK,cAAc,EAEnB,KAAK,QAAQ,EACb,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAS9D,eAAO,MAAM,UAAU;iBA6BE,aAAa,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAClE,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;iBASiB,aAAa,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;kBA2CvD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;6BASX,MAAM,mBAAmB,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;8BAKtD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;gCAKpB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;gCAKtB,MAAM,SAAS,MAAM,WAAW,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;wBAKxE,MAAM,QAAQ,QAAQ,EAAE,YAAY,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;uBA0BrG,MAAM,aACH,MAAM,cACL,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,WAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACjC,OAAO,CAAC,IAAI,CAAC;EAMrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,UAAU,CAAC,CAAC"}
|
|
@@ -103,26 +103,22 @@ const OrmService = defineService(
|
|
|
103
103
|
const conn = getConn(connId);
|
|
104
104
|
const dialect = conn.config.dialect === "mssql-azure" ? "mssql" : conn.config.dialect;
|
|
105
105
|
const queryBuilder = createQueryBuilder(dialect);
|
|
106
|
-
if (options
|
|
106
|
+
if (options != null && options.every((item) => item == null)) {
|
|
107
107
|
return conn.execute([defs.map((def) => queryBuilder.build(def).sql).join("\n")]);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
parsed.push(parsedResult ?? []);
|
|
120
|
-
} else {
|
|
121
|
-
parsed.push(result[i]);
|
|
122
|
-
}
|
|
108
|
+
}
|
|
109
|
+
const queries = defs.map((def) => queryBuilder.build(def).sql);
|
|
110
|
+
const result = await conn.execute(queries);
|
|
111
|
+
const parsed = [];
|
|
112
|
+
for (let i = 0; i < result.length; i++) {
|
|
113
|
+
const opt = options?.[i];
|
|
114
|
+
if (opt != null) {
|
|
115
|
+
const parsedResult = await parseQueryResult(result[i], opt);
|
|
116
|
+
parsed.push(parsedResult ?? []);
|
|
117
|
+
} else {
|
|
118
|
+
parsed.push(result[i]);
|
|
123
119
|
}
|
|
124
|
-
return parsed;
|
|
125
120
|
}
|
|
121
|
+
return parsed;
|
|
126
122
|
},
|
|
127
123
|
async bulkInsert(connId, tableName, columnDefs, records) {
|
|
128
124
|
const conn = getConn(connId);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/services/orm-service.ts"],
|
|
4
|
-
"mappings": "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
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/docs/authentication.md
CHANGED
|
@@ -8,7 +8,7 @@ Use the `auth()` wrapper to set authentication requirements on services or metho
|
|
|
8
8
|
import { defineService, auth } from "@simplysm/service-server";
|
|
9
9
|
|
|
10
10
|
// Service-level auth: all methods require login
|
|
11
|
-
export const UserService = defineService("
|
|
11
|
+
export const UserService = defineService("User", auth((ctx) => ({
|
|
12
12
|
// Login only required (inherits from service level)
|
|
13
13
|
getProfile: async (): Promise<unknown> => {
|
|
14
14
|
const userId = (ctx.authInfo as { userId: number; role: string })?.userId;
|
|
@@ -22,7 +22,7 @@ export const UserService = defineService("UserService", auth((ctx) => ({
|
|
|
22
22
|
})));
|
|
23
23
|
|
|
24
24
|
// No authentication required (no auth wrapper)
|
|
25
|
-
export const PublicService = defineService("
|
|
25
|
+
export const PublicService = defineService("Public", (ctx) => ({
|
|
26
26
|
healthCheck: async (): Promise<string> => {
|
|
27
27
|
return "OK";
|
|
28
28
|
},
|
package/docs/server.md
CHANGED
|
@@ -110,7 +110,7 @@ Define services using the `defineService` function. Service methods are called v
|
|
|
110
110
|
```typescript
|
|
111
111
|
import { defineService } from "@simplysm/service-server";
|
|
112
112
|
|
|
113
|
-
export const MyService = defineService("
|
|
113
|
+
export const MyService = defineService("My", (ctx) => ({
|
|
114
114
|
hello: async (name: string): Promise<string> => {
|
|
115
115
|
return `Hello, ${name}!`;
|
|
116
116
|
},
|
|
@@ -150,7 +150,7 @@ Read sections from `.config.json` files using `ctx.getConfig()`. Root and per-cl
|
|
|
150
150
|
```typescript
|
|
151
151
|
import { defineService } from "@simplysm/service-server";
|
|
152
152
|
|
|
153
|
-
export const MyService = defineService("
|
|
153
|
+
export const MyService = defineService("My", (ctx) => ({
|
|
154
154
|
getDbHost: async (): Promise<string> => {
|
|
155
155
|
// Read "mySection" key from rootPath/.config.json or clientPath/.config.json
|
|
156
156
|
const config = await ctx.getConfig<{ host: string }>("mySection");
|
|
@@ -221,7 +221,7 @@ import { createServiceServer, defineService, auth, OrmService, CryptoService } f
|
|
|
221
221
|
import { defineEvent } from "@simplysm/service-common";
|
|
222
222
|
|
|
223
223
|
// Define a custom service with auth
|
|
224
|
-
export const UserService = defineService("
|
|
224
|
+
export const UserService = defineService("User", auth((ctx) => ({
|
|
225
225
|
getProfile: async (): Promise<{ name: string }> => {
|
|
226
226
|
const userId = (ctx.authInfo as { userId: number; role: string })?.userId;
|
|
227
227
|
// Use ctx.getConfig(), ctx.socket, ctx.server, etc.
|
|
@@ -233,7 +233,7 @@ export const UserService = defineService("UserService", auth((ctx) => ({
|
|
|
233
233
|
}),
|
|
234
234
|
})));
|
|
235
235
|
|
|
236
|
-
export const PublicService = defineService("
|
|
236
|
+
export const PublicService = defineService("Public", (ctx) => ({
|
|
237
237
|
healthCheck: async (): Promise<string> => {
|
|
238
238
|
return "OK";
|
|
239
239
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/service-server",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.27",
|
|
4
4
|
"description": "심플리즘 패키지 - 서비스 모듈 (server)",
|
|
5
5
|
"author": "김석래",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -34,11 +34,11 @@
|
|
|
34
34
|
"semver": "^7.7.4",
|
|
35
35
|
"utf-8-validate": "^6.0.6",
|
|
36
36
|
"ws": "^8.19.0",
|
|
37
|
-
"@simplysm/core-common": "13.0.
|
|
38
|
-
"@simplysm/
|
|
39
|
-
"@simplysm/
|
|
40
|
-
"@simplysm/orm-node": "13.0.
|
|
41
|
-
"@simplysm/service-common": "13.0.
|
|
37
|
+
"@simplysm/core-common": "13.0.27",
|
|
38
|
+
"@simplysm/core-node": "13.0.27",
|
|
39
|
+
"@simplysm/orm-common": "13.0.27",
|
|
40
|
+
"@simplysm/orm-node": "13.0.27",
|
|
41
|
+
"@simplysm/service-common": "13.0.27"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/semver": "^7.7.1",
|
|
@@ -137,27 +137,24 @@ export const OrmService = defineService(
|
|
|
137
137
|
const dialect: Dialect = conn.config.dialect === "mssql-azure" ? "mssql" : conn.config.dialect;
|
|
138
138
|
const queryBuilder = createQueryBuilder(dialect);
|
|
139
139
|
|
|
140
|
-
if (options
|
|
140
|
+
if (options != null && options.every((item) => item == null)) {
|
|
141
141
|
return conn.execute([defs.map((def) => queryBuilder.build(def).sql).join("\n")]);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
} else {
|
|
156
|
-
parsed.push(result[i]);
|
|
157
|
-
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const queries = defs.map((def) => queryBuilder.build(def).sql);
|
|
145
|
+
const result = await conn.execute(queries);
|
|
146
|
+
|
|
147
|
+
const parsed: unknown[][] = [];
|
|
148
|
+
for (let i = 0; i < result.length; i++) {
|
|
149
|
+
const opt = options?.[i];
|
|
150
|
+
if (opt != null) {
|
|
151
|
+
const parsedResult = await parseQueryResult(result[i] as Record<string, unknown>[], opt);
|
|
152
|
+
parsed.push(parsedResult ?? []);
|
|
153
|
+
} else {
|
|
154
|
+
parsed.push(result[i]);
|
|
158
155
|
}
|
|
159
|
-
return parsed;
|
|
160
156
|
}
|
|
157
|
+
return parsed;
|
|
161
158
|
},
|
|
162
159
|
|
|
163
160
|
async bulkInsert(
|