@simplysm/service-server 13.0.0-beta.51 → 13.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 (66) hide show
  1. package/dist/auth/jwt-manager.d.ts +3 -8
  2. package/dist/auth/jwt-manager.d.ts.map +1 -1
  3. package/dist/auth/jwt-manager.js +19 -28
  4. package/dist/auth/jwt-manager.js.map +1 -1
  5. package/dist/core/define-service.js +3 -3
  6. package/dist/core/define-service.js.map +1 -1
  7. package/dist/core/service-executor.d.ts +10 -14
  8. package/dist/core/service-executor.d.ts.map +1 -1
  9. package/dist/core/service-executor.js +28 -33
  10. package/dist/core/service-executor.js.map +1 -1
  11. package/dist/index.d.ts +3 -3
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +8 -3
  14. package/dist/index.js.map +1 -1
  15. package/dist/protocol/protocol-wrapper.d.ts +17 -9
  16. package/dist/protocol/protocol-wrapper.d.ts.map +1 -1
  17. package/dist/protocol/protocol-wrapper.js +37 -48
  18. package/dist/protocol/protocol-wrapper.js.map +1 -1
  19. package/dist/service-server.d.ts +0 -5
  20. package/dist/service-server.d.ts.map +1 -1
  21. package/dist/service-server.js +17 -17
  22. package/dist/service-server.js.map +1 -1
  23. package/dist/services/orm-service.js +2 -2
  24. package/dist/services/orm-service.js.map +1 -1
  25. package/dist/transport/http/http-request-handler.d.ts +10 -10
  26. package/dist/transport/http/http-request-handler.d.ts.map +1 -1
  27. package/dist/transport/http/http-request-handler.js +42 -47
  28. package/dist/transport/http/http-request-handler.js.map +1 -1
  29. package/dist/transport/http/static-file-handler.d.ts +1 -7
  30. package/dist/transport/http/static-file-handler.d.ts.map +1 -1
  31. package/dist/transport/http/static-file-handler.js +32 -37
  32. package/dist/transport/http/static-file-handler.js.map +1 -1
  33. package/dist/transport/http/upload-handler.d.ts +1 -8
  34. package/dist/transport/http/upload-handler.d.ts.map +1 -1
  35. package/dist/transport/http/upload-handler.js +50 -52
  36. package/dist/transport/http/upload-handler.js.map +1 -1
  37. package/dist/transport/socket/service-socket.d.ts +45 -25
  38. package/dist/transport/socket/service-socket.d.ts.map +1 -1
  39. package/dist/transport/socket/service-socket.js +84 -69
  40. package/dist/transport/socket/service-socket.js.map +1 -1
  41. package/dist/transport/socket/websocket-handler.d.ts +32 -8
  42. package/dist/transport/socket/websocket-handler.d.ts.map +1 -1
  43. package/dist/transport/socket/websocket-handler.js +75 -75
  44. package/dist/transport/socket/websocket-handler.js.map +1 -1
  45. package/dist/utils/config-manager.d.ts +1 -6
  46. package/dist/utils/config-manager.d.ts.map +1 -1
  47. package/dist/utils/config-manager.js +47 -50
  48. package/dist/utils/config-manager.js.map +1 -1
  49. package/dist/workers/service-protocol.worker.js +2 -2
  50. package/dist/workers/service-protocol.worker.js.map +1 -1
  51. package/docs/transport.md +2 -2
  52. package/package.json +6 -6
  53. package/src/auth/jwt-manager.ts +28 -36
  54. package/src/core/define-service.ts +3 -3
  55. package/src/core/service-executor.ts +42 -43
  56. package/src/index.ts +3 -3
  57. package/src/protocol/protocol-wrapper.ts +79 -44
  58. package/src/service-server.ts +20 -19
  59. package/src/services/orm-service.ts +2 -2
  60. package/src/transport/http/http-request-handler.ts +58 -55
  61. package/src/transport/http/static-file-handler.ts +41 -41
  62. package/src/transport/http/upload-handler.ts +58 -58
  63. package/src/transport/socket/service-socket.ts +184 -86
  64. package/src/transport/socket/websocket-handler.ts +151 -94
  65. package/src/utils/config-manager.ts +49 -51
  66. package/src/workers/service-protocol.worker.ts +2 -2
@@ -1,10 +1,5 @@
1
- import type { ServiceServer } from "../service-server";
2
1
  import type { AuthTokenPayload } from "./auth-token-payload";
3
- export declare class JwtManager<TAuthInfo = unknown> {
4
- private readonly _server;
5
- constructor(_server: ServiceServer<TAuthInfo>);
6
- sign(payload: AuthTokenPayload<TAuthInfo>): Promise<string>;
7
- verify(token: string): Promise<AuthTokenPayload<TAuthInfo>>;
8
- decode(token: string): AuthTokenPayload<TAuthInfo>;
9
- }
2
+ export declare function signJwt<TAuthInfo = unknown>(jwtSecret: string, payload: AuthTokenPayload<TAuthInfo>): Promise<string>;
3
+ export declare function verifyJwt<TAuthInfo = unknown>(jwtSecret: string, token: string): Promise<AuthTokenPayload<TAuthInfo>>;
4
+ export declare function decodeJwt<TAuthInfo = unknown>(token: string): AuthTokenPayload<TAuthInfo>;
10
5
  //# sourceMappingURL=jwt-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jwt-manager.d.ts","sourceRoot":"","sources":["../../src/auth/jwt-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,qBAAa,UAAU,CAAC,SAAS,GAAG,OAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC;IAExD,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAa3D,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAiBjE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC;CAMnD"}
