@simplysm/service-server 14.0.52 → 14.0.54

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.
@@ -1,9 +1,44 @@
1
1
  import type { WebSocket } from "ws";
2
+ import type { ServiceContext } from "../core/define-service";
3
+ export interface V1Request {
4
+ uuid: string;
5
+ command: string;
6
+ params: unknown[];
7
+ clientName?: string;
8
+ }
9
+ export interface V1Response {
10
+ name: "response";
11
+ reqUuid: string;
12
+ state: "success" | "error";
13
+ body: unknown;
14
+ }
15
+ export interface V1AutoUpdateMethods {
16
+ getLastVersion: (platform: string) => Promise<unknown> | unknown;
17
+ }
18
+ export type V1RequestHandlerResult = {
19
+ handled: true;
20
+ state?: V1Response["state"];
21
+ body: unknown;
22
+ } | {
23
+ handled: false;
24
+ };
25
+ export interface V1RequestHandlerContext {
26
+ request: V1Request;
27
+ serviceContext: ServiceContext;
28
+ }
29
+ export type V1RequestHandler = ((ctx: V1RequestHandlerContext) => Promise<V1RequestHandlerResult>) | ((ctx: V1RequestHandlerContext) => V1RequestHandlerResult);
30
+ export interface V1ConnectionOptions {
31
+ serviceContext?: ServiceContext;
32
+ serviceContextFactory?: (request: V1Request) => ServiceContext;
33
+ handlers?: V1RequestHandler[];
34
+ autoUpdateMethods?: V1AutoUpdateMethods;
35
+ autoUpdateMethodsFactory?: (ctx: V1RequestHandlerContext) => V1AutoUpdateMethods;
36
+ clientNameSetter?: (clientName: string | undefined) => void;
37
+ }
2
38
  /**
3
- * V1 레거시 클라이언트 핸들러 (자동 업데이트만 지원).
4
- * 모든 요청은 업그레이드 필요 에러를 반환한다.
39
+ * V1 레거시 클라이언트 핸들러.
40
+ * 사용자 핸들러가 처리하지 않은 요청은 자동 업데이트 fallback 또는 업그레이드 필요 에러로 처리한다.
5
41
  */
6
- export declare function handleV1Connection(socket: WebSocket, autoUpdateMethods: {
7
- getLastVersion: (platform: string) => Promise<any>;
8
- }, clientNameSetter?: (clientName: string | undefined) => void): void;
42
+ export declare function handleV1Connection(socket: WebSocket, autoUpdateMethods: V1AutoUpdateMethods, clientNameSetter?: (clientName: string | undefined) => void): void;
43
+ export declare function handleV1Connection(socket: WebSocket, options: V1ConnectionOptions): void;
9
44
  //# sourceMappingURL=v1-auto-update-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"v1-auto-update-handler.d.ts","sourceRoot":"","sources":["../../src/legacy/v1-auto-update-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAmBpC;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,iBAAiB,EAAE;IAAE,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CAAE,EACzE,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,QAwC5D"}
