@simplysm/service-server 13.0.99 → 14.0.1

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 (83) hide show
  1. package/dist/auth/auth-token-payload.js +2 -1
  2. package/dist/auth/auth-token-payload.js.map +1 -6
  3. package/dist/auth/jwt-manager.js +21 -21
  4. package/dist/auth/jwt-manager.js.map +1 -6
  5. package/dist/core/define-service.d.ts +12 -12
  6. package/dist/core/define-service.d.ts.map +1 -1
  7. package/dist/core/define-service.js +77 -63
  8. package/dist/core/define-service.js.map +1 -6
  9. package/dist/core/service-executor.d.ts.map +1 -1
  10. package/dist/core/service-executor.js +42 -32
  11. package/dist/core/service-executor.js.map +1 -6
  12. package/dist/index.d.ts +0 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +11 -2
  15. package/dist/index.js.map +1 -6
  16. package/dist/legacy/v1-auto-update-handler.d.ts +2 -2
  17. package/dist/legacy/v1-auto-update-handler.js +42 -35
  18. package/dist/legacy/v1-auto-update-handler.js.map +1 -6
  19. package/dist/protocol/protocol-wrapper.d.ts +9 -9
  20. package/dist/protocol/protocol-wrapper.js +64 -46
  21. package/dist/protocol/protocol-wrapper.js.map +1 -6
  22. package/dist/service-server.d.ts +2 -0
  23. package/dist/service-server.d.ts.map +1 -1
  24. package/dist/service-server.js +187 -165
  25. package/dist/service-server.js.map +1 -6
  26. package/dist/services/auto-update-service.js +35 -34
  27. package/dist/services/auto-update-service.js.map +1 -6
  28. package/dist/services/orm-service.js +114 -120
  29. package/dist/services/orm-service.js.map +1 -6
  30. package/dist/transport/http/http-request-handler.d.ts.map +1 -1
  31. package/dist/transport/http/http-request-handler.js +58 -46
  32. package/dist/transport/http/http-request-handler.js.map +1 -6
  33. package/dist/transport/http/static-file-handler.js +42 -39
  34. package/dist/transport/http/static-file-handler.js.map +1 -6
  35. package/dist/transport/http/upload-handler.d.ts.map +1 -1
  36. package/dist/transport/http/upload-handler.js +60 -55
  37. package/dist/transport/http/upload-handler.js.map +1 -6
  38. package/dist/transport/socket/service-socket.d.ts +13 -13
  39. package/dist/transport/socket/service-socket.js +132 -108
  40. package/dist/transport/socket/service-socket.js.map +1 -6
  41. package/dist/transport/socket/websocket-handler.d.ts +10 -10
  42. package/dist/transport/socket/websocket-handler.d.ts.map +1 -1
  43. package/dist/transport/socket/websocket-handler.js +154 -139
  44. package/dist/transport/socket/websocket-handler.js.map +1 -6
  45. package/dist/types/server-options.d.ts +1 -1
  46. package/dist/types/server-options.d.ts.map +1 -1
  47. package/dist/types/server-options.js +2 -1
  48. package/dist/types/server-options.js.map +1 -6
  49. package/dist/utils/config-manager.js +48 -46
  50. package/dist/utils/config-manager.js.map +1 -6
  51. package/dist/workers/service-protocol.worker.js +8 -11
  52. package/dist/workers/service-protocol.worker.js.map +1 -6
  53. package/package.json +12 -14
  54. package/src/auth/jwt-manager.ts +2 -2
  55. package/src/core/define-service.ts +19 -19
  56. package/src/core/service-executor.ts +23 -17
  57. package/src/index.ts +10 -12
  58. package/src/legacy/v1-auto-update-handler.ts +10 -10
  59. package/src/protocol/protocol-wrapper.ts +16 -16
  60. package/src/service-server.ts +52 -39
  61. package/src/services/auto-update-service.ts +1 -1
  62. package/src/services/orm-service.ts +7 -7
  63. package/src/transport/http/http-request-handler.ts +16 -10
  64. package/src/transport/http/static-file-handler.ts +8 -8
  65. package/src/transport/http/upload-handler.ts +16 -9
  66. package/src/transport/socket/service-socket.ts +22 -22
  67. package/src/transport/socket/websocket-handler.ts +59 -60
  68. package/src/types/server-options.ts +1 -1
  69. package/src/utils/config-manager.ts +11 -11
  70. package/README.md +0 -163
  71. package/dist/services/smtp-client-service.d.ts +0 -8
  72. package/dist/services/smtp-client-service.d.ts.map +0 -1
  73. package/dist/services/smtp-client-service.js +0 -46
  74. package/dist/services/smtp-client-service.js.map +0 -6
  75. package/docs/auth.md +0 -59
  76. package/docs/core.md +0 -133
  77. package/docs/server.md +0 -126
  78. package/docs/services.md +0 -58
  79. package/docs/transport.md +0 -164
  80. package/src/services/smtp-client-service.ts +0 -59
  81. package/tests/define-service.spec.ts +0 -66
  82. package/tests/orm-service.spec.ts +0 -83
  83. package/tests/service-executor.spec.ts +0 -114
