@dooboostore/simple-boot-http-server 1.0.26 → 1.0.27

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 (41) hide show
  1. package/README.md +100 -14
  2. package/dist/cjs/SimpleBootHttpServer.js +20 -16
  3. package/dist/cjs/SimpleBootHttpServer.js.map +2 -2
  4. package/dist/cjs/codes/Mimes.js +2 -0
  5. package/dist/cjs/codes/Mimes.js.map +2 -2
  6. package/dist/cjs/decorators/MethodMapping.js +2 -2
  7. package/dist/cjs/decorators/MethodMapping.js.map +2 -2
  8. package/dist/cjs/filters/ResourceFilter.js +0 -1
  9. package/dist/cjs/filters/ResourceFilter.js.map +2 -2
  10. package/dist/cjs/websocket/WebSocketManager.js +68 -40
  11. package/dist/cjs/websocket/WebSocketManager.js.map +2 -2
  12. package/dist/esm/SimpleBootHttpServer.js +20 -16
  13. package/dist/esm/SimpleBootHttpServer.js.map +2 -2
  14. package/dist/esm/codes/Mimes.js +2 -0
  15. package/dist/esm/codes/Mimes.js.map +2 -2
  16. package/dist/esm/decorators/MethodMapping.js +2 -2
  17. package/dist/esm/decorators/MethodMapping.js.map +2 -2
  18. package/dist/esm/filters/ResourceFilter.js +0 -1
  19. package/dist/esm/filters/ResourceFilter.js.map +2 -2
  20. package/dist/esm/websocket/WebSocketManager.js +68 -40
  21. package/dist/esm/websocket/WebSocketManager.js.map +2 -2
  22. package/dist/esm-bundle/dooboostore-simple-boot-http-server.esm.js +279 -137
  23. package/dist/esm-bundle/dooboostore-simple-boot-http-server.esm.js.map +4 -4
  24. package/dist/types/SimpleBootHttpServer.d.ts.map +1 -1
  25. package/dist/types/codes/Mimes.d.ts +2 -0
  26. package/dist/types/codes/Mimes.d.ts.map +1 -1
  27. package/dist/types/decorators/MethodMapping.d.ts +8 -0
  28. package/dist/types/decorators/MethodMapping.d.ts.map +1 -1
  29. package/dist/types/filters/ResourceFilter.d.ts.map +1 -1
  30. package/dist/types/websocket/WebSocketManager.d.ts +3 -1
  31. package/dist/types/websocket/WebSocketManager.d.ts.map +1 -1
  32. package/dist/umd-bundle/dooboostore-simple-boot-http-server.umd.js +279 -137
  33. package/dist/umd-bundle/dooboostore-simple-boot-http-server.umd.js.map +4 -4
  34. package/dist/umd-bundle/websocket-client.umd.js +209 -9
  35. package/dist/umd-bundle/websocket-client.umd.js.map +4 -4
  36. package/package.json +8 -8
  37. package/src/SimpleBootHttpServer.ts +21 -16
  38. package/src/codes/Mimes.ts +2 -0
  39. package/src/decorators/MethodMapping.ts +14 -7
  40. package/src/filters/ResourceFilter.ts +0 -1
  41. package/src/websocket/WebSocketManager.ts +69 -41