1
+ {"version":3,"file":"v1-auto-update-handler.d.ts","sourceRoot":"","sources":["../../src/legacy/v1-auto-update-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAK7D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAClE;AAED,MAAM,MAAM,sBAAsB,GAC9B;IACE,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;CACf,GACD;IACE,OAAO,EAAE,KAAK,CAAC;CAChB,CAAC;AAEN,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,SAAS,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;CAChC;AAED,MAAM,MAAM,gBAAgB,GACxB,CAAC,CAAC,GAAG,EAAE,uBAAuB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC,GACnE,CAAC,CAAC,GAAG,EAAE,uBAAuB,KAAK,sBAAsB,CAAC,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,cAAc,CAAC;IAC/D,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;IACxC,wBAAwB,CAAC,EAAE,CAAC,GAAG,EAAE,uBAAuB,KAAK,mBAAmB,CAAC;IACjF,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAC7D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,iBAAiB,EAAE,mBAAmB,EACtC,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,GAC1D,IAAI,CAAC;AACR,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC"}
@@ -1,45 +1,67 @@
1
1
  import consola from "consola";
2
2
  const logger = consola.withTag("service-server:V1AutoUpdateHandler");
3
- /**
4
- * V1 레거시 클라이언트 핸들러 (자동 업데이트만 지원).
5
- * 모든 요청은 업그레이드 필요 에러를 반환한다.
6
- */
7
- export function handleV1Connection(socket, autoUpdateMethods, clientNameSetter) {
3
+ export function handleV1Connection(socket, optionsOrMethods, clientNameSetter) {
4
+ const options = "getLastVersion" in optionsOrMethods
5
+ ? { autoUpdateMethods: optionsOrMethods, clientNameSetter }
6
+ : optionsOrMethods;
8
7
  // 연결 성립 알림
9
8
  socket.send(JSON.stringify({ name: "connected" }));
10
9
  socket.on("message", async (data) => {
11
10
  try {
12
11
  const msg = JSON.parse(data.toString());
13
- // SdAutoUpdateService.getLastVersion만 허용
14
- if (msg.command === "SdAutoUpdateService.getLastVersion") {
15
- // 레거시 컨텍스트 설정
16
- clientNameSetter?.(msg.clientName);
17
- const result = await autoUpdateMethods.getLastVersion(msg.params[0]);
18
- const response = {
19
- name: "response",
20
- reqUuid: msg.uuid,
21
- state: "success",
22
- body: result,
23
- };
24
- socket.send(JSON.stringify(response));
12
+ options.clientNameSetter?.(msg.clientName);
13
+ const serviceContext = options.serviceContextFactory?.(msg) ?? options.serviceContext;
14
+ const handlerResult = await executeCustomHandler(msg, options.handlers ?? [], serviceContext);
15
+ if (handlerResult.handled) {
16
+ sendResponse(socket, msg.uuid, handlerResult.state ?? "success", handlerResult.body);
17
+ return;
25
18
  }
26
- else {
27
- // 모든 요청은 업그레이드 요구
28
- const response = {
29
- name: "response",
30
- reqUuid: msg.uuid,
31
- state: "error",
32
- body: {
33
- message: "앱 업그레이드가 필요합니다.",
34
- code: "UPGRADE_REQUIRED",
35
- },
36
- };
37
- socket.send(JSON.stringify(response));
19
+ if (msg.command === "SdAutoUpdateService.getLastVersion") {
20
+ const autoUpdateMethods = resolveAutoUpdateMethods(msg, options, serviceContext);
21
+ if (autoUpdateMethods != null) {
22
+ const result = await autoUpdateMethods.getLastVersion(msg.params[0]);
23
+ sendResponse(socket, msg.uuid, "success", result);
24
+ return;
25
+ }
38
26
  }
27
+ sendResponse(socket, msg.uuid, "error", {
28
+ message: "앱 업그레이드가 필요합니다.",
29
+ code: "UPGRADE_REQUIRED",
30
+ });
39
31
  }
40
32
  catch (err) {
41
33
  logger.warn("V1 메시지 처리 에러", err);
42
34
  }
43
35
  });
44
36
  }
37
+ async function executeCustomHandler(request, handlers, serviceContext) {
38
+ if (handlers.length < 1)
39
+ return { handled: false };
40
+ if (serviceContext == null) {
41
+ throw new Error("V1 핸들러를 실행하려면 serviceContext가 필요합니다.");
42
+ }
43
+ for (const handler of handlers) {
44
+ const result = await handler({ request, serviceContext });
45
+ if (result.handled)
46
+ return result;
47
+ }
48
+ return { handled: false };
49
+ }
50
+ function resolveAutoUpdateMethods(request, options, serviceContext) {
51
+ if (options.autoUpdateMethodsFactory == null)
52
+ return options.autoUpdateMethods;
53
+ if (serviceContext == null) {
54
+ throw new Error("V1 자동 업데이트 fallback을 실행하려면 serviceContext가 필요합니다.");
55
+ }
56
+ return options.autoUpdateMethodsFactory({ request, serviceContext });
57
+ }
58
+ function sendResponse(socket, reqUuid, state, body) {
59
+ const response = {
60
+ name: "response",
61
+ reqUuid,
62
+ state,
63
+ body,
64
+ };
65
+ socket.send(JSON.stringify(response));
66
+ }
45
67
  //# sourceMappingURL=v1-auto-update-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"v1-auto-update-handler.js","sourceRoot":"","sources":["../../src/legacy/v1-auto-update-handler.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;AAgBrE;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAiB,EACjB,iBAAyE,EACzE,gBAA2D;IAE3D,WAAW;IACX,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAEnD,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAe,CAAC;YAEtD,yCAAyC;YACzC,IAAI,GAAG,CAAC,OAAO,KAAK,oCAAoC,EAAE,CAAC;gBACzD,cAAc;gBACd,gBAAgB,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAEnC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAW,CAAC,CAAC;gBAE/E,MAAM,QAAQ,GAAgB;oBAC5B,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,GAAG,CAAC,IAAI;oBACjB,KAAK,EAAE,SAAS;oBAChB,IAAI,EAAE,MAAM;iBACb,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,sBAAsB;gBACtB,MAAM,QAAQ,GAAgB;oBAC5B,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,GAAG,CAAC,IAAI;oBACjB,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE;wBACJ,OAAO,EAAE,iBAAiB;wBAC1B,IAAI,EAAE,kBAAkB;qBACzB;iBACF,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"v1-auto-update-handler.js","sourceRoot":"","sources":["../../src/legacy/v1-auto-update-handler.ts"],"names":[],"mappings":"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"}
@@ -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,EAAQ,YAAY,EAAO,MAAM,uBAAuB,CAAC;AAChE,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,MAAM,WAAW,gBAAgB,CAAC,SAAS,SAAS,eAAe;IACjE,IAAI,CACF,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,OAAO,EACnD,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,GACvB,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,qBAAa,aAAa,CAAC,SAAS,GAAG,OAAO,CAAE,SAAQ,YAAY,CAAC;IACnE,KAAK,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,IAAI,CAAC;CACb,CAAC;IASY,QAAQ,CAAC,OAAO,EAAE,oBAAoB;IARlD,MAAM,UAAS;IAEf,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4C;IACvE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,mBAAmB,CAAS;IAEpC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;gBAEb,OAAO,EAAE,oBAAoB;IAmB5C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAsJvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,QAAQ,CAAC,SAAS,SAAS,eAAe,EACxC,SAAS,EAAE,MAAM,GAChB,gBAAgB,CAAC,SAAS,CAAC;IAMxB,SAAS,CAAC,SAAS,SAAS,eAAe,EAC/C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,OAAO,EACnD,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC;IAKpB,aAAa,CAAC,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC;IAKlD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAK1E,OAAO,CAAC,yBAAyB;CA4BlC;AAED,wBAAgB,mBAAmB,CAAC,SAAS,GAAG,OAAO,EACrD,OAAO,EAAE,oBAAoB,GAC5B,aAAa,CAAC,SAAS,CAAC,CAE1B"}
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,EAAQ,YAAY,EAAO,MAAM,uBAAuB,CAAC;AAChE,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,MAAM,WAAW,gBAAgB,CAAC,SAAS,SAAS,eAAe;IACjE,IAAI,CACF,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,OAAO,EACnD,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,GACvB,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,qBAAa,aAAa,CAAC,SAAS,GAAG,OAAO,CAAE,SAAQ,YAAY,CAAC;IACnE,KAAK,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,IAAI,CAAC;CACb,CAAC;IASY,QAAQ,CAAC,OAAO,EAAE,oBAAoB;IARlD,MAAM,UAAS;IAEf,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4C;IACvE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,mBAAmB,CAAS;IAEpC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;gBAEb,OAAO,EAAE,oBAAoB;IAoB5C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAyJvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,QAAQ,CAAC,SAAS,SAAS,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC;IAMrF,SAAS,CAAC,SAAS,SAAS,eAAe,EAC/C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,OAAO,EACnD,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC;IAKpB,aAAa,CAAC,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC;IAKlD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAK1E,OAAO,CAAC,yBAAyB;CA4BlC;AAED,wBAAgB,mBAAmB,CAAC,SAAS,GAAG,OAAO,EACrD,OAAO,EAAE,oBAAoB,GAC5B,aAAa,CAAC,SAAS,CAAC,CAE1B"}
@@ -27,7 +27,8 @@ export class ServiceServer extends EventEmitter {
27
27
  constructor(options) {
28
28
  super();
29
29
  this.options = options;
30
- this._jwtSecret = options.auth != null && options.auth !== false ? options.auth.jwtSecret : undefined;
30
+ this._jwtSecret =
31
+ options.auth != null && options.auth !== false ? options.auth.jwtSecret : undefined;
31
32
  // SSL 설정 (동기)
32
33
  // 참고: Fastify HTTPS는 Buffer 타입이 필요함 (Uint8Array를 직접 사용할 수 없음)
33
34
  const httpsConf = options.ssl
@@ -116,16 +117,19 @@ export class ServiceServer extends EventEmitter {
116
117
  this._wsHandler.addSocket(socket, clientId, clientName, req);
117
118
  }
118
119
  else {
119
- // V1 레거시 지원 (자동 업데이트 전용)
120
+ // V1 레거시 지원
120
121
  const autoUpdateDef = this.options.services.find((s) => s.name === "AutoUpdate");
121
- if (autoUpdateDef == null) {
122
+ const legacyV1Handlers = this.options.legacyV1Handlers ?? [];
123
+ if (autoUpdateDef == null && legacyV1Handlers.length < 1) {
122
124
  socket.close(1008, "AutoUpdate 서비스가 설정되지 않았습니다");
123
125
  return;
124
126
  }
125
- const legacyCtx = createServiceContext(this, undefined, undefined, {});
126
- const autoUpdateMethods = autoUpdateDef.factory(legacyCtx);
127
- handleV1Connection(socket, autoUpdateMethods, (name) => {
128
- legacyCtx.legacy = { clientName: name };
127
+ handleV1Connection(socket, {
128
+ serviceContextFactory: (request) => createServiceContext(this, undefined, undefined, { clientName: request.clientName }),
129
+ handlers: legacyV1Handlers,
130
+ autoUpdateMethodsFactory: autoUpdateDef == null
131
+ ? undefined
132
+ : ({ serviceContext }) => createV1AutoUpdateMethods(autoUpdateDef.factory(serviceContext)),
129
133
  });
130
134
  }
131
135
  };
@@ -208,4 +212,13 @@ export class ServiceServer extends EventEmitter {
208
212
  export function createServiceServer(options) {
209
213
  return new ServiceServer(options);
210
214
  }
215
+ function createV1AutoUpdateMethods(methods) {
216
+ const getLastVersion = methods["getLastVersion"];
217
+ if (getLastVersion == null) {
218
+ throw new Error("AutoUpdate 서비스에 getLastVersion 메서드가 없습니다.");
219
+ }
220
+ return {
221
+ getLastVersion: (platform) => getLastVersion(platform),
222
+ };
223
+ }
211
224
  //# sourceMappingURL=service-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service-server.js","sourceRoot":"","sources":["../src/service-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;AAS/D,MAAM,OAAO,aAAmC,SAAQ,YAGtD;IASqB;IARrB,MAAM,GAAG,KAAK,CAAC;IAEE,UAAU,CAA4C;IACtD,UAAU,CAAqB;IACxC,mBAAmB,GAAG,KAAK,CAAC;IAE3B,OAAO,CAAkB;IAElC,YAAqB,OAA6B;QAChD,KAAK,EAAE,CAAC;QADW,YAAO,GAAP,OAAO,CAAsB;QAGhD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAEtG,cAAc;QACd,8DAA8D;QAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG;YAC3B,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE;YAChF,CAAC,CAAC,IAAI,CAAC;QAET,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAE7C,IAAI,CAAC,UAAU,GAAG,sBAAsB,CACtC,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,EACxC,IAAI,CAAC,UAAU,CAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAE9C,wDAAwD;QACxD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;YAC9B,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC;YACzF,IAAI,mBAAmB,IAAI,IAAI,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CACb,wBAAwB,mBAAmB,CAAC,IAAI,qBAAqB,CACtE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAE9C,UAAU;QACV,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE;YACzC,MAAM,EAAE,IAAI;YACZ,qBAAqB,EAAE;gBACrB,UAAU,EAAE;oBACV,GAAG,aAAa,CAAC,qBAAqB,CAAC,oBAAoB,EAAE;oBAC7D,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;oBAChD,iBAAiB,EAAE,CAAC,iBAAiB,CAAC;oBACtC,YAAY,EAAE,CAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;oBAClE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI;wBAC1B,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC;4BACE,2BAA2B,EAAE,IAAI;yBAClC,CAAC;iBACP;aACF;YACD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI;YAC9B,uBAAuB,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI;YACjD,kBAAkB,EAAE,KAAK;SAC1B,CAAC,CAAC;QAEH,WAAW;QACX,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAE9C,qBAAqB;QACrB,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE;YACzC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;YAChD,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,UAAU;QACV,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE;YACvC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE;gBACtB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACjB,CAAC;YACD,cAAc,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,kBAAkB,CAAC;YACrE,cAAc,EAAE,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;SAC1D,CAAC,CAAC;QAEH,UAAU;QACV,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAC/B,kBAAkB,EAClB,EAAE,OAAO,EAAE,QAAQ,EAAE,EACrB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,CAAC;gBAC1C,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,GAAsC,CAAC;gBACrD,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;gBACvB,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CACF,CAAC;QAEF,YAAY;QACZ,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzE,UAAU;QACV,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;YAC7D,MAAM,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAC3D,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAChC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,UAAU;QACV,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;YAC/C,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,gBAAgB;QAChB,MAAM,oBAAoB,GAAG,CAAC,MAAiB,EAAE,GAAmB,EAAE,EAAE;YACtE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,KAIzC,CAAC;YAEF,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;gBAChB,IAAI,QAAQ,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;oBAC3C,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;oBAC7C,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,yBAAyB;gBACzB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;gBACjF,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;oBAC1B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;oBACjD,OAAO;gBACT,CAAC;gBAED,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;gBACvE,MAAM,iBAAiB,GAAG,aAAa,CAAC,OAAO,CAAC,SAAS,CAExD,CAAC;gBAEF,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE;oBACrD,SAAS,CAAC,MAAM,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;gBAC1C,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9E,kBAAkB;QAClB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACjB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;YACzD,GAAG,EAAE,IAAI;YACT,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAI,EAAE,kBAAkB,CAAC,CAAC;gBACzD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEpD,MAAM,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrE,CAAC;SACF,CAAC,CAAC;QAEH,oBAAoB;QACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACtC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,KAAK;QACL,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAExE,eAAe;QACf,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAE3B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED,QAAQ,CACN,SAAiB;QAEjB,OAAO;YACL,IAAI,EAAE,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAY,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC;SACvF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,SAAiB,EACjB,YAAmD,EACnD,IAAwB;QAExB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAY,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAoC;QACtD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACxE,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,KAAa;QACjC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACxE,OAAO,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAEO,yBAAyB;QAC/B,IAAI,IAAI,CAAC,mBAAmB;YAAE,OAAO;QACrC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAEhC,MAAM,eAAe,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,2BAA2B,CAAC,CAAC;YAElD,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;gBACrC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,KAAK,CAAC,CAAC;YAEV,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBACrB,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBAClC,YAAY,CAAC,cAAc,CAAC,CAAC;gBAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CACjC,OAA6B;IAE7B,OAAO,IAAI,aAAa,CAAY,OAAO,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"service-server.js","sourceRoot":"","sources":["../src/service-server.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { ServiceDefinition } from "../core/define-service";
2
+ import type { V1RequestHandler } from "../legacy/v1-auto-update-handler";
2
3
  export interface ServiceServerOptions {
3
4
  rootPath: string;
4
5
  port: number;
@@ -10,5 +11,6 @@ export interface ServiceServerOptions {
10
11
  jwtSecret: string;
11
12
  } | false;
12
13
  services: ServiceDefinition[];
14
+ legacyV1Handlers?: V1RequestHandler[];
13
15
  }
14
16
  //# sourceMappingURL=server-options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-options.d.ts","sourceRoot":"","sources":["../../src/types/server-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE;QACJ,QAAQ,EAAE,UAAU,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,KAAK,CAAC;IACV,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B"}
1
+ {"version":3,"file":"server-options.d.ts","sourceRoot":"","sources":["../../src/types/server-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE;QACJ,QAAQ,EAAE,UAAU,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,IAAI,CAAC,EACD;QACE,SAAS,EAAE,MAAM,CAAC;KACnB,GACD,KAAK,CAAC;IACV,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACvC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/service-server",
3
- "version": "14.0.52",
3
+ "version": "14.0.54",
4
4
  "description": "심플리즘 패키지 - 서비스 (server)",
5
5
  "author": "심플리즘",
6
6
  "license": "Apache-2.0",
@@ -30,11 +30,11 @@
30
30
  "semver": "^7.7.4",
31
31
  "utf-8-validate": "^6.0.6",
32
32
  "ws": "^8.20.0",
33
- "@simplysm/core-common": "14.0.52",
34
- "@simplysm/core-node": "14.0.52",
35
- "@simplysm/orm-common": "14.0.52",
36
- "@simplysm/orm-node": "14.0.52",
37
- "@simplysm/service-common": "14.0.52"
33
+ "@simplysm/core-node": "14.0.54",
34
+ "@simplysm/core-common": "14.0.54",
35
+ "@simplysm/orm-common": "14.0.54",
36
+ "@simplysm/service-common": "14.0.54",
37
+ "@simplysm/orm-node": "14.0.54"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/semver": "^7.7.1",
@@ -1,67 +1,153 @@
1
1
  import type { WebSocket } from "ws";
2
+ import type { ServiceContext } from "../core/define-service";
2
3
  import consola from "consola";
3
4
 
4
5
  const logger = consola.withTag("service-server:V1AutoUpdateHandler");
5
6
 
6
- interface IV1Request {
7
+ export interface V1Request {
7
8
  uuid: string;
8
9
  command: string;
9
10
  params: unknown[];
10
11
  clientName?: string;
11
12
  }
12
13
 
13
- interface IV1Response {
14
+ export interface V1Response {
14
15
  name: "response";
15
16
  reqUuid: string;
16
17
  state: "success" | "error";
17
18
  body: unknown;
18
19
  }
19
20
 
21
+ export interface V1AutoUpdateMethods {
22
+ getLastVersion: (platform: string) => Promise<unknown> | unknown;
23
+ }
24
+
25
+ export type V1RequestHandlerResult =
26
+ | {
27
+ handled: true;
28
+ state?: V1Response["state"];
29
+ body: unknown;
30
+ }
31
+ | {
32
+ handled: false;
33
+ };
34
+
35
+ export interface V1RequestHandlerContext {
36
+ request: V1Request;
37
+ serviceContext: ServiceContext;
38
+ }
39
+
40
+ export type V1RequestHandler =
41
+ | ((ctx: V1RequestHandlerContext) => Promise<V1RequestHandlerResult>)
42
+ | ((ctx: V1RequestHandlerContext) => V1RequestHandlerResult);
43
+
44
+ export interface V1ConnectionOptions {
45
+ serviceContext?: ServiceContext;
46
+ serviceContextFactory?: (request: V1Request) => ServiceContext;
47
+ handlers?: V1RequestHandler[];
48
+ autoUpdateMethods?: V1AutoUpdateMethods;
49
+ autoUpdateMethodsFactory?: (ctx: V1RequestHandlerContext) => V1AutoUpdateMethods;
50
+ clientNameSetter?: (clientName: string | undefined) => void;
51
+ }
52
+
20
53
  /**
21
- * V1 레거시 클라이언트 핸들러 (자동 업데이트만 지원).
22
- * 모든 요청은 업그레이드 필요 에러를 반환한다.
54
+ * V1 레거시 클라이언트 핸들러.
55
+ * 사용자 핸들러가 처리하지 않은 요청은 자동 업데이트 fallback 또는 업그레이드 필요 에러로 처리한다.
23
56
  */
24
57
  export function handleV1Connection(
25
58
  socket: WebSocket,
26
- autoUpdateMethods: { getLastVersion: (platform: string) => Promise<any> },
59
+ autoUpdateMethods: V1AutoUpdateMethods,
60
+ clientNameSetter?: (clientName: string | undefined) => void,
61
+ ): void;
62
+ export function handleV1Connection(socket: WebSocket, options: V1ConnectionOptions): void;
63
+ export function handleV1Connection(
64
+ socket: WebSocket,
65
+ optionsOrMethods: V1AutoUpdateMethods | V1ConnectionOptions,
27
66
  clientNameSetter?: (clientName: string | undefined) => void,
28
67
  ) {
68
+ const options =
69
+ "getLastVersion" in optionsOrMethods
70
+ ? { autoUpdateMethods: optionsOrMethods, clientNameSetter }
71
+ : optionsOrMethods;
72
+
29
73
  // 연결 성립 알림
30
74
  socket.send(JSON.stringify({ name: "connected" }));
31
75
 
32
76
  socket.on("message", async (data) => {
33
77
  try {
34
- const msg = JSON.parse(data.toString()) as IV1Request;
78
+ const msg = JSON.parse(data.toString()) as V1Request;
79
+ options.clientNameSetter?.(msg.clientName);
80
+
81
+ const serviceContext = options.serviceContextFactory?.(msg) ?? options.serviceContext;
82
+ const handlerResult = await executeCustomHandler(msg, options.handlers ?? [], serviceContext);
83
+ if (handlerResult.handled) {
84
+ sendResponse(socket, msg.uuid, handlerResult.state ?? "success", handlerResult.body);
85
+ return;
86
+ }
35
87
 
36
- // SdAutoUpdateService.getLastVersion만 허용
37
88
  if (msg.command === "SdAutoUpdateService.getLastVersion") {
38
- // 레거시 컨텍스트 설정
39
- clientNameSetter?.(msg.clientName);
40
-
41
- const result = await autoUpdateMethods.getLastVersion(msg.params[0] as string);
42
-
43
- const response: IV1Response = {
44
- name: "response",
45
- reqUuid: msg.uuid,
46
- state: "success",
47
- body: result,
48
- };
49
- socket.send(JSON.stringify(response));
50
- } else {
51
- // 그 외 모든 요청은 업그레이드 요구
52
- const response: IV1Response = {
53
- name: "response",
54
- reqUuid: msg.uuid,
55
- state: "error",
56
- body: {
57
- message: "앱 업그레이드가 필요합니다.",
58
- code: "UPGRADE_REQUIRED",
59
- },
60
- };
61
- socket.send(JSON.stringify(response));
89
+ const autoUpdateMethods = resolveAutoUpdateMethods(msg, options, serviceContext);
90
+ if (autoUpdateMethods != null) {
91
+ const result = await autoUpdateMethods.getLastVersion(msg.params[0] as string);
92
+
93
+ sendResponse(socket, msg.uuid, "success", result);
94
+ return;
95
+ }
62
96
  }
97
+
98
+ sendResponse(socket, msg.uuid, "error", {
99
+ message: "앱 업그레이드가 필요합니다.",
100
+ code: "UPGRADE_REQUIRED",
101
+ });
63
102
  } catch (err) {
64
103
  logger.warn("V1 메시지 처리 에러", err);
65
104
  }
66
105
  });
67
106
  }
107
+
108
+ async function executeCustomHandler(
109
+ request: V1Request,
110
+ handlers: V1RequestHandler[],
111
+ serviceContext: ServiceContext | undefined,
112
+ ): Promise<V1RequestHandlerResult> {
113
+ if (handlers.length < 1) return { handled: false };
114
+
115
+ if (serviceContext == null) {
116
+ throw new Error("V1 핸들러를 실행하려면 serviceContext가 필요합니다.");
117
+ }
118
+
119
+ for (const handler of handlers) {
120
+ const result = await handler({ request, serviceContext });
121
+ if (result.handled) return result;
122
+ }
123
+
124
+ return { handled: false };
125
+ }
126
+
127
+ function resolveAutoUpdateMethods(
128
+ request: V1Request,
129
+ options: V1ConnectionOptions,
130
+ serviceContext: ServiceContext | undefined,
131
+ ): V1AutoUpdateMethods | undefined {
132
+ if (options.autoUpdateMethodsFactory == null) return options.autoUpdateMethods;
133
+ if (serviceContext == null) {
134
+ throw new Error("V1 자동 업데이트 fallback을 실행하려면 serviceContext가 필요합니다.");
135
+ }
136
+
137
+ return options.autoUpdateMethodsFactory({ request, serviceContext });
138
+ }
139
+
140
+ function sendResponse(
141
+ socket: WebSocket,
142
+ reqUuid: string,
143
+ state: V1Response["state"],
144
+ body: unknown,
145
+ ) {
146
+ const response: V1Response = {
147
+ name: "response",
148
+ reqUuid,
149
+ state,
150
+ body,
151
+ };
152
+ socket.send(JSON.stringify(response));
153
+ }
@@ -18,7 +18,7 @@ import type { WebSocket } from "ws";
18
18
  import { signJwt, verifyJwt } from "./auth/jwt-manager";
19
19
  import type { AuthTokenPayload } from "./auth/auth-token-payload";
20
20
  import type { ServiceServerOptions } from "./types/server-options";
21
- import { handleV1Connection } from "./legacy/v1-auto-update-handler";
21
+ import { handleV1Connection, type V1AutoUpdateMethods } from "./legacy/v1-auto-update-handler";
22
22
  import { createServiceContext } from "./core/define-service";
23
23
  import consola from "consola";
24
24
 
@@ -46,7 +46,8 @@ export class ServiceServer<TAuthInfo = unknown> extends EventEmitter<{
46
46
  constructor(readonly options: ServiceServerOptions) {
47
47
  super();
48
48
 
49
- this._jwtSecret = options.auth != null && options.auth !== false ? options.auth.jwtSecret : undefined;
49
+ this._jwtSecret =
50
+ options.auth != null && options.auth !== false ? options.auth.jwtSecret : undefined;
50
51
 
51
52
  // SSL 설정 (동기)
52
53
  // 참고: Fastify HTTPS는 Buffer 타입이 필요함 (Uint8Array를 직접 사용할 수 없음)
@@ -164,20 +165,23 @@ export class ServiceServer<TAuthInfo = unknown> extends EventEmitter<{
164
165
  }
165
166
  this._wsHandler.addSocket(socket, clientId, clientName, req);
166
167
  } else {
167
- // V1 레거시 지원 (자동 업데이트 전용)
168
+ // V1 레거시 지원
168
169
  const autoUpdateDef = this.options.services.find((s) => s.name === "AutoUpdate");
169
- if (autoUpdateDef == null) {
170
+ const legacyV1Handlers = this.options.legacyV1Handlers ?? [];
171
+ if (autoUpdateDef == null && legacyV1Handlers.length < 1) {
170
172
  socket.close(1008, "AutoUpdate 서비스가 설정되지 않았습니다");
171
173
  return;
172
174
  }
173
175
 
174
- const legacyCtx = createServiceContext(this, undefined, undefined, {});
175
- const autoUpdateMethods = autoUpdateDef.factory(legacyCtx) as {
176
- getLastVersion: (platform: string) => Promise<any>;
177
- };
178
-
179
- handleV1Connection(socket, autoUpdateMethods, (name) => {
180
- legacyCtx.legacy = { clientName: name };
176
+ handleV1Connection(socket, {
177
+ serviceContextFactory: (request) =>
178
+ createServiceContext(this, undefined, undefined, { clientName: request.clientName }),
179
+ handlers: legacyV1Handlers,
180
+ autoUpdateMethodsFactory:
181
+ autoUpdateDef == null
182
+ ? undefined
183
+ : ({ serviceContext }) =>
184
+ createV1AutoUpdateMethods(autoUpdateDef.factory(serviceContext)),
181
185
  });
182
186
  }
183
187
  };
@@ -221,9 +225,7 @@ export class ServiceServer<TAuthInfo = unknown> extends EventEmitter<{
221
225
  this.emit("close");
222
226
  }
223
227
 
224
- getEvent<TEventDef extends ServiceEventDef>(
225
- eventName: string,
226
- ): ServerEventProxy<TEventDef> {
228
+ getEvent<TEventDef extends ServiceEventDef>(eventName: string): ServerEventProxy<TEventDef> {
227
229
  return {
228
230
  emit: (infoSelector, data) => this.emitEvent<TEventDef>(eventName, infoSelector, data),
229
231
  };
@@ -282,3 +284,16 @@ export function createServiceServer<TAuthInfo = unknown>(
282
284
  ): ServiceServer<TAuthInfo> {
283
285
  return new ServiceServer<TAuthInfo>(options);
284
286
  }
287
+
288
+ function createV1AutoUpdateMethods(
289
+ methods: Record<string, ((...args: any[]) => any) | undefined>,
290
+ ): V1AutoUpdateMethods {
291
+ const getLastVersion = methods["getLastVersion"];
292
+ if (getLastVersion == null) {
293
+ throw new Error("AutoUpdate 서비스에 getLastVersion 메서드가 없습니다.");
294
+ }
295
+
296
+ return {
297
+ getLastVersion: (platform) => getLastVersion(platform),
298
+ };
299
+ }
@@ -1,4 +1,5 @@
1
1
  import type { ServiceDefinition } from "../core/define-service";
2
+ import type { V1RequestHandler } from "../legacy/v1-auto-update-handler";
2
3
 
3
4
  export interface ServiceServerOptions {
4
5
  rootPath: string;
@@ -7,8 +8,11 @@ export interface ServiceServerOptions {
7
8
  pfxBytes: Uint8Array;
8
9
  passphrase: string;
9
10
  };
10
- auth?: {
11
- jwtSecret: string;
12
- } | false;
11
+ auth?:
12
+ | {
13
+ jwtSecret: string;
14
+ }
15
+ | false;
13
16
  services: ServiceDefinition[];
17
+ legacyV1Handlers?: V1RequestHandler[];
14
18
  }