@@ -1,148 +1,163 @@
1
- import { Uuid } from "@simplysm/core-common";
1
+ import { Uuid, env } from "@simplysm/core-common";
2
2
  import { createServiceSocket } from "./service-socket.js";
3
3
  import { verifyJwt } from "../../auth/jwt-manager.js";
4
4
  import consola from "consola";
5
5
  const logger = consola.withTag("service-server:WebSocketHandler");
6
- function createWebSocketHandler(runMethod, jwtSecret) {
7
- const socketMap = /* @__PURE__ */ new Map();
8
- async function processRequest(serviceSocket, uuid, message) {
9
- try {
10
- if (message.name.includes(".") && Array.isArray(message.body)) {
11
- const [serviceName, methodName] = message.name.split(".");
12
- const result = await runMethod({
13
- serviceName,
14
- methodName,
15
- params: message.body,
16
- socket: serviceSocket
17
- });
18
- return await serviceSocket.send(uuid, { name: "response", body: result });
19
- } else if (message.name === "evt:add") {
20
- const { key, name, info } = message.body;
21
- serviceSocket.addListener(key, name, info);
22
- return await serviceSocket.send(uuid, { name: "response" });
23
- } else if (message.name === "evt:remove") {
24
- const { key } = message.body;
25
- serviceSocket.removeListener(key);
26
- return await serviceSocket.send(uuid, { name: "response" });
27
- } else if (message.name === "evt:gets") {
28
- const { name } = message.body;
29
- const infos = Array.from(socketMap.values()).flatMap(
30
- (subSock) => subSock.getEventListeners(name)
31
- );
32
- return await serviceSocket.send(uuid, { name: "response", body: infos });
33
- } else if (message.name === "evt:emit") {
34
- const { keys, data } = message.body;
35
- for (const subSock of socketMap.values()) {
36
- const targetKeys = subSock.filterEventTargetKeys(keys);
37
- if (targetKeys.length > 0) {
38
- await subSock.send(uuid, {
39
- name: "evt:on",
40
- body: {
41
- keys: targetKeys,
42
- data
43
- }
44
- });
45
- }
6
+ /**
7
+ * WebSocket 핸들러 인스턴스를 생성한다
8
+ *
9
+ * 여러 WebSocket 연결을 관리하고, 메시지를 서비스로 라우팅하며,
10
+ * 이벤트 브로드캐스팅을 처리한다.
11
+ */
12
+ export function createWebSocketHandler(runMethod, jwtSecret) {
13
+ // -------------------------------------------------------------------
14
+ // 상태
15
+ // -------------------------------------------------------------------
16
+ const socketMap = new Map();
17
+ // -------------------------------------------------------------------
18
+ // 헬퍼
19
+ // -------------------------------------------------------------------
20
+ async function processRequest(serviceSocket, uuid, message) {
21
+ try {
22
+ if (message.name.includes(".") && Array.isArray(message.body)) {
23
+ const dotIndex = message.name.indexOf(".");
24
+ const serviceName = message.name.substring(0, dotIndex);
25
+ const methodName = message.name.substring(dotIndex + 1);
26
+ const result = await runMethod({
27
+ serviceName,
28
+ methodName,
29
+ params: message.body,
30
+ socket: serviceSocket,
31
+ });
32
+ return await serviceSocket.send(uuid, { name: "response", body: result });
33
+ }
34
+ else if (message.name === "evt:add") {
35
+ const { key, name, info } = message.body;
36
+ serviceSocket.addListener(key, name, info);
37
+ return await serviceSocket.send(uuid, { name: "response" });
38
+ }
39
+ else if (message.name === "evt:remove") {
40
+ const { key } = message.body;
41
+ serviceSocket.removeListener(key);
42
+ return await serviceSocket.send(uuid, { name: "response" });
43
+ }
44
+ else if (message.name === "evt:gets") {
45
+ const { name } = message.body;
46
+ const infos = Array.from(socketMap.values()).flatMap((subSock) => subSock.getEventListeners(name));
47
+ return await serviceSocket.send(uuid, { name: "response", body: infos });
48
+ }
49
+ else if (message.name === "evt:emit") {
50
+ const { keys, data } = message.body;
51
+ await Promise.allSettled(Array.from(socketMap.values()).map(async (subSock) => {
52
+ const targetKeys = subSock.filterEventTargetKeys(keys);
53
+ if (targetKeys.length > 0) {
54
+ await subSock.send(uuid, {
55
+ name: "evt:on",
56
+ body: { keys: targetKeys, data },
57
+ });
58
+ }
59
+ }));
60
+ return await serviceSocket.send(uuid, { name: "response" });
61
+ }
62
+ else if (message.name === "auth") {
63
+ if (jwtSecret == null)
64
+ throw new Error("JWT Secret이 정의되지 않았습니다.");
65
+ const token = message.body;
66
+ serviceSocket.authTokenPayload = await verifyJwt(jwtSecret, token);
67
+ return await serviceSocket.send(uuid, { name: "response" });
68
+ }
69
+ else {
70
+ const err = new Error("유효하지 않은 요청입니다.");
71
+ return await serviceSocket.send(uuid, {
72
+ name: "error",
73
+ body: {
74
+ name: err.name,
75
+ message: err.message,
76
+ ...(env.DEV ? { stack: err.stack } : {}),
77
+ code: "BAD_MESSAGE",
78
+ },
79
+ });
80
+ }
46
81
  }
47
- return await serviceSocket.send(uuid, { name: "response" });
48
- } else if (message.name === "auth") {
49
- if (jwtSecret == null) throw new Error("JWT Secret is not defined.");
50
- const token = message.body;
51
- serviceSocket.authTokenPayload = await verifyJwt(jwtSecret, token);
52
- return await serviceSocket.send(uuid, { name: "response" });
53
- } else {
54
- const err = new Error("Invalid request.");
55
- return await serviceSocket.send(uuid, {
56
- name: "error",
57
- body: {
58
- name: err.name,
59
- message: err.message,
60
- stack: err.stack,
61
- code: "BAD_MESSAGE"
62
- }
63
- });
64
- }
65
- } catch (err) {
66
- const error = err instanceof Error ? err : new Error(typeof err === "string" ? err : "An unknown error has occurred.");
67
- return serviceSocket.send(uuid, {
68
- name: "error",
69
- body: {
70
- name: error.name,
71
- message: error.message,
72
- code: "INTERNAL_ERROR",
73
- stack: error.stack
82
+ catch (err) {
83
+ const error = err instanceof Error
84
+ ? err
85
+ : new Error(typeof err === "string" ? err : "알 수 없는 에러가 발생했습니다.");
86
+ return serviceSocket.send(uuid, {
87
+ name: "error",
88
+ body: {
89
+ name: error.name,
90
+ message: error.message,
91
+ code: "INTERNAL_ERROR",
92
+ ...(env.DEV ? { stack: error.stack } : {}),
93
+ },
94
+ });
74
95
  }
75
- });
76
96
  }
77
- }
78
- return {
79
- addSocket(socket, clientId, clientName, connReq) {
80
- try {
81
- const serviceSocket = createServiceSocket(socket, clientId, clientName, connReq);
82
- const prevServiceSocket = socketMap.get(clientId);
83
- if (prevServiceSocket != null) {
84
- prevServiceSocket.close();
85
- const connectionDateTimeText = prevServiceSocket.connectedAtDateTime.toFormatString("yyyy:MM:dd HH:mm:ss.fff");
86
- logger.debug(
87
- `Disconnected previous client connection: ${clientId}: ${connectionDateTimeText}`
88
- );
89
- }
90
- socketMap.set(clientId, serviceSocket);
91
- serviceSocket.on("close", (code) => {
92
- logger.debug(`Client disconnected: (code: ${code})`);
93
- if (socketMap.get(clientId) !== serviceSocket) return;
94
- socketMap.delete(clientId);
95
- });
96
- serviceSocket.on("message", async ({ uuid, msg }) => {
97
- logger.debug("Request received", msg);
98
- const sentSize = await processRequest(serviceSocket, uuid, msg);
99
- logger.debug(`Response sent (size: ${sentSize})`);
100
- });
101
- logger.debug("Client connected", {
102
- clientId,
103
- remoteAddress: connReq.socket.remoteAddress,
104
- socketSize: socketMap.size
105
- });
106
- } catch (err) {
107
- logger.error("Error handling connection", err);
108
- socket.terminate();
109
- }
110
- },
111
- closeAll() {
112
- for (const serviceSocket of socketMap.values()) {
113
- serviceSocket.close();
114
- }
115
- },
116
- async broadcastReload(clientName, changedFileSet) {
117
- for (const serviceSocket of socketMap.values()) {
118
- await serviceSocket.send(Uuid.generate().toString(), {
119
- name: "reload",
120
- body: {
121
- clientName,
122
- changedFileSet
123
- }
124
- });
125
- }
126
- },
127
- async emit(eventDef, infoSelector, data) {
128
- const eventName = eventDef.eventName;
129
- const targetKeys = Array.from(socketMap.values()).flatMap((subSock) => subSock.getEventListeners(eventName)).filter((item) => infoSelector(item.info)).map((item) => item.key);
130
- for (const subSock of socketMap.values()) {
131
- const subTargetKeys = subSock.filterEventTargetKeys(targetKeys);
132
- if (subTargetKeys.length > 0) {
133
- await subSock.send(Uuid.generate().toString(), {
134
- name: "evt:on",
135
- body: {
136
- keys: subTargetKeys,
137
- data
97
+ // -------------------------------------------------------------------
98
+ // 공개 API
99
+ // -------------------------------------------------------------------
100
+ return {
101
+ addSocket(socket, clientId, clientName, connReq) {
102
+ try {
103
+ const serviceSocket = createServiceSocket(socket, clientId, clientName, connReq);
104
+ // 기존 연결 해제
105
+ const prevServiceSocket = socketMap.get(clientId);
106
+ if (prevServiceSocket != null) {
107
+ prevServiceSocket.close();
108
+ const connectionDateTimeText = prevServiceSocket.connectedAtDateTime.toFormatString("yyyy:MM:dd HH:mm:ss.fff");
109
+ logger.debug(`이전 클라이언트 연결 해제됨: ${clientId}: ${connectionDateTimeText}`);
110
+ }
111
+ socketMap.set(clientId, serviceSocket);
112
+ serviceSocket.on("close", (code) => {
113
+ logger.debug(`클라이언트 연결 해제됨: (code: ${code})`);
114
+ if (socketMap.get(clientId) !== serviceSocket)
115
+ return;
116
+ socketMap.delete(clientId);
117
+ });
118
+ serviceSocket.on("message", async ({ uuid, msg }) => {
119
+ logger.debug("요청 수신됨", msg);
120
+ const sentSize = await processRequest(serviceSocket, uuid, msg);
121
+ logger.debug(`응답 전송됨 (크기: ${sentSize})`);
122
+ });
123
+ logger.debug("클라이언트 연결됨", {
124
+ clientId,
125
+ remoteAddress: connReq.socket.remoteAddress,
126
+ socketSize: socketMap.size,
127
+ });
138
128
  }
139
- });
140
- }
141
- }
142
- }
143
- };
129
+ catch (err) {
130
+ logger.error("연결 처리 중 에러 발생", err);
131
+ socket.terminate();
132
+ }
133
+ },
134
+ closeAll() {
135
+ for (const serviceSocket of socketMap.values()) {
136
+ serviceSocket.close();
137
+ }
138
+ },
139
+ async broadcastReload(clientName, changedFileSet) {
140
+ await Promise.allSettled(Array.from(socketMap.values()).map((serviceSocket) => serviceSocket.send(Uuid.generate().toString(), {
141
+ name: "reload",
142
+ body: { clientName, changedFileSet },
143
+ })));
144
+ },
145
+ async emit(eventDef, infoSelector, data) {
146
+ const eventName = eventDef.eventName;
147
+ const targetKeys = Array.from(socketMap.values())
148
+ .flatMap((subSock) => subSock.getEventListeners(eventName))
149
+ .filter((item) => infoSelector(item.info))
150
+ .map((item) => item.key);
151
+ await Promise.allSettled(Array.from(socketMap.values()).map(async (subSock) => {
152
+ const subTargetKeys = subSock.filterEventTargetKeys(targetKeys);
153
+ if (subTargetKeys.length > 0) {
154
+ await subSock.send(Uuid.generate().toString(), {
155
+ name: "evt:on",
156
+ body: { keys: subTargetKeys, data },
157
+ });
158
+ }
159
+ }));
160
+ },
161
+ };
144
162
  }
145
- export {
146
- createWebSocketHandler
147
- };
148
- //# sourceMappingURL=websocket-handler.js.map
163
+ //# sourceMappingURL=websocket-handler.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/transport/socket/websocket-handler.ts"],
4
- "mappings": "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",
5
- "names": []
6
- }
1
+ {"version":3,"file":"websocket-handler.js","sourceRoot":"","sources":["..\\..\\..\\src\\transport\\socket\\websocket-handler.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ export interface ServiceServerOptions {
8
8
  };
9
9
  auth?: {
10
10
  jwtSecret: string;
11
- };
11
+ } | false;
12
12
  services: ServiceDefinition[];
13
13
  }
14
14
  //# sourceMappingURL=server-options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-options.d.ts","sourceRoot":"","sources":["..\\..\\src\\types\\server-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE;QACJ,QAAQ,EAAE,UAAU,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B"}
1
+ {"version":3,"file":"server-options.d.ts","sourceRoot":"","sources":["..\\..\\src\\types\\server-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE;QACJ,QAAQ,EAAE,UAAU,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,KAAK,CAAC;IACV,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B"}
@@ -1 +1,2 @@
1
- //# sourceMappingURL=server-options.js.map
1
+ export {};
2
+ //# sourceMappingURL=server-options.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "mappings": "",
5
- "names": []
6
- }
1
+ {"version":3,"file":"server-options.js","sourceRoot":"","sources":["..\\..\\src\\types\\server-options.ts"],"names":[],"mappings":""}
@@ -3,57 +3,59 @@ import { fsx, FsWatcher } from "@simplysm/core-node";
3
3
  import path from "path";
4
4
  import consola from "consola";
5
5
  const logger = consola.withTag("service-server:ConfigManager");
6
+ // 값: 설정 객체, 키: 파일 경로
6
7
  const _cache = new LazyGcMap({
7
- gcInterval: 10 * 60 * 1e3,
8
- // Every 10 minutes
9
- expireTime: 60 * 60 * 1e3,
10
- // Expire after 1 hour
11
- onExpire: async (filePath) => {
12
- logger.debug(`Config cache expired and watcher released: ${path.basename(filePath)}`);
13
- await closeWatcher(filePath);
14
- }
8
+ gcInterval: 10 * 60 * 1000, // 10분마다
9
+ expireTime: 60 * 60 * 1000, // 1시간 만료
10
+ onExpire: async (filePath) => {
11
+ logger.debug(`설정 캐시 만료 워처 해제됨: ${path.basename(filePath)}`);
12
+ await closeWatcher(filePath);
13
+ },
15
14
  });
16
- const _watchers = /* @__PURE__ */ new Map();
17
- async function getConfig(filePath) {
18
- if (_cache.has(filePath)) {
19
- return _cache.get(filePath);
20
- }
21
- if (!await fsx.exists(filePath)) return void 0;
22
- const config = await fsx.readJson(filePath);
23
- _cache.set(filePath, config);
24
- if (!_watchers.has(filePath)) {
25
- try {
26
- const watcher = await FsWatcher.watch([filePath]);
27
- _watchers.set(filePath, watcher);
28
- watcher.onChange({ delay: 100 }, async () => {
29
- if (!await fsx.exists(filePath)) {
30
- _cache.delete(filePath);
31
- await closeWatcher(filePath);
32
- logger.debug(`Config file deleted: ${path.basename(filePath)}`);
33
- return;
34
- }
15
+ const _watchers = new Map();
16
+ export async function getConfig(filePath) {
17
+ // 1. 캐시 히트 (시간 자동 갱신)
18
+ if (_cache.has(filePath)) {
19
+ return _cache.get(filePath);
20
+ }
21
+ if (!(await fsx.exists(filePath)))
22
+ return undefined;
23
+ // 2. 로드 및 캐시
24
+ const config = await fsx.readJson(filePath);
25
+ _cache.set(filePath, config);
26
+ // 3. 워처 등록
27
+ if (!_watchers.has(filePath)) {
35
28
  try {
36
- const newConfig = await fsx.readJson(filePath);
37
- _cache.set(filePath, newConfig);
38
- logger.debug(`Config file live-reloaded: ${path.basename(filePath)}`);
39
- } catch (err) {
40
- logger.warn(`Config file reload failed: ${filePath}`, err);
29
+ const watcher = await FsWatcher.watch([filePath]);
30
+ _watchers.set(filePath, watcher);
31
+ watcher.onChange({ delay: 100 }, async () => {
32
+ if (!(await fsx.exists(filePath))) {
33
+ _cache.delete(filePath);
34
+ await closeWatcher(filePath);
35
+ logger.debug(`설정 파일 삭제됨: ${path.basename(filePath)}`);
36
+ return;
37
+ }
38
+ try {
39
+ const newConfig = await fsx.readJson(filePath);
40
+ _cache.set(filePath, newConfig);
41
+ logger.debug(`설정 파일 실시간 리로드됨: ${path.basename(filePath)}`);
42
+ }
43
+ catch (err) {
44
+ logger.warn(`설정 파일 리로드 실패: ${filePath}`, err);
45
+ }
46
+ });
47
+ }
48
+ catch (err) {
49
+ logger.error(`워치 실패: ${filePath}`, err);
41
50
  }
42
- });
43
- } catch (err) {
44
- logger.error(`Watch failed: ${filePath}`, err);
45
51
  }
46
- }
47
- return config;
52
+ return config;
48
53
  }
49
54
  async function closeWatcher(filePath) {
50
- const watcher = _watchers.get(filePath);
51
- if (watcher != null) {
52
- await watcher.close();
53
- _watchers.delete(filePath);
54
- }
55
+ const watcher = _watchers.get(filePath);
56
+ if (watcher != null) {
57
+ await watcher.close();
58
+ _watchers.delete(filePath);
59
+ }
55
60
  }
56
- export {
57
- getConfig
58
- };
59
- //# sourceMappingURL=config-manager.js.map
61
+ //# sourceMappingURL=config-manager.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/config-manager.ts"],
4
- "mappings": "AAAA,SAAS,iBAAiB;AAC1B,SAAS,KAAK,iBAAiB;AAC/B,OAAO,UAAU;AACjB,OAAO,aAAa;AAEpB,MAAM,SAAS,QAAQ,QAAQ,8BAA8B;AAG7D,MAAM,SAAS,IAAI,UAA2B;AAAA,EAC5C,YAAY,KAAK,KAAK;AAAA;AAAA,EACtB,YAAY,KAAK,KAAK;AAAA;AAAA,EACtB,UAAU,OAAO,aAAa;AAC5B,WAAO,MAAM,8CAA8C,KAAK,SAAS,QAAQ,CAAC,EAAE;AACpF,UAAM,aAAa,QAAQ;AAAA,EAC7B;AACF,CAAC;AAED,MAAM,YAAY,oBAAI,IAAuB;AAE7C,eAAsB,UAAmB,UAAgD;AAEvF,MAAI,OAAO,IAAI,QAAQ,GAAG;AACxB,WAAO,OAAO,IAAI,QAAQ;AAAA,EAC5B;AAEA,MAAI,CAAE,MAAM,IAAI,OAAO,QAAQ,EAAI,QAAO;AAG1C,QAAM,SAAS,MAAM,IAAI,SAAS,QAAQ;AAC1C,SAAO,IAAI,UAAU,MAAM;AAG3B,MAAI,CAAC,UAAU,IAAI,QAAQ,GAAG;AAC5B,QAAI;AACF,YAAM,UAAU,MAAM,UAAU,MAAM,CAAC,QAAQ,CAAC;AAChD,gBAAU,IAAI,UAAU,OAAO;AAE/B,cAAQ,SAAS,EAAE,OAAO,IAAI,GAAG,YAAY;AAC3C,YAAI,CAAE,MAAM,IAAI,OAAO,QAAQ,GAAI;AACjC,iBAAO,OAAO,QAAQ;AACtB,gBAAM,aAAa,QAAQ;AAC3B,iBAAO,MAAM,wBAAwB,KAAK,SAAS,QAAQ,CAAC,EAAE;AAC9D;AAAA,QACF;AAEA,YAAI;AACF,gBAAM,YAAY,MAAM,IAAI,SAAS,QAAQ;AAC7C,iBAAO,IAAI,UAAU,SAAS;AAC9B,iBAAO,MAAM,8BAA8B,KAAK,SAAS,QAAQ,CAAC,EAAE;AAAA,QACtE,SAAS,KAAK;AACZ,iBAAO,KAAK,8BAA8B,QAAQ,IAAI,GAAG;AAAA,QAC3D;AAAA,MACF,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,aAAO,MAAM,iBAAiB,QAAQ,IAAI,GAAG;AAAA,IAC/C;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAe,aAAa,UAAkB;AAC5C,QAAM,UAAU,UAAU,IAAI,QAAQ;AACtC,MAAI,WAAW,MAAM;AACnB,UAAM,QAAQ,MAAM;AACpB,cAAU,OAAO,QAAQ;AAAA,EAC3B;AACF;",
5
- "names": []
6
- }
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["..\\..\\src\\utils\\config-manager.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,12 @@
1
1
  import { createWorker } from "@simplysm/core-node";
2
2
  import { createServiceProtocol } from "@simplysm/service-common";
3
3
  const protocol = createServiceProtocol();
4
- var service_protocol_worker_default = createWorker({
5
- encode: (uuid, message) => {
6
- return protocol.encode(uuid, message);
7
- },
8
- decode: (bytes) => {
9
- return protocol.decode(bytes);
10
- }
4
+ export default createWorker({
5
+ encode: (uuid, message) => {
6
+ return protocol.encode(uuid, message);
7
+ },
8
+ decode: (bytes) => {
9
+ return protocol.decode(bytes);
10
+ },
11
11
  });
12
- export {
13
- service_protocol_worker_default as default
14
- };
15
- //# sourceMappingURL=service-protocol.worker.js.map
12
+ //# sourceMappingURL=service-protocol.worker.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/workers/service-protocol.worker.ts"],
4
- "mappings": "AAAA,SAAS,oBAAoB;AAG7B,SAAS,6BAA6B;AAEtC,MAAM,WAAW,sBAAsB;AAEvC,IAAO,kCAAQ,aAAa;AAAA,EAC1B,QAAQ,CAAC,MAAc,YAAoE;AACzF,WAAO,SAAS,OAAO,MAAM,OAAO;AAAA,EACtC;AAAA,EACA,QAAQ,CAAC,UAA6D;AACpE,WAAO,SAAS,OAAO,KAAK;AAAA,EAC9B;AACF,CAAC;",
5
- "names": []
6
- }
1
+ {"version":3,"file":"service-protocol.worker.js","sourceRoot":"","sources":["..\\..\\src\\workers\\service-protocol.worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC;AAEzC,eAAe,YAAY,CAAC;IAC1B,MAAM,EAAE,CAAC,IAAY,EAAE,OAAuB,EAA0C,EAAE;QACxF,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,EAAE,CAAC,KAAY,EAA8C,EAAE;QACnE,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACF,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@simplysm/service-server",
3
- "version": "13.0.99",
4
- "description": "Simplysm package - service module (server)",
5
- "author": "simplysm",
3
+ "version": "14.0.1",
4
+ "description": "심플리즘 패키지 - 서비스 (server)",
5
+ "author": "심플리즘",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {
8
8
  "type": "git",
@@ -14,9 +14,7 @@
14
14
  "types": "./dist/index.d.ts",
15
15
  "files": [
16
16
  "dist",
17
- "docs",
18
- "src",
19
- "tests"
17
+ "src"
20
18
  ],
21
19
  "sideEffects": false,
22
20
  "dependencies": {
@@ -29,18 +27,18 @@
29
27
  "@fastify/websocket": "^11.2.0",
30
28
  "bufferutil": "^4.1.0",
31
29
  "consola": "^3.4.2",
32
- "fastify": "^5.8.2",
30
+ "fastify": "^5.8.4",
33
31
  "jose": "^6.2.2",
34
32
  "mime": "^4.1.0",
35
- "nodemailer": "^8.0.3",
33
+ "nodemailer": "^8.0.4",
36
34
  "semver": "^7.7.4",
37
35
  "utf-8-validate": "^6.0.6",
38
- "ws": "^8.19.0",
39
- "@simplysm/core-common": "13.0.99",
40
- "@simplysm/orm-node": "13.0.99",
41
- "@simplysm/core-node": "13.0.99",
42
- "@simplysm/service-common": "13.0.99",
43
- "@simplysm/orm-common": "13.0.99"
36
+ "ws": "^8.20.0",
37
+ "@simplysm/orm-common": "14.0.1",
38
+ "@simplysm/core-common": "14.0.1",
39
+ "@simplysm/core-node": "14.0.1",
40
+ "@simplysm/orm-node": "14.0.1",
41
+ "@simplysm/service-common": "14.0.1"
44
42
  },
45
43
  "devDependencies": {
46
44
  "@types/nodemailer": "^7.0.11",
@@ -25,9 +25,9 @@ export async function verifyJwt<TAuthInfo = unknown>(
25
25
  return payload as AuthTokenPayload<TAuthInfo>;
26
26
  } catch (err) {
27
27
  if (err != null && typeof err === "object" && "code" in err && err.code === "ERR_JWT_EXPIRED") {
28
- throw new Error("Token has expired.");
28
+ throw new Error("토큰이 만료되었습니다.");
29
29
  }
30
- throw new Error("Invalid token.");
30
+ throw new Error("유효하지 않은 토큰입니다.");
31
31
  }
32
32
  }
33
33