@@ -69,7 +69,9 @@ let WebSocketManager = class WebSocketManager2 {
69
69
  constructor(intentManager, routerManager) {
70
70
  this.intentManager = intentManager;
71
71
  this.routerManager = routerManager;
72
- this.clients = /* @__PURE__ */ new Map();
72
+ this.connections = /* @__PURE__ */ new Map();
73
+ this.registrations = /* @__PURE__ */ new Map();
74
+ this.targets = /* @__PURE__ */ new Map();
73
75
  this.eventSubscriptions = /* @__PURE__ */ new Map();
74
76
  this.subject = new import_core2.Subject();
75
77
  }
@@ -77,61 +79,76 @@ let WebSocketManager = class WebSocketManager2 {
77
79
  return this.subject.asObservable();
78
80
  }
79
81
  connect(wsSet) {
80
- this.clients.set(wsSet, []);
82
+ this.connections.set(wsSet, /* @__PURE__ */ new Set());
81
83
  console.log("WebSocket connected:", wsSet.request.url);
82
84
  }
83
85
  close(wsSet) {
84
86
  this.removeAllClientsByWebSocketSet(wsSet);
85
- this.clients.delete(wsSet);
87
+ this.connections.delete(wsSet);
86
88
  console.log("WebSocket disconnected:", wsSet.request.url);
87
89
  }
88
90
  setClientTopic(wsSet, uuid, target, subscribeBody) {
89
- const clientTopics = this.clients.get(wsSet);
90
- if (clientTopics && !clientTopics.find((it) => it.uuid === uuid)) {
91
- clientTopics.push({ uuid, target, subscribeBody });
92
- this.clients.set(wsSet, clientTopics);
93
- } else if (clientTopics) {
94
- throw { message: "Already subscribed topic" };
91
+ const uuidSet = this.connections.get(wsSet);
92
+ if (!uuidSet) {
93
+ return;
94
+ }
95
+ if (this.registrations.has(uuid)) {
96
+ throw new Error("Already subscribed topic");
97
+ }
98
+ this.registrations.set(uuid, { uuid, target, subscribeBody, webSocketSet: wsSet });
99
+ uuidSet.add(uuid);
100
+ if (!this.targets.get(target)) {
101
+ this.targets.set(target, /* @__PURE__ */ new Set());
95
102
  }
103
+ this.targets.get(target)?.add(uuid);
96
104
  }
97
105
  findAllClientsByTarget(target) {
106
+ const uuids = this.targets.get(target);
107
+ if (!uuids) {
108
+ return [];
109
+ }
98
110
  const results = [];
99
- for (const [wsSet, topics] of Array.from(this.clients.entries())) {
100
- const find = topics.find((it) => it.target === target);
101
- if (find) {
102
- results.push({ ...find, webSocketSet: wsSet });
111
+ uuids.forEach((uuid) => {
112
+ const reg = this.registrations.get(uuid);
113
+ if (reg) {
114
+ results.push({ ...reg });
103
115
  }
104
- }
116
+ });
105
117
  return results;
106
118
  }
107
119
  findClientsByTarget(target) {
108
- for (const [wsSet, topics] of Array.from(this.clients.entries())) {
109
- const find = topics.find((it) => it.target === target);
110
- if (find) {
111
- return { ...find, webSocketSet: wsSet };
120
+ const uuids = this.targets.get(target);
121
+ if (!uuids) {
122
+ return void 0;
123
+ }
124
+ for (const uuid of Array.from(uuids)) {
125
+ const reg = this.registrations.get(uuid);
126
+ if (reg) {
127
+ return { ...reg };
112
128
  }
113
129
  }
130
+ return void 0;
114
131
  }
115
132
  removeClientByUUID(uuid) {
116
- for (const [wsSet, topics] of Array.from(this.clients.entries())) {
117
- const findIndex = topics.findIndex((it) => it.uuid === uuid);
118
- if (findIndex >= 0) {
119
- topics.splice(findIndex, 1);
120
- this.clients.set(wsSet, topics);
121
- this.eventSubscriptions.delete(uuid);
122
- return true;
133
+ const reg = this.registrations.get(uuid);
134
+ if (!reg) {
135
+ return false;
136
+ }
137
+ this.registrations.delete(uuid);
138
+ this.connections.get(reg.webSocketSet)?.delete(uuid);
139
+ const targetSet = this.targets.get(reg.target);
140
+ if (targetSet) {
141
+ targetSet.delete(uuid);
142
+ if (targetSet.size <= 0) {
143
+ this.targets.delete(reg.target);
123
144
  }
124
145
  }
125
- return false;
146
+ this.eventSubscriptions.delete(uuid);
147
+ return true;
126
148
  }
127
149
  findClientByUUID(uuid) {
128
- for (const [wsSet, topics] of Array.from(this.clients.entries())) {
129
- const find = topics.find((it) => it.uuid === uuid);
130
- if (find) {
131
- return { ...find, webSocketSet: wsSet };
132
- }
133
- }
134
- return void 0;
150
+ const reg = this.registrations.get(uuid);
151
+ return reg ? { ...reg } : void 0;
135
152
  }
136
153
  sendDataByUUID({ uuid, body }) {
137
154
  const client = this.findClientByUUID(uuid);
@@ -296,7 +313,7 @@ let WebSocketManager = class WebSocketManager2 {
296
313
  }
297
314
  }
298
315
  getOpenClients() {
299
- return Array.from(this.clients.keys()).filter((it) => it.socket.readyState === import_ws.WebSocket.OPEN);
316
+ return Array.from(this.connections.keys()).filter((it) => it.socket.readyState === import_ws.WebSocket.OPEN);
300
317
  }
301
318
  isBinaryPayload(value) {
302
319
  if (!value) {
@@ -624,14 +641,25 @@ let WebSocketManager = class WebSocketManager2 {
624
641
  }
625
642
  }
626
643
  removeAllClientsByWebSocketSet(wsSet) {
627
- const topics = this.clients.get(wsSet);
628
- if (!topics) {
644
+ const uuidSet = this.connections.get(wsSet);
645
+ if (!uuidSet) {
629
646
  return;
630
647
  }
631
- for (const topic of topics) {
632
- this.eventSubscriptions.delete(topic.uuid);
633
- }
634
- this.clients.set(wsSet, []);
648
+ uuidSet.forEach((uuid) => {
649
+ const reg = this.registrations.get(uuid);
650
+ if (reg) {
651
+ this.registrations.delete(uuid);
652
+ const targetSet = this.targets.get(reg.target);
653
+ if (targetSet) {
654
+ targetSet.delete(uuid);
655
+ if (targetSet.size <= 0) {
656
+ this.targets.delete(reg.target);
657
+ }
658
+ }
659
+ }
660
+ this.eventSubscriptions.delete(uuid);
661
+ });
662
+ uuidSet.clear();
635
663
  }
636
664
  };
637
665
  WebSocketManager = __decorate([
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/websocket/WebSocketManager.ts"],
4
- "sourcesContent": ["import { Sim } from '@dooboostore/simple-boot';\nimport { WebSocketEndPoint, WebSocketSet } from '../endpoints/WebSocketEndPoint';\nimport { RawData, WebSocket } from 'ws';\nimport { IntentManager } from '@dooboostore/simple-boot';\nimport { RouterManager } from '@dooboostore/simple-boot';\nimport { Intent } from '@dooboostore/simple-boot';\nimport { RandomUtils } from '@dooboostore/core';\nimport { Subject } from '@dooboostore/core';\nexport type WebSocketRequest = { webSocketSet: WebSocketSet; uuid: string; webSocketManager: WebSocketManager; sendEvent: <R>(event: string, body: any, config?: { responseTimeout?: number }) => Promise<R> };\nexport type TopicType = 'intent' | 'router';\nexport type SubscribeType = 'subscribe';\nexport type UnsubscribeType = 'unsubscribe';\nexport type TopicRequest<T = any> = {\n type?: TopicType;\n uuid: string;\n requestUUID: string;\n body?: T;\n};\nexport type TopicSubscribeRequest<T = any> = {\n type: SubscribeType;\n target: string;\n uuid: string;\n body?: T;\n};\nexport type TopicUnsubscribeRequest = {\n type: UnsubscribeType;\n uuid: string;\n};\n\nexport type TopicResponse<T = any> = {\n state: 'success' | 'error';\n // type: TopicType | SubscribeType | UnsubscribeType;\n target: string;\n uuid: string;\n requestUUID?: string;\n body: T;\n};\n\nexport type TopicServerEventRequest<T = any> = {\n type: 'event';\n uuid: string;\n eventUUID: string;\n event: string;\n body?: T;\n};\nexport type TopicServerEventUnSubscribeRequest = {\n type: 'unsubscribe';\n uuid: string;\n};\nexport type TopicServerEventResponse<T = any> = {\n type: 'event';\n uuid: string;\n eventUUID: string;\n body?: T;\n};\n\nexport const isTopicRequest = <T = any>(obj: any): obj is TopicRequest<T> => {\n return typeof obj === 'object' && obj !== null && 'uuid' in obj && typeof obj.uuid === 'string' && (obj.type === undefined || obj.type === 'intent' || obj.type === 'router') && (obj.body === undefined || true);\n};\n\nexport const isTopicSubscribeRequest = <T = any>(obj: any): obj is TopicSubscribeRequest<T> => {\n return typeof obj === 'object' && obj !== null && 'type' in obj && obj.type === 'subscribe' && 'target' in obj && typeof obj.target === 'string' && 'uuid' in obj && typeof obj.uuid === 'string' && (obj.body === undefined || true);\n};\n\nexport const isTopicUnsubscribeRequest = (obj: any): obj is TopicUnsubscribeRequest => {\n return typeof obj === 'object' && obj !== null && 'type' in obj && obj.type === 'unsubscribe' && 'uuid' in obj && typeof obj.uuid === 'string';\n};\n\nexport const isTopicResponse = <T = any>(obj: any): obj is TopicResponse<T> => {\n return typeof obj === 'object' && obj !== null && 'state' in obj && (obj.state === 'success' || obj.state === 'error') && 'target' in obj && typeof obj.target === 'string' && 'uuid' in obj && typeof obj.uuid === 'string' && 'body' in obj;\n};\n\nexport const isTopicServerEventRequest = <T = any>(obj: any): obj is TopicServerEventRequest<T> => {\n return typeof obj === 'object' && obj !== null && 'type' in obj && obj.type === 'event' && 'uuid' in obj && typeof obj.uuid === 'string' && 'eventUUID' in obj && typeof obj.eventUUID === 'string' && 'event' in obj && typeof obj.event === 'string' && (obj.body === undefined || true);\n};\n\nexport const isTopicServerEventResponse = <T = any>(obj: any): obj is TopicServerEventResponse<T> => {\n return typeof obj === 'object' && obj !== null && 'type' in obj && obj.type === 'event' && 'uuid' in obj && typeof obj.uuid === 'string' && 'eventUUID' in obj && typeof obj.eventUUID === 'string' && (obj.body === undefined || true);\n};\n\nexport const isTopicServerEventUnSubscribeRequest = (obj: any): obj is TopicServerEventUnSubscribeRequest => {\n return typeof obj === 'object' && obj !== null && 'type' in obj && obj.type === 'unsubscribe' && 'uuid' in obj && typeof obj.uuid === 'string';\n};\n\ntype EventResponseCallBack = <T>(data: T, wsSet: WebSocketSet) => void;\n\nexport type RegisteredClient<T = any> = { uuid: string; target: string; subscribeBody?: T };\n\ntype RegisteredClientSet<T = any> = RegisteredClient<T> & { webSocketSet: WebSocketSet };\n\n@Sim\nexport class WebSocketManager implements WebSocketEndPoint {\n private clients: Map<WebSocketSet, RegisteredClient[]> = new Map();\n private eventSubscriptions: Map<string, Map<string, EventResponseCallBack>> = new Map();\n private subject = new Subject<TopicRequest | TopicUnsubscribeRequest | TopicSubscribeRequest | TopicServerEventResponse>();\n constructor(\n private intentManager: IntentManager,\n private routerManager: RouterManager\n ) {}\n\n get observable() {\n return this.subject.asObservable();\n }\n connect(wsSet: WebSocketSet) {\n this.clients.set(wsSet, []);\n console.log('WebSocket connected:', wsSet.request.url);\n }\n close(wsSet: WebSocketSet) {\n this.removeAllClientsByWebSocketSet(wsSet);\n this.clients.delete(wsSet);\n console.log('WebSocket disconnected:', wsSet.request.url);\n }\n\n setClientTopic(wsSet: WebSocketSet, uuid: string, target: string, subscribeBody?: any) {\n const clientTopics = this.clients.get(wsSet);\n if (clientTopics && !clientTopics.find(it => it.uuid === uuid)) {\n clientTopics.push({ uuid, target, subscribeBody });\n this.clients.set(wsSet, clientTopics);\n } else if (clientTopics) {\n throw { message: 'Already subscribed topic' };\n }\n }\n\n findAllClientsByTarget(target: string): RegisteredClientSet[] {\n const results: RegisteredClientSet[] = [];\n for (const [wsSet, topics] of Array.from(this.clients.entries())) {\n const find = topics.find(it => it.target === target);\n if (find) {\n results.push({ ...find, webSocketSet: wsSet });\n }\n }\n return results;\n }\n\n findClientsByTarget(target: string): RegisteredClientSet {\n for (const [wsSet, topics] of Array.from(this.clients.entries())) {\n const find = topics.find(it => it.target === target);\n if (find) {\n return { ...find, webSocketSet: wsSet };\n }\n }\n }\n\n removeClientByUUID(uuid: string) {\n for (const [wsSet, topics] of Array.from(this.clients.entries())) {\n const findIndex = topics.findIndex(it => it.uuid === uuid);\n if (findIndex >= 0) {\n topics.splice(findIndex, 1);\n this.clients.set(wsSet, topics);\n // 이벤트 구독도 함께 정리\n this.eventSubscriptions.delete(uuid);\n return true;\n }\n }\n return false;\n }\n\n findClientByUUID(uuid: string): RegisteredClientSet | undefined {\n for (const [wsSet, topics] of Array.from(this.clients.entries())) {\n const find = topics.find(it => it.uuid === uuid);\n if (find) {\n return { ...find, webSocketSet: wsSet };\n }\n }\n return undefined;\n }\n\n sendDataByUUID({ uuid, body }: { uuid: string; body?: any }) {\n const client = this.findClientByUUID(uuid);\n if (client) {\n const data: TopicResponse = {\n state: 'success',\n target: client.target,\n uuid: uuid,\n body: body\n };\n this.sendTopic(client.webSocketSet, data);\n return true;\n }\n return false;\n }\n\n sendUnSubscribeByUUID({ uuid }: { uuid: string }) {\n const client = this.findClientByUUID(uuid);\n if (client) {\n const data: TopicServerEventUnSubscribeRequest = {\n type: 'unsubscribe',\n uuid: uuid\n };\n this.removeClientByUUID(uuid);\n this.sendTopic(client.webSocketSet, data);\n return true;\n }\n return false;\n }\n\n sendAllDataByTarget({ target, body }: { target: string; body?: any }) {\n const clients = this.findAllClientsByTarget(target);\n clients.forEach(it => {\n const data: TopicResponse = {\n state: 'success',\n target: it.target,\n uuid: it.uuid,\n body: body\n };\n this.sendTopic(it.webSocketSet, data);\n });\n return clients.length;\n }\n sendAllUnSubscribeByTarget({ target }: { target: string }) {\n const clients = this.findAllClientsByTarget(target);\n clients.forEach(it => {\n const data: TopicUnsubscribeRequest = {\n type: 'unsubscribe',\n uuid: it.uuid\n };\n this.removeClientByUUID(it.uuid);\n this.sendTopic(it.webSocketSet, data);\n });\n return clients.length;\n }\n\n sendEventDataByUUID({ uuid, event, body }: { uuid: string; event: string; body?: any }, config?: { responseCallBack?: EventResponseCallBack }): string | undefined {\n const client = this.findClientByUUID(uuid);\n if (client) {\n const eventUUID = RandomUtils.uuid4();\n const eventTopic: TopicServerEventRequest = {\n type: 'event',\n uuid: uuid,\n // target: client.target,\n eventUUID: eventUUID,\n event: event,\n body: body\n };\n\n if (config.responseCallBack) {\n this.addEventSubscribes(uuid, eventUUID, config.responseCallBack);\n }\n this.sendTopic(client.webSocketSet, eventTopic);\n return eventUUID;\n }\n return undefined;\n }\n\n sendEventDataByUUIDPromise<R>({ uuid, event, body }: { uuid: string; event: string; body?: any }, config?: { responseTimeout?: number }): Promise<R> {\n return new Promise((resolve, reject) => {\n let timeoutId: NodeJS.Timeout | undefined;\n let eventUUIDForCleanup: string | undefined;\n\n if (config?.responseTimeout !== undefined) {\n timeoutId = setTimeout(() => {\n if (eventUUIDForCleanup) {\n const subscriptions = this.eventSubscriptions.get(uuid);\n if (subscriptions) {\n subscriptions.delete(eventUUIDForCleanup);\n if (subscriptions.size <= 0) {\n this.eventSubscriptions.delete(uuid);\n }\n }\n }\n reject(new Error('WebSocket event response timeout for UUID: ' + uuid));\n }, config.responseTimeout);\n }\n\n const eventUUID = this.sendEventDataByUUID(\n { uuid, event, body },\n {\n responseCallBack: (data: any) => {\n if (timeoutId) clearTimeout(timeoutId);\n resolve(data);\n }\n }\n );\n eventUUIDForCleanup = eventUUID;\n\n if (!eventUUID) {\n if (timeoutId) clearTimeout(timeoutId);\n reject(new Error('WebSocket client not found for UUID: ' + uuid));\n }\n });\n }\n\n async sendEventDataByUUIDPromiseSettled<R>({ uuid, event, body }: { uuid: string; event: string; body?: any }, config?: { responseTimeout?: number }): Promise<PromiseSettledResult<R>> {\n try {\n const value = await this.sendEventDataByUUIDPromise<R>({ uuid, event, body }, config);\n return { status: 'fulfilled', value };\n } catch (reason) {\n return { status: 'rejected', reason };\n }\n }\n\n sendAllEventDataByTargetPromise<R>({ target, event, body }: { target: string; event: string; body?: any }, config?: { responseTimeout?: number }): Promise<{ body: R; uuid: string }[]> {\n const clients = this.findAllClientsByTarget(target);\n const promises: Promise<{ body: R; uuid: string }>[] = clients.map(it => {\n return this.sendEventDataByUUIDPromise<R>({ uuid: it.uuid, event, body }, config).then(result => ({\n body: result,\n uuid: it.uuid\n }));\n });\n return Promise.all(promises);\n }\n sendAllEventDataByTargetPromiseSettled<R>({ target, event, body }: { target: string; event: string; body?: any }, config?: { responseTimeout?: number }): Promise<PromiseSettledResult<{ body: R; uuid: string }>[]> {\n const clients = this.findAllClientsByTarget(target);\n const promises: Promise<{ body: R; uuid: string }>[] = clients.map(it => {\n return this.sendEventDataByUUIDPromise<R>({ uuid: it.uuid, event, body }, config).then(result => ({\n body: result,\n uuid: it.uuid\n }));\n });\n return Promise.allSettled(promises);\n }\n\n sendAllEventDataByTarget({ target, event, body }: { target: string; event: string; body?: any }, config?: { responseCallBack?: EventResponseCallBack }) {\n const clients = this.findAllClientsByTarget(target);\n clients.forEach(it => {\n const eventUUID = RandomUtils.uuid4();\n const eventTopic: TopicServerEventRequest = {\n type: 'event',\n uuid: it.uuid,\n // target: it.target,\n eventUUID: eventUUID,\n event: event,\n body: body\n };\n if (config?.responseCallBack) {\n this.addEventSubscribes(it.uuid, eventUUID, config?.responseCallBack);\n }\n this.sendTopic(it.webSocketSet, eventTopic);\n });\n return clients.length;\n }\n\n private addEventSubscribes(uuid: string, eventUUID: string, eventResponseCallBack: EventResponseCallBack) {\n let eventMap = this.eventSubscriptions.get(uuid);\n if (eventMap) {\n eventMap.set(eventUUID, eventResponseCallBack);\n } else {\n eventMap = new Map();\n eventMap.set(eventUUID, eventResponseCallBack);\n this.eventSubscriptions.set(uuid, eventMap);\n }\n }\n\n getOpenClients() {\n return Array.from(this.clients.keys()).filter(it => it.socket.readyState === WebSocket.OPEN);\n }\n\n private isBinaryPayload(value: any) {\n if (!value) {\n return false;\n }\n if (Buffer.isBuffer(value)) {\n return true;\n }\n if (typeof Uint8Array !== 'undefined' && value instanceof Uint8Array) {\n return true;\n }\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return true;\n }\n if (value && typeof value === 'object' && 'buffer' in value) {\n const bufferValue = (value as any).buffer;\n return Buffer.isBuffer(bufferValue) || bufferValue instanceof Uint8Array || bufferValue instanceof ArrayBuffer;\n }\n return false;\n }\n\n private hasBinaryPayload(value: any): boolean {\n if (this.isBinaryPayload(value)) {\n return true;\n }\n if (Array.isArray(value)) {\n return value.some(item => this.hasBinaryPayload(item));\n }\n if (value && typeof value === 'object') {\n return Object.keys(value).some(key => this.hasBinaryPayload(value[key]));\n }\n return false;\n }\n\n private buildBinaryTopic(topic: any): Buffer {\n const fileRefs = new Map<any, string>();\n const fileEntries: Array<{ id: string; name: string; mime: string; buffer: Buffer }> = [];\n let fileIndex = 0;\n\n const registerFile = (value: any) => {\n const existing = fileRefs.get(value);\n if (existing) {\n return existing;\n }\n const id = `f${++fileIndex}`;\n fileRefs.set(value, id);\n\n let name = 'file';\n let mime = 'application/octet-stream';\n let buffer: Buffer = Buffer.alloc(0);\n\n if (Buffer.isBuffer(value)) {\n buffer = value;\n } else if (value instanceof Uint8Array) {\n buffer = Buffer.from(value);\n } else if (value instanceof ArrayBuffer) {\n buffer = Buffer.from(value);\n } else if (value && typeof value === 'object' && 'buffer' in value) {\n const fileLike = value as any;\n if (typeof fileLike.name === 'string') {\n name = fileLike.name || name;\n }\n if (typeof fileLike.mime === 'string') {\n mime = fileLike.mime || mime;\n }\n const innerBuffer = fileLike.buffer;\n if (Buffer.isBuffer(innerBuffer)) {\n buffer = innerBuffer;\n } else if (innerBuffer instanceof Uint8Array) {\n buffer = Buffer.from(innerBuffer);\n } else if (innerBuffer instanceof ArrayBuffer) {\n buffer = Buffer.from(innerBuffer);\n }\n }\n\n fileEntries.push({ id, name, mime, buffer });\n return id;\n };\n\n const replaceFiles = (value: any): any => {\n if (this.isBinaryPayload(value)) {\n const id = registerFile(value);\n return { $file: id };\n }\n if (Array.isArray(value)) {\n return value.map(item => replaceFiles(item));\n }\n if (value && typeof value === 'object') {\n const result: Record<string, any> = {};\n Object.keys(value).forEach(key => {\n result[key] = replaceFiles(value[key]);\n });\n return result;\n }\n return value;\n };\n\n const payload = replaceFiles(topic.body);\n let offset = 0;\n const files = fileEntries.map(entry => {\n const size = entry.buffer.length;\n const meta = {\n id: entry.id,\n name: entry.name,\n mime: entry.mime,\n size,\n offset\n };\n offset += size;\n return meta;\n });\n\n const meta = { ...topic, body: payload, files };\n const json = Buffer.from(JSON.stringify(meta), 'utf8');\n const header = Buffer.alloc(4);\n header.writeUInt32LE(json.length, 0);\n\n const buffers = [header, json, ...fileEntries.map(entry => entry.buffer)];\n return Buffer.concat(buffers);\n }\n\n private sendTopic(wsSet: WebSocketSet, topic: any) {\n if (this.hasBinaryPayload(topic?.body)) {\n const buffer = this.buildBinaryTopic(topic);\n wsSet.socket.send(buffer, { binary: true });\n return;\n }\n wsSet.socket.send(JSON.stringify(topic), { binary: false });\n }\n\n private parseBinaryTopic(data: RawData): TopicRequest | undefined {\n let buffer: Buffer;\n if (Buffer.isBuffer(data)) {\n buffer = data;\n } else if (data instanceof ArrayBuffer) {\n buffer = Buffer.from(data);\n } else if (Array.isArray(data)) {\n buffer = Buffer.concat(data.map(item => (Buffer.isBuffer(item) ? item : Buffer.from(item as any))));\n } else {\n return undefined;\n }\n\n if (buffer.length < 4) {\n return undefined;\n }\n\n const jsonLength = buffer.readUInt32LE(0);\n const jsonStart = 4;\n const jsonEnd = jsonStart + jsonLength;\n if (buffer.length < jsonEnd) {\n return undefined;\n }\n\n const jsonText = buffer.slice(jsonStart, jsonEnd).toString('utf8');\n let meta: any;\n try {\n meta = JSON.parse(jsonText);\n } catch (error) {\n console.warn('Invalid WebSocket binary payload:', error);\n return undefined;\n }\n\n const filesMeta = Array.isArray(meta.files) ? meta.files : [];\n const fileMap = new Map<string, { name: string; mime: string; size: number; buffer: Buffer }>();\n filesMeta.forEach((file: any) => {\n if (!file || typeof file.id !== 'string' || typeof file.size !== 'number' || typeof file.offset !== 'number') {\n return;\n }\n const start = jsonEnd + file.offset;\n const end = start + file.size;\n if (start < jsonEnd || end > buffer.length) {\n return;\n }\n const slice = buffer.slice(start, end);\n fileMap.set(file.id, {\n name: file.name || 'file',\n mime: file.mime || 'application/octet-stream',\n size: file.size,\n buffer: slice\n });\n });\n\n const replaceFileRefs = (value: any): any => {\n if (value && typeof value === 'object' && '$file' in value && typeof value.$file === 'string') {\n const file = fileMap.get(value.$file);\n if (file) {\n return file;\n }\n }\n if (Array.isArray(value)) {\n return value.map(item => replaceFileRefs(item));\n }\n if (value && typeof value === 'object') {\n const result: Record<string, any> = {};\n Object.keys(value).forEach(key => {\n result[key] = replaceFileRefs(value[key]);\n });\n return result;\n }\n return value;\n };\n\n const body = replaceFileRefs(meta.body);\n return {\n type: meta.type,\n uuid: meta.uuid,\n requestUUID: meta.requestUUID,\n body\n };\n }\n\n message(wsSet: WebSocketSet, data: { data: RawData; isBinary: boolean }): void {\n let topic: TopicRequest | TopicUnsubscribeRequest | TopicSubscribeRequest | TopicServerEventResponse | undefined;\n if (data.isBinary) {\n topic = this.parseBinaryTopic(data.data);\n if (!topic) {\n return;\n }\n } else {\n try {\n topic = JSON.parse(data.data.toString());\n } catch (error) {\n console.warn('Invalid WebSocket payload:', error);\n return;\n }\n }\n\n this.subject.next(topic);\n // console.log('WebSocket message received:', topic);\n const uuid = topic.uuid;\n // const client = this.findClientByUUID(uuid);\n // if (!client) return;\n\n // 구독\n if (topic.type === 'subscribe') {\n try {\n this.setClientTopic(wsSet, topic.uuid, topic.target, topic.body);\n } catch (err: any) {\n const responseTopic: TopicResponse = {\n state: 'error',\n // type: topic.type,\n target: topic.target,\n uuid: topic.uuid,\n body: { message: err.message || 'Error subscribing topic' }\n };\n wsSet.socket.send(JSON.stringify(responseTopic), { binary: false });\n }\n return;\n // 구독 해제\n } else if (topic.type === 'unsubscribe') {\n this.removeClientByUUID(uuid);\n return;\n } else if (topic.type === 'event') {\n const subscriptions = this.eventSubscriptions.get(topic.uuid);\n if (subscriptions) {\n const eventCallback = subscriptions.get(topic.eventUUID);\n if (eventCallback) {\n eventCallback(topic.body, wsSet);\n subscriptions.delete(topic.eventUUID);\n }\n if (subscriptions.size <= 0) {\n this.eventSubscriptions.delete(topic.uuid);\n }\n }\n return;\n } else {\n // 실행!!\n // 등록 체크\n const clientTopics = this.findClientByUUID(uuid);\n if (!clientTopics) {\n const responseTopic: TopicResponse = {\n state: 'error',\n uuid: topic.uuid,\n requestUUID: topic.requestUUID,\n target: '',\n body: { message: 'WebSocket client not registered' }\n };\n this.sendTopic(wsSet, responseTopic);\n return;\n }\n\n const intent = new Intent(clientTopics.target);\n const webSocketRequest: WebSocketRequest = {\n webSocketSet: wsSet,\n uuid: clientTopics.uuid,\n webSocketManager: this,\n sendEvent: <R>(event: string, body: any, config?: { responseTimeout?: number }) => this.sendEventDataByUUIDPromise<R>({ uuid: clientTopics.uuid, event, body }, config)\n };\n intent.data = [topic.body, webSocketRequest];\n if (topic.type === 'intent') {\n this.intentManager.publishMeta(intent).then(async it => {\n if (it.target.length <= 0) {\n const responseTopic: TopicResponse = {\n state: 'error',\n // type: topic.type,\n target: clientTopics.target,\n uuid: topic.uuid,\n requestUUID: topic.requestUUID,\n body: { message: 'Not found intent target' }\n };\n this.sendTopic(wsSet, responseTopic);\n } else {\n const rdata = it.return[0];\n const wdata = rdata instanceof Promise ? await rdata : rdata;\n const responseTopic: TopicResponse = {\n state: 'success',\n uuid: topic.uuid,\n requestUUID: topic.requestUUID,\n target: clientTopics.target,\n body: wdata\n };\n this.sendTopic(wsSet, responseTopic);\n }\n });\n } else if (topic.type === 'router') {\n this.routerManager.routing(intent).then(async routerModule => {\n const moduleInstance = routerModule.getModuleInstance?.();\n if (routerModule && moduleInstance) {\n if (routerModule.propertyKeys) {\n for (const it of routerModule.propertyKeys) {\n let r = moduleInstance[it]?.(topic.body, webSocketRequest);\n r = r instanceof Promise ? await r : r;\n const responseTopic: TopicResponse = {\n state: 'success',\n requestUUID: topic.requestUUID,\n uuid: topic.uuid,\n target: clientTopics.target,\n body: r\n };\n this.sendTopic(wsSet, responseTopic);\n }\n } else {\n const responseTopic: TopicResponse = {\n state: 'error',\n uuid: topic.uuid,\n requestUUID: topic.requestUUID,\n target: clientTopics.target,\n body: { message: 'Not found router target' }\n };\n this.sendTopic(wsSet, responseTopic);\n }\n } else {\n const responseTopic: TopicResponse = {\n state: 'error',\n uuid: topic.uuid,\n requestUUID: topic.requestUUID,\n target: clientTopics.target,\n body: { message: 'Not found router target' }\n };\n this.sendTopic(wsSet, responseTopic);\n }\n });\n }\n }\n }\n\n private removeAllClientsByWebSocketSet(wsSet: WebSocketSet) {\n const topics = this.clients.get(wsSet);\n if (!topics) {\n return;\n }\n for (const topic of topics) {\n this.eventSubscriptions.delete(topic.uuid);\n }\n this.clients.set(wsSet, []);\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Sim } from '@dooboostore/simple-boot';\nimport { WebSocketEndPoint, WebSocketSet } from '../endpoints/WebSocketEndPoint';\nimport { RawData, WebSocket } from 'ws';\nimport { IntentManager } from '@dooboostore/simple-boot';\nimport { RouterManager } from '@dooboostore/simple-boot';\nimport { Intent } from '@dooboostore/simple-boot';\nimport { RandomUtils } from '@dooboostore/core';\nimport { Subject } from '@dooboostore/core';\nexport type WebSocketRequest = { webSocketSet: WebSocketSet; uuid: string; webSocketManager: WebSocketManager; sendEvent: <R>(event: string, body: any, config?: { responseTimeout?: number }) => Promise<R> };\nexport type TopicType = 'intent' | 'router';\nexport type SubscribeType = 'subscribe';\nexport type UnsubscribeType = 'unsubscribe';\nexport type TopicRequest<T = any> = {\n type?: TopicType;\n uuid: string;\n requestUUID: string;\n body?: T;\n};\nexport type TopicSubscribeRequest<T = any> = {\n type: SubscribeType;\n target: string;\n uuid: string;\n body?: T;\n};\nexport type TopicUnsubscribeRequest = {\n type: UnsubscribeType;\n uuid: string;\n};\n\nexport type TopicResponse<T = any> = {\n state: 'success' | 'error';\n // type: TopicType | SubscribeType | UnsubscribeType;\n target: string;\n uuid: string;\n requestUUID?: string;\n body: T;\n};\n\nexport type TopicServerEventRequest<T = any> = {\n type: 'event';\n uuid: string;\n eventUUID: string;\n event: string;\n body?: T;\n};\nexport type TopicServerEventUnSubscribeRequest = {\n type: 'unsubscribe';\n uuid: string;\n};\nexport type TopicServerEventResponse<T = any> = {\n type: 'event';\n uuid: string;\n eventUUID: string;\n body?: T;\n};\n\nexport const isTopicRequest = <T = any>(obj: any): obj is TopicRequest<T> => {\n return typeof obj === 'object' && obj !== null && 'uuid' in obj && typeof obj.uuid === 'string' && (obj.type === undefined || obj.type === 'intent' || obj.type === 'router') && (obj.body === undefined || true);\n};\n\nexport const isTopicSubscribeRequest = <T = any>(obj: any): obj is TopicSubscribeRequest<T> => {\n return typeof obj === 'object' && obj !== null && 'type' in obj && obj.type === 'subscribe' && 'target' in obj && typeof obj.target === 'string' && 'uuid' in obj && typeof obj.uuid === 'string' && (obj.body === undefined || true);\n};\n\nexport const isTopicUnsubscribeRequest = (obj: any): obj is TopicUnsubscribeRequest => {\n return typeof obj === 'object' && obj !== null && 'type' in obj && obj.type === 'unsubscribe' && 'uuid' in obj && typeof obj.uuid === 'string';\n};\n\nexport const isTopicResponse = <T = any>(obj: any): obj is TopicResponse<T> => {\n return typeof obj === 'object' && obj !== null && 'state' in obj && (obj.state === 'success' || obj.state === 'error') && 'target' in obj && typeof obj.target === 'string' && 'uuid' in obj && typeof obj.uuid === 'string' && 'body' in obj;\n};\n\nexport const isTopicServerEventRequest = <T = any>(obj: any): obj is TopicServerEventRequest<T> => {\n return typeof obj === 'object' && obj !== null && 'type' in obj && obj.type === 'event' && 'uuid' in obj && typeof obj.uuid === 'string' && 'eventUUID' in obj && typeof obj.eventUUID === 'string' && 'event' in obj && typeof obj.event === 'string' && (obj.body === undefined || true);\n};\n\nexport const isTopicServerEventResponse = <T = any>(obj: any): obj is TopicServerEventResponse<T> => {\n return typeof obj === 'object' && obj !== null && 'type' in obj && obj.type === 'event' && 'uuid' in obj && typeof obj.uuid === 'string' && 'eventUUID' in obj && typeof obj.eventUUID === 'string' && (obj.body === undefined || true);\n};\n\nexport const isTopicServerEventUnSubscribeRequest = (obj: any): obj is TopicServerEventUnSubscribeRequest => {\n return typeof obj === 'object' && obj !== null && 'type' in obj && obj.type === 'unsubscribe' && 'uuid' in obj && typeof obj.uuid === 'string';\n};\n\ntype EventResponseCallBack = <T>(data: T, wsSet: WebSocketSet) => void;\n\nexport type RegisteredClient<T = any> = { uuid: string; target: string; subscribeBody?: T };\n\ntype RegisteredClientSet<T = any> = RegisteredClient<T> & { webSocketSet: WebSocketSet };\n\n@Sim\nexport class WebSocketManager implements WebSocketEndPoint {\n private connections: Map<WebSocketSet, Set<string>> = new Map();\n private registrations: Map<string, RegisteredClientSet> = new Map();\n private targets: Map<string, Set<string>> = new Map();\n private eventSubscriptions: Map<string, Map<string, EventResponseCallBack>> = new Map();\n private subject = new Subject<TopicRequest | TopicUnsubscribeRequest | TopicSubscribeRequest | TopicServerEventResponse>();\n constructor(\n private intentManager: IntentManager,\n private routerManager: RouterManager\n ) {}\n\n get observable() {\n return this.subject.asObservable();\n }\n connect(wsSet: WebSocketSet) {\n this.connections.set(wsSet, new Set<string>());\n console.log('WebSocket connected:', wsSet.request.url);\n }\n close(wsSet: WebSocketSet) {\n this.removeAllClientsByWebSocketSet(wsSet);\n this.connections.delete(wsSet);\n console.log('WebSocket disconnected:', wsSet.request.url);\n }\n\n setClientTopic(wsSet: WebSocketSet, uuid: string, target: string, subscribeBody?: any) {\n const uuidSet = this.connections.get(wsSet);\n if (!uuidSet) {\n return;\n }\n if (this.registrations.has(uuid)) {\n throw new Error('Already subscribed topic');\n }\n this.registrations.set(uuid, { uuid, target, subscribeBody, webSocketSet: wsSet });\n uuidSet.add(uuid);\n if (!this.targets.get(target)) {\n this.targets.set(target, new Set<string>());\n }\n this.targets.get(target)?.add(uuid);\n }\n\n findAllClientsByTarget(target: string): RegisteredClientSet[] {\n const uuids = this.targets.get(target);\n if (!uuids) {\n return [];\n }\n const results: RegisteredClientSet[] = [];\n uuids.forEach(uuid => {\n const reg = this.registrations.get(uuid);\n if (reg) {\n results.push({ ...reg });\n }\n });\n return results;\n }\n\n findClientsByTarget(target: string): RegisteredClientSet {\n const uuids = this.targets.get(target);\n if (!uuids) {\n return undefined as any;\n }\n for (const uuid of Array.from(uuids)) {\n const reg = this.registrations.get(uuid);\n if (reg) {\n return { ...reg };\n }\n }\n return undefined as any;\n }\n\n removeClientByUUID(uuid: string) {\n const reg = this.registrations.get(uuid);\n if (!reg) {\n return false;\n }\n this.registrations.delete(uuid);\n this.connections.get(reg.webSocketSet)?.delete(uuid);\n const targetSet = this.targets.get(reg.target);\n if (targetSet) {\n targetSet.delete(uuid);\n if (targetSet.size <= 0) {\n this.targets.delete(reg.target);\n }\n }\n // 이벤트 구독도 함께 정리\n this.eventSubscriptions.delete(uuid);\n return true;\n }\n\n findClientByUUID(uuid: string): RegisteredClientSet | undefined {\n const reg = this.registrations.get(uuid);\n return reg ? { ...reg } : undefined;\n }\n\n sendDataByUUID({ uuid, body }: { uuid: string; body?: any }) {\n const client = this.findClientByUUID(uuid);\n if (client) {\n const data: TopicResponse = {\n state: 'success',\n target: client.target,\n uuid: uuid,\n body: body\n };\n this.sendTopic(client.webSocketSet, data);\n return true;\n }\n return false;\n }\n\n sendUnSubscribeByUUID({ uuid }: { uuid: string }) {\n const client = this.findClientByUUID(uuid);\n if (client) {\n const data: TopicServerEventUnSubscribeRequest = {\n type: 'unsubscribe',\n uuid: uuid\n };\n this.removeClientByUUID(uuid);\n this.sendTopic(client.webSocketSet, data);\n return true;\n }\n return false;\n }\n\n sendAllDataByTarget({ target, body }: { target: string; body?: any }) {\n const clients = this.findAllClientsByTarget(target);\n clients.forEach(it => {\n const data: TopicResponse = {\n state: 'success',\n target: it.target,\n uuid: it.uuid,\n body: body\n };\n this.sendTopic(it.webSocketSet, data);\n });\n return clients.length;\n }\n sendAllUnSubscribeByTarget({ target }: { target: string }) {\n const clients = this.findAllClientsByTarget(target);\n clients.forEach(it => {\n const data: TopicUnsubscribeRequest = {\n type: 'unsubscribe',\n uuid: it.uuid\n };\n this.removeClientByUUID(it.uuid);\n this.sendTopic(it.webSocketSet, data);\n });\n return clients.length;\n }\n\n sendEventDataByUUID({ uuid, event, body }: { uuid: string; event: string; body?: any }, config?: { responseCallBack?: EventResponseCallBack }): string | undefined {\n const client = this.findClientByUUID(uuid);\n if (client) {\n const eventUUID = RandomUtils.uuid4();\n const eventTopic: TopicServerEventRequest = {\n type: 'event',\n uuid: uuid,\n // target: client.target,\n eventUUID: eventUUID,\n event: event,\n body: body\n };\n\n if (config.responseCallBack) {\n this.addEventSubscribes(uuid, eventUUID, config.responseCallBack);\n }\n this.sendTopic(client.webSocketSet, eventTopic);\n return eventUUID;\n }\n return undefined;\n }\n\n sendEventDataByUUIDPromise<R>({ uuid, event, body }: { uuid: string; event: string; body?: any }, config?: { responseTimeout?: number }): Promise<R> {\n return new Promise((resolve, reject) => {\n let timeoutId: NodeJS.Timeout | undefined;\n let eventUUIDForCleanup: string | undefined;\n\n if (config?.responseTimeout !== undefined) {\n timeoutId = setTimeout(() => {\n if (eventUUIDForCleanup) {\n const subscriptions = this.eventSubscriptions.get(uuid);\n if (subscriptions) {\n subscriptions.delete(eventUUIDForCleanup);\n if (subscriptions.size <= 0) {\n this.eventSubscriptions.delete(uuid);\n }\n }\n }\n reject(new Error('WebSocket event response timeout for UUID: ' + uuid));\n }, config.responseTimeout);\n }\n\n const eventUUID = this.sendEventDataByUUID(\n { uuid, event, body },\n {\n responseCallBack: (data: any) => {\n if (timeoutId) clearTimeout(timeoutId);\n resolve(data);\n }\n }\n );\n eventUUIDForCleanup = eventUUID;\n\n if (!eventUUID) {\n if (timeoutId) clearTimeout(timeoutId);\n reject(new Error('WebSocket client not found for UUID: ' + uuid));\n }\n });\n }\n\n async sendEventDataByUUIDPromiseSettled<R>({ uuid, event, body }: { uuid: string; event: string; body?: any }, config?: { responseTimeout?: number }): Promise<PromiseSettledResult<R>> {\n try {\n const value = await this.sendEventDataByUUIDPromise<R>({ uuid, event, body }, config);\n return { status: 'fulfilled', value };\n } catch (reason) {\n return { status: 'rejected', reason };\n }\n }\n\n sendAllEventDataByTargetPromise<R>({ target, event, body }: { target: string; event: string; body?: any }, config?: { responseTimeout?: number }): Promise<{ body: R; uuid: string }[]> {\n const clients = this.findAllClientsByTarget(target);\n const promises: Promise<{ body: R; uuid: string }>[] = clients.map(it => {\n return this.sendEventDataByUUIDPromise<R>({ uuid: it.uuid, event, body }, config).then(result => ({\n body: result,\n uuid: it.uuid\n }));\n });\n return Promise.all(promises);\n }\n sendAllEventDataByTargetPromiseSettled<R>({ target, event, body }: { target: string; event: string; body?: any }, config?: { responseTimeout?: number }): Promise<PromiseSettledResult<{ body: R; uuid: string }>[]> {\n const clients = this.findAllClientsByTarget(target);\n const promises: Promise<{ body: R; uuid: string }>[] = clients.map(it => {\n return this.sendEventDataByUUIDPromise<R>({ uuid: it.uuid, event, body }, config).then(result => ({\n body: result,\n uuid: it.uuid\n }));\n });\n return Promise.allSettled(promises);\n }\n\n sendAllEventDataByTarget({ target, event, body }: { target: string; event: string; body?: any }, config?: { responseCallBack?: EventResponseCallBack }) {\n const clients = this.findAllClientsByTarget(target);\n clients.forEach(it => {\n const eventUUID = RandomUtils.uuid4();\n const eventTopic: TopicServerEventRequest = {\n type: 'event',\n uuid: it.uuid,\n // target: it.target,\n eventUUID: eventUUID,\n event: event,\n body: body\n };\n if (config?.responseCallBack) {\n this.addEventSubscribes(it.uuid, eventUUID, config?.responseCallBack);\n }\n this.sendTopic(it.webSocketSet, eventTopic);\n });\n return clients.length;\n }\n\n private addEventSubscribes(uuid: string, eventUUID: string, eventResponseCallBack: EventResponseCallBack) {\n let eventMap = this.eventSubscriptions.get(uuid);\n if (eventMap) {\n eventMap.set(eventUUID, eventResponseCallBack);\n } else {\n eventMap = new Map();\n eventMap.set(eventUUID, eventResponseCallBack);\n this.eventSubscriptions.set(uuid, eventMap);\n }\n }\n\n getOpenClients() {\n return Array.from(this.connections.keys()).filter(it => it.socket.readyState === WebSocket.OPEN);\n }\n\n private isBinaryPayload(value: any) {\n if (!value) {\n return false;\n }\n if (Buffer.isBuffer(value)) {\n return true;\n }\n if (typeof Uint8Array !== 'undefined' && value instanceof Uint8Array) {\n return true;\n }\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return true;\n }\n if (value && typeof value === 'object' && 'buffer' in value) {\n const bufferValue = (value as any).buffer;\n return Buffer.isBuffer(bufferValue) || bufferValue instanceof Uint8Array || bufferValue instanceof ArrayBuffer;\n }\n return false;\n }\n\n private hasBinaryPayload(value: any): boolean {\n if (this.isBinaryPayload(value)) {\n return true;\n }\n if (Array.isArray(value)) {\n return value.some(item => this.hasBinaryPayload(item));\n }\n if (value && typeof value === 'object') {\n return Object.keys(value).some(key => this.hasBinaryPayload(value[key]));\n }\n return false;\n }\n\n private buildBinaryTopic(topic: any): Buffer {\n const fileRefs = new Map<any, string>();\n const fileEntries: Array<{ id: string; name: string; mime: string; buffer: Buffer }> = [];\n let fileIndex = 0;\n\n const registerFile = (value: any) => {\n const existing = fileRefs.get(value);\n if (existing) {\n return existing;\n }\n const id = `f${++fileIndex}`;\n fileRefs.set(value, id);\n\n let name = 'file';\n let mime = 'application/octet-stream';\n let buffer: Buffer = Buffer.alloc(0);\n\n if (Buffer.isBuffer(value)) {\n buffer = value;\n } else if (value instanceof Uint8Array) {\n buffer = Buffer.from(value);\n } else if (value instanceof ArrayBuffer) {\n buffer = Buffer.from(value);\n } else if (value && typeof value === 'object' && 'buffer' in value) {\n const fileLike = value as any;\n if (typeof fileLike.name === 'string') {\n name = fileLike.name || name;\n }\n if (typeof fileLike.mime === 'string') {\n mime = fileLike.mime || mime;\n }\n const innerBuffer = fileLike.buffer;\n if (Buffer.isBuffer(innerBuffer)) {\n buffer = innerBuffer;\n } else if (innerBuffer instanceof Uint8Array) {\n buffer = Buffer.from(innerBuffer);\n } else if (innerBuffer instanceof ArrayBuffer) {\n buffer = Buffer.from(innerBuffer);\n }\n }\n\n fileEntries.push({ id, name, mime, buffer });\n return id;\n };\n\n const replaceFiles = (value: any): any => {\n if (this.isBinaryPayload(value)) {\n const id = registerFile(value);\n return { $file: id };\n }\n if (Array.isArray(value)) {\n return value.map(item => replaceFiles(item));\n }\n if (value && typeof value === 'object') {\n const result: Record<string, any> = {};\n Object.keys(value).forEach(key => {\n result[key] = replaceFiles(value[key]);\n });\n return result;\n }\n return value;\n };\n\n const payload = replaceFiles(topic.body);\n let offset = 0;\n const files = fileEntries.map(entry => {\n const size = entry.buffer.length;\n const meta = {\n id: entry.id,\n name: entry.name,\n mime: entry.mime,\n size,\n offset\n };\n offset += size;\n return meta;\n });\n\n const meta = { ...topic, body: payload, files };\n const json = Buffer.from(JSON.stringify(meta), 'utf8');\n const header = Buffer.alloc(4);\n header.writeUInt32LE(json.length, 0);\n\n const buffers = [header, json, ...fileEntries.map(entry => entry.buffer)];\n return Buffer.concat(buffers);\n }\n\n private sendTopic(wsSet: WebSocketSet, topic: any) {\n if (this.hasBinaryPayload(topic?.body)) {\n const buffer = this.buildBinaryTopic(topic);\n wsSet.socket.send(buffer, { binary: true });\n return;\n }\n wsSet.socket.send(JSON.stringify(topic), { binary: false });\n }\n\n private parseBinaryTopic(data: RawData): TopicRequest | undefined {\n let buffer: Buffer;\n if (Buffer.isBuffer(data)) {\n buffer = data;\n } else if (data instanceof ArrayBuffer) {\n buffer = Buffer.from(data);\n } else if (Array.isArray(data)) {\n buffer = Buffer.concat(data.map(item => (Buffer.isBuffer(item) ? item : Buffer.from(item as any))));\n } else {\n return undefined;\n }\n\n if (buffer.length < 4) {\n return undefined;\n }\n\n const jsonLength = buffer.readUInt32LE(0);\n const jsonStart = 4;\n const jsonEnd = jsonStart + jsonLength;\n if (buffer.length < jsonEnd) {\n return undefined;\n }\n\n const jsonText = buffer.slice(jsonStart, jsonEnd).toString('utf8');\n let meta: any;\n try {\n meta = JSON.parse(jsonText);\n } catch (error) {\n console.warn('Invalid WebSocket binary payload:', error);\n return undefined;\n }\n\n const filesMeta = Array.isArray(meta.files) ? meta.files : [];\n const fileMap = new Map<string, { name: string; mime: string; size: number; buffer: Buffer }>();\n filesMeta.forEach((file: any) => {\n if (!file || typeof file.id !== 'string' || typeof file.size !== 'number' || typeof file.offset !== 'number') {\n return;\n }\n const start = jsonEnd + file.offset;\n const end = start + file.size;\n if (start < jsonEnd || end > buffer.length) {\n return;\n }\n const slice = buffer.slice(start, end);\n fileMap.set(file.id, {\n name: file.name || 'file',\n mime: file.mime || 'application/octet-stream',\n size: file.size,\n buffer: slice\n });\n });\n\n const replaceFileRefs = (value: any): any => {\n if (value && typeof value === 'object' && '$file' in value && typeof value.$file === 'string') {\n const file = fileMap.get(value.$file);\n if (file) {\n return file;\n }\n }\n if (Array.isArray(value)) {\n return value.map(item => replaceFileRefs(item));\n }\n if (value && typeof value === 'object') {\n const result: Record<string, any> = {};\n Object.keys(value).forEach(key => {\n result[key] = replaceFileRefs(value[key]);\n });\n return result;\n }\n return value;\n };\n\n const body = replaceFileRefs(meta.body);\n return {\n type: meta.type,\n uuid: meta.uuid,\n requestUUID: meta.requestUUID,\n body\n };\n }\n\n message(wsSet: WebSocketSet, data: { data: RawData; isBinary: boolean }): void {\n let topic: TopicRequest | TopicUnsubscribeRequest | TopicSubscribeRequest | TopicServerEventResponse | undefined;\n if (data.isBinary) {\n topic = this.parseBinaryTopic(data.data);\n if (!topic) {\n return;\n }\n } else {\n try {\n topic = JSON.parse(data.data.toString());\n } catch (error) {\n console.warn('Invalid WebSocket payload:', error);\n return;\n }\n }\n\n this.subject.next(topic);\n // console.log('WebSocket message received:', topic);\n const uuid = topic.uuid;\n // const client = this.findClientByUUID(uuid);\n // if (!client) return;\n\n // 구독\n if (topic.type === 'subscribe') {\n try {\n this.setClientTopic(wsSet, topic.uuid, topic.target, topic.body);\n } catch (err: any) {\n const responseTopic: TopicResponse = {\n state: 'error',\n // type: topic.type,\n target: topic.target,\n uuid: topic.uuid,\n body: { message: err.message || 'Error subscribing topic' }\n };\n wsSet.socket.send(JSON.stringify(responseTopic), { binary: false });\n }\n return;\n // 구독 해제\n } else if (topic.type === 'unsubscribe') {\n this.removeClientByUUID(uuid);\n return;\n } else if (topic.type === 'event') {\n const subscriptions = this.eventSubscriptions.get(topic.uuid);\n if (subscriptions) {\n const eventCallback = subscriptions.get(topic.eventUUID);\n if (eventCallback) {\n eventCallback(topic.body, wsSet);\n subscriptions.delete(topic.eventUUID);\n }\n if (subscriptions.size <= 0) {\n this.eventSubscriptions.delete(topic.uuid);\n }\n }\n return;\n } else {\n // 실행!!\n // 등록 체크\n const clientTopics = this.findClientByUUID(uuid);\n if (!clientTopics) {\n const responseTopic: TopicResponse = {\n state: 'error',\n uuid: topic.uuid,\n requestUUID: topic.requestUUID,\n target: '',\n body: { message: 'WebSocket client not registered' }\n };\n this.sendTopic(wsSet, responseTopic);\n return;\n }\n\n const intent = new Intent(clientTopics.target);\n const webSocketRequest: WebSocketRequest = {\n webSocketSet: wsSet,\n uuid: clientTopics.uuid,\n webSocketManager: this,\n sendEvent: <R>(event: string, body: any, config?: { responseTimeout?: number }) => this.sendEventDataByUUIDPromise<R>({ uuid: clientTopics.uuid, event, body }, config)\n };\n intent.data = [topic.body, webSocketRequest];\n if (topic.type === 'intent') {\n this.intentManager.publishMeta(intent).then(async it => {\n if (it.target.length <= 0) {\n const responseTopic: TopicResponse = {\n state: 'error',\n // type: topic.type,\n target: clientTopics.target,\n uuid: topic.uuid,\n requestUUID: topic.requestUUID,\n body: { message: 'Not found intent target' }\n };\n this.sendTopic(wsSet, responseTopic);\n } else {\n const rdata = it.return[0];\n const wdata = rdata instanceof Promise ? await rdata : rdata;\n const responseTopic: TopicResponse = {\n state: 'success',\n uuid: topic.uuid,\n requestUUID: topic.requestUUID,\n target: clientTopics.target,\n body: wdata\n };\n this.sendTopic(wsSet, responseTopic);\n }\n });\n } else if (topic.type === 'router') {\n this.routerManager.routing(intent).then(async routerModule => {\n const moduleInstance = routerModule.getModuleInstance?.();\n if (routerModule && moduleInstance) {\n if (routerModule.propertyKeys) {\n for (const it of routerModule.propertyKeys) {\n let r = moduleInstance[it]?.(topic.body, webSocketRequest);\n r = r instanceof Promise ? await r : r;\n const responseTopic: TopicResponse = {\n state: 'success',\n requestUUID: topic.requestUUID,\n uuid: topic.uuid,\n target: clientTopics.target,\n body: r\n };\n this.sendTopic(wsSet, responseTopic);\n }\n } else {\n const responseTopic: TopicResponse = {\n state: 'error',\n uuid: topic.uuid,\n requestUUID: topic.requestUUID,\n target: clientTopics.target,\n body: { message: 'Not found router target' }\n };\n this.sendTopic(wsSet, responseTopic);\n }\n } else {\n const responseTopic: TopicResponse = {\n state: 'error',\n uuid: topic.uuid,\n requestUUID: topic.requestUUID,\n target: clientTopics.target,\n body: { message: 'Not found router target' }\n };\n this.sendTopic(wsSet, responseTopic);\n }\n });\n }\n }\n }\n\n private removeAllClientsByWebSocketSet(wsSet: WebSocketSet) {\n const uuidSet = this.connections.get(wsSet);\n if (!uuidSet) {\n return;\n }\n uuidSet.forEach(uuid => {\n const reg = this.registrations.get(uuid);\n if (reg) {\n this.registrations.delete(uuid);\n const targetSet = this.targets.get(reg.target);\n if (targetSet) {\n targetSet.delete(uuid);\n if (targetSet.size <= 0) {\n this.targets.delete(reg.target);\n }\n }\n }\n this.eventSubscriptions.delete(uuid);\n });\n uuidSet.clear();\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_simple_boot", "import_core", "WebSocketManager", "meta"]
7
7
  }
@@ -269,23 +269,27 @@ class SimpleBootHttpServer extends SimpleApplication {
269
269
  target: moduleInstance,
270
270
  targetKey: it.propertyKey
271
271
  }, otherStorage);
272
- if (it.config?.resolver) {
273
- const execute = typeof it.config.resolver === "function" ? this.simstanceManager.getOrNewSim({ target: it.config.resolver }) : it.config.resolver;
274
- data = await execute?.resolve?.(data, rr);
275
- }
276
- const status = it.config?.res?.status ?? HttpStatus.Ok;
277
- const headers = it.config?.res?.header ?? {};
278
- if (it.config?.res?.contentType) {
279
- headers[HttpHeaders.ContentType] = it.config?.res?.contentType;
280
- }
281
- if ((it.config?.res?.contentType?.toLowerCase().indexOf(Mimes.ApplicationJson.toLowerCase()) ?? -1) > -1) {
282
- data = JSON.stringify(data);
283
- } else if (data && typeof data === "object") {
284
- data = JSON.stringify(data);
272
+ const resConfig = it.config?.res;
273
+ if (resConfig?.manual === true) {
274
+ } else {
275
+ if (it.config?.resolver) {
276
+ const execute = typeof it.config.resolver === "function" ? this.simstanceManager.getOrNewSim({ target: it.config.resolver }) : it.config.resolver;
277
+ data = await execute?.resolve?.(data, rr);
278
+ }
279
+ const status = resConfig?.status ?? HttpStatus.Ok;
280
+ const headers = resConfig?.header ?? {};
281
+ if (resConfig?.contentType) {
282
+ headers[HttpHeaders.ContentType] = resConfig.contentType;
283
+ }
284
+ if ((resConfig?.contentType?.toLowerCase().indexOf(Mimes.ApplicationJson.toLowerCase()) ?? -1) > -1) {
285
+ data = JSON.stringify(data);
286
+ } else if (data && typeof data === "object") {
287
+ data = JSON.stringify(data);
288
+ }
289
+ rr.resSetHeaders(headers);
290
+ rr.resSetStatusCode(status);
291
+ rr.resWrite(data);
285
292
  }
286
- rr.resSetHeaders(headers);
287
- rr.resSetStatusCode(status);
288
- rr.resWrite(data);
289
293
  }
290
294
  }
291
295
  if (this.option.noSuchRouteEndPointMappingThrow && methods.length <= 0 && rr.reqMethod()?.toUpperCase() !== HttpMethod.OPTIONS) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/SimpleBootHttpServer.ts"],
4
- "sourcesContent": ["import {SimpleApplication} from '@dooboostore/simple-boot';\nimport {HttpServerOption} from './option/HttpServerOption';\nimport {ConstructorType} from '@dooboostore/core';\nimport {IncomingMessage, Server as HttpServer, ServerResponse} from 'http'\nimport {Server as HttpsServer} from 'https'; // Add HTTPS support\nimport {WebSocketServer, WebSocket} from 'ws';\nimport {RequestResponse} from './models/RequestResponse';\nimport {getUrlMapping, getUrlMappings, SaveMappingConfig, UrlMappingSituationType} from './decorators/MethodMapping';\nimport {HttpStatus} from './codes/HttpStatus';\nimport {HttpHeaders} from './codes/HttpHeaders';\nimport {Mimes} from './codes/Mimes';\nimport {Filter} from './filters/Filter';\nimport {ExceptionHandlerSituationType, targetExceptionHandler} from '@dooboostore/simple-boot';\nimport {getInject, SituationTypeContainer, SituationTypeContainers} from '@dooboostore/simple-boot';\nimport {EndPoint} from './endpoints/EndPoint';\nimport {ReflectUtils} from '@dooboostore/core';\nimport {ReqFormUrlBody} from './models/datas/body/ReqFormUrlBody';\nimport {ReqJsonBody} from './models/datas/body/ReqJsonBody';\nimport {ReqHeader} from './models/datas/ReqHeader';\nimport {RouterModule} from '@dooboostore/simple-boot';\nimport {ReqMultipartFormBody} from './models/datas/body/ReqMultipartFormBody';\nimport {execValidationInValid, getValidIndex} from '@dooboostore/simple-boot';\nimport {ValidException} from '@dooboostore/simple-boot';\nimport {HttpError} from './errors/HttpError';\nimport {getRoute} from '@dooboostore/simple-boot';\nimport {OnInit} from './lifecycle/OnInit';\nimport {URLSearchParams} from 'url';\nimport {HttpMethod} from './codes/HttpMethod';\nimport {SessionManager} from './session/SessionManager';\nimport {InjectSituationType} from './inject/InjectSituationType';\nimport {ReqSearchParamsObj} from \"./models/datas/path/ReqSearchParamsObj\";\nimport {SimConfig} from '@dooboostore/simple-boot';\nimport {ReqPathData} from './models/datas/path/ReqPathData';\nimport {WebSocketEndPoint} from './endpoints/WebSocketEndPoint';\n\nexport class SimpleBootHttpServer extends SimpleApplication {\n public server?: HttpServer | HttpsServer;\n private sessionManager: SessionManager;\n private webSocketClients = new Map<WebSocket, { request: IncomingMessage }>();\n\n constructor(public option: HttpServerOption = new HttpServerOption()) {\n super(option);\n this.sessionManager = new SessionManager(this.option);\n }\n\n\n public run(otherInstanceSim?: Map<ConstructorType<any> | Function | SimConfig | symbol, any>) {\n otherInstanceSim ??= new Map<ConstructorType<any> | Function | SimConfig | symbol, any>();\n otherInstanceSim.set(SimpleBootHttpServer, this);\n super.run(otherInstanceSim);\n const targets = [...this.option.closeEndPoints ?? [], ...this.option.errorEndPoints ?? [], ...this.option.requestEndPoints ?? [], ...(this.option.filters ?? []).map(it=>it.filter)];\n Promise.all(targets.map(it => (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it as ConstructorType<any>}) : it) as OnInit).map(it => it.onInit(this))).then(it => {\n this.startServer();\n });\n return this;\n }\n\n private startServer() {\n\n // const a = this.option.serverOption as HttpsServerOption;\n // this.option.serverOption?.\n\n if (this.option.serverOption && 'key' in this.option.serverOption && 'cert' in this.option.serverOption) {\n this.server = new HttpsServer(this.option.serverOption);\n const httpServer = new HttpServer();\n httpServer.on('request', (req: IncomingMessage, res: ServerResponse) => {\n res.writeHead(301, {Location: `https://${req.headers.host}${req.url}`});\n res.end();\n });\n httpServer.listen(80, this.option.listen.hostname, () => {\n console.log('HTTP redirect server running on port 80');\n });\n } else if (this.option.serverOption) {\n this.server = new HttpServer(this.option.serverOption);\n } else {\n this.server = new HttpServer();\n }\n // const thisRef = this;\n this.server.on('request', async (req: IncomingMessage, res: ServerResponse) => {\n // console.log('request', req.url);\n const transactionManager = this.option.transactionManagerFactory ? await this.option.transactionManagerFactory() : undefined;\n res.on('close', async () => {\n if (this.option.closeEndPoints) {\n for (const it of this.option.closeEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it) as EndPoint;\n const endPoint = execute?.endPoint(rr, this);\n if (endPoint instanceof Promise) {\n await endPoint;\n }\n } catch (e) {\n }\n }\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n res.on('error', async () => {\n if (this.option.errorEndPoints) {\n for (const it of this.option.errorEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it) as EndPoint;\n const endPoint = execute?.endPoint(rr, this);\n if (endPoint instanceof Promise) {\n await endPoint;\n }\n } catch (e) {\n }\n }\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n\n const rr = new RequestResponse(req, res, {sessionManager: this.sessionManager, option: this.option});\n /*\n default setting first\n */\n rr.resSetHeader(HttpHeaders.Server, 'simple-boot-http-server');\n const cookie = rr.reqCookieGet(this.option.sessionOption.key);\n if (!cookie) {\n const session = await this.sessionManager.session();\n\n const cookieParts: string[] = [];\n cookieParts.push(`${this.option.sessionOption.key}=${session.uuid}`);\n cookieParts.push(`Path=${this.option.sessionOption.path}`);\n if (this.option.sessionOption.httpOnly) cookieParts.push('HttpOnly');\n if (this.option.sessionOption.secure) cookieParts.push('Secure');\n if (this.option.sessionOption.sameSite != null && this.option.sessionOption.sameSite) cookieParts.push(`SameSite=${this.option.sessionOption.sameSite}`);\n const maxAge = (this.option.sessionOption as any).maxAge ?? (this.sessionManager.sessionOption)?.maxAge;\n if (maxAge != null) cookieParts.push(`Max-Age=${maxAge}`);\n rr.resSetHeader(HttpHeaders.SetCookie, cookieParts.join('; '));\n }\n\n const otherStorage = new Map<ConstructorType<any>, any>();\n otherStorage.set(RequestResponse, rr);\n otherStorage.set(IncomingMessage, req);\n otherStorage.set(ServerResponse, res);\n try {\n transactionManager?.try();\n if (this.option.requestEndPoints) {\n for (const it of this.option.requestEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim<EndPoint>({target: it}) : it) as EndPoint;\n execute?.endPoint(rr, this);\n } catch (e) {\n }\n }\n }\n\n const filter = {\n carrier: new Map<string, any>(),\n filters: [] as { filter: Filter, sw: boolean }[]\n };\n for (let i = 0; this.option.filters && i < this.option.filters.length; i++) {\n const it = this.option.filters[i];\n\n let isSkip = false;\n if (typeof it.isSupport === 'boolean') {\n isSkip = !it.isSupport;\n } else if (typeof it.isSupport === 'object') {\n isSkip = !it.isSupport.test(rr.reqUrlPathName)\n } else if (typeof it.isSupport === 'function') {\n isSkip = !it.isSupport(rr);\n }\n if(isSkip) {\n continue;\n }\n\n let sw = true;\n const itFilter = it.filter;\n const execute = (typeof itFilter === 'function' ? this.simstanceManager.getOrNewSim({target: itFilter}) : itFilter) as Filter;\n if (execute?.proceedBefore) {\n sw = await execute.proceedBefore({rr, app: this, carrier: filter.carrier});\n filter.filters.push({filter: execute, sw});\n }\n if (!sw) {\n break;\n }\n }\n\n // body.. something..\n if (!rr.resIsDone()) {\n const routerModule = await super.routing(rr.reqIntent);\n otherStorage.set(RouterModule, routerModule);\n const moduleInstance = routerModule?.getModuleInstance?.();\n let methods: SaveMappingConfig[] = [];\n if (routerModule && moduleInstance) {\n // router \uD074\uB798\uC2A4 \uB0B4\uBD80\uC5D0\uC11C \uC120\uC5B8\uB41C Route\uC77C\uB54C\n if (routerModule.propertyKeys) {\n const map = routerModule.propertyKeys?.map((it: string | symbol) => {\n return {propertyKey: it, config: getUrlMapping(moduleInstance, it)} as SaveMappingConfig\n });\n methods.push(...(map ?? []));\n } else {\n methods.push(...(getUrlMappings(moduleInstance).filter(it => !getRoute(moduleInstance, it.propertyKey)) ?? []));\n }\n\n // options\uB85C \uC694\uCCAD\uC624\uBA74\uC740 allow\uB85C \uB123\uACE0 \uADF8\uB0E5 200\uCC98\uB9AC\uD574\uC57C\uB428.\n if (rr.reqMethod()?.toUpperCase() === HttpMethod.OPTIONS.toUpperCase()) {\n rr.resSetHeader(HttpHeaders.Allow, methods.map(it => it.config.method).join(', '));\n rr.resStatusCode(HttpStatus.Ok);\n }\n\n // method \uCC3E\uAE30\n methods = methods.filter(it => it && it.propertyKey && it.config && rr.reqMethod()?.toUpperCase() === it.config.method.toUpperCase());\n methods.sort((a, b) => {\n return ((b.config?.req?.contentType?.length ?? 0) + (b.config?.req?.accept?.length ?? 0)) - ((a.config?.req?.contentType?.length ?? 0) + (a.config?.req?.accept?.length ?? 0));\n });\n methods = methods\n .filter(it => it.config?.req?.contentType ? (!!it.config?.req?.contentType?.find(sit => rr.reqHasContentTypeHeader(sit))) : true)\n .filter(it => it.config?.req?.accept ? (!!it.config?.req?.accept?.find(sit => rr.reqHasAcceptHeader(sit))) : true);\n\n if (methods[0]) {\n const it = methods[0];\n const paramTypes = ReflectUtils.getParameterTypes(moduleInstance, it.propertyKey)\n const injects = getInject(moduleInstance, it.propertyKey);\n const validIndexs = getValidIndex(moduleInstance, it.propertyKey);\n if (injects) {\n const isPathData = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_PATH_DATA);\n const isJson = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_JSON_BODY);\n const isSearchParamsObj = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_URL_SEARCH_PARAMS_OBJ);\n const isFormUrl = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_FORM_URL_BODY);\n // \uC6B0\uC120 \uB2E4\uC2DC \uC81C\uAC70\uD55C\uB2E4.. \uD2B8\uB79C\uC81D\uC158 \uC5B4\uB5BB\uAC8C \uD560\uC9C0 \uB2E4\uC2DC \uC0DD\uAC01\n // const isTransactionManager = injects.find(it => it.config?.situationType === InjectSituationType.TransactionManager);\n const siturationContainers = new SituationTypeContainers();\n if (isPathData) {\n let data = await routerModule.pathData\n if (isPathData.type) {\n data = Object.assign(new isPathData.type(), data);\n }\n if (validIndexs.includes(isPathData.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({\n situationType: UrlMappingSituationType.REQ_PATH_DATA,\n data\n }));\n }\n if (isJson) {\n let data = await rr.reqBodyJsonData();\n if (data !== null && isJson.type) {\n data = Object.assign(new isJson.type(), data);\n }\n if (validIndexs.includes(isJson.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({\n situationType: UrlMappingSituationType.REQ_JSON_BODY,\n data\n }));\n }\n if (isSearchParamsObj) {\n let data = rr.reqUrlSearchParamsObj\n if (validIndexs.includes(isSearchParamsObj.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({\n situationType: UrlMappingSituationType.REQ_URL_SEARCH_PARAMS_OBJ,\n data\n }));\n }\n if (isFormUrl) {\n let data = await rr.reqBodyFormUrlData()\n if (isFormUrl.type) {\n data = Object.assign(new isFormUrl.type(), data);\n }\n if (validIndexs.includes(isFormUrl.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({situationType: UrlMappingSituationType.REQ_FORM_URL_BODY, data}));\n }\n // \uD2B8\uB79C\uC81D\uC158 \uC6B0\uC120 \uC81C\uAC70 \uB098\uC911\uC5D0 \uC5B4\uB5BB\uAC8C \uAD6C\uD604\uD560\uC9C0 \uC0DD\uAC01..\n // if (isTransactionManager && isTransactionManager.type && transactionManager && transactionManager.hasTransaction(isTransactionManager.type)) {\n // let data = await transactionManager.getTransaction(isTransactionManager.type);\n // if (data) {\n // data = await data.try(isTransactionManager.config.argument);\n // siturationContainers.push(new SituationTypeContainer({situationType: InjectSituationType.TransactionManager, data, index: isTransactionManager.index}));\n // }\n // }\n if (siturationContainers.length) {\n otherStorage.set(SituationTypeContainers, siturationContainers);\n }\n }\n\n for (const paramType of paramTypes) {\n if (paramType === ReqFormUrlBody) {\n otherStorage.set(ReqFormUrlBody, await rr.reqBodyReqFormUrlBody())\n } else if (paramType === ReqPathData) {\n otherStorage.set(ReqPathData, routerModule.pathData)\n } else if (paramType === ReqJsonBody) {\n otherStorage.set(ReqJsonBody, await rr.reqBodyReqJsonBody())\n } else if (paramType === ReqSearchParamsObj) {\n otherStorage.set(ReqSearchParamsObj, rr.reqUrlSearchParamsObj)\n } else if (paramType === URLSearchParams) {\n otherStorage.set(URLSearchParams, rr.reqUrlSearchParams)\n } else if (paramType === ReqMultipartFormBody) {\n otherStorage.set(ReqMultipartFormBody, rr.reqBodyMultipartFormData())\n } else if (paramType === ReqHeader) {\n otherStorage.set(ReqHeader, rr.reqHeaderObj)\n }\n }\n\n // execute !!!\n let data = await this.simstanceManager.executeBindParameterSimPromise({\n target: moduleInstance,\n targetKey: it.propertyKey\n }, otherStorage);\n /*\n \uC5EC\uAE30\uC5D0\uC11C \uC815\uD574\uC9C4 \uD0C0\uC785 \uB9AC\uD134\uC5D0 \uB530\uB978 \uC870\uCE58\n ...\n */\n if (it.config?.resolver) {\n const execute = typeof it.config.resolver === 'function' ? this.simstanceManager.getOrNewSim({target: it.config.resolver}) : it.config.resolver;\n data = await execute?.resolve?.(data, rr);\n }\n const status = it.config?.res?.status ?? HttpStatus.Ok;\n const headers = it.config?.res?.header ?? {};\n if (it.config?.res?.contentType) {\n headers[HttpHeaders.ContentType] = it.config?.res?.contentType;\n }\n if ((it.config?.res?.contentType?.toLowerCase().indexOf(Mimes.ApplicationJson.toLowerCase()) ?? -1) > -1) {\n data = JSON.stringify(data);\n } else if (data && typeof data === 'object') {\n data = JSON.stringify(data);\n }\n rr.resSetHeaders(headers)\n rr.resSetStatusCode(status);\n rr.resWrite(data);\n }\n }\n\n if (this.option.noSuchRouteEndPointMappingThrow && methods.length <= 0 && rr.reqMethod()?.toUpperCase() !== HttpMethod.OPTIONS) {\n throw this.option.noSuchRouteEndPointMappingThrow(rr);\n }\n }\n\n // after\n for (const it of filter.filters.reverse()) {\n if (it.filter?.proceedAfter && !await it.filter.proceedAfter({rr, app: this, before: it.sw, carrier: filter.carrier})) {\n break;\n }\n }\n } catch (e) {\n console.error('request error:', e);\n transactionManager?.catch(e);\n rr.resStatusCode(e instanceof HttpError ? e.status : HttpStatus.InternalServerError)\n const execute = typeof this.option.globalAdvice === 'function' ? this.simstanceManager.getOrNewSim(this.option.globalAdvice) : this.option.globalAdvice;\n if (!execute) {\n rr.resEnd();\n // rr.resEnd().catch(e => {\n // });\n return;\n }\n if (e && typeof e === 'object') {\n otherStorage.set(e.constructor as ConstructorType<any>, e);\n otherStorage.set(SituationTypeContainer, new SituationTypeContainer({\n situationType: ExceptionHandlerSituationType.ERROR_OBJECT,\n data: e\n }));\n }\n const target = targetExceptionHandler(execute, e);\n if (target) {\n await this.simstanceManager.executeBindParameterSimPromise({\n target: execute,\n targetKey: target.propertyKey\n }, otherStorage);\n }\n } finally {\n transactionManager?.finally();\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n\n if (this.option.webSocketEndPoints) {\n const webSocketServer = new WebSocketServer({server: this.server});\n const execute = this.option.webSocketEndPoints.map(it => typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it);\n webSocketServer.on('connection', async (ws, request) => {\n this.webSocketClients.set(ws, {request});\n const wsSet = {socket: ws, request};\n execute.forEach(it => it.connect?.(wsSet));\n ws.on('error', err => execute.forEach(it => it.error?.(wsSet, err)));\n ws.on('message', (data, isBinary) => execute.forEach(it => it.message(wsSet, {data, isBinary})));\n ws.on('ping', () => execute.forEach(it => it.ping?.(wsSet)));\n ws.on('close', () => {\n this.webSocketClients.delete(ws);\n execute.forEach(it => it.close?.(wsSet));\n });\n });\n }\n this.server.listen(this.option.listen.port, this.option.listen.hostname, this.option.listen.backlog, () => {\n this.option.listen.listeningListener?.(this, this.server);\n });\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {SimpleApplication} from '@dooboostore/simple-boot';\nimport {HttpServerOption} from './option/HttpServerOption';\nimport {ConstructorType} from '@dooboostore/core';\nimport {IncomingMessage, Server as HttpServer, ServerResponse} from 'http'\nimport {Server as HttpsServer} from 'https'; // Add HTTPS support\nimport {WebSocketServer, WebSocket} from 'ws';\nimport {RequestResponse} from './models/RequestResponse';\nimport {getUrlMapping, getUrlMappings, SaveMappingConfig, UrlMappingSituationType} from './decorators/MethodMapping';\nimport {HttpStatus} from './codes/HttpStatus';\nimport {HttpHeaders} from './codes/HttpHeaders';\nimport {Mimes} from './codes/Mimes';\nimport {Filter} from './filters/Filter';\nimport {ExceptionHandlerSituationType, targetExceptionHandler} from '@dooboostore/simple-boot';\nimport {getInject, SituationTypeContainer, SituationTypeContainers} from '@dooboostore/simple-boot';\nimport {EndPoint} from './endpoints/EndPoint';\nimport {ReflectUtils} from '@dooboostore/core';\nimport {ReqFormUrlBody} from './models/datas/body/ReqFormUrlBody';\nimport {ReqJsonBody} from './models/datas/body/ReqJsonBody';\nimport {ReqHeader} from './models/datas/ReqHeader';\nimport {RouterModule} from '@dooboostore/simple-boot';\nimport {ReqMultipartFormBody} from './models/datas/body/ReqMultipartFormBody';\nimport {execValidationInValid, getValidIndex} from '@dooboostore/simple-boot';\nimport {ValidException} from '@dooboostore/simple-boot';\nimport {HttpError} from './errors/HttpError';\nimport {getRoute} from '@dooboostore/simple-boot';\nimport {OnInit} from './lifecycle/OnInit';\nimport {URLSearchParams} from 'url';\nimport {HttpMethod} from './codes/HttpMethod';\nimport {SessionManager} from './session/SessionManager';\nimport {InjectSituationType} from './inject/InjectSituationType';\nimport {ReqSearchParamsObj} from \"./models/datas/path/ReqSearchParamsObj\";\nimport {SimConfig} from '@dooboostore/simple-boot';\nimport {ReqPathData} from './models/datas/path/ReqPathData';\nimport {WebSocketEndPoint} from './endpoints/WebSocketEndPoint';\n\nexport class SimpleBootHttpServer extends SimpleApplication {\n public server?: HttpServer | HttpsServer;\n private sessionManager: SessionManager;\n private webSocketClients = new Map<WebSocket, { request: IncomingMessage }>();\n\n constructor(public option: HttpServerOption = new HttpServerOption()) {\n super(option);\n this.sessionManager = new SessionManager(this.option);\n }\n\n\n public run(otherInstanceSim?: Map<ConstructorType<any> | Function | SimConfig | symbol, any>) {\n otherInstanceSim ??= new Map<ConstructorType<any> | Function | SimConfig | symbol, any>();\n otherInstanceSim.set(SimpleBootHttpServer, this);\n super.run(otherInstanceSim);\n const targets = [...this.option.closeEndPoints ?? [], ...this.option.errorEndPoints ?? [], ...this.option.requestEndPoints ?? [], ...(this.option.filters ?? []).map(it=>it.filter)];\n Promise.all(targets.map(it => (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it as ConstructorType<any>}) : it) as OnInit).map(it => it.onInit(this))).then(it => {\n this.startServer();\n });\n return this;\n }\n\n private startServer() {\n\n // const a = this.option.serverOption as HttpsServerOption;\n // this.option.serverOption?.\n\n if (this.option.serverOption && 'key' in this.option.serverOption && 'cert' in this.option.serverOption) {\n this.server = new HttpsServer(this.option.serverOption);\n const httpServer = new HttpServer();\n httpServer.on('request', (req: IncomingMessage, res: ServerResponse) => {\n res.writeHead(301, {Location: `https://${req.headers.host}${req.url}`});\n res.end();\n });\n httpServer.listen(80, this.option.listen.hostname, () => {\n console.log('HTTP redirect server running on port 80');\n });\n } else if (this.option.serverOption) {\n this.server = new HttpServer(this.option.serverOption);\n } else {\n this.server = new HttpServer();\n }\n // const thisRef = this;\n this.server.on('request', async (req: IncomingMessage, res: ServerResponse) => {\n // console.log('request', req.url);\n const transactionManager = this.option.transactionManagerFactory ? await this.option.transactionManagerFactory() : undefined;\n res.on('close', async () => {\n if (this.option.closeEndPoints) {\n for (const it of this.option.closeEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it) as EndPoint;\n const endPoint = execute?.endPoint(rr, this);\n if (endPoint instanceof Promise) {\n await endPoint;\n }\n } catch (e) {\n }\n }\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n res.on('error', async () => {\n if (this.option.errorEndPoints) {\n for (const it of this.option.errorEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it) as EndPoint;\n const endPoint = execute?.endPoint(rr, this);\n if (endPoint instanceof Promise) {\n await endPoint;\n }\n } catch (e) {\n }\n }\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n\n const rr = new RequestResponse(req, res, {sessionManager: this.sessionManager, option: this.option});\n /*\n default setting first\n */\n rr.resSetHeader(HttpHeaders.Server, 'simple-boot-http-server');\n const cookie = rr.reqCookieGet(this.option.sessionOption.key);\n if (!cookie) {\n const session = await this.sessionManager.session();\n\n const cookieParts: string[] = [];\n cookieParts.push(`${this.option.sessionOption.key}=${session.uuid}`);\n cookieParts.push(`Path=${this.option.sessionOption.path}`);\n if (this.option.sessionOption.httpOnly) cookieParts.push('HttpOnly');\n if (this.option.sessionOption.secure) cookieParts.push('Secure');\n if (this.option.sessionOption.sameSite != null && this.option.sessionOption.sameSite) cookieParts.push(`SameSite=${this.option.sessionOption.sameSite}`);\n const maxAge = (this.option.sessionOption as any).maxAge ?? (this.sessionManager.sessionOption)?.maxAge;\n if (maxAge != null) cookieParts.push(`Max-Age=${maxAge}`);\n rr.resSetHeader(HttpHeaders.SetCookie, cookieParts.join('; '));\n }\n\n const otherStorage = new Map<ConstructorType<any>, any>();\n otherStorage.set(RequestResponse, rr);\n otherStorage.set(IncomingMessage, req);\n otherStorage.set(ServerResponse, res);\n try {\n transactionManager?.try();\n if (this.option.requestEndPoints) {\n for (const it of this.option.requestEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim<EndPoint>({target: it}) : it) as EndPoint;\n execute?.endPoint(rr, this);\n } catch (e) {\n }\n }\n }\n\n const filter = {\n carrier: new Map<string, any>(),\n filters: [] as { filter: Filter, sw: boolean }[]\n };\n for (let i = 0; this.option.filters && i < this.option.filters.length; i++) {\n const it = this.option.filters[i];\n\n let isSkip = false;\n if (typeof it.isSupport === 'boolean') {\n isSkip = !it.isSupport;\n } else if (typeof it.isSupport === 'object') {\n isSkip = !it.isSupport.test(rr.reqUrlPathName)\n } else if (typeof it.isSupport === 'function') {\n isSkip = !it.isSupport(rr);\n }\n if(isSkip) {\n continue;\n }\n\n let sw = true;\n const itFilter = it.filter;\n const execute = (typeof itFilter === 'function' ? this.simstanceManager.getOrNewSim({target: itFilter}) : itFilter) as Filter;\n if (execute?.proceedBefore) {\n sw = await execute.proceedBefore({rr, app: this, carrier: filter.carrier});\n filter.filters.push({filter: execute, sw});\n }\n if (!sw) {\n break;\n }\n }\n\n // body.. something..\n if (!rr.resIsDone()) {\n const routerModule = await super.routing(rr.reqIntent);\n otherStorage.set(RouterModule, routerModule);\n const moduleInstance = routerModule?.getModuleInstance?.();\n let methods: SaveMappingConfig[] = [];\n if (routerModule && moduleInstance) {\n // router \uD074\uB798\uC2A4 \uB0B4\uBD80\uC5D0\uC11C \uC120\uC5B8\uB41C Route\uC77C\uB54C\n if (routerModule.propertyKeys) {\n const map = routerModule.propertyKeys?.map((it: string | symbol) => {\n return {propertyKey: it, config: getUrlMapping(moduleInstance, it)} as SaveMappingConfig\n });\n methods.push(...(map ?? []));\n } else {\n methods.push(...(getUrlMappings(moduleInstance).filter(it => !getRoute(moduleInstance, it.propertyKey)) ?? []));\n }\n\n // options\uB85C \uC694\uCCAD\uC624\uBA74\uC740 allow\uB85C \uB123\uACE0 \uADF8\uB0E5 200\uCC98\uB9AC\uD574\uC57C\uB428.\n if (rr.reqMethod()?.toUpperCase() === HttpMethod.OPTIONS.toUpperCase()) {\n rr.resSetHeader(HttpHeaders.Allow, methods.map(it => it.config.method).join(', '));\n rr.resStatusCode(HttpStatus.Ok);\n }\n\n // method \uCC3E\uAE30\n methods = methods.filter(it => it && it.propertyKey && it.config && rr.reqMethod()?.toUpperCase() === it.config.method.toUpperCase());\n methods.sort((a, b) => {\n return ((b.config?.req?.contentType?.length ?? 0) + (b.config?.req?.accept?.length ?? 0)) - ((a.config?.req?.contentType?.length ?? 0) + (a.config?.req?.accept?.length ?? 0));\n });\n methods = methods\n .filter(it => it.config?.req?.contentType ? (!!it.config?.req?.contentType?.find(sit => rr.reqHasContentTypeHeader(sit))) : true)\n .filter(it => it.config?.req?.accept ? (!!it.config?.req?.accept?.find(sit => rr.reqHasAcceptHeader(sit))) : true);\n\n if (methods[0]) {\n const it = methods[0];\n const paramTypes = ReflectUtils.getParameterTypes(moduleInstance, it.propertyKey)\n const injects = getInject(moduleInstance, it.propertyKey);\n const validIndexs = getValidIndex(moduleInstance, it.propertyKey);\n if (injects) {\n const isPathData = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_PATH_DATA);\n const isJson = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_JSON_BODY);\n const isSearchParamsObj = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_URL_SEARCH_PARAMS_OBJ);\n const isFormUrl = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_FORM_URL_BODY);\n // \uC6B0\uC120 \uB2E4\uC2DC \uC81C\uAC70\uD55C\uB2E4.. \uD2B8\uB79C\uC81D\uC158 \uC5B4\uB5BB\uAC8C \uD560\uC9C0 \uB2E4\uC2DC \uC0DD\uAC01\n // const isTransactionManager = injects.find(it => it.config?.situationType === InjectSituationType.TransactionManager);\n const siturationContainers = new SituationTypeContainers();\n if (isPathData) {\n let data = await routerModule.pathData\n if (isPathData.type) {\n data = Object.assign(new isPathData.type(), data);\n }\n if (validIndexs.includes(isPathData.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({\n situationType: UrlMappingSituationType.REQ_PATH_DATA,\n data\n }));\n }\n if (isJson) {\n let data = await rr.reqBodyJsonData();\n if (data !== null && isJson.type) {\n data = Object.assign(new isJson.type(), data);\n }\n if (validIndexs.includes(isJson.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({\n situationType: UrlMappingSituationType.REQ_JSON_BODY,\n data\n }));\n }\n if (isSearchParamsObj) {\n let data = rr.reqUrlSearchParamsObj\n if (validIndexs.includes(isSearchParamsObj.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({\n situationType: UrlMappingSituationType.REQ_URL_SEARCH_PARAMS_OBJ,\n data\n }));\n }\n if (isFormUrl) {\n let data = await rr.reqBodyFormUrlData()\n if (isFormUrl.type) {\n data = Object.assign(new isFormUrl.type(), data);\n }\n if (validIndexs.includes(isFormUrl.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({situationType: UrlMappingSituationType.REQ_FORM_URL_BODY, data}));\n }\n // \uD2B8\uB79C\uC81D\uC158 \uC6B0\uC120 \uC81C\uAC70 \uB098\uC911\uC5D0 \uC5B4\uB5BB\uAC8C \uAD6C\uD604\uD560\uC9C0 \uC0DD\uAC01..\n // if (isTransactionManager && isTransactionManager.type && transactionManager && transactionManager.hasTransaction(isTransactionManager.type)) {\n // let data = await transactionManager.getTransaction(isTransactionManager.type);\n // if (data) {\n // data = await data.try(isTransactionManager.config.argument);\n // siturationContainers.push(new SituationTypeContainer({situationType: InjectSituationType.TransactionManager, data, index: isTransactionManager.index}));\n // }\n // }\n if (siturationContainers.length) {\n otherStorage.set(SituationTypeContainers, siturationContainers);\n }\n }\n\n for (const paramType of paramTypes) {\n if (paramType === ReqFormUrlBody) {\n otherStorage.set(ReqFormUrlBody, await rr.reqBodyReqFormUrlBody())\n } else if (paramType === ReqPathData) {\n otherStorage.set(ReqPathData, routerModule.pathData)\n } else if (paramType === ReqJsonBody) {\n otherStorage.set(ReqJsonBody, await rr.reqBodyReqJsonBody())\n } else if (paramType === ReqSearchParamsObj) {\n otherStorage.set(ReqSearchParamsObj, rr.reqUrlSearchParamsObj)\n } else if (paramType === URLSearchParams) {\n otherStorage.set(URLSearchParams, rr.reqUrlSearchParams)\n } else if (paramType === ReqMultipartFormBody) {\n otherStorage.set(ReqMultipartFormBody, rr.reqBodyMultipartFormData())\n } else if (paramType === ReqHeader) {\n otherStorage.set(ReqHeader, rr.reqHeaderObj)\n }\n }\n\n // execute !!!\n let data = await this.simstanceManager.executeBindParameterSimPromise({\n target: moduleInstance,\n targetKey: it.propertyKey\n }, otherStorage);\n /*\n \uC5EC\uAE30\uC5D0\uC11C \uC815\uD574\uC9C4 \uD0C0\uC785 \uB9AC\uD134\uC5D0 \uB530\uB978 \uC870\uCE58\n ...\n */\n const resConfig = it.config?.res;\n if (resConfig?.manual === true) {\n // \uD578\uB4E4\uB7EC\uAC00 ServerResponse\uB97C \uC9C1\uC811 \uC8FC\uC785\uBC1B\uC544 \uC2A4\uC2A4\uB85C write/end\uB97C \uC81C\uC5B4\uD55C\uB2E4 (\uC608: SSE \uC2A4\uD2B8\uB9AC\uBC0D)\n } else {\n if (it.config?.resolver) {\n const execute = typeof it.config.resolver === 'function' ? this.simstanceManager.getOrNewSim({target: it.config.resolver}) : it.config.resolver;\n data = await execute?.resolve?.(data, rr);\n }\n const status = resConfig?.status ?? HttpStatus.Ok;\n const headers = resConfig?.header ?? {};\n if (resConfig?.contentType) {\n headers[HttpHeaders.ContentType] = resConfig.contentType;\n }\n if ((resConfig?.contentType?.toLowerCase().indexOf(Mimes.ApplicationJson.toLowerCase()) ?? -1) > -1) {\n data = JSON.stringify(data);\n } else if (data && typeof data === 'object') {\n data = JSON.stringify(data);\n }\n rr.resSetHeaders(headers)\n rr.resSetStatusCode(status);\n rr.resWrite(data);\n }\n }\n }\n\n if (this.option.noSuchRouteEndPointMappingThrow && methods.length <= 0 && rr.reqMethod()?.toUpperCase() !== HttpMethod.OPTIONS) {\n throw this.option.noSuchRouteEndPointMappingThrow(rr);\n }\n }\n\n // after\n for (const it of filter.filters.reverse()) {\n if (it.filter?.proceedAfter && !await it.filter.proceedAfter({rr, app: this, before: it.sw, carrier: filter.carrier})) {\n break;\n }\n }\n } catch (e) {\n console.error('request error:', e);\n transactionManager?.catch(e);\n rr.resStatusCode(e instanceof HttpError ? e.status : HttpStatus.InternalServerError)\n const execute = typeof this.option.globalAdvice === 'function' ? this.simstanceManager.getOrNewSim(this.option.globalAdvice) : this.option.globalAdvice;\n if (!execute) {\n rr.resEnd();\n // rr.resEnd().catch(e => {\n // });\n return;\n }\n if (e && typeof e === 'object') {\n otherStorage.set(e.constructor as ConstructorType<any>, e);\n otherStorage.set(SituationTypeContainer, new SituationTypeContainer({\n situationType: ExceptionHandlerSituationType.ERROR_OBJECT,\n data: e\n }));\n }\n const target = targetExceptionHandler(execute, e);\n if (target) {\n await this.simstanceManager.executeBindParameterSimPromise({\n target: execute,\n targetKey: target.propertyKey\n }, otherStorage);\n }\n } finally {\n transactionManager?.finally();\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n\n if (this.option.webSocketEndPoints) {\n const webSocketServer = new WebSocketServer({server: this.server});\n const execute = this.option.webSocketEndPoints.map(it => typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it);\n webSocketServer.on('connection', async (ws, request) => {\n this.webSocketClients.set(ws, {request});\n const wsSet = {socket: ws, request};\n execute.forEach(it => it.connect?.(wsSet));\n ws.on('error', err => execute.forEach(it => it.error?.(wsSet, err)));\n ws.on('message', (data, isBinary) => execute.forEach(it => it.message(wsSet, {data, isBinary})));\n ws.on('ping', () => execute.forEach(it => it.ping?.(wsSet)));\n ws.on('close', () => {\n this.webSocketClients.delete(ws);\n execute.forEach(it => it.close?.(wsSet));\n });\n });\n }\n this.server.listen(this.option.listen.port, this.option.listen.hostname, this.option.listen.backlog, () => {\n this.option.listen.listeningListener?.(this, this.server);\n });\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["it", "data"]
7
7
  }
@@ -24,6 +24,8 @@ var Mimes = /* @__PURE__ */ ((Mimes2) => {
24
24
  Mimes2["ImageXpixmap"] = "image/x-xpixmap";
25
25
  Mimes2["ImageXxbm"] = "image/x-xbm";
26
26
  Mimes2["MultipartFormData"] = "multipart/form-data";
27
+ Mimes2["TextEventStream"] = "text/event-stream";
28
+ Mimes2["ApplicationXndjson"] = "application/x-ndjson";
27
29
  Mimes2["ApplicationJsonPostSimpleBootSsrIntentScheme"] = "application/json-post+simple-boot-ssr-intent-scheme";
28
30
  Mimes2["Intent"] = "intent";
29
31
  return Mimes2;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/codes/Mimes.ts"],
4
- "sourcesContent": ["export enum Mimes {\n ApplicationJson = 'application/json',\n ApplicationOctetStream = 'application/octet-stream',\n ApplicationXml = 'application/xml',\n ApplicationJsonPatch = 'application/json-patch+json',\n ApplicationXWwwFormUrlencoded = 'application/x-www-form-urlencoded',\n TextPlain = 'text/plain',\n TextHtml = 'text/html',\n All = '*/*',\n TextCss = 'text/css',\n TextJavascript = 'text/javascript',\n TextXml = 'text/xml',\n TextXslt = 'text/xslt',\n TextXmlDtd = 'text/xml-dtd',\n TextPlainUtf8 = 'text/plain; charset=utf-8',\n ImagePng = 'image/png',\n ImageGif = 'image/gif',\n ImageJpeg = 'image/jpeg',\n ImageSvg = 'image/svg+xml',\n ImageBmp = 'image/bmp',\n ImageTiff = 'image/tiff',\n ImagePdf = 'application/pdf',\n ImageXBmp = 'image/x-bmp',\n ImageXpixmap = 'image/x-xpixmap',\n ImageXxbm = 'image/x-xbm',\n MultipartFormData = 'multipart/form-data',\n ApplicationJsonPostSimpleBootSsrIntentScheme = 'application/json-post+simple-boot-ssr-intent-scheme',\n Intent = 'intent'\n}\n"],
5
- "mappings": "AAAO,IAAK,QAAL,kBAAKA,WAAL;AACL,EAAAA,OAAA,qBAAkB;AAClB,EAAAA,OAAA,4BAAyB;AACzB,EAAAA,OAAA,oBAAiB;AACjB,EAAAA,OAAA,0BAAuB;AACvB,EAAAA,OAAA,mCAAgC;AAChC,EAAAA,OAAA,eAAY;AACZ,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,SAAM;AACN,EAAAA,OAAA,aAAU;AACV,EAAAA,OAAA,oBAAiB;AACjB,EAAAA,OAAA,aAAU;AACV,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,gBAAa;AACb,EAAAA,OAAA,mBAAgB;AAChB,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,eAAY;AACZ,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,eAAY;AACZ,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,eAAY;AACZ,EAAAA,OAAA,kBAAe;AACf,EAAAA,OAAA,eAAY;AACZ,EAAAA,OAAA,uBAAoB;AACpB,EAAAA,OAAA,kDAA+C;AAC/C,EAAAA,OAAA,YAAS;AA3BC,SAAAA;AAAA,GAAA;",
4
+ "sourcesContent": ["export enum Mimes {\n ApplicationJson = 'application/json',\n ApplicationOctetStream = 'application/octet-stream',\n ApplicationXml = 'application/xml',\n ApplicationJsonPatch = 'application/json-patch+json',\n ApplicationXWwwFormUrlencoded = 'application/x-www-form-urlencoded',\n TextPlain = 'text/plain',\n TextHtml = 'text/html',\n All = '*/*',\n TextCss = 'text/css',\n TextJavascript = 'text/javascript',\n TextXml = 'text/xml',\n TextXslt = 'text/xslt',\n TextXmlDtd = 'text/xml-dtd',\n TextPlainUtf8 = 'text/plain; charset=utf-8',\n ImagePng = 'image/png',\n ImageGif = 'image/gif',\n ImageJpeg = 'image/jpeg',\n ImageSvg = 'image/svg+xml',\n ImageBmp = 'image/bmp',\n ImageTiff = 'image/tiff',\n ImagePdf = 'application/pdf',\n ImageXBmp = 'image/x-bmp',\n ImageXpixmap = 'image/x-xpixmap',\n ImageXxbm = 'image/x-xbm',\n MultipartFormData = 'multipart/form-data',\n TextEventStream = 'text/event-stream', // SSE \uC2E4\uC2DC\uAC04 \uD14D\uC2A4\uD2B8 \uC2A4\uD2B8\uB9AC\uBC0D\n ApplicationXndjson = 'application/x-ndjson',\n ApplicationJsonPostSimpleBootSsrIntentScheme = 'application/json-post+simple-boot-ssr-intent-scheme',\n Intent = 'intent'\n}\n"],
5
+ "mappings": "AAAO,IAAK,QAAL,kBAAKA,WAAL;AACL,EAAAA,OAAA,qBAAkB;AAClB,EAAAA,OAAA,4BAAyB;AACzB,EAAAA,OAAA,oBAAiB;AACjB,EAAAA,OAAA,0BAAuB;AACvB,EAAAA,OAAA,mCAAgC;AAChC,EAAAA,OAAA,eAAY;AACZ,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,SAAM;AACN,EAAAA,OAAA,aAAU;AACV,EAAAA,OAAA,oBAAiB;AACjB,EAAAA,OAAA,aAAU;AACV,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,gBAAa;AACb,EAAAA,OAAA,mBAAgB;AAChB,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,eAAY;AACZ,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,eAAY;AACZ,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,eAAY;AACZ,EAAAA,OAAA,kBAAe;AACf,EAAAA,OAAA,eAAY;AACZ,EAAAA,OAAA,uBAAoB;AACpB,EAAAA,OAAA,qBAAkB;AAClB,EAAAA,OAAA,wBAAqB;AACrB,EAAAA,OAAA,kDAA+C;AAC/C,EAAAA,OAAA,YAAS;AA7BC,SAAAA;AAAA,GAAA;",
6
6
  "names": ["Mimes"]
7
7
  }
@@ -110,7 +110,7 @@ const getPATCH = (target, propertyKey) => {
110
110
  return getUrlMapping(target, propertyKey);
111
111
  };
112
112
  const getPATCHS = (target) => {
113
- return getUrlMappings(target)?.filter((it) => it.config?.method.toUpperCase() === HttpMethod.GET);
113
+ return getUrlMappings(target)?.filter((it) => it.config?.method.toUpperCase() === HttpMethod.PATCH);
114
114
  };
115
115
  function OPTIONS(configOrTarget, propertyKey, descriptor) {
116
116
  if (propertyKey && descriptor) {
@@ -142,7 +142,7 @@ const getHEAD = (target, propertyKey) => {
142
142
  return getUrlMapping(target, propertyKey);
143
143
  };
144
144
  const getHEADS = (target) => {
145
- return getUrlMappings(target)?.filter((it) => it.config?.method.toUpperCase() === HttpMethod.GET);
145
+ return getUrlMappings(target)?.filter((it) => it.config?.method.toUpperCase() === HttpMethod.HEAD);
146
146
  };
147
147
  function TRACE(configOrTarget, propertyKey, descriptor) {
148
148
  if (propertyKey && descriptor) {