cloudisk 1.0.0

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 (189) hide show
  1. package/.env.example +17 -0
  2. package/README.md +120 -0
  3. package/dist/config/index.d.ts +27 -0
  4. package/dist/config/index.d.ts.map +1 -0
  5. package/dist/config/index.js +45 -0
  6. package/dist/config/index.js.map +1 -0
  7. package/dist/dto/auth.dto.d.ts +14 -0
  8. package/dist/dto/auth.dto.d.ts.map +1 -0
  9. package/dist/dto/auth.dto.js +16 -0
  10. package/dist/dto/auth.dto.js.map +1 -0
  11. package/dist/dto/user.dto.d.ts +76 -0
  12. package/dist/dto/user.dto.d.ts.map +1 -0
  13. package/dist/dto/user.dto.js +70 -0
  14. package/dist/dto/user.dto.js.map +1 -0
  15. package/dist/handlers/auth.handler.d.ts +10 -0
  16. package/dist/handlers/auth.handler.d.ts.map +1 -0
  17. package/dist/handlers/auth.handler.js +41 -0
  18. package/dist/handlers/auth.handler.js.map +1 -0
  19. package/dist/handlers/disk.handler.d.ts +12 -0
  20. package/dist/handlers/disk.handler.d.ts.map +1 -0
  21. package/dist/handlers/disk.handler.js +61 -0
  22. package/dist/handlers/disk.handler.js.map +1 -0
  23. package/dist/handlers/samba.handler.d.ts +16 -0
  24. package/dist/handlers/samba.handler.d.ts.map +1 -0
  25. package/dist/handlers/samba.handler.js +120 -0
  26. package/dist/handlers/samba.handler.js.map +1 -0
  27. package/dist/handlers/share.handler.d.ts +11 -0
  28. package/dist/handlers/share.handler.d.ts.map +1 -0
  29. package/dist/handlers/share.handler.js +52 -0
  30. package/dist/handlers/share.handler.js.map +1 -0
  31. package/dist/handlers/system.handler.d.ts +17 -0
  32. package/dist/handlers/system.handler.d.ts.map +1 -0
  33. package/dist/handlers/system.handler.js +210 -0
  34. package/dist/handlers/system.handler.js.map +1 -0
  35. package/dist/handlers/user.handler.d.ts +16 -0
  36. package/dist/handlers/user.handler.d.ts.map +1 -0
  37. package/dist/handlers/user.handler.js +101 -0
  38. package/dist/handlers/user.handler.js.map +1 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +799 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/lib/errors.d.ts +13 -0
  44. package/dist/lib/errors.d.ts.map +1 -0
  45. package/dist/lib/errors.js +35 -0
  46. package/dist/lib/errors.js.map +1 -0
  47. package/dist/lib/log-buffer.d.ts +20 -0
  48. package/dist/lib/log-buffer.d.ts.map +1 -0
  49. package/dist/lib/log-buffer.js +75 -0
  50. package/dist/lib/log-buffer.js.map +1 -0
  51. package/dist/lib/response.d.ts +5 -0
  52. package/dist/lib/response.d.ts.map +1 -0
  53. package/dist/lib/response.js +19 -0
  54. package/dist/lib/response.js.map +1 -0
  55. package/dist/lib/shell.d.ts +9 -0
  56. package/dist/lib/shell.d.ts.map +1 -0
  57. package/dist/lib/shell.js +32 -0
  58. package/dist/lib/shell.js.map +1 -0
  59. package/dist/middleware/auth.d.ts +17 -0
  60. package/dist/middleware/auth.d.ts.map +1 -0
  61. package/dist/middleware/auth.js +43 -0
  62. package/dist/middleware/auth.js.map +1 -0
  63. package/dist/middleware/error-handler.d.ts +3 -0
  64. package/dist/middleware/error-handler.d.ts.map +1 -0
  65. package/dist/middleware/error-handler.js +14 -0
  66. package/dist/middleware/error-handler.js.map +1 -0
  67. package/dist/middleware/logger.d.ts +3 -0
  68. package/dist/middleware/logger.d.ts.map +1 -0
  69. package/dist/middleware/logger.js +25 -0
  70. package/dist/middleware/logger.js.map +1 -0
  71. package/dist/middleware/validate.d.ts +3 -0
  72. package/dist/middleware/validate.d.ts.map +1 -0
  73. package/dist/middleware/validate.js +28 -0
  74. package/dist/middleware/validate.js.map +1 -0
  75. package/dist/operators/disk.operator.d.ts +29 -0
  76. package/dist/operators/disk.operator.d.ts.map +1 -0
  77. package/dist/operators/disk.operator.js +70 -0
  78. package/dist/operators/disk.operator.js.map +1 -0
  79. package/dist/operators/linux-user.operator.d.ts +13 -0
  80. package/dist/operators/linux-user.operator.d.ts.map +1 -0
  81. package/dist/operators/linux-user.operator.js +47 -0
  82. package/dist/operators/linux-user.operator.js.map +1 -0
  83. package/dist/operators/quota.operator.d.ts +18 -0
  84. package/dist/operators/quota.operator.d.ts.map +1 -0
  85. package/dist/operators/quota.operator.js +54 -0
  86. package/dist/operators/quota.operator.js.map +1 -0
  87. package/dist/operators/samba.operator.d.ts +41 -0
  88. package/dist/operators/samba.operator.d.ts.map +1 -0
  89. package/dist/operators/samba.operator.js +274 -0
  90. package/dist/operators/samba.operator.js.map +1 -0
  91. package/dist/operators/share.operator.d.ts +21 -0
  92. package/dist/operators/share.operator.d.ts.map +1 -0
  93. package/dist/operators/share.operator.js +67 -0
  94. package/dist/operators/share.operator.js.map +1 -0
  95. package/dist/repositories/admin.repo.d.ts +30 -0
  96. package/dist/repositories/admin.repo.d.ts.map +1 -0
  97. package/dist/repositories/admin.repo.js +20 -0
  98. package/dist/repositories/admin.repo.js.map +1 -0
  99. package/dist/repositories/user.repo.d.ts +44 -0
  100. package/dist/repositories/user.repo.d.ts.map +1 -0
  101. package/dist/repositories/user.repo.js +3 -0
  102. package/dist/repositories/user.repo.js.map +1 -0
  103. package/dist/repositories/user.repo.sqlite.d.ts +16 -0
  104. package/dist/repositories/user.repo.sqlite.d.ts.map +1 -0
  105. package/dist/repositories/user.repo.sqlite.js +47 -0
  106. package/dist/repositories/user.repo.sqlite.js.map +1 -0
  107. package/dist/routes/auth.routes.d.ts +4 -0
  108. package/dist/routes/auth.routes.d.ts.map +1 -0
  109. package/dist/routes/auth.routes.js +15 -0
  110. package/dist/routes/auth.routes.js.map +1 -0
  111. package/dist/routes/disk.routes.d.ts +4 -0
  112. package/dist/routes/disk.routes.d.ts.map +1 -0
  113. package/dist/routes/disk.routes.js +16 -0
  114. package/dist/routes/disk.routes.js.map +1 -0
  115. package/dist/routes/index.d.ts +4 -0
  116. package/dist/routes/index.d.ts.map +1 -0
  117. package/dist/routes/index.js +64 -0
  118. package/dist/routes/index.js.map +1 -0
  119. package/dist/routes/samba.routes.d.ts +4 -0
  120. package/dist/routes/samba.routes.d.ts.map +1 -0
  121. package/dist/routes/samba.routes.js +20 -0
  122. package/dist/routes/samba.routes.js.map +1 -0
  123. package/dist/routes/share.routes.d.ts +4 -0
  124. package/dist/routes/share.routes.d.ts.map +1 -0
  125. package/dist/routes/share.routes.js +15 -0
  126. package/dist/routes/share.routes.js.map +1 -0
  127. package/dist/routes/system.routes.d.ts +4 -0
  128. package/dist/routes/system.routes.d.ts.map +1 -0
  129. package/dist/routes/system.routes.js +20 -0
  130. package/dist/routes/system.routes.js.map +1 -0
  131. package/dist/routes/user.routes.d.ts +5 -0
  132. package/dist/routes/user.routes.d.ts.map +1 -0
  133. package/dist/routes/user.routes.js +44 -0
  134. package/dist/routes/user.routes.js.map +1 -0
  135. package/dist/services/auth.service.d.ts +23 -0
  136. package/dist/services/auth.service.d.ts.map +1 -0
  137. package/dist/services/auth.service.js +62 -0
  138. package/dist/services/auth.service.js.map +1 -0
  139. package/dist/services/disk.service.d.ts +12 -0
  140. package/dist/services/disk.service.d.ts.map +1 -0
  141. package/dist/services/disk.service.js +34 -0
  142. package/dist/services/disk.service.js.map +1 -0
  143. package/dist/services/init.service.d.ts +8 -0
  144. package/dist/services/init.service.d.ts.map +1 -0
  145. package/dist/services/init.service.js +47 -0
  146. package/dist/services/init.service.js.map +1 -0
  147. package/dist/services/quota.service.d.ts +14 -0
  148. package/dist/services/quota.service.d.ts.map +1 -0
  149. package/dist/services/quota.service.js +32 -0
  150. package/dist/services/quota.service.js.map +1 -0
  151. package/dist/services/samba.service.d.ts +45 -0
  152. package/dist/services/samba.service.d.ts.map +1 -0
  153. package/dist/services/samba.service.js +61 -0
  154. package/dist/services/samba.service.js.map +1 -0
  155. package/dist/services/share.service.d.ts +18 -0
  156. package/dist/services/share.service.d.ts.map +1 -0
  157. package/dist/services/share.service.js +29 -0
  158. package/dist/services/share.service.js.map +1 -0
  159. package/dist/services/user.service.d.ts +48 -0
  160. package/dist/services/user.service.d.ts.map +1 -0
  161. package/dist/services/user.service.js +196 -0
  162. package/dist/services/user.service.js.map +1 -0
  163. package/dist/types/index.d.ts +7 -0
  164. package/dist/types/index.d.ts.map +1 -0
  165. package/dist/types/index.js +23 -0
  166. package/dist/types/index.js.map +1 -0
  167. package/dist/types/service.interfaces.d.ts +45 -0
  168. package/dist/types/service.interfaces.d.ts.map +1 -0
  169. package/dist/types/service.interfaces.js +3 -0
  170. package/dist/types/service.interfaces.js.map +1 -0
  171. package/package.json +63 -0
  172. package/prisma/schema.prisma +53 -0
  173. package/public/assets/Dashboard-BupoWE_7.js +1 -0
  174. package/public/assets/DiskManage-BY6Sy7T6.js +1 -0
  175. package/public/assets/InitWizard-CA9epEkr.css +1 -0
  176. package/public/assets/InitWizard-D5Xj7dX0.js +1 -0
  177. package/public/assets/Layout-D-CPXnPP.js +1 -0
  178. package/public/assets/Layout-DaQY8YzE.css +1 -0
  179. package/public/assets/LogViewer-CIJZzoXw.css +1 -0
  180. package/public/assets/LogViewer-DDAIjW9J.js +1 -0
  181. package/public/assets/Login-D92i6dQA.js +1 -0
  182. package/public/assets/Login-DimFYijw.css +1 -0
  183. package/public/assets/ServiceManage-CIWLurL_.css +1 -0
  184. package/public/assets/ServiceManage-D-ZWP7Ry.js +1 -0
  185. package/public/assets/ShareManage-BMsFoGea.js +1 -0
  186. package/public/assets/UserList-CqeA7r2Y.js +1 -0
  187. package/public/assets/index-B-crAlzg.css +1 -0
  188. package/public/assets/index-CfC5GCM9.js +100 -0
  189. package/public/index.html +14 -0
