@simplysm/service-server 13.0.100 → 14.0.4

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 (88) hide show
  1. package/README.md +79 -133
  2. package/dist/auth/auth-token-payload.js +2 -1
  3. package/dist/auth/auth-token-payload.js.map +1 -6
  4. package/dist/auth/jwt-manager.js +21 -21
  5. package/dist/auth/jwt-manager.js.map +1 -6
  6. package/dist/core/define-service.d.ts +12 -12
  7. package/dist/core/define-service.d.ts.map +1 -1
  8. package/dist/core/define-service.js +77 -63
  9. package/dist/core/define-service.js.map +1 -6
  10. package/dist/core/service-executor.d.ts.map +1 -1
  11. package/dist/core/service-executor.js +42 -32
  12. package/dist/core/service-executor.js.map +1 -6
  13. package/dist/index.d.ts +0 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +11 -2
  16. package/dist/index.js.map +1 -6
  17. package/dist/legacy/v1-auto-update-handler.d.ts +2 -2
  18. package/dist/legacy/v1-auto-update-handler.js +42 -35
  19. package/dist/legacy/v1-auto-update-handler.js.map +1 -6
  20. package/dist/protocol/protocol-wrapper.d.ts +9 -9
  21. package/dist/protocol/protocol-wrapper.js +64 -46
  22. package/dist/protocol/protocol-wrapper.js.map +1 -6
  23. package/dist/service-server.d.ts +2 -1
  24. package/dist/service-server.d.ts.map +1 -1
  25. package/dist/service-server.js +183 -165
  26. package/dist/service-server.js.map +1 -6
  27. package/dist/services/auto-update-service.js +35 -34
  28. package/dist/services/auto-update-service.js.map +1 -6
  29. package/dist/services/orm-service.js +114 -120
  30. package/dist/services/orm-service.js.map +1 -6
  31. package/dist/transport/http/http-request-handler.d.ts.map +1 -1
  32. package/dist/transport/http/http-request-handler.js +58 -46
  33. package/dist/transport/http/http-request-handler.js.map +1 -6
  34. package/dist/transport/http/static-file-handler.js +42 -39
  35. package/dist/transport/http/static-file-handler.js.map +1 -6
  36. package/dist/transport/http/upload-handler.d.ts.map +1 -1
  37. package/dist/transport/http/upload-handler.js +60 -55
  38. package/dist/transport/http/upload-handler.js.map +1 -6
  39. package/dist/transport/socket/service-socket.d.ts +13 -13
  40. package/dist/transport/socket/service-socket.js +132 -108
  41. package/dist/transport/socket/service-socket.js.map +1 -6
  42. package/dist/transport/socket/websocket-handler.d.ts +9 -13
  43. package/dist/transport/socket/websocket-handler.d.ts.map +1 -1
  44. package/dist/transport/socket/websocket-handler.js +148 -139
  45. package/dist/transport/socket/websocket-handler.js.map +1 -6
  46. package/dist/types/server-options.d.ts +1 -1
  47. package/dist/types/server-options.d.ts.map +1 -1
  48. package/dist/types/server-options.js +2 -1
  49. package/dist/types/server-options.js.map +1 -6
  50. package/dist/utils/config-manager.js +48 -46
  51. package/dist/utils/config-manager.js.map +1 -6
  52. package/dist/workers/service-protocol.worker.js +8 -11
  53. package/dist/workers/service-protocol.worker.js.map +1 -6
  54. package/docs/auth.md +28 -16
  55. package/docs/core.md +113 -54
  56. package/docs/legacy.md +21 -0
  57. package/docs/main.md +81 -0
  58. package/docs/protocol.md +31 -0
  59. package/docs/services.md +49 -44
  60. package/docs/transport.md +81 -76
  61. package/docs/types.md +31 -0
  62. package/docs/utilities.md +27 -0
  63. package/package.json +12 -13
  64. package/src/auth/jwt-manager.ts +2 -2
  65. package/src/core/define-service.ts +19 -19
  66. package/src/core/service-executor.ts +23 -17
  67. package/src/index.ts +10 -12
  68. package/src/legacy/v1-auto-update-handler.ts +10 -10
  69. package/src/protocol/protocol-wrapper.ts +16 -16
  70. package/src/service-server.ts +51 -43
  71. package/src/services/auto-update-service.ts +1 -1
  72. package/src/services/orm-service.ts +7 -7
  73. package/src/transport/http/http-request-handler.ts +16 -10
  74. package/src/transport/http/static-file-handler.ts +8 -8
  75. package/src/transport/http/upload-handler.ts +16 -9
  76. package/src/transport/socket/service-socket.ts +22 -22
  77. package/src/transport/socket/websocket-handler.ts +50 -70
  78. package/src/types/server-options.ts +1 -1
  79. package/src/utils/config-manager.ts +11 -11
  80. package/dist/services/smtp-client-service.d.ts +0 -8
  81. package/dist/services/smtp-client-service.d.ts.map +0 -1
  82. package/dist/services/smtp-client-service.js +0 -46
  83. package/dist/services/smtp-client-service.js.map +0 -6
  84. package/docs/server.md +0 -126
  85. package/src/services/smtp-client-service.ts +0 -59
  86. package/tests/define-service.spec.ts +0 -66
  87. package/tests/orm-service.spec.ts +0 -83
  88. package/tests/service-executor.spec.ts +0 -114
