@simplysm/service-server 13.0.0-beta.46 → 13.0.0-beta.48

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 (85) hide show
  1. package/README.md +84 -32
  2. package/dist/auth/auth-token-payload.js.map +0 -1
  3. package/dist/auth/jwt-manager.js.map +0 -1
  4. package/dist/core/define-service.d.ts +67 -0
  5. package/dist/core/define-service.d.ts.map +1 -0
  6. package/dist/core/define-service.js +70 -0
  7. package/dist/core/define-service.js.map +6 -0
  8. package/dist/core/service-executor.d.ts.map +1 -1
  9. package/dist/core/service-executor.js +12 -13
  10. package/dist/core/service-executor.js.map +1 -2
  11. package/dist/index.d.ts +1 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1 -2
  14. package/dist/index.js.map +1 -2
  15. package/dist/legacy/v1-auto-update-handler.d.ts +3 -2
  16. package/dist/legacy/v1-auto-update-handler.d.ts.map +1 -1
  17. package/dist/legacy/v1-auto-update-handler.js +3 -3
  18. package/dist/legacy/v1-auto-update-handler.js.map +1 -2
  19. package/dist/protocol/protocol-wrapper.js.map +0 -1
  20. package/dist/service-server.d.ts +3 -3
  21. package/dist/service-server.d.ts.map +1 -1
  22. package/dist/service-server.js +18 -7
  23. package/dist/service-server.js.map +1 -2
  24. package/dist/services/auto-update-service.d.ts +4 -4
  25. package/dist/services/auto-update-service.d.ts.map +1 -1
  26. package/dist/services/auto-update-service.js +5 -5
  27. package/dist/services/auto-update-service.js.map +1 -2
  28. package/dist/services/crypto-service.d.ts +4 -5
  29. package/dist/services/crypto-service.d.ts.map +1 -1
  30. package/dist/services/crypto-service.js +8 -11
  31. package/dist/services/crypto-service.js.map +1 -2
  32. package/dist/services/orm-service.d.ts +5 -9
  33. package/dist/services/orm-service.d.ts.map +1 -1
  34. package/dist/services/orm-service.js +122 -171
  35. package/dist/services/orm-service.js.map +1 -2
  36. package/dist/services/smtp-service.d.ts +6 -5
  37. package/dist/services/smtp-service.d.ts.map +1 -1
  38. package/dist/services/smtp-service.js +22 -19
  39. package/dist/services/smtp-service.js.map +1 -2
  40. package/dist/transport/http/http-request-handler.js.map +0 -1
  41. package/dist/transport/http/static-file-handler.js.map +0 -1
  42. package/dist/transport/http/upload-handler.js.map +0 -1
  43. package/dist/transport/socket/service-socket.js.map +0 -1
  44. package/dist/transport/socket/websocket-handler.d.ts +2 -3
  45. package/dist/transport/socket/websocket-handler.d.ts.map +1 -1
  46. package/dist/transport/socket/websocket-handler.js +2 -2
  47. package/dist/transport/socket/websocket-handler.js.map +1 -2
  48. package/dist/types/server-options.d.ts +2 -3
  49. package/dist/types/server-options.d.ts.map +1 -1
  50. package/dist/types/server-options.js.map +0 -1
  51. package/dist/utils/config-manager.js.map +0 -1
  52. package/dist/workers/service-protocol.worker.js.map +0 -1
  53. package/docs/authentication.md +35 -39
  54. package/docs/built-in-services.md +9 -9
  55. package/docs/server.md +68 -54
  56. package/docs/transport.md +7 -9
  57. package/package.json +7 -6
  58. package/src/auth/auth-token-payload.ts +6 -0
  59. package/src/auth/jwt-manager.ts +44 -0
  60. package/src/core/define-service.ts +159 -0
  61. package/src/core/service-executor.ts +68 -0
  62. package/src/index.ts +37 -0
  63. package/src/legacy/v1-auto-update-handler.ts +67 -0
  64. package/src/protocol/protocol-wrapper.ts +75 -0
  65. package/src/service-server.ts +249 -0
  66. package/src/services/auto-update-service.ts +53 -0
  67. package/src/services/crypto-service.ts +36 -0
  68. package/src/services/orm-service.ts +176 -0
  69. package/src/services/smtp-service.ts +59 -0
  70. package/src/transport/http/http-request-handler.ts +69 -0
  71. package/src/transport/http/static-file-handler.ts +66 -0
  72. package/src/transport/http/upload-handler.ts +87 -0
  73. package/src/transport/socket/service-socket.ts +136 -0
  74. package/src/transport/socket/websocket-handler.ts +180 -0
  75. package/src/types/server-options.ts +14 -0
  76. package/src/utils/config-manager.ts +70 -0
  77. package/src/workers/service-protocol.worker.ts +15 -0
  78. package/dist/auth/auth.decorators.d.ts +0 -19
  79. package/dist/auth/auth.decorators.d.ts.map +0 -1
  80. package/dist/auth/auth.decorators.js +0 -46
  81. package/dist/auth/auth.decorators.js.map +0 -7
  82. package/dist/core/service-base.d.ts +0 -19
  83. package/dist/core/service-base.d.ts.map +0 -1
  84. package/dist/core/service-base.js +0 -47
  85. package/dist/core/service-base.js.map +0 -7
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/service-server.ts"],
4
- "sourcesContent": ["import type { ServiceEventListener } from \"@simplysm/service-common\";\nimport { StaticFileHandler } from \"./transport/http/static-file-handler\";\nimport { HttpRequestHandler } from \"./transport/http/http-request-handler\";\nimport { ServiceExecutor } from \"./core/service-executor\";\nimport type { Type } from \"@simplysm/core-common\";\nimport { jsonStringify, jsonParse, EventEmitter, env } from \"@simplysm/core-common\";\nimport type { FastifyInstance, FastifyRequest } from \"fastify\";\nimport fastify from \"fastify\";\nimport fastifyWebsocket from \"@fastify/websocket\";\nimport fastifyStatic from \"@fastify/static\";\nimport fastifyMultipart from \"@fastify/multipart\";\nimport fastifyHelmet from \"@fastify/helmet\";\nimport fastifyCors from \"@fastify/cors\";\nimport path from \"path\";\nimport { Buffer } from \"node:buffer\";\nimport { UploadHandler } from \"./transport/http/upload-handler\";\nimport { WebSocketHandler } from \"./transport/socket/websocket-handler\";\nimport type { WebSocket } from \"ws\";\nimport { JwtManager } from \"./auth/jwt-manager\";\nimport type { AuthTokenPayload } from \"./auth/auth-token-payload\";\nimport type { ServiceServerOptions } from \"./types/server-options\";\nimport { handleV1Connection } from \"./legacy/v1-auto-update-handler\";\nimport { AutoUpdateService } from \"./services/auto-update-service\";\nimport consola from \"consola\";\n\nconst logger = consola.withTag(\"service-server:ServiceServer\");\n\nexport class ServiceServer<TAuthInfo = unknown> extends EventEmitter<{\n ready: void;\n close: void;\n}> {\n isOpen = false;\n\n private readonly _serviceExecutor = new ServiceExecutor(this);\n private readonly _jwt = new JwtManager<TAuthInfo>(this);\n\n private readonly _httpRequestHandler = new HttpRequestHandler(this, this._serviceExecutor, this._jwt);\n private readonly _staticFileHandler = new StaticFileHandler(this);\n private readonly _uploadHandler = new UploadHandler(this, this._jwt);\n\n private readonly _wsHandler = new WebSocketHandler(this._serviceExecutor, this._jwt);\n\n readonly fastify: FastifyInstance;\n\n constructor(readonly options: ServiceServerOptions) {\n super();\n\n // SSL \uC124\uC815 (\uB3D9\uAE30)\n // Note: Fastify HTTPS \uC124\uC815\uC740 Buffer \uD0C0\uC785\uC744 \uC694\uAD6C\uD568 (Uint8Array \uC9C1\uC811 \uC0AC\uC6A9 \uBD88\uAC00)\n const httpsConf = options.ssl\n ? { pfx: Buffer.from(options.ssl.pfxBytes), passphrase: options.ssl.passphrase }\n : null;\n\n this.fastify = fastify({ https: httpsConf });\n }\n\n async listen(): Promise<void> {\n logger.info(`\uC11C\uBC84 \uC2DC\uC791... ${env.VER ?? \"\"}`);\n\n // Websocket \uD50C\uB7EC\uADF8\uC778\n await this.fastify.register(fastifyWebsocket);\n\n // \uBCF4\uC548 \uD50C\uB7EC\uADF8\uC778\n await this.fastify.register(fastifyHelmet, {\n global: true,\n contentSecurityPolicy: {\n directives: {\n ...fastifyHelmet.contentSecurityPolicy.getDefaultDirectives(),\n \"default-src\": [\"'self'\", \"data:\", \"blob:\", \"*\"],\n \"script-src-attr\": [\"'unsafe-inline'\"],\n \"script-src\": [\"'self'\", \"'unsafe-inline'\", \"data:\", \"blob:\", \"*\"],\n ...(this.options.ssl != null\n ? {}\n : {\n \"upgrade-insecure-requests\": null,\n }),\n },\n },\n hsts: this.options.ssl != null,\n crossOriginOpenerPolicy: this.options.ssl != null,\n originAgentCluster: false,\n });\n\n // \uC5C5\uB85C\uB4DC \uD50C\uB7EC\uADF8\uC778\n await this.fastify.register(fastifyMultipart);\n\n // @fastify/static \uB4F1\uB85D\n await this.fastify.register(fastifyStatic, {\n root: path.resolve(this.options.rootPath, \"www\"),\n wildcard: false,\n serve: false,\n });\n\n // CORS \uC124\uC815\n await this.fastify.register(fastifyCors, {\n origin: (_origin, cb) => {\n cb(null, true);\n },\n allowedHeaders: [\"Content-Type\", \"Authorization\", \"x-sd-client-name\"],\n exposedHeaders: [\"Content-Disposition\", \"Content-Length\"],\n });\n\n // JSON \uD30C\uC11C\n this.fastify.addContentTypeParser(\"application/json\", { parseAs: \"string\" }, (req, body, done) => {\n try {\n const json = jsonParse(body as string);\n done(null, json);\n } catch (err: unknown) {\n const error = err as Error & { statusCode?: number };\n error.statusCode = 400;\n done(error, undefined);\n }\n });\n\n // JSON \uC0DD\uC131\uAE30\n this.fastify.setSerializerCompiler(() => (data) => jsonStringify(data));\n\n // API \uB77C\uC6B0\uD2B8\n this.fastify.all(\"/api/:service/:method\", async (req, reply) => {\n await this._httpRequestHandler.handle(req, reply);\n });\n\n // \uC5C5\uB85C\uB4DC \uB77C\uC6B0\uD2B8\n this.fastify.all(\"/upload\", async (req, reply) => {\n await this._uploadHandler.handle(req, reply);\n });\n\n // WebSocket \uB77C\uC6B0\uD2B8\n const onWebSocketConnected = (socket: WebSocket, req: FastifyRequest) => {\n const { ver, clientId, clientName } = req.query as {\n ver: string | undefined;\n clientId: string | undefined;\n clientName: string | undefined;\n };\n\n if (ver === \"2\") {\n if (clientId == null || clientName == null) {\n socket.close(1008, \"Missing Client ID/NAME\");\n return;\n }\n this._wsHandler.addSocket(socket, clientId, clientName, req);\n } else {\n // V1 \uB808\uAC70\uC2DC \uC9C0\uC6D0 (auto-update\uB9CC)\n const autoUpdateService = new AutoUpdateService();\n autoUpdateService.server = this;\n handleV1Connection(socket, autoUpdateService);\n }\n };\n this.fastify.get(\"/\", { websocket: true }, onWebSocketConnected.bind(this));\n this.fastify.get(\"/ws\", { websocket: true }, onWebSocketConnected.bind(this));\n\n // \uC815\uC801 \uD30C\uC77C \uC640\uC77C\uB4DC\uCE74\uB4DC \uD578\uB4E4\uB7EC\n this.fastify.route({\n method: [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"HEAD\"],\n url: \"/*\",\n handler: async (req, reply) => {\n const urlObj = new URL(req.raw.url!, \"http://localhost\");\n const urlPath = decodeURI(urlObj.pathname.slice(1));\n\n await this._staticFileHandler.handle(req, reply, urlPath);\n },\n });\n\n // HTTP \uC11C\uBC84 \uC218\uC900\uC758 \uC5D0\uB7EC \uD578\uB4E4\uB9C1\n this.fastify.server.on(\"error\", (err) => {\n logger.error(\"HTTP \uC11C\uBC84 \uC624\uB958 \uBC1C\uC0DD\", err);\n });\n\n // \uB9AC\uC2A8\n await this.fastify.listen({ port: this.options.port, host: \"0.0.0.0\" });\n\n // Graceful Shutdown \uD578\uB4E4\uB7EC \uB4F1\uB85D\n this._registerGracefulShutdown();\n\n this.isOpen = true;\n logger.info(`\uC11C\uBC84 \uC2DC\uC791\uB428 (port: ${this.options.port})`);\n this.emit(\"ready\");\n }\n\n async close(): Promise<void> {\n this._wsHandler.closeAll();\n await this.fastify.close();\n\n this.isOpen = false;\n logger.debug(\"\uC11C\uBC84 \uC885\uB8CC\uB428\");\n this.emit(\"close\");\n }\n\n async broadcastReload(clientName: string | undefined, changedFileSet: Set<string>) {\n logger.debug(\"\uC11C\uBC84\uB0B4 \uBAA8\uB4E0 \uD074\uB77C\uC774\uC5B8\uD2B8 RELOAD \uBA85\uB839 \uC804\uC1A1\");\n await this._wsHandler.broadcastReload(clientName, changedFileSet);\n }\n\n async emitEvent<T extends ServiceEventListener<unknown, unknown>>(\n eventType: Type<T>,\n infoSelector: (item: T[\"$info\"]) => boolean,\n data: T[\"$data\"],\n ) {\n await this._wsHandler.emitToServer(eventType, infoSelector, data);\n }\n\n async generateAuthToken(payload: AuthTokenPayload<TAuthInfo>) {\n return this._jwt.sign(payload);\n }\n\n async verifyAuthToken(token: string): Promise<AuthTokenPayload<TAuthInfo>> {\n return this._jwt.verify(token);\n }\n\n private _registerGracefulShutdown() {\n const shutdownHandler = async (signal: string) => {\n logger.info(`${signal} \uC2DC\uADF8\uB110 \uAC10\uC9C0. \uC11C\uBC84 \uC885\uB8CC \uD504\uB85C\uC138\uC2A4 \uC2DC\uC791...`);\n\n const forceExitTimer = setTimeout(() => {\n logger.error(\"\uC11C\uBC84 \uC885\uB8CC \uC2DC\uAC04 \uCD08\uACFC (10\uCD08). \uAC15\uC81C \uC885\uB8CC\uD569\uB2C8\uB2E4.\");\n process.exit(1);\n }, 10000);\n\n try {\n if (this.isOpen) {\n await this.close();\n }\n logger.info(\"\uC11C\uBC84\uAC00 \uC548\uC804\uD558\uAC8C \uC885\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\");\n clearTimeout(forceExitTimer);\n process.exit(0);\n } catch (err) {\n logger.error(\"\uC11C\uBC84 \uC885\uB8CC \uC911 \uC624\uB958 \uBC1C\uC0DD\", err);\n process.exit(1);\n }\n };\n\n process.on(\"SIGINT\", () => shutdownHandler(\"SIGINT\"));\n process.on(\"SIGTERM\", () => shutdownHandler(\"SIGTERM\"));\n }\n}\n"],
5
- "mappings": "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",
4
+ "mappings": "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",
6
5
  "names": []
