create-ssnode-cli 0.2.2 → 0.2.3

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 (203) hide show
  1. package/package.json +1 -1
  2. package/templates/backend/config/config.develop.yaml +6 -4
  3. package/templates/backend/data/template.dev.sqlite-shm +0 -0
  4. package/templates/backend/data/template.dev.sqlite-wal +0 -0
  5. package/templates/backend/dist/app.module.js +85 -1
  6. package/templates/backend/dist/app.module.js.map +1 -1
  7. package/templates/backend/dist/common/all-exceptions.filter.js +47 -1
  8. package/templates/backend/dist/common/all-exceptions.filter.js.map +1 -1
  9. package/templates/backend/dist/common/app-crypto.js +119 -1
  10. package/templates/backend/dist/common/app-crypto.js.map +1 -1
  11. package/templates/backend/dist/common/app-sign.guard.js +72 -1
  12. package/templates/backend/dist/common/app-sign.guard.js.map +1 -1
  13. package/templates/backend/dist/common/app-sign.module.js +20 -1
  14. package/templates/backend/dist/common/app-sign.module.js.map +1 -1
  15. package/templates/backend/dist/common/response.js +23 -1
  16. package/templates/backend/dist/common/response.js.map +1 -1
  17. package/templates/backend/dist/common/throttle.guard.js +42 -1
  18. package/templates/backend/dist/common/throttle.guard.js.map +1 -1
  19. package/templates/backend/dist/common/transform.interceptor.js +28 -1
  20. package/templates/backend/dist/common/transform.interceptor.js.map +1 -1
  21. package/templates/backend/dist/config/config.interface.js +2 -1
  22. package/templates/backend/dist/config/config.interface.js.map +1 -1
  23. package/templates/backend/dist/config/configuration.js +91 -1
  24. package/templates/backend/dist/config/configuration.js.map +1 -1
  25. package/templates/backend/dist/database/migrations/0001-init.migration.js +69 -1
  26. package/templates/backend/dist/database/migrations/0001-init.migration.js.map +1 -1
  27. package/templates/backend/dist/database/sqlite.config.js +32 -1
  28. package/templates/backend/dist/database/sqlite.config.js.map +1 -1
  29. package/templates/backend/dist/entities/audit-log.entity.js +49 -1
  30. package/templates/backend/dist/entities/audit-log.entity.js.map +1 -1
  31. package/templates/backend/dist/entities/image.entity.js +50 -1
  32. package/templates/backend/dist/entities/image.entity.js.map +1 -1
  33. package/templates/backend/dist/entities/page-data.entity.js +60 -1
  34. package/templates/backend/dist/entities/page-data.entity.js.map +1 -1
  35. package/templates/backend/dist/entities/screen-config.entity.js +74 -1
  36. package/templates/backend/dist/entities/screen-config.entity.js.map +1 -1
  37. package/templates/backend/dist/entities/user.entity.js +59 -1
  38. package/templates/backend/dist/entities/user.entity.js.map +1 -1
  39. package/templates/backend/dist/main.js +56 -1
  40. package/templates/backend/dist/main.js.map +1 -1
  41. package/templates/backend/dist/modules/audit/audit.controller.js +51 -1
  42. package/templates/backend/dist/modules/audit/audit.controller.js.map +1 -1
  43. package/templates/backend/dist/modules/audit/audit.module.js +25 -1
  44. package/templates/backend/dist/modules/audit/audit.module.js.map +1 -1
  45. package/templates/backend/dist/modules/audit/audit.service.js +57 -1
  46. package/templates/backend/dist/modules/audit/audit.service.js.map +1 -1
  47. package/templates/backend/dist/modules/auth/auth.controller.js +74 -1
  48. package/templates/backend/dist/modules/auth/auth.controller.js.map +1 -1
  49. package/templates/backend/dist/modules/auth/auth.module.js +45 -1
  50. package/templates/backend/dist/modules/auth/auth.module.js.map +1 -1
  51. package/templates/backend/dist/modules/auth/auth.service.js +151 -1
  52. package/templates/backend/dist/modules/auth/auth.service.js.map +1 -1
  53. package/templates/backend/dist/modules/auth/captcha.service.js +56 -1
  54. package/templates/backend/dist/modules/auth/captcha.service.js.map +1 -1
  55. package/templates/backend/dist/modules/auth/jwt-auth.guard.js +17 -1
  56. package/templates/backend/dist/modules/auth/jwt-auth.guard.js.map +1 -1
  57. package/templates/backend/dist/modules/auth/jwt.strategy.js +37 -1
  58. package/templates/backend/dist/modules/auth/jwt.strategy.js.map +1 -1
  59. package/templates/backend/dist/modules/image/image.controller.js +75 -1
  60. package/templates/backend/dist/modules/image/image.controller.js.map +1 -1
  61. package/templates/backend/dist/modules/image/image.module.js +26 -1
  62. package/templates/backend/dist/modules/image/image.module.js.map +1 -1
  63. package/templates/backend/dist/modules/image/image.service.js +94 -1
  64. package/templates/backend/dist/modules/image/image.service.js.map +1 -1
  65. package/templates/backend/dist/modules/ops/backend-version.probe.js +58 -1
  66. package/templates/backend/dist/modules/ops/backend-version.probe.js.map +1 -1
  67. package/templates/backend/dist/modules/ops/ops-probe.interface.js +4 -1
  68. package/templates/backend/dist/modules/ops/ops-probe.interface.js.map +1 -1
  69. package/templates/backend/dist/modules/ops/ops.controller.js +52 -1
  70. package/templates/backend/dist/modules/ops/ops.controller.js.map +1 -1
  71. package/templates/backend/dist/modules/ops/ops.module.js +39 -1
  72. package/templates/backend/dist/modules/ops/ops.module.js.map +1 -1
  73. package/templates/backend/dist/modules/ops/ops.service.js +72 -1
  74. package/templates/backend/dist/modules/ops/ops.service.js.map +1 -1
  75. package/templates/backend/dist/modules/ops/sqlite-backup-list.probe.js +105 -1
  76. package/templates/backend/dist/modules/ops/sqlite-backup-list.probe.js.map +1 -1
  77. package/templates/backend/dist/modules/ops/sqlite-backup-log.probe.js +67 -1
  78. package/templates/backend/dist/modules/ops/sqlite-backup-log.probe.js.map +1 -1
  79. package/templates/backend/dist/modules/ops/sqlite-backup.probe.js +115 -1
  80. package/templates/backend/dist/modules/ops/sqlite-backup.probe.js.map +1 -1
  81. package/templates/backend/dist/modules/ops/version.controller.js +52 -1
  82. package/templates/backend/dist/modules/ops/version.controller.js.map +1 -1
  83. package/templates/backend/dist/modules/page-data/page-data.controller.js +109 -1
  84. package/templates/backend/dist/modules/page-data/page-data.controller.js.map +1 -1
  85. package/templates/backend/dist/modules/page-data/page-data.module.js +25 -1
  86. package/templates/backend/dist/modules/page-data/page-data.module.js.map +1 -1
  87. package/templates/backend/dist/modules/page-data/page-data.service.js +69 -1
  88. package/templates/backend/dist/modules/page-data/page-data.service.js.map +1 -1
  89. package/templates/backend/dist/modules/screen-config/screen-config.controller.js +61 -1
  90. package/templates/backend/dist/modules/screen-config/screen-config.controller.js.map +1 -1
  91. package/templates/backend/dist/modules/screen-config/screen-config.module.js +25 -1
  92. package/templates/backend/dist/modules/screen-config/screen-config.module.js.map +1 -1
  93. package/templates/backend/dist/modules/screen-config/screen-config.service.js +41 -1
  94. package/templates/backend/dist/modules/screen-config/screen-config.service.js.map +1 -1
  95. package/templates/backend/dist/modules/upload/upload.controller.js +65 -1
  96. package/templates/backend/dist/modules/upload/upload.controller.js.map +1 -1
  97. package/templates/backend/dist/modules/upload/upload.module.js +22 -1
  98. package/templates/backend/dist/modules/upload/upload.module.js.map +1 -1
  99. package/templates/backend/dist/modules/upload/upload.service.js +75 -1
  100. package/templates/backend/dist/modules/upload/upload.service.js.map +1 -1
  101. package/templates/backend/dist/modules/user/user.controller.js +149 -1
  102. package/templates/backend/dist/modules/user/user.controller.js.map +1 -1
  103. package/templates/backend/dist/modules/user/user.module.js +26 -1
  104. package/templates/backend/dist/modules/user/user.module.js.map +1 -1
  105. package/templates/backend/dist/modules/user/user.service.js +249 -1
  106. package/templates/backend/dist/modules/user/user.service.js.map +1 -1
  107. package/templates/backend/dist/modules/websocket/websocket.gateway.js +33 -1
  108. package/templates/backend/dist/modules/websocket/websocket.gateway.js.map +1 -1
  109. package/templates/backend/dist/modules/websocket/websocket.module.js +19 -1
  110. package/templates/backend/dist/modules/websocket/websocket.module.js.map +1 -1
  111. package/templates/backend/dist/tsconfig.build.tsbuildinfo +1 -1
  112. package/templates/backend/package.json +1 -1
  113. package/templates/backend/src/modules/auth/captcha.service.ts +6 -5
  114. package/templates/web/dist/assets/{AuthLayout-bcf98efb.js → AuthLayout-f1e8d110.js} +1 -1
  115. package/templates/web/dist/assets/{AuthLayout-legacy-6e7a8ae1.js → AuthLayout-legacy-f871651c.js} +1 -1
  116. package/templates/web/dist/assets/{Background-eb77ef54.js → Background-955d549f.js} +1 -1
  117. package/templates/web/dist/assets/{Background-legacy-50457007.js → Background-legacy-fbad6e76.js} +1 -1
  118. package/templates/web/dist/assets/{Screen-318c3fc2.js → Screen-b14b0813.js} +1 -1
  119. package/templates/web/dist/assets/{Screen-legacy-af123b0f.js → Screen-legacy-154c8ee6.js} +1 -1
  120. package/templates/web/dist/assets/{api-beff4a3e.js → api-4d80e36e.js} +1 -1
  121. package/templates/web/dist/assets/{api-legacy-9fe41d4b.js → api-legacy-054fd569.js} +1 -1
  122. package/templates/web/dist/assets/{component-89b5253e.js → component-9d9f33fa.js} +1 -1
  123. package/templates/web/dist/assets/{component-legacy-8c5a28ef.js → component-legacy-4445386a.js} +1 -1
  124. package/templates/web/dist/assets/{index-a79e448b.js → index-107a0e80.js} +1 -1
  125. package/templates/web/dist/assets/{index-b60badf7.js → index-5afb70be.js} +1 -1
  126. package/templates/web/dist/assets/{index-cba19800.js → index-7b807c2d.js} +1 -1
  127. package/templates/web/dist/assets/{index-86214b19.js → index-ab64cd34.js} +1 -1
  128. package/templates/web/dist/assets/{index-7277cbfb.js → index-d8bfffb3.js} +1 -1
  129. package/templates/web/dist/assets/{index-d70eb540.js → index-db169639.js} +1 -1
  130. package/templates/web/dist/assets/{index-bd4ed808.js → index-e08dc495.js} +1 -1
  131. package/templates/web/dist/assets/index-e31f4b7c.js +1 -0
  132. package/templates/web/dist/assets/{index-legacy-783129a7.js → index-legacy-5cf7be80.js} +1 -1
  133. package/templates/web/dist/assets/index-legacy-6f112001.js +1 -0
  134. package/templates/web/dist/assets/{index-legacy-b3bd40c1.js → index-legacy-91e012ac.js} +1 -1
  135. package/templates/web/dist/assets/{index-legacy-0da8de82.js → index-legacy-aa61cf72.js} +1 -1
  136. package/templates/web/dist/assets/{index-legacy-06483318.js → index-legacy-afba9135.js} +1 -1
  137. package/templates/web/dist/assets/{index-legacy-d510e318.js → index-legacy-da51c769.js} +1 -1
  138. package/templates/web/dist/assets/{index-legacy-993ef005.js → index-legacy-eec0ca6e.js} +1 -1
  139. package/templates/web/dist/assets/{index-legacy-feb54578.js → index-legacy-f732db29.js} +1 -1
  140. package/templates/web/dist/index.html +2 -2
  141. package/templates/web/node_modules/.vite/deps/@ant-design_icons.js +4 -4
  142. package/templates/web/node_modules/.vite/deps/_metadata.json +57 -57
  143. package/templates/web/node_modules/.vite/deps/antd.js +6 -6
  144. package/templates/web/node_modules/.vite/deps/antd_locale_zh_CN.js +1 -1
  145. package/templates/web/node_modules/.vite/deps/axios.js +2793 -1104
  146. package/templates/web/node_modules/.vite/deps/axios.js.map +4 -4
  147. package/templates/web/node_modules/.vite/deps/{chunk-FADIZLW4.js → chunk-3EE4ABTD.js} +3 -3
  148. package/templates/web/node_modules/.vite/deps/{chunk-5JEEJ3ET.js → chunk-3KXTUEQ5.js} +2 -2
  149. package/templates/web/node_modules/.vite/deps/{chunk-DSEUD2VO.js → chunk-622VOE6C.js} +28 -237
  150. package/templates/web/node_modules/.vite/deps/chunk-622VOE6C.js.map +7 -0
  151. package/templates/web/node_modules/.vite/deps/{chunk-PCLWPLHU.js → chunk-AX2S74EI.js} +4 -4
  152. package/templates/web/node_modules/.vite/deps/{chunk-UX3FVGZU.js → chunk-DXNXWKU4.js} +1670 -1309
  153. package/templates/web/node_modules/.vite/deps/chunk-DXNXWKU4.js.map +7 -0
  154. package/templates/web/node_modules/.vite/deps/{chunk-OTDKR2HU.js → chunk-GT2UP6M4.js} +2 -2
  155. package/templates/web/node_modules/.vite/deps/{chunk-5WWUZCGV.js → chunk-HM4MQYWN.js} +10 -2
  156. package/templates/web/node_modules/.vite/deps/{chunk-Z4XTF2JV.js → chunk-NDUAOA7M.js} +2 -2
  157. package/templates/web/node_modules/.vite/deps/{chunk-PIIG5WB7.js → chunk-OKY2XKJX.js} +14406 -12416
  158. package/templates/web/node_modules/.vite/deps/chunk-OKY2XKJX.js.map +7 -0
  159. package/templates/web/node_modules/.vite/deps/{chunk-UIM57Q7Y.js → chunk-SC6QO7UO.js} +6086 -4354
  160. package/templates/web/node_modules/.vite/deps/chunk-SC6QO7UO.js.map +7 -0
  161. package/templates/web/node_modules/.vite/deps/classnames.js +2 -2
  162. package/templates/web/node_modules/.vite/deps/dayjs.js +2 -2
  163. package/templates/web/node_modules/.vite/deps/dayjs_locale_zh-cn.js +2 -2
  164. package/templates/web/node_modules/.vite/deps/echarts_charts.js +7172 -6102
  165. package/templates/web/node_modules/.vite/deps/echarts_charts.js.map +4 -4
  166. package/templates/web/node_modules/.vite/deps/echarts_components.js +3363 -1326
  167. package/templates/web/node_modules/.vite/deps/echarts_components.js.map +4 -4
  168. package/templates/web/node_modules/.vite/deps/echarts_core.js +57 -42
  169. package/templates/web/node_modules/.vite/deps/echarts_core.js.map +3 -3
  170. package/templates/web/node_modules/.vite/deps/echarts_renderers.js +432 -334
  171. package/templates/web/node_modules/.vite/deps/echarts_renderers.js.map +4 -4
  172. package/templates/web/node_modules/.vite/deps/exceljs.js +25762 -0
  173. package/templates/web/node_modules/.vite/deps/exceljs.js.map +7 -0
  174. package/templates/web/node_modules/.vite/deps/lodash.js +28 -10
  175. package/templates/web/node_modules/.vite/deps/lodash.js.map +3 -3
  176. package/templates/web/node_modules/.vite/deps/path-browserify.js +1 -1
  177. package/templates/web/node_modules/.vite/deps/prop-types.js +1 -1
  178. package/templates/web/node_modules/.vite/deps/qs.js +405 -138
  179. package/templates/web/node_modules/.vite/deps/qs.js.map +4 -4
  180. package/templates/web/node_modules/.vite/deps/react-dom.js +3 -3
  181. package/templates/web/node_modules/.vite/deps/react-dom_client.js +3 -3
  182. package/templates/web/node_modules/.vite/deps/react-router-dom.js +3445 -1283
  183. package/templates/web/node_modules/.vite/deps/react-router-dom.js.map +4 -4
  184. package/templates/web/node_modules/.vite/deps/react.js +2 -2
  185. package/templates/web/node_modules/.vite/deps/react_jsx-dev-runtime.js +2 -2
  186. package/templates/web/node_modules/.vite/deps/recoil.js +3 -3
  187. package/templates/web/src/pages/Login/index.tsx +8 -1
  188. package/templates/web/src/services/api.ts +6 -1
  189. package/templates/web/vite.config.js +5 -5
  190. package/templates/web/dist/assets/index-e6071630.js +0 -1
  191. package/templates/web/dist/assets/index-legacy-028ed5d5.js +0 -1
  192. package/templates/web/node_modules/.vite/deps/chunk-DSEUD2VO.js.map +0 -7
  193. package/templates/web/node_modules/.vite/deps/chunk-PIIG5WB7.js.map +0 -7
  194. package/templates/web/node_modules/.vite/deps/chunk-UIM57Q7Y.js.map +0 -7
  195. package/templates/web/node_modules/.vite/deps/chunk-UX3FVGZU.js.map +0 -7
  196. package/templates/web/node_modules/.vite/deps/xlsx.js +0 -33827
  197. package/templates/web/node_modules/.vite/deps/xlsx.js.map +0 -7
  198. /package/templates/web/node_modules/.vite/deps/{chunk-FADIZLW4.js.map → chunk-3EE4ABTD.js.map} +0 -0
  199. /package/templates/web/node_modules/.vite/deps/{chunk-5JEEJ3ET.js.map → chunk-3KXTUEQ5.js.map} +0 -0
  200. /package/templates/web/node_modules/.vite/deps/{chunk-PCLWPLHU.js.map → chunk-AX2S74EI.js.map} +0 -0
  201. /package/templates/web/node_modules/.vite/deps/{chunk-OTDKR2HU.js.map → chunk-GT2UP6M4.js.map} +0 -0
  202. /package/templates/web/node_modules/.vite/deps/{chunk-5WWUZCGV.js.map → chunk-HM4MQYWN.js.map} +0 -0
  203. /package/templates/web/node_modules/.vite/deps/{chunk-Z4XTF2JV.js.map → chunk-NDUAOA7M.js.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-ssnode-cli",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "SSNodeFullStack 脚手架 — 生成全栈 / 仅前端 / 仅后端项目(Vite+React+AntD / NestJS+SQLite)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  # 开发环境配置
2
2
  app:
3
- port: 3001
3
+ port: 4001
4
4
  globalPrefix: api
5
5
  corsOrigins:
6
6
  - 'http://localhost:6177'
@@ -13,7 +13,8 @@ database:
13
13
  logging: true
14
14
 
15
15
  jwt:
16
- secret: ''
16
+ # dev 专用固定密钥:让源仓 npm run dev 可直接启动(CLI 生成项目时会被随机密钥覆盖,勿用于 prod)
17
+ secret: dev-only-jwt-secret-not-for-prod
17
18
  expiresIn: 8h
18
19
 
19
20
  log:
@@ -48,8 +49,9 @@ upload:
48
49
  # (改这里 + 重启 即完成轮换)。dev/prod 真值均入库 yaml 直读;ADMIN_PASSWORD env 为可选覆盖。
49
50
  admin:
50
51
  username: admin
51
- # ⚠️ 模板占位:新项目务必改成强密码(启动 reconcile 到 DB)
52
- password: ''
52
+ # dev 专用弱密码:让源仓 npm run dev 能直接登录(CLI 生成项目时会被随机强密钥覆盖,勿用于 prod)
53
+ password: admin123
54
+
53
55
 
54
56
  # 单点登录 /api/ssologin(演示接入范式,默认关闭;未开启时接口返回 404)
55
57
  # 开启后接入方(门户/统一认证)持 ticketKey 生成跳转 URL:
@@ -1,2 +1,86 @@
1
- "use strict";var __decorate=this&&this.__decorate||function(e,o,t,r){var i,u=arguments.length,l=u<3?o:null===r?r=Object.getOwnPropertyDescriptor(o,t):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,o,t,r);else for(var _=e.length-1;_>=0;_--)(i=e[_])&&(l=(u<3?i(l):u>3?i(o,t,l):i(o,t))||l);return u>3&&l&&Object.defineProperty(o,t,l),l};Object.defineProperty(exports,"__esModule",{value:!0}),exports.AppModule=void 0;const common_1=require("@nestjs/common"),core_1=require("@nestjs/core"),config_1=require("@nestjs/config"),throttler_1=require("@nestjs/throttler"),typeorm_1=require("@nestjs/typeorm"),configuration_1=require("./config/configuration"),sqlite_config_1=require("./database/sqlite.config"),screen_config_entity_1=require("./entities/screen-config.entity"),page_data_entity_1=require("./entities/page-data.entity"),user_entity_1=require("./entities/user.entity"),image_entity_1=require("./entities/image.entity"),all_exceptions_filter_1=require("./common/all-exceptions.filter"),transform_interceptor_1=require("./common/transform.interceptor"),throttle_guard_1=require("./common/throttle.guard"),app_sign_module_1=require("./common/app-sign.module"),auth_module_1=require("./modules/auth/auth.module"),user_module_1=require("./modules/user/user.module"),screen_config_module_1=require("./modules/screen-config/screen-config.module"),page_data_module_1=require("./modules/page-data/page-data.module"),websocket_module_1=require("./modules/websocket/websocket.module"),upload_module_1=require("./modules/upload/upload.module"),image_module_1=require("./modules/image/image.module"),audit_module_1=require("./modules/audit/audit.module"),ops_module_1=require("./modules/ops/ops.module");let AppModule=class{};exports.AppModule=AppModule,exports.AppModule=AppModule=__decorate([(0,common_1.Module)({imports:[config_1.ConfigModule.forRoot({isGlobal:!0,load:[configuration_1.default]}),throttler_1.ThrottlerModule.forRootAsync({inject:[config_1.ConfigService],useFactory:e=>{const o=e.get("throttle");return[{name:"default",limit:o.limit,ttl:1e3*o.ttl,skipIf:()=>!1}]}}),typeorm_1.TypeOrmModule.forRootAsync({inject:[config_1.ConfigService],useFactory:sqlite_config_1.buildTypeOrmOptions}),typeorm_1.TypeOrmModule.forFeature([screen_config_entity_1.ScreenConfigEntity,page_data_entity_1.PageDataEntity,user_entity_1.UserEntity,image_entity_1.ImageEntity]),auth_module_1.AuthModule,user_module_1.UserModule,screen_config_module_1.ScreenConfigModule,page_data_module_1.PageDataModule,websocket_module_1.WebsocketModule,upload_module_1.UploadModule,image_module_1.ImageModule,audit_module_1.AuditModule,ops_module_1.OpsModule,app_sign_module_1.AppSignModule],providers:[{provide:core_1.APP_FILTER,useClass:all_exceptions_filter_1.AllExceptionsFilter},{provide:core_1.APP_INTERCEPTOR,useClass:transform_interceptor_1.TransformInterceptor},{provide:core_1.APP_GUARD,useClass:throttle_guard_1.AppThrottlerGuard}]})],AppModule);
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.AppModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const core_1 = require("@nestjs/core");
12
+ const config_1 = require("@nestjs/config");
13
+ const throttler_1 = require("@nestjs/throttler");
14
+ const typeorm_1 = require("@nestjs/typeorm");
15
+ const configuration_1 = require("./config/configuration");
16
+ const sqlite_config_1 = require("./database/sqlite.config");
17
+ const screen_config_entity_1 = require("./entities/screen-config.entity");
18
+ const page_data_entity_1 = require("./entities/page-data.entity");
19
+ const user_entity_1 = require("./entities/user.entity");
20
+ const image_entity_1 = require("./entities/image.entity");
21
+ const all_exceptions_filter_1 = require("./common/all-exceptions.filter");
22
+ const transform_interceptor_1 = require("./common/transform.interceptor");
23
+ const throttle_guard_1 = require("./common/throttle.guard");
24
+ const app_sign_module_1 = require("./common/app-sign.module");
25
+ const auth_module_1 = require("./modules/auth/auth.module");
26
+ const user_module_1 = require("./modules/user/user.module");
27
+ const screen_config_module_1 = require("./modules/screen-config/screen-config.module");
28
+ const page_data_module_1 = require("./modules/page-data/page-data.module");
29
+ const websocket_module_1 = require("./modules/websocket/websocket.module");
30
+ const upload_module_1 = require("./modules/upload/upload.module");
31
+ const image_module_1 = require("./modules/image/image.module");
32
+ const audit_module_1 = require("./modules/audit/audit.module");
33
+ const ops_module_1 = require("./modules/ops/ops.module");
34
+ let AppModule = class AppModule {
35
+ };
36
+ exports.AppModule = AppModule;
37
+ exports.AppModule = AppModule = __decorate([
38
+ (0, common_1.Module)({
39
+ imports: [
40
+ config_1.ConfigModule.forRoot({
41
+ isGlobal: true,
42
+ load: [configuration_1.default]
43
+ }),
44
+ throttler_1.ThrottlerModule.forRootAsync({
45
+ inject: [config_1.ConfigService],
46
+ useFactory: (config) => {
47
+ const t = config.get('throttle');
48
+ return [
49
+ {
50
+ name: 'default',
51
+ limit: t.limit,
52
+ ttl: t.ttl * 1000,
53
+ skipIf: () => false
54
+ }
55
+ ];
56
+ }
57
+ }),
58
+ typeorm_1.TypeOrmModule.forRootAsync({
59
+ inject: [config_1.ConfigService],
60
+ useFactory: sqlite_config_1.buildTypeOrmOptions
61
+ }),
62
+ typeorm_1.TypeOrmModule.forFeature([
63
+ screen_config_entity_1.ScreenConfigEntity,
64
+ page_data_entity_1.PageDataEntity,
65
+ user_entity_1.UserEntity,
66
+ image_entity_1.ImageEntity
67
+ ]),
68
+ auth_module_1.AuthModule,
69
+ user_module_1.UserModule,
70
+ screen_config_module_1.ScreenConfigModule,
71
+ page_data_module_1.PageDataModule,
72
+ websocket_module_1.WebsocketModule,
73
+ upload_module_1.UploadModule,
74
+ image_module_1.ImageModule,
75
+ audit_module_1.AuditModule,
76
+ ops_module_1.OpsModule,
77
+ app_sign_module_1.AppSignModule
78
+ ],
79
+ providers: [
80
+ { provide: core_1.APP_FILTER, useClass: all_exceptions_filter_1.AllExceptionsFilter },
81
+ { provide: core_1.APP_INTERCEPTOR, useClass: transform_interceptor_1.TransformInterceptor },
82
+ { provide: core_1.APP_GUARD, useClass: throttle_guard_1.AppThrottlerGuard }
83
+ ]
84
+ })
85
+ ], AppModule);
2
86
  //# sourceMappingURL=app.module.js.map