@@ -1,148 +1,157 @@
1
- import { Uuid } from "@simplysm/core-common";
1
+ import { Uuid, env } from "@simplysm/core-common";
2
2
  import { createServiceSocket } from "./service-socket.js";
3
3
  import { verifyJwt } from "../../auth/jwt-manager.js";
4
4
  import consola from "consola";
5
5
  const logger = consola.withTag("service-server:WebSocketHandler");
6
- function createWebSocketHandler(runMethod, jwtSecret) {
7
- const socketMap = /* @__PURE__ */ new Map();
8
- async function processRequest(serviceSocket, uuid, message) {
9
- try {
10
- if (message.name.includes(".") && Array.isArray(message.body)) {
11
- const [serviceName, methodName] = message.name.split(".");
12
- const result = await runMethod({
13
- serviceName,
14
- methodName,
15
- params: message.body,
16
- socket: serviceSocket
17
- });
18
- return await serviceSocket.send(uuid, { name: "response", body: result });
19
- } else if (message.name === "evt:add") {
20
- const { key, name, info } = message.body;
21
- serviceSocket.addListener(key, name, info);
22
- return await serviceSocket.send(uuid, { name: "response" });
23
- } else if (message.name === "evt:remove") {
24
- const { key } = message.body;
25
- serviceSocket.removeListener(key);
26
- return await serviceSocket.send(uuid, { name: "response" });
27
- } else if (message.name === "evt:gets") {
28
- const { name } = message.body;
29
- const infos = Array.from(socketMap.values()).flatMap(
30
- (subSock) => subSock.getEventListeners(name)
31
- );
32
- return await serviceSocket.send(uuid, { name: "response", body: infos });
33
- } else if (message.name === "evt:emit") {
34
- const { keys, data } = message.body;
35
- for (const subSock of socketMap.values()) {
36
- const targetKeys = subSock.filterEventTargetKeys(keys);
37
- if (targetKeys.length > 0) {
38
- await subSock.send(uuid, {
39
- name: "evt:on",
40
- body: {
41
- keys: targetKeys,
42
- data
43
- }
44
- });
45
- }
6
+ /**
7
+ * WebSocket 핸들러 인스턴스를 생성한다
8
+ *
9
+ * 여러 WebSocket 연결을 관리하고, 메시지를 서비스로 라우팅하며,
10
+ * 이벤트 브로드캐스팅을 처리한다.
11
+ */
12
+ export function createWebSocketHandler(runMethod, jwtSecret) {
13
+ // -------------------------------------------------------------------
14
+ // 상태
15
+ // -------------------------------------------------------------------
16
+ const socketMap = new Map();
17
+ // -------------------------------------------------------------------
18
+ // 헬퍼
19
+ // -------------------------------------------------------------------
20
+ async function processRequest(serviceSocket, uuid, message) {
21
+ try {
22
+ if (message.name.includes(".") && Array.isArray(message.body)) {
23
+ const dotIndex = message.name.indexOf(".");
24
+ const serviceName = message.name.substring(0, dotIndex);
25
+ const methodName = message.name.substring(dotIndex + 1);
26
+ const result = await runMethod({
27
+ serviceName,
28
+ methodName,
29
+ params: message.body,
30
+ socket: serviceSocket,
31
+ });
32
+ return await serviceSocket.send(uuid, { name: "response", body: result });
33
+ }
34
+ else if (message.name === "evt:add") {
35
+ const { key, name, info } = message.body;
36
+ serviceSocket.addListener(key, name, info);
37
+ return await serviceSocket.send(uuid, { name: "response" });
38
+ }
39
+ else if (message.name === "evt:remove") {
40
+ const { key } = message.body;
41
+ serviceSocket.removeListener(key);
42
+ return await serviceSocket.send(uuid, { name: "response" });
43
+ }
44
+ else if (message.name === "evt:gets") {
45
+ const { name } = message.body;
46
+ const infos = Array.from(socketMap.values()).flatMap((subSock) => subSock.getEventListeners(name));
47
+ return await serviceSocket.send(uuid, { name: "response", body: infos });
48
+ }
49
+ else if (message.name === "evt:emit") {
50
+ const { keys, data } = message.body;
51
+ await Promise.allSettled(Array.from(socketMap.values()).map(async (subSock) => {
52
+ const targetKeys = subSock.filterEventTargetKeys(keys);
53
+ if (targetKeys.length > 0) {
54
+ await subSock.send(uuid, {
55
+ name: "evt:on",
56
+ body: { keys: targetKeys, data },
57
+ });
58
+ }
59
+ }));
60
+ return await serviceSocket.send(uuid, { name: "response" });
61
+ }
62
+ else if (message.name === "auth") {
63
+ if (jwtSecret == null)
64
+ throw new Error("JWT Secret이 정의되지 않았습니다.");
65
+ const token = message.body;
66
+ serviceSocket.authTokenPayload = await verifyJwt(jwtSecret, token);
67
+ return await serviceSocket.send(uuid, { name: "response" });
68
+ }
69
+ else {
70
+ const err = new Error("유효하지 않은 요청입니다.");
71
+ return await serviceSocket.send(uuid, {
72
+ name: "error",
73
+ body: {
74
+ name: err.name,
75
+ message: err.message,
76
+ ...(env.DEV ? { stack: err.stack } : {}),
77
+ code: "BAD_MESSAGE",
78
+ },
79
+ });
80
+ }
46
81
  }
47
- return await serviceSocket.send(uuid, { name: "response" });
48
- } else if (message.name === "auth") {
49
- if (jwtSecret == null) throw new Error("JWT Secret is not defined.");
50
- const token = message.body;
51
- serviceSocket.authTokenPayload = await verifyJwt(jwtSecret, token);
52
- return await serviceSocket.send(uuid, { name: "response" });
53
- } else {
54
- const err = new Error("Invalid request.");
55
- return await serviceSocket.send(uuid, {
56
- name: "error",
57
- body: {
58
- name: err.name,
59
- message: err.message,
60
- stack: err.stack,
61
- code: "BAD_MESSAGE"
62
- }
63
- });
64
- }
65
- } catch (err) {
66
- const error = err instanceof Error ? err : new Error(typeof err === "string" ? err : "An unknown error has occurred.");
67
- return serviceSocket.send(uuid, {
68
- name: "error",
69
- body: {
70
- name: error.name,
71
- message: error.message,
72
- code: "INTERNAL_ERROR",
73
- stack: error.stack
82
+ catch (err) {
83
+ const error = err instanceof Error
84
+ ? err
85
+ : new Error(typeof err === "string" ? err : "알 수 없는 에러가 발생했습니다.");
86
+ return serviceSocket.send(uuid, {
87
+ name: "error",
88
+ body: {
89
+ name: error.name,
90
+ message: error.message,
91
+ code: "INTERNAL_ERROR",
92
+ ...(env.DEV ? { stack: error.stack } : {}),
93
+ },
94
+ });
74
95
  }
75
- });
76
96
  }
77
- }
78
- return {
79
- addSocket(socket, clientId, clientName, connReq) {
80
- try {
81
- const serviceSocket = createServiceSocket(socket, clientId, clientName, connReq);
82
- const prevServiceSocket = socketMap.get(clientId);
83
- if (prevServiceSocket != null) {
84
- prevServiceSocket.close();
85
- const connectionDateTimeText = prevServiceSocket.connectedAtDateTime.toFormatString("yyyy:MM:dd HH:mm:ss.fff");
86
- logger.debug(
87
- `Disconnected previous client connection: ${clientId}: ${connectionDateTimeText}`
88
- );
89
- }
90
- socketMap.set(clientId, serviceSocket);
91
- serviceSocket.on("close", (code) => {
92
- logger.debug(`Client disconnected: (code: ${code})`);
93
- if (socketMap.get(clientId) !== serviceSocket) return;
94
- socketMap.delete(clientId);
95
- });
96
- serviceSocket.on("message", async ({ uuid, msg }) => {
97
- logger.debug("Request received", msg);
98
- const sentSize = await processRequest(serviceSocket, uuid, msg);
99
- logger.debug(`Response sent (size: ${sentSize})`);
100
- });
101
- logger.debug("Client connected", {
102
- clientId,
103
- remoteAddress: connReq.socket.remoteAddress,
104
- socketSize: socketMap.size
105
- });
106
- } catch (err) {
107
- logger.error("Error handling connection", err);
108
- socket.terminate();
109
- }
110
- },
111
- closeAll() {
112
- for (const serviceSocket of socketMap.values()) {
113
- serviceSocket.close();
114
- }
115
- },
116
- async broadcastReload(clientName, changedFileSet) {
117
- for (const serviceSocket of socketMap.values()) {
118
- await serviceSocket.send(Uuid.generate().toString(), {
119
- name: "reload",
120
- body: {
121
- clientName,
122
- changedFileSet
123
- }
124
- });
125
- }
126
- },
127
- async emit(eventDef, infoSelector, data) {
128
- const eventName = eventDef.eventName;
129
- const targetKeys = Array.from(socketMap.values()).flatMap((subSock) => subSock.getEventListeners(eventName)).filter((item) => infoSelector(item.info)).map((item) => item.key);
130
- for (const subSock of socketMap.values()) {
131
- const subTargetKeys = subSock.filterEventTargetKeys(targetKeys);
132
- if (subTargetKeys.length > 0) {
133
- await subSock.send(Uuid.generate().toString(), {
134
- name: "evt:on",
135
- body: {
136
- keys: subTargetKeys,
137
- data
97
+ // -------------------------------------------------------------------
98
+ // 공개 API
99
+ // -------------------------------------------------------------------
100
+ return {
101
+ addSocket(socket, clientId, clientName, connReq) {
102
+ try {
103
+ const serviceSocket = createServiceSocket(socket, clientId, clientName, connReq);
104
+ // 기존 연결 해제
105
+ const prevServiceSocket = socketMap.get(clientId);
106
+ if (prevServiceSocket != null) {
107
+ prevServiceSocket.close();
108
+ const connectionDateTimeText = prevServiceSocket.connectedAtDateTime.toFormatString("yyyy:MM:dd HH:mm:ss.fff");
109
+ logger.debug(`이전 클라이언트 연결 해제됨: ${clientId}: ${connectionDateTimeText}`);
110
+ }
111
+ socketMap.set(clientId, serviceSocket);
112
+ serviceSocket.on("close", (code) => {
113
+ logger.debug(`클라이언트 연결 해제됨: (code: ${code})`);
114
+ if (socketMap.get(clientId) !== serviceSocket)
115
+ return;
116
+ socketMap.delete(clientId);
117
+ });
118
+ serviceSocket.on("message", async ({ uuid, msg }) => {
119
+ logger.debug("요청 수신됨", msg);
120
+ const sentSize = await processRequest(serviceSocket, uuid, msg);
121
+ logger.debug(`응답 전송됨 (크기: ${sentSize})`);
122
+ });
123
+ logger.debug("클라이언트 연결됨", {
124
+ clientId,
125
+ remoteAddress: connReq.socket.remoteAddress,
126
+ socketSize: socketMap.size,
127
+ });
138
128
  }
139
- });
140
- }
141
- }
142
- }
143
- };
129
+ catch (err) {
130
+ logger.error("연결 처리 중 에러 발생", err);
131
+ socket.terminate();
132
+ }
133
+ },
134
+ closeAll() {
135
+ for (const serviceSocket of socketMap.values()) {
136
+ serviceSocket.close();
137
+ }
138
+ },
139
+ async emit(eventDef, infoSelector, data) {
140
+ const eventName = eventDef.eventName;
141
+ const targetKeys = Array.from(socketMap.values())
142
+ .flatMap((subSock) => subSock.getEventListeners(eventName))
143
+ .filter((item) => infoSelector(item.info))
144
+ .map((item) => item.key);
145
+ await Promise.allSettled(Array.from(socketMap.values()).map(async (subSock) => {
146
+ const subTargetKeys = subSock.filterEventTargetKeys(targetKeys);
147
+ if (subTargetKeys.length > 0) {
148
+ await subSock.send(Uuid.generate().toString(), {
149
+ name: "evt:on",
150
+ body: { keys: subTargetKeys, data },
151
+ });
152
+ }
153
+ }));
154
+ },
155
+ };
144
156
  }
145
- export {
146
- createWebSocketHandler
147
- };
148
- //# sourceMappingURL=websocket-handler.js.map
157
+ //# sourceMappingURL=websocket-handler.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/transport/socket/websocket-handler.ts"],
4
- "mappings": "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",
5
- "names": []
6
- }
1
+ {"version":3,"file":"websocket-handler.js","sourceRoot":"","sources":["..\\..\\..\\src\\transport\\socket\\websocket-handler.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ export interface ServiceServerOptions {
8
8
  };
9
9
  auth?: {
10
10
  jwtSecret: string;
11
- };
11
+ } | false;
12
12
  services: ServiceDefinition[];
13
13
  }
14
14
  //# sourceMappingURL=server-options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-options.d.ts","sourceRoot":"","sources":["..\\..\\src\\types\\server-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE;QACJ,QAAQ,EAAE,UAAU,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B"}
1
+ {"version":3,"file":"server-options.d.ts","sourceRoot":"","sources":["..\\..\\src\\types\\server-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE;QACJ,QAAQ,EAAE,UAAU,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,KAAK,CAAC;IACV,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B"}
@@ -1 +1,2 @@
1
- //# sourceMappingURL=server-options.js.map
1
+ export {};
2
+ //# sourceMappingURL=server-options.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "mappings": "",
5
- "names": []
6
- }
1
+ {"version":3,"file":"server-options.js","sourceRoot":"","sources":["..\\..\\src\\types\\server-options.ts"],"names":[],"mappings":""}
@@ -3,57 +3,59 @@ import { fsx, FsWatcher } from "@simplysm/core-node";
3
3
  import path from "path";
4
4
  import consola from "consola";
5
5
  const logger = consola.withTag("service-server:ConfigManager");
6
+ // 값: 설정 객체, 키: 파일 경로
6
7
  const _cache = new LazyGcMap({
7
- gcInterval: 10 * 60 * 1e3,
8
- // Every 10 minutes
9
- expireTime: 60 * 60 * 1e3,
10
- // Expire after 1 hour
11
- onExpire: async (filePath) => {
12
- logger.debug(`Config cache expired and watcher released: ${path.basename(filePath)}`);
13
- await closeWatcher(filePath);
14
- }
8
+ gcInterval: 10 * 60 * 1000, // 10분마다
9
+ expireTime: 60 * 60 * 1000, // 1시간 만료
10
+ onExpire: async (filePath) => {
11
+ logger.debug(`설정 캐시 만료 워처 해제됨: ${path.basename(filePath)}`);
12
+ await closeWatcher(filePath);
13
+ },
15
14
  });
16
- const _watchers = /* @__PURE__ */ new Map();
17
- async function getConfig(filePath) {
18
- if (_cache.has(filePath)) {
19
- return _cache.get(filePath);
20
- }
21
- if (!await fsx.exists(filePath)) return void 0;
22
- const config = await fsx.readJson(filePath);
23
- _cache.set(filePath, config);
24
- if (!_watchers.has(filePath)) {
25
- try {
26
- const watcher = await FsWatcher.watch([filePath]);
27
- _watchers.set(filePath, watcher);
28
- watcher.onChange({ delay: 100 }, async () => {
29
- if (!await fsx.exists(filePath)) {
30
- _cache.delete(filePath);
31
- await closeWatcher(filePath);
32
- logger.debug(`Config file deleted: ${path.basename(filePath)}`);
33
- return;
34
- }
15
+ const _watchers = new Map();
16
+ export async function getConfig(filePath) {
17
+ // 1. 캐시 히트 (시간 자동 갱신)
18
+ if (_cache.has(filePath)) {
19
+ return _cache.get(filePath);
20
+ }
21
+ if (!(await fsx.exists(filePath)))
22
+ return undefined;
23
+ // 2. 로드 및 캐시
24
+ const config = await fsx.readJson(filePath);
25
+ _cache.set(filePath, config);
26
+ // 3. 워처 등록
27
+ if (!_watchers.has(filePath)) {
35
28
  try {
36
- const newConfig = await fsx.readJson(filePath);
37
- _cache.set(filePath, newConfig);
38
- logger.debug(`Config file live-reloaded: ${path.basename(filePath)}`);
39
- } catch (err) {
40
- logger.warn(`Config file reload failed: ${filePath}`, err);
29
+ const watcher = await FsWatcher.watch([filePath]);
30
+ _watchers.set(filePath, watcher);
31
+ watcher.onChange({ delay: 100 }, async () => {
32
+ if (!(await fsx.exists(filePath))) {
33
+ _cache.delete(filePath);
34
+ await closeWatcher(filePath);
35
+ logger.debug(`설정 파일 삭제됨: ${path.basename(filePath)}`);
36
+ return;
37
+ }
38
+ try {
39
+ const newConfig = await fsx.readJson(filePath);
40
+ _cache.set(filePath, newConfig);
41
+ logger.debug(`설정 파일 실시간 리로드됨: ${path.basename(filePath)}`);
42
+ }
43
+ catch (err) {
44
+ logger.warn(`설정 파일 리로드 실패: ${filePath}`, err);
45
+ }
46
+ });
47
+ }
48
+ catch (err) {
49
+ logger.error(`워치 실패: ${filePath}`, err);
41
50
  }
42
- });
43
- } catch (err) {
44
- logger.error(`Watch failed: ${filePath}`, err);
45
51
  }
46
- }
47
- return config;
52
+ return config;
48
53
  }
49
54
  async function closeWatcher(filePath) {
50
- const watcher = _watchers.get(filePath);
51
- if (watcher != null) {
52
- await watcher.close();
53
- _watchers.delete(filePath);
54
- }
55
+ const watcher = _watchers.get(filePath);
56
+ if (watcher != null) {
57
+ await watcher.close();
58
+ _watchers.delete(filePath);
59
+ }
55
60
  }
56
- export {
57
- getConfig
58
- };
59
- //# sourceMappingURL=config-manager.js.map
61
+ //# sourceMappingURL=config-manager.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/config-manager.ts"],
4
- "mappings": "AAAA,SAAS,iBAAiB;AAC1B,SAAS,KAAK,iBAAiB;AAC/B,OAAO,UAAU;AACjB,OAAO,aAAa;AAEpB,MAAM,SAAS,QAAQ,QAAQ,8BAA8B;AAG7D,MAAM,SAAS,IAAI,UAA2B;AAAA,EAC5C,YAAY,KAAK,KAAK;AAAA;AAAA,EACtB,YAAY,KAAK,KAAK;AAAA;AAAA,EACtB,UAAU,OAAO,aAAa;AAC5B,WAAO,MAAM,8CAA8C,KAAK,SAAS,QAAQ,CAAC,EAAE;AACpF,UAAM,aAAa,QAAQ;AAAA,EAC7B;AACF,CAAC;AAED,MAAM,YAAY,oBAAI,IAAuB;AAE7C,eAAsB,UAAmB,UAAgD;AAEvF,MAAI,OAAO,IAAI,QAAQ,GAAG;AACxB,WAAO,OAAO,IAAI,QAAQ;AAAA,EAC5B;AAEA,MAAI,CAAE,MAAM,IAAI,OAAO,QAAQ,EAAI,QAAO;AAG1C,QAAM,SAAS,MAAM,IAAI,SAAS,QAAQ;AAC1C,SAAO,IAAI,UAAU,MAAM;AAG3B,MAAI,CAAC,UAAU,IAAI,QAAQ,GAAG;AAC5B,QAAI;AACF,YAAM,UAAU,MAAM,UAAU,MAAM,CAAC,QAAQ,CAAC;AAChD,gBAAU,IAAI,UAAU,OAAO;AAE/B,cAAQ,SAAS,EAAE,OAAO,IAAI,GAAG,YAAY;AAC3C,YAAI,CAAE,MAAM,IAAI,OAAO,QAAQ,GAAI;AACjC,iBAAO,OAAO,QAAQ;AACtB,gBAAM,aAAa,QAAQ;AAC3B,iBAAO,MAAM,wBAAwB,KAAK,SAAS,QAAQ,CAAC,EAAE;AAC9D;AAAA,QACF;AAEA,YAAI;AACF,gBAAM,YAAY,MAAM,IAAI,SAAS,QAAQ;AAC7C,iBAAO,IAAI,UAAU,SAAS;AAC9B,iBAAO,MAAM,8BAA8B,KAAK,SAAS,QAAQ,CAAC,EAAE;AAAA,QACtE,SAAS,KAAK;AACZ,iBAAO,KAAK,8BAA8B,QAAQ,IAAI,GAAG;AAAA,QAC3D;AAAA,MACF,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,aAAO,MAAM,iBAAiB,QAAQ,IAAI,GAAG;AAAA,IAC/C;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAe,aAAa,UAAkB;AAC5C,QAAM,UAAU,UAAU,IAAI,QAAQ;AACtC,MAAI,WAAW,MAAM;AACnB,UAAM,QAAQ,MAAM;AACpB,cAAU,OAAO,QAAQ;AAAA,EAC3B;AACF;",
5
- "names": []
6
- }
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["..\\..\\src\\utils\\config-manager.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,12 @@
1
1
  import { createWorker } from "@simplysm/core-node";
2
2
  import { createServiceProtocol } from "@simplysm/service-common";
3
3
  const protocol = createServiceProtocol();
4
- var service_protocol_worker_default = createWorker({
5
- encode: (uuid, message) => {
6
- return protocol.encode(uuid, message);
7
- },
8
- decode: (bytes) => {
9
- return protocol.decode(bytes);
10
- }
4
+ export default createWorker({
5
+ encode: (uuid, message) => {
6
+ return protocol.encode(uuid, message);
7
+ },
8
+ decode: (bytes) => {
9
+ return protocol.decode(bytes);
10
+ },
11
11
  });
12
- export {
13
- service_protocol_worker_default as default
14
- };
15
- //# sourceMappingURL=service-protocol.worker.js.map
12
+ //# sourceMappingURL=service-protocol.worker.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/workers/service-protocol.worker.ts"],
4
- "mappings": "AAAA,SAAS,oBAAoB;AAG7B,SAAS,6BAA6B;AAEtC,MAAM,WAAW,sBAAsB;AAEvC,IAAO,kCAAQ,aAAa;AAAA,EAC1B,QAAQ,CAAC,MAAc,YAAoE;AACzF,WAAO,SAAS,OAAO,MAAM,OAAO;AAAA,EACtC;AAAA,EACA,QAAQ,CAAC,UAA6D;AACpE,WAAO,SAAS,OAAO,KAAK;AAAA,EAC9B;AACF,CAAC;",
5
- "names": []
6
- }
1
+ {"version":3,"file":"service-protocol.worker.js","sourceRoot":"","sources":["..\\..\\src\\workers\\service-protocol.worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC;AAEzC,eAAe,YAAY,CAAC;IAC1B,MAAM,EAAE,CAAC,IAAY,EAAE,OAAuB,EAA0C,EAAE;QACxF,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,EAAE,CAAC,KAAY,EAA8C,EAAE;QACnE,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACF,CAAC,CAAC"}
package/docs/auth.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Auth
2
2
 
3
- JWT-based authentication utilities using the `jose` library (HS256 algorithm).
3
+ JWT authentication utilities for signing, verifying, and decoding tokens.
4
4
 
5
- ## `AuthTokenPayload`
5
+ ## AuthTokenPayload\<TAuthInfo\>
6
6
 
7
- JWT token payload with roles and custom data. Extends `JWTPayload` from `jose`.
7
+ JWT token payload extending the standard `JWTPayload` with role-based access and custom data.
8
8
 
9
- ```typescript
9
+ ```ts
10
10
  interface AuthTokenPayload<TAuthInfo = unknown> extends JWTPayload {
11
11
  roles: string[];
12
12
  data: TAuthInfo;
@@ -15,14 +15,16 @@ interface AuthTokenPayload<TAuthInfo = unknown> extends JWTPayload {
15
15
 
16
16
  | Field | Type | Description |
17
17
  |-------|------|-------------|
18
- | `roles` | `string[]` | User roles for permission checking |
19
- | `data` | `TAuthInfo` | Custom auth data (user info, etc.) |
18
+ | `roles` | `string[]` | Role names for permission checking |
19
+ | `data` | `TAuthInfo` | Custom authentication data (e.g., user info) |
20
20
 
21
- ## `signJwt`
21
+ Inherits all standard JWT fields from `JWTPayload` (e.g., `iss`, `sub`, `aud`, `exp`, `nbf`, `iat`, `jti`).
22
22
 
23
- Sign a JWT token with HS256 algorithm. Token expires in 12 hours.
23
+ ## signJwt
24
24
 
25
- ```typescript
25
+ Sign a JWT token with the given secret and payload.
26
+
27
+ ```ts
26
28
  async function signJwt<TAuthInfo = unknown>(
27
29
  jwtSecret: string,
28
30
  payload: AuthTokenPayload<TAuthInfo>,
@@ -32,13 +34,15 @@ async function signJwt<TAuthInfo = unknown>(
32
34
  | Parameter | Type | Description |
33
35
  |-----------|------|-------------|
34
36
  | `jwtSecret` | `string` | Secret key for signing |
35
- | `payload` | `AuthTokenPayload<TAuthInfo>` | Token payload |
37
+ | `payload` | `AuthTokenPayload<TAuthInfo>` | Token payload with roles and data |
38
+
39
+ Returns the signed JWT string.
36
40
 
37
- ## `verifyJwt`
41
+ ## verifyJwt
38
42
 
39
- Verify and decode a JWT token. Throws on expired or invalid tokens.
43
+ Verify a JWT token and return its payload. Throws if the token is invalid or expired.
40
44
 
41
- ```typescript
45
+ ```ts
42
46
  async function verifyJwt<TAuthInfo = unknown>(
43
47
  jwtSecret: string,
44
48
  token: string,
@@ -50,10 +54,18 @@ async function verifyJwt<TAuthInfo = unknown>(
50
54
  | `jwtSecret` | `string` | Secret key for verification |
51
55
  | `token` | `string` | JWT token string |
52
56
 
53
- ## `decodeJwt`
57
+ Returns the decoded and verified `AuthTokenPayload`.
54
58
 
55
- Decode a JWT token without verification (for reading payload only).
59
+ ## decodeJwt
56
60
 
57
- ```typescript
61
+ Decode a JWT token without verification. Useful for inspecting token contents without validating the signature.
62
+
63
+ ```ts
58
64
  function decodeJwt<TAuthInfo = unknown>(token: string): AuthTokenPayload<TAuthInfo>;
59
65
  ```
66
+
67
+ | Parameter | Type | Description |
68
+ |-----------|------|-------------|
69
+ | `token` | `string` | JWT token string |
70
+
71
+ Returns the decoded `AuthTokenPayload` (unverified).