7
6
  }
@@ -1,9 +1,9 @@
1
- import type { AutoUpdateService as AutoUpdateServiceType } from "@simplysm/service-common";
2
- import { ServiceBase } from "../core/service-base";
3
- export declare class AutoUpdateService extends ServiceBase implements AutoUpdateServiceType {
1
+ import { type ServiceMethods } from "../core/define-service";
2
+ export declare const AutoUpdateService: import("..").ServiceDefinition<{
4
3
  getLastVersion(platform: string): Promise<{
5
4
  version: string;
6
5
  downloadPath: string;
7
6
  } | undefined>;
8
- }
7
+ }>;
8
+ export type AutoUpdateServiceType = ServiceMethods<typeof AutoUpdateService>;
9
9
  //# sourceMappingURL=auto-update-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-update-service.d.ts","sourceRoot":"","sources":["../../src/services/auto-update-service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,qBAAa,iBAAkB,SAAQ,WAAY,YAAW,qBAAqB;IAC3E,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAC3C;QACE,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;KACtB,GACD,SAAS,CACZ;CAsCF"}
1
+ {"version":3,"file":"auto-update-service.d.ts","sourceRoot":"","sources":["../../src/services/auto-update-service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE5E,eAAO,MAAM,iBAAiB;6BACG,MAAM,GAAG,OAAO,CAC3C;QACE,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;KACtB,GACD,SAAS,CACZ;EAsCA,CAAC;AAEJ,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import path from "path";
2
2
  import semver from "semver";
3
3
  import { fsExists, fsReaddir } from "@simplysm/core-node";
4
- import { ServiceBase } from "../core/service-base.js";
5
- class AutoUpdateService extends ServiceBase {
4
+ import { defineService } from "../core/define-service.js";
5
+ const AutoUpdateService = defineService("AutoUpdate", (ctx) => ({
6
6
  async getLastVersion(platform) {
7
- const clientPath = this.clientPath;
7
+ const clientPath = ctx.clientPath;
8
8
  if (clientPath == null) throw new Error("\uD074\uB77C\uC774\uC5B8\uD2B8 \uACBD\uB85C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.");
9
9
  if (!await fsExists(path.resolve(clientPath, platform, "updates"))) return void 0;
10
10
  const updates = await fsReaddir(path.resolve(clientPath, platform, "updates"));
@@ -26,13 +26,13 @@ class AutoUpdateService extends ServiceBase {
26
26
  if (version == null) return void 0;
27
27
  const versionItem = versions.find((item) => item.version === version);
28
28
  if (versionItem == null) return void 0;
29
- const downloadPath = "/" + path.join(this.clientName ?? "", platform, "updates", versionItem.fileName);
29
+ const downloadPath = "/" + path.join(ctx.clientName ?? "", platform, "updates", versionItem.fileName);
30
30
  return {
31
31
  version: version.toString(),
32
32
  downloadPath
33
33
  };
34
34
  }
35
- }
35
+ }));
36
36
  export {
37
37
  AutoUpdateService
38
38
  };
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/services/auto-update-service.ts"],
4
- "sourcesContent": ["import path from \"path\";\nimport semver from \"semver\";\nimport { fsExists, fsReaddir } from \"@simplysm/core-node\";\nimport type { AutoUpdateService as AutoUpdateServiceType } from \"@simplysm/service-common\";\nimport { ServiceBase } from \"../core/service-base\";\n\nexport class AutoUpdateService extends ServiceBase implements AutoUpdateServiceType {\n async getLastVersion(platform: string): Promise<\n | {\n version: string;\n downloadPath: string;\n }\n | undefined\n > {\n const clientPath = this.clientPath;\n if (clientPath == null) throw new Error(\"\uD074\uB77C\uC774\uC5B8\uD2B8 \uACBD\uB85C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\");\n\n if (!(await fsExists(path.resolve(clientPath, platform, \"updates\")))) return undefined;\n\n const updates = await fsReaddir(path.resolve(clientPath, platform, \"updates\"));\n const versions = updates\n .map((item) => ({\n fileName: item,\n version: path.basename(item, path.extname(item)),\n extName: path.extname(item),\n }))\n .filter((item) => {\n if (platform === \"android\") {\n return item.extName === \".apk\" && /^[0-9.]*$/.test(item.version);\n } else {\n return item.extName === \".exe\" && /^[0-9.]*$/.test(item.version);\n }\n });\n\n const version = semver.maxSatisfying(\n versions.map((item) => item.version),\n \"*\",\n );\n\n if (version == null) return undefined;\n\n const versionItem = versions.find((item) => item.version === version);\n if (versionItem == null) return undefined;\n\n const downloadPath = \"/\" + path.join(this.clientName ?? \"\", platform, \"updates\", versionItem.fileName);\n\n return {\n version: version.toString(),\n downloadPath,\n };\n }\n}\n"],
5
- "mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,YAAY;AACnB,SAAS,UAAU,iBAAiB;AAEpC,SAAS,mBAAmB;AAErB,MAAM,0BAA0B,YAA6C;AAAA,EAClF,MAAM,eAAe,UAMnB;AACA,UAAM,aAAa,KAAK;AACxB,QAAI,cAAc,KAAM,OAAM,IAAI,MAAM,iGAAsB;AAE9D,QAAI,CAAE,MAAM,SAAS,KAAK,QAAQ,YAAY,UAAU,SAAS,CAAC,EAAI,QAAO;AAE7E,UAAM,UAAU,MAAM,UAAU,KAAK,QAAQ,YAAY,UAAU,SAAS,CAAC;AAC7E,UAAM,WAAW,QACd,IAAI,CAAC,UAAU;AAAA,MACd,UAAU;AAAA,MACV,SAAS,KAAK,SAAS,MAAM,KAAK,QAAQ,IAAI,CAAC;AAAA,MAC/C,SAAS,KAAK,QAAQ,IAAI;AAAA,IAC5B,EAAE,EACD,OAAO,CAAC,SAAS;AAChB,UAAI,aAAa,WAAW;AAC1B,eAAO,KAAK,YAAY,UAAU,YAAY,KAAK,KAAK,OAAO;AAAA,MACjE,OAAO;AACL,eAAO,KAAK,YAAY,UAAU,YAAY,KAAK,KAAK,OAAO;AAAA,MACjE;AAAA,IACF,CAAC;AAEH,UAAM,UAAU,OAAO;AAAA,MACrB,SAAS,IAAI,CAAC,SAAS,KAAK,OAAO;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,WAAW,KAAM,QAAO;AAE5B,UAAM,cAAc,SAAS,KAAK,CAAC,SAAS,KAAK,YAAY,OAAO;AACpE,QAAI,eAAe,KAAM,QAAO;AAEhC,UAAM,eAAe,MAAM,KAAK,KAAK,KAAK,cAAc,IAAI,UAAU,WAAW,YAAY,QAAQ;AAErG,WAAO;AAAA,MACL,SAAS,QAAQ,SAAS;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACF;",
4
+ "mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,YAAY;AACnB,SAAS,UAAU,iBAAiB;AACpC,SAAS,qBAA0C;AAE5C,MAAM,oBAAoB,cAAc,cAAc,CAAC,SAAS;AAAA,EACrE,MAAM,eAAe,UAMnB;AACA,UAAM,aAAa,IAAI;AACvB,QAAI,cAAc,KAAM,OAAM,IAAI,MAAM,iGAAsB;AAE9D,QAAI,CAAE,MAAM,SAAS,KAAK,QAAQ,YAAY,UAAU,SAAS,CAAC,EAAI,QAAO;AAE7E,UAAM,UAAU,MAAM,UAAU,KAAK,QAAQ,YAAY,UAAU,SAAS,CAAC;AAC7E,UAAM,WAAW,QACd,IAAI,CAAC,UAAU;AAAA,MACd,UAAU;AAAA,MACV,SAAS,KAAK,SAAS,MAAM,KAAK,QAAQ,IAAI,CAAC;AAAA,MAC/C,SAAS,KAAK,QAAQ,IAAI;AAAA,IAC5B,EAAE,EACD,OAAO,CAAC,SAAS;AAChB,UAAI,aAAa,WAAW;AAC1B,eAAO,KAAK,YAAY,UAAU,YAAY,KAAK,KAAK,OAAO;AAAA,MACjE,OAAO;AACL,eAAO,KAAK,YAAY,UAAU,YAAY,KAAK,KAAK,OAAO;AAAA,MACjE;AAAA,IACF,CAAC;AAEH,UAAM,UAAU,OAAO;AAAA,MACrB,SAAS,IAAI,CAAC,SAAS,KAAK,OAAO;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,WAAW,KAAM,QAAO;AAE5B,UAAM,cAAc,SAAS,KAAK,CAAC,SAAS,KAAK,YAAY,OAAO;AACpE,QAAI,eAAe,KAAM,QAAO;AAEhC,UAAM,eAAe,MAAM,KAAK,KAAK,IAAI,cAAc,IAAI,UAAU,WAAW,YAAY,QAAQ;AAEpG,WAAO;AAAA,MACL,SAAS,QAAQ,SAAS;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACF,EAAE;",
6
5
  "names": []
7
6
  }
@@ -1,10 +1,9 @@
1
1
  import type { Bytes } from "@simplysm/core-common";
2
- import type { CryptoService as CryptoServiceType } from "@simplysm/service-common";
3
- import { ServiceBase } from "../core/service-base";
4
- export declare class CryptoService extends ServiceBase implements CryptoServiceType {
2
+ import { type ServiceMethods } from "../core/define-service";
3
+ export declare const CryptoService: import("..").ServiceDefinition<{
5
4
  encrypt(data: string | Bytes): Promise<string>;
6
5
  encryptAes(data: Bytes): Promise<string>;
7
6
  decryptAes(encText: string): Promise<Bytes>;
8
- private _getConf;
9
- }
7
+ }>;
8
+ export type CryptoServiceType = ServiceMethods<typeof CryptoService>;
10
9
  //# sourceMappingURL=crypto-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto-service.d.ts","sourceRoot":"","sources":["../../src/services/crypto-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,KAAK,EAAgB,aAAa,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEjG,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,qBAAa,aAAc,SAAQ,WAAY,YAAW,iBAAiB;IACnE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAK9C,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAUxC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;YAYnC,QAAQ;CAGvB"}
1
+ {"version":3,"file":"crypto-service.d.ts","sourceRoot":"","sources":["../../src/services/crypto-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAInD,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE5E,eAAO,MAAM,aAAa;kBACJ,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;qBAK7B,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;wBAUpB,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;EAWhD,CAAC;AAEJ,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -1,20 +1,20 @@
1
1
  import { bytesConcat, bytesToHex, bytesFromHex } from "@simplysm/core-common";
2
2
  import crypto from "crypto";
3
- import { ServiceBase } from "../core/service-base.js";
4
- class CryptoService extends ServiceBase {
3
+ import { defineService } from "../core/define-service.js";
4
+ const CryptoService = defineService("Crypto", (ctx) => ({
5
5
  async encrypt(data) {
6
- const config = await this._getConf();
6
+ const config = await ctx.getConfig("crypto");
7
7
  return crypto.createHmac("sha256", config.key).update(data).digest("hex");
8
- }
8
+ },
9
9
  async encryptAes(data) {
10
- const config = await this._getConf();
10
+ const config = await ctx.getConfig("crypto");
11
11
  const iv = crypto.randomBytes(16);
12
12
  const cipher = crypto.createCipheriv("aes-256-cbc", config.key, iv);
13
13
  const encrypted = cipher.update(data);
14
14
  return bytesToHex(iv) + ":" + bytesToHex(bytesConcat([encrypted, cipher.final()]));
15
- }
15
+ },
16
16
  async decryptAes(encText) {
17
- const config = await this._getConf();
17
+ const config = await ctx.getConfig("crypto");
18
18
  const textParts = encText.split(":");
19
19
  const iv = bytesFromHex(textParts.shift());
20
20
  const encryptedText = bytesFromHex(textParts.join(":"));
@@ -22,10 +22,7 @@ class CryptoService extends ServiceBase {
22
22
  const decrypted = decipher.update(encryptedText);
23
23
  return bytesConcat([decrypted, decipher.final()]);
24
24
  }
25
- async _getConf() {
26
- return this.getConfig("crypto");
27
- }
28
- }
25
+ }));
29
26
  export {
30
27
  CryptoService
31
28
  };
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/services/crypto-service.ts"],
4
- "sourcesContent": ["import type { Bytes } from \"@simplysm/core-common\";\nimport { bytesConcat, bytesToHex, bytesFromHex } from \"@simplysm/core-common\";\nimport type { CryptoConfig, CryptoService as CryptoServiceType } from \"@simplysm/service-common\";\nimport crypto from \"crypto\";\nimport { ServiceBase } from \"../core/service-base\";\n\nexport class CryptoService extends ServiceBase implements CryptoServiceType {\n async encrypt(data: string | Bytes): Promise<string> {\n const config = await this._getConf();\n return crypto.createHmac(\"sha256\", config.key).update(data).digest(\"hex\");\n }\n\n async encryptAes(data: Bytes): Promise<string> {\n const config = await this._getConf();\n\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv(\"aes-256-cbc\", config.key, iv);\n const encrypted = cipher.update(data);\n\n return bytesToHex(iv) + \":\" + bytesToHex(bytesConcat([encrypted, cipher.final()]));\n }\n\n async decryptAes(encText: string): Promise<Bytes> {\n const config = await this._getConf();\n\n const textParts = encText.split(\":\");\n const iv = bytesFromHex(textParts.shift()!);\n const encryptedText = bytesFromHex(textParts.join(\":\"));\n const decipher = crypto.createDecipheriv(\"aes-256-cbc\", config.key, iv);\n const decrypted = decipher.update(encryptedText);\n\n return bytesConcat([decrypted, decipher.final()]);\n }\n\n private async _getConf() {\n return this.getConfig<CryptoConfig>(\"crypto\");\n }\n}\n"],
5
- "mappings": "AACA,SAAS,aAAa,YAAY,oBAAoB;AAEtD,OAAO,YAAY;AACnB,SAAS,mBAAmB;AAErB,MAAM,sBAAsB,YAAyC;AAAA,EAC1E,MAAM,QAAQ,MAAuC;AACnD,UAAM,SAAS,MAAM,KAAK,SAAS;AACnC,WAAO,OAAO,WAAW,UAAU,OAAO,GAAG,EAAE,OAAO,IAAI,EAAE,OAAO,KAAK;AAAA,EAC1E;AAAA,EAEA,MAAM,WAAW,MAA8B;AAC7C,UAAM,SAAS,MAAM,KAAK,SAAS;AAEnC,UAAM,KAAK,OAAO,YAAY,EAAE;AAChC,UAAM,SAAS,OAAO,eAAe,eAAe,OAAO,KAAK,EAAE;AAClE,UAAM,YAAY,OAAO,OAAO,IAAI;AAEpC,WAAO,WAAW,EAAE,IAAI,MAAM,WAAW,YAAY,CAAC,WAAW,OAAO,MAAM,CAAC,CAAC,CAAC;AAAA,EACnF;AAAA,EAEA,MAAM,WAAW,SAAiC;AAChD,UAAM,SAAS,MAAM,KAAK,SAAS;AAEnC,UAAM,YAAY,QAAQ,MAAM,GAAG;AACnC,UAAM,KAAK,aAAa,UAAU,MAAM,CAAE;AAC1C,UAAM,gBAAgB,aAAa,UAAU,KAAK,GAAG,CAAC;AACtD,UAAM,WAAW,OAAO,iBAAiB,eAAe,OAAO,KAAK,EAAE;AACtE,UAAM,YAAY,SAAS,OAAO,aAAa;AAE/C,WAAO,YAAY,CAAC,WAAW,SAAS,MAAM,CAAC,CAAC;AAAA,EAClD;AAAA,EAEA,MAAc,WAAW;AACvB,WAAO,KAAK,UAAwB,QAAQ;AAAA,EAC9C;AACF;",
4
+ "mappings": "AACA,SAAS,aAAa,YAAY,oBAAoB;AAEtD,OAAO,YAAY;AACnB,SAAS,qBAA0C;AAE5C,MAAM,gBAAgB,cAAc,UAAU,CAAC,SAAS;AAAA,EAC7D,MAAM,QAAQ,MAAuC;AACnD,UAAM,SAAS,MAAM,IAAI,UAAwB,QAAQ;AACzD,WAAO,OAAO,WAAW,UAAU,OAAO,GAAG,EAAE,OAAO,IAAI,EAAE,OAAO,KAAK;AAAA,EAC1E;AAAA,EAEA,MAAM,WAAW,MAA8B;AAC7C,UAAM,SAAS,MAAM,IAAI,UAAwB,QAAQ;AAEzD,UAAM,KAAK,OAAO,YAAY,EAAE;AAChC,UAAM,SAAS,OAAO,eAAe,eAAe,OAAO,KAAK,EAAE;AAClE,UAAM,YAAY,OAAO,OAAO,IAAI;AAEpC,WAAO,WAAW,EAAE,IAAI,MAAM,WAAW,YAAY,CAAC,WAAW,OAAO,MAAM,CAAC,CAAC,CAAC;AAAA,EACnF;AAAA,EAEA,MAAM,WAAW,SAAiC;AAChD,UAAM,SAAS,MAAM,IAAI,UAAwB,QAAQ;AAEzD,UAAM,YAAY,QAAQ,MAAM,GAAG;AACnC,UAAM,KAAK,aAAa,UAAU,MAAM,CAAE;AAC1C,UAAM,gBAAgB,aAAa,UAAU,KAAK,GAAG,CAAC;AACtD,UAAM,WAAW,OAAO,iBAAiB,eAAe,OAAO,KAAK,EAAE;AACtE,UAAM,YAAY,SAAS,OAAO,aAAa;AAE/C,WAAO,YAAY,CAAC,WAAW,SAAS,MAAM,CAAC,CAAC;AAAA,EAClD;AACF,EAAE;",
6
5
  "names": []
7
6
  }
@@ -1,12 +1,7 @@
1
1
  import { type ColumnMeta, type Dialect, type IsolationLevel, type QueryDef, type ResultMeta } from "@simplysm/orm-common";
2
- import { ServiceBase } from "../core/service-base";
3
- import type { OrmService as OrmServiceType, DbConnOptions } from "@simplysm/service-common";
4
- import type { ServiceSocket } from "../transport/socket/service-socket";
5
- export declare class OrmService extends ServiceBase implements OrmServiceType {
6
- private static readonly _socketConns;
7
- private _getConf;
8
- get sock(): ServiceSocket;
9
- private _getConn;
2
+ import { type ServiceMethods } from "../core/define-service";
3
+ import type { DbConnOptions } from "@simplysm/service-common";
4
+ export declare const OrmService: import("..").ServiceDefinition<{
10
5
  getInfo(opt: DbConnOptions & {
11
6
  configName: string;
12
7
  }): Promise<{
@@ -24,5 +19,6 @@ export declare class OrmService extends ServiceBase implements OrmServiceType {
24
19
  executeParametrized(connId: number, query: string, params?: unknown[]): Promise<unknown[][]>;
25
20
  executeDefs(connId: number, defs: QueryDef[], options?: (ResultMeta | undefined)[]): Promise<unknown[][]>;
26
21
  bulkInsert(connId: number, tableName: string, columnDefs: Record<string, ColumnMeta>, records: Record<string, unknown>[]): Promise<void>;
27
- }
22
+ }>;
23
+ export type OrmServiceType = ServiceMethods<typeof OrmService>;
28
24
  //# sourceMappingURL=orm-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orm-service.d.ts","sourceRoot":"","sources":["../../src/services/orm-service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,OAAO,EACZ,KAAK,cAAc,EAEnB,KAAK,QAAQ,EACb,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAMxE,qBACa,UAAW,SAAQ,WAAY,YAAW,cAAc;IACnE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAqD;YAE3E,QAAQ;IAQtB,IAAI,IAAI,IAAI,aAAa,CAMxB;IAED,OAAO,CAAC,QAAQ;IASV,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAClE,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IASI,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IA2CrE,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASpC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhF,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAK5F,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IA4BzG,UAAU,CACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACjC,OAAO,CAAC,IAAI,CAAC;CAIjB"}
1
+ {"version":3,"file":"orm-service.d.ts","sourceRoot":"","sources":["../../src/services/orm-service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,OAAO,EACZ,KAAK,cAAc,EAEnB,KAAK,QAAQ,EACb,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAS9D,eAAO,MAAM,UAAU;iBA6BE,aAAa,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAClE,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;iBASiB,aAAa,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;kBA2CvD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;6BASX,MAAM,mBAAmB,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;8BAKtD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;gCAKpB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;gCAKtB,MAAM,SAAS,MAAM,WAAW,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;wBAKxE,MAAM,QAAQ,QAAQ,EAAE,YAAY,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;uBA6BrG,MAAM,aACH,MAAM,cACL,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,WAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACjC,OAAO,CAAC,IAAI,CAAC;EAMrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,UAAU,CAAC,CAAC"}
@@ -1,185 +1,136 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
5
- var __typeError = (msg) => {
6
- throw TypeError(msg);
7
- };
8
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
- var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
11
- var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
12
- var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
13
- var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
14
- var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
15
- var __runInitializers = (array, flags, self, value) => {
16
- for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
17
- return value;
18
- };
19
- var __decorateElement = (array, flags, name, decorators, target, extra) => {
20
- var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
21
- var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
22
- var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
23
- var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
24
- return __privateGet(this, extra);
25
- }, set [name](x) {
26
- return __privateSet(this, extra, x);
27
- } }, name));
28
- k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
29
- for (var i = decorators.length - 1; i >= 0; i--) {
30
- ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
31
- if (k) {
32
- ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
33
- if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
34
- if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
35
- }
36
- it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
37
- if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
38
- else if (typeof it !== "object" || it === null) __typeError("Object expected");
39
- else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
40
- }
41
- return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
42
- };
43
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
44
- var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
45
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
46
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
47
- var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
48
- var _OrmService_decorators, _init, _a;
49
1
  import { DbConnFactory } from "@simplysm/orm-node";
50
2
  import {
51
3
  createQueryBuilder,
52
4
  parseQueryResult
53
5
  } from "@simplysm/orm-common";
54
- import { ServiceBase } from "../core/service-base.js";
55
- import { Authorize } from "../auth/auth.decorators.js";
6
+ import { defineService, auth } from "../core/define-service.js";
56
7
  import consola from "consola";
57
8
  const logger = consola.withTag("service-server:OrmService");
58
- _OrmService_decorators = [Authorize()];
59
- let _OrmService = class _OrmService extends (_a = ServiceBase) {
60
- static _socketConns = /* @__PURE__ */ new WeakMap();
61
- async _getConf(opt) {
62
- const config = (await this.getConfig("orm"))[opt.configName];
63
- if (config == null) {
64
- throw new Error(`ORM \uC124\uC815\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${opt.configName}`);
65
- }
66
- return { ...config, ...opt.config };
67
- }
68
- get sock() {
69
- const socket = this.socket;
70
- if (socket == null) {
71
- throw new Error("WebSocket \uC5F0\uACB0\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. HTTP\uB85C\uB294 ORM \uC11C\uBE44\uC2A4\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.");
72
- }
73
- return socket;
74
- }
75
- _getConn(connId) {
76
- const myConns = _OrmService._socketConns.get(this.sock);
77
- const conn = myConns?.get(connId);
78
- if (conn == null) {
79
- throw new Error("DB\uC5D0 \uC5F0\uACB0\uB418\uC5B4\uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. (Invalid Connection ID)");
80
- }
81
- return conn;
82
- }
83
- async getInfo(opt) {
84
- const config = await this._getConf(opt);
85
- return {
86
- dialect: config.dialect === "mssql-azure" ? "mssql" : config.dialect,
87
- database: config.database,
88
- schema: "schema" in config ? config.schema : void 0
9
+ const socketConns = /* @__PURE__ */ new WeakMap();
10
+ const OrmService = defineService(
11
+ "Orm",
12
+ auth((ctx) => {
13
+ const sock = () => {
14
+ const socket = ctx.socket;
15
+ if (socket == null) {
16
+ throw new Error("WebSocket \uC5F0\uACB0\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. HTTP\uB85C\uB294 ORM \uC11C\uBE44\uC2A4\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.");
17
+ }
18
+ return socket;
89
19
  };
90
- }
91
- async connect(opt) {
92
- let myConns = _OrmService._socketConns.get(this.sock);
93
- if (myConns == null) {
94
- myConns = /* @__PURE__ */ new Map();
95
- _OrmService._socketConns.set(this.sock, myConns);
96
- this.sock.on("close", async () => {
97
- if (myConns == null) return;
98
- logger.debug("\uC18C\uCF13 \uC5F0\uACB0 \uC885\uB8CC \uAC10\uC9C0: \uC5F4\uB824\uC788\uB294 \uBAA8\uB4E0 DB \uC5F0\uACB0\uC744 \uC815\uB9AC\uD569\uB2C8\uB2E4.");
99
- const conns = Array.from(myConns.values());
100
- await Promise.all(
101
- conns.map(async (conn) => {
102
- try {
103
- if (conn.isConnected) {
104
- await conn.close();
105
- }
106
- } catch (err) {
107
- logger.warn("DB \uC5F0\uACB0 \uAC15\uC81C \uC885\uB8CC \uC911 \uC624\uB958 \uBB34\uC2DC\uB428", err);
108
- }
109
- })
110
- );
111
- myConns.clear();
112
- });
113
- }
114
- const config = await this._getConf(opt);
115
- const dbConn = await DbConnFactory.create(config);
116
- await dbConn.connect();
117
- const lastConnId = Math.max(0, ...Array.from(myConns.keys()));
118
- const connId = lastConnId + 1;
119
- myConns.set(connId, dbConn);
120
- dbConn.on("close", () => {
121
- myConns.delete(connId);
122
- });
123
- return connId;
124
- }
125
- async close(connId) {
126
- try {
127
- const conn = this._getConn(connId);
128
- await conn.close();
129
- } catch (err) {
130
- logger.warn("DB \uC5F0\uACB0 \uC885\uB8CC \uC911 \uC624\uB958 \uBB34\uC2DC\uB428", err);
131
- }
132
- }
133
- async beginTransaction(connId, isolationLevel) {
134
- const conn = this._getConn(connId);
135
- await conn.beginTransaction(isolationLevel);
136
- }
137
- async commitTransaction(connId) {
138
- const conn = this._getConn(connId);
139
- await conn.commitTransaction();
140
- }
141
- async rollbackTransaction(connId) {
142
- const conn = this._getConn(connId);
143
- await conn.rollbackTransaction();
144
- }
145
- async executeParametrized(connId, query, params) {
146
- const conn = this._getConn(connId);
147
- return conn.executeParametrized(query, params);
148
- }
149
- async executeDefs(connId, defs, options) {
150
- const conn = this._getConn(connId);
151
- const dialect = conn.config.dialect === "mssql-azure" ? "mssql" : conn.config.dialect;
152
- const queryBuilder = createQueryBuilder(dialect);
153
- if (options == null || options.every((item) => item == null)) {
154
- return conn.execute([defs.map((def) => queryBuilder.build(def).sql).join("\n")]);
155
- } else {
156
- const queries = defs.flatMap((def) => {
157
- const query = queryBuilder.build(def);
158
- return Array.isArray(query) ? query : [query];
159
- });
160
- const result = await conn.execute(queries);
161
- const parsed = [];
162
- for (let i = 0; i < result.length; i++) {
163
- const opt = options[i];
164
- if (opt != null) {
165
- const parsedResult = await parseQueryResult(result[i], opt);
166
- parsed.push(parsedResult ?? []);
20
+ const getConf = async (opt) => {
21
+ const config = (await ctx.getConfig("orm"))[opt.configName];
22
+ if (config == null) {
23
+ throw new Error(`ORM \uC124\uC815\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${opt.configName}`);
24
+ }
25
+ return { ...config, ...opt.config };
26
+ };
27
+ const getConn = (connId) => {
28
+ const myConns = socketConns.get(sock());
29
+ const conn = myConns?.get(connId);
30
+ if (conn == null) {
31
+ throw new Error("DB\uC5D0 \uC5F0\uACB0\uB418\uC5B4\uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. (Invalid Connection ID)");
32
+ }
33
+ return conn;
34
+ };
35
+ return {
36
+ async getInfo(opt) {
37
+ const config = await getConf(opt);
38
+ return {
39
+ dialect: config.dialect === "mssql-azure" ? "mssql" : config.dialect,
40
+ database: config.database,
41
+ schema: "schema" in config ? config.schema : void 0
42
+ };
43
+ },
44
+ async connect(opt) {
45
+ let myConns = socketConns.get(sock());
46
+ if (myConns == null) {
47
+ myConns = /* @__PURE__ */ new Map();
48
+ socketConns.set(sock(), myConns);
49
+ sock().on("close", async () => {
50
+ if (myConns == null) return;
51
+ logger.debug("\uC18C\uCF13 \uC5F0\uACB0 \uC885\uB8CC \uAC10\uC9C0: \uC5F4\uB824\uC788\uB294 \uBAA8\uB4E0 DB \uC5F0\uACB0\uC744 \uC815\uB9AC\uD569\uB2C8\uB2E4.");
52
+ const conns = Array.from(myConns.values());
53
+ await Promise.all(
54
+ conns.map(async (conn) => {
55
+ try {
56
+ if (conn.isConnected) {
57
+ await conn.close();
58
+ }
59
+ } catch (err) {
60
+ logger.warn("DB \uC5F0\uACB0 \uAC15\uC81C \uC885\uB8CC \uC911 \uC624\uB958 \uBB34\uC2DC\uB428", err);
61
+ }
62
+ })
63
+ );
64
+ myConns.clear();
65
+ });
66
+ }
67
+ const config = await getConf(opt);
68
+ const dbConn = await DbConnFactory.create(config);
69
+ await dbConn.connect();
70
+ const lastConnId = Math.max(0, ...Array.from(myConns.keys()));
71
+ const connId = lastConnId + 1;
72
+ myConns.set(connId, dbConn);
73
+ dbConn.on("close", () => {
74
+ myConns.delete(connId);
75
+ });
76
+ return connId;
77
+ },
78
+ async close(connId) {
79
+ try {
80
+ const conn = getConn(connId);
81
+ await conn.close();
82
+ } catch (err) {
83
+ logger.warn("DB \uC5F0\uACB0 \uC885\uB8CC \uC911 \uC624\uB958 \uBB34\uC2DC\uB428", err);
84
+ }
85
+ },
86
+ async beginTransaction(connId, isolationLevel) {
87
+ const conn = getConn(connId);
88
+ await conn.beginTransaction(isolationLevel);
89
+ },
90
+ async commitTransaction(connId) {
91
+ const conn = getConn(connId);
92
+ await conn.commitTransaction();
93
+ },
94
+ async rollbackTransaction(connId) {
95
+ const conn = getConn(connId);
96
+ await conn.rollbackTransaction();
97
+ },
98
+ async executeParametrized(connId, query, params) {
99
+ const conn = getConn(connId);
100
+ return conn.executeParametrized(query, params);
101
+ },
102
+ async executeDefs(connId, defs, options) {
103
+ const conn = getConn(connId);
104
+ const dialect = conn.config.dialect === "mssql-azure" ? "mssql" : conn.config.dialect;
105
+ const queryBuilder = createQueryBuilder(dialect);
106
+ if (options == null || options.every((item) => item == null)) {
107
+ return conn.execute([defs.map((def) => queryBuilder.build(def).sql).join("\n")]);
167
108
  } else {
168
- parsed.push(result[i]);
109
+ const queries = defs.flatMap((def) => {
110
+ const query = queryBuilder.build(def);
111
+ return Array.isArray(query) ? query : [query];
112
+ });
113
+ const result = await conn.execute(queries);
114
+ const parsed = [];
115
+ for (let i = 0; i < result.length; i++) {
116
+ const opt = options[i];
117
+ if (opt != null) {
118
+ const parsedResult = await parseQueryResult(result[i], opt);
119
+ parsed.push(parsedResult ?? []);
120
+ } else {
121
+ parsed.push(result[i]);
122
+ }
123
+ }
124
+ return parsed;
169
125
  }
126
+ },
127
+ async bulkInsert(connId, tableName, columnDefs, records) {
128
+ const conn = getConn(connId);
129
+ await conn.bulkInsert(tableName, columnDefs, records);
170
130
  }
171
- return parsed;
172
- }
173
- }
174
- async bulkInsert(connId, tableName, columnDefs, records) {
175
- const conn = this._getConn(connId);
176
- await conn.bulkInsert(tableName, columnDefs, records);
177
- }
178
- };
179
- _init = __decoratorStart(_a);
180
- _OrmService = __decorateElement(_init, 0, "OrmService", _OrmService_decorators, _OrmService);
181
- __runInitializers(_init, 1, _OrmService);
182
- let OrmService = _OrmService;
131
+ };
132
+ })
133
+ );
183
134
  export {
184
135
  OrmService
185
136
  };
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/services/orm-service.ts"],
4
- "sourcesContent": ["import { DbConnFactory, type DbConnConfig, type DbConn } from \"@simplysm/orm-node\";\nimport {\n type ColumnMeta,\n createQueryBuilder,\n type Dialect,\n type IsolationLevel,\n parseQueryResult,\n type QueryDef,\n type ResultMeta,\n} from \"@simplysm/orm-common\";\nimport { ServiceBase } from \"../core/service-base\";\nimport type { OrmService as OrmServiceType, DbConnOptions } from \"@simplysm/service-common\";\nimport type { ServiceSocket } from \"../transport/socket/service-socket\";\nimport { Authorize } from \"../auth/auth.decorators\";\nimport consola from \"consola\";\n\nconst logger = consola.withTag(\"service-server:OrmService\");\n\n@Authorize()\nexport class OrmService extends ServiceBase implements OrmServiceType {\n private static readonly _socketConns = new WeakMap<ServiceSocket, Map<number, DbConn>>();\n\n private async _getConf(opt: DbConnOptions & { configName: string }): Promise<DbConnConfig> {\n const config = (await this.getConfig<Record<string, DbConnConfig | undefined>>(\"orm\"))[opt.configName];\n if (config == null) {\n throw new Error(`ORM \uC124\uC815\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${opt.configName}`);\n }\n return { ...config, ...opt.config } as DbConnConfig;\n }\n\n get sock(): ServiceSocket {\n const socket = this.socket;\n if (socket == null) {\n throw new Error(\"WebSocket \uC5F0\uACB0\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. HTTP\uB85C\uB294 ORM \uC11C\uBE44\uC2A4\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\");\n }\n return socket;\n }\n\n private _getConn(connId: number): DbConn {\n const myConns = OrmService._socketConns.get(this.sock);\n const conn = myConns?.get(connId);\n if (conn == null) {\n throw new Error(\"DB\uC5D0 \uC5F0\uACB0\uB418\uC5B4\uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. (Invalid Connection ID)\");\n }\n return conn;\n }\n\n async getInfo(opt: DbConnOptions & { configName: string }): Promise<{\n dialect: Dialect;\n database?: string;\n schema?: string;\n }> {\n const config = await this._getConf(opt);\n return {\n dialect: config.dialect === \"mssql-azure\" ? \"mssql\" : config.dialect,\n database: config.database,\n schema: \"schema\" in config ? config.schema : undefined,\n };\n }\n\n async connect(opt: DbConnOptions & { configName: string }): Promise<number> {\n let myConns = OrmService._socketConns.get(this.sock);\n if (myConns == null) {\n myConns = new Map<number, DbConn>();\n OrmService._socketConns.set(this.sock, myConns);\n\n this.sock.on(\"close\", async () => {\n if (myConns == null) return;\n\n logger.debug(\"\uC18C\uCF13 \uC5F0\uACB0 \uC885\uB8CC \uAC10\uC9C0: \uC5F4\uB824\uC788\uB294 \uBAA8\uB4E0 DB \uC5F0\uACB0\uC744 \uC815\uB9AC\uD569\uB2C8\uB2E4.\");\n const conns = Array.from(myConns.values());\n\n await Promise.all(\n conns.map(async (conn) => {\n try {\n if (conn.isConnected) {\n await conn.close();\n }\n } catch (err) {\n logger.warn(\"DB \uC5F0\uACB0 \uAC15\uC81C \uC885\uB8CC \uC911 \uC624\uB958 \uBB34\uC2DC\uB428\", err);\n }\n }),\n );\n\n myConns.clear();\n });\n }\n\n const config = await this._getConf(opt);\n const dbConn = await DbConnFactory.create(config);\n await dbConn.connect();\n\n const lastConnId = Math.max(0, ...Array.from(myConns.keys()));\n const connId = lastConnId + 1;\n myConns.set(connId, dbConn);\n\n dbConn.on(\"close\", () => {\n myConns.delete(connId);\n });\n\n return connId;\n }\n\n async close(connId: number): Promise<void> {\n try {\n const conn = this._getConn(connId);\n await conn.close();\n } catch (err) {\n logger.warn(\"DB \uC5F0\uACB0 \uC885\uB8CC \uC911 \uC624\uB958 \uBB34\uC2DC\uB428\", err);\n }\n }\n\n async beginTransaction(connId: number, isolationLevel?: IsolationLevel): Promise<void> {\n const conn = this._getConn(connId);\n await conn.beginTransaction(isolationLevel);\n }\n\n async commitTransaction(connId: number): Promise<void> {\n const conn = this._getConn(connId);\n await conn.commitTransaction();\n }\n\n async rollbackTransaction(connId: number): Promise<void> {\n const conn = this._getConn(connId);\n await conn.rollbackTransaction();\n }\n\n async executeParametrized(connId: number, query: string, params?: unknown[]): Promise<unknown[][]> {\n const conn = this._getConn(connId);\n return conn.executeParametrized(query, params);\n }\n\n async executeDefs(connId: number, defs: QueryDef[], options?: (ResultMeta | undefined)[]): Promise<unknown[][]> {\n const conn = this._getConn(connId);\n const dialect: Dialect = conn.config.dialect === \"mssql-azure\" ? \"mssql\" : conn.config.dialect;\n const queryBuilder = createQueryBuilder(dialect);\n\n if (options == null || options.every((item) => item == null)) {\n return conn.execute([defs.map((def) => queryBuilder.build(def).sql).join(\"\\n\")]);\n } else {\n const queries = defs.flatMap((def) => {\n const query = queryBuilder.build(def);\n return Array.isArray(query) ? query : [query];\n });\n const result = await conn.execute(queries);\n\n const parsed: unknown[][] = [];\n for (let i = 0; i < result.length; i++) {\n const opt = options[i];\n if (opt != null) {\n const parsedResult = await parseQueryResult(result[i] as Record<string, unknown>[], opt);\n parsed.push(parsedResult ?? []);\n } else {\n parsed.push(result[i]);\n }\n }\n return parsed;\n }\n }\n\n async bulkInsert(\n connId: number,\n tableName: string,\n columnDefs: Record<string, ColumnMeta>,\n records: Record<string, unknown>[],\n ): Promise<void> {\n const conn = this._getConn(connId);\n await conn.bulkInsert(tableName, columnDefs, records);\n }\n}\n"],
5
- "mappings": "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",
4
+ "mappings": "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",
6
5
  "names": []
7
6
  }
@@ -1,7 +1,8 @@
1
- import type { SmtpService as SmtpServiceType, SmtpSendByConfigOption, SmtpSendOption } from "@simplysm/service-common";
2
- import { ServiceBase } from "../core/service-base";
3
- export declare class SmtpService extends ServiceBase implements SmtpServiceType {
4
- send(options: SmtpSendOption): Promise<string>;
1
+ import type { SmtpSendByConfigOption, SmtpSendOption } from "@simplysm/service-common";
2
+ import { type ServiceMethods } from "../core/define-service";
3
+ export declare const SmtpService: import("..").ServiceDefinition<{
4
+ send: (options: SmtpSendOption) => Promise<string>;
5
5
  sendByConfig(configName: string, options: SmtpSendByConfigOption): Promise<string>;
6
- }
6
+ }>;
7
+ export type SmtpServiceType = ServiceMethods<typeof SmtpService>;
7
8
  //# sourceMappingURL=smtp-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"smtp-service.d.ts","sourceRoot":"","sources":["../../src/services/smtp-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,IAAI,eAAe,EAE9B,sBAAsB,EACtB,cAAc,EACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,qBAAa,WAAY,SAAQ,WAAY,YAAW,eAAe;IAC/D,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B9C,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC;CAgBzF"}
1
+ {"version":3,"file":"smtp-service.d.ts","sourceRoot":"","sources":["../../src/services/smtp-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,sBAAsB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACnG,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE5E,eAAO,MAAM,WAAW;oBACO,cAAc,KAAG,OAAO,CAAC,MAAM,CAAC;6BAkC5B,MAAM,WAAW,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC;EAiB1F,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC"}