1
+ {"version":3,"file":"jwt-manager.d.ts","sourceRoot":"","sources":["../../src/auth/jwt-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,wBAAsB,OAAO,CAAC,SAAS,GAAG,OAAO,EAC/C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,GACnC,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,SAAS,CAAC,SAAS,GAAG,OAAO,EACjD,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAYtC;AAED,wBAAgB,SAAS,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAEzF"}
@@ -1,35 +1,26 @@
1
1
  import * as jose from "jose";
2
- class JwtManager {
3
- constructor(_server) {
4
- this._server = _server;
5
- }
6
- async sign(payload) {
7
- const jwtSecret = this._server.options.auth?.jwtSecret;
8
- if (jwtSecret == null) throw new Error("JWT Secret\uC774 \uC815\uC758\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.");
9
- const secret = new TextEncoder().encode(jwtSecret);
10
- return new jose.SignJWT(payload).setProtectedHeader({ alg: "HS256" }).setIssuedAt().setExpirationTime("12h").sign(secret);
11
- }
12
- async verify(token) {
13
- const jwtSecret = this._server.options.auth?.jwtSecret;
14
- if (jwtSecret == null) throw new Error("JWT Secret\uC774 \uC815\uC758\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.");
15
- const secret = new TextEncoder().encode(jwtSecret);
16
- try {
17
- const { payload } = await jose.jwtVerify(token, secret);
18
- return payload;
19
- } catch (err) {
20
- if (err != null && typeof err === "object" && "code" in err && err.code === "ERR_JWT_EXPIRED") {
21
- throw new Error("\uD1A0\uD070\uC774 \uB9CC\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
22
- }
23
- throw new Error("\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uD1A0\uD070\uC785\uB2C8\uB2E4.");
2
+ async function signJwt(jwtSecret, payload) {
3
+ const secret = new TextEncoder().encode(jwtSecret);
4
+ return new jose.SignJWT(payload).setProtectedHeader({ alg: "HS256" }).setIssuedAt().setExpirationTime("12h").sign(secret);
5
+ }
6
+ async function verifyJwt(jwtSecret, token) {
7
+ const secret = new TextEncoder().encode(jwtSecret);
8
+ try {
9
+ const { payload } = await jose.jwtVerify(token, secret);
10
+ return payload;
11
+ } catch (err) {
12
+ if (err != null && typeof err === "object" && "code" in err && err.code === "ERR_JWT_EXPIRED") {
13
+ throw new Error("\uD1A0\uD070\uC774 \uB9CC\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
24
14
  }
15
+ throw new Error("\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uD1A0\uD070\uC785\uB2C8\uB2E4.");
25
16
  }
26
- decode(token) {
27
- const jwtSecret = this._server.options.auth?.jwtSecret;
28
- if (jwtSecret == null) throw new Error("JWT Secret\uC774 \uC815\uC758\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.");
29
- return jose.decodeJwt(token);
30
- }
17
+ }
18
+ function decodeJwt(token) {
19
+ return jose.decodeJwt(token);
31
20
  }
32
21
  export {
33
- JwtManager
22
+ decodeJwt,
23
+ signJwt,
24
+ verifyJwt
34
25
  };
35
26
  //# sourceMappingURL=jwt-manager.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/auth/jwt-manager.ts"],
4
- "mappings": "AACA,YAAY,UAAU;AAGf,MAAM,WAAgC;AAAA,EAC3C,YAA6B,SAAmC;AAAnC;AAAA,EAAoC;AAAA,EAEjE,MAAM,KAAK,SAAuD;AAChE,UAAM,YAAY,KAAK,QAAQ,QAAQ,MAAM;AAC7C,QAAI,aAAa,KAAM,OAAM,IAAI,MAAM,2EAAyB;AAEhE,UAAM,SAAS,IAAI,YAAY,EAAE,OAAO,SAAS;AAEjD,WAAO,IAAI,KAAK,QAAQ,OAAO,EAC5B,mBAAmB,EAAE,KAAK,QAAQ,CAAC,EACnC,YAAY,EACZ,kBAAkB,KAAK,EACvB,KAAK,MAAM;AAAA,EAChB;AAAA,EAEA,MAAM,OAAO,OAAqD;AAChE,UAAM,YAAY,KAAK,QAAQ,QAAQ,MAAM;AAC7C,QAAI,aAAa,KAAM,OAAM,IAAI,MAAM,2EAAyB;AAEhE,UAAM,SAAS,IAAI,YAAY,EAAE,OAAO,SAAS;AAEjD,QAAI;AACF,YAAM,EAAE,QAAQ,IAAI,MAAM,KAAK,UAAU,OAAO,MAAM;AACtD,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,UAAI,OAAO,QAAQ,OAAO,QAAQ,YAAY,UAAU,OAAO,IAAI,SAAS,mBAAmB;AAC7F,cAAM,IAAI,MAAM,gEAAc;AAAA,MAChC;AACA,YAAM,IAAI,MAAM,uEAAgB;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,OAAO,OAA4C;AACjD,UAAM,YAAY,KAAK,QAAQ,QAAQ,MAAM;AAC7C,QAAI,aAAa,KAAM,OAAM,IAAI,MAAM,2EAAyB;AAEhE,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B;AACF;",
4
+ "mappings": "AAAA,YAAY,UAAU;AAGtB,eAAsB,QACpB,WACA,SACiB;AACjB,QAAM,SAAS,IAAI,YAAY,EAAE,OAAO,SAAS;AAEjD,SAAO,IAAI,KAAK,QAAQ,OAAO,EAC5B,mBAAmB,EAAE,KAAK,QAAQ,CAAC,EACnC,YAAY,EACZ,kBAAkB,KAAK,EACvB,KAAK,MAAM;AAChB;AAEA,eAAsB,UACpB,WACA,OACsC;AACtC,QAAM,SAAS,IAAI,YAAY,EAAE,OAAO,SAAS;AAEjD,MAAI;AACF,UAAM,EAAE,QAAQ,IAAI,MAAM,KAAK,UAAU,OAAO,MAAM;AACtD,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,QAAI,OAAO,QAAQ,OAAO,QAAQ,YAAY,UAAU,OAAO,IAAI,SAAS,mBAAmB;AAC7F,YAAM,IAAI,MAAM,gEAAc;AAAA,IAChC;AACA,UAAM,IAAI,MAAM,uEAAgB;AAAA,EAClC;AACF;AAEO,SAAS,UAA+B,OAA4C;AACzF,SAAO,KAAK,UAAU,KAAK;AAC7B;",
5
5
  "names": []
6
6
  }
@@ -1,5 +1,5 @@
1
1
  import { objMerge } from "@simplysm/core-common";
2
- import { ConfigManager } from "../utils/config-manager.js";
2
+ import { getConfig } from "../utils/config-manager.js";
3
3
  import path from "path";
4
4
  function createServiceContext(server, socket, http, legacy) {
5
5
  return {
@@ -25,14 +25,14 @@ function createServiceContext(server, socket, http, legacy) {
25
25
  async getConfig(section) {
26
26
  let configParent = {};
27
27
  const rootFilePath = path.resolve(server.options.rootPath, ".config.json");
28
- const rootConfig = await ConfigManager.getConfig(rootFilePath);
28
+ const rootConfig = await getConfig(rootFilePath);
29
29
  if (rootConfig != null) {
30
30
  configParent = rootConfig;
31
31
  }
32
32
  const targetPath = this.clientPath;
33
33
  if (targetPath != null) {
34
34
  const clientFilePath = path.resolve(targetPath, ".config.json");
35
- const clientConfig = await ConfigManager.getConfig(clientFilePath);
35
+ const clientConfig = await getConfig(clientFilePath);
36
36
  if (clientConfig != null) {
37
37
  configParent = objMerge(configParent, clientConfig);
38
38
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/core/define-service.ts"],
4
- "mappings": "AAGA,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B,OAAO,UAAU;AAuBV,SAAS,qBACd,QACA,QACA,MACA,QAC2B;AAC3B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA,IAAI,WAAkC;AACpC,aAAQ,QAAQ,kBAAkB,QAAQ,MAAM,kBAAkB;AAAA,IACpE;AAAA,IAEA,IAAI,aAAiC;AACnC,YAAM,OAAO,QAAQ,cAAc,MAAM,cAAc,QAAQ;AAC/D,UAAI,QAAQ,KAAM,QAAO;AAEzB,UAAI,SAAS,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,GAAG,KAAK,KAAK,SAAS,IAAI,GAAG;AACnF,cAAM,IAAI,MAAM,kGAAuB,IAAI,EAAE;AAAA,MAC/C;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,IAAI,aAAiC;AACnC,YAAM,OAAO,KAAK;AAClB,aAAO,QAAQ,OAAO,SAAY,KAAK,QAAQ,OAAO,QAAQ,UAAU,OAAO,IAAI;AAAA,IACrF;AAAA,IAEA,MAAM,UAAa,SAA6B;AAC9C,UAAI,eAA8C,CAAC;AAEnD,YAAM,eAAe,KAAK,QAAQ,OAAO,QAAQ,UAAU,cAAc;AACzE,YAAM,aAAa,MAAM,cAAc,UAA6B,YAAY;AAChF,UAAI,cAAc,MAAM;AACtB,uBAAe;AAAA,MACjB;AAEA,YAAM,aAAa,KAAK;AACxB,UAAI,cAAc,MAAM;AACtB,cAAM,iBAAiB,KAAK,QAAQ,YAAY,cAAc;AAC9D,cAAM,eAAe,MAAM,cAAc,UAA6B,cAAc;AACpF,YAAI,gBAAgB,MAAM;AACxB,yBAAe,SAAS,cAAc,YAAY;AAAA,QACpD;AAAA,MACF;AAEA,YAAM,SAAS,aAAa,OAAO;AACnC,UAAI,UAAU,KAAM,OAAM,IAAI,MAAM,iFAAqB,OAAO,EAAE;AAClE,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAIA,MAAM,mBAAmB,uBAAO,iBAAiB;AAG1C,SAAS,0BAA0B,IAAoC;AAC5E,SAAQ,GAA0C,gBAAgB;AACpE;AAYO,SAAS,KAAK,iBAAsC,SAA8B;AACvF,QAAM,cAAc,MAAM,QAAQ,eAAe,IAAI,kBAAkB,CAAC;AACxE,QAAM,KAAK,MAAM,QAAQ,eAAe,IAAI,UAAW;AAGvD,QAAM,UAAU,IAAI,SAAoB,GAAG,GAAG,IAAI;AAClD,EAAC,QAA+C,gBAAgB,IAAI;AAEpE,SAAO;AACT;AAyBO,SAAS,cACd,MACA,SAC6B;AAC7B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,iBAAiB,0BAA0B,OAAO;AAAA,EACpD;AACF;",
4
+ "mappings": "AAGA,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAC1B,OAAO,UAAU;AAuBV,SAAS,qBACd,QACA,QACA,MACA,QAC2B;AAC3B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA,IAAI,WAAkC;AACpC,aAAQ,QAAQ,kBAAkB,QAAQ,MAAM,kBAAkB;AAAA,IACpE;AAAA,IAEA,IAAI,aAAiC;AACnC,YAAM,OAAO,QAAQ,cAAc,MAAM,cAAc,QAAQ;AAC/D,UAAI,QAAQ,KAAM,QAAO;AAEzB,UAAI,SAAS,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,GAAG,KAAK,KAAK,SAAS,IAAI,GAAG;AACnF,cAAM,IAAI,MAAM,kGAAuB,IAAI,EAAE;AAAA,MAC/C;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,IAAI,aAAiC;AACnC,YAAM,OAAO,KAAK;AAClB,aAAO,QAAQ,OAAO,SAAY,KAAK,QAAQ,OAAO,QAAQ,UAAU,OAAO,IAAI;AAAA,IACrF;AAAA,IAEA,MAAM,UAAa,SAA6B;AAC9C,UAAI,eAA8C,CAAC;AAEnD,YAAM,eAAe,KAAK,QAAQ,OAAO,QAAQ,UAAU,cAAc;AACzE,YAAM,aAAa,MAAM,UAA6B,YAAY;AAClE,UAAI,cAAc,MAAM;AACtB,uBAAe;AAAA,MACjB;AAEA,YAAM,aAAa,KAAK;AACxB,UAAI,cAAc,MAAM;AACtB,cAAM,iBAAiB,KAAK,QAAQ,YAAY,cAAc;AAC9D,cAAM,eAAe,MAAM,UAA6B,cAAc;AACtE,YAAI,gBAAgB,MAAM;AACxB,yBAAe,SAAS,cAAc,YAAY;AAAA,QACpD;AAAA,MACF;AAEA,YAAM,SAAS,aAAa,OAAO;AACnC,UAAI,UAAU,KAAM,OAAM,IAAI,MAAM,iFAAqB,OAAO,EAAE;AAClE,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAIA,MAAM,mBAAmB,uBAAO,iBAAiB;AAG1C,SAAS,0BAA0B,IAAoC;AAC5E,SAAQ,GAA0C,gBAAgB;AACpE;AAYO,SAAS,KAAK,iBAAsC,SAA8B;AACvF,QAAM,cAAc,MAAM,QAAQ,eAAe,IAAI,kBAAkB,CAAC;AACxE,QAAM,KAAK,MAAM,QAAQ,eAAe,IAAI,UAAW;AAGvD,QAAM,UAAU,IAAI,SAAoB,GAAG,GAAG,IAAI;AAClD,EAAC,QAA+C,gBAAgB,IAAI;AAEpE,SAAO;AACT;AAyBO,SAAS,cACd,MACA,SAC6B;AAC7B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,iBAAiB,0BAA0B,OAAO;AAAA,EACpD;AACF;",
5
5
  "names": []
6
6
  }
@@ -1,18 +1,14 @@
1
1
  import type { ServiceServer } from "../service-server";
2
2
  import type { ServiceSocket } from "../transport/socket/service-socket";
3
3
  import type { AuthTokenPayload } from "../auth/auth-token-payload";
4
- export declare class ServiceExecutor {
5
- private readonly _server;
6
- constructor(_server: ServiceServer);
7
- runMethod(def: {
8
- serviceName: string;
9
- methodName: string;
10
- params: unknown[];
11
- socket?: ServiceSocket;
12
- http?: {
13
- clientName: string;
14
- authTokenPayload?: AuthTokenPayload;
15
- };
16
- }): Promise<unknown>;
17
- }
4
+ export declare function runServiceMethod(server: ServiceServer, def: {
5
+ serviceName: string;
6
+ methodName: string;
7
+ params: unknown[];
8
+ socket?: ServiceSocket;
9
+ http?: {
10
+ clientName: string;
11
+ authTokenPayload?: AuthTokenPayload;
12
+ };
13
+ }): Promise<unknown>;
18
14
  //# sourceMappingURL=service-executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service-executor.d.ts","sourceRoot":"","sources":["../../src/core/service-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,aAAa;IAE7C,SAAS,CAAC,GAAG,EAAE;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,OAAO,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,IAAI,CAAC,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;SAAE,CAAC;KACpE,GAAG,OAAO,CAAC,OAAO,CAAC;CAqDrB"}
1
+ {"version":3,"file":"service-executor.d.ts","sourceRoot":"","sources":["../../src/core/service-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;CACpE,GACA,OAAO,CAAC,OAAO,CAAC,CAoDlB"}
@@ -1,45 +1,40 @@
1
1
  import { createServiceContext, getServiceAuthPermissions } from "./define-service.js";
2
- class ServiceExecutor {
3
- constructor(_server) {
4
- this._server = _server;
2
+ async function runServiceMethod(server, def) {
3
+ const serviceDef = server.options.services.find((item) => item.name === def.serviceName);
4
+ if (serviceDef == null) {
5
+ throw new Error(`\uC11C\uBE44\uC2A4[${def.serviceName}]\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.`);
5
6
  }
6
- async runMethod(def) {
7
- const serviceDef = this._server.options.services.find((item) => item.name === def.serviceName);
8
- if (serviceDef == null) {
9
- throw new Error(`\uC11C\uBE44\uC2A4[${def.serviceName}]\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.`);
7
+ const clientName = def.socket?.clientName ?? def.http?.clientName;
8
+ if (clientName != null) {
9
+ if (clientName.includes("..") || clientName.includes("/") || clientName.includes("\\")) {
10
+ throw new Error(`[Security] \uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uD074\uB77C\uC774\uC5B8\uD2B8\uBA85\uC785\uB2C8\uB2E4: ${clientName}`);
10
11
  }
11
- const clientName = def.socket?.clientName ?? def.http?.clientName;
12
- if (clientName != null) {
13
- if (clientName.includes("..") || clientName.includes("/") || clientName.includes("\\")) {
14
- throw new Error(`[Security] \uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uD074\uB77C\uC774\uC5B8\uD2B8\uBA85\uC785\uB2C8\uB2E4: ${clientName}`);
12
+ }
13
+ const ctx = createServiceContext(server, def.socket, def.http);
14
+ const methods = serviceDef.factory(ctx);
15
+ const method = methods[def.methodName];
16
+ if (typeof method !== "function") {
17
+ throw new Error(`\uBA54\uC18C\uB4DC[${def.serviceName}.${def.methodName}]\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.`);
18
+ }
19
+ if (server.options.auth != null) {
20
+ const methodPerms = getServiceAuthPermissions(method);
21
+ const requiredPerms = methodPerms ?? serviceDef.authPermissions;
22
+ if (requiredPerms != null) {
23
+ const authTokenPayload = def.socket?.authTokenPayload ?? def.http?.authTokenPayload;
24
+ if (authTokenPayload == null) {
25
+ throw new Error("\uB85C\uADF8\uC778\uC774 \uD544\uC694\uD569\uB2C8\uB2E4.");
15
26
  }
16
- }
17
- const ctx = createServiceContext(this._server, def.socket, def.http);
18
- const methods = serviceDef.factory(ctx);
19
- const method = methods[def.methodName];
20
- if (typeof method !== "function") {
21
- throw new Error(`\uBA54\uC18C\uB4DC[${def.serviceName}.${def.methodName}]\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.`);
22
- }
23
- if (this._server.options.auth != null) {
24
- const methodPerms = getServiceAuthPermissions(method);
25
- const requiredPerms = methodPerms ?? serviceDef.authPermissions;
26
- if (requiredPerms != null) {
27
- const authTokenPayload = def.socket?.authTokenPayload ?? def.http?.authTokenPayload;
28
- if (authTokenPayload == null) {
29
- throw new Error("\uB85C\uADF8\uC778\uC774 \uD544\uC694\uD569\uB2C8\uB2E4.");
30
- }
31
- if (requiredPerms.length > 0) {
32
- const hasPerm = requiredPerms.some((perm) => authTokenPayload.roles.includes(perm));
33
- if (!hasPerm) {
34
- throw new Error("\uAD8C\uD55C\uC774 \uBD80\uC871\uD569\uB2C8\uB2E4.");
35
- }
27
+ if (requiredPerms.length > 0) {
28
+ const hasPerm = requiredPerms.some((perm) => authTokenPayload.roles.includes(perm));
29
+ if (!hasPerm) {
30
+ throw new Error("\uAD8C\uD55C\uC774 \uBD80\uC871\uD569\uB2C8\uB2E4.");
36
31
  }
37
32
  }
38
33
  }
39
- return await method(...def.params);
40
34
  }
35
+ return await method(...def.params);
41
36
  }
42
37
  export {
43
- ServiceExecutor
38
+ runServiceMethod
44
39
  };
45
40
  //# sourceMappingURL=service-executor.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/core/service-executor.ts"],
4
- "mappings": "AAGA,SAAS,sBAAsB,iCAAiC;AAEzD,MAAM,gBAAgB;AAAA,EAC3B,YAA6B,SAAwB;AAAxB;AAAA,EAAyB;AAAA,EAEtD,MAAM,UAAU,KAMK;AAEnB,UAAM,aAAa,KAAK,QAAQ,QAAQ,SAAS,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,WAAW;AAE7F,QAAI,cAAc,MAAM;AACtB,YAAM,IAAI,MAAM,sBAAO,IAAI,WAAW,uDAAe;AAAA,IACvD;AAGA,UAAM,aAAa,IAAI,QAAQ,cAAc,IAAI,MAAM;AACvD,QAAI,cAAc,MAAM;AACtB,UAAI,WAAW,SAAS,IAAI,KAAK,WAAW,SAAS,GAAG,KAAK,WAAW,SAAS,IAAI,GAAG;AACtF,cAAM,IAAI,MAAM,4GAAiC,UAAU,EAAE;AAAA,MAC/D;AAAA,IACF;AAGA,UAAM,MAAM,qBAAqB,KAAK,SAAS,IAAI,QAAQ,IAAI,IAAI;AAGnE,UAAM,UAAU,WAAW,QAAQ,GAAG;AAGtC,UAAM,SAAU,QAAoC,IAAI,UAAU;AAClE,QAAI,OAAO,WAAW,YAAY;AAChC,YAAM,IAAI,MAAM,sBAAO,IAAI,WAAW,IAAI,IAAI,UAAU,uDAAe;AAAA,IACzE;AAGA,QAAI,KAAK,QAAQ,QAAQ,QAAQ,MAAM;AAErC,YAAM,cAAc,0BAA0B,MAAM;AACpD,YAAM,gBAAgB,eAAe,WAAW;AAEhD,UAAI,iBAAiB,MAAM;AACzB,cAAM,mBAAmB,IAAI,QAAQ,oBAAoB,IAAI,MAAM;AAEnE,YAAI,oBAAoB,MAAM;AAC5B,gBAAM,IAAI,MAAM,0DAAa;AAAA,QAC/B;AAEA,YAAI,cAAc,SAAS,GAAG;AAC5B,gBAAM,UAAU,cAAc,KAAK,CAAC,SAAS,iBAAiB,MAAM,SAAS,IAAI,CAAC;AAClF,cAAI,CAAC,SAAS;AACZ,kBAAM,IAAI,MAAM,oDAAY;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,WAAO,MAAM,OAAO,GAAG,IAAI,MAAM;AAAA,EACnC;AACF;",
4
+ "mappings": "AAGA,SAAS,sBAAsB,iCAAiC;AAEhE,eAAsB,iBACpB,QACA,KAOkB;AAElB,QAAM,aAAa,OAAO,QAAQ,SAAS,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,WAAW;AAEvF,MAAI,cAAc,MAAM;AACtB,UAAM,IAAI,MAAM,sBAAO,IAAI,WAAW,uDAAe;AAAA,EACvD;AAGA,QAAM,aAAa,IAAI,QAAQ,cAAc,IAAI,MAAM;AACvD,MAAI,cAAc,MAAM;AACtB,QAAI,WAAW,SAAS,IAAI,KAAK,WAAW,SAAS,GAAG,KAAK,WAAW,SAAS,IAAI,GAAG;AACtF,YAAM,IAAI,MAAM,4GAAiC,UAAU,EAAE;AAAA,IAC/D;AAAA,EACF;AAGA,QAAM,MAAM,qBAAqB,QAAQ,IAAI,QAAQ,IAAI,IAAI;AAG7D,QAAM,UAAU,WAAW,QAAQ,GAAG;AAGtC,QAAM,SAAU,QAAoC,IAAI,UAAU;AAClE,MAAI,OAAO,WAAW,YAAY;AAChC,UAAM,IAAI,MAAM,sBAAO,IAAI,WAAW,IAAI,IAAI,UAAU,uDAAe;AAAA,EACzE;AAGA,MAAI,OAAO,QAAQ,QAAQ,MAAM;AAE/B,UAAM,cAAc,0BAA0B,MAAM;AACpD,UAAM,gBAAgB,eAAe,WAAW;AAEhD,QAAI,iBAAiB,MAAM;AACzB,YAAM,mBAAmB,IAAI,QAAQ,oBAAoB,IAAI,MAAM;AAEnE,UAAI,oBAAoB,MAAM;AAC5B,cAAM,IAAI,MAAM,0DAAa;AAAA,MAC/B;AAEA,UAAI,cAAc,SAAS,GAAG;AAC5B,cAAM,UAAU,cAAc,KAAK,CAAC,SAAS,iBAAiB,MAAM,SAAS,IAAI,CAAC;AAClF,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,oDAAY;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,SAAO,MAAM,OAAO,GAAG,IAAI,MAAM;AACnC;",
5
5
  "names": []
6
6
  }
package/dist/index.d.ts CHANGED
@@ -3,12 +3,12 @@ export * from "./auth/auth-token-payload";
3
3
  export * from "./auth/jwt-manager";
4
4
  export * from "./core/define-service";
5
5
  export * from "./core/service-executor";
6
- export * from "./transport/socket/websocket-handler";
7
- export * from "./transport/socket/service-socket";
6
+ export { createWebSocketHandler, type WebSocketHandler } from "./transport/socket/websocket-handler";
7
+ export { createServiceSocket, type ServiceSocket } from "./transport/socket/service-socket";
8
8
  export * from "./transport/http/http-request-handler";
9
9
  export * from "./transport/http/upload-handler";
10
10
  export * from "./transport/http/static-file-handler";
11
- export * from "./protocol/protocol-wrapper";
11
+ export { createProtocolWrapper, type ProtocolWrapper } from "./protocol/protocol-wrapper";
12
12
  export * from "./services/orm-service";
13
13
  export * from "./services/crypto-service";
14
14
  export * from "./services/smtp-service";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC;AAGvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AAGnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAGlD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,6BAA6B,CAAC;AAG5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAG/C,cAAc,wBAAwB,CAAC;AAGvC,cAAc,iCAAiC,CAAC;AAGhD,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC;AAGvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AAGnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAGxC,OAAO,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACrG,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAG5F,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AAGrD,OAAO,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG1F,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAG/C,cAAc,wBAAwB,CAAC;AAGvC,cAAc,iCAAiC,CAAC;AAGhD,cAAc,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -3,12 +3,12 @@ export * from "./auth/auth-token-payload.js";
3
3
  export * from "./auth/jwt-manager.js";
4
4
  export * from "./core/define-service.js";
5
5
  export * from "./core/service-executor.js";
6
- export * from "./transport/socket/websocket-handler.js";
7
- export * from "./transport/socket/service-socket.js";
6
+ import { createWebSocketHandler } from "./transport/socket/websocket-handler.js";
7
+ import { createServiceSocket } from "./transport/socket/service-socket.js";
8
8
  export * from "./transport/http/http-request-handler.js";
9
9
  export * from "./transport/http/upload-handler.js";
10
10
  export * from "./transport/http/static-file-handler.js";
11
- export * from "./protocol/protocol-wrapper.js";
11
+ import { createProtocolWrapper } from "./protocol/protocol-wrapper.js";
12
12
  export * from "./services/orm-service.js";
13
13
  export * from "./services/crypto-service.js";
14
14
  export * from "./services/smtp-service.js";
@@ -16,4 +16,9 @@ export * from "./services/auto-update-service.js";
16
16
  export * from "./utils/config-manager.js";
17
17
  export * from "./legacy/v1-auto-update-handler.js";
18
18
  export * from "./service-server.js";
19
+ export {
20
+ createProtocolWrapper,
21
+ createServiceSocket,
22
+ createWebSocketHandler
23
+ };
19
24
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "mappings": "AACA,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AAGd,cAAc;AAGd,cAAc;",
4
+ "mappings": "AACA,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AAGd,SAAS,8BAAqD;AAC9D,SAAS,2BAA+C;AAGxD,cAAc;AACd,cAAc;AACd,cAAc;AAGd,SAAS,6BAAmD;AAG5D,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AAGd,cAAc;AAGd,cAAc;",
5
5
  "names": []
6
6
  }
@@ -1,25 +1,33 @@
1
1
  import type { Bytes } from "@simplysm/core-common";
2
2
  import type { ServiceMessageDecodeResult, ServiceMessage } from "@simplysm/service-common";
3
- export declare class ProtocolWrapper {
4
- private static _worker?;
5
- private static get worker();
6
- private readonly _protocol;
7
- private readonly _SIZE_THRESHOLD;
3
+ /**
4
+ * Protocol wrapper interface
5
+ *
6
+ * Automatically offloads heavy message encoding/decoding to a worker thread
7
+ * while using main thread for lightweight operations.
8
+ */
9
+ export interface ProtocolWrapper {
8
10
  /**
9
- * 메시지 인코딩 (자동 분기 처리)
11
+ * Encode message (auto worker delegation)
10
12
  */
11
13
  encode(uuid: string, message: ServiceMessage): Promise<{
12
14
  chunks: Bytes[];
13
15
  totalSize: number;
14
16
  }>;
15
17
  /**
16
- * 메시지 디코딩 (자동 분기 처리)
18
+ * Decode message (auto worker delegation)
17
19
  */
18
20
  decode(bytes: Bytes): Promise<ServiceMessageDecodeResult<ServiceMessage>>;
19
21
  /**
20
- * 워커 사용 여부 판단 로직 (Encode)
22
+ * Dispose protocol resources
21
23
  */
22
- private _shouldUseWorkerForEncode;
23
24
  dispose(): void;
24
25
  }
26
+ /**
27
+ * Create a protocol wrapper instance
28
+ *
29
+ * Automatically offloads heavy message encoding/decoding to a worker thread
30
+ * while using main thread for lightweight operations.
31
+ */
32
+ export declare function createProtocolWrapper(): ProtocolWrapper;
25
33
  //# sourceMappingURL=protocol-wrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-wrapper.d.ts","sourceRoot":"","sources":["../../src/protocol/protocol-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI3F,qBAAa,eAAe;IAE1B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAkD;IACzE,OAAO,CAAC,MAAM,KAAK,MAAM,GAUxB;IAGD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAGnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAa;IAE7C;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAQpG;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC;IAS/E;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAkBjC,OAAO;CAGR"}
1
+ {"version":3,"file":"protocol-wrapper.d.ts","sourceRoot":"","sources":["../../src/protocol/protocol-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI3F;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE/F;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC,CAAC;IAE1E;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAiBD;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CA2DvD"}
@@ -1,49 +1,21 @@
1
1
  import { Worker } from "@simplysm/core-node";
2
- import { ServiceProtocol } from "@simplysm/service-common";
3
- class ProtocolWrapper {
4
- // 워커 스레드 (무거운 작업용, Static Lazy Singleton)
5
- static _worker;
6
- static get worker() {
7
- if (this._worker == null) {
8
- this._worker = Worker.create(
9
- import.meta.resolve("../workers/service-protocol.worker"),
10
- {
11
- resourceLimits: { maxOldGenerationSizeMb: 4096 }
12
- }
13
- );
14
- }
15
- return this._worker;
16
- }
17
- // 메인 스레드용 프로토콜 인스턴스 (가벼운 작업용)
18
- _protocol = new ServiceProtocol();
19
- // 기준값 설정
20
- _SIZE_THRESHOLD = 30 * 1024;
21
- // 30KB
22
- /**
23
- * 메시지 인코딩 (자동 분기 처리)
24
- */
25
- async encode(uuid, message) {
26
- if (this._shouldUseWorkerForEncode(message)) {
27
- return ProtocolWrapper.worker.encode(uuid, message);
28
- } else {
29
- return this._protocol.encode(uuid, message);
30
- }
31
- }
32
- /**
33
- * 메시지 디코딩 (자동 분기 처리)
34
- */
35
- async decode(bytes) {
36
- const totalSize = bytes.length;
37
- if (totalSize > this._SIZE_THRESHOLD) {
38
- return ProtocolWrapper.worker.decode(bytes);
39
- } else {
40
- return this._protocol.decode(bytes);
41
- }
2
+ import { createServiceProtocol } from "@simplysm/service-common";
3
+ let sharedWorker;
4
+ function getWorker() {
5
+ if (sharedWorker == null) {
6
+ sharedWorker = Worker.create(
7
+ import.meta.resolve("../workers/service-protocol.worker"),
8
+ {
9
+ resourceLimits: { maxOldGenerationSizeMb: 4096 }
10
+ }
11
+ );
42
12
  }
43
- /**
44
- * 워커 사용 여부 판단 로직 (Encode)
45
- */
46
- _shouldUseWorkerForEncode(msg) {
13
+ return sharedWorker;
14
+ }
15
+ function createProtocolWrapper() {
16
+ const protocol = createServiceProtocol();
17
+ const SIZE_THRESHOLD = 30 * 1024;
18
+ function shouldUseWorkerForEncode(msg) {
47
19
  if (!("body" in msg)) return false;
48
20
  const body = msg.body;
49
21
  if (body instanceof Uint8Array) {
@@ -54,11 +26,28 @@ class ProtocolWrapper {
54
26
  }
55
27
  return false;
56
28
  }
57
- dispose() {
58
- this._protocol.dispose();
59
- }
29
+ return {
30
+ async encode(uuid, message) {
31
+ if (shouldUseWorkerForEncode(message)) {
32
+ return getWorker().encode(uuid, message);
33
+ } else {
34
+ return protocol.encode(uuid, message);
35
+ }
36
+ },
37
+ async decode(bytes) {
38
+ const totalSize = bytes.length;
39
+ if (totalSize > SIZE_THRESHOLD) {
40
+ return getWorker().decode(bytes);
41
+ } else {
42
+ return protocol.decode(bytes);
43
+ }
44
+ },
45
+ dispose() {
46
+ protocol.dispose();
47
+ }
48
+ };
60
49
  }
61
50
  export {
62
- ProtocolWrapper
51
+ createProtocolWrapper
63
52
  };
64
53
  //# sourceMappingURL=protocol-wrapper.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/protocol/protocol-wrapper.ts"],
4
- "mappings": "AACA,SAAS,cAAgC;AAEzC,SAAS,uBAAuB;AAGzB,MAAM,gBAAgB;AAAA;AAAA,EAE3B,OAAe;AAAA,EACf,WAAmB,SAAS;AAC1B,QAAI,KAAK,WAAW,MAAM;AACxB,WAAK,UAAU,OAAO;AAAA,QACpB,YAAY,QAAQ,oCAAoC;AAAA,QACxD;AAAA,UACE,gBAAgB,EAAE,wBAAwB,KAAK;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGiB,YAAY,IAAI,gBAAgB;AAAA;AAAA,EAGhC,kBAAkB,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxC,MAAM,OAAO,MAAc,SAA0E;AACnG,QAAI,KAAK,0BAA0B,OAAO,GAAG;AAC3C,aAAO,gBAAgB,OAAO,OAAO,MAAM,OAAO;AAAA,IACpD,OAAO;AACL,aAAO,KAAK,UAAU,OAAO,MAAM,OAAO;AAAA,IAC5C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,OAAmE;AAC9E,UAAM,YAAY,MAAM;AACxB,QAAI,YAAY,KAAK,iBAAiB;AACpC,aAAO,gBAAgB,OAAO,OAAO,KAAK;AAAA,IAC5C,OAAO;AACL,aAAO,KAAK,UAAU,OAAO,KAAK;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,0BAA0B,KAA8B;AAC9D,QAAI,EAAE,UAAU,KAAM,QAAO;AAE7B,UAAM,OAAO,IAAI;AAGjB,QAAI,gBAAgB,YAAY;AAC9B,aAAO;AAAA,IACT;AAGA,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,aAAO,KAAK,SAAS,KAAK,KAAK,KAAK,CAAC,SAAS,gBAAgB,UAAU;AAAA,IAC1E;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,UAAU;AACR,SAAK,UAAU,QAAQ;AAAA,EACzB;AACF;",
4
+ "mappings": "AACA,SAAS,cAAgC;AAEzC,SAAS,6BAA6B;AA2BtC,IAAI;AAEJ,SAAS,YAA6D;AACpE,MAAI,gBAAgB,MAAM;AACxB,mBAAe,OAAO;AAAA,MACpB,YAAY,QAAQ,oCAAoC;AAAA,MACxD;AAAA,QACE,gBAAgB,EAAE,wBAAwB,KAAK;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAQO,SAAS,wBAAyC;AAKvD,QAAM,WAAW,sBAAsB;AACvC,QAAM,iBAAiB,KAAK;AAS5B,WAAS,yBAAyB,KAA8B;AAC9D,QAAI,EAAE,UAAU,KAAM,QAAO;AAE7B,UAAM,OAAO,IAAI;AAGjB,QAAI,gBAAgB,YAAY;AAC9B,aAAO;AAAA,IACT;AAGA,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,aAAO,KAAK,SAAS,KAAK,KAAK,KAAK,CAAC,SAAS,gBAAgB,UAAU;AAAA,IAC1E;AAEA,WAAO;AAAA,EACT;AAMA,SAAO;AAAA,IACL,MAAM,OAAO,MAAc,SAA0E;AACnG,UAAI,yBAAyB,OAAO,GAAG;AACrC,eAAO,UAAU,EAAE,OAAO,MAAM,OAAO;AAAA,MACzC,OAAO;AACL,eAAO,SAAS,OAAO,MAAM,OAAO;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,MAAM,OAAO,OAAmE;AAC9E,YAAM,YAAY,MAAM;AACxB,UAAI,YAAY,gBAAgB;AAC9B,eAAO,UAAU,EAAE,OAAO,KAAK;AAAA,MACjC,OAAO;AACL,eAAO,SAAS,OAAO,KAAK;AAAA,MAC9B;AAAA,IACF;AAAA,IAEA,UAAgB;AACd,eAAS,QAAQ;AAAA,IACnB;AAAA,EACF;AACF;",
5
5
  "names": []
6
6
  }
@@ -9,11 +9,6 @@ export declare class ServiceServer<TAuthInfo = unknown> extends EventEmitter<{
9
9
  }> {
10
10
  readonly options: ServiceServerOptions;
11
11
  isOpen: boolean;
12
- private readonly _serviceExecutor;
13
- private readonly _jwt;
14
- private readonly _httpRequestHandler;
15
- private readonly _staticFileHandler;
16
- private readonly _uploadHandler;
17
12
  private readonly _wsHandler;
18
13
  readonly fastify: FastifyInstance;
19
14
  constructor(options: ServiceServerOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"service-server.d.ts","sourceRoot":"","sources":["../src/service-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAIhE,OAAO,EAA4B,YAAY,EAAO,MAAM,uBAAuB,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAa/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAOnE,qBAAa,aAAa,CAAC,SAAS,GAAG,OAAO,CAAE,SAAQ,YAAY,CAAC;IACnE,KAAK,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,IAAI,CAAC;CACb,CAAC;IAcY,QAAQ,CAAC,OAAO,EAAE,oBAAoB;IAblD,MAAM,UAAS;IAEf,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmC;IAExD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAkE;IACtG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA+B;IAClE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsC;IAErE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0D;IAErF,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;gBAEb,OAAO,EAAE,oBAAoB;IAY5C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAsIvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC;IAK3E,SAAS,CAAC,KAAK,EAAE,KAAK,EAC1B,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,EACvC,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,EACtC,IAAI,EAAE,KAAK;IAKP,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC;IAItD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAI1E,OAAO,CAAC,yBAAyB;CAyBlC;AAED,wBAAgB,mBAAmB,CAAC,SAAS,GAAG,OAAO,EAAE,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAAC,SAAS,CAAC,CAEhH"}
1
+ {"version":3,"file":"service-server.d.ts","sourceRoot":"","sources":["../src/service-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAIhE,OAAO,EAA4B,YAAY,EAAO,MAAM,uBAAuB,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAa/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAOnE,qBAAa,aAAa,CAAC,SAAS,GAAG,OAAO,CAAE,SAAQ,YAAY,CAAC;IACnE,KAAK,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,IAAI,CAAC;CACb,CAAC;IAOY,QAAQ,CAAC,OAAO,EAAE,oBAAoB;IANlD,MAAM,UAAS;IAEf,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4C;IAEvE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;gBAEb,OAAO,EAAE,oBAAoB;IAc5C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAsIvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC;IAK3E,SAAS,CAAC,KAAK,EAAE,KAAK,EAC1B,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,EACvC,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,EACtC,IAAI,EAAE,KAAK;IAKP,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC;IAOtD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAO1E,OAAO,CAAC,yBAAyB;CAyBlC;AAED,wBAAgB,mBAAmB,CAAC,SAAS,GAAG,OAAO,EAAE,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAAC,SAAS,CAAC,CAEhH"}
@@ -1,6 +1,6 @@
1
- import { StaticFileHandler } from "./transport/http/static-file-handler.js";
2
- import { HttpRequestHandler } from "./transport/http/http-request-handler.js";
3
- import { ServiceExecutor } from "./core/service-executor.js";
1
+ import { handleStaticFile } from "./transport/http/static-file-handler.js";
2
+ import { handleHttpRequest } from "./transport/http/http-request-handler.js";
3
+ import { runServiceMethod } from "./core/service-executor.js";
4
4
  import { jsonStringify, jsonParse, EventEmitter, env } from "@simplysm/core-common";
5
5
  import fastify from "fastify";
6
6
  import fastifyWebsocket from "@fastify/websocket";
@@ -10,9 +10,9 @@ import fastifyHelmet from "@fastify/helmet";
10
10
  import fastifyCors from "@fastify/cors";
11
11
  import path from "path";
12
12
  import { Buffer } from "node:buffer";
13
- import { UploadHandler } from "./transport/http/upload-handler.js";
14
- import { WebSocketHandler } from "./transport/socket/websocket-handler.js";
15
- import { JwtManager } from "./auth/jwt-manager.js";
13
+ import { handleUpload } from "./transport/http/upload-handler.js";
14
+ import { createWebSocketHandler } from "./transport/socket/websocket-handler.js";
15
+ import { signJwt, verifyJwt } from "./auth/jwt-manager.js";
16
16
  import { handleV1Connection } from "./legacy/v1-auto-update-handler.js";
17
17
  import { createServiceContext } from "./core/define-service.js";
18
18
  import consola from "consola";
@@ -23,14 +23,10 @@ class ServiceServer extends EventEmitter {
23
23
  this.options = options;
24
24
  const httpsConf = options.ssl ? { pfx: Buffer.from(options.ssl.pfxBytes), passphrase: options.ssl.passphrase } : null;
25
25
  this.fastify = fastify({ https: httpsConf });
26
+ this._wsHandler = createWebSocketHandler((def) => runServiceMethod(this, def), options.auth?.jwtSecret);
26
27
  }
27
28
  isOpen = false;
28
- _serviceExecutor = new ServiceExecutor(this);
29
- _jwt = new JwtManager(this);
30
- _httpRequestHandler = new HttpRequestHandler(this, this._serviceExecutor, this._jwt);
31
- _staticFileHandler = new StaticFileHandler(this);
32
- _uploadHandler = new UploadHandler(this, this._jwt);
33
- _wsHandler = new WebSocketHandler(this._serviceExecutor, this._jwt);
29
+ _wsHandler;
34
30
  fastify;
35
31
  async listen() {
36
32
  logger.info(`\uC11C\uBC84 \uC2DC\uC791... ${env.VER ?? ""}`);
@@ -77,10 +73,10 @@ class ServiceServer extends EventEmitter {
77
73
  });
78
74
  this.fastify.setSerializerCompiler(() => (data) => jsonStringify(data));
79
75
  this.fastify.all("/api/:service/:method", async (req, reply) => {
80
- await this._httpRequestHandler.handle(req, reply);
76
+ await handleHttpRequest(req, reply, this.options.auth?.jwtSecret, (def) => runServiceMethod(this, def));
81
77
  });
82
78
  this.fastify.all("/upload", async (req, reply) => {
83
- await this._uploadHandler.handle(req, reply);
79
+ await handleUpload(req, reply, this.options.rootPath, this.options.auth?.jwtSecret);
84
80
  });
85
81
  const onWebSocketConnected = (socket, req) => {
86
82
  const { ver, clientId, clientName } = req.query;
@@ -111,7 +107,7 @@ class ServiceServer extends EventEmitter {
111
107
  handler: async (req, reply) => {
112
108
  const urlObj = new URL(req.raw.url, "http://localhost");
113
109
  const urlPath = decodeURI(urlObj.pathname.slice(1));
114
- await this._staticFileHandler.handle(req, reply, urlPath);
110
+ await handleStaticFile(req, reply, this.options.rootPath, urlPath);
115
111
  }
116
112
  });
117
113
  this.fastify.server.on("error", (err) => {
@@ -138,10 +134,14 @@ class ServiceServer extends EventEmitter {
138
134
  await this._wsHandler.emitToServer(eventDef, infoSelector, data);
139
135
  }
140
136
  async generateAuthToken(payload) {
141
- return this._jwt.sign(payload);
137
+ const jwtSecret = this.options.auth?.jwtSecret;
138
+ if (jwtSecret == null) throw new Error("JWT Secret\uC774 \uC815\uC758\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.");
139
+ return signJwt(jwtSecret, payload);
142
140
  }
143
141
  async verifyAuthToken(token) {
144
- return this._jwt.verify(token);
142
+ const jwtSecret = this.options.auth?.jwtSecret;
143
+ if (jwtSecret == null) throw new Error("JWT Secret\uC774 \uC815\uC758\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.");
144
+ return verifyJwt(jwtSecret, token);
145
145
  }
146
146
  _registerGracefulShutdown() {
147
147
  const shutdownHandler = async (signal) => {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/service-server.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }