@simplysm/sd-cli 10.0.22 → 10.0.23

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 (239) hide show
  1. package/dist/SdTsIncrementalBuilder.d.ts +1 -1
  2. package/dist/SdTsIncrementalBuilder.js.map +1 -1
  3. package/dist/SdTsIncrementalBuilder.mjs +39 -16
  4. package/package.json +4 -4
  5. package/src/SdTsIncrementalBuilder.ts +29 -4
  6. package/dist/sd-core-common/src/decorators/NotifyPropertyChange.d.ts +0 -20
  7. package/dist/sd-core-common/src/decorators/NotifyPropertyChange.js.map +0 -1
  8. package/dist/sd-core-common/src/decorators/NotifyPropertyChange.mjs +0 -12
  9. package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.d.ts +0 -43
  10. package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.js.map +0 -1
  11. package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.mjs +0 -54
  12. package/dist/sd-core-common/src/decorators/PropertyValidate.d.ts +0 -16
  13. package/dist/sd-core-common/src/decorators/PropertyValidate.js.map +0 -1
  14. package/dist/sd-core-common/src/decorators/PropertyValidate.mjs +0 -26
  15. package/dist/sd-core-common/src/decorators/decorator-return-types.d.ts +0 -14
  16. package/dist/sd-core-common/src/decorators/decorator-return-types.js.map +0 -1
  17. package/dist/sd-core-common/src/decorators/decorator-return-types.mjs +0 -2
  18. package/dist/sd-core-common/src/errors/ArgumentError.d.ts +0 -10
  19. package/dist/sd-core-common/src/errors/ArgumentError.js.map +0 -1
  20. package/dist/sd-core-common/src/errors/ArgumentError.mjs +0 -13
  21. package/dist/sd-core-common/src/errors/NeverEntryError.d.ts +0 -10
  22. package/dist/sd-core-common/src/errors/NeverEntryError.js.map +0 -1
  23. package/dist/sd-core-common/src/errors/NeverEntryError.mjs +0 -13
  24. package/dist/sd-core-common/src/errors/NotImplementError.d.ts +0 -10
  25. package/dist/sd-core-common/src/errors/NotImplementError.js.map +0 -1
  26. package/dist/sd-core-common/src/errors/NotImplementError.mjs +0 -13
  27. package/dist/sd-core-common/src/errors/SdError.d.ts +0 -23
  28. package/dist/sd-core-common/src/errors/SdError.js.map +0 -1
  29. package/dist/sd-core-common/src/errors/SdError.mjs +0 -40
  30. package/dist/sd-core-common/src/errors/TimeoutError.d.ts +0 -11
  31. package/dist/sd-core-common/src/errors/TimeoutError.js.map +0 -1
  32. package/dist/sd-core-common/src/errors/TimeoutError.mjs +0 -16
  33. package/dist/sd-core-common/src/extensions/ArrayExtension.d.ts +0 -147
  34. package/dist/sd-core-common/src/extensions/ArrayExtension.js.map +0 -1
  35. package/dist/sd-core-common/src/extensions/ArrayExtension.mjs +0 -448
  36. package/dist/sd-core-common/src/extensions/MapExtension.d.ts +0 -4
  37. package/dist/sd-core-common/src/extensions/MapExtension.js.map +0 -1
  38. package/dist/sd-core-common/src/extensions/MapExtension.mjs +0 -15
  39. package/dist/sd-core-common/src/extensions/SetExtension.d.ts +0 -3
  40. package/dist/sd-core-common/src/extensions/SetExtension.js.map +0 -1
  41. package/dist/sd-core-common/src/extensions/SetExtension.mjs +0 -10
  42. package/dist/sd-core-common/src/index.d.ts +0 -32
  43. package/dist/sd-core-common/src/index.js.map +0 -1
  44. package/dist/sd-core-common/src/index.mjs +0 -33
  45. package/dist/sd-core-common/src/types/DateOnly.d.ts +0 -135
  46. package/dist/sd-core-common/src/types/DateOnly.js.map +0 -1
  47. package/dist/sd-core-common/src/types/DateOnly.mjs +0 -220
  48. package/dist/sd-core-common/src/types/DateTime.d.ts +0 -42
  49. package/dist/sd-core-common/src/types/DateTime.js.map +0 -1
  50. package/dist/sd-core-common/src/types/DateTime.mjs +0 -156
  51. package/dist/sd-core-common/src/types/DeepPartial.d.ts +0 -3
  52. package/dist/sd-core-common/src/types/DeepPartial.js.map +0 -1
  53. package/dist/sd-core-common/src/types/DeepPartial.mjs +0 -2
  54. package/dist/sd-core-common/src/types/ObjectSet.d.ts +0 -4
  55. package/dist/sd-core-common/src/types/ObjectSet.js.map +0 -1
  56. package/dist/sd-core-common/src/types/ObjectSet.mjs +0 -18
  57. package/dist/sd-core-common/src/types/Time.d.ts +0 -27
  58. package/dist/sd-core-common/src/types/Time.js.map +0 -1
  59. package/dist/sd-core-common/src/types/Time.mjs +0 -108
  60. package/dist/sd-core-common/src/types/Type.d.ts +0 -7
  61. package/dist/sd-core-common/src/types/Type.js.map +0 -1
  62. package/dist/sd-core-common/src/types/Type.mjs +0 -2
  63. package/dist/sd-core-common/src/types/UnwrappedType.d.ts +0 -1
  64. package/dist/sd-core-common/src/types/UnwrappedType.js.map +0 -1
  65. package/dist/sd-core-common/src/types/UnwrappedType.mjs +0 -2
  66. package/dist/sd-core-common/src/types/Uuid.d.ts +0 -8
  67. package/dist/sd-core-common/src/types/Uuid.js.map +0 -1
  68. package/dist/sd-core-common/src/types/Uuid.mjs +0 -26
  69. package/dist/sd-core-common/src/types/WrappedType.d.ts +0 -1
  70. package/dist/sd-core-common/src/types/WrappedType.js.map +0 -1
  71. package/dist/sd-core-common/src/types/WrappedType.mjs +0 -2
  72. package/dist/sd-core-common/src/utils/DateTimeFormatUtil.d.ts +0 -12
  73. package/dist/sd-core-common/src/utils/DateTimeFormatUtil.js.map +0 -1
  74. package/dist/sd-core-common/src/utils/DateTimeFormatUtil.mjs +0 -67
  75. package/dist/sd-core-common/src/utils/FunctionQueue.d.ts +0 -8
  76. package/dist/sd-core-common/src/utils/FunctionQueue.js.map +0 -1
  77. package/dist/sd-core-common/src/utils/FunctionQueue.mjs +0 -46
  78. package/dist/sd-core-common/src/utils/FunctionUtil.d.ts +0 -6
  79. package/dist/sd-core-common/src/utils/FunctionUtil.js.map +0 -1
  80. package/dist/sd-core-common/src/utils/FunctionUtil.mjs +0 -31
  81. package/dist/sd-core-common/src/utils/JsonConvert.d.ts +0 -8
  82. package/dist/sd-core-common/src/utils/JsonConvert.js.map +0 -1
  83. package/dist/sd-core-common/src/utils/JsonConvert.mjs +0 -78
  84. package/dist/sd-core-common/src/utils/MathUtil.d.ts +0 -3
  85. package/dist/sd-core-common/src/utils/MathUtil.js.map +0 -1
  86. package/dist/sd-core-common/src/utils/MathUtil.mjs +0 -6
  87. package/dist/sd-core-common/src/utils/NumberUtil.d.ts +0 -6
  88. package/dist/sd-core-common/src/utils/NumberUtil.js.map +0 -1
  89. package/dist/sd-core-common/src/utils/NumberUtil.mjs +0 -32
  90. package/dist/sd-core-common/src/utils/ObjectUtil.d.ts +0 -80
  91. package/dist/sd-core-common/src/utils/ObjectUtil.js.map +0 -1
  92. package/dist/sd-core-common/src/utils/ObjectUtil.mjs +0 -452
  93. package/dist/sd-core-common/src/utils/SdSyncEventEmitter.d.ts +0 -6
  94. package/dist/sd-core-common/src/utils/SdSyncEventEmitter.js.map +0 -1
  95. package/dist/sd-core-common/src/utils/SdSyncEventEmitter.mjs +0 -27
  96. package/dist/sd-core-common/src/utils/StringUtil.d.ts +0 -8
  97. package/dist/sd-core-common/src/utils/StringUtil.js.map +0 -1
  98. package/dist/sd-core-common/src/utils/StringUtil.mjs +0 -77
  99. package/dist/sd-core-common/src/utils/Wait.d.ts +0 -4
  100. package/dist/sd-core-common/src/utils/Wait.js.map +0 -1
  101. package/dist/sd-core-common/src/utils/Wait.mjs +0 -23
  102. package/dist/sd-core-node/src/index.d.ts +0 -6
  103. package/dist/sd-core-node/src/index.js.map +0 -1
  104. package/dist/sd-core-node/src/index.mjs +0 -7
  105. package/dist/sd-core-node/src/utils/FsUtil.d.ts +0 -44
  106. package/dist/sd-core-node/src/utils/FsUtil.js.map +0 -1
  107. package/dist/sd-core-node/src/utils/FsUtil.mjs +0 -493
  108. package/dist/sd-core-node/src/utils/Logger.d.ts +0 -91
  109. package/dist/sd-core-node/src/utils/Logger.js.map +0 -1
  110. package/dist/sd-core-node/src/utils/Logger.mjs +0 -185
  111. package/dist/sd-core-node/src/utils/PathUtil.d.ts +0 -6
  112. package/dist/sd-core-node/src/utils/PathUtil.js.map +0 -1
  113. package/dist/sd-core-node/src/utils/PathUtil.mjs +0 -24
  114. package/dist/sd-core-node/src/utils/SdFsWatcher.d.ts +0 -15
  115. package/dist/sd-core-node/src/utils/SdFsWatcher.js.map +0 -1
  116. package/dist/sd-core-node/src/utils/SdFsWatcher.mjs +0 -43
  117. package/dist/sd-core-node/src/utils/SdProcess.d.ts +0 -5
  118. package/dist/sd-core-node/src/utils/SdProcess.js.map +0 -1
  119. package/dist/sd-core-node/src/utils/SdProcess.mjs +0 -36
  120. package/dist/sd-orm-common/src/CaseQueryHelper.d.ts +0 -12
  121. package/dist/sd-orm-common/src/CaseQueryHelper.js.map +0 -1
  122. package/dist/sd-orm-common/src/CaseQueryHelper.mjs +0 -19
  123. package/dist/sd-orm-common/src/CaseWhenQueryHelper.d.ts +0 -12
  124. package/dist/sd-orm-common/src/CaseWhenQueryHelper.js.map +0 -1
  125. package/dist/sd-orm-common/src/CaseWhenQueryHelper.mjs +0 -20
  126. package/dist/sd-orm-common/src/DbContext.d.ts +0 -81
  127. package/dist/sd-orm-common/src/DbContext.js.map +0 -1
  128. package/dist/sd-orm-common/src/DbContext.mjs +0 -635
  129. package/dist/sd-orm-common/src/IDbConnection.d.ts +0 -15
  130. package/dist/sd-orm-common/src/IDbConnection.js.map +0 -1
  131. package/dist/sd-orm-common/src/IDbConnection.mjs +0 -2
  132. package/dist/sd-orm-common/src/IDbContextExecutor.d.ts +0 -17
  133. package/dist/sd-orm-common/src/IDbContextExecutor.js.map +0 -1
  134. package/dist/sd-orm-common/src/IDbContextExecutor.mjs +0 -2
  135. package/dist/sd-orm-common/src/IDbMigration.d.ts +0 -4
  136. package/dist/sd-orm-common/src/IDbMigration.js.map +0 -1
  137. package/dist/sd-orm-common/src/IDbMigration.mjs +0 -2
  138. package/dist/sd-orm-common/src/QueryBuilder.d.ts +0 -48
  139. package/dist/sd-orm-common/src/QueryBuilder.js.map +0 -1
  140. package/dist/sd-orm-common/src/QueryBuilder.mjs +0 -1022
  141. package/dist/sd-orm-common/src/QueryHelper.d.ts +0 -75
  142. package/dist/sd-orm-common/src/QueryHelper.js.map +0 -1
  143. package/dist/sd-orm-common/src/QueryHelper.mjs +0 -627
  144. package/dist/sd-orm-common/src/QueryUnit.d.ts +0 -10
  145. package/dist/sd-orm-common/src/QueryUnit.js.map +0 -1
  146. package/dist/sd-orm-common/src/QueryUnit.mjs +0 -16
  147. package/dist/sd-orm-common/src/Queryable.d.ts +0 -105
  148. package/dist/sd-orm-common/src/Queryable.js.map +0 -1
  149. package/dist/sd-orm-common/src/Queryable.mjs +0 -1375
  150. package/dist/sd-orm-common/src/SdOrmDataType.d.ts +0 -21
  151. package/dist/sd-orm-common/src/SdOrmDataType.js.map +0 -1
  152. package/dist/sd-orm-common/src/SdOrmDataType.mjs +0 -2
  153. package/dist/sd-orm-common/src/commons.d.ts +0 -400
  154. package/dist/sd-orm-common/src/commons.js.map +0 -1
  155. package/dist/sd-orm-common/src/commons.mjs +0 -8
  156. package/dist/sd-orm-common/src/decorators.d.ts +0 -29
  157. package/dist/sd-orm-common/src/decorators.js.map +0 -1
  158. package/dist/sd-orm-common/src/decorators.mjs +0 -89
  159. package/dist/sd-orm-common/src/index.d.ts +0 -17
  160. package/dist/sd-orm-common/src/index.js.map +0 -1
  161. package/dist/sd-orm-common/src/index.mjs +0 -18
  162. package/dist/sd-orm-common/src/models/SystemMigration.d.ts +0 -3
  163. package/dist/sd-orm-common/src/models/SystemMigration.js.map +0 -1
  164. package/dist/sd-orm-common/src/models/SystemMigration.mjs +0 -13
  165. package/dist/sd-orm-common/src/utils/DbDefinitionUtil.d.ts +0 -14
  166. package/dist/sd-orm-common/src/utils/DbDefinitionUtil.js.map +0 -1
  167. package/dist/sd-orm-common/src/utils/DbDefinitionUtil.mjs +0 -66
  168. package/dist/sd-orm-common/src/utils/SdOrmUtil.d.ts +0 -8
  169. package/dist/sd-orm-common/src/utils/SdOrmUtil.js.map +0 -1
  170. package/dist/sd-orm-common/src/utils/SdOrmUtil.mjs +0 -248
  171. package/dist/sd-orm-node/src/DbConnectionFactory.d.ts +0 -4
  172. package/dist/sd-orm-node/src/DbConnectionFactory.js.map +0 -1
  173. package/dist/sd-orm-node/src/DbConnectionFactory.mjs +0 -17
  174. package/dist/sd-orm-node/src/NodeDbContextExecutor.d.ts +0 -19
  175. package/dist/sd-orm-node/src/NodeDbContextExecutor.js.map +0 -1
  176. package/dist/sd-orm-node/src/NodeDbContextExecutor.mjs +0 -71
  177. package/dist/sd-orm-node/src/SdOrm.d.ts +0 -10
  178. package/dist/sd-orm-node/src/SdOrm.js.map +0 -1
  179. package/dist/sd-orm-node/src/SdOrm.mjs +0 -25
  180. package/dist/sd-orm-node/src/index.d.ts +0 -4
  181. package/dist/sd-orm-node/src/index.js.map +0 -1
  182. package/dist/sd-orm-node/src/index.mjs +0 -5
  183. package/dist/sd-orm-node-mssql/src/MssqlDbConnection.d.ts +0 -25
  184. package/dist/sd-orm-node-mssql/src/MssqlDbConnection.js.map +0 -1
  185. package/dist/sd-orm-node-mssql/src/MssqlDbConnection.mjs +0 -321
  186. package/dist/sd-orm-node-mssql/src/index.d.ts +0 -2
  187. package/dist/sd-orm-node-mssql/src/index.js.map +0 -1
  188. package/dist/sd-orm-node-mssql/src/index.mjs +0 -3
  189. package/dist/sd-orm-node-mysql/src/MysqlDbConnection.d.ts +0 -22
  190. package/dist/sd-orm-node-mysql/src/MysqlDbConnection.js.map +0 -1
  191. package/dist/sd-orm-node-mysql/src/MysqlDbConnection.mjs +0 -200
  192. package/dist/sd-orm-node-mysql/src/index.d.ts +0 -2
  193. package/dist/sd-orm-node-mysql/src/index.js.map +0 -1
  194. package/dist/sd-orm-node-mysql/src/index.mjs +0 -3
  195. package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.d.ts +0 -22
  196. package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.js.map +0 -1
  197. package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.mjs +0 -172
  198. package/dist/sd-orm-node-sqlite/src/index.d.ts +0 -2
  199. package/dist/sd-orm-node-sqlite/src/index.js.map +0 -1
  200. package/dist/sd-orm-node-sqlite/src/index.mjs +0 -3
  201. package/dist/sd-service-common/src/commons-orm.d.ts +0 -4
  202. package/dist/sd-service-common/src/commons-orm.js.map +0 -1
  203. package/dist/sd-service-common/src/commons-orm.mjs +0 -2
  204. package/dist/sd-service-common/src/commons-smtp.d.ts +0 -29
  205. package/dist/sd-service-common/src/commons-smtp.js.map +0 -1
  206. package/dist/sd-service-common/src/commons-smtp.mjs +0 -2
  207. package/dist/sd-service-common/src/commons.d.ts +0 -57
  208. package/dist/sd-service-common/src/commons.js.map +0 -1
  209. package/dist/sd-service-common/src/commons.mjs +0 -3
  210. package/dist/sd-service-common/src/index.d.ts +0 -3
  211. package/dist/sd-service-common/src/index.js.map +0 -1
  212. package/dist/sd-service-common/src/index.mjs +0 -4
  213. package/dist/sd-service-server/src/ApiServiceError.d.ts +0 -12
  214. package/dist/sd-service-server/src/ApiServiceError.js.map +0 -1
  215. package/dist/sd-service-server/src/ApiServiceError.mjs +0 -15
  216. package/dist/sd-service-server/src/SdServiceServer.d.ts +0 -39
  217. package/dist/sd-service-server/src/SdServiceServer.js.map +0 -1
  218. package/dist/sd-service-server/src/SdServiceServer.mjs +0 -513
  219. package/dist/sd-service-server/src/commons.d.ts +0 -23
  220. package/dist/sd-service-server/src/commons.js.map +0 -1
  221. package/dist/sd-service-server/src/commons.mjs +0 -3
  222. package/dist/sd-service-server/src/index.d.ts +0 -8
  223. package/dist/sd-service-server/src/index.js.map +0 -1
  224. package/dist/sd-service-server/src/index.mjs +0 -9
  225. package/dist/sd-service-server/src/services/SdAutoUpdateService.d.ts +0 -4
  226. package/dist/sd-service-server/src/services/SdAutoUpdateService.js.map +0 -1
  227. package/dist/sd-service-server/src/services/SdAutoUpdateService.mjs +0 -20
  228. package/dist/sd-service-server/src/services/SdCryptoService.d.ts +0 -7
  229. package/dist/sd-service-server/src/services/SdCryptoService.js.map +0 -1
  230. package/dist/sd-service-server/src/services/SdCryptoService.mjs +0 -39
  231. package/dist/sd-service-server/src/services/SdOrmService.d.ts +0 -22
  232. package/dist/sd-service-server/src/services/SdOrmService.js.map +0 -1
  233. package/dist/sd-service-server/src/services/SdOrmService.mjs +0 -115
  234. package/dist/sd-service-server/src/services/SdSmtpClientService.d.ts +0 -6
  235. package/dist/sd-service-server/src/services/SdSmtpClientService.js.map +0 -1
  236. package/dist/sd-service-server/src/services/SdSmtpClientService.mjs +0 -44
  237. package/dist/sd-service-server/src/utils/SdServiceServerConfigUtil.d.ts +0 -4
  238. package/dist/sd-service-server/src/utils/SdServiceServerConfigUtil.js.map +0 -1
  239. package/dist/sd-service-server/src/utils/SdServiceServerConfigUtil.mjs +0 -36