@@ -1 +1 @@
1
- "{\"version\":3,\"file\":\"app.module.js\",\"names\":[\"common_1\",\"require\",\"core_1\",\"config_1\",\"throttler_1\",\"typeorm_1\",\"configuration_1\",\"sqlite_config_1\",\"screen_config_entity_1\",\"page_data_entity_1\",\"user_entity_1\",\"image_entity_1\",\"all_exceptions_filter_1\",\"transform_interceptor_1\",\"throttle_guard_1\",\"app_sign_module_1\",\"auth_module_1\",\"user_module_1\",\"screen_config_module_1\",\"page_data_module_1\",\"websocket_module_1\",\"upload_module_1\",\"image_module_1\",\"audit_module_1\",\"ops_module_1\",\"AppModule\",\"exports\",\"__decorate\",\"Module\",\"imports\",\"ConfigModule\",\"forRoot\",\"isGlobal\",\"load\",\"default\",\"ThrottlerModule\",\"forRootAsync\",\"inject\",\"ConfigService\",\"useFactory\",\"config\",\"t\",\"get\",\"name\",\"limit\",\"ttl\",\"skipIf\",\"TypeOrmModule\",\"buildTypeOrmOptions\",\"forFeature\",\"ScreenConfigEntity\",\"PageDataEntity\",\"UserEntity\",\"ImageEntity\",\"AuthModule\",\"UserModule\",\"ScreenConfigModule\",\"PageDataModule\",\"WebsocketModule\",\"UploadModule\",\"ImageModule\",\"AuditModule\",\"OpsModule\",\"AppSignModule\",\"providers\",\"provide\",\"APP_FILTER\",\"useClass\",\"AllExceptionsFilter\",\"APP_INTERCEPTOR\",\"TransformInterceptor\",\"APP_GUARD\",\"AppThrottlerGuard\"],\"sources\":[\"../src/app.module.ts\"],\"mappings\":\"ucAAA,MAAAA,SAAAC,QAAA,kBACAC,OAAAD,QAAA,gBACAE,SAAAF,QAAA,kBACAG,YAAAH,QAAA,qBACAI,UAAAJ,QAAA,mBACAK,gBAAAL,QAAA,0BAEAM,gBAAAN,QAAA,4BACAO,uBAAAP,QAAA,mCACAQ,mBAAAR,QAAA,+BACAS,cAAAT,QAAA,0BACAU,eAAAV,QAAA,2BAEAW,wBAAAX,QAAA,kCACAY,wBAAAZ,QAAA,kCACAa,iBAAAb,QAAA,2BACAc,kBAAAd,QAAA,4BAEAe,cAAAf,QAAA,8BACAgB,cAAAhB,QAAA,8BACAiB,uBAAAjB,QAAA,gDACAkB,mBAAAlB,QAAA,wCACAmB,mBAAAnB,QAAA,wCACAoB,gBAAApB,QAAA,kCACAqB,eAAArB,QAAA,gCACAsB,eAAAtB,QAAA,gCACAuB,aAAAvB,QAAA,4BAqDO,IAAMwB,UAAN,QAAMC,QAAAD,oB,kBAAAA,UAASE,WAAA,EAnDrB,EAAA3B,SAAA4B,QAAO,CACNC,QAAS,CACP1B,SAAA2B,aAAaC,QAAQ,CACnBC,UAAU,EACVC,KAAM,CAAC3B,gBAAA4B,WAET9B,YAAA+B,gBAAgBC,aAAa,CAC3BC,OAAQ,CAAClC,SAAAmC,eACTC,WAAaC,IACX,MAAMC,EAAID,EAAOE,IAA2B,YAC5C,MAAO,CACL,CACEC,KAAM,UACNC,MAAOH,EAAEG,MACTC,IAAa,IAARJ,EAAEI,IACPC,OAAQ,KAAM,OAKtBzC,UAAA0C,cAAcX,aAAa,CACzBC,OAAQ,CAAClC,SAAAmC,eACTC,WAAYhC,gBAAAyC,sBAEd3C,UAAA0C,cAAcE,WAAW,CACvBzC,uBAAA0C,mBACAzC,mBAAA0C,eACAzC,cAAA0C,WACAzC,eAAA0C,cAEFrC,cAAAsC,WACArC,cAAAsC,WACArC,uBAAAsC,mBACArC,mBAAAsC,eACArC,mBAAAsC,gBACArC,gBAAAsC,aACArC,eAAAsC,YACArC,eAAAsC,YACArC,aAAAsC,UAEA/C,kBAAAgD,eAEFC,UAAW,CAET,CAAEC,QAAS/D,OAAAgE,WAAYC,SAAUvD,wBAAAwD,qBAEjC,CAAEH,QAAS/D,OAAAmE,gBAAiBF,SAAUtD,wBAAAyD,sBAEtC,CAAEL,QAAS/D,OAAAqE,UAAWJ,SAAUrD,iBAAA0D,uBAGvB/C\",\"ignoreList\":[]}"
1
+ {"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uCAAsE;AACtE,2CAA6D;AAC7D,iDAAoD;AACpD,6CAAgD;AAChD,0DAAmD;AAEnD,4DAA+D;AAC/D,0EAAqE;AACrE,kEAA6D;AAC7D,wDAAoD;AACpD,0DAAsD;AAEtD,0EAAqE;AACrE,0EAAsE;AACtE,4DAA4D;AAC5D,8DAAyD;AAEzD,4DAAwD;AACxD,4DAAwD;AACxD,uFAAkF;AAClF,2EAAsE;AACtE,2EAAuE;AACvE,kEAA8D;AAC9D,+DAA2D;AAC3D,+DAA2D;AAC3D,yDAAqD;AAqD9C,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IAnDrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,qBAAY,CAAC,OAAO,CAAC;gBACnB,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,CAAC,uBAAa,CAAC;aACtB,CAAC;YACF,2BAAe,CAAC,YAAY,CAAC;gBAC3B,MAAM,EAAE,CAAC,sBAAa,CAAC;gBACvB,UAAU,EAAE,CAAC,MAAsC,EAAE,EAAE;oBACrD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAwB,UAAU,CAAC,CAAC;oBACxD,OAAO;wBACL;4BACE,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI;4BACjB,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK;yBACpB;qBACF,CAAC;gBACJ,CAAC;aACF,CAAC;YACF,uBAAa,CAAC,YAAY,CAAC;gBACzB,MAAM,EAAE,CAAC,sBAAa,CAAC;gBACvB,UAAU,EAAE,mCAAmB;aAChC,CAAC;YACF,uBAAa,CAAC,UAAU,CAAC;gBACvB,yCAAkB;gBAClB,iCAAc;gBACd,wBAAU;gBACV,0BAAW;aACZ,CAAC;YACF,wBAAU;YACV,wBAAU;YACV,yCAAkB;YAClB,iCAAc;YACd,kCAAe;YACf,4BAAY;YACZ,0BAAW;YACX,0BAAW;YACX,sBAAS;YAET,+BAAa;SACd;QACD,SAAS,EAAE;YAET,EAAE,OAAO,EAAE,iBAAU,EAAE,QAAQ,EAAE,2CAAmB,EAAE;YAEtD,EAAE,OAAO,EAAE,sBAAe,EAAE,QAAQ,EAAE,4CAAoB,EAAE;YAE5D,EAAE,OAAO,EAAE,gBAAS,EAAE,QAAQ,EAAE,kCAAiB,EAAE;SACpD;KACF,CAAC;GACW,SAAS,CAAG"}
@@ -1,2 +1,48 @@
1
- "use strict";var __decorate=this&&this.__decorate||function(e,t,o,s){var r,n=arguments.length,c=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,o):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,o,s);else for(var l=e.length-1;l>=0;l--)(r=e[l])&&(c=(n<3?r(c):n>3?r(t,o,c):r(t,o))||c);return n>3&&c&&Object.defineProperty(t,o,c),c};Object.defineProperty(exports,"__esModule",{value:!0}),exports.AllExceptionsFilter=void 0;const common_1=require("@nestjs/common"),response_1=require("./response");let AllExceptionsFilter=class{logger=new common_1.Logger("Exception");catch(e,t){const o=t.switchToHttp(),s=o.getResponse(),r=o.getRequest();let n=common_1.HttpStatus.INTERNAL_SERVER_ERROR,c="服务器内部错误";if(e instanceof common_1.HttpException){n=e.getStatus();const t=e.getResponse();c="string"==typeof t?t:t?.message||e.message,Array.isArray(c)&&(c=c[0])}else e instanceof Error&&(c=e.message,this.logger.error(`${r.method} ${r.url} -> ${e.message}`,e.stack));429===n&&(c="请求过于频繁,请稍后再试(每分钟 60 次)");const l=n>=100&&n<600?n:200;s.status(l).json(new response_1.ResponseResult(n,c,null))}};exports.AllExceptionsFilter=AllExceptionsFilter,exports.AllExceptionsFilter=AllExceptionsFilter=__decorate([(0,common_1.Catch)()],AllExceptionsFilter);
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.AllExceptionsFilter = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const response_1 = require("./response");
12
+ let AllExceptionsFilter = class AllExceptionsFilter {
13
+ logger = new common_1.Logger('Exception');
14
+ catch(exception, host) {
15
+ const ctx = host.switchToHttp();
16
+ const response = ctx.getResponse();
17
+ const request = ctx.getRequest();
18
+ let code = common_1.HttpStatus.INTERNAL_SERVER_ERROR;
19
+ let message = '服务器内部错误';
20
+ if (exception instanceof common_1.HttpException) {
21
+ code = exception.getStatus();
22
+ const res = exception.getResponse();
23
+ message =
24
+ typeof res === 'string'
25
+ ? res
26
+ : res?.message || exception.message;
27
+ if (Array.isArray(message)) {
28
+ message = message[0];
29
+ }
30
+ }
31
+ else if (exception instanceof Error) {
32
+ message = exception.message;
33
+ this.logger.error(`${request.method} ${request.url} -> ${exception.message}`, exception.stack);
34
+ }
35
+ if (code === 429) {
36
+ message = '请求过于频繁,请稍后再试(每分钟 60 次)';
37
+ }
38
+ const status = code >= 100 && code < 600 ? code : 200;
39
+ response
40
+ .status(status)
41
+ .json(new response_1.ResponseResult(code, message, null));
42
+ }
43
+ };
44
+ exports.AllExceptionsFilter = AllExceptionsFilter;
45
+ exports.AllExceptionsFilter = AllExceptionsFilter = __decorate([
46
+ (0, common_1.Catch)()
47
+ ], AllExceptionsFilter);
2
48
  //# sourceMappingURL=all-exceptions.filter.js.map