package/.env.example ADDED
@@ -0,0 +1,17 @@
1
+ # 服务
2
+ PORT=9528
3
+ NODE_ENV=production
4
+
5
+ # 数据库
6
+ DATABASE_URL=file:/etc/cloudisk/data/cloud_storage.db
7
+
8
+ # 认证 (请修改为随机字符串)
9
+ JWT_SECRET=change-me-to-a-random-string
10
+ JWT_EXPIRES_IN=24h
11
+
12
+ # 系统
13
+ SHARE_BASE=/share
14
+ SHELL_TIMEOUT=30000
15
+
16
+ # 日志
17
+ LOG_LEVEL=info
package/README.md ADDED
@@ -0,0 +1,120 @@
1
+ # Cloudisk
2
+
3
+ Samba 文件共享管理平台 — 基于 Node.js + Vue 3 的 Web 管理系统。
4
+
5
+ ## 功能
6
+
7
+ | 模块 | 说明 |
8
+ |------|------|
9
+ | 用户管理 | 创建/删除/禁用 Samba 用户,自动配置系统用户、目录、配额 |
10
+ | 服务管理 | Samba 安装/卸载/启停,自动检测包管理器和服务名称 |
11
+ | 磁盘管理 | 磁盘列表、格式化 (XFS/EXT4)、挂载/卸载 |
12
+ | 共享目录 | 共享目录创建/删除、权限管理 |
13
+ | 配额管理 | XFS 磁盘配额,软/硬上限独立控制 |
14
+ | 系统日志 | 实时日志流 (SSE),支持级别过滤 |
15
+ | 系统监控 | 存储用量、服务健康检查 |
16
+
17
+ ## 快速开始
18
+
19
+ ```bash
20
+ # 全局安装
21
+ npm install -g cloudisk
22
+
23
+ # 初始化配置目录
24
+ cloudisk init
25
+
26
+ # 启动服务
27
+ cloudisk server start
28
+
29
+ # 浏览器访问 http://your-ip:9528
30
+ ```
31
+
32
+ 首次访问进入初始化向导,设置管理员账户和站点标题。
33
+
34
+ ## 命令行
35
+
36
+ ### 服务管理
37
+
38
+ ```bash
39
+ cloudisk server start # 启动服务
40
+ -p, --port <端口> # 默认 9528
41
+ -c, --config <配置文件> # 默认 /etc/cloudisk/.env
42
+ -d, --db <数据库路径>
43
+ -l, --log-level <级别> # debug/info/warn/error
44
+
45
+ cloudisk server install-service # 注册 systemd 服务
46
+ ```
47
+
48
+ ### 用户管理
49
+
50
+ ```bash
51
+ cloudisk user list # 列出用户 (-j JSON 格式)
52
+ cloudisk user add -u <用户名> -p <密码> [-q <配额GB>]
53
+ cloudisk user delete -u <用户名> [--force]
54
+ cloudisk user change-password -u <用户名> -p <新密码>
55
+ cloudisk user set-quota -u <用户名> -q <配额GB>
56
+ ```
57
+
58
+ ### 其他命令
59
+
60
+ ```bash
61
+ cloudisk status # 查看系统状态
62
+ cloudisk admin reset-password # 重置管理员密码 (-u 用户名 -p 新密码)
63
+ cloudisk backup [-o <输出路径>] # 备份数据库
64
+ cloudisk restore -f <备份文件> # 恢复数据库 [--force]
65
+ cloudisk init # 初始化配置目录
66
+ cloudisk migrate # 从 account.json 迁移用户
67
+ ```
68
+
69
+ 所有命令支持 `-h` 查看帮助。
70
+
71
+ ## 架构
72
+
73
+ ```
74
+ Handler → Service → Repository / Operator → 系统 / 数据库
75
+ ```
76
+
77
+ - **Handler**: HTTP 请求处理,参数解析,响应返回
78
+ - **Service**: 业务逻辑编排,依赖接口(SOLID 依赖倒置)
79
+ - **Repository**: 数据库操作(Prisma + SQLite)
80
+ - **Operator**: 系统命令执行(useradd、smbpasswd、mount 等)
81
+
82
+ ### 技术栈
83
+
84
+ | 层 | 技术 |
85
+ |----|------|
86
+ | 前端 | Vue 3 + Element Plus + Pinia + Vue Router |
87
+ | 后端 | Node.js + TypeScript + Express 5 |
88
+ | 数据库 | SQLite (Prisma ORM) |
89
+ | 认证 | JWT |
90
+ | 日志 | Pino (stdout + 内存缓冲 + 文件) |
91
+ | 实时通信 | SSE (Server-Sent Events) |
92
+
93
+ ## 数据目录
94
+
95
+ ```
96
+ /etc/cloudisk/
97
+ ├── .env # 环境配置
98
+ ├── data/cloud_storage.db # SQLite 数据库
99
+ └── logs/app.log # 应用日志
100
+ ```
101
+
102
+ ## 环境变量
103
+
104
+ | 变量 | 默认值 | 说明 |
105
+ |------|--------|------|
106
+ | PORT | 9528 | 服务端口 |
107
+ | DATABASE_URL | file:/etc/cloudisk/data/cloud_storage.db | 数据库路径 |
108
+ | JWT_EXPIRES_IN | 24h | Token 过期时间 |
109
+ | SHARE_BASE | /share | 共享目录根路径 |
110
+ | LOG_LEVEL | info | 日志级别 |
111
+
112
+ ## 系统要求
113
+
114
+ - Node.js >= 18
115
+ - Linux (需要 root 权限)
116
+ - Samba (可选,服务管理页面可自动安装)
117
+
118
+ ## 许可证
119
+
120
+ MIT
@@ -0,0 +1,27 @@
1
+ export declare const config: {
2
+ port: number;
3
+ nodeEnv: string;
4
+ siteTitle: string;
5
+ database: {
6
+ url: string;
7
+ dir: string;
8
+ };
9
+ auth: {
10
+ jwtSecret: string;
11
+ jwtExpiresIn: string;
12
+ };
13
+ system: {
14
+ shareBase: string;
15
+ shellTimeout: number;
16
+ };
17
+ log: {
18
+ level: string;
19
+ dir: string;
20
+ };
21
+ paths: {
22
+ etcDir: string;
23
+ envFile: string;
24
+ dbFile: string;
25
+ };
26
+ };
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;CA8BlB,CAAA"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.config = void 0;
7
+ const dotenv_1 = __importDefault(require("dotenv"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ // Load .env from /etc/cloudisk/.env if exists, otherwise from CWD
11
+ const etcEnv = '/etc/cloudisk/.env';
12
+ if (fs_1.default.existsSync(etcEnv)) {
13
+ dotenv_1.default.config({ path: etcEnv });
14
+ }
15
+ else {
16
+ dotenv_1.default.config();
17
+ }
18
+ const ETC_DIR = '/etc/cloudisk';
19
+ exports.config = {
20
+ port: parseInt(process.env.PORT || '9528', 10),
21
+ nodeEnv: process.env.NODE_ENV || 'development',
22
+ siteTitle: process.env.SITE_TITLE || 'Cloud Storage Manager',
23
+ database: {
24
+ url: process.env.DATABASE_URL || `file:${ETC_DIR}/data/cloud_storage.db`,
25
+ dir: path_1.default.join(ETC_DIR, 'data'),
26
+ },
27
+ auth: {
28
+ jwtSecret: process.env.JWT_SECRET || 'default-secret-change-me',
29
+ jwtExpiresIn: process.env.JWT_EXPIRES_IN || '24h',
30
+ },
31
+ system: {
32
+ shareBase: process.env.SHARE_BASE || '/share',
33
+ shellTimeout: parseInt(process.env.SHELL_TIMEOUT || '30000', 10),
34
+ },
35
+ log: {
36
+ level: process.env.LOG_LEVEL || 'debug',
37
+ dir: path_1.default.join(ETC_DIR, 'logs'),
38
+ },
39
+ paths: {
40
+ etcDir: ETC_DIR,
41
+ envFile: path_1.default.join(ETC_DIR, '.env'),
42
+ dbFile: path_1.default.join(ETC_DIR, 'data', 'cloud_storage.db'),
43
+ },
44
+ };
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA2B;AAC3B,gDAAuB;AACvB,4CAAmB;AAEnB,kEAAkE;AAClE,MAAM,MAAM,GAAG,oBAAoB,CAAA;AACnC,IAAI,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1B,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AACjC,CAAC;KAAM,CAAC;IACN,gBAAM,CAAC,MAAM,EAAE,CAAA;AACjB,CAAC;AAED,MAAM,OAAO,GAAG,eAAe,CAAA;AAElB,QAAA,MAAM,GAAG;IACpB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC;IAC9C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa;IAC9C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,uBAAuB;IAE5D,QAAQ,EAAE;QACR,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,QAAQ,OAAO,wBAAwB;QACxE,GAAG,EAAE,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;KAChC;IAED,IAAI,EAAE;QACJ,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,0BAA0B;QAC/D,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK;KAClD;IAED,MAAM,EAAE;QACN,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,QAAQ;QAC7C,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,EAAE,EAAE,CAAC;KACjE;IAED,GAAG,EAAE;QACH,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO;QACvC,GAAG,EAAE,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;KAChC;IAED,KAAK,EAAE;QACL,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACnC,MAAM,EAAE,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC;KACvD;CACF,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export declare const loginSchema: z.ZodObject<{
3
+ body: z.ZodObject<{
4
+ username: z.ZodString;
5
+ password: z.ZodString;
6
+ }, z.core.$strip>;
7
+ }, z.core.$strip>;
8
+ export declare const refreshTokenSchema: z.ZodObject<{
9
+ body: z.ZodObject<{
10
+ token: z.ZodString;
11
+ }, z.core.$strip>;
12
+ }, z.core.$strip>;
13
+ export type LoginInput = z.infer<typeof loginSchema>['body'];
14
+ //# sourceMappingURL=auth.dto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.dto.d.ts","sourceRoot":"","sources":["../../src/dto/auth.dto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,WAAW;;;;;iBAKtB,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;iBAI7B,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.refreshTokenSchema = exports.loginSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.loginSchema = zod_1.z.object({
6
+ body: zod_1.z.object({
7
+ username: zod_1.z.string().min(1, '用户名不能为空'),
8
+ password: zod_1.z.string().min(1, '密码不能为空'),
9
+ }),
10
+ });
11
+ exports.refreshTokenSchema = zod_1.z.object({
12
+ body: zod_1.z.object({
13
+ token: zod_1.z.string().min(1, 'Token 不能为空'),
14
+ }),
15
+ });
16
+ //# sourceMappingURL=auth.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.dto.js","sourceRoot":"","sources":["../../src/dto/auth.dto.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEV,QAAA,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,OAAC,CAAC,MAAM,CAAC;QACb,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;QACtC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;KACtC,CAAC;CACH,CAAC,CAAA;AAEW,QAAA,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,OAAC,CAAC,MAAM,CAAC;QACb,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC;KACvC,CAAC;CACH,CAAC,CAAA"}
@@ -0,0 +1,76 @@
1
+ import { z } from 'zod';
2
+ export declare const createUserSchema: z.ZodObject<{
3
+ body: z.ZodObject<{
4
+ username: z.ZodString;
5
+ password: z.ZodString;
6
+ groupName: z.ZodOptional<z.ZodString>;
7
+ quotaSoft: z.ZodNumber;
8
+ quotaHard: z.ZodOptional<z.ZodNumber>;
9
+ }, z.core.$strip>;
10
+ }, z.core.$strip>;
11
+ export declare const updateUserSchema: z.ZodObject<{
12
+ params: z.ZodObject<{
13
+ id: z.ZodPipe<z.ZodString, z.ZodTransform<number, string>>;
14
+ }, z.core.$strip>;
15
+ body: z.ZodObject<{
16
+ password: z.ZodOptional<z.ZodString>;
17
+ quotaSoft: z.ZodOptional<z.ZodNumber>;
18
+ quotaHard: z.ZodOptional<z.ZodNumber>;
19
+ status: z.ZodOptional<z.ZodEnum<{
20
+ disabled: "disabled";
21
+ active: "active";
22
+ }>>;
23
+ }, z.core.$strip>;
24
+ }, z.core.$strip>;
25
+ export declare const getUserSchema: z.ZodObject<{
26
+ params: z.ZodObject<{
27
+ id: z.ZodPipe<z.ZodString, z.ZodTransform<number, string>>;
28
+ }, z.core.$strip>;
29
+ }, z.core.$strip>;
30
+ export declare const listUsersSchema: z.ZodObject<{
31
+ query: z.ZodObject<{
32
+ page: z.ZodPipe<z.ZodDefault<z.ZodString>, z.ZodTransform<number, string>>;
33
+ size: z.ZodPipe<z.ZodDefault<z.ZodString>, z.ZodTransform<number, string>>;
34
+ q: z.ZodOptional<z.ZodString>;
35
+ }, z.core.$strip>;
36
+ }, z.core.$strip>;
37
+ export declare const deleteUserSchema: z.ZodObject<{
38
+ params: z.ZodObject<{
39
+ id: z.ZodPipe<z.ZodString, z.ZodTransform<number, string>>;
40
+ }, z.core.$strip>;
41
+ }, z.core.$strip>;
42
+ export declare const batchUsersSchema: z.ZodObject<{
43
+ body: z.ZodObject<{
44
+ accounts: z.ZodArray<z.ZodObject<{
45
+ username: z.ZodString;
46
+ password: z.ZodString;
47
+ groupName: z.ZodOptional<z.ZodString>;
48
+ quotaSoft: z.ZodNumber;
49
+ quotaHard: z.ZodOptional<z.ZodNumber>;
50
+ action: z.ZodEnum<{
51
+ delete: "delete";
52
+ add: "add";
53
+ }>;
54
+ }, z.core.$strip>>;
55
+ }, z.core.$strip>;
56
+ }, z.core.$strip>;
57
+ export declare const updateQuotaSchema: z.ZodObject<{
58
+ params: z.ZodObject<{
59
+ id: z.ZodPipe<z.ZodString, z.ZodTransform<number, string>>;
60
+ }, z.core.$strip>;
61
+ body: z.ZodObject<{
62
+ quotaSoft: z.ZodNumber;
63
+ quotaHard: z.ZodOptional<z.ZodNumber>;
64
+ }, z.core.$strip>;
65
+ }, z.core.$strip>;
66
+ export declare const changePasswordSchema: z.ZodObject<{
67
+ body: z.ZodObject<{
68
+ username: z.ZodString;
69
+ oldPassword: z.ZodString;
70
+ newPassword: z.ZodString;
71
+ }, z.core.$strip>;
72
+ }, z.core.$strip>;
73
+ export type CreateUserInput = z.infer<typeof createUserSchema>['body'];
74
+ export type UpdateUserInput = z.infer<typeof updateUserSchema>['body'];
75
+ export type ListUsersQuery = z.infer<typeof listUsersSchema>['query'];
76
+ //# sourceMappingURL=user.dto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.dto.d.ts","sourceRoot":"","sources":["../../src/dto/user.dto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,gBAAgB;;;;;;;;iBAQ3B,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;iBAU3B,CAAA;AAEF,eAAO,MAAM,aAAa;;;;iBAIxB,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;iBAM1B,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;iBAI3B,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;iBAa3B,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;iBAQ5B,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;iBAM/B,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AACtE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AACtE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC,OAAO,CAAC,CAAA"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.changePasswordSchema = exports.updateQuotaSchema = exports.batchUsersSchema = exports.deleteUserSchema = exports.listUsersSchema = exports.getUserSchema = exports.updateUserSchema = exports.createUserSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.createUserSchema = zod_1.z.object({
6
+ body: zod_1.z.object({
7
+ username: zod_1.z.string().min(1, '用户名不能为空').max(64),
8
+ password: zod_1.z.string().min(1, '密码不能为空').max(128),
9
+ groupName: zod_1.z.string().max(64).optional(),
10
+ quotaSoft: zod_1.z.number().int().min(0, '配额不能为负数'),
11
+ quotaHard: zod_1.z.number().int().min(0).optional(),
12
+ }),
13
+ });
14
+ exports.updateUserSchema = zod_1.z.object({
15
+ params: zod_1.z.object({
16
+ id: zod_1.z.string().transform(Number),
17
+ }),
18
+ body: zod_1.z.object({
19
+ password: zod_1.z.string().min(1).max(128).optional(),
20
+ quotaSoft: zod_1.z.number().int().min(0).optional(),
21
+ quotaHard: zod_1.z.number().int().min(0).optional(),
22
+ status: zod_1.z.enum(['active', 'disabled']).optional(),
23
+ }),
24
+ });
25
+ exports.getUserSchema = zod_1.z.object({
26
+ params: zod_1.z.object({
27
+ id: zod_1.z.string().transform(Number),
28
+ }),
29
+ });
30
+ exports.listUsersSchema = zod_1.z.object({
31
+ query: zod_1.z.object({
32
+ page: zod_1.z.string().default('1').transform(Number),
33
+ size: zod_1.z.string().default('10').transform(Number),
34
+ q: zod_1.z.string().optional(),
35
+ }),
36
+ });
37
+ exports.deleteUserSchema = zod_1.z.object({
38
+ params: zod_1.z.object({
39
+ id: zod_1.z.string().transform(Number),
40
+ }),
41
+ });
42
+ exports.batchUsersSchema = zod_1.z.object({
43
+ body: zod_1.z.object({
44
+ accounts: zod_1.z.array(zod_1.z.object({
45
+ username: zod_1.z.string().min(1),
46
+ password: zod_1.z.string().min(1),
47
+ groupName: zod_1.z.string().optional(),
48
+ quotaSoft: zod_1.z.number().int().min(0),
49
+ quotaHard: zod_1.z.number().int().min(0).optional(),
50
+ action: zod_1.z.enum(['add', 'delete']),
51
+ })),
52
+ }),
53
+ });
54
+ exports.updateQuotaSchema = zod_1.z.object({
55
+ params: zod_1.z.object({
56
+ id: zod_1.z.string().transform(Number),
57
+ }),
58
+ body: zod_1.z.object({
59
+ quotaSoft: zod_1.z.number().int().min(0),
60
+ quotaHard: zod_1.z.number().int().min(0).optional(),
61
+ }),
62
+ });
63
+ exports.changePasswordSchema = zod_1.z.object({
64
+ body: zod_1.z.object({
65
+ username: zod_1.z.string().min(1, '用户名不能为空').max(64),
66
+ oldPassword: zod_1.z.string().min(1, '原密码不能为空').max(128),
67
+ newPassword: zod_1.z.string().min(6, '新密码长度不能少于6位').max(128),
68
+ }),
69
+ });
70
+ //# sourceMappingURL=user.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.dto.js","sourceRoot":"","sources":["../../src/dto/user.dto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ import type { IAuthService } from '../types/service.interfaces';
3
+ export declare class AuthHandler {
4
+ private authService;
5
+ constructor(authService: IAuthService);
6
+ login: (req: Request, res: Response, next: NextFunction) => Promise<void>;
7
+ refresh: (req: Request, res: Response, next: NextFunction) => Promise<void>;
8
+ me: (req: Request, res: Response, next: NextFunction) => Promise<void>;
9
+ }
10
+ //# sourceMappingURL=auth.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.handler.d.ts","sourceRoot":"","sources":["../../src/handlers/auth.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAG/D,qBAAa,WAAW;IACV,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,YAAY;IAE7C,KAAK,GAAU,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAQ7D;IAED,OAAO,GAAU,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAQ/D;IAED,EAAE,GAAU,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAO1D;CACF"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthHandler = void 0;
4
+ const response_1 = require("../lib/response");
5
+ class AuthHandler {
6
+ authService;
7
+ constructor(authService) {
8
+ this.authService = authService;
9
+ }
10
+ login = async (req, res, next) => {
11
+ try {
12
+ const { username, password } = req.body;
13
+ const result = await this.authService.login(username, password);
14
+ (0, response_1.ok)(res, result);
15
+ }
16
+ catch (err) {
17
+ next(err);
18
+ }
19
+ };
20
+ refresh = async (req, res, next) => {
21
+ try {
22
+ const { token } = req.body;
23
+ const result = await this.authService.refreshToken(token);
24
+ (0, response_1.ok)(res, result);
25
+ }
26
+ catch (err) {
27
+ next(err);
28
+ }
29
+ };
30
+ me = async (req, res, next) => {
31
+ try {
32
+ const result = await this.authService.getMe(req.user.id);
33
+ (0, response_1.ok)(res, result);
34
+ }
35
+ catch (err) {
36
+ next(err);
37
+ }
38
+ };
39
+ }
40
+ exports.AuthHandler = AuthHandler;
41
+ //# sourceMappingURL=auth.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.handler.js","sourceRoot":"","sources":["../../src/handlers/auth.handler.ts"],"names":[],"mappings":";;;AAEA,8CAAoC;AAEpC,MAAa,WAAW;IACF;IAApB,YAAoB,WAAyB;QAAzB,gBAAW,GAAX,WAAW,CAAc;IAAG,CAAC;IAEjD,KAAK,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;YACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAC/D,IAAA,aAAE,EAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;IACH,CAAC,CAAA;IAED,OAAO,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAClE,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;YAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;YACzD,IAAA,aAAE,EAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;IACH,CAAC,CAAA;IAED,EAAE,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC7D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,IAAK,CAAC,EAAE,CAAC,CAAA;YACzD,IAAA,aAAE,EAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;IACH,CAAC,CAAA;CACF;AA/BD,kCA+BC"}
@@ -0,0 +1,12 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ import type { IDiskService } from '../types/service.interfaces';
3
+ export declare class DiskHandler {
4
+ private diskService;
5
+ constructor(diskService: IDiskService);
6
+ list: (_req: Request, res: Response, next: NextFunction) => Promise<void>;
7
+ format: (req: Request, res: Response, next: NextFunction) => Promise<void>;
8
+ mount: (req: Request, res: Response, next: NextFunction) => Promise<void>;
9
+ umount: (req: Request, res: Response, next: NextFunction) => Promise<void>;
10
+ usage: (req: Request, res: Response, next: NextFunction) => Promise<void>;
11
+ }
12
+ //# sourceMappingURL=disk.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disk.handler.d.ts","sourceRoot":"","sources":["../../src/handlers/disk.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAG/D,qBAAa,WAAW;IACV,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,YAAY;IAE7C,IAAI,GAAU,MAAM,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAO7D;IAED,MAAM,GAAU,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAQ9D;IAED,KAAK,GAAU,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAQ7D;IAED,MAAM,GAAU,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAQ9D;IAED,KAAK,GAAU,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAQ7D;CACF"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DiskHandler = void 0;
4
+ const response_1 = require("../lib/response");
5
+ class DiskHandler {
6
+ diskService;
7
+ constructor(diskService) {
8
+ this.diskService = diskService;
9
+ }
10
+ list = async (_req, res, next) => {
11
+ try {
12
+ const disks = await this.diskService.list();
13
+ (0, response_1.ok)(res, disks);
14
+ }
15
+ catch (err) {
16
+ next(err);
17
+ }
18
+ };
19
+ format = async (req, res, next) => {
20
+ try {
21
+ const { device, fsType } = req.body;
22
+ await this.diskService.format(device, fsType);
23
+ (0, response_1.ok)(res, null, '格式化成功');
24
+ }
25
+ catch (err) {
26
+ next(err);
27
+ }
28
+ };
29
+ mount = async (req, res, next) => {
30
+ try {
31
+ const { device, target, options } = req.body;
32
+ await this.diskService.mount(device, target, options);
33
+ (0, response_1.ok)(res, null, '挂载成功');
34
+ }
35
+ catch (err) {
36
+ next(err);
37
+ }
38
+ };
39
+ umount = async (req, res, next) => {
40
+ try {
41
+ const { target } = req.body;
42
+ await this.diskService.umount(target);
43
+ (0, response_1.ok)(res, null, '卸载成功');
44
+ }
45
+ catch (err) {
46
+ next(err);
47
+ }
48
+ };
49
+ usage = async (req, res, next) => {
50
+ try {
51
+ const mountPoint = req.query.mountpoint || '/share';
52
+ const usage = await this.diskService.usage(mountPoint);
53
+ (0, response_1.ok)(res, usage);
54
+ }
55
+ catch (err) {
56
+ next(err);
57
+ }
58
+ };
59
+ }
60
+ exports.DiskHandler = DiskHandler;
61
+ //# sourceMappingURL=disk.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disk.handler.js","sourceRoot":"","sources":["../../src/handlers/disk.handler.ts"],"names":[],"mappings":";;;AAEA,8CAAoC;AAEpC,MAAa,WAAW;IACF;IAApB,YAAoB,WAAyB;QAAzB,gBAAW,GAAX,WAAW,CAAc;IAAG,CAAC;IAEjD,IAAI,GAAG,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;YAC3C,IAAA,aAAE,EAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;IACH,CAAC,CAAA;IAED,MAAM,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACjE,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;YACnC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC7C,IAAA,aAAE,EAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;IACH,CAAC,CAAA;IAED,KAAK,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;YAC5C,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;YACrD,IAAA,aAAE,EAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;IACH,CAAC,CAAA;IAED,MAAM,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACjE,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;YAC3B,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACrC,IAAA,aAAE,EAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;IACH,CAAC,CAAA;IAED,KAAK,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,UAAU,GAAI,GAAG,CAAC,KAAK,CAAC,UAAqB,IAAI,QAAQ,CAAA;YAC/D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YACtD,IAAA,aAAE,EAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;IACH,CAAC,CAAA;CACF;AAnDD,kCAmDC"}
@@ -0,0 +1,16 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ import type { ISambaService } from '../types/service.interfaces';
3
+ export declare class SambaHandler {
4
+ private sambaService;
5
+ constructor(sambaService: ISambaService);
6
+ status: (_req: Request, res: Response, next: NextFunction) => Promise<void>;
7
+ install: (_req: Request, res: Response, next: NextFunction) => Promise<void>;
8
+ installStream: (_req: Request, res: Response, _next: NextFunction) => Promise<void>;
9
+ uninstallStream: (_req: Request, res: Response, _next: NextFunction) => Promise<void>;
10
+ start: (_req: Request, res: Response, next: NextFunction) => Promise<void>;
11
+ stop: (_req: Request, res: Response, next: NextFunction) => Promise<void>;
12
+ restart: (_req: Request, res: Response, next: NextFunction) => Promise<void>;
13
+ getConfig: (_req: Request, res: Response, next: NextFunction) => Promise<void>;
14
+ updateConfig: (req: Request, res: Response, next: NextFunction) => Promise<void>;
15
+ }
16
+ //# sourceMappingURL=samba.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"samba.handler.d.ts","sourceRoot":"","sources":["../../src/handlers/samba.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAGhE,qBAAa,YAAY;IACX,OAAO,CAAC,YAAY;gBAAZ,YAAY,EAAE,aAAa;IAE/C,MAAM,GAAU,MAAM,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAO/D;IAED,OAAO,GAAU,MAAM,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAOhE;IAED,aAAa,GAAU,MAAM,OAAO,EAAE,KAAK,QAAQ,EAAE,OAAO,YAAY,mBAqBvE;IAED,eAAe,GAAU,MAAM,OAAO,EAAE,KAAK,QAAQ,EAAE,OAAO,YAAY,mBAqBzE;IAED,KAAK,GAAU,MAAM,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAO9D;IAED,IAAI,GAAU,MAAM,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAO7D;IAED,OAAO,GAAU,MAAM,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAOhE;IAED,SAAS,GAAU,MAAM,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAOlE;IAED,YAAY,GAAU,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAQpE;CACF"}