@@ -1,513 +0,0 @@
1
- import https from "https";
2
- import http from "http";
3
- import url from "url";
4
- import path from "path";
5
- import { FsUtil, Logger } from "@simplysm/sd-core-node";
6
- import { EventEmitter } from "events";
7
- import { DateTime, JsonConvert, Wait } from "@simplysm/sd-core-common";
8
- import { WebSocket, WebSocketServer } from "ws";
9
- import mime from "mime";
10
- import { ApiServiceError } from "./ApiServiceError";
11
- export class SdServiceServer extends EventEmitter {
12
- constructor(options) {
13
- super();
14
- this.options = options;
15
- this._logger = Logger.get(["simplysm", "sd-service", this.constructor.name]);
16
- this.isOpen = false;
17
- this._splitReqCache = new Map();
18
- this._eventListeners = [];
19
- // public devMiddlewares?: NextHandleFunction[];
20
- /***
21
- * 경로 프록시 (브라우저에 입력된 경로를 기본 파일경로가 아닌 다른 파일경로로 바꾸어 리턴함)
22
- *
23
- * * from: 서버내 'www' 이후의 상대경로 (절대경로 입력 불가)
24
- * * to: 서버내 파일의 절대경로 혹은 DEVSERVER의 port
25
- * * 'from'에 'api'로 시작하는 경로 사용 불가
26
- *
27
- */
28
- this.pathProxy = {};
29
- }
30
- async getWsClientAsync(socketId) {
31
- try {
32
- await Wait.until(() => {
33
- if (!this._wsServer)
34
- return false;
35
- const wsClients = Array.from(this._wsServer.clients).filter((item) => item.readyState === WebSocket.OPEN && item["id"] === socketId);
36
- if (wsClients.length > 1) {
37
- this._logger.debug("클라이언트 중복: " + socketId + ": " + wsClients.length + "\n" + wsClients.map((item) => " - " + item["connectedAtDateTime"].toFormatString("yyyy:MM:dd HH:mm:ss.fff")).join("\n"));
38
- return true;
39
- }
40
- else {
41
- return wsClients.length === 1;
42
- }
43
- }, 500, 1000);
44
- return Array.from(this._wsServer.clients).single((item) => item.readyState === WebSocket.OPEN && item["id"] === socketId);
45
- }
46
- catch (err) {
47
- this._logger.error("소켓요청을 처리하는 중에 클라이언트 소켓이 끊김", err);
48
- return undefined;
49
- }
50
- }
51
- async listenAsync() {
52
- await new Promise(async (resolve) => {
53
- this._logger.debug("서버 시작..." + process.env["SD_VERSION"]);
54
- if (this.options.ssl) {
55
- const pfx = typeof this.options.ssl.pfxBuffer === "function" ? await this.options.ssl.pfxBuffer() : this.options.ssl.pfxBuffer;
56
- this._httpServer = https.createServer({
57
- pfx,
58
- passphrase: this.options.ssl.passphrase,
59
- });
60
- }
61
- else {
62
- this._httpServer = http.createServer();
63
- }
64
- this._httpServer.on("request", async (req, res) => {
65
- await this._onWebRequestAsync(req, res);
66
- });
67
- this._wsServer = new WebSocketServer({ server: this._httpServer });
68
- this._wsServer.on("connection", async (wsClient) => {
69
- wsClient["isAlive"] = true;
70
- wsClient.on("pong", () => {
71
- wsClient["isAlive"] = true;
72
- });
73
- await this._onWsClientConnectionAsync(wsClient);
74
- });
75
- clearInterval(this._pingInterval);
76
- this._pingInterval = setInterval(() => {
77
- this._wsServer.clients.forEach((wsClient) => {
78
- if (wsClient["isAlive"] === false)
79
- return wsClient.terminate();
80
- wsClient["isAlive"] = false;
81
- wsClient.ping();
82
- });
83
- }, 10000);
84
- this._httpServer.listen(this.options.port, () => {
85
- resolve();
86
- });
87
- });
88
- this.isOpen = true;
89
- this._logger.debug("서버 시작됨");
90
- this.emit("ready");
91
- }
92
- async closeAsync() {
93
- clearInterval(this._pingInterval);
94
- if (this._wsServer) {
95
- this._wsServer.clients.forEach((client) => {
96
- client.terminate();
97
- });
98
- await new Promise((resolve, reject) => {
99
- this._wsServer.close((err) => {
100
- if (err) {
101
- reject(err);
102
- return;
103
- }
104
- resolve();
105
- });
106
- });
107
- }
108
- await new Promise((resolve, reject) => {
109
- if (!this._httpServer || !this._httpServer.listening) {
110
- resolve();
111
- return;
112
- }
113
- this._httpServer.close((err) => {
114
- if (err) {
115
- reject(err);
116
- return;
117
- }
118
- resolve();
119
- });
120
- });
121
- this.isOpen = false;
122
- this._logger.debug("서버 종료됨");
123
- this.emit("close");
124
- }
125
- broadcastReload() {
126
- this._logger.debug("서버내 모든 클라이언트 RELOAD 명령 전송");
127
- this._wsServer?.clients.forEach(async (wsClient) => {
128
- await this._sendAsync(wsClient, { name: "client-reload" });
129
- });
130
- }
131
- async _getWsClientIdAsync(wsClient) {
132
- return await new Promise(async (resolve) => {
133
- const msgFn = (msgJson) => {
134
- const msg = JsonConvert.parse(msgJson);
135
- if (msg.name === "client-get-id-response") {
136
- wsClient.off("message", msgFn);
137
- resolve(msg.body);
138
- }
139
- };
140
- wsClient.on("message", msgFn);
141
- await this._sendAsync(wsClient, { name: "client-get-id" });
142
- });
143
- }
144
- async _onWsClientConnectionAsync(wsClient) {
145
- const wsClientId = await this._getWsClientIdAsync(wsClient);
146
- this._wsServer?.clients.forEach((client) => {
147
- if (client["id"] === wsClientId) {
148
- this._logger.debug("클라이언트 기존연결 끊기: " + wsClientId + ": " + client["connectedAtDateTime"].toFormatString("yyyy:MM:dd HH:mm:ss.fff"));
149
- client.terminate();
150
- }
151
- });
152
- wsClient["id"] = wsClientId;
153
- wsClient["connectedAtDateTime"] = new DateTime();
154
- this._logger.debug("클라이언트 연결됨: " + wsClientId + ": " + this._wsServer?.clients.size);
155
- wsClient.on("close", (code) => {
156
- this._onWsClientClosed(wsClientId, code);
157
- });
158
- wsClient.on("message", async (msgJson) => {
159
- await this._onWsClientMessageAsync(wsClientId, msgJson);
160
- });
161
- await this._sendAsync(wsClient, { name: "connected" });
162
- }
163
- _onWsClientClosed(wsClientId, code) {
164
- this._logger.debug("클라이언트 연결 끊김: " + wsClientId + ": " + this._wsServer?.clients.size + ": " + code);
165
- // 클라이언트 창이 닫히거나 RELOAD 될때
166
- if (code === 1001) {
167
- this._logger.debug("닫힌 소켓의 이벤트 리스너 비우기...");
168
- const disconnectedListeners = this._eventListeners.filter((item) => item.socketId === wsClientId);
169
- for (const disconnectedListener of disconnectedListeners) {
170
- this._eventListeners.remove(disconnectedListener);
171
- }
172
- }
173
- }
174
- async _onWsClientMessageAsync(socketId, msgJson) {
175
- const msg = JsonConvert.parse(msgJson);
176
- if (msg.name === "request") {
177
- await this._onSocketRequestAsync(socketId, msg);
178
- }
179
- else if (msg.name === "request-split") {
180
- await this._onSocketRequestSplitAsync(socketId, msg);
181
- }
182
- }
183
- async _onSocketRequestAsync(socketId, req) {
184
- this._logger.debug("요청 받음", req);
185
- const res = await this._processSocketRequestAsync(socketId, req);
186
- this._logger.debug(`응답 전송 (size: ${Buffer.from(JsonConvert.stringify(res)).length})`);
187
- await this._sendAsync(socketId, res);
188
- }
189
- async _onSocketRequestSplitAsync(socketId, splitReq) {
190
- this._logger.debug("분할요청 받음", splitReq.uuid + "(" + splitReq.index + ")");
191
- const cacheInfo = this._splitReqCache.getOrCreate(splitReq.uuid, { completedSize: 0, data: [] });
192
- cacheInfo.data[splitReq.index] = splitReq.body;
193
- cacheInfo.completedSize += splitReq.body.length;
194
- const isCompleted = cacheInfo.completedSize === splitReq.fullSize;
195
- await this._sendAsync(socketId, {
196
- name: "response-for-split",
197
- reqUuid: splitReq.uuid,
198
- completedSize: cacheInfo.completedSize
199
- });
200
- if (isCompleted) {
201
- const req = JsonConvert.parse(cacheInfo.data.join(""));
202
- await this._onSocketRequestAsync(socketId, req);
203
- this._splitReqCache.delete(splitReq.uuid);
204
- }
205
- }
206
- async _sendAsync(arg, cmd) {
207
- const cmdJson = JsonConvert.stringify(cmd);
208
- if (cmd.name === "response" && cmdJson.length > 1000 * 1000) {
209
- const splitSize = 1000 * 100;
210
- let index = 0;
211
- let currSize = 0;
212
- while (currSize !== cmdJson.length) {
213
- const splitBody = cmdJson.substring(currSize, currSize + splitSize - 1);
214
- const splitReq = {
215
- name: "response-split",
216
- reqUuid: cmd.reqUuid,
217
- fullSize: cmdJson.length,
218
- index,
219
- body: splitBody
220
- };
221
- const splitReqJson = JsonConvert.stringify(splitReq);
222
- try {
223
- const wsClient = arg instanceof WebSocket ? arg : await this.getWsClientAsync(arg);
224
- wsClient?.send(splitReqJson);
225
- }
226
- catch (err) {
227
- this._logger.error("소켓요청을 처리하는 중에 클라이언트 소켓이 끊김", err);
228
- }
229
- currSize += splitBody.length;
230
- index++;
231
- }
232
- }
233
- else {
234
- try {
235
- const wsClient = arg instanceof WebSocket ? arg : await this.getWsClientAsync(arg);
236
- wsClient?.send(cmdJson);
237
- }
238
- catch (err) {
239
- this._logger.error("소켓요청을 처리하는 중에 클라이언트 소켓이 끊김", err);
240
- }
241
- }
242
- }
243
- async _runServiceMethodAsync(def) {
244
- // 서비스 가져오기
245
- const serviceClass = this.options.services.last((item) => item.name === def.serviceName);
246
- if (!serviceClass) {
247
- throw new Error(`서비스[${def.serviceName}]를 찾을 수 없습니다.`);
248
- }
249
- const service = new serviceClass();
250
- service.server = this;
251
- service.request = def.request;
252
- service.socketId = def.socketId;
253
- service.apiHeaders = def.apiHeaders;
254
- // 메소드 가져오기
255
- const method = service[def.methodName];
256
- if (method === undefined) {
257
- throw new Error(`메소드[${def.serviceName}.${def.methodName}]를 찾을 수 없습니다.`);
258
- }
259
- // 실행
260
- // eslint-disable-next-line @typescript-eslint/return-await
261
- return await method.apply(service, def.params);
262
- }
263
- async _processSocketRequestAsync(socketId, req) {
264
- try {
265
- const cmdSplit = req.command.split(".");
266
- if (cmdSplit.length === 2) {
267
- const serviceName = cmdSplit[0];
268
- const methodName = cmdSplit[1];
269
- const result = await this._runServiceMethodAsync({
270
- socketId,
271
- request: req,
272
- serviceName,
273
- methodName,
274
- params: req.params
275
- });
276
- // 응답
277
- return {
278
- name: "response",
279
- reqUuid: req.uuid,
280
- state: "success",
281
- body: result
282
- };
283
- }
284
- else if (req.command === "addEventListener") {
285
- const key = req.params[0];
286
- const eventName = req.params[1];
287
- const info = req.params[2];
288
- this._eventListeners.push({ key, eventName, info, socketId });
289
- return {
290
- name: "response",
291
- reqUuid: req.uuid,
292
- state: "success",
293
- body: undefined
294
- };
295
- }
296
- else if (req.command === "removeEventListener") {
297
- const key = req.params[0];
298
- this._eventListeners.remove((item) => item.key === key);
299
- return {
300
- name: "response",
301
- reqUuid: req.uuid,
302
- state: "success",
303
- body: undefined
304
- };
305
- }
306
- else if (req.command === "getEventListenerInfos") {
307
- const eventName = req.params[0];
308
- return {
309
- name: "response",
310
- reqUuid: req.uuid,
311
- state: "success",
312
- body: this._eventListeners
313
- .filter((item) => item.eventName === eventName)
314
- .map((item) => ({ key: item.key, info: item.info }))
315
- };
316
- }
317
- else if (req.command === "emitEvent") {
318
- const targetKeys = req.params[0];
319
- const data = req.params[1];
320
- const listeners = this._eventListeners.filter((item) => targetKeys.includes(item.key));
321
- for (const listener of listeners) {
322
- const wsClient = await this.getWsClientAsync(listener.socketId);
323
- if (wsClient?.readyState === WebSocket.OPEN) {
324
- const evtMsg = {
325
- name: "event",
326
- key: listener.key,
327
- body: data
328
- };
329
- wsClient.send(JsonConvert.stringify(evtMsg));
330
- }
331
- }
332
- return {
333
- name: "response",
334
- reqUuid: req.uuid,
335
- state: "success",
336
- body: undefined
337
- };
338
- }
339
- else {
340
- // 에러 응답
341
- return {
342
- name: "response",
343
- reqUuid: req.uuid,
344
- state: "error",
345
- body: "요청이 잘못되었습니다."
346
- };
347
- }
348
- }
349
- catch (err) {
350
- // 에러 응답
351
- return {
352
- name: "response",
353
- reqUuid: req.uuid,
354
- state: "error",
355
- body: err.stack
356
- };
357
- }
358
- }
359
- async _onWebRequestAsync(req, res) {
360
- try {
361
- if (this.options.middlewares) {
362
- for (const optMdw of this.options.middlewares) {
363
- await new Promise((resolve, reject) => {
364
- optMdw(req, res, (err) => {
365
- if (err != null) {
366
- reject(err);
367
- return;
368
- }
369
- resolve();
370
- });
371
- });
372
- }
373
- }
374
- const urlObj = url.parse(req.url, true, false);
375
- const urlPath = decodeURI(urlObj.pathname.slice(1));
376
- const urlPathChain = urlPath.split("/");
377
- if (urlPathChain[0] === "api") {
378
- if (req.headers.origin?.includes("://localhost") && req.method === "OPTIONS") {
379
- res.writeHead(204, { "Access-Control-Allow-Origin": "*" });
380
- res.end();
381
- return;
382
- }
383
- const serviceName = urlPathChain[1];
384
- const methodName = urlPathChain[2];
385
- let params;
386
- if (req.method === "GET") {
387
- if (typeof urlObj.query["json"] !== "string")
388
- throw new Error();
389
- if (req.headers["content-type"]?.toLowerCase().includes("json")) {
390
- params = JsonConvert.parse(urlObj.query["json"]);
391
- }
392
- else {
393
- params = [urlObj.query];
394
- }
395
- }
396
- else if (req.method === "POST") {
397
- const body = await new Promise((resolve) => {
398
- let tmp = Buffer.from([]);
399
- req.on("data", chunk => {
400
- tmp = Buffer.concat([tmp, chunk]);
401
- });
402
- req.on("end", () => {
403
- resolve(tmp);
404
- });
405
- });
406
- if (req.headers["content-type"]?.toLowerCase().includes("json")) {
407
- params = JsonConvert.parse(body.toString());
408
- }
409
- else {
410
- params = [body.toString()];
411
- }
412
- }
413
- if (params) {
414
- const serviceResult = await this._runServiceMethodAsync({
415
- serviceName,
416
- methodName,
417
- params,
418
- apiHeaders: req.headers
419
- });
420
- const result = req.headers["content-type"]?.toLowerCase().includes("json") ? JsonConvert.stringify(serviceResult) : serviceResult;
421
- res.writeHead(200, {
422
- "Content-Length": Buffer.from(result).length,
423
- "Content-Type": req.headers["content-type"]?.toLowerCase()
424
- });
425
- res.end(result);
426
- return;
427
- }
428
- }
429
- if (req.method === "GET") {
430
- let targetFilePath;
431
- const currPathProxyFrom = Object.keys(this.pathProxy).single((from) => urlPath.startsWith(from));
432
- if (currPathProxyFrom !== undefined) {
433
- if (typeof this.pathProxy[currPathProxyFrom] === "number") {
434
- const proxyReq = http.request({
435
- port: this.pathProxy[currPathProxyFrom],
436
- path: req.url,
437
- method: req.method,
438
- headers: req.headers
439
- }, (proxyRes) => {
440
- if (proxyRes.statusCode === 404) {
441
- res.writeHead(404, { "Content-Type": "text/html" });
442
- res.end("<h1>A custom 404 page</h1>");
443
- return;
444
- }
445
- res.writeHead(proxyRes.statusCode, proxyRes.headers);
446
- proxyRes.pipe(res, { end: true });
447
- });
448
- req.pipe(proxyReq, { end: true });
449
- return;
450
- }
451
- else {
452
- targetFilePath = path.resolve(this.pathProxy[currPathProxyFrom] + urlPath.substring(currPathProxyFrom.length));
453
- }
454
- }
455
- else {
456
- targetFilePath = path.resolve(this.options.rootPath, "www", urlPath);
457
- }
458
- targetFilePath = FsUtil.exists(targetFilePath) && FsUtil.stat(targetFilePath).isDirectory() ? path.resolve(targetFilePath, "index.html") : targetFilePath;
459
- if (!FsUtil.exists(targetFilePath)) {
460
- const errorMessage = "파일을 찾을 수 없습니다.";
461
- this._responseErrorHtml(res, 404, errorMessage);
462
- this._logger.warn(`[404] ${errorMessage} (${targetFilePath})`);
463
- return;
464
- }
465
- if (path.basename(targetFilePath).startsWith(".")) {
466
- const errorMessage = "파일을 사용할 권한이 없습니다.";
467
- this._responseErrorHtml(res, 403, errorMessage);
468
- this._logger.warn(`[403] ${errorMessage} (${targetFilePath})`);
469
- return;
470
- }
471
- const fileStream = FsUtil.createReadStream(targetFilePath);
472
- const targetFileSize = (await FsUtil.lstatAsync(targetFilePath)).size;
473
- res.setHeader("Access-Control-Allow-Origin", "*");
474
- res.setHeader("Content-Length", targetFileSize);
475
- res.setHeader("Content-Type", mime.getType(targetFilePath));
476
- res.writeHead(200);
477
- fileStream.pipe(res);
478
- }
479
- else {
480
- const errorMessage = "요청이 잘못되었습니다.";
481
- this._responseErrorHtml(res, 405, errorMessage);
482
- this._logger.warn(`[405] ${errorMessage} (${req.method.toUpperCase()})`);
483
- return;
484
- }
485
- }
486
- catch (err) {
487
- if (err instanceof ApiServiceError) {
488
- res.writeHead(err.statusCode);
489
- res.end(err.message);
490
- this._logger.error(`[${err.statusCode}]\n${err.message}`, err);
491
- }
492
- else {
493
- const errorMessage = "요청 처리중 오류가 발생하였습니다.";
494
- this._responseErrorHtml(res, 405, errorMessage);
495
- this._logger.error(`[405] ${errorMessage}`, err);
496
- }
497
- }
498
- }
499
- _responseErrorHtml(res, code, message) {
500
- res.writeHead(code);
501
- res.end(`
502
- <!DOCTYPE html>
503
- <html>
504
- <head>
505
- <meta name="viewport" content="width=device-width, initial-scale=1">
506
- <meta charset="UTF-8">
507
- <title>${code}: ${message}</title>
508
- </head>
509
- <body>${code}: ${message}</body>
510
- </html>`);
511
- }
512
- }
513
- //# sourceMappingURL=SdServiceServer.js.map
@@ -1,23 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import { Type } from "@simplysm/sd-core-common";
4
- import { NextHandleFunction } from "connect";
5
- import { SdServiceServer } from "./SdServiceServer";
6
- import { ISdServiceRequest } from "@simplysm/sd-service-common";
7
- import * as http from "http";
8
- export interface ISdServiceServerOptions {
9
- rootPath: string;
10
- services: Type<SdServiceBase>[];
11
- port: number | string;
12
- middlewares?: NextHandleFunction[];
13
- ssl?: {
14
- pfxBuffer: Buffer | (() => (Promise<Buffer> | Buffer));
15
- passphrase: string;
16
- };
17
- }
18
- export declare class SdServiceBase {
19
- server: SdServiceServer;
20
- socketId?: string;
21
- request?: ISdServiceRequest;
22
- apiHeaders?: http.IncomingHttpHeaders;
23
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"commons.js","sourceRoot":"","sources":["../../../../sd-service-server/src/commons.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAO,aAAa;CAKzB"}
@@ -1,3 +0,0 @@
1
- export class SdServiceBase {
2
- }
3
- //# sourceMappingURL=commons.js.map
@@ -1,8 +0,0 @@
1
- export * from "./SdServiceServer";
2
- export * from "./commons";
3
- export * from "./ApiServiceError";
4
- export * from "./utils/SdServiceServerConfigUtil";
5
- export * from "./services/SdSmtpClientService";
6
- export * from "./services/SdOrmService";
7
- export * from "./services/SdCryptoService";
8
- export * from "./services/SdAutoUpdateService";
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../sd-service-server/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC"}
@@ -1,9 +0,0 @@
1
- export * from "./SdServiceServer";
2
- export * from "./commons";
3
- export * from "./ApiServiceError";
4
- export * from "./utils/SdServiceServerConfigUtil";
5
- export * from "./services/SdSmtpClientService";
6
- export * from "./services/SdOrmService";
7
- export * from "./services/SdCryptoService";
8
- export * from "./services/SdAutoUpdateService";
9
- //# sourceMappingURL=index.js.map
@@ -1,4 +0,0 @@
1
- import { SdServiceBase } from "../commons";
2
- export declare class SdAutoUpdateService extends SdServiceBase {
3
- getLastVersionAsync(clientName: string, platform: string): Promise<string | undefined>;
4
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"SdAutoUpdateService.js","sourceRoot":"","sources":["../../../../../sd-service-server/src/services/SdAutoUpdateService.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAC7C,KAAK,CAAC,mBAAmB,CAAC,UAAkB,EAAE,QAAgB;QACnE,IAAI;YACF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;YAC9H,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACtC,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACjD,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAEvD,OAAO,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC;SACrF;QACD,OAAO,GAAG,EAAE;YACV,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;CACF"}
@@ -1,20 +0,0 @@
1
- import path from "path";
2
- import semver from "semver";
3
- import { SdServiceBase } from "../commons";
4
- import { FsUtil } from "@simplysm/sd-core-node";
5
- export class SdAutoUpdateService extends SdServiceBase {
6
- async getLastVersionAsync(clientName, platform) {
7
- try {
8
- const updates = await FsUtil.readdirAsync(path.resolve(this.server.options.rootPath, "www", clientName, platform, "updates"));
9
- const versions = updates.map((item) => ({
10
- fileName: item,
11
- version: path.basename(item, path.extname(item))
12
- })).filter((item) => (/^[0-9.]*$/).test(item.version));
13
- return semver.maxSatisfying(versions.map((item) => item.version), "*") ?? undefined;
14
- }
15
- catch (err) {
16
- return undefined;
17
- }
18
- }
19
- }
20
- //# sourceMappingURL=SdAutoUpdateService.js.map
@@ -1,7 +0,0 @@
1
- /// <reference types="node" />
2
- import { SdServiceBase } from "../commons";
3
- export declare class SdCryptoService extends SdServiceBase {
4
- encryptAsync(data: string | Buffer): Promise<string>;
5
- encryptAesAsync(data: Buffer): Promise<string>;
6
- decryptAesAsync(encText: string): Promise<Buffer>;
7
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"SdCryptoService.js","sourceRoot":"","sources":["../../../../../sd-service-server/src/services/SdCryptoService.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,OAAO,eAAgB,SAAQ,aAAa;IACzC,KAAK,CAAC,YAAY,CAAC,IAAqB;QAC7C,MAAM,MAAM,GAAG,CACb,MAAM,yBAAyB,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CACvG,CAAC,QAAQ,CAAC,CAAC;QACZ,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;SACvC;QAED,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC;aAC3C,MAAM,CAAC,IAAI,CAAC;aACZ,MAAM,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,IAAY;QACvC,MAAM,MAAM,GAAG,CACb,MAAM,yBAAyB,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CACvG,CAAC,QAAQ,CAAC,CAAC;QACZ,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;SACvC;QAED,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAClC,aAAa,EACb,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EACvB,EAAE,CACH,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEtC,OAAO,CACL,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAClB,GAAG;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC3D,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,OAAe;QAC1C,MAAM,MAAM,GAAG,CACb,MAAM,yBAAyB,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CACvG,CAAC,QAAQ,CAAC,CAAC;QACZ,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;SACvC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAG,EAAE,KAAK,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CACtC,aAAa,EACb,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EACvB,EAAE,CACH,CAAC;QACF,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAEjD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;CACF"}
@@ -1,39 +0,0 @@
1
- import crypto from "crypto";
2
- import { SdServiceServerConfigUtil } from "../utils/SdServiceServerConfigUtil";
3
- import { SdServiceBase } from "../commons";
4
- export class SdCryptoService extends SdServiceBase {
5
- async encryptAsync(data) {
6
- const config = (await SdServiceServerConfigUtil.getConfigAsync(this.server.options.rootPath, this.request?.clientName))["crypto"];
7
- if (config === undefined) {
8
- throw new Error("암호화 설정을 찾을 수 없습니다.");
9
- }
10
- return crypto.createHmac("sha256", config.key)
11
- .update(data)
12
- .digest("hex");
13
- }
14
- async encryptAesAsync(data) {
15
- const config = (await SdServiceServerConfigUtil.getConfigAsync(this.server.options.rootPath, this.request?.clientName))["crypto"];
16
- if (config === undefined) {
17
- throw new Error("암호화 설정을 찾을 수 없습니다.");
18
- }
19
- const iv = crypto.randomBytes(16);
20
- const cipher = crypto.createCipheriv("aes-256-cbc", Buffer.from(config.key), iv);
21
- const encrypted = cipher.update(data);
22
- return (iv.toString("hex") +
23
- ":" +
24
- Buffer.concat([encrypted, cipher.final()]).toString("hex"));
25
- }
26
- async decryptAesAsync(encText) {
27
- const config = (await SdServiceServerConfigUtil.getConfigAsync(this.server.options.rootPath, this.request?.clientName))["crypto"];
28
- if (config === undefined) {
29
- throw new Error("암호화 설정을 찾을 수 없습니다.");
30
- }
31
- const textParts = encText.split(":");
32
- const iv = Buffer.from(textParts.shift(), "hex");
33
- const encryptedText = Buffer.from(textParts.join(":"), "hex");
34
- const decipher = crypto.createDecipheriv("aes-256-cbc", Buffer.from(config.key), iv);
35
- const decrypted = decipher.update(encryptedText);
36
- return Buffer.concat([decrypted, decipher.final()]);
37
- }
38
- }
39
- //# sourceMappingURL=SdCryptoService.js.map