@@ -1 +1 @@
1
- "{\"version\":3,\"file\":\"common/all-exceptions.filter.js\",\"names\":[\"common_1\",\"require\",\"response_1\",\"AllExceptionsFilter\",\"logger\",\"Logger\",\"exception\",\"host\",\"ctx\",\"switchToHttp\",\"response\",\"getResponse\",\"request\",\"getRequest\",\"code\",\"HttpStatus\",\"INTERNAL_SERVER_ERROR\",\"message\",\"HttpException\",\"getStatus\",\"res\",\"Array\",\"isArray\",\"Error\",\"this\",\"error\",\"method\",\"url\",\"stack\",\"status\",\"json\",\"ResponseResult\",\"exports\",\"__decorate\",\"Catch\"],\"sources\":[\"../../src/common/all-exceptions.filter.ts\"],\"mappings\":\"idAAA,MAAAA,SAAAC,QAAA,kBASAC,WAAAD,QAAA,cASO,IAAME,oBAAN,MACYC,OAAS,IAAIJ,SAAAK,OAAO,aAErC,MAAMC,EAAoBC,GACxB,MAAMC,EAAMD,EAAKE,eACXC,EAAWF,EAAIG,cACfC,EAAUJ,EAAIK,aAEpB,IAAIC,EAAOd,SAAAe,WAAWC,sBAClBC,EAAU,UAEd,GAAIX,aAAqBN,SAAAkB,cAAe,CACtCJ,EAAOR,EAAUa,YACjB,MAAMC,EAAMd,EAAUK,cACtBM,EACiB,iBAARG,EACHA,EACCA,GAAaH,SAAWX,EAAUW,QAErCI,MAAMC,QAAQL,KAChBA,EAAUA,EAAQ,GAEtB,MAAWX,aAAqBiB,QAC9BN,EAAUX,EAAUW,QACpBO,KAAKpB,OAAOqB,MAAM,GAAGb,EAAQc,UAAUd,EAAQe,UAAUrB,EAAUW,UAAWX,EAAUsB,QAI7E,MAATd,IACFG,EAAU,0BAGZ,MAAMY,EAASf,GAAQ,KAAOA,EAAO,IAAMA,EAAO,IAClDJ,EACGmB,OAAOA,GACPC,KAAK,IAAI5B,WAAA6B,eAAejB,EAAMG,EAAmB,MACtD,GApCWe,QAAA7B,wC,4BAAAA,oBAAmB8B,WAAA,EAD/B,EAAAjC,SAAAkC,UACY/B\",\"ignoreList\":[]}"
1
+ {"version":3,"file":"all-exceptions.filter.js","sourceRoot":"","sources":["../../src/common/all-exceptions.filter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAOwB;AAExB,yCAA4C;AASrC,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IACb,MAAM,GAAG,IAAI,eAAM,CAAC,WAAW,CAAC,CAAC;IAElD,KAAK,CAAC,SAAkB,EAAE,IAAmB;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAY,CAAC;QAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAW,CAAC;QAE1C,IAAI,IAAI,GAAG,mBAAU,CAAC,qBAAqB,CAAC;QAC5C,IAAI,OAAO,GAAG,SAAS,CAAC;QAExB,IAAI,SAAS,YAAY,sBAAa,EAAE,CAAC;YACvC,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YACpC,OAAO;gBACL,OAAO,GAAG,KAAK,QAAQ;oBACrB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAE,GAAW,EAAE,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC;YAEjD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,YAAY,KAAK,EAAE,CAAC;YACtC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,OAAO,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QACjG,CAAC;QAGD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,GAAG,wBAAwB,CAAC;QACrC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QACtD,QAAQ;aACL,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,IAAI,yBAAc,CAAC,IAAI,EAAE,OAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;CACF,CAAA;AArCY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,cAAK,GAAE;GACK,mBAAmB,CAqC/B"}
@@ -1,2 +1,120 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.aesGcmDecrypt=exports.aesGcmEncrypt=exports.NonceStore=exports.buildSortedQuery=exports.safeEqualHex=exports.signRequest=void 0;const crypto=require("crypto");function signRequest(e,t){const{method:s,path:r,sortedQuery:o,ts:i,nonce:n,bodyCipherB64:c}=e,a=[s,r,o,i,n,c??""].join("\n");return crypto.createHmac("sha256",t).update(a,"utf8").digest("hex")}function safeEqualHex(e,t){const s=Buffer.from(e,"hex"),r=Buffer.from(t,"hex");return s.length===r.length&&0!==s.length&&crypto.timingSafeEqual(s,r)}function buildSortedQuery(e){if(!e)return"";let t;if("string"==typeof e){const s=e.startsWith("?")?e.slice(1):e;if(!s)return"";t=s.split("&").map(e=>{const t=e.indexOf("=");return-1===t?[e,""]:[e.slice(0,t),e.slice(t+1)]})}else{if("object"!=typeof e)return"";t=[];for(const[s,r]of Object.entries(e))if(Array.isArray(r))for(const e of r)t.push([s,String(e)]);else t.push([s,String(r)])}return t.sort((e,t)=>e[0]===t[0]?e[1]<t[1]?-1:e[1]>t[1]?1:0:e[0]<t[0]?-1:1),t.map(([e,t])=>`${e}=${t}`).join("&")}exports.signRequest=signRequest,exports.safeEqualHex=safeEqualHex,exports.buildSortedQuery=buildSortedQuery;class NonceStore{store=new Map;capacity;ttlMs;sweepTimer=null;constructor(e=1e4,t=3e5){this.capacity=e,this.ttlMs=t,this.sweepTimer=setInterval(()=>this.sweep(),Math.max(1e3,Math.floor(t/2))),this.sweepTimer.unref&&this.sweepTimer.unref()}has(e){const t=Date.now(),s=this.store.get(e);if(void 0!==s){if(t<s)return!0;this.store.delete(e)}return!1}set(e){if(this.store.size>=this.capacity){const e=this.store.keys().next().value;void 0!==e&&this.store.delete(e)}this.store.set(e,Date.now()+this.ttlMs)}seen(e){return!!this.has(e)||(this.set(e),!1)}sweep(){const e=Date.now();for(const[t,s]of this.store)e>=s&&this.store.delete(t)}dispose(){this.sweepTimer&&(clearInterval(this.sweepTimer),this.sweepTimer=null),this.store.clear()}}function aesGcmEncrypt(e,t,s){const r=Buffer.from(t,"base64"),o=s??crypto.randomBytes(12),i=crypto.createCipheriv("aes-256-gcm",r,o);return{ciphertext:Buffer.concat([i.update(e),i.final()]),iv:o,authTag:i.getAuthTag()}}function aesGcmDecrypt(e,t,s,r){const o=Buffer.from(t,"base64"),i=crypto.createDecipheriv("aes-256-gcm",o,s);return i.setAuthTag(r),Buffer.concat([i.update(e),i.final()])}exports.NonceStore=NonceStore,exports.aesGcmEncrypt=aesGcmEncrypt,exports.aesGcmDecrypt=aesGcmDecrypt;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.aesGcmDecrypt = exports.aesGcmEncrypt = exports.NonceStore = exports.buildSortedQuery = exports.safeEqualHex = exports.signRequest = void 0;
4
+ const crypto = require("crypto");
5
+ function signRequest(params, signKey) {
6
+ const { method, path, sortedQuery, ts, nonce, bodyCipherB64 } = params;
7
+ const body = bodyCipherB64 ?? '';
8
+ const payload = [method, path, sortedQuery, ts, nonce, body].join('\n');
9
+ return crypto.createHmac('sha256', signKey).update(payload, 'utf8').digest('hex');
10
+ }
11
+ exports.signRequest = signRequest;
12
+ function safeEqualHex(a, b) {
13
+ const bufA = Buffer.from(a, 'hex');
14
+ const bufB = Buffer.from(b, 'hex');
15
+ if (bufA.length !== bufB.length || bufA.length === 0) {
16
+ return false;
17
+ }
18
+ return crypto.timingSafeEqual(bufA, bufB);
19
+ }
20
+ exports.safeEqualHex = safeEqualHex;
21
+ function buildSortedQuery(query) {
22
+ if (!query)
23
+ return '';
24
+ let pairs;
25
+ if (typeof query === 'string') {
26
+ const s = query.startsWith('?') ? query.slice(1) : query;
27
+ if (!s)
28
+ return '';
29
+ pairs = s.split('&').map((kv) => {
30
+ const i = kv.indexOf('=');
31
+ return i === -1 ? [kv, ''] : [kv.slice(0, i), kv.slice(i + 1)];
32
+ });
33
+ }
34
+ else if (typeof query === 'object') {
35
+ pairs = [];
36
+ for (const [k, v] of Object.entries(query)) {
37
+ if (Array.isArray(v)) {
38
+ for (const item of v)
39
+ pairs.push([k, String(item)]);
40
+ }
41
+ else {
42
+ pairs.push([k, String(v)]);
43
+ }
44
+ }
45
+ }
46
+ else {
47
+ return '';
48
+ }
49
+ pairs.sort((a, b) => a[0] === b[0] ? (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0) : a[0] < b[0] ? -1 : 1);
50
+ return pairs.map(([k, v]) => `${k}=${v}`).join('&');
51
+ }
52
+ exports.buildSortedQuery = buildSortedQuery;
53
+ class NonceStore {
54
+ store = new Map();
55
+ capacity;
56
+ ttlMs;
57
+ sweepTimer = null;
58
+ constructor(capacity = 10000, ttlMs = 5 * 60 * 1000) {
59
+ this.capacity = capacity;
60
+ this.ttlMs = ttlMs;
61
+ this.sweepTimer = setInterval(() => this.sweep(), Math.max(1000, Math.floor(ttlMs / 2)));
62
+ if (this.sweepTimer.unref)
63
+ this.sweepTimer.unref();
64
+ }
65
+ has(nonce) {
66
+ const now = Date.now();
67
+ const exp = this.store.get(nonce);
68
+ if (exp !== undefined) {
69
+ if (now < exp)
70
+ return true;
71
+ this.store.delete(nonce);
72
+ }
73
+ return false;
74
+ }
75
+ set(nonce) {
76
+ if (this.store.size >= this.capacity) {
77
+ const oldest = this.store.keys().next().value;
78
+ if (oldest !== undefined)
79
+ this.store.delete(oldest);
80
+ }
81
+ this.store.set(nonce, Date.now() + this.ttlMs);
82
+ }
83
+ seen(nonce) {
84
+ if (this.has(nonce))
85
+ return true;
86
+ this.set(nonce);
87
+ return false;
88
+ }
89
+ sweep() {
90
+ const now = Date.now();
91
+ for (const [k, exp] of this.store) {
92
+ if (now >= exp)
93
+ this.store.delete(k);
94
+ }
95
+ }
96
+ dispose() {
97
+ if (this.sweepTimer) {
98
+ clearInterval(this.sweepTimer);
99
+ this.sweepTimer = null;
100
+ }
101
+ this.store.clear();
102
+ }
103
+ }
104
+ exports.NonceStore = NonceStore;
105
+ function aesGcmEncrypt(plaintext, cryptKey, iv) {
106
+ const key = Buffer.from(cryptKey, 'base64');
107
+ const gcmIv = iv ?? crypto.randomBytes(12);
108
+ const cipher = crypto.createCipheriv('aes-256-gcm', key, gcmIv);
109
+ const enc = Buffer.concat([cipher.update(plaintext), cipher.final()]);
110
+ return { ciphertext: enc, iv: gcmIv, authTag: cipher.getAuthTag() };
111
+ }
112
+ exports.aesGcmEncrypt = aesGcmEncrypt;
113
+ function aesGcmDecrypt(ciphertext, cryptKey, iv, authTag) {
114
+ const key = Buffer.from(cryptKey, 'base64');
115
+ const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);
116
+ decipher.setAuthTag(authTag);
117
+ return Buffer.concat([decipher.update(ciphertext), decipher.final()]);
118
+ }
119
+ exports.aesGcmDecrypt = aesGcmDecrypt;
2
120
  //# sourceMappingURL=app-crypto.js.map
