@simplysm/sd-cli 10.0.21 → 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 (248) 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/dist/commons.d.ts +1 -0
  5. package/dist/entry/SdCliLocalUpdate.d.ts +7 -0
  6. package/dist/entry/SdCliLocalUpdate.js.map +1 -0
  7. package/dist/entry/SdCliLocalUpdate.mjs +55 -0
  8. package/dist/sd-cli.js.map +1 -1
  9. package/dist/sd-cli.mjs +15 -0
  10. package/package.json +5 -5
  11. package/src/SdTsIncrementalBuilder.ts +29 -4
  12. package/src/commons.ts +1 -0
  13. package/src/entry/SdCliLocalUpdate.ts +70 -0
  14. package/src/sd-cli.ts +19 -0
  15. package/dist/sd-core-common/src/decorators/NotifyPropertyChange.d.ts +0 -20
  16. package/dist/sd-core-common/src/decorators/NotifyPropertyChange.js.map +0 -1
  17. package/dist/sd-core-common/src/decorators/NotifyPropertyChange.mjs +0 -12
  18. package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.d.ts +0 -43
  19. package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.js.map +0 -1
  20. package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.mjs +0 -54
  21. package/dist/sd-core-common/src/decorators/PropertyValidate.d.ts +0 -16
  22. package/dist/sd-core-common/src/decorators/PropertyValidate.js.map +0 -1
  23. package/dist/sd-core-common/src/decorators/PropertyValidate.mjs +0 -26
  24. package/dist/sd-core-common/src/decorators/decorator-return-types.d.ts +0 -14
  25. package/dist/sd-core-common/src/decorators/decorator-return-types.js.map +0 -1
  26. package/dist/sd-core-common/src/decorators/decorator-return-types.mjs +0 -2
  27. package/dist/sd-core-common/src/errors/ArgumentError.d.ts +0 -10
  28. package/dist/sd-core-common/src/errors/ArgumentError.js.map +0 -1
  29. package/dist/sd-core-common/src/errors/ArgumentError.mjs +0 -13
  30. package/dist/sd-core-common/src/errors/NeverEntryError.d.ts +0 -10
  31. package/dist/sd-core-common/src/errors/NeverEntryError.js.map +0 -1
  32. package/dist/sd-core-common/src/errors/NeverEntryError.mjs +0 -13
  33. package/dist/sd-core-common/src/errors/NotImplementError.d.ts +0 -10
  34. package/dist/sd-core-common/src/errors/NotImplementError.js.map +0 -1
  35. package/dist/sd-core-common/src/errors/NotImplementError.mjs +0 -13
  36. package/dist/sd-core-common/src/errors/SdError.d.ts +0 -23
  37. package/dist/sd-core-common/src/errors/SdError.js.map +0 -1
  38. package/dist/sd-core-common/src/errors/SdError.mjs +0 -40
  39. package/dist/sd-core-common/src/errors/TimeoutError.d.ts +0 -11
  40. package/dist/sd-core-common/src/errors/TimeoutError.js.map +0 -1
  41. package/dist/sd-core-common/src/errors/TimeoutError.mjs +0 -16
  42. package/dist/sd-core-common/src/extensions/ArrayExtension.d.ts +0 -147
  43. package/dist/sd-core-common/src/extensions/ArrayExtension.js.map +0 -1
  44. package/dist/sd-core-common/src/extensions/ArrayExtension.mjs +0 -448
  45. package/dist/sd-core-common/src/extensions/MapExtension.d.ts +0 -4
  46. package/dist/sd-core-common/src/extensions/MapExtension.js.map +0 -1
  47. package/dist/sd-core-common/src/extensions/MapExtension.mjs +0 -15
  48. package/dist/sd-core-common/src/extensions/SetExtension.d.ts +0 -3
  49. package/dist/sd-core-common/src/extensions/SetExtension.js.map +0 -1
  50. package/dist/sd-core-common/src/extensions/SetExtension.mjs +0 -10
  51. package/dist/sd-core-common/src/index.d.ts +0 -32
  52. package/dist/sd-core-common/src/index.js.map +0 -1
  53. package/dist/sd-core-common/src/index.mjs +0 -33
  54. package/dist/sd-core-common/src/types/DateOnly.d.ts +0 -135
  55. package/dist/sd-core-common/src/types/DateOnly.js.map +0 -1
  56. package/dist/sd-core-common/src/types/DateOnly.mjs +0 -220
  57. package/dist/sd-core-common/src/types/DateTime.d.ts +0 -42
  58. package/dist/sd-core-common/src/types/DateTime.js.map +0 -1
  59. package/dist/sd-core-common/src/types/DateTime.mjs +0 -156
  60. package/dist/sd-core-common/src/types/DeepPartial.d.ts +0 -3
  61. package/dist/sd-core-common/src/types/DeepPartial.js.map +0 -1
  62. package/dist/sd-core-common/src/types/DeepPartial.mjs +0 -2
  63. package/dist/sd-core-common/src/types/ObjectSet.d.ts +0 -4
  64. package/dist/sd-core-common/src/types/ObjectSet.js.map +0 -1
  65. package/dist/sd-core-common/src/types/ObjectSet.mjs +0 -18
  66. package/dist/sd-core-common/src/types/Time.d.ts +0 -27
  67. package/dist/sd-core-common/src/types/Time.js.map +0 -1
  68. package/dist/sd-core-common/src/types/Time.mjs +0 -108
  69. package/dist/sd-core-common/src/types/Type.d.ts +0 -7
  70. package/dist/sd-core-common/src/types/Type.js.map +0 -1
  71. package/dist/sd-core-common/src/types/Type.mjs +0 -2
  72. package/dist/sd-core-common/src/types/UnwrappedType.d.ts +0 -1
  73. package/dist/sd-core-common/src/types/UnwrappedType.js.map +0 -1
  74. package/dist/sd-core-common/src/types/UnwrappedType.mjs +0 -2
  75. package/dist/sd-core-common/src/types/Uuid.d.ts +0 -8
  76. package/dist/sd-core-common/src/types/Uuid.js.map +0 -1
  77. package/dist/sd-core-common/src/types/Uuid.mjs +0 -26
  78. package/dist/sd-core-common/src/types/WrappedType.d.ts +0 -1
  79. package/dist/sd-core-common/src/types/WrappedType.js.map +0 -1
  80. package/dist/sd-core-common/src/types/WrappedType.mjs +0 -2
  81. package/dist/sd-core-common/src/utils/DateTimeFormatUtil.d.ts +0 -12
  82. package/dist/sd-core-common/src/utils/DateTimeFormatUtil.js.map +0 -1
  83. package/dist/sd-core-common/src/utils/DateTimeFormatUtil.mjs +0 -67
  84. package/dist/sd-core-common/src/utils/FunctionQueue.d.ts +0 -8
  85. package/dist/sd-core-common/src/utils/FunctionQueue.js.map +0 -1
  86. package/dist/sd-core-common/src/utils/FunctionQueue.mjs +0 -46
  87. package/dist/sd-core-common/src/utils/FunctionUtil.d.ts +0 -6
  88. package/dist/sd-core-common/src/utils/FunctionUtil.js.map +0 -1
  89. package/dist/sd-core-common/src/utils/FunctionUtil.mjs +0 -31
  90. package/dist/sd-core-common/src/utils/JsonConvert.d.ts +0 -8
  91. package/dist/sd-core-common/src/utils/JsonConvert.js.map +0 -1
  92. package/dist/sd-core-common/src/utils/JsonConvert.mjs +0 -78
  93. package/dist/sd-core-common/src/utils/MathUtil.d.ts +0 -3
  94. package/dist/sd-core-common/src/utils/MathUtil.js.map +0 -1
  95. package/dist/sd-core-common/src/utils/MathUtil.mjs +0 -6
  96. package/dist/sd-core-common/src/utils/NumberUtil.d.ts +0 -6
  97. package/dist/sd-core-common/src/utils/NumberUtil.js.map +0 -1
  98. package/dist/sd-core-common/src/utils/NumberUtil.mjs +0 -32
  99. package/dist/sd-core-common/src/utils/ObjectUtil.d.ts +0 -80
  100. package/dist/sd-core-common/src/utils/ObjectUtil.js.map +0 -1
  101. package/dist/sd-core-common/src/utils/ObjectUtil.mjs +0 -452
  102. package/dist/sd-core-common/src/utils/SdSyncEventEmitter.d.ts +0 -6
  103. package/dist/sd-core-common/src/utils/SdSyncEventEmitter.js.map +0 -1
  104. package/dist/sd-core-common/src/utils/SdSyncEventEmitter.mjs +0 -27
  105. package/dist/sd-core-common/src/utils/StringUtil.d.ts +0 -8
  106. package/dist/sd-core-common/src/utils/StringUtil.js.map +0 -1
  107. package/dist/sd-core-common/src/utils/StringUtil.mjs +0 -77
  108. package/dist/sd-core-common/src/utils/Wait.d.ts +0 -4
  109. package/dist/sd-core-common/src/utils/Wait.js.map +0 -1
  110. package/dist/sd-core-common/src/utils/Wait.mjs +0 -23
  111. package/dist/sd-core-node/src/index.d.ts +0 -6
  112. package/dist/sd-core-node/src/index.js.map +0 -1
  113. package/dist/sd-core-node/src/index.mjs +0 -7
  114. package/dist/sd-core-node/src/utils/FsUtil.d.ts +0 -44
  115. package/dist/sd-core-node/src/utils/FsUtil.js.map +0 -1
  116. package/dist/sd-core-node/src/utils/FsUtil.mjs +0 -493
  117. package/dist/sd-core-node/src/utils/Logger.d.ts +0 -91
  118. package/dist/sd-core-node/src/utils/Logger.js.map +0 -1
  119. package/dist/sd-core-node/src/utils/Logger.mjs +0 -185
  120. package/dist/sd-core-node/src/utils/PathUtil.d.ts +0 -6
  121. package/dist/sd-core-node/src/utils/PathUtil.js.map +0 -1
  122. package/dist/sd-core-node/src/utils/PathUtil.mjs +0 -24
  123. package/dist/sd-core-node/src/utils/SdFsWatcher.d.ts +0 -15
  124. package/dist/sd-core-node/src/utils/SdFsWatcher.js.map +0 -1
  125. package/dist/sd-core-node/src/utils/SdFsWatcher.mjs +0 -43
  126. package/dist/sd-core-node/src/utils/SdProcess.d.ts +0 -5
  127. package/dist/sd-core-node/src/utils/SdProcess.js.map +0 -1
  128. package/dist/sd-core-node/src/utils/SdProcess.mjs +0 -36
  129. package/dist/sd-orm-common/src/CaseQueryHelper.d.ts +0 -12
  130. package/dist/sd-orm-common/src/CaseQueryHelper.js.map +0 -1
  131. package/dist/sd-orm-common/src/CaseQueryHelper.mjs +0 -19
  132. package/dist/sd-orm-common/src/CaseWhenQueryHelper.d.ts +0 -12
  133. package/dist/sd-orm-common/src/CaseWhenQueryHelper.js.map +0 -1
  134. package/dist/sd-orm-common/src/CaseWhenQueryHelper.mjs +0 -20
  135. package/dist/sd-orm-common/src/DbContext.d.ts +0 -81
  136. package/dist/sd-orm-common/src/DbContext.js.map +0 -1
  137. package/dist/sd-orm-common/src/DbContext.mjs +0 -635
  138. package/dist/sd-orm-common/src/IDbConnection.d.ts +0 -15
  139. package/dist/sd-orm-common/src/IDbConnection.js.map +0 -1
  140. package/dist/sd-orm-common/src/IDbConnection.mjs +0 -2
  141. package/dist/sd-orm-common/src/IDbContextExecutor.d.ts +0 -17
  142. package/dist/sd-orm-common/src/IDbContextExecutor.js.map +0 -1
  143. package/dist/sd-orm-common/src/IDbContextExecutor.mjs +0 -2
  144. package/dist/sd-orm-common/src/IDbMigration.d.ts +0 -4
  145. package/dist/sd-orm-common/src/IDbMigration.js.map +0 -1
  146. package/dist/sd-orm-common/src/IDbMigration.mjs +0 -2
  147. package/dist/sd-orm-common/src/QueryBuilder.d.ts +0 -48
  148. package/dist/sd-orm-common/src/QueryBuilder.js.map +0 -1
  149. package/dist/sd-orm-common/src/QueryBuilder.mjs +0 -1022
  150. package/dist/sd-orm-common/src/QueryHelper.d.ts +0 -75
  151. package/dist/sd-orm-common/src/QueryHelper.js.map +0 -1
  152. package/dist/sd-orm-common/src/QueryHelper.mjs +0 -627
  153. package/dist/sd-orm-common/src/QueryUnit.d.ts +0 -10
  154. package/dist/sd-orm-common/src/QueryUnit.js.map +0 -1
  155. package/dist/sd-orm-common/src/QueryUnit.mjs +0 -16
  156. package/dist/sd-orm-common/src/Queryable.d.ts +0 -105
  157. package/dist/sd-orm-common/src/Queryable.js.map +0 -1
  158. package/dist/sd-orm-common/src/Queryable.mjs +0 -1375
  159. package/dist/sd-orm-common/src/SdOrmDataType.d.ts +0 -21
  160. package/dist/sd-orm-common/src/SdOrmDataType.js.map +0 -1
  161. package/dist/sd-orm-common/src/SdOrmDataType.mjs +0 -2
  162. package/dist/sd-orm-common/src/commons.d.ts +0 -400
  163. package/dist/sd-orm-common/src/commons.js.map +0 -1
  164. package/dist/sd-orm-common/src/commons.mjs +0 -8
  165. package/dist/sd-orm-common/src/decorators.d.ts +0 -29
  166. package/dist/sd-orm-common/src/decorators.js.map +0 -1
  167. package/dist/sd-orm-common/src/decorators.mjs +0 -89
  168. package/dist/sd-orm-common/src/index.d.ts +0 -17
  169. package/dist/sd-orm-common/src/index.js.map +0 -1
  170. package/dist/sd-orm-common/src/index.mjs +0 -18
  171. package/dist/sd-orm-common/src/models/SystemMigration.d.ts +0 -3
  172. package/dist/sd-orm-common/src/models/SystemMigration.js.map +0 -1
  173. package/dist/sd-orm-common/src/models/SystemMigration.mjs +0 -13
  174. package/dist/sd-orm-common/src/utils/DbDefinitionUtil.d.ts +0 -14
  175. package/dist/sd-orm-common/src/utils/DbDefinitionUtil.js.map +0 -1
  176. package/dist/sd-orm-common/src/utils/DbDefinitionUtil.mjs +0 -66
  177. package/dist/sd-orm-common/src/utils/SdOrmUtil.d.ts +0 -8
  178. package/dist/sd-orm-common/src/utils/SdOrmUtil.js.map +0 -1
  179. package/dist/sd-orm-common/src/utils/SdOrmUtil.mjs +0 -248
  180. package/dist/sd-orm-node/src/DbConnectionFactory.d.ts +0 -4
  181. package/dist/sd-orm-node/src/DbConnectionFactory.js.map +0 -1
  182. package/dist/sd-orm-node/src/DbConnectionFactory.mjs +0 -17
  183. package/dist/sd-orm-node/src/NodeDbContextExecutor.d.ts +0 -19
  184. package/dist/sd-orm-node/src/NodeDbContextExecutor.js.map +0 -1
  185. package/dist/sd-orm-node/src/NodeDbContextExecutor.mjs +0 -71
  186. package/dist/sd-orm-node/src/SdOrm.d.ts +0 -10
  187. package/dist/sd-orm-node/src/SdOrm.js.map +0 -1
  188. package/dist/sd-orm-node/src/SdOrm.mjs +0 -25
  189. package/dist/sd-orm-node/src/index.d.ts +0 -4
  190. package/dist/sd-orm-node/src/index.js.map +0 -1
  191. package/dist/sd-orm-node/src/index.mjs +0 -5
  192. package/dist/sd-orm-node-mssql/src/MssqlDbConnection.d.ts +0 -25
  193. package/dist/sd-orm-node-mssql/src/MssqlDbConnection.js.map +0 -1
  194. package/dist/sd-orm-node-mssql/src/MssqlDbConnection.mjs +0 -321
  195. package/dist/sd-orm-node-mssql/src/index.d.ts +0 -2
  196. package/dist/sd-orm-node-mssql/src/index.js.map +0 -1
  197. package/dist/sd-orm-node-mssql/src/index.mjs +0 -3
  198. package/dist/sd-orm-node-mysql/src/MysqlDbConnection.d.ts +0 -22
  199. package/dist/sd-orm-node-mysql/src/MysqlDbConnection.js.map +0 -1
  200. package/dist/sd-orm-node-mysql/src/MysqlDbConnection.mjs +0 -200
  201. package/dist/sd-orm-node-mysql/src/index.d.ts +0 -2
  202. package/dist/sd-orm-node-mysql/src/index.js.map +0 -1
  203. package/dist/sd-orm-node-mysql/src/index.mjs +0 -3
  204. package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.d.ts +0 -22
  205. package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.js.map +0 -1
  206. package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.mjs +0 -172
  207. package/dist/sd-orm-node-sqlite/src/index.d.ts +0 -2
  208. package/dist/sd-orm-node-sqlite/src/index.js.map +0 -1
  209. package/dist/sd-orm-node-sqlite/src/index.mjs +0 -3
  210. package/dist/sd-service-common/src/commons-orm.d.ts +0 -4
  211. package/dist/sd-service-common/src/commons-orm.js.map +0 -1
  212. package/dist/sd-service-common/src/commons-orm.mjs +0 -2
  213. package/dist/sd-service-common/src/commons-smtp.d.ts +0 -29
  214. package/dist/sd-service-common/src/commons-smtp.js.map +0 -1
  215. package/dist/sd-service-common/src/commons-smtp.mjs +0 -2
  216. package/dist/sd-service-common/src/commons.d.ts +0 -57
  217. package/dist/sd-service-common/src/commons.js.map +0 -1
  218. package/dist/sd-service-common/src/commons.mjs +0 -3
  219. package/dist/sd-service-common/src/index.d.ts +0 -3
  220. package/dist/sd-service-common/src/index.js.map +0 -1
  221. package/dist/sd-service-common/src/index.mjs +0 -4
  222. package/dist/sd-service-server/src/ApiServiceError.d.ts +0 -12
  223. package/dist/sd-service-server/src/ApiServiceError.js.map +0 -1
  224. package/dist/sd-service-server/src/ApiServiceError.mjs +0 -15
  225. package/dist/sd-service-server/src/SdServiceServer.d.ts +0 -39
  226. package/dist/sd-service-server/src/SdServiceServer.js.map +0 -1
  227. package/dist/sd-service-server/src/SdServiceServer.mjs +0 -513
  228. package/dist/sd-service-server/src/commons.d.ts +0 -23
  229. package/dist/sd-service-server/src/commons.js.map +0 -1
  230. package/dist/sd-service-server/src/commons.mjs +0 -3
  231. package/dist/sd-service-server/src/index.d.ts +0 -8
  232. package/dist/sd-service-server/src/index.js.map +0 -1
  233. package/dist/sd-service-server/src/index.mjs +0 -9
  234. package/dist/sd-service-server/src/services/SdAutoUpdateService.d.ts +0 -4
  235. package/dist/sd-service-server/src/services/SdAutoUpdateService.js.map +0 -1
  236. package/dist/sd-service-server/src/services/SdAutoUpdateService.mjs +0 -20
  237. package/dist/sd-service-server/src/services/SdCryptoService.d.ts +0 -7
  238. package/dist/sd-service-server/src/services/SdCryptoService.js.map +0 -1
  239. package/dist/sd-service-server/src/services/SdCryptoService.mjs +0 -39
  240. package/dist/sd-service-server/src/services/SdOrmService.d.ts +0 -22
  241. package/dist/sd-service-server/src/services/SdOrmService.js.map +0 -1
  242. package/dist/sd-service-server/src/services/SdOrmService.mjs +0 -115
  243. package/dist/sd-service-server/src/services/SdSmtpClientService.d.ts +0 -6
  244. package/dist/sd-service-server/src/services/SdSmtpClientService.js.map +0 -1
  245. package/dist/sd-service-server/src/services/SdSmtpClientService.mjs +0 -44
  246. package/dist/sd-service-server/src/utils/SdServiceServerConfigUtil.d.ts +0 -4
  247. package/dist/sd-service-server/src/utils/SdServiceServerConfigUtil.js.map +0 -1
  248. 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