@@ -1 +1 @@
1
- "{\"version\":3,\"file\":\"common/app-crypto.js\",\"names\":[\"crypto\",\"require\",\"signRequest\",\"params\",\"signKey\",\"method\",\"path\",\"sortedQuery\",\"ts\",\"nonce\",\"bodyCipherB64\",\"payload\",\"join\",\"createHmac\",\"update\",\"digest\",\"safeEqualHex\",\"a\",\"b\",\"bufA\",\"Buffer\",\"from\",\"bufB\",\"length\",\"timingSafeEqual\",\"buildSortedQuery\",\"query\",\"pairs\",\"s\",\"startsWith\",\"slice\",\"split\",\"map\",\"kv\",\"i\",\"indexOf\",\"k\",\"v\",\"Object\",\"entries\",\"Array\",\"isArray\",\"item\",\"push\",\"String\",\"sort\",\"exports\",\"NonceStore\",\"store\",\"Map\",\"capacity\",\"ttlMs\",\"sweepTimer\",\"constructor\",\"this\",\"setInterval\",\"sweep\",\"Math\",\"max\",\"floor\",\"unref\",\"has\",\"now\",\"Date\",\"exp\",\"get\",\"undefined\",\"delete\",\"set\",\"size\",\"oldest\",\"keys\",\"next\",\"value\",\"seen\",\"dispose\",\"clearInterval\",\"clear\",\"aesGcmEncrypt\",\"plaintext\",\"cryptKey\",\"iv\",\"key\",\"gcmIv\",\"randomBytes\",\"cipher\",\"createCipheriv\",\"ciphertext\",\"concat\",\"final\",\"authTag\",\"getAuthTag\",\"aesGcmDecrypt\",\"decipher\",\"createDecipheriv\",\"setAuthTag\"],\"sources\":[\"../../src/common/app-crypto.ts\"],\"mappings\":\"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\",\"ignoreList\":[]}"
1
+ {"version":3,"file":"app-crypto.js","sourceRoot":"","sources":["../../src/common/app-crypto.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,73 @@
1
- "use strict";var __decorate=this&&this.__decorate||function(e,t,o,n){var r,i=arguments.length,c=i<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,o,n);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(c=(i<3?r(c):i>3?r(t,o,c):r(t,o))||c);return i>3&&c&&Object.defineProperty(t,o,c),c},__metadata=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.AppSignGuard=void 0;const common_1=require("@nestjs/common"),config_1=require("@nestjs/config"),app_crypto_1=require("./app-crypto");let AppSignGuard=class{logger=new common_1.Logger("AppSignGuard");signKey;tsWindow;nonceStore;constructor(e){const t=e.get("appSign");this.signKey=t.signKey,this.tsWindow=t.tsWindow,this.nonceStore=new app_crypto_1.NonceStore(1e4,1e3*t.tsWindow)}async canActivate(e){const t=e.switchToHttp().getRequest(),o=t.headers["x-app-ts"]??"",n=t.headers["x-app-nonce"]??"",r=t.headers["x-app-sign"]??"";if(!o||!n||!r)throw new common_1.UnauthorizedException("缺少大屏签名头");const i=Number(o);if(!Number.isFinite(i)||i<=0)throw new common_1.UnauthorizedException("时间戳非法");const c=Math.floor(Date.now()/1e3);if(Math.abs(c-i)>this.tsWindow)throw new common_1.UnauthorizedException("请求已过期");const{path:a,sortedQuery:p}=splitUrl(t.originalUrl||t.url||""),s=(0,app_crypto_1.signRequest)({method:t.method.toUpperCase(),path:a,sortedQuery:p,ts:o,nonce:n,bodyCipherB64:""},this.signKey);if(!(0,app_crypto_1.safeEqualHex)(s,r.toLowerCase()))throw this.logger.warn(`签名校验失败 ${t.method} ${t.url} nonce=${n}`),new common_1.UnauthorizedException("签名错误");if(this.nonceStore.seen(n))throw new common_1.UnauthorizedException("重复请求");return!0}};function splitUrl(e){const t=e.indexOf("?"),o=-1===t?e:e.slice(0,t),n=-1===t?"":e.slice(t+1);return{path:o,sortedQuery:(0,app_crypto_1.buildSortedQuery)(n)}}exports.AppSignGuard=AppSignGuard,exports.AppSignGuard=AppSignGuard=__decorate([(0,common_1.Injectable)(),__metadata("design:paramtypes",[config_1.ConfigService])],AppSignGuard);
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AppSignGuard = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const config_1 = require("@nestjs/config");
15
+ const app_crypto_1 = require("./app-crypto");
16
+ let AppSignGuard = class AppSignGuard {
17
+ logger = new common_1.Logger('AppSignGuard');
18
+ signKey;
19
+ tsWindow;
20
+ nonceStore;
21
+ constructor(config) {
22
+ const s = config.get('appSign');
23
+ this.signKey = s.signKey;
24
+ this.tsWindow = s.tsWindow;
25
+ this.nonceStore = new app_crypto_1.NonceStore(10000, s.tsWindow * 1000);
26
+ }
27
+ async canActivate(context) {
28
+ const req = context.switchToHttp().getRequest();
29
+ const ts = req.headers['x-app-ts'] ?? '';
30
+ const nonce = req.headers['x-app-nonce'] ?? '';
31
+ const sign = req.headers['x-app-sign'] ?? '';
32
+ if (!ts || !nonce || !sign) {
33
+ throw new common_1.UnauthorizedException('缺少大屏签名头');
34
+ }
35
+ const tsNum = Number(ts);
36
+ if (!Number.isFinite(tsNum) || tsNum <= 0) {
37
+ throw new common_1.UnauthorizedException('时间戳非法');
38
+ }
39
+ const nowSec = Math.floor(Date.now() / 1000);
40
+ if (Math.abs(nowSec - tsNum) > this.tsWindow) {
41
+ throw new common_1.UnauthorizedException('请求已过期');
42
+ }
43
+ const { path, sortedQuery } = splitUrl(req.originalUrl || req.url || '');
44
+ const expected = (0, app_crypto_1.signRequest)({
45
+ method: req.method.toUpperCase(),
46
+ path,
47
+ sortedQuery,
48
+ ts,
49
+ nonce,
50
+ bodyCipherB64: ''
51
+ }, this.signKey);
52
+ if (!(0, app_crypto_1.safeEqualHex)(expected, sign.toLowerCase())) {
53
+ this.logger.warn(`签名校验失败 ${req.method} ${req.url} nonce=${nonce}`);
54
+ throw new common_1.UnauthorizedException('签名错误');
55
+ }
56
+ if (this.nonceStore.seen(nonce)) {
57
+ throw new common_1.UnauthorizedException('重复请求');
58
+ }
59
+ return true;
60
+ }
61
+ };
62
+ exports.AppSignGuard = AppSignGuard;
63
+ exports.AppSignGuard = AppSignGuard = __decorate([
64
+ (0, common_1.Injectable)(),
65
+ __metadata("design:paramtypes", [config_1.ConfigService])
66
+ ], AppSignGuard);
67
+ function splitUrl(originalUrl) {
68
+ const qIdx = originalUrl.indexOf('?');
69
+ const path = qIdx === -1 ? originalUrl : originalUrl.slice(0, qIdx);
70
+ const rawQuery = qIdx === -1 ? '' : originalUrl.slice(qIdx + 1);
71
+ return { path, sortedQuery: (0, app_crypto_1.buildSortedQuery)(rawQuery) };
72
+ }
2
73
  //# sourceMappingURL=app-sign.guard.js.map
@@ -1 +1 @@
1
- "{\"version\":3,\"file\":\"common/app-sign.guard.js\",\"names\":[\"common_1\",\"require\",\"config_1\",\"app_crypto_1\",\"AppSignGuard\",\"logger\",\"Logger\",\"signKey\",\"tsWindow\",\"nonceStore\",\"constructor\",\"config\",\"s\",\"get\",\"this\",\"NonceStore\",\"canActivate\",\"context\",\"req\",\"switchToHttp\",\"getRequest\",\"ts\",\"headers\",\"nonce\",\"sign\",\"UnauthorizedException\",\"tsNum\",\"Number\",\"isFinite\",\"nowSec\",\"Math\",\"floor\",\"Date\",\"now\",\"abs\",\"path\",\"sortedQuery\",\"splitUrl\",\"originalUrl\",\"url\",\"expected\",\"signRequest\",\"method\",\"toUpperCase\",\"bodyCipherB64\",\"safeEqualHex\",\"toLowerCase\",\"warn\",\"seen\",\"qIdx\",\"indexOf\",\"slice\",\"rawQuery\",\"buildSortedQuery\",\"exports\",\"__decorate\",\"Injectable\",\"ConfigService\"],\"sources\":[\"../../src/common/app-sign.guard.ts\"],\"mappings\":\"ylBAAA,MAAAA,SAAAC,QAAA,kBAOAC,SAAAD,QAAA,kBAEAE,aAAAF,QAAA,gBAsBO,IAAMG,aAAN,MACYC,OAAS,IAAIL,SAAAM,OAAO,gBACpBC,QACAC,SACAC,WAEjB,WAAAC,CAAYC,GACV,MAAMC,EAAID,EAAOE,IAA0B,WAC3CC,KAAKP,QAAUK,EAAEL,QACjBO,KAAKN,SAAWI,EAAEJ,SAClBM,KAAKL,WAAa,IAAIN,aAAAY,WAAW,IAAoB,IAAbH,EAAEJ,SAC5C,CAEA,iBAAMQ,CAAYC,GAChB,MAAMC,EAAMD,EAAQE,eAAeC,aAM7BC,EAAMH,EAAII,QAAQ,aAA0B,GAC5CC,EAASL,EAAII,QAAQ,gBAA6B,GAClDE,EAAQN,EAAII,QAAQ,eAA4B,GAEtD,IAAKD,IAAOE,IAAUC,EACpB,MAAM,IAAIxB,SAAAyB,sBAAsB,WAIlC,MAAMC,EAAQC,OAAON,GACrB,IAAKM,OAAOC,SAASF,IAAUA,GAAS,EACtC,MAAM,IAAI1B,SAAAyB,sBAAsB,SAElC,MAAMI,EAASC,KAAKC,MAAMC,KAAKC,MAAQ,KACvC,GAAIH,KAAKI,IAAIL,EAASH,GAASZ,KAAKN,SAClC,MAAM,IAAIR,SAAAyB,sBAAsB,SASlC,MAAMU,KAAEA,EAAIC,YAAEA,GAAgBC,SAASnB,EAAIoB,aAAepB,EAAIqB,KAAO,IAC/DC,GAAW,EAAArC,aAAAsC,aACf,CACEC,OAAQxB,EAAIwB,OAAOC,cACnBR,OACAC,cACAf,KACAE,QACAqB,cAAe,IAEjB9B,KAAKP,SAGP,KAAK,EAAAJ,aAAA0C,cAAaL,EAAUhB,EAAKsB,eAI/B,MAHAhC,KAAKT,OAAO0C,KACV,UAAU7B,EAAIwB,UAAUxB,EAAIqB,aAAahB,KAErC,IAAIvB,SAAAyB,sBAAsB,QAIlC,GAAIX,KAAKL,WAAWuC,KAAKzB,GACvB,MAAM,IAAIvB,SAAAyB,sBAAsB,QAGlC,OAAO,CACT,GASF,SAASY,SAASC,GAChB,MAAMW,EAAOX,EAAYY,QAAQ,KAC3Bf,GAAiB,IAAVc,EAAcX,EAAcA,EAAYa,MAAM,EAAGF,GACxDG,GAAqB,IAAVH,EAAc,GAAKX,EAAYa,MAAMF,EAAO,GAC7D,MAAO,CAAEd,OAAMC,aAAa,EAAAjC,aAAAkD,kBAAiBD,GAC/C,CApFaE,QAAAlD,0B,qBAAAA,aAAYmD,WAAA,EADxB,EAAAvD,SAAAwD,c,gCAOqBtD,SAAAuD,iBANTrD\",\"ignoreList\":[]}"
1
+ {"version":3,"file":"app-sign.guard.js","sourceRoot":"","sources":["../../src/common/app-sign.guard.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,21 @@
1
- "use strict";var __decorate=this&&this.__decorate||function(e,o,p,r){var t,n=arguments.length,i=n<3?o:null===r?r=Object.getOwnPropertyDescriptor(o,p):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,o,p,r);else for(var d=e.length-1;d>=0;d--)(t=e[d])&&(i=(n<3?t(i):n>3?t(o,p,i):t(o,p))||i);return n>3&&i&&Object.defineProperty(o,p,i),i};Object.defineProperty(exports,"__esModule",{value:!0}),exports.AppSignModule=void 0;const common_1=require("@nestjs/common"),app_sign_guard_1=require("./app-sign.guard");let AppSignModule=class{};exports.AppSignModule=AppSignModule,exports.AppSignModule=AppSignModule=__decorate([(0,common_1.Module)({providers:[app_sign_guard_1.AppSignGuard],exports:[app_sign_guard_1.AppSignGuard]})],AppSignModule);
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.AppSignModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const app_sign_guard_1 = require("./app-sign.guard");
12
+ let AppSignModule = class AppSignModule {
13
+ };
14
+ exports.AppSignModule = AppSignModule;
15
+ exports.AppSignModule = AppSignModule = __decorate([
16
+ (0, common_1.Module)({
17
+ providers: [app_sign_guard_1.AppSignGuard],
18
+ exports: [app_sign_guard_1.AppSignGuard]
19
+ })
20
+ ], AppSignModule);
2
21
  //# sourceMappingURL=app-sign.module.js.map
@@ -1 +1 @@
1
- "{\"version\":3,\"file\":\"common/app-sign.module.js\",\"names\":[\"common_1\",\"require\",\"app_sign_guard_1\",\"AppSignModule\",\"exports\",\"__decorate\",\"Module\",\"providers\",\"AppSignGuard\"],\"sources\":[\"../../src/common/app-sign.module.ts\"],\"mappings\":\"2cAAA,MAAAA,SAAAC,QAAA,kBACAC,iBAAAD,QAAA,oBAWO,IAAME,cAAN,QAAMC,QAAAD,4B,sBAAAA,cAAaE,WAAA,EAJzB,EAAAL,SAAAM,QAAO,CACNC,UAAW,CAACL,iBAAAM,cACZJ,QAAS,CAACF,iBAAAM,iBAECL\",\"ignoreList\":[]}"
1
+ {"version":3,"file":"app-sign.module.js","sourceRoot":"","sources":["../../src/common/app-sign.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,qDAAgD;AAWzC,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IAJzB,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,6BAAY,CAAC;QACzB,OAAO,EAAE,CAAC,6BAAY,CAAC;KACxB,CAAC;GACW,aAAa,CAAG"}
@@ -1,2 +1,24 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ResponseResult=void 0;class ResponseResult{code;message;data;constructor(s,e,t){this.code=s,this.message=e,this.data=t}static success(s,e="success"){return new ResponseResult(200,e,s)}static fail(s="failed",e=500){return new ResponseResult(e,s,null)}static write(s,e,t,o){s.status(e>=100&&e<600?e:200).json(new ResponseResult(e,t,o))}}exports.ResponseResult=ResponseResult;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResponseResult = void 0;
4
+ class ResponseResult {
5
+ code;
6
+ message;
7
+ data;
8
+ constructor(code, message, data) {
9
+ this.code = code;
10
+ this.message = message;
11
+ this.data = data;
12
+ }
13
+ static success(data, message = 'success') {
14
+ return new ResponseResult(200, message, data);
15
+ }
16
+ static fail(message = 'failed', code = 500) {
17
+ return new ResponseResult(code, message, null);
18
+ }
19
+ static write(res, code, message, data) {
20
+ res.status(code >= 100 && code < 600 ? code : 200).json(new ResponseResult(code, message, data));
21
+ }
22
+ }
23
+ exports.ResponseResult = ResponseResult;
2
24
  //# sourceMappingURL=response.js.map
@@ -1 +1 @@
1
- "{\"version\":3,\"file\":\"common/response.js\",\"names\":[\"ResponseResult\",\"code\",\"message\",\"data\",\"constructor\",\"this\",\"success\",\"fail\",\"write\",\"res\",\"status\",\"json\",\"exports\"],\"sources\":[\"../../src/common/response.ts\"],\"mappings\":\"kGAOA,MAAaA,eACXC,KACAC,QACAC,KAEA,WAAAC,CAAYH,EAAcC,EAAiBC,GACzCE,KAAKJ,KAAOA,EACZI,KAAKH,QAAUA,EACfG,KAAKF,KAAOA,CACd,CAEA,cAAOG,CAAWH,EAAUD,EAAU,WACpC,OAAO,IAAIF,eAAe,IAAKE,EAASC,EAC1C,CAEA,WAAOI,CAAKL,EAAU,SAAUD,EAAO,KACrC,OAAO,IAAID,eAAeC,EAAMC,EAAS,KAC3C,CAKA,YAAOM,CAAMC,EAAeR,EAAcC,EAAiBC,GACzDM,EAAIC,OAAOT,GAAQ,KAAOA,EAAO,IAAMA,EAAO,KAAKU,KAAK,IAAIX,eAAeC,EAAMC,EAASC,GAC5F,EAxBFS,QAAAZ\",\"ignoreList\":[]}"
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/common/response.ts"],"names":[],"mappings":";;;AAOA,MAAa,cAAc;IACzB,IAAI,CAAS;IACb,OAAO,CAAS;IAChB,IAAI,CAAK;IAET,YAAY,IAAY,EAAE,OAAe,EAAE,IAAQ;QACjD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,OAAO,CAAI,IAAQ,EAAE,OAAO,GAAG,SAAS;QAC7C,OAAO,IAAI,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,IAAI,GAAG,GAAG;QACxC,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAKD,MAAM,CAAC,KAAK,CAAC,GAAa,EAAE,IAAY,EAAE,OAAe,EAAE,IAAU;QACnE,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACnG,CAAC;CACF;AAzBD,wCAyBC"}
@@ -1,2 +1,43 @@
1
- "use strict";var __decorate=this&&this.__decorate||function(t,e,r,o){var c,n=arguments.length,s=n<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,r,o);else for(var a=t.length-1;a>=0;a--)(c=t[a])&&(s=(n<3?c(s):n>3?c(e,r,s):c(e,r))||s);return n>3&&s&&Object.defineProperty(e,r,s),s},__metadata=this&&this.__metadata||function(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.AppThrottlerGuard=void 0;const common_1=require("@nestjs/common"),core_1=require("@nestjs/core"),throttler_1=require("@nestjs/throttler"),config_1=require("@nestjs/config");let AppThrottlerGuard=class extends throttler_1.ThrottlerGuard{config;constructor(t,e,r,o){super(t,e,r),this.config=o}async shouldSkip(t){const e=t.switchToHttp().getRequest(),r=e?.url||"";return this.config.get("throttle").whitelist.some(t=>r.startsWith(t))}async getTracker(t){const e=t.headers["x-forwarded-for"];return e?String(e).split(",")[0].trim():t.ip||t.connection?.remoteAddress||"unknown"}};exports.AppThrottlerGuard=AppThrottlerGuard,exports.AppThrottlerGuard=AppThrottlerGuard=__decorate([(0,common_1.Injectable)(),__metadata("design:paramtypes",[Object,Object,core_1.Reflector,config_1.ConfigService])],AppThrottlerGuard);
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AppThrottlerGuard = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const core_1 = require("@nestjs/core");
15
+ const throttler_1 = require("@nestjs/throttler");
16
+ const config_1 = require("@nestjs/config");
17
+ let AppThrottlerGuard = class AppThrottlerGuard extends throttler_1.ThrottlerGuard {
18
+ config;
19
+ constructor(options, storageService, reflector, config) {
20
+ super(options, storageService, reflector);
21
+ this.config = config;
22
+ }
23
+ async shouldSkip(_context) {
24
+ const req = _context.switchToHttp().getRequest();
25
+ const url = req?.url || '';
26
+ const whitelist = this.config.get('throttle').whitelist;
27
+ return whitelist.some((p) => url.startsWith(p));
28
+ }
29
+ async getTracker(req) {
30
+ const xff = req.headers['x-forwarded-for'];
31
+ if (xff) {
32
+ return String(xff).split(',')[0].trim();
33
+ }
34
+ return req.ip || req.connection?.remoteAddress || 'unknown';
35
+ }
36
+ };
37
+ exports.AppThrottlerGuard = AppThrottlerGuard;
38
+ exports.AppThrottlerGuard = AppThrottlerGuard = __decorate([
39
+ (0, common_1.Injectable)(),
40
+ __metadata("design:paramtypes", [Object, Object, core_1.Reflector,
41
+ config_1.ConfigService])
42
+ ], AppThrottlerGuard);
2
43
  //# sourceMappingURL=throttle.guard.js.map