ysk-server-core 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 (1526) hide show
  1. package/README.md +16 -0
  2. package/dist/agents/comms.d.ts +33 -0
  3. package/dist/agents/comms.d.ts.map +1 -0
  4. package/dist/agents/comms.js +67 -0
  5. package/dist/agents/comms.js.map +1 -0
  6. package/dist/agents/fleet.d.ts +60 -0
  7. package/dist/agents/fleet.d.ts.map +1 -0
  8. package/dist/agents/fleet.js +260 -0
  9. package/dist/agents/fleet.js.map +1 -0
  10. package/dist/agents/index.d.ts +7 -0
  11. package/dist/agents/index.d.ts.map +1 -0
  12. package/dist/agents/index.js +7 -0
  13. package/dist/agents/index.js.map +1 -0
  14. package/dist/agents/install.d.ts +34 -0
  15. package/dist/agents/install.d.ts.map +1 -0
  16. package/dist/agents/install.js +154 -0
  17. package/dist/agents/install.js.map +1 -0
  18. package/dist/agents/outbound-agent.d.ts +40 -0
  19. package/dist/agents/outbound-agent.d.ts.map +1 -0
  20. package/dist/agents/outbound-agent.js +135 -0
  21. package/dist/agents/outbound-agent.js.map +1 -0
  22. package/dist/agents/probe.d.ts +44 -0
  23. package/dist/agents/probe.d.ts.map +1 -0
  24. package/dist/agents/probe.js +129 -0
  25. package/dist/agents/probe.js.map +1 -0
  26. package/dist/agents/runtime.d.ts +25 -0
  27. package/dist/agents/runtime.d.ts.map +1 -0
  28. package/dist/agents/runtime.js +82 -0
  29. package/dist/agents/runtime.js.map +1 -0
  30. package/dist/config/schema.d.ts +58 -0
  31. package/dist/config/schema.d.ts.map +1 -0
  32. package/dist/config/schema.js +112 -0
  33. package/dist/config/schema.js.map +1 -0
  34. package/dist/db/database.d.ts +24 -0
  35. package/dist/db/database.d.ts.map +1 -0
  36. package/dist/db/database.js +31 -0
  37. package/dist/db/database.js.map +1 -0
  38. package/dist/db/document-store.d.ts +66 -0
  39. package/dist/db/document-store.d.ts.map +1 -0
  40. package/dist/db/document-store.js +363 -0
  41. package/dist/db/document-store.js.map +1 -0
  42. package/dist/db/index.d.ts +4 -0
  43. package/dist/db/index.d.ts.map +1 -0
  44. package/dist/db/index.js +4 -0
  45. package/dist/db/index.js.map +1 -0
  46. package/dist/db/schema.d.ts +8 -0
  47. package/dist/db/schema.d.ts.map +1 -0
  48. package/dist/db/schema.js +124 -0
  49. package/dist/db/schema.js.map +1 -0
  50. package/dist/db/store.d.ts +257 -0
  51. package/dist/db/store.d.ts.map +1 -0
  52. package/dist/db/store.js +100 -0
  53. package/dist/db/store.js.map +1 -0
  54. package/dist/email/autodiscover.d.ts +17 -0
  55. package/dist/email/autodiscover.d.ts.map +1 -0
  56. package/dist/email/autodiscover.js +70 -0
  57. package/dist/email/autodiscover.js.map +1 -0
  58. package/dist/email/deliverability.d.ts +55 -0
  59. package/dist/email/deliverability.d.ts.map +1 -0
  60. package/dist/email/deliverability.js +135 -0
  61. package/dist/email/deliverability.js.map +1 -0
  62. package/dist/email/dns-records.d.ts +70 -0
  63. package/dist/email/dns-records.d.ts.map +1 -0
  64. package/dist/email/dns-records.js +249 -0
  65. package/dist/email/dns-records.js.map +1 -0
  66. package/dist/email/dnsbl.d.ts +45 -0
  67. package/dist/email/dnsbl.d.ts.map +1 -0
  68. package/dist/email/dnsbl.js +127 -0
  69. package/dist/email/dnsbl.js.map +1 -0
  70. package/dist/email/domain-flags-apply.d.ts +78 -0
  71. package/dist/email/domain-flags-apply.d.ts.map +1 -0
  72. package/dist/email/domain-flags-apply.js +304 -0
  73. package/dist/email/domain-flags-apply.js.map +1 -0
  74. package/dist/email/dovecot-passdb.d.ts +59 -0
  75. package/dist/email/dovecot-passdb.d.ts.map +1 -0
  76. package/dist/email/dovecot-passdb.js +220 -0
  77. package/dist/email/dovecot-passdb.js.map +1 -0
  78. package/dist/email/email-bootstrap.d.ts +69 -0
  79. package/dist/email/email-bootstrap.d.ts.map +1 -0
  80. package/dist/email/email-bootstrap.js +294 -0
  81. package/dist/email/email-bootstrap.js.map +1 -0
  82. package/dist/email/index.d.ts +22 -0
  83. package/dist/email/index.d.ts.map +1 -0
  84. package/dist/email/index.js +22 -0
  85. package/dist/email/index.js.map +1 -0
  86. package/dist/email/live-checks.d.ts +52 -0
  87. package/dist/email/live-checks.d.ts.map +1 -0
  88. package/dist/email/live-checks.js +124 -0
  89. package/dist/email/live-checks.js.map +1 -0
  90. package/dist/email/mail-policy.d.ts +24 -0
  91. package/dist/email/mail-policy.d.ts.map +1 -0
  92. package/dist/email/mail-policy.js +318 -0
  93. package/dist/email/mail-policy.js.map +1 -0
  94. package/dist/email/mail-queue.d.ts +23 -0
  95. package/dist/email/mail-queue.d.ts.map +1 -0
  96. package/dist/email/mail-queue.js +188 -0
  97. package/dist/email/mail-queue.js.map +1 -0
  98. package/dist/email/mail-tls-apply.d.ts +31 -0
  99. package/dist/email/mail-tls-apply.d.ts.map +1 -0
  100. package/dist/email/mail-tls-apply.js +134 -0
  101. package/dist/email/mail-tls-apply.js.map +1 -0
  102. package/dist/email/password-hash.d.ts +16 -0
  103. package/dist/email/password-hash.d.ts.map +1 -0
  104. package/dist/email/password-hash.js +56 -0
  105. package/dist/email/password-hash.js.map +1 -0
  106. package/dist/email/relay.d.ts +45 -0
  107. package/dist/email/relay.d.ts.map +1 -0
  108. package/dist/email/relay.js +122 -0
  109. package/dist/email/relay.js.map +1 -0
  110. package/dist/email/roundcube-sso-plugin.d.ts +44 -0
  111. package/dist/email/roundcube-sso-plugin.d.ts.map +1 -0
  112. package/dist/email/roundcube-sso-plugin.js +278 -0
  113. package/dist/email/roundcube-sso-plugin.js.map +1 -0
  114. package/dist/email/sender-rate-policy.d.ts +24 -0
  115. package/dist/email/sender-rate-policy.d.ts.map +1 -0
  116. package/dist/email/sender-rate-policy.js +245 -0
  117. package/dist/email/sender-rate-policy.js.map +1 -0
  118. package/dist/email/service.d.ts +211 -0
  119. package/dist/email/service.d.ts.map +1 -0
  120. package/dist/email/service.js +1017 -0
  121. package/dist/email/service.js.map +1 -0
  122. package/dist/email/sieve.d.ts +32 -0
  123. package/dist/email/sieve.d.ts.map +1 -0
  124. package/dist/email/sieve.js +80 -0
  125. package/dist/email/sieve.js.map +1 -0
  126. package/dist/email/warmup.d.ts +26 -0
  127. package/dist/email/warmup.d.ts.map +1 -0
  128. package/dist/email/warmup.js +59 -0
  129. package/dist/email/warmup.js.map +1 -0
  130. package/dist/email/webmail-apply.d.ts +40 -0
  131. package/dist/email/webmail-apply.d.ts.map +1 -0
  132. package/dist/email/webmail-apply.js +191 -0
  133. package/dist/email/webmail-apply.js.map +1 -0
  134. package/dist/email/webmail-project.d.ts +194 -0
  135. package/dist/email/webmail-project.d.ts.map +1 -0
  136. package/dist/email/webmail-project.js +1365 -0
  137. package/dist/email/webmail-project.js.map +1 -0
  138. package/dist/email/webmail-sso.d.ts +40 -0
  139. package/dist/email/webmail-sso.d.ts.map +1 -0
  140. package/dist/email/webmail-sso.js +87 -0
  141. package/dist/email/webmail-sso.js.map +1 -0
  142. package/dist/errors/index.d.ts +2 -0
  143. package/dist/errors/index.d.ts.map +1 -0
  144. package/dist/errors/index.js +2 -0
  145. package/dist/errors/index.js.map +1 -0
  146. package/dist/files/index.d.ts +5 -0
  147. package/dist/files/index.d.ts.map +1 -0
  148. package/dist/files/index.js +5 -0
  149. package/dist/files/index.js.map +1 -0
  150. package/dist/files/manager.d.ts +172 -0
  151. package/dist/files/manager.d.ts.map +1 -0
  152. package/dist/files/manager.js +525 -0
  153. package/dist/files/manager.js.map +1 -0
  154. package/dist/files/shares.d.ts +36 -0
  155. package/dist/files/shares.d.ts.map +1 -0
  156. package/dist/files/shares.js +136 -0
  157. package/dist/files/shares.js.map +1 -0
  158. package/dist/files/versions.d.ts +16 -0
  159. package/dist/files/versions.d.ts.map +1 -0
  160. package/dist/files/versions.js +90 -0
  161. package/dist/files/versions.js.map +1 -0
  162. package/dist/files/webdav.d.ts +42 -0
  163. package/dist/files/webdav.d.ts.map +1 -0
  164. package/dist/files/webdav.js +116 -0
  165. package/dist/files/webdav.js.map +1 -0
  166. package/dist/host/executor.d.ts +93 -0
  167. package/dist/host/executor.d.ts.map +1 -0
  168. package/dist/host/executor.js +764 -0
  169. package/dist/host/executor.js.map +1 -0
  170. package/dist/host/health.d.ts +29 -0
  171. package/dist/host/health.d.ts.map +1 -0
  172. package/dist/host/health.js +132 -0
  173. package/dist/host/health.js.map +1 -0
  174. package/dist/host/host-job.d.ts +27 -0
  175. package/dist/host/host-job.d.ts.map +1 -0
  176. package/dist/host/host-job.js +38 -0
  177. package/dist/host/host-job.js.map +1 -0
  178. package/dist/host/host-overview.d.ts +54 -0
  179. package/dist/host/host-overview.d.ts.map +1 -0
  180. package/dist/host/host-overview.js +459 -0
  181. package/dist/host/host-overview.js.map +1 -0
  182. package/dist/host/host-power.d.ts +27 -0
  183. package/dist/host/host-power.d.ts.map +1 -0
  184. package/dist/host/host-power.js +99 -0
  185. package/dist/host/host-power.js.map +1 -0
  186. package/dist/host/index.d.ts +7 -0
  187. package/dist/host/index.d.ts.map +1 -0
  188. package/dist/host/index.js +7 -0
  189. package/dist/host/index.js.map +1 -0
  190. package/dist/host/timezones.d.ts +19 -0
  191. package/dist/host/timezones.d.ts.map +1 -0
  192. package/dist/host/timezones.js +64 -0
  193. package/dist/host/timezones.js.map +1 -0
  194. package/dist/host-browse/audio-bridge.d.ts +20 -0
  195. package/dist/host-browse/audio-bridge.d.ts.map +1 -0
  196. package/dist/host-browse/audio-bridge.js +96 -0
  197. package/dist/host-browse/audio-bridge.js.map +1 -0
  198. package/dist/host-browse/bookmarks.d.ts +44 -0
  199. package/dist/host-browse/bookmarks.d.ts.map +1 -0
  200. package/dist/host-browse/bookmarks.js +54 -0
  201. package/dist/host-browse/bookmarks.js.map +1 -0
  202. package/dist/host-browse/browser-engine.d.ts +167 -0
  203. package/dist/host-browse/browser-engine.d.ts.map +1 -0
  204. package/dist/host-browse/browser-engine.js +777 -0
  205. package/dist/host-browse/browser-engine.js.map +1 -0
  206. package/dist/host-browse/chrome-as-user.d.ts +34 -0
  207. package/dist/host-browse/chrome-as-user.d.ts.map +1 -0
  208. package/dist/host-browse/chrome-as-user.js +131 -0
  209. package/dist/host-browse/chrome-as-user.js.map +1 -0
  210. package/dist/host-browse/chrome-probe.d.ts +11 -0
  211. package/dist/host-browse/chrome-probe.d.ts.map +1 -0
  212. package/dist/host-browse/chrome-probe.js +62 -0
  213. package/dist/host-browse/chrome-probe.js.map +1 -0
  214. package/dist/host-browse/cookie-jar.d.ts +25 -0
  215. package/dist/host-browse/cookie-jar.d.ts.map +1 -0
  216. package/dist/host-browse/cookie-jar.js +126 -0
  217. package/dist/host-browse/cookie-jar.js.map +1 -0
  218. package/dist/host-browse/danger.d.ts +20 -0
  219. package/dist/host-browse/danger.d.ts.map +1 -0
  220. package/dist/host-browse/danger.js +84 -0
  221. package/dist/host-browse/danger.js.map +1 -0
  222. package/dist/host-browse/downloads.d.ts +31 -0
  223. package/dist/host-browse/downloads.d.ts.map +1 -0
  224. package/dist/host-browse/downloads.js +61 -0
  225. package/dist/host-browse/downloads.js.map +1 -0
  226. package/dist/host-browse/ephemeral-user.d.ts +39 -0
  227. package/dist/host-browse/ephemeral-user.d.ts.map +1 -0
  228. package/dist/host-browse/ephemeral-user.js +100 -0
  229. package/dist/host-browse/ephemeral-user.js.map +1 -0
  230. package/dist/host-browse/headers.d.ts +18 -0
  231. package/dist/host-browse/headers.d.ts.map +1 -0
  232. package/dist/host-browse/headers.js +93 -0
  233. package/dist/host-browse/headers.js.map +1 -0
  234. package/dist/host-browse/index.d.ts +18 -0
  235. package/dist/host-browse/index.d.ts.map +1 -0
  236. package/dist/host-browse/index.js +18 -0
  237. package/dist/host-browse/index.js.map +1 -0
  238. package/dist/host-browse/live-ticket.d.ts +19 -0
  239. package/dist/host-browse/live-ticket.d.ts.map +1 -0
  240. package/dist/host-browse/live-ticket.js +39 -0
  241. package/dist/host-browse/live-ticket.js.map +1 -0
  242. package/dist/host-browse/rewrite-html.d.ts +22 -0
  243. package/dist/host-browse/rewrite-html.d.ts.map +1 -0
  244. package/dist/host-browse/rewrite-html.js +134 -0
  245. package/dist/host-browse/rewrite-html.js.map +1 -0
  246. package/dist/host-browse/service.d.ts +122 -0
  247. package/dist/host-browse/service.d.ts.map +1 -0
  248. package/dist/host-browse/service.js +934 -0
  249. package/dist/host-browse/service.js.map +1 -0
  250. package/dist/host-browse/session-store.d.ts +57 -0
  251. package/dist/host-browse/session-store.d.ts.map +1 -0
  252. package/dist/host-browse/session-store.js +182 -0
  253. package/dist/host-browse/session-store.js.map +1 -0
  254. package/dist/host-browse/ssrf.d.ts +27 -0
  255. package/dist/host-browse/ssrf.d.ts.map +1 -0
  256. package/dist/host-browse/ssrf.js +191 -0
  257. package/dist/host-browse/ssrf.js.map +1 -0
  258. package/dist/host-browse/stream-presets.d.ts +33 -0
  259. package/dist/host-browse/stream-presets.d.ts.map +1 -0
  260. package/dist/host-browse/stream-presets.js +84 -0
  261. package/dist/host-browse/stream-presets.js.map +1 -0
  262. package/dist/host-browse/types.d.ts +151 -0
  263. package/dist/host-browse/types.d.ts.map +1 -0
  264. package/dist/host-browse/types.js +42 -0
  265. package/dist/host-browse/types.js.map +1 -0
  266. package/dist/hosting/adminer.d.ts +21 -0
  267. package/dist/hosting/adminer.d.ts.map +1 -0
  268. package/dist/hosting/adminer.js +183 -0
  269. package/dist/hosting/adminer.js.map +1 -0
  270. package/dist/hosting/apache/artifacts.d.ts +57 -0
  271. package/dist/hosting/apache/artifacts.d.ts.map +1 -0
  272. package/dist/hosting/apache/artifacts.js +309 -0
  273. package/dist/hosting/apache/artifacts.js.map +1 -0
  274. package/dist/hosting/apache/index.d.ts +8 -0
  275. package/dist/hosting/apache/index.d.ts.map +1 -0
  276. package/dist/hosting/apache/index.js +8 -0
  277. package/dist/hosting/apache/index.js.map +1 -0
  278. package/dist/hosting/apache/render-site.d.ts +17 -0
  279. package/dist/hosting/apache/render-site.d.ts.map +1 -0
  280. package/dist/hosting/apache/render-site.js +93 -0
  281. package/dist/hosting/apache/render-site.js.map +1 -0
  282. package/dist/hosting/apache/service.d.ts +27 -0
  283. package/dist/hosting/apache/service.d.ts.map +1 -0
  284. package/dist/hosting/apache/service.js +162 -0
  285. package/dist/hosting/apache/service.js.map +1 -0
  286. package/dist/hosting/apache/settings.d.ts +25 -0
  287. package/dist/hosting/apache/settings.d.ts.map +1 -0
  288. package/dist/hosting/apache/settings.js +104 -0
  289. package/dist/hosting/apache/settings.js.map +1 -0
  290. package/dist/hosting/apache/sites-list.d.ts +51 -0
  291. package/dist/hosting/apache/sites-list.d.ts.map +1 -0
  292. package/dist/hosting/apache/sites-list.js +188 -0
  293. package/dist/hosting/apache/sites-list.js.map +1 -0
  294. package/dist/hosting/apache/sync.d.ts +24 -0
  295. package/dist/hosting/apache/sync.d.ts.map +1 -0
  296. package/dist/hosting/apache/sync.js +148 -0
  297. package/dist/hosting/apache/sync.js.map +1 -0
  298. package/dist/hosting/apache/types.d.ts +28 -0
  299. package/dist/hosting/apache/types.d.ts.map +1 -0
  300. package/dist/hosting/apache/types.js +9 -0
  301. package/dist/hosting/apache/types.js.map +1 -0
  302. package/dist/hosting/app-templates.d.ts +44 -0
  303. package/dist/hosting/app-templates.d.ts.map +1 -0
  304. package/dist/hosting/app-templates.js +477 -0
  305. package/dist/hosting/app-templates.js.map +1 -0
  306. package/dist/hosting/apply-audit.d.ts +31 -0
  307. package/dist/hosting/apply-audit.d.ts.map +1 -0
  308. package/dist/hosting/apply-audit.js +149 -0
  309. package/dist/hosting/apply-audit.js.map +1 -0
  310. package/dist/hosting/apply-honesty.d.ts +25 -0
  311. package/dist/hosting/apply-honesty.d.ts.map +1 -0
  312. package/dist/hosting/apply-honesty.js +16 -0
  313. package/dist/hosting/apply-honesty.js.map +1 -0
  314. package/dist/hosting/backup-cron.d.ts +299 -0
  315. package/dist/hosting/backup-cron.d.ts.map +1 -0
  316. package/dist/hosting/backup-cron.js +1021 -0
  317. package/dist/hosting/backup-cron.js.map +1 -0
  318. package/dist/hosting/backup-remote.d.ts +44 -0
  319. package/dist/hosting/backup-remote.d.ts.map +1 -0
  320. package/dist/hosting/backup-remote.js +196 -0
  321. package/dist/hosting/backup-remote.js.map +1 -0
  322. package/dist/hosting/backup-restic.d.ts +82 -0
  323. package/dist/hosting/backup-restic.d.ts.map +1 -0
  324. package/dist/hosting/backup-restic.js +290 -0
  325. package/dist/hosting/backup-restic.js.map +1 -0
  326. package/dist/hosting/bt-tracker/index.d.ts +10 -0
  327. package/dist/hosting/bt-tracker/index.d.ts.map +1 -0
  328. package/dist/hosting/bt-tracker/index.js +10 -0
  329. package/dist/hosting/bt-tracker/index.js.map +1 -0
  330. package/dist/hosting/bt-tracker/prepare-share-bt.d.ts +17 -0
  331. package/dist/hosting/bt-tracker/prepare-share-bt.d.ts.map +1 -0
  332. package/dist/hosting/bt-tracker/prepare-share-bt.js +54 -0
  333. package/dist/hosting/bt-tracker/prepare-share-bt.js.map +1 -0
  334. package/dist/hosting/bt-tracker/process.d.ts +28 -0
  335. package/dist/hosting/bt-tracker/process.d.ts.map +1 -0
  336. package/dist/hosting/bt-tracker/process.js +210 -0
  337. package/dist/hosting/bt-tracker/process.js.map +1 -0
  338. package/dist/hosting/bt-tracker/restore-shares.d.ts +24 -0
  339. package/dist/hosting/bt-tracker/restore-shares.d.ts.map +1 -0
  340. package/dist/hosting/bt-tracker/restore-shares.js +140 -0
  341. package/dist/hosting/bt-tracker/restore-shares.js.map +1 -0
  342. package/dist/hosting/bt-tracker/scrape.d.ts +23 -0
  343. package/dist/hosting/bt-tracker/scrape.d.ts.map +1 -0
  344. package/dist/hosting/bt-tracker/scrape.js +147 -0
  345. package/dist/hosting/bt-tracker/scrape.js.map +1 -0
  346. package/dist/hosting/bt-tracker/seeder.d.ts +45 -0
  347. package/dist/hosting/bt-tracker/seeder.d.ts.map +1 -0
  348. package/dist/hosting/bt-tracker/seeder.js +154 -0
  349. package/dist/hosting/bt-tracker/seeder.js.map +1 -0
  350. package/dist/hosting/bt-tracker/service.d.ts +99 -0
  351. package/dist/hosting/bt-tracker/service.d.ts.map +1 -0
  352. package/dist/hosting/bt-tracker/service.js +405 -0
  353. package/dist/hosting/bt-tracker/service.js.map +1 -0
  354. package/dist/hosting/bt-tracker/settings.d.ts +38 -0
  355. package/dist/hosting/bt-tracker/settings.d.ts.map +1 -0
  356. package/dist/hosting/bt-tracker/settings.js +151 -0
  357. package/dist/hosting/bt-tracker/settings.js.map +1 -0
  358. package/dist/hosting/bt-tracker/torrent-create.d.ts +44 -0
  359. package/dist/hosting/bt-tracker/torrent-create.d.ts.map +1 -0
  360. package/dist/hosting/bt-tracker/torrent-create.js +194 -0
  361. package/dist/hosting/bt-tracker/torrent-create.js.map +1 -0
  362. package/dist/hosting/bt-tracker/torrent-jobs.d.ts +40 -0
  363. package/dist/hosting/bt-tracker/torrent-jobs.d.ts.map +1 -0
  364. package/dist/hosting/bt-tracker/torrent-jobs.js +109 -0
  365. package/dist/hosting/bt-tracker/torrent-jobs.js.map +1 -0
  366. package/dist/hosting/bt-tracker/worker.d.ts +2 -0
  367. package/dist/hosting/bt-tracker/worker.d.ts.map +1 -0
  368. package/dist/hosting/bt-tracker/worker.js +47 -0
  369. package/dist/hosting/bt-tracker/worker.js.map +1 -0
  370. package/dist/hosting/cdn/dns-sync.d.ts +131 -0
  371. package/dist/hosting/cdn/dns-sync.d.ts.map +1 -0
  372. package/dist/hosting/cdn/dns-sync.js +520 -0
  373. package/dist/hosting/cdn/dns-sync.js.map +1 -0
  374. package/dist/hosting/cdn/edge-render.d.ts +76 -0
  375. package/dist/hosting/cdn/edge-render.d.ts.map +1 -0
  376. package/dist/hosting/cdn/edge-render.js +380 -0
  377. package/dist/hosting/cdn/edge-render.js.map +1 -0
  378. package/dist/hosting/cdn/fan-out.d.ts +67 -0
  379. package/dist/hosting/cdn/fan-out.d.ts.map +1 -0
  380. package/dist/hosting/cdn/fan-out.js +807 -0
  381. package/dist/hosting/cdn/fan-out.js.map +1 -0
  382. package/dist/hosting/cdn/fleet-payload.d.ts +42 -0
  383. package/dist/hosting/cdn/fleet-payload.d.ts.map +1 -0
  384. package/dist/hosting/cdn/fleet-payload.js +128 -0
  385. package/dist/hosting/cdn/fleet-payload.js.map +1 -0
  386. package/dist/hosting/cdn/from-project.d.ts +39 -0
  387. package/dist/hosting/cdn/from-project.d.ts.map +1 -0
  388. package/dist/hosting/cdn/from-project.js +101 -0
  389. package/dist/hosting/cdn/from-project.js.map +1 -0
  390. package/dist/hosting/cdn/index.d.ts +10 -0
  391. package/dist/hosting/cdn/index.d.ts.map +1 -0
  392. package/dist/hosting/cdn/index.js +10 -0
  393. package/dist/hosting/cdn/index.js.map +1 -0
  394. package/dist/hosting/cdn/metrics.d.ts +69 -0
  395. package/dist/hosting/cdn/metrics.d.ts.map +1 -0
  396. package/dist/hosting/cdn/metrics.js +270 -0
  397. package/dist/hosting/cdn/metrics.js.map +1 -0
  398. package/dist/hosting/cdn/nodes.d.ts +51 -0
  399. package/dist/hosting/cdn/nodes.d.ts.map +1 -0
  400. package/dist/hosting/cdn/nodes.js +282 -0
  401. package/dist/hosting/cdn/nodes.js.map +1 -0
  402. package/dist/hosting/cdn/sites.d.ts +27 -0
  403. package/dist/hosting/cdn/sites.d.ts.map +1 -0
  404. package/dist/hosting/cdn/sites.js +265 -0
  405. package/dist/hosting/cdn/sites.js.map +1 -0
  406. package/dist/hosting/cdn/ssl.d.ts +82 -0
  407. package/dist/hosting/cdn/ssl.d.ts.map +1 -0
  408. package/dist/hosting/cdn/ssl.js +593 -0
  409. package/dist/hosting/cdn/ssl.js.map +1 -0
  410. package/dist/hosting/cloudflare-dns.d.ts +65 -0
  411. package/dist/hosting/cloudflare-dns.d.ts.map +1 -0
  412. package/dist/hosting/cloudflare-dns.js +206 -0
  413. package/dist/hosting/cloudflare-dns.js.map +1 -0
  414. package/dist/hosting/database.d.ts +27 -0
  415. package/dist/hosting/database.d.ts.map +1 -0
  416. package/dist/hosting/database.js +51 -0
  417. package/dist/hosting/database.js.map +1 -0
  418. package/dist/hosting/datadir-perms.d.ts +19 -0
  419. package/dist/hosting/datadir-perms.d.ts.map +1 -0
  420. package/dist/hosting/datadir-perms.js +55 -0
  421. package/dist/hosting/datadir-perms.js.map +1 -0
  422. package/dist/hosting/db-browser-project.d.ts +67 -0
  423. package/dist/hosting/db-browser-project.d.ts.map +1 -0
  424. package/dist/hosting/db-browser-project.js +287 -0
  425. package/dist/hosting/db-browser-project.js.map +1 -0
  426. package/dist/hosting/db-client.d.ts +33 -0
  427. package/dist/hosting/db-client.d.ts.map +1 -0
  428. package/dist/hosting/db-client.js +70 -0
  429. package/dist/hosting/db-client.js.map +1 -0
  430. package/dist/hosting/db-cluster/apply-local.d.ts +35 -0
  431. package/dist/hosting/db-cluster/apply-local.d.ts.map +1 -0
  432. package/dist/hosting/db-cluster/apply-local.js +349 -0
  433. package/dist/hosting/db-cluster/apply-local.js.map +1 -0
  434. package/dist/hosting/db-cluster/fleet-dispatch.d.ts +42 -0
  435. package/dist/hosting/db-cluster/fleet-dispatch.d.ts.map +1 -0
  436. package/dist/hosting/db-cluster/fleet-dispatch.js +116 -0
  437. package/dist/hosting/db-cluster/fleet-dispatch.js.map +1 -0
  438. package/dist/hosting/db-cluster/import-sync.d.ts +18 -0
  439. package/dist/hosting/db-cluster/import-sync.d.ts.map +1 -0
  440. package/dist/hosting/db-cluster/import-sync.js +57 -0
  441. package/dist/hosting/db-cluster/import-sync.js.map +1 -0
  442. package/dist/hosting/db-cluster/index.d.ts +14 -0
  443. package/dist/hosting/db-cluster/index.d.ts.map +1 -0
  444. package/dist/hosting/db-cluster/index.js +14 -0
  445. package/dist/hosting/db-cluster/index.js.map +1 -0
  446. package/dist/hosting/db-cluster/peer-ops.d.ts +50 -0
  447. package/dist/hosting/db-cluster/peer-ops.d.ts.map +1 -0
  448. package/dist/hosting/db-cluster/peer-ops.js +470 -0
  449. package/dist/hosting/db-cluster/peer-ops.js.map +1 -0
  450. package/dist/hosting/db-cluster/plan-mariadb-galera.d.ts +14 -0
  451. package/dist/hosting/db-cluster/plan-mariadb-galera.d.ts.map +1 -0
  452. package/dist/hosting/db-cluster/plan-mariadb-galera.js +190 -0
  453. package/dist/hosting/db-cluster/plan-mariadb-galera.js.map +1 -0
  454. package/dist/hosting/db-cluster/plan-mysql-replica.d.ts +13 -0
  455. package/dist/hosting/db-cluster/plan-mysql-replica.d.ts.map +1 -0
  456. package/dist/hosting/db-cluster/plan-mysql-replica.js +221 -0
  457. package/dist/hosting/db-cluster/plan-mysql-replica.js.map +1 -0
  458. package/dist/hosting/db-cluster/plan-postgres-replica.d.ts +11 -0
  459. package/dist/hosting/db-cluster/plan-postgres-replica.d.ts.map +1 -0
  460. package/dist/hosting/db-cluster/plan-postgres-replica.js +193 -0
  461. package/dist/hosting/db-cluster/plan-postgres-replica.js.map +1 -0
  462. package/dist/hosting/db-cluster/plan-redis-replica.d.ts +10 -0
  463. package/dist/hosting/db-cluster/plan-redis-replica.d.ts.map +1 -0
  464. package/dist/hosting/db-cluster/plan-redis-replica.js +184 -0
  465. package/dist/hosting/db-cluster/plan-redis-replica.js.map +1 -0
  466. package/dist/hosting/db-cluster/plan.d.ts +15 -0
  467. package/dist/hosting/db-cluster/plan.d.ts.map +1 -0
  468. package/dist/hosting/db-cluster/plan.js +59 -0
  469. package/dist/hosting/db-cluster/plan.js.map +1 -0
  470. package/dist/hosting/db-cluster/probe.d.ts +37 -0
  471. package/dist/hosting/db-cluster/probe.d.ts.map +1 -0
  472. package/dist/hosting/db-cluster/probe.js +414 -0
  473. package/dist/hosting/db-cluster/probe.js.map +1 -0
  474. package/dist/hosting/db-cluster/push-peer.d.ts +85 -0
  475. package/dist/hosting/db-cluster/push-peer.d.ts.map +1 -0
  476. package/dist/hosting/db-cluster/push-peer.js +360 -0
  477. package/dist/hosting/db-cluster/push-peer.js.map +1 -0
  478. package/dist/hosting/db-cluster/store.d.ts +12 -0
  479. package/dist/hosting/db-cluster/store.d.ts.map +1 -0
  480. package/dist/hosting/db-cluster/store.js +240 -0
  481. package/dist/hosting/db-cluster/store.js.map +1 -0
  482. package/dist/hosting/db-cluster/types.d.ts +83 -0
  483. package/dist/hosting/db-cluster/types.d.ts.map +1 -0
  484. package/dist/hosting/db-cluster/types.js +6 -0
  485. package/dist/hosting/db-cluster/types.js.map +1 -0
  486. package/dist/hosting/db-dump.d.ts +39 -0
  487. package/dist/hosting/db-dump.d.ts.map +1 -0
  488. package/dist/hosting/db-dump.js +150 -0
  489. package/dist/hosting/db-dump.js.map +1 -0
  490. package/dist/hosting/db-engine.d.ts +75 -0
  491. package/dist/hosting/db-engine.d.ts.map +1 -0
  492. package/dist/hosting/db-engine.js +225 -0
  493. package/dist/hosting/db-engine.js.map +1 -0
  494. package/dist/hosting/db-service-config.d.ts +100 -0
  495. package/dist/hosting/db-service-config.d.ts.map +1 -0
  496. package/dist/hosting/db-service-config.js +410 -0
  497. package/dist/hosting/db-service-config.js.map +1 -0
  498. package/dist/hosting/defense/auto-ban.d.ts +86 -0
  499. package/dist/hosting/defense/auto-ban.d.ts.map +1 -0
  500. package/dist/hosting/defense/auto-ban.js +573 -0
  501. package/dist/hosting/defense/auto-ban.js.map +1 -0
  502. package/dist/hosting/defense/automation.d.ts +104 -0
  503. package/dist/hosting/defense/automation.d.ts.map +1 -0
  504. package/dist/hosting/defense/automation.js +475 -0
  505. package/dist/hosting/defense/automation.js.map +1 -0
  506. package/dist/hosting/defense/cf-ufw.d.ts +23 -0
  507. package/dist/hosting/defense/cf-ufw.d.ts.map +1 -0
  508. package/dist/hosting/defense/cf-ufw.js +108 -0
  509. package/dist/hosting/defense/cf-ufw.js.map +1 -0
  510. package/dist/hosting/defense/cloudflare-ua.d.ts +58 -0
  511. package/dist/hosting/defense/cloudflare-ua.d.ts.map +1 -0
  512. package/dist/hosting/defense/cloudflare-ua.js +167 -0
  513. package/dist/hosting/defense/cloudflare-ua.js.map +1 -0
  514. package/dist/hosting/defense/defense-service.d.ts +96 -0
  515. package/dist/hosting/defense/defense-service.d.ts.map +1 -0
  516. package/dist/hosting/defense/defense-service.js +597 -0
  517. package/dist/hosting/defense/defense-service.js.map +1 -0
  518. package/dist/hosting/defense/geoip/downloader.d.ts +24 -0
  519. package/dist/hosting/defense/geoip/downloader.d.ts.map +1 -0
  520. package/dist/hosting/defense/geoip/downloader.js +179 -0
  521. package/dist/hosting/defense/geoip/downloader.js.map +1 -0
  522. package/dist/hosting/defense/geoip/index.d.ts +32 -0
  523. package/dist/hosting/defense/geoip/index.d.ts.map +1 -0
  524. package/dist/hosting/defense/geoip/index.js +140 -0
  525. package/dist/hosting/defense/geoip/index.js.map +1 -0
  526. package/dist/hosting/defense/geoip/lookup.d.ts +4 -0
  527. package/dist/hosting/defense/geoip/lookup.d.ts.map +1 -0
  528. package/dist/hosting/defense/geoip/lookup.js +320 -0
  529. package/dist/hosting/defense/geoip/lookup.js.map +1 -0
  530. package/dist/hosting/defense/geoip/nginx-geo.d.ts +19 -0
  531. package/dist/hosting/defense/geoip/nginx-geo.d.ts.map +1 -0
  532. package/dist/hosting/defense/geoip/nginx-geo.js +94 -0
  533. package/dist/hosting/defense/geoip/nginx-geo.js.map +1 -0
  534. package/dist/hosting/defense/geoip/policy.d.ts +21 -0
  535. package/dist/hosting/defense/geoip/policy.d.ts.map +1 -0
  536. package/dist/hosting/defense/geoip/policy.js +161 -0
  537. package/dist/hosting/defense/geoip/policy.js.map +1 -0
  538. package/dist/hosting/defense/geoip/providers.d.ts +30 -0
  539. package/dist/hosting/defense/geoip/providers.d.ts.map +1 -0
  540. package/dist/hosting/defense/geoip/providers.js +98 -0
  541. package/dist/hosting/defense/geoip/providers.js.map +1 -0
  542. package/dist/hosting/defense/geoip/types.d.ts +102 -0
  543. package/dist/hosting/defense/geoip/types.d.ts.map +1 -0
  544. package/dist/hosting/defense/geoip/types.js +89 -0
  545. package/dist/hosting/defense/geoip/types.js.map +1 -0
  546. package/dist/hosting/defense/index.d.ts +12 -0
  547. package/dist/hosting/defense/index.d.ts.map +1 -0
  548. package/dist/hosting/defense/index.js +12 -0
  549. package/dist/hosting/defense/index.js.map +1 -0
  550. package/dist/hosting/defense/intel.d.ts +26 -0
  551. package/dist/hosting/defense/intel.d.ts.map +1 -0
  552. package/dist/hosting/defense/intel.js +148 -0
  553. package/dist/hosting/defense/intel.js.map +1 -0
  554. package/dist/hosting/defense/nginx-limits.d.ts +39 -0
  555. package/dist/hosting/defense/nginx-limits.d.ts.map +1 -0
  556. package/dist/hosting/defense/nginx-limits.js +142 -0
  557. package/dist/hosting/defense/nginx-limits.js.map +1 -0
  558. package/dist/hosting/defense/presets.d.ts +12 -0
  559. package/dist/hosting/defense/presets.d.ts.map +1 -0
  560. package/dist/hosting/defense/presets.js +128 -0
  561. package/dist/hosting/defense/presets.js.map +1 -0
  562. package/dist/hosting/defense/signals.d.ts +60 -0
  563. package/dist/hosting/defense/signals.d.ts.map +1 -0
  564. package/dist/hosting/defense/signals.js +176 -0
  565. package/dist/hosting/defense/signals.js.map +1 -0
  566. package/dist/hosting/defense/types.d.ts +134 -0
  567. package/dist/hosting/defense/types.d.ts.map +1 -0
  568. package/dist/hosting/defense/types.js +5 -0
  569. package/dist/hosting/defense/types.js.map +1 -0
  570. package/dist/hosting/dns-cluster.d.ts +100 -0
  571. package/dist/hosting/dns-cluster.d.ts.map +1 -0
  572. package/dist/hosting/dns-cluster.js +532 -0
  573. package/dist/hosting/dns-cluster.js.map +1 -0
  574. package/dist/hosting/dns-health.d.ts +93 -0
  575. package/dist/hosting/dns-health.d.ts.map +1 -0
  576. package/dist/hosting/dns-health.js +491 -0
  577. package/dist/hosting/dns-health.js.map +1 -0
  578. package/dist/hosting/dns-lookup.d.ts +22 -0
  579. package/dist/hosting/dns-lookup.d.ts.map +1 -0
  580. package/dist/hosting/dns-lookup.js +114 -0
  581. package/dist/hosting/dns-lookup.js.map +1 -0
  582. package/dist/hosting/dns-validate.d.ts +25 -0
  583. package/dist/hosting/dns-validate.d.ts.map +1 -0
  584. package/dist/hosting/dns-validate.js +145 -0
  585. package/dist/hosting/dns-validate.js.map +1 -0
  586. package/dist/hosting/dns-zone.d.ts +112 -0
  587. package/dist/hosting/dns-zone.d.ts.map +1 -0
  588. package/dist/hosting/dns-zone.js +365 -0
  589. package/dist/hosting/dns-zone.js.map +1 -0
  590. package/dist/hosting/dnssec.d.ts +22 -0
  591. package/dist/hosting/dnssec.d.ts.map +1 -0
  592. package/dist/hosting/dnssec.js +170 -0
  593. package/dist/hosting/dnssec.js.map +1 -0
  594. package/dist/hosting/extras.d.ts +106 -0
  595. package/dist/hosting/extras.d.ts.map +1 -0
  596. package/dist/hosting/extras.js +294 -0
  597. package/dist/hosting/extras.js.map +1 -0
  598. package/dist/hosting/fail2ban-ops.d.ts +72 -0
  599. package/dist/hosting/fail2ban-ops.d.ts.map +1 -0
  600. package/dist/hosting/fail2ban-ops.js +229 -0
  601. package/dist/hosting/fail2ban-ops.js.map +1 -0
  602. package/dist/hosting/firewall-ops.d.ts +109 -0
  603. package/dist/hosting/firewall-ops.d.ts.map +1 -0
  604. package/dist/hosting/firewall-ops.js +398 -0
  605. package/dist/hosting/firewall-ops.js.map +1 -0
  606. package/dist/hosting/ftps-service.d.ts +182 -0
  607. package/dist/hosting/ftps-service.d.ts.map +1 -0
  608. package/dist/hosting/ftps-service.js +909 -0
  609. package/dist/hosting/ftps-service.js.map +1 -0
  610. package/dist/hosting/git-deploy.d.ts +33 -0
  611. package/dist/hosting/git-deploy.d.ts.map +1 -0
  612. package/dist/hosting/git-deploy.js +181 -0
  613. package/dist/hosting/git-deploy.js.map +1 -0
  614. package/dist/hosting/global-search.d.ts +23 -0
  615. package/dist/hosting/global-search.d.ts.map +1 -0
  616. package/dist/hosting/global-search.js +296 -0
  617. package/dist/hosting/global-search.js.map +1 -0
  618. package/dist/hosting/host-migrate/bootstrap-target.d.ts +84 -0
  619. package/dist/hosting/host-migrate/bootstrap-target.d.ts.map +1 -0
  620. package/dist/hosting/host-migrate/bootstrap-target.js +457 -0
  621. package/dist/hosting/host-migrate/bootstrap-target.js.map +1 -0
  622. package/dist/hosting/host-migrate/index.d.ts +16 -0
  623. package/dist/hosting/host-migrate/index.d.ts.map +1 -0
  624. package/dist/hosting/host-migrate/index.js +16 -0
  625. package/dist/hosting/host-migrate/index.js.map +1 -0
  626. package/dist/hosting/host-migrate/inventory.d.ts +27 -0
  627. package/dist/hosting/host-migrate/inventory.d.ts.map +1 -0
  628. package/dist/hosting/host-migrate/inventory.js +386 -0
  629. package/dist/hosting/host-migrate/inventory.js.map +1 -0
  630. package/dist/hosting/host-migrate/job-store.d.ts +23 -0
  631. package/dist/hosting/host-migrate/job-store.d.ts.map +1 -0
  632. package/dist/hosting/host-migrate/job-store.js +126 -0
  633. package/dist/hosting/host-migrate/job-store.js.map +1 -0
  634. package/dist/hosting/host-migrate/orchestrator.d.ts +69 -0
  635. package/dist/hosting/host-migrate/orchestrator.d.ts.map +1 -0
  636. package/dist/hosting/host-migrate/orchestrator.js +376 -0
  637. package/dist/hosting/host-migrate/orchestrator.js.map +1 -0
  638. package/dist/hosting/host-migrate/package-source.d.ts +88 -0
  639. package/dist/hosting/host-migrate/package-source.d.ts.map +1 -0
  640. package/dist/hosting/host-migrate/package-source.js +473 -0
  641. package/dist/hosting/host-migrate/package-source.js.map +1 -0
  642. package/dist/hosting/host-migrate/post-transfer.d.ts +32 -0
  643. package/dist/hosting/host-migrate/post-transfer.d.ts.map +1 -0
  644. package/dist/hosting/host-migrate/post-transfer.js +81 -0
  645. package/dist/hosting/host-migrate/post-transfer.js.map +1 -0
  646. package/dist/hosting/host-migrate/preflight.d.ts +58 -0
  647. package/dist/hosting/host-migrate/preflight.d.ts.map +1 -0
  648. package/dist/hosting/host-migrate/preflight.js +315 -0
  649. package/dist/hosting/host-migrate/preflight.js.map +1 -0
  650. package/dist/hosting/host-migrate/reapply.d.ts +36 -0
  651. package/dist/hosting/host-migrate/reapply.d.ts.map +1 -0
  652. package/dist/hosting/host-migrate/reapply.js +361 -0
  653. package/dist/hosting/host-migrate/reapply.js.map +1 -0
  654. package/dist/hosting/host-migrate/redis-dump.d.ts +25 -0
  655. package/dist/hosting/host-migrate/redis-dump.d.ts.map +1 -0
  656. package/dist/hosting/host-migrate/redis-dump.js +153 -0
  657. package/dist/hosting/host-migrate/redis-dump.js.map +1 -0
  658. package/dist/hosting/host-migrate/restore.d.ts +62 -0
  659. package/dist/hosting/host-migrate/restore.d.ts.map +1 -0
  660. package/dist/hosting/host-migrate/restore.js +420 -0
  661. package/dist/hosting/host-migrate/restore.js.map +1 -0
  662. package/dist/hosting/host-migrate/temp-key.d.ts +56 -0
  663. package/dist/hosting/host-migrate/temp-key.d.ts.map +1 -0
  664. package/dist/hosting/host-migrate/temp-key.js +207 -0
  665. package/dist/hosting/host-migrate/temp-key.js.map +1 -0
  666. package/dist/hosting/host-migrate/transfer.d.ts +57 -0
  667. package/dist/hosting/host-migrate/transfer.d.ts.map +1 -0
  668. package/dist/hosting/host-migrate/transfer.js +408 -0
  669. package/dist/hosting/host-migrate/transfer.js.map +1 -0
  670. package/dist/hosting/host-migrate/transport.d.ts +96 -0
  671. package/dist/hosting/host-migrate/transport.d.ts.map +1 -0
  672. package/dist/hosting/host-migrate/transport.js +363 -0
  673. package/dist/hosting/host-migrate/transport.js.map +1 -0
  674. package/dist/hosting/host-migrate/types.d.ts +8 -0
  675. package/dist/hosting/host-migrate/types.d.ts.map +1 -0
  676. package/dist/hosting/host-migrate/types.js +9 -0
  677. package/dist/hosting/host-migrate/types.js.map +1 -0
  678. package/dist/hosting/host-migrate/verify.d.ts +29 -0
  679. package/dist/hosting/host-migrate/verify.d.ts.map +1 -0
  680. package/dist/hosting/host-migrate/verify.js +268 -0
  681. package/dist/hosting/host-migrate/verify.js.map +1 -0
  682. package/dist/hosting/index.d.ts +103 -0
  683. package/dist/hosting/index.d.ts.map +1 -0
  684. package/dist/hosting/index.js +103 -0
  685. package/dist/hosting/index.js.map +1 -0
  686. package/dist/hosting/log-center/catalog.d.ts +33 -0
  687. package/dist/hosting/log-center/catalog.d.ts.map +1 -0
  688. package/dist/hosting/log-center/catalog.js +321 -0
  689. package/dist/hosting/log-center/catalog.js.map +1 -0
  690. package/dist/hosting/log-center/file-tail.d.ts +20 -0
  691. package/dist/hosting/log-center/file-tail.d.ts.map +1 -0
  692. package/dist/hosting/log-center/file-tail.js +89 -0
  693. package/dist/hosting/log-center/file-tail.js.map +1 -0
  694. package/dist/hosting/log-center/index.d.ts +6 -0
  695. package/dist/hosting/log-center/index.d.ts.map +1 -0
  696. package/dist/hosting/log-center/index.js +6 -0
  697. package/dist/hosting/log-center/index.js.map +1 -0
  698. package/dist/hosting/log-center/journal.d.ts +35 -0
  699. package/dist/hosting/log-center/journal.d.ts.map +1 -0
  700. package/dist/hosting/log-center/journal.js +248 -0
  701. package/dist/hosting/log-center/journal.js.map +1 -0
  702. package/dist/hosting/log-center/service.d.ts +92 -0
  703. package/dist/hosting/log-center/service.d.ts.map +1 -0
  704. package/dist/hosting/log-center/service.js +548 -0
  705. package/dist/hosting/log-center/service.js.map +1 -0
  706. package/dist/hosting/log-center/types.d.ts +103 -0
  707. package/dist/hosting/log-center/types.d.ts.map +1 -0
  708. package/dist/hosting/log-center/types.js +17 -0
  709. package/dist/hosting/log-center/types.js.map +1 -0
  710. package/dist/hosting/managed-resources.d.ts +87 -0
  711. package/dist/hosting/managed-resources.d.ts.map +1 -0
  712. package/dist/hosting/managed-resources.js +561 -0
  713. package/dist/hosting/managed-resources.js.map +1 -0
  714. package/dist/hosting/mysql-provision.d.ts +37 -0
  715. package/dist/hosting/mysql-provision.d.ts.map +1 -0
  716. package/dist/hosting/mysql-provision.js +91 -0
  717. package/dist/hosting/mysql-provision.js.map +1 -0
  718. package/dist/hosting/nginx-settings.d.ts +47 -0
  719. package/dist/hosting/nginx-settings.d.ts.map +1 -0
  720. package/dist/hosting/nginx-settings.js +147 -0
  721. package/dist/hosting/nginx-settings.js.map +1 -0
  722. package/dist/hosting/nginx-sites-list.d.ts +31 -0
  723. package/dist/hosting/nginx-sites-list.d.ts.map +1 -0
  724. package/dist/hosting/nginx-sites-list.js +86 -0
  725. package/dist/hosting/nginx-sites-list.js.map +1 -0
  726. package/dist/hosting/nginx-ssl.d.ts +84 -0
  727. package/dist/hosting/nginx-ssl.d.ts.map +1 -0
  728. package/dist/hosting/nginx-ssl.js +342 -0
  729. package/dist/hosting/nginx-ssl.js.map +1 -0
  730. package/dist/hosting/nginx-sync.d.ts +38 -0
  731. package/dist/hosting/nginx-sync.d.ts.map +1 -0
  732. package/dist/hosting/nginx-sync.js +141 -0
  733. package/dist/hosting/nginx-sync.js.map +1 -0
  734. package/dist/hosting/node-apply.d.ts +32 -0
  735. package/dist/hosting/node-apply.d.ts.map +1 -0
  736. package/dist/hosting/node-apply.js +86 -0
  737. package/dist/hosting/node-apply.js.map +1 -0
  738. package/dist/hosting/package-limits.d.ts +38 -0
  739. package/dist/hosting/package-limits.d.ts.map +1 -0
  740. package/dist/hosting/package-limits.js +129 -0
  741. package/dist/hosting/package-limits.js.map +1 -0
  742. package/dist/hosting/panel-tls.d.ts +150 -0
  743. package/dist/hosting/panel-tls.d.ts.map +1 -0
  744. package/dist/hosting/panel-tls.js +533 -0
  745. package/dist/hosting/panel-tls.js.map +1 -0
  746. package/dist/hosting/php-disable-functions.d.ts +25 -0
  747. package/dist/hosting/php-disable-functions.d.ts.map +1 -0
  748. package/dist/hosting/php-disable-functions.js +79 -0
  749. package/dist/hosting/php-disable-functions.js.map +1 -0
  750. package/dist/hosting/php-extensions.d.ts +118 -0
  751. package/dist/hosting/php-extensions.d.ts.map +1 -0
  752. package/dist/hosting/php-extensions.js +482 -0
  753. package/dist/hosting/php-extensions.js.map +1 -0
  754. package/dist/hosting/php-fpm.d.ts +38 -0
  755. package/dist/hosting/php-fpm.d.ts.map +1 -0
  756. package/dist/hosting/php-fpm.js +94 -0
  757. package/dist/hosting/php-fpm.js.map +1 -0
  758. package/dist/hosting/php-ini-catalog.d.ts +55 -0
  759. package/dist/hosting/php-ini-catalog.d.ts.map +1 -0
  760. package/dist/hosting/php-ini-catalog.js +469 -0
  761. package/dist/hosting/php-ini-catalog.js.map +1 -0
  762. package/dist/hosting/php-ini.d.ts +54 -0
  763. package/dist/hosting/php-ini.d.ts.map +1 -0
  764. package/dist/hosting/php-ini.js +299 -0
  765. package/dist/hosting/php-ini.js.map +1 -0
  766. package/dist/hosting/pm2-apply.d.ts +163 -0
  767. package/dist/hosting/pm2-apply.d.ts.map +1 -0
  768. package/dist/hosting/pm2-apply.js +629 -0
  769. package/dist/hosting/pm2-apply.js.map +1 -0
  770. package/dist/hosting/pm2-status.d.ts +59 -0
  771. package/dist/hosting/pm2-status.d.ts.map +1 -0
  772. package/dist/hosting/pm2-status.js +188 -0
  773. package/dist/hosting/pm2-status.js.map +1 -0
  774. package/dist/hosting/postfix-bootstrap.d.ts +56 -0
  775. package/dist/hosting/postfix-bootstrap.d.ts.map +1 -0
  776. package/dist/hosting/postfix-bootstrap.js +212 -0
  777. package/dist/hosting/postfix-bootstrap.js.map +1 -0
  778. package/dist/hosting/postgres-provision.d.ts +48 -0
  779. package/dist/hosting/postgres-provision.d.ts.map +1 -0
  780. package/dist/hosting/postgres-provision.js +166 -0
  781. package/dist/hosting/postgres-provision.js.map +1 -0
  782. package/dist/hosting/powerdns-apply.d.ts +215 -0
  783. package/dist/hosting/powerdns-apply.d.ts.map +1 -0
  784. package/dist/hosting/powerdns-apply.js +790 -0
  785. package/dist/hosting/powerdns-apply.js.map +1 -0
  786. package/dist/hosting/process-fleet.d.ts +55 -0
  787. package/dist/hosting/process-fleet.d.ts.map +1 -0
  788. package/dist/hosting/process-fleet.js +203 -0
  789. package/dist/hosting/process-fleet.js.map +1 -0
  790. package/dist/hosting/production-readiness.d.ts +47 -0
  791. package/dist/hosting/production-readiness.d.ts.map +1 -0
  792. package/dist/hosting/production-readiness.js +797 -0
  793. package/dist/hosting/production-readiness.js.map +1 -0
  794. package/dist/hosting/project-isolation-status.d.ts +47 -0
  795. package/dist/hosting/project-isolation-status.d.ts.map +1 -0
  796. package/dist/hosting/project-isolation-status.js +150 -0
  797. package/dist/hosting/project-isolation-status.js.map +1 -0
  798. package/dist/hosting/project-logs.d.ts +124 -0
  799. package/dist/hosting/project-logs.d.ts.map +1 -0
  800. package/dist/hosting/project-logs.js +510 -0
  801. package/dist/hosting/project-logs.js.map +1 -0
  802. package/dist/hosting/project-ops.d.ts +324 -0
  803. package/dist/hosting/project-ops.d.ts.map +1 -0
  804. package/dist/hosting/project-ops.js +2509 -0
  805. package/dist/hosting/project-ops.js.map +1 -0
  806. package/dist/hosting/project-os-user.d.ts +44 -0
  807. package/dist/hosting/project-os-user.d.ts.map +1 -0
  808. package/dist/hosting/project-os-user.js +279 -0
  809. package/dist/hosting/project-os-user.js.map +1 -0
  810. package/dist/hosting/project-ownership.d.ts +21 -0
  811. package/dist/hosting/project-ownership.d.ts.map +1 -0
  812. package/dist/hosting/project-ownership.js +52 -0
  813. package/dist/hosting/project-ownership.js.map +1 -0
  814. package/dist/hosting/project-service.d.ts +156 -0
  815. package/dist/hosting/project-service.d.ts.map +1 -0
  816. package/dist/hosting/project-service.js +950 -0
  817. package/dist/hosting/project-service.js.map +1 -0
  818. package/dist/hosting/project-user-run.d.ts +61 -0
  819. package/dist/hosting/project-user-run.d.ts.map +1 -0
  820. package/dist/hosting/project-user-run.js +130 -0
  821. package/dist/hosting/project-user-run.js.map +1 -0
  822. package/dist/hosting/project-web-group.d.ts +21 -0
  823. package/dist/hosting/project-web-group.d.ts.map +1 -0
  824. package/dist/hosting/project-web-group.js +79 -0
  825. package/dist/hosting/project-web-group.js.map +1 -0
  826. package/dist/hosting/project.d.ts +58 -0
  827. package/dist/hosting/project.d.ts.map +1 -0
  828. package/dist/hosting/project.js +154 -0
  829. package/dist/hosting/project.js.map +1 -0
  830. package/dist/hosting/public-files.d.ts +53 -0
  831. package/dist/hosting/public-files.d.ts.map +1 -0
  832. package/dist/hosting/public-files.js +324 -0
  833. package/dist/hosting/public-files.js.map +1 -0
  834. package/dist/hosting/quota.d.ts +36 -0
  835. package/dist/hosting/quota.d.ts.map +1 -0
  836. package/dist/hosting/quota.js +70 -0
  837. package/dist/hosting/quota.js.map +1 -0
  838. package/dist/hosting/real-ip/apply.d.ts +17 -0
  839. package/dist/hosting/real-ip/apply.d.ts.map +1 -0
  840. package/dist/hosting/real-ip/apply.js +62 -0
  841. package/dist/hosting/real-ip/apply.js.map +1 -0
  842. package/dist/hosting/real-ip/index.d.ts +7 -0
  843. package/dist/hosting/real-ip/index.d.ts.map +1 -0
  844. package/dist/hosting/real-ip/index.js +7 -0
  845. package/dist/hosting/real-ip/index.js.map +1 -0
  846. package/dist/hosting/real-ip/providers.d.ts +12 -0
  847. package/dist/hosting/real-ip/providers.d.ts.map +1 -0
  848. package/dist/hosting/real-ip/providers.js +237 -0
  849. package/dist/hosting/real-ip/providers.js.map +1 -0
  850. package/dist/hosting/real-ip/refresh.d.ts +17 -0
  851. package/dist/hosting/real-ip/refresh.d.ts.map +1 -0
  852. package/dist/hosting/real-ip/refresh.js +113 -0
  853. package/dist/hosting/real-ip/refresh.js.map +1 -0
  854. package/dist/hosting/real-ip/render.d.ts +39 -0
  855. package/dist/hosting/real-ip/render.d.ts.map +1 -0
  856. package/dist/hosting/real-ip/render.js +132 -0
  857. package/dist/hosting/real-ip/render.js.map +1 -0
  858. package/dist/hosting/real-ip/store.d.ts +9 -0
  859. package/dist/hosting/real-ip/store.d.ts.map +1 -0
  860. package/dist/hosting/real-ip/store.js +66 -0
  861. package/dist/hosting/real-ip/store.js.map +1 -0
  862. package/dist/hosting/real-ip/types.d.ts +41 -0
  863. package/dist/hosting/real-ip/types.d.ts.map +1 -0
  864. package/dist/hosting/real-ip/types.js +10 -0
  865. package/dist/hosting/real-ip/types.js.map +1 -0
  866. package/dist/hosting/rebuild.d.ts +82 -0
  867. package/dist/hosting/rebuild.d.ts.map +1 -0
  868. package/dist/hosting/rebuild.js +241 -0
  869. package/dist/hosting/rebuild.js.map +1 -0
  870. package/dist/hosting/redis-browser.d.ts +109 -0
  871. package/dist/hosting/redis-browser.d.ts.map +1 -0
  872. package/dist/hosting/redis-browser.js +312 -0
  873. package/dist/hosting/redis-browser.js.map +1 -0
  874. package/dist/hosting/redis-provision.d.ts +39 -0
  875. package/dist/hosting/redis-provision.d.ts.map +1 -0
  876. package/dist/hosting/redis-provision.js +107 -0
  877. package/dist/hosting/redis-provision.js.map +1 -0
  878. package/dist/hosting/runtime-latest.d.ts +33 -0
  879. package/dist/hosting/runtime-latest.d.ts.map +1 -0
  880. package/dist/hosting/runtime-latest.js +180 -0
  881. package/dist/hosting/runtime-latest.js.map +1 -0
  882. package/dist/hosting/runtime-panel-defaults.d.ts +7 -0
  883. package/dist/hosting/runtime-panel-defaults.d.ts.map +1 -0
  884. package/dist/hosting/runtime-panel-defaults.js +43 -0
  885. package/dist/hosting/runtime-panel-defaults.js.map +1 -0
  886. package/dist/hosting/runtime-plugins.d.ts +164 -0
  887. package/dist/hosting/runtime-plugins.d.ts.map +1 -0
  888. package/dist/hosting/runtime-plugins.js +799 -0
  889. package/dist/hosting/runtime-plugins.js.map +1 -0
  890. package/dist/hosting/runtime-probe.d.ts +155 -0
  891. package/dist/hosting/runtime-probe.d.ts.map +1 -0
  892. package/dist/hosting/runtime-probe.js +1872 -0
  893. package/dist/hosting/runtime-probe.js.map +1 -0
  894. package/dist/hosting/runtime-tools.d.ts +20 -0
  895. package/dist/hosting/runtime-tools.d.ts.map +1 -0
  896. package/dist/hosting/runtime-tools.js +41 -0
  897. package/dist/hosting/runtime-tools.js.map +1 -0
  898. package/dist/hosting/runtime-tuning.d.ts +46 -0
  899. package/dist/hosting/runtime-tuning.d.ts.map +1 -0
  900. package/dist/hosting/runtime-tuning.js +289 -0
  901. package/dist/hosting/runtime-tuning.js.map +1 -0
  902. package/dist/hosting/runtime.d.ts +163 -0
  903. package/dist/hosting/runtime.d.ts.map +1 -0
  904. package/dist/hosting/runtime.js +709 -0
  905. package/dist/hosting/runtime.js.map +1 -0
  906. package/dist/hosting/service-catalog/index.d.ts +10 -0
  907. package/dist/hosting/service-catalog/index.d.ts.map +1 -0
  908. package/dist/hosting/service-catalog/index.js +22 -0
  909. package/dist/hosting/service-catalog/index.js.map +1 -0
  910. package/dist/hosting/service-catalog/mysql.d.ts +5 -0
  911. package/dist/hosting/service-catalog/mysql.d.ts.map +1 -0
  912. package/dist/hosting/service-catalog/mysql.js +257 -0
  913. package/dist/hosting/service-catalog/mysql.js.map +1 -0
  914. package/dist/hosting/service-catalog/postgres.d.ts +3 -0
  915. package/dist/hosting/service-catalog/postgres.d.ts.map +1 -0
  916. package/dist/hosting/service-catalog/postgres.js +140 -0
  917. package/dist/hosting/service-catalog/postgres.js.map +1 -0
  918. package/dist/hosting/service-catalog/redis.d.ts +3 -0
  919. package/dist/hosting/service-catalog/redis.d.ts.map +1 -0
  920. package/dist/hosting/service-catalog/redis.js +146 -0
  921. package/dist/hosting/service-catalog/redis.js.map +1 -0
  922. package/dist/hosting/service-catalog/types.d.ts +59 -0
  923. package/dist/hosting/service-catalog/types.d.ts.map +1 -0
  924. package/dist/hosting/service-catalog/types.js +72 -0
  925. package/dist/hosting/service-catalog/types.js.map +1 -0
  926. package/dist/hosting/service-console.d.ts +51 -0
  927. package/dist/hosting/service-console.d.ts.map +1 -0
  928. package/dist/hosting/service-console.js +480 -0
  929. package/dist/hosting/service-console.js.map +1 -0
  930. package/dist/hosting/service-exposure/geo-countries.d.ts +51 -0
  931. package/dist/hosting/service-exposure/geo-countries.d.ts.map +1 -0
  932. package/dist/hosting/service-exposure/geo-countries.js +245 -0
  933. package/dist/hosting/service-exposure/geo-countries.js.map +1 -0
  934. package/dist/hosting/service-exposure/index.d.ts +5 -0
  935. package/dist/hosting/service-exposure/index.d.ts.map +1 -0
  936. package/dist/hosting/service-exposure/index.js +5 -0
  937. package/dist/hosting/service-exposure/index.js.map +1 -0
  938. package/dist/hosting/service-exposure/ports.d.ts +38 -0
  939. package/dist/hosting/service-exposure/ports.d.ts.map +1 -0
  940. package/dist/hosting/service-exposure/ports.js +175 -0
  941. package/dist/hosting/service-exposure/ports.js.map +1 -0
  942. package/dist/hosting/service-exposure/store.d.ts +18 -0
  943. package/dist/hosting/service-exposure/store.d.ts.map +1 -0
  944. package/dist/hosting/service-exposure/store.js +158 -0
  945. package/dist/hosting/service-exposure/store.js.map +1 -0
  946. package/dist/hosting/service-exposure/sync.d.ts +89 -0
  947. package/dist/hosting/service-exposure/sync.d.ts.map +1 -0
  948. package/dist/hosting/service-exposure/sync.js +365 -0
  949. package/dist/hosting/service-exposure/sync.js.map +1 -0
  950. package/dist/hosting/service-matrix.d.ts +31 -0
  951. package/dist/hosting/service-matrix.d.ts.map +1 -0
  952. package/dist/hosting/service-matrix.js +282 -0
  953. package/dist/hosting/service-matrix.js.map +1 -0
  954. package/dist/hosting/sftp-keys.d.ts +35 -0
  955. package/dist/hosting/sftp-keys.d.ts.map +1 -0
  956. package/dist/hosting/sftp-keys.js +151 -0
  957. package/dist/hosting/sftp-keys.js.map +1 -0
  958. package/dist/hosting/software-catalog.d.ts +56 -0
  959. package/dist/hosting/software-catalog.d.ts.map +1 -0
  960. package/dist/hosting/software-catalog.js +380 -0
  961. package/dist/hosting/software-catalog.js.map +1 -0
  962. package/dist/hosting/software-install.d.ts +88 -0
  963. package/dist/hosting/software-install.d.ts.map +1 -0
  964. package/dist/hosting/software-install.js +610 -0
  965. package/dist/hosting/software-install.js.map +1 -0
  966. package/dist/hosting/software-probe/HostSoftwareProbe.d.ts +45 -0
  967. package/dist/hosting/software-probe/HostSoftwareProbe.d.ts.map +1 -0
  968. package/dist/hosting/software-probe/HostSoftwareProbe.js +362 -0
  969. package/dist/hosting/software-probe/HostSoftwareProbe.js.map +1 -0
  970. package/dist/hosting/software-probe/index.d.ts +6 -0
  971. package/dist/hosting/software-probe/index.d.ts.map +1 -0
  972. package/dist/hosting/software-probe/index.js +6 -0
  973. package/dist/hosting/software-probe/index.js.map +1 -0
  974. package/dist/hosting/software-probe/registry.d.ts +11 -0
  975. package/dist/hosting/software-probe/registry.d.ts.map +1 -0
  976. package/dist/hosting/software-probe/registry.js +100 -0
  977. package/dist/hosting/software-probe/registry.js.map +1 -0
  978. package/dist/hosting/software-probe/resolve-bin.d.ts +38 -0
  979. package/dist/hosting/software-probe/resolve-bin.d.ts.map +1 -0
  980. package/dist/hosting/software-probe/resolve-bin.js +168 -0
  981. package/dist/hosting/software-probe/resolve-bin.js.map +1 -0
  982. package/dist/hosting/software-probe/shell.d.ts +22 -0
  983. package/dist/hosting/software-probe/shell.d.ts.map +1 -0
  984. package/dist/hosting/software-probe/shell.js +41 -0
  985. package/dist/hosting/software-probe/shell.js.map +1 -0
  986. package/dist/hosting/software-probe/types.d.ts +57 -0
  987. package/dist/hosting/software-probe/types.d.ts.map +1 -0
  988. package/dist/hosting/software-probe/types.js +6 -0
  989. package/dist/hosting/software-probe/types.js.map +1 -0
  990. package/dist/hosting/software-uninstall.d.ts +67 -0
  991. package/dist/hosting/software-uninstall.d.ts.map +1 -0
  992. package/dist/hosting/software-uninstall.js +333 -0
  993. package/dist/hosting/software-uninstall.js.map +1 -0
  994. package/dist/hosting/sql-engine-health/actions.d.ts +20 -0
  995. package/dist/hosting/sql-engine-health/actions.d.ts.map +1 -0
  996. package/dist/hosting/sql-engine-health/actions.js +29 -0
  997. package/dist/hosting/sql-engine-health/actions.js.map +1 -0
  998. package/dist/hosting/sql-engine-health/compat.d.ts +33 -0
  999. package/dist/hosting/sql-engine-health/compat.d.ts.map +1 -0
  1000. package/dist/hosting/sql-engine-health/compat.js +45 -0
  1001. package/dist/hosting/sql-engine-health/compat.js.map +1 -0
  1002. package/dist/hosting/sql-engine-health/diagnose.d.ts +10 -0
  1003. package/dist/hosting/sql-engine-health/diagnose.d.ts.map +1 -0
  1004. package/dist/hosting/sql-engine-health/diagnose.js +268 -0
  1005. package/dist/hosting/sql-engine-health/diagnose.js.map +1 -0
  1006. package/dist/hosting/sql-engine-health/execute.d.ts +14 -0
  1007. package/dist/hosting/sql-engine-health/execute.d.ts.map +1 -0
  1008. package/dist/hosting/sql-engine-health/execute.js +130 -0
  1009. package/dist/hosting/sql-engine-health/execute.js.map +1 -0
  1010. package/dist/hosting/sql-engine-health/index.d.ts +6 -0
  1011. package/dist/hosting/sql-engine-health/index.d.ts.map +1 -0
  1012. package/dist/hosting/sql-engine-health/index.js +6 -0
  1013. package/dist/hosting/sql-engine-health/index.js.map +1 -0
  1014. package/dist/hosting/sql-engine-health/types.d.ts +63 -0
  1015. package/dist/hosting/sql-engine-health/types.d.ts.map +1 -0
  1016. package/dist/hosting/sql-engine-health/types.js +6 -0
  1017. package/dist/hosting/sql-engine-health/types.js.map +1 -0
  1018. package/dist/hosting/sql-engine-switch/grants.d.ts +10 -0
  1019. package/dist/hosting/sql-engine-switch/grants.d.ts.map +1 -0
  1020. package/dist/hosting/sql-engine-switch/grants.js +61 -0
  1021. package/dist/hosting/sql-engine-switch/grants.js.map +1 -0
  1022. package/dist/hosting/sql-engine-switch/index.d.ts +7 -0
  1023. package/dist/hosting/sql-engine-switch/index.d.ts.map +1 -0
  1024. package/dist/hosting/sql-engine-switch/index.js +7 -0
  1025. package/dist/hosting/sql-engine-switch/index.js.map +1 -0
  1026. package/dist/hosting/sql-engine-switch/migrate.d.ts +22 -0
  1027. package/dist/hosting/sql-engine-switch/migrate.d.ts.map +1 -0
  1028. package/dist/hosting/sql-engine-switch/migrate.js +389 -0
  1029. package/dist/hosting/sql-engine-switch/migrate.js.map +1 -0
  1030. package/dist/hosting/sql-engine-switch/mysql-frozen.d.ts +74 -0
  1031. package/dist/hosting/sql-engine-switch/mysql-frozen.d.ts.map +1 -0
  1032. package/dist/hosting/sql-engine-switch/mysql-frozen.js +317 -0
  1033. package/dist/hosting/sql-engine-switch/mysql-frozen.js.map +1 -0
  1034. package/dist/hosting/sql-engine-switch/preview.d.ts +18 -0
  1035. package/dist/hosting/sql-engine-switch/preview.d.ts.map +1 -0
  1036. package/dist/hosting/sql-engine-switch/preview.js +173 -0
  1037. package/dist/hosting/sql-engine-switch/preview.js.map +1 -0
  1038. package/dist/hosting/sql-engine-switch/sql-auth.d.ts +9 -0
  1039. package/dist/hosting/sql-engine-switch/sql-auth.d.ts.map +1 -0
  1040. package/dist/hosting/sql-engine-switch/sql-auth.js +23 -0
  1041. package/dist/hosting/sql-engine-switch/sql-auth.js.map +1 -0
  1042. package/dist/hosting/sql-engine-switch/types.d.ts +51 -0
  1043. package/dist/hosting/sql-engine-switch/types.d.ts.map +1 -0
  1044. package/dist/hosting/sql-engine-switch/types.js +5 -0
  1045. package/dist/hosting/sql-engine-switch/types.js.map +1 -0
  1046. package/dist/hosting/sshd-sftp-snippet.d.ts +35 -0
  1047. package/dist/hosting/sshd-sftp-snippet.d.ts.map +1 -0
  1048. package/dist/hosting/sshd-sftp-snippet.js +135 -0
  1049. package/dist/hosting/sshd-sftp-snippet.js.map +1 -0
  1050. package/dist/hosting/ssl-certs.d.ts +151 -0
  1051. package/dist/hosting/ssl-certs.d.ts.map +1 -0
  1052. package/dist/hosting/ssl-certs.js +462 -0
  1053. package/dist/hosting/ssl-certs.js.map +1 -0
  1054. package/dist/hosting/ssl-le-errors.d.ts +19 -0
  1055. package/dist/hosting/ssl-le-errors.d.ts.map +1 -0
  1056. package/dist/hosting/ssl-le-errors.js +105 -0
  1057. package/dist/hosting/ssl-le-errors.js.map +1 -0
  1058. package/dist/hosting/stack/definitions.d.ts +67 -0
  1059. package/dist/hosting/stack/definitions.d.ts.map +1 -0
  1060. package/dist/hosting/stack/definitions.js +519 -0
  1061. package/dist/hosting/stack/definitions.js.map +1 -0
  1062. package/dist/hosting/stack/index.d.ts +4 -0
  1063. package/dist/hosting/stack/index.d.ts.map +1 -0
  1064. package/dist/hosting/stack/index.js +4 -0
  1065. package/dist/hosting/stack/index.js.map +1 -0
  1066. package/dist/hosting/stack/manifest.d.ts +48 -0
  1067. package/dist/hosting/stack/manifest.d.ts.map +1 -0
  1068. package/dist/hosting/stack/manifest.js +108 -0
  1069. package/dist/hosting/stack/manifest.js.map +1 -0
  1070. package/dist/hosting/stack/ops.d.ts +89 -0
  1071. package/dist/hosting/stack/ops.d.ts.map +1 -0
  1072. package/dist/hosting/stack/ops.js +485 -0
  1073. package/dist/hosting/stack/ops.js.map +1 -0
  1074. package/dist/hosting/system-apply.d.ts +242 -0
  1075. package/dist/hosting/system-apply.d.ts.map +1 -0
  1076. package/dist/hosting/system-apply.js +1148 -0
  1077. package/dist/hosting/system-apply.js.map +1 -0
  1078. package/dist/hosting/temp-db-user.d.ts +75 -0
  1079. package/dist/hosting/temp-db-user.d.ts.map +1 -0
  1080. package/dist/hosting/temp-db-user.js +230 -0
  1081. package/dist/hosting/temp-db-user.js.map +1 -0
  1082. package/dist/hosting/version-discovery.d.ts +59 -0
  1083. package/dist/hosting/version-discovery.d.ts.map +1 -0
  1084. package/dist/hosting/version-discovery.js +599 -0
  1085. package/dist/hosting/version-discovery.js.map +1 -0
  1086. package/dist/hosting/vnc/client-profiles.d.ts +78 -0
  1087. package/dist/hosting/vnc/client-profiles.d.ts.map +1 -0
  1088. package/dist/hosting/vnc/client-profiles.js +251 -0
  1089. package/dist/hosting/vnc/client-profiles.js.map +1 -0
  1090. package/dist/hosting/vnc/index.d.ts +13 -0
  1091. package/dist/hosting/vnc/index.d.ts.map +1 -0
  1092. package/dist/hosting/vnc/index.js +13 -0
  1093. package/dist/hosting/vnc/index.js.map +1 -0
  1094. package/dist/hosting/vnc/linux-user.d.ts +33 -0
  1095. package/dist/hosting/vnc/linux-user.d.ts.map +1 -0
  1096. package/dist/hosting/vnc/linux-user.js +114 -0
  1097. package/dist/hosting/vnc/linux-user.js.map +1 -0
  1098. package/dist/hosting/vnc/novnc.d.ts +89 -0
  1099. package/dist/hosting/vnc/novnc.d.ts.map +1 -0
  1100. package/dist/hosting/vnc/novnc.js +232 -0
  1101. package/dist/hosting/vnc/novnc.js.map +1 -0
  1102. package/dist/hosting/vnc/passwd.d.ts +16 -0
  1103. package/dist/hosting/vnc/passwd.d.ts.map +1 -0
  1104. package/dist/hosting/vnc/passwd.js +41 -0
  1105. package/dist/hosting/vnc/passwd.js.map +1 -0
  1106. package/dist/hosting/vnc/ports.d.ts +12 -0
  1107. package/dist/hosting/vnc/ports.d.ts.map +1 -0
  1108. package/dist/hosting/vnc/ports.js +36 -0
  1109. package/dist/hosting/vnc/ports.js.map +1 -0
  1110. package/dist/hosting/vnc/rfb-probe.d.ts +23 -0
  1111. package/dist/hosting/vnc/rfb-probe.d.ts.map +1 -0
  1112. package/dist/hosting/vnc/rfb-probe.js +95 -0
  1113. package/dist/hosting/vnc/rfb-probe.js.map +1 -0
  1114. package/dist/hosting/vnc/server-session.d.ts +69 -0
  1115. package/dist/hosting/vnc/server-session.d.ts.map +1 -0
  1116. package/dist/hosting/vnc/server-session.js +390 -0
  1117. package/dist/hosting/vnc/server-session.js.map +1 -0
  1118. package/dist/hosting/vnc/service.d.ts +135 -0
  1119. package/dist/hosting/vnc/service.d.ts.map +1 -0
  1120. package/dist/hosting/vnc/service.js +896 -0
  1121. package/dist/hosting/vnc/service.js.map +1 -0
  1122. package/dist/hosting/vnc/session-ticket.d.ts +37 -0
  1123. package/dist/hosting/vnc/session-ticket.d.ts.map +1 -0
  1124. package/dist/hosting/vnc/session-ticket.js +64 -0
  1125. package/dist/hosting/vnc/session-ticket.js.map +1 -0
  1126. package/dist/hosting/vnc/share-links.d.ts +27 -0
  1127. package/dist/hosting/vnc/share-links.d.ts.map +1 -0
  1128. package/dist/hosting/vnc/share-links.js +68 -0
  1129. package/dist/hosting/vnc/share-links.js.map +1 -0
  1130. package/dist/hosting/vnc/types.d.ts +87 -0
  1131. package/dist/hosting/vnc/types.d.ts.map +1 -0
  1132. package/dist/hosting/vnc/types.js +35 -0
  1133. package/dist/hosting/vnc/types.js.map +1 -0
  1134. package/dist/hosting/vnc/xstartup.d.ts +7 -0
  1135. package/dist/hosting/vnc/xstartup.d.ts.map +1 -0
  1136. package/dist/hosting/vnc/xstartup.js +50 -0
  1137. package/dist/hosting/vnc/xstartup.js.map +1 -0
  1138. package/dist/hosting/vpn/access-mode.d.ts +37 -0
  1139. package/dist/hosting/vpn/access-mode.d.ts.map +1 -0
  1140. package/dist/hosting/vpn/access-mode.js +126 -0
  1141. package/dist/hosting/vpn/access-mode.js.map +1 -0
  1142. package/dist/hosting/vpn/client-conf-protect.d.ts +28 -0
  1143. package/dist/hosting/vpn/client-conf-protect.d.ts.map +1 -0
  1144. package/dist/hosting/vpn/client-conf-protect.js +138 -0
  1145. package/dist/hosting/vpn/client-conf-protect.js.map +1 -0
  1146. package/dist/hosting/vpn/endpoint.d.ts +26 -0
  1147. package/dist/hosting/vpn/endpoint.d.ts.map +1 -0
  1148. package/dist/hosting/vpn/endpoint.js +90 -0
  1149. package/dist/hosting/vpn/endpoint.js.map +1 -0
  1150. package/dist/hosting/vpn/index.d.ts +12 -0
  1151. package/dist/hosting/vpn/index.d.ts.map +1 -0
  1152. package/dist/hosting/vpn/index.js +12 -0
  1153. package/dist/hosting/vpn/index.js.map +1 -0
  1154. package/dist/hosting/vpn/monitor.d.ts +141 -0
  1155. package/dist/hosting/vpn/monitor.d.ts.map +1 -0
  1156. package/dist/hosting/vpn/monitor.js +537 -0
  1157. package/dist/hosting/vpn/monitor.js.map +1 -0
  1158. package/dist/hosting/vpn/openvpn-conf.d.ts +34 -0
  1159. package/dist/hosting/vpn/openvpn-conf.d.ts.map +1 -0
  1160. package/dist/hosting/vpn/openvpn-conf.js +89 -0
  1161. package/dist/hosting/vpn/openvpn-conf.js.map +1 -0
  1162. package/dist/hosting/vpn/openvpn-ops.d.ts +72 -0
  1163. package/dist/hosting/vpn/openvpn-ops.d.ts.map +1 -0
  1164. package/dist/hosting/vpn/openvpn-ops.js +500 -0
  1165. package/dist/hosting/vpn/openvpn-ops.js.map +1 -0
  1166. package/dist/hosting/vpn/outline-ops.d.ts +71 -0
  1167. package/dist/hosting/vpn/outline-ops.d.ts.map +1 -0
  1168. package/dist/hosting/vpn/outline-ops.js +321 -0
  1169. package/dist/hosting/vpn/outline-ops.js.map +1 -0
  1170. package/dist/hosting/vpn/ports.d.ts +10 -0
  1171. package/dist/hosting/vpn/ports.d.ts.map +1 -0
  1172. package/dist/hosting/vpn/ports.js +48 -0
  1173. package/dist/hosting/vpn/ports.js.map +1 -0
  1174. package/dist/hosting/vpn/service.d.ts +114 -0
  1175. package/dist/hosting/vpn/service.d.ts.map +1 -0
  1176. package/dist/hosting/vpn/service.js +786 -0
  1177. package/dist/hosting/vpn/service.js.map +1 -0
  1178. package/dist/hosting/vpn/types.d.ts +66 -0
  1179. package/dist/hosting/vpn/types.d.ts.map +1 -0
  1180. package/dist/hosting/vpn/types.js +10 -0
  1181. package/dist/hosting/vpn/types.js.map +1 -0
  1182. package/dist/hosting/vpn/wireguard-conf.d.ts +31 -0
  1183. package/dist/hosting/vpn/wireguard-conf.d.ts.map +1 -0
  1184. package/dist/hosting/vpn/wireguard-conf.js +69 -0
  1185. package/dist/hosting/vpn/wireguard-conf.js.map +1 -0
  1186. package/dist/hosting/web-stats.d.ts +53 -0
  1187. package/dist/hosting/web-stats.d.ts.map +1 -0
  1188. package/dist/hosting/web-stats.js +177 -0
  1189. package/dist/hosting/web-stats.js.map +1 -0
  1190. package/dist/hosting/web-ui-build.d.ts +44 -0
  1191. package/dist/hosting/web-ui-build.d.ts.map +1 -0
  1192. package/dist/hosting/web-ui-build.js +297 -0
  1193. package/dist/hosting/web-ui-build.js.map +1 -0
  1194. package/dist/hosting/wizard.d.ts +43 -0
  1195. package/dist/hosting/wizard.d.ts.map +1 -0
  1196. package/dist/hosting/wizard.js +158 -0
  1197. package/dist/hosting/wizard.js.map +1 -0
  1198. package/dist/hosting/wordpress-download.d.ts +26 -0
  1199. package/dist/hosting/wordpress-download.d.ts.map +1 -0
  1200. package/dist/hosting/wordpress-download.js +70 -0
  1201. package/dist/hosting/wordpress-download.js.map +1 -0
  1202. package/dist/hosting/wordpress-setup.d.ts +40 -0
  1203. package/dist/hosting/wordpress-setup.d.ts.map +1 -0
  1204. package/dist/hosting/wordpress-setup.js +150 -0
  1205. package/dist/hosting/wordpress-setup.js.map +1 -0
  1206. package/dist/index.d.ts +19 -0
  1207. package/dist/index.d.ts.map +1 -0
  1208. package/dist/index.js +19 -0
  1209. package/dist/index.js.map +1 -0
  1210. package/dist/llm/gateway.d.ts +61 -0
  1211. package/dist/llm/gateway.d.ts.map +1 -0
  1212. package/dist/llm/gateway.js +98 -0
  1213. package/dist/llm/gateway.js.map +1 -0
  1214. package/dist/llm/http-transport.d.ts +6 -0
  1215. package/dist/llm/http-transport.d.ts.map +1 -0
  1216. package/dist/llm/http-transport.js +52 -0
  1217. package/dist/llm/http-transport.js.map +1 -0
  1218. package/dist/llm/index.d.ts +3 -0
  1219. package/dist/llm/index.d.ts.map +1 -0
  1220. package/dist/llm/index.js +3 -0
  1221. package/dist/llm/index.js.map +1 -0
  1222. package/dist/monitoring/index.d.ts +7 -0
  1223. package/dist/monitoring/index.d.ts.map +1 -0
  1224. package/dist/monitoring/index.js +7 -0
  1225. package/dist/monitoring/index.js.map +1 -0
  1226. package/dist/monitoring/metrics.d.ts +26 -0
  1227. package/dist/monitoring/metrics.d.ts.map +1 -0
  1228. package/dist/monitoring/metrics.js +144 -0
  1229. package/dist/monitoring/metrics.js.map +1 -0
  1230. package/dist/monitoring/notifications.d.ts +29 -0
  1231. package/dist/monitoring/notifications.d.ts.map +1 -0
  1232. package/dist/monitoring/notifications.js +337 -0
  1233. package/dist/monitoring/notifications.js.map +1 -0
  1234. package/dist/monitoring/process-signal.d.ts +78 -0
  1235. package/dist/monitoring/process-signal.d.ts.map +1 -0
  1236. package/dist/monitoring/process-signal.js +289 -0
  1237. package/dist/monitoring/process-signal.js.map +1 -0
  1238. package/dist/monitoring/process-snapshot.d.ts +21 -0
  1239. package/dist/monitoring/process-snapshot.d.ts.map +1 -0
  1240. package/dist/monitoring/process-snapshot.js +219 -0
  1241. package/dist/monitoring/process-snapshot.js.map +1 -0
  1242. package/dist/monitoring/project-usage.d.ts +45 -0
  1243. package/dist/monitoring/project-usage.d.ts.map +1 -0
  1244. package/dist/monitoring/project-usage.js +75 -0
  1245. package/dist/monitoring/project-usage.js.map +1 -0
  1246. package/dist/monitoring/top-snapshot.d.ts +47 -0
  1247. package/dist/monitoring/top-snapshot.d.ts.map +1 -0
  1248. package/dist/monitoring/top-snapshot.js +245 -0
  1249. package/dist/monitoring/top-snapshot.js.map +1 -0
  1250. package/dist/net/index.d.ts +7 -0
  1251. package/dist/net/index.d.ts.map +1 -0
  1252. package/dist/net/index.js +7 -0
  1253. package/dist/net/index.js.map +1 -0
  1254. package/dist/net/ip.d.ts +41 -0
  1255. package/dist/net/ip.d.ts.map +1 -0
  1256. package/dist/net/ip.js +326 -0
  1257. package/dist/net/ip.js.map +1 -0
  1258. package/dist/net/network-apply.d.ts +73 -0
  1259. package/dist/net/network-apply.d.ts.map +1 -0
  1260. package/dist/net/network-apply.js +712 -0
  1261. package/dist/net/network-apply.js.map +1 -0
  1262. package/dist/net/network-parse.d.ts +27 -0
  1263. package/dist/net/network-parse.d.ts.map +1 -0
  1264. package/dist/net/network-parse.js +162 -0
  1265. package/dist/net/network-parse.js.map +1 -0
  1266. package/dist/net/network-snapshot.d.ts +9 -0
  1267. package/dist/net/network-snapshot.d.ts.map +1 -0
  1268. package/dist/net/network-snapshot.js +241 -0
  1269. package/dist/net/network-snapshot.js.map +1 -0
  1270. package/dist/net/network-types.d.ts +107 -0
  1271. package/dist/net/network-types.d.ts.map +1 -0
  1272. package/dist/net/network-types.js +5 -0
  1273. package/dist/net/network-types.js.map +1 -0
  1274. package/dist/net/ssrf.d.ts +25 -0
  1275. package/dist/net/ssrf.d.ts.map +1 -0
  1276. package/dist/net/ssrf.js +127 -0
  1277. package/dist/net/ssrf.js.map +1 -0
  1278. package/dist/repositories/approval-repo.d.ts +13 -0
  1279. package/dist/repositories/approval-repo.d.ts.map +1 -0
  1280. package/dist/repositories/approval-repo.js +29 -0
  1281. package/dist/repositories/approval-repo.js.map +1 -0
  1282. package/dist/repositories/audit-repo.d.ts +21 -0
  1283. package/dist/repositories/audit-repo.d.ts.map +1 -0
  1284. package/dist/repositories/audit-repo.js +39 -0
  1285. package/dist/repositories/audit-repo.js.map +1 -0
  1286. package/dist/repositories/index.d.ts +7 -0
  1287. package/dist/repositories/index.d.ts.map +1 -0
  1288. package/dist/repositories/index.js +7 -0
  1289. package/dist/repositories/index.js.map +1 -0
  1290. package/dist/repositories/project-repo.d.ts +19 -0
  1291. package/dist/repositories/project-repo.d.ts.map +1 -0
  1292. package/dist/repositories/project-repo.js +142 -0
  1293. package/dist/repositories/project-repo.js.map +1 -0
  1294. package/dist/repositories/session-repo.d.ts +37 -0
  1295. package/dist/repositories/session-repo.d.ts.map +1 -0
  1296. package/dist/repositories/session-repo.js +141 -0
  1297. package/dist/repositories/session-repo.js.map +1 -0
  1298. package/dist/repositories/settings-repo.d.ts +10 -0
  1299. package/dist/repositories/settings-repo.d.ts.map +1 -0
  1300. package/dist/repositories/settings-repo.js +23 -0
  1301. package/dist/repositories/settings-repo.js.map +1 -0
  1302. package/dist/repositories/user-repo.d.ts +21 -0
  1303. package/dist/repositories/user-repo.d.ts.map +1 -0
  1304. package/dist/repositories/user-repo.js +104 -0
  1305. package/dist/repositories/user-repo.js.map +1 -0
  1306. package/dist/security/allowlist.d.ts +40 -0
  1307. package/dist/security/allowlist.d.ts.map +1 -0
  1308. package/dist/security/allowlist.js +167 -0
  1309. package/dist/security/allowlist.js.map +1 -0
  1310. package/dist/security/api-keys.d.ts +40 -0
  1311. package/dist/security/api-keys.d.ts.map +1 -0
  1312. package/dist/security/api-keys.js +99 -0
  1313. package/dist/security/api-keys.js.map +1 -0
  1314. package/dist/security/approval.d.ts +37 -0
  1315. package/dist/security/approval.d.ts.map +1 -0
  1316. package/dist/security/approval.js +152 -0
  1317. package/dist/security/approval.js.map +1 -0
  1318. package/dist/security/capabilities-enforce.d.ts +18 -0
  1319. package/dist/security/capabilities-enforce.d.ts.map +1 -0
  1320. package/dist/security/capabilities-enforce.js +29 -0
  1321. package/dist/security/capabilities-enforce.js.map +1 -0
  1322. package/dist/security/index.d.ts +14 -0
  1323. package/dist/security/index.d.ts.map +1 -0
  1324. package/dist/security/index.js +14 -0
  1325. package/dist/security/index.js.map +1 -0
  1326. package/dist/security/mfa/backup-export.d.ts +30 -0
  1327. package/dist/security/mfa/backup-export.d.ts.map +1 -0
  1328. package/dist/security/mfa/backup-export.js +57 -0
  1329. package/dist/security/mfa/backup-export.js.map +1 -0
  1330. package/dist/security/mfa/fail2ban-jails.d.ts +10 -0
  1331. package/dist/security/mfa/fail2ban-jails.d.ts.map +1 -0
  1332. package/dist/security/mfa/fail2ban-jails.js +71 -0
  1333. package/dist/security/mfa/fail2ban-jails.js.map +1 -0
  1334. package/dist/security/mfa/index.d.ts +9 -0
  1335. package/dist/security/mfa/index.d.ts.map +1 -0
  1336. package/dist/security/mfa/index.js +9 -0
  1337. package/dist/security/mfa/index.js.map +1 -0
  1338. package/dist/security/mfa/rate-limit.d.ts +30 -0
  1339. package/dist/security/mfa/rate-limit.d.ts.map +1 -0
  1340. package/dist/security/mfa/rate-limit.js +90 -0
  1341. package/dist/security/mfa/rate-limit.js.map +1 -0
  1342. package/dist/security/mfa/recovery-codes.d.ts +10 -0
  1343. package/dist/security/mfa/recovery-codes.d.ts.map +1 -0
  1344. package/dist/security/mfa/recovery-codes.js +38 -0
  1345. package/dist/security/mfa/recovery-codes.js.map +1 -0
  1346. package/dist/security/mfa/remember-device.d.ts +34 -0
  1347. package/dist/security/mfa/remember-device.d.ts.map +1 -0
  1348. package/dist/security/mfa/remember-device.js +112 -0
  1349. package/dist/security/mfa/remember-device.js.map +1 -0
  1350. package/dist/security/mfa/step-up.d.ts +9 -0
  1351. package/dist/security/mfa/step-up.d.ts.map +1 -0
  1352. package/dist/security/mfa/step-up.js +25 -0
  1353. package/dist/security/mfa/step-up.js.map +1 -0
  1354. package/dist/security/mfa/totp-crypto.d.ts +13 -0
  1355. package/dist/security/mfa/totp-crypto.d.ts.map +1 -0
  1356. package/dist/security/mfa/totp-crypto.js +29 -0
  1357. package/dist/security/mfa/totp-crypto.js.map +1 -0
  1358. package/dist/security/mfa/webauthn.d.ts +69 -0
  1359. package/dist/security/mfa/webauthn.d.ts.map +1 -0
  1360. package/dist/security/mfa/webauthn.js +178 -0
  1361. package/dist/security/mfa/webauthn.js.map +1 -0
  1362. package/dist/security/operation-level.d.ts +14 -0
  1363. package/dist/security/operation-level.d.ts.map +1 -0
  1364. package/dist/security/operation-level.js +39 -0
  1365. package/dist/security/operation-level.js.map +1 -0
  1366. package/dist/security/password-policy.d.ts +22 -0
  1367. package/dist/security/password-policy.d.ts.map +1 -0
  1368. package/dist/security/password-policy.js +50 -0
  1369. package/dist/security/password-policy.js.map +1 -0
  1370. package/dist/security/rbac.d.ts +18 -0
  1371. package/dist/security/rbac.d.ts.map +1 -0
  1372. package/dist/security/rbac.js +58 -0
  1373. package/dist/security/rbac.js.map +1 -0
  1374. package/dist/security/sandbox.d.ts +34 -0
  1375. package/dist/security/sandbox.d.ts.map +1 -0
  1376. package/dist/security/sandbox.js +62 -0
  1377. package/dist/security/sandbox.js.map +1 -0
  1378. package/dist/security/ssh-2fa/index.d.ts +4 -0
  1379. package/dist/security/ssh-2fa/index.d.ts.map +1 -0
  1380. package/dist/security/ssh-2fa/index.js +4 -0
  1381. package/dist/security/ssh-2fa/index.js.map +1 -0
  1382. package/dist/security/ssh-2fa/install.d.ts +93 -0
  1383. package/dist/security/ssh-2fa/install.d.ts.map +1 -0
  1384. package/dist/security/ssh-2fa/install.js +457 -0
  1385. package/dist/security/ssh-2fa/install.js.map +1 -0
  1386. package/dist/security/ssh-2fa/store.d.ts +44 -0
  1387. package/dist/security/ssh-2fa/store.d.ts.map +1 -0
  1388. package/dist/security/ssh-2fa/store.js +209 -0
  1389. package/dist/security/ssh-2fa/store.js.map +1 -0
  1390. package/dist/security/ssh-2fa/types.d.ts +33 -0
  1391. package/dist/security/ssh-2fa/types.d.ts.map +1 -0
  1392. package/dist/security/ssh-2fa/types.js +9 -0
  1393. package/dist/security/ssh-2fa/types.js.map +1 -0
  1394. package/dist/security/ssh-identity/crypto.d.ts +24 -0
  1395. package/dist/security/ssh-identity/crypto.d.ts.map +1 -0
  1396. package/dist/security/ssh-identity/crypto.js +109 -0
  1397. package/dist/security/ssh-identity/crypto.js.map +1 -0
  1398. package/dist/security/ssh-identity/generate.d.ts +18 -0
  1399. package/dist/security/ssh-identity/generate.d.ts.map +1 -0
  1400. package/dist/security/ssh-identity/generate.js +102 -0
  1401. package/dist/security/ssh-identity/generate.js.map +1 -0
  1402. package/dist/security/ssh-identity/index.d.ts +7 -0
  1403. package/dist/security/ssh-identity/index.d.ts.map +1 -0
  1404. package/dist/security/ssh-identity/index.js +7 -0
  1405. package/dist/security/ssh-identity/index.js.map +1 -0
  1406. package/dist/security/ssh-identity/install.d.ts +37 -0
  1407. package/dist/security/ssh-identity/install.d.ts.map +1 -0
  1408. package/dist/security/ssh-identity/install.js +281 -0
  1409. package/dist/security/ssh-identity/install.js.map +1 -0
  1410. package/dist/security/ssh-identity/ops.d.ts +77 -0
  1411. package/dist/security/ssh-identity/ops.d.ts.map +1 -0
  1412. package/dist/security/ssh-identity/ops.js +244 -0
  1413. package/dist/security/ssh-identity/ops.js.map +1 -0
  1414. package/dist/security/ssh-identity/store.d.ts +51 -0
  1415. package/dist/security/ssh-identity/store.d.ts.map +1 -0
  1416. package/dist/security/ssh-identity/store.js +240 -0
  1417. package/dist/security/ssh-identity/store.js.map +1 -0
  1418. package/dist/security/ssh-identity/types.d.ts +43 -0
  1419. package/dist/security/ssh-identity/types.d.ts.map +1 -0
  1420. package/dist/security/ssh-identity/types.js +9 -0
  1421. package/dist/security/ssh-identity/types.js.map +1 -0
  1422. package/dist/security/tool-executor.d.ts +39 -0
  1423. package/dist/security/tool-executor.d.ts.map +1 -0
  1424. package/dist/security/tool-executor.js +271 -0
  1425. package/dist/security/tool-executor.js.map +1 -0
  1426. package/dist/security/totp.d.ts +15 -0
  1427. package/dist/security/totp.d.ts.map +1 -0
  1428. package/dist/security/totp.js +97 -0
  1429. package/dist/security/totp.js.map +1 -0
  1430. package/dist/services/ai-task-service.d.ts +35 -0
  1431. package/dist/services/ai-task-service.d.ts.map +1 -0
  1432. package/dist/services/ai-task-service.js +208 -0
  1433. package/dist/services/ai-task-service.js.map +1 -0
  1434. package/dist/services/auth.d.ts +126 -0
  1435. package/dist/services/auth.d.ts.map +1 -0
  1436. package/dist/services/auth.js +705 -0
  1437. package/dist/services/auth.js.map +1 -0
  1438. package/dist/services/index.d.ts +9 -0
  1439. package/dist/services/index.d.ts.map +1 -0
  1440. package/dist/services/index.js +9 -0
  1441. package/dist/services/index.js.map +1 -0
  1442. package/dist/services/list-filter.d.ts +24 -0
  1443. package/dist/services/list-filter.d.ts.map +1 -0
  1444. package/dist/services/list-filter.js +90 -0
  1445. package/dist/services/list-filter.js.map +1 -0
  1446. package/dist/services/protection-probe.d.ts +31 -0
  1447. package/dist/services/protection-probe.d.ts.map +1 -0
  1448. package/dist/services/protection-probe.js +97 -0
  1449. package/dist/services/protection-probe.js.map +1 -0
  1450. package/dist/services/protection.d.ts +23 -0
  1451. package/dist/services/protection.d.ts.map +1 -0
  1452. package/dist/services/protection.js +51 -0
  1453. package/dist/services/protection.js.map +1 -0
  1454. package/dist/services/rbac-policy.d.ts +95 -0
  1455. package/dist/services/rbac-policy.d.ts.map +1 -0
  1456. package/dist/services/rbac-policy.js +260 -0
  1457. package/dist/services/rbac-policy.js.map +1 -0
  1458. package/dist/services/scheduler.d.ts +35 -0
  1459. package/dist/services/scheduler.d.ts.map +1 -0
  1460. package/dist/services/scheduler.js +124 -0
  1461. package/dist/services/scheduler.js.map +1 -0
  1462. package/dist/services/users-admin.d.ts +64 -0
  1463. package/dist/services/users-admin.d.ts.map +1 -0
  1464. package/dist/services/users-admin.js +249 -0
  1465. package/dist/services/users-admin.js.map +1 -0
  1466. package/dist/skills/index.d.ts +3 -0
  1467. package/dist/skills/index.d.ts.map +1 -0
  1468. package/dist/skills/index.js +3 -0
  1469. package/dist/skills/index.js.map +1 -0
  1470. package/dist/skills/playbooks.d.ts +32 -0
  1471. package/dist/skills/playbooks.d.ts.map +1 -0
  1472. package/dist/skills/playbooks.js +164 -0
  1473. package/dist/skills/playbooks.js.map +1 -0
  1474. package/dist/skills/task-planner.d.ts +74 -0
  1475. package/dist/skills/task-planner.d.ts.map +1 -0
  1476. package/dist/skills/task-planner.js +172 -0
  1477. package/dist/skills/task-planner.js.map +1 -0
  1478. package/dist/terminal/index.d.ts +4 -0
  1479. package/dist/terminal/index.d.ts.map +1 -0
  1480. package/dist/terminal/index.js +4 -0
  1481. package/dist/terminal/index.js.map +1 -0
  1482. package/dist/terminal/spawn-plan.d.ts +30 -0
  1483. package/dist/terminal/spawn-plan.d.ts.map +1 -0
  1484. package/dist/terminal/spawn-plan.js +63 -0
  1485. package/dist/terminal/spawn-plan.js.map +1 -0
  1486. package/dist/terminal/targets.d.ts +39 -0
  1487. package/dist/terminal/targets.d.ts.map +1 -0
  1488. package/dist/terminal/targets.js +51 -0
  1489. package/dist/terminal/targets.js.map +1 -0
  1490. package/dist/terminal/tickets.d.ts +34 -0
  1491. package/dist/terminal/tickets.d.ts.map +1 -0
  1492. package/dist/terminal/tickets.js +64 -0
  1493. package/dist/terminal/tickets.js.map +1 -0
  1494. package/dist/test/host.d.ts +11 -0
  1495. package/dist/test/host.d.ts.map +1 -0
  1496. package/dist/test/host.js +25 -0
  1497. package/dist/test/host.js.map +1 -0
  1498. package/dist/update/advisor.d.ts +39 -0
  1499. package/dist/update/advisor.d.ts.map +1 -0
  1500. package/dist/update/advisor.js +117 -0
  1501. package/dist/update/advisor.js.map +1 -0
  1502. package/dist/update/index.d.ts +7 -0
  1503. package/dist/update/index.d.ts.map +1 -0
  1504. package/dist/update/index.js +7 -0
  1505. package/dist/update/index.js.map +1 -0
  1506. package/dist/update/inventory.d.ts +40 -0
  1507. package/dist/update/inventory.d.ts.map +1 -0
  1508. package/dist/update/inventory.js +182 -0
  1509. package/dist/update/inventory.js.map +1 -0
  1510. package/dist/update/package-apply.d.ts +74 -0
  1511. package/dist/update/package-apply.d.ts.map +1 -0
  1512. package/dist/update/package-apply.js +188 -0
  1513. package/dist/update/package-apply.js.map +1 -0
  1514. package/dist/update/self-update-apply.d.ts +112 -0
  1515. package/dist/update/self-update-apply.d.ts.map +1 -0
  1516. package/dist/update/self-update-apply.js +437 -0
  1517. package/dist/update/self-update-apply.js.map +1 -0
  1518. package/dist/update/self-update.d.ts +33 -0
  1519. package/dist/update/self-update.d.ts.map +1 -0
  1520. package/dist/update/self-update.js +88 -0
  1521. package/dist/update/self-update.js.map +1 -0
  1522. package/dist/update/summary.d.ts +35 -0
  1523. package/dist/update/summary.d.ts.map +1 -0
  1524. package/dist/update/summary.js +88 -0
  1525. package/dist/update/summary.js.map +1 -0
  1526. package/package.json +54 -0
@@ -0,0 +1,1365 @@
1
+ /**
2
+ * Webmail as a PHP project — same delivery model as Adminer / phpMyAdmin:
3
+ * create PHP project → download Roundcube or SnappyMail into docRoot → goLive.
4
+ */
5
+ import { chmodSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
6
+ import { execFileSync } from 'node:child_process';
7
+ import { join } from 'node:path';
8
+ import { ErrorCodes, YskError, tl } from 'ysk-server-shared';
9
+ import { chownProjectHome } from '../hosting/project-user-run.js';
10
+ /** Best-effort ownership after webmail tree install (root extract → project user). */
11
+ async function ensureWebmailTreeOwnership(host, project, notes) {
12
+ const row = {
13
+ id: project.id,
14
+ home_dir: project.homeDir,
15
+ linux_user: project.linuxUser,
16
+ linux_group: project.linuxGroup || project.linuxUser,
17
+ os_provisioned: project.osProvisioned === true,
18
+ };
19
+ await chownProjectHome(host, row, notes);
20
+ }
21
+ /**
22
+ * Ensure Dovecot virtual passdb is installed so webmail IMAP login works with
23
+ * panel mailbox passwords (not system PAM). Runs on every webmail create/reinstall.
24
+ */
25
+ async function ensureMailAuthForWebmailLogin(host, notes, written) {
26
+ if (!host.executeEnabled() || !host.isRoot()) {
27
+ notes.push(tl('notes.email.dovecotPassdbWrittenNeedApply'));
28
+ return;
29
+ }
30
+ try {
31
+ const { applyDovecotPassdbToSystem } = await import('./dovecot-passdb.js');
32
+ const { openDatabase } = await import('../db/database.js');
33
+ const dataDir = process.env.YSK_DATA_DIR?.trim() ||
34
+ (host.pathExists('/var/lib/ysk-server') ? '/var/lib/ysk-server' : '');
35
+ if (!dataDir) {
36
+ notes.push(tl('notes.email.dovecotNoPassdbSnippets'));
37
+ return;
38
+ }
39
+ let db;
40
+ try {
41
+ db = openDatabase(join(dataDir, 'ysk.json'));
42
+ }
43
+ catch {
44
+ db = undefined;
45
+ }
46
+ const ap = await applyDovecotPassdbToSystem({
47
+ dataDir,
48
+ host,
49
+ db,
50
+ rewritePassdbs: Boolean(db),
51
+ });
52
+ written.push(...ap.written);
53
+ notes.push(...ap.notes.slice(0, 6));
54
+ }
55
+ catch (e) {
56
+ notes.push(tl('notes.email.dovecotApplyFailed', {
57
+ detail: e instanceof Error ? e.message : String(e),
58
+ }));
59
+ }
60
+ }
61
+ /** Default Roundcube complete package (security line 1.7.x). Override with YSK_ROUNDCUBE_URL / YSK_ROUNDCUBE_VERSION. */
62
+ export const ROUNDCUBE_VERSION = process.env.YSK_ROUNDCUBE_VERSION ?? '1.7.2';
63
+ const ROUNDCUBE_URL = process.env.YSK_ROUNDCUBE_URL ??
64
+ `https://github.com/roundcube/roundcubemail/releases/download/${ROUNDCUBE_VERSION}/roundcubemail-${ROUNDCUBE_VERSION}-complete.tar.gz`;
65
+ /** SnappyMail release. Override with YSK_SNAPPYMAIL_URL / YSK_SNAPPYMAIL_VERSION. */
66
+ export const SNAPPYMAIL_VERSION = process.env.YSK_SNAPPYMAIL_VERSION ?? '2.38.2';
67
+ const SNAPPYMAIL_URL = process.env.YSK_SNAPPYMAIL_URL ??
68
+ `https://github.com/the-djmaze/snappymail/releases/download/v${SNAPPYMAIL_VERSION}/snappymail-${SNAPPYMAIL_VERSION}.tar.gz`;
69
+ export function normalizeWebmailTool(raw) {
70
+ const t = String(raw ?? 'roundcube').trim().toLowerCase();
71
+ if (t === 'snappymail' || t === 'snappy' || t === 'rainloop')
72
+ return 'snappymail';
73
+ return 'roundcube';
74
+ }
75
+ /** Shared panel webmail project (one instance for all mail domains). */
76
+ export const GLOBAL_WEBMAIL_PROJECT_NAME = 'ysk-webmail';
77
+ export function defaultWebmailProjectName(tool, mailDomain) {
78
+ // Global shared install: stable name so retries reinstall instead of spawning many projects
79
+ const d = (mailDomain ?? '').trim().toLowerCase().replace(/[^a-z0-9.-]/g, '');
80
+ if (!d)
81
+ return GLOBAL_WEBMAIL_PROJECT_NAME;
82
+ const base = tool === 'snappymail' ? 'snappymail' : 'roundcube';
83
+ // keep short unique-ish name (legacy per-domain); prefer GLOBAL for panel UI
84
+ const slug = d.replace(/^webmail\./, '').replace(/\./g, '-').slice(0, 40);
85
+ return `${base}-${slug}`;
86
+ }
87
+ /**
88
+ * Roundcube 1.6+ ships package-root index.php as a stub that tells operators to
89
+ * point HTTP at public_html/. The real entry is public_html/index.php with
90
+ * program/config as siblings of public_html (INSTALL_PATH = parent).
91
+ */
92
+ export function resolveRoundcubePackageRoot(webOrPackageRoot) {
93
+ try {
94
+ const parent = join(webOrPackageRoot, '..');
95
+ if (existsSync(join(webOrPackageRoot, 'index.php')) &&
96
+ existsSync(join(parent, 'program', 'include', 'iniset.php'))) {
97
+ return parent;
98
+ }
99
+ }
100
+ catch {
101
+ /* */
102
+ }
103
+ return webOrPackageRoot;
104
+ }
105
+ /** Prefer public_html web root when package root still has the stub index. */
106
+ export function resolveRoundcubeWebRoot(packageRoot) {
107
+ const ph = join(packageRoot, 'public_html');
108
+ // Only use public_html when it is a real Roundcube tree — never php-hello
109
+ if (isRoundcubeDocRoot(ph)) {
110
+ return ph;
111
+ }
112
+ if (isRoundcubeDocRoot(packageRoot)) {
113
+ return packageRoot;
114
+ }
115
+ // Prefer public_html when package root is the RC stub that points at it
116
+ if (isWebmailPublicHtmlStub(packageRoot) &&
117
+ existsSync(join(ph, 'index.php')) &&
118
+ !/YSK PHP OK/i.test(readFileSync(join(ph, 'index.php'), 'utf8'))) {
119
+ return ph;
120
+ }
121
+ return packageRoot;
122
+ }
123
+ /** True when path is a usable Roundcube HTTP docroot (not php-hello, not package stub). */
124
+ export function isRoundcubeDocRoot(docRoot) {
125
+ try {
126
+ if (!existsSync(join(docRoot, 'index.php')))
127
+ return false;
128
+ const idx = readFileSync(join(docRoot, 'index.php'), 'utf8');
129
+ // Hard reject scaffolds / stubs before any parent-program heuristic
130
+ if (/YSK PHP OK/i.test(idx))
131
+ return false;
132
+ if (isWebmailPublicHtmlStub(docRoot))
133
+ return false;
134
+ if (/point to the\s*[\/"']?public_html/i.test(idx))
135
+ return false;
136
+ // Classic layout: program next to index.php
137
+ if (existsSync(join(docRoot, 'program', 'include', 'iniset.php')))
138
+ return true;
139
+ if (existsSync(join(docRoot, 'program', 'lib')))
140
+ return true;
141
+ // 1.6+ public_html layout: program lives one level up — index must still be Roundcube
142
+ if (existsSync(join(docRoot, '..', 'program', 'include', 'iniset.php')) ||
143
+ existsSync(join(docRoot, '..', 'program', 'lib'))) {
144
+ // Real public_html index references INSTALL_PATH / Roundcube bootstrap
145
+ if (/INSTALL_PATH|ROUNDCUBE|roundcube|iniset\.php|rcmail/i.test(idx) &&
146
+ !/YSK PHP OK/i.test(idx)) {
147
+ return true;
148
+ }
149
+ return false;
150
+ }
151
+ if (/ROUNDCUBE|roundcube/i.test(idx))
152
+ return true;
153
+ }
154
+ catch {
155
+ /* */
156
+ }
157
+ return false;
158
+ }
159
+ /**
160
+ * True when SnappyMail markers present.
161
+ * Rejects the package-root stub that only says "point HTTP to /public_html"
162
+ * (that stub is NOT a working webmail — docRoot must be the public_html tree).
163
+ */
164
+ export function isSnappyMailDocRoot(docRoot) {
165
+ try {
166
+ if (!existsSync(join(docRoot, 'index.php')))
167
+ return false;
168
+ const idx = readFileSync(join(docRoot, 'index.php'), 'utf8');
169
+ if (/YSK PHP OK/i.test(idx))
170
+ return false;
171
+ // RainLoop / SnappyMail outer wrapper — wrong document root
172
+ if (/configure your HTTP server to point to the\s*[\/"']?public_html/i.test(idx) ||
173
+ (/public_html/i.test(idx) && /fallback to\s*[\/"']?public_html/i.test(idx))) {
174
+ return false;
175
+ }
176
+ if (existsSync(join(docRoot, 'snappymail')) || existsSync(join(docRoot, '_include.php'))) {
177
+ return true;
178
+ }
179
+ if (/snappymail|rainloop/i.test(idx))
180
+ return true;
181
+ }
182
+ catch {
183
+ /* */
184
+ }
185
+ return false;
186
+ }
187
+ /** True when docRoot is the unusable package-root stub (not public_html). */
188
+ export function isWebmailPublicHtmlStub(docRoot) {
189
+ try {
190
+ const idx = join(docRoot, 'index.php');
191
+ if (!existsSync(idx))
192
+ return false;
193
+ const body = readFileSync(idx, 'utf8');
194
+ return /configure your HTTP server to point to the\s*[\/"']?public_html/i.test(body);
195
+ }
196
+ catch {
197
+ return false;
198
+ }
199
+ }
200
+ export function defaultWebmailHostname(mailDomain) {
201
+ const d = mailDomain.trim().toLowerCase();
202
+ if (!d)
203
+ return 'webmail.local';
204
+ if (d.startsWith('webmail.'))
205
+ return d;
206
+ return `webmail.${d}`;
207
+ }
208
+ /** Derive mail.* IMAP host from webmail or apex domain. */
209
+ export function defaultImapHostForWebmail(webmailOrMailDomain) {
210
+ const d = webmailOrMailDomain.trim().toLowerCase();
211
+ if (!d)
212
+ return 'localhost';
213
+ if (d.startsWith('mail.'))
214
+ return d;
215
+ // webmail.example.com / webmail2.example.com → mail.example.com
216
+ const stripped = stripWebmailHostnamePrefix(d);
217
+ if (stripped)
218
+ return `mail.${stripped}`;
219
+ return `mail.${d}`;
220
+ }
221
+ /** webmail.example.com / webmail2.foo.bar → example.com / foo.bar */
222
+ export function stripWebmailHostnamePrefix(host) {
223
+ const d = host.trim().toLowerCase();
224
+ const m = d.match(/^webmail\d*\.(.+)$/i);
225
+ return m?.[1] || undefined;
226
+ }
227
+ /** Resolve apex mail domain + IMAP/SMTP for a webmail install. */
228
+ export function resolveWebmailMailEndpoints(input) {
229
+ const web = (input.webmailDomain || '').trim().toLowerCase();
230
+ const mailDomain = (input.mailDomain || '').trim().toLowerCase() ||
231
+ stripWebmailHostnamePrefix(web) ||
232
+ undefined;
233
+ const imapHost = (input.imapHost || '').trim().toLowerCase() ||
234
+ defaultImapHostForWebmail(mailDomain || web || 'localhost');
235
+ const smtpHost = (input.smtpHost || '').trim().toLowerCase() || imapHost;
236
+ return { mailDomain, imapHost, smtpHost };
237
+ }
238
+ /**
239
+ * Download Roundcube or SnappyMail into project document root and write managed config.
240
+ */
241
+ export async function installWebmailIntoProject(input) {
242
+ const notes = [];
243
+ const written = [];
244
+ // Package root (Roundcube tree). HTTP may use public_html underneath.
245
+ const packageRoot = input.docRoot ?? join(input.homeDir, 'app', 'public');
246
+ mkdirSync(packageRoot, { recursive: true });
247
+ const download = input.download !== false;
248
+ const tool = normalizeWebmailTool(input.tool);
249
+ const endpoints = resolveWebmailMailEndpoints({
250
+ webmailDomain: input.domain,
251
+ mailDomain: input.mailDomain,
252
+ imapHost: input.imapHost,
253
+ smtpHost: input.smtpHost,
254
+ });
255
+ const imapHost = endpoints.imapHost;
256
+ const smtpHost = endpoints.smtpHost;
257
+ const mailDomain = endpoints.mailDomain;
258
+ if (tool === 'roundcube') {
259
+ return installRoundcube({
260
+ host: input.host,
261
+ homeDir: input.homeDir,
262
+ packageRoot,
263
+ download,
264
+ imapHost,
265
+ smtpHost,
266
+ forceHttps: input.forceHttps === true,
267
+ installSsoPlugin: input.installSsoPlugin !== false,
268
+ panelBaseUrl: input.panelBaseUrl ?? 'http://127.0.0.1:8787',
269
+ notes,
270
+ written,
271
+ });
272
+ }
273
+ return installSnappyMail({
274
+ host: input.host,
275
+ homeDir: input.homeDir,
276
+ docRoot: packageRoot,
277
+ download,
278
+ imapHost,
279
+ smtpHost,
280
+ mailDomain,
281
+ notes,
282
+ written,
283
+ });
284
+ }
285
+ async function installRoundcube(input) {
286
+ const { packageRoot, notes, written, homeDir } = input;
287
+ const configPath = join(packageRoot, 'config', 'config.inc.php');
288
+ const finishOk = (webRoot) => {
289
+ const rel = webRoot.startsWith(homeDir + '/')
290
+ ? webRoot.slice(homeDir.length + 1)
291
+ : webRoot.startsWith(homeDir)
292
+ ? webRoot.slice(homeDir.length).replace(/^\//, '')
293
+ : 'app/public/public_html';
294
+ notes.push(webRoot !== packageRoot
295
+ ? tl('notes.webmail.roundcubePublicHtmlDocRoot', { path: rel })
296
+ : tl('notes.webmail.roundcubeReuse', { path: webRoot }));
297
+ return {
298
+ ok: true,
299
+ notes,
300
+ written,
301
+ entryFile: 'index.php',
302
+ webDocRoot: webRoot,
303
+ webDocRootRel: rel.replace(/\\/g, '/'),
304
+ };
305
+ };
306
+ if (!input.download) {
307
+ const webRoot = resolveRoundcubeWebRoot(packageRoot);
308
+ if (!isRoundcubeDocRoot(webRoot)) {
309
+ return {
310
+ ok: false,
311
+ notes: [tl('notes.webmail.notInstalled')],
312
+ written,
313
+ entryFile: 'index.php',
314
+ };
315
+ }
316
+ const rt = ensureRoundcubeRuntime(webRoot, input.imapHost, input.smtpHost, {
317
+ forceHttps: input.forceHttps,
318
+ installSsoPlugin: input.installSsoPlugin,
319
+ panelBaseUrl: input.panelBaseUrl,
320
+ });
321
+ written.push(...rt.written);
322
+ notes.push(...rt.notes);
323
+ return finishOk(webRoot);
324
+ }
325
+ if (!input.host.executeEnabled()) {
326
+ return {
327
+ ok: false,
328
+ notes: [tl('notes.webmail.needExecute')],
329
+ written,
330
+ entryFile: 'index.php',
331
+ };
332
+ }
333
+ // Extract OUTSIDE packageRoot. Never use packageRoot/.rc-extract: with
334
+ // wipe of packageRoot/* the extract tree must live under home/tmp.
335
+ const tmpDir = join(input.homeDir, 'tmp');
336
+ const tmp = join(tmpDir, 'roundcube.tgz');
337
+ const extract = join(tmpDir, 'rc-extract');
338
+ mkdirSync(tmpDir, { recursive: true });
339
+ const script = [
340
+ `set -euo pipefail`,
341
+ `curl -fsSL ${JSON.stringify(ROUNDCUBE_URL)} -o ${JSON.stringify(tmp)}`,
342
+ `rm -rf ${JSON.stringify(extract)}`,
343
+ `mkdir -p ${JSON.stringify(extract)} ${JSON.stringify(packageRoot)}`,
344
+ `tar -xzf ${JSON.stringify(tmp)} -C ${JSON.stringify(extract)}`,
345
+ `INNER=$(find ${JSON.stringify(extract)} -maxdepth 1 -type d -name 'roundcubemail-*' | head -1)`,
346
+ `if [ -z "$INNER" ] || [ ! -d "$INNER" ]; then echo "Roundcube extract failed"; ls -la ${JSON.stringify(extract)}; exit 1; fi`,
347
+ `if [ ! -f "$INNER/index.php" ] && [ ! -f "$INNER/public_html/index.php" ]; then echo "Roundcube tree missing index.php"; ls -la "$INNER"; exit 1; fi`,
348
+ // Keep existing config if reinstall
349
+ `CFG_BAK=""`,
350
+ `if [ -f ${JSON.stringify(configPath)} ]; then CFG_BAK=$(mktemp); cp ${JSON.stringify(configPath)} "$CFG_BAK"; fi`,
351
+ // Wipe only contents of packageRoot (extract lives under home/tmp, not here)
352
+ `find ${JSON.stringify(packageRoot)} -mindepth 1 -maxdepth 1 -exec rm -rf {} +`,
353
+ `cp -a "$INNER"/. ${JSON.stringify(packageRoot)}/`,
354
+ `rm -rf ${JSON.stringify(extract)} ${JSON.stringify(tmp)}`,
355
+ `if [ -n "\${CFG_BAK:-}" ]; then mkdir -p ${JSON.stringify(join(packageRoot, 'config'))}; cp "$CFG_BAK" ${JSON.stringify(configPath)}; rm -f "$CFG_BAK"; fi`,
356
+ `mkdir -p ${JSON.stringify(join(packageRoot, 'temp'))} ${JSON.stringify(join(packageRoot, 'logs'))} ${JSON.stringify(join(packageRoot, 'config'))}`,
357
+ `chmod 777 ${JSON.stringify(join(packageRoot, 'temp'))} ${JSON.stringify(join(packageRoot, 'logs'))} 2>/dev/null || true`,
358
+ ].join('\n');
359
+ const r = await input.host.runCommand(['bash', '-c', script], { timeoutMs: 300_000 });
360
+ const webRoot = resolveRoundcubeWebRoot(packageRoot);
361
+ if (r.exitCode !== 0 || !isRoundcubeDocRoot(webRoot)) {
362
+ notes.push(tl('notes.webmail.extractFailed', {
363
+ tool: 'Roundcube',
364
+ detail: (r.stderr || r.stdout || '').slice(0, 300),
365
+ }));
366
+ if (existsSync(join(packageRoot, 'index.php')) && isWebmailPublicHtmlStub(packageRoot)) {
367
+ notes.push(tl('notes.webmail.publicHtmlStub'));
368
+ }
369
+ if (existsSync(join(packageRoot, 'index.php')) && !isRoundcubeDocRoot(webRoot)) {
370
+ notes.push(tl('notes.webmail.notRoundcubeTree'));
371
+ }
372
+ return { ok: false, notes, written, entryFile: 'index.php' };
373
+ }
374
+ const rt = ensureRoundcubeRuntime(webRoot, input.imapHost, input.smtpHost, {
375
+ forceHttps: input.forceHttps,
376
+ installSsoPlugin: input.installSsoPlugin,
377
+ panelBaseUrl: input.panelBaseUrl,
378
+ });
379
+ written.push(packageRoot, webRoot, ...rt.written);
380
+ notes.push(tl('notes.webmail.roundcubeInstalled', { path: webRoot, version: ROUNDCUBE_VERSION }), ...rt.notes);
381
+ // overwrite finishOk first note path — installed msg already pushed
382
+ const rel = webRoot.startsWith(homeDir + '/')
383
+ ? webRoot.slice(homeDir.length + 1)
384
+ : webRoot.startsWith(homeDir)
385
+ ? webRoot.slice(homeDir.length).replace(/^\//, '')
386
+ : 'app/public/public_html';
387
+ if (webRoot !== packageRoot) {
388
+ notes.push(tl('notes.webmail.roundcubePublicHtmlDocRoot', { path: rel.replace(/\\/g, '/') }));
389
+ }
390
+ return {
391
+ ok: true,
392
+ notes,
393
+ written,
394
+ entryFile: 'index.php',
395
+ webDocRoot: webRoot,
396
+ webDocRootRel: rel.replace(/\\/g, '/'),
397
+ };
398
+ }
399
+ async function installSnappyMail(input) {
400
+ const { docRoot, notes, written, homeDir } = input;
401
+ const marker = join(docRoot, 'index.php');
402
+ const finishSnappy = (adminPassword) => {
403
+ // Never serve a nested public_html leftover (php-hello / Roundcube) for SnappyMail
404
+ try {
405
+ const ph = join(docRoot, 'public_html');
406
+ if (existsSync(ph)) {
407
+ const phIdx = join(ph, 'index.php');
408
+ const body = existsSync(phIdx) ? readFileSync(phIdx, 'utf8') : '';
409
+ const looksLikeHello = /YSK PHP OK/i.test(body);
410
+ const looksLikeRc = existsSync(join(ph, '..', 'program')) ||
411
+ existsSync(join(docRoot, 'program'));
412
+ // Snappy app root is docRoot; nested public_html is only OK if it IS the snappy app
413
+ if (looksLikeHello || (!isSnappyMailDocRoot(ph) && looksLikeRc === false)) {
414
+ if (looksLikeHello || !isSnappyMailDocRoot(ph)) {
415
+ rmSync(ph, { recursive: true, force: true });
416
+ notes.push(tl('notes.webmail.removedBogusPublicHtml'));
417
+ }
418
+ }
419
+ }
420
+ }
421
+ catch {
422
+ /* best-effort */
423
+ }
424
+ const rel = docRoot.startsWith(homeDir + '/')
425
+ ? docRoot.slice(homeDir.length + 1)
426
+ : docRoot.startsWith(homeDir)
427
+ ? docRoot.slice(homeDir.length).replace(/^\//, '')
428
+ : 'app/public';
429
+ notes.push(tl('notes.webmail.snappyDocRoot', { path: rel.replace(/\\/g, '/') }));
430
+ return {
431
+ ok: true,
432
+ notes,
433
+ written,
434
+ entryFile: 'index.php',
435
+ snappyAdminPassword: adminPassword,
436
+ // SnappyMail MUST be served from package root (app/public), never public_html
437
+ webDocRoot: docRoot,
438
+ webDocRootRel: rel.replace(/\\/g, '/'),
439
+ };
440
+ };
441
+ if (!input.download) {
442
+ if (!existsSync(marker)) {
443
+ return {
444
+ ok: false,
445
+ notes: [tl('notes.webmail.notInstalled')],
446
+ written,
447
+ entryFile: 'index.php',
448
+ };
449
+ }
450
+ notes.push(tl('notes.webmail.snappyReuse', { path: docRoot }));
451
+ // Always refresh domain JSON / shortLogin=false even on reuse (login fix must stick)
452
+ if (isSnappyMailDocRoot(docRoot) && !isWebmailPublicHtmlStub(docRoot)) {
453
+ const admin = ensureSnappyMailAdminBootstrap(docRoot, input.imapHost, input.smtpHost, undefined, {
454
+ mailDomain: input.mailDomain,
455
+ });
456
+ written.push(...admin.written);
457
+ notes.push(...admin.notes.filter((n) => !/Password:|admin password/i.test(n)).slice(0, 4));
458
+ return finishSnappy(admin.adminPassword);
459
+ }
460
+ return finishSnappy();
461
+ }
462
+ if (!input.host.executeEnabled()) {
463
+ return {
464
+ ok: false,
465
+ notes: [tl('notes.webmail.needExecute')],
466
+ written,
467
+ entryFile: 'index.php',
468
+ };
469
+ }
470
+ // Extract outside docRoot (same class of bug as Roundcube: wipe must not delete INNER)
471
+ const tmpDir = join(input.homeDir, 'tmp');
472
+ const tmp = join(tmpDir, 'snappymail.tgz');
473
+ const extract = join(tmpDir, 'sm-extract');
474
+ mkdirSync(tmpDir, { recursive: true });
475
+ // Official release may be: flat index.php, snappymail-X/, or public_html/.
476
+ // Prefer public_html when present — root index.php is often only a stub that says
477
+ // "point HTTP server to /public_html" (what operators saw on webmail.demo.ysk.hk).
478
+ const script = [
479
+ `set -euo pipefail`,
480
+ `curl -fsSL ${JSON.stringify(SNAPPYMAIL_URL)} -o ${JSON.stringify(tmp)}`,
481
+ `rm -rf ${JSON.stringify(extract)}`,
482
+ `mkdir -p ${JSON.stringify(extract)} ${JSON.stringify(docRoot)}`,
483
+ // try tar.gz; if Zip archive (not "gzip" — that substring matched 'zip' and broke extract)
484
+ `if file ${JSON.stringify(tmp)} | grep -qiE 'Zip archive|zip archive data'; then unzip -q ${JSON.stringify(tmp)} -d ${JSON.stringify(extract)}; else tar -xzf ${JSON.stringify(tmp)} -C ${JSON.stringify(extract)}; fi`,
485
+ `INNER=""`,
486
+ // 1) nested public_html (preferred)
487
+ `if [ -f ${JSON.stringify(join(extract, 'public_html', 'index.php'))} ]; then INNER=${JSON.stringify(join(extract, 'public_html'))}; fi`,
488
+ // 2) public_html one level down (snappymail-X.Y/public_html)
489
+ `if [ -z "$INNER" ]; then INNER=$(find ${JSON.stringify(extract)} -maxdepth 3 -type d -name public_html 2>/dev/null | while read -r d; do [ -f "$d/index.php" ] && echo "$d" && break; done | head -1); fi`,
490
+ // 3) flat extract with real app (snappymail/ or _include.php next to index)
491
+ `if [ -z "$INNER" ] && [ -f ${JSON.stringify(join(extract, 'index.php'))} ]; then`,
492
+ ` if [ -d ${JSON.stringify(join(extract, 'snappymail'))} ] || [ -f ${JSON.stringify(join(extract, '_include.php'))} ]; then INNER=${JSON.stringify(extract)}; fi`,
493
+ `fi`,
494
+ // 4) snappymail-* top folder
495
+ `if [ -z "$INNER" ]; then`,
496
+ ` TOP=$(find ${JSON.stringify(extract)} -maxdepth 1 -type d -name 'snappymail-*' | head -1)`,
497
+ ` if [ -n "$TOP" ] && [ -f "$TOP/public_html/index.php" ]; then INNER="$TOP/public_html";`,
498
+ ` elif [ -n "$TOP" ] && [ -f "$TOP/index.php" ]; then INNER="$TOP"; fi`,
499
+ `fi`,
500
+ // 5) last resort: any index.php that is NOT the public_html stub
501
+ `if [ -z "$INNER" ]; then`,
502
+ ` while IFS= read -r f; do`,
503
+ ` d=$(dirname "$f")`,
504
+ ` if grep -qi 'configure your HTTP server to point to' "$f" 2>/dev/null; then continue; fi`,
505
+ ` INNER="$d"; break`,
506
+ ` done < <(find ${JSON.stringify(extract)} -maxdepth 4 -type f -name index.php 2>/dev/null)`,
507
+ `fi`,
508
+ `if [ -z "$INNER" ] || [ ! -f "$INNER/index.php" ]; then echo "SnappyMail extract failed"; ls -laR ${JSON.stringify(extract)} | head -80; exit 1; fi`,
509
+ `if grep -qi 'configure your HTTP server to point to' "$INNER/index.php" 2>/dev/null; then echo "SnappyMail INNER is public_html stub, not app tree"; exit 1; fi`,
510
+ `find ${JSON.stringify(docRoot)} -mindepth 1 -maxdepth 1 -exec rm -rf {} +`,
511
+ `cp -a "$INNER"/. ${JSON.stringify(docRoot)}/`,
512
+ `rm -rf ${JSON.stringify(extract)} ${JSON.stringify(tmp)}`,
513
+ `mkdir -p ${JSON.stringify(join(docRoot, 'data'))}`,
514
+ `chmod 777 ${JSON.stringify(join(docRoot, 'data'))} 2>/dev/null || true`,
515
+ ].join('\n');
516
+ const r = await input.host.runCommand(['bash', '-c', script], { timeoutMs: 300_000 });
517
+ if (r.exitCode !== 0 ||
518
+ !existsSync(marker) ||
519
+ !isSnappyMailDocRoot(docRoot) ||
520
+ isWebmailPublicHtmlStub(docRoot)) {
521
+ notes.push(tl('notes.webmail.extractFailed', {
522
+ tool: 'SnappyMail',
523
+ detail: (r.stderr || r.stdout || '').slice(0, 300),
524
+ }));
525
+ if (isWebmailPublicHtmlStub(docRoot)) {
526
+ notes.push(tl('notes.webmail.publicHtmlStub'));
527
+ }
528
+ return { ok: false, notes, written, entryFile: 'index.php' };
529
+ }
530
+ written.push(docRoot);
531
+ const admin = ensureSnappyMailAdminBootstrap(docRoot, input.imapHost, input.smtpHost, undefined, {
532
+ mailDomain: input.mailDomain,
533
+ });
534
+ written.push(...admin.written);
535
+ notes.push(tl('notes.webmail.snappyInstalled', { path: docRoot, version: SNAPPYMAIL_VERSION }), ...admin.notes, tl('notes.webmail.imapSmtpHint', { imap: input.imapHost, smtp: input.smtpHost }));
536
+ return finishSnappy(admin.adminPassword);
537
+ }
538
+ /**
539
+ * Seed SnappyMail data dir + admin password (shown once).
540
+ * Domain defaults point at local IMAP/SMTP; admin uses /?admin.
541
+ */
542
+ export function ensureSnappyMailAdminBootstrap(docRoot, imapHost, smtpHost, adminPassword, opts) {
543
+ const written = [];
544
+ const notes = [];
545
+ const pass = adminPassword || randomAdminPassword();
546
+ const dataRoot = join(docRoot, 'data', '_data_', '_default_');
547
+ const cfgDir = join(dataRoot, 'configs');
548
+ const domDir = join(dataRoot, 'domains');
549
+ mkdirSync(cfgDir, { recursive: true });
550
+ mkdirSync(domDir, { recursive: true });
551
+ try {
552
+ chmodSync(join(docRoot, 'data'), 0o777);
553
+ }
554
+ catch {
555
+ /* best-effort */
556
+ }
557
+ // bcrypt-compatible hash for PHP password_verify (SnappyMail admin)
558
+ // Use PHP-style $2y$ via openssl/passlib is hard without PHP; write plain marker + PHP bootstrap file instead.
559
+ const adminPhp = join(docRoot, 'ysk-snappy-admin.php');
560
+ writeFileSync(adminPhp, `<?php
561
+ /**
562
+ * YSK one-shot: set SnappyMail admin password then self-delete.
563
+ * Open once as panel operator, then remove.
564
+ */
565
+ $pass = ${JSON.stringify(pass)};
566
+ $cfgDir = __DIR__ . '/data/_data_/_default_/configs';
567
+ if (!is_dir($cfgDir)) { @mkdir($cfgDir, 0777, true); }
568
+ $hash = password_hash($pass, PASSWORD_DEFAULT);
569
+ $ini = "[webmail]\\n; YSK-managed\\n[security]\\nadmin_login = \\"admin\\"\\nadmin_password = \\"{$hash}\\"\\nallow_admin_panel = On\\n";
570
+ file_put_contents($cfgDir . '/application.ini', $ini);
571
+ @unlink(__FILE__);
572
+ header('Content-Type: text/plain; charset=utf-8');
573
+ echo "SnappyMail admin password applied. Login /?admin as admin. This helper was removed.\\n";
574
+ `, 'utf8');
575
+ written.push(adminPhp);
576
+ // SnappyMail domain JSON — MUST use shortLogin:false so login is full email
577
+ // (Dovecot passwd-file keys are user@domain). Prefer apex mail domain file name.
578
+ const mailDomain = (opts?.mailDomain || '').trim().toLowerCase();
579
+ const domainPayload = {
580
+ IMAP: {
581
+ host: imapHost,
582
+ port: 993,
583
+ type: 1,
584
+ timeout: 300,
585
+ shortLogin: false,
586
+ lowerLogin: true,
587
+ sasl: ['PLAIN', 'LOGIN'],
588
+ ssl: {
589
+ verify_peer: false,
590
+ verify_peer_name: false,
591
+ allow_self_signed: true,
592
+ SNI_enabled: true,
593
+ disable_compression: true,
594
+ security_level: 1,
595
+ },
596
+ disabled_capabilities: ['METADATA', 'OBJECTID', 'PREVIEW', 'STATUS=SIZE'],
597
+ use_expunge_all_on_delete: false,
598
+ fast_simple_search: true,
599
+ force_select: false,
600
+ message_all_headers: false,
601
+ message_list_limit: 10000,
602
+ search_filter: '',
603
+ },
604
+ SMTP: {
605
+ host: smtpHost,
606
+ port: 587,
607
+ type: 2,
608
+ timeout: 60,
609
+ shortLogin: false,
610
+ lowerLogin: true,
611
+ sasl: ['PLAIN', 'LOGIN'],
612
+ ssl: {
613
+ verify_peer: false,
614
+ verify_peer_name: false,
615
+ allow_self_signed: true,
616
+ SNI_enabled: true,
617
+ disable_compression: true,
618
+ security_level: 1,
619
+ },
620
+ useAuth: true,
621
+ setSender: false,
622
+ usePhpMail: false,
623
+ },
624
+ Sieve: {
625
+ host: imapHost,
626
+ port: 4190,
627
+ type: 0,
628
+ timeout: 10,
629
+ shortLogin: false,
630
+ lowerLogin: true,
631
+ sasl: ['PLAIN', 'LOGIN'],
632
+ enabled: false,
633
+ },
634
+ whiteList: '',
635
+ };
636
+ const domainNames = new Set();
637
+ if (mailDomain)
638
+ domainNames.add(mailDomain);
639
+ domainNames.add(imapHost.replace(/[^a-z0-9.-]/gi, '_') || 'mail');
640
+ domainNames.add('default');
641
+ // Prefer loopback for same-host PHP → Dovecot (avoids external TLS/SNI issues)
642
+ const localPayload = {
643
+ ...domainPayload,
644
+ IMAP: { ...domainPayload.IMAP, host: '127.0.0.1' },
645
+ SMTP: { ...domainPayload.SMTP, host: '127.0.0.1' },
646
+ Sieve: { ...domainPayload.Sieve, host: '127.0.0.1' },
647
+ };
648
+ for (const name of domainNames) {
649
+ const useLocal = name === 'default' || name === mailDomain;
650
+ const body = useLocal ? localPayload : domainPayload;
651
+ const path = join(domDir, `${name}.json`);
652
+ writeFileSync(path, JSON.stringify(body, null, 4) + '\n', 'utf8');
653
+ written.push(path);
654
+ }
655
+ // Plaintext once for operator (not stored on disk after helper runs)
656
+ const once = join(docRoot, '..', 'SNAPPYMAIL_ADMIN_ONCE.txt');
657
+ writeFileSync(once, [
658
+ 'YSK SnappyMail admin (show once — delete after use)',
659
+ `Login path: /?admin`,
660
+ `User: admin`,
661
+ `Password: ${pass}`,
662
+ `Or open once: /ysk-snappy-admin.php then use the password above`,
663
+ `IMAP: ${imapHost}:993 SMTP: ${smtpHost}:587`,
664
+ 'Mailbox login: full email (user@domain), not short local-part',
665
+ '',
666
+ ].join('\n'), 'utf8');
667
+ written.push(once);
668
+ notes.push(tl('notes.webmail.snappyAdminOnce', { user: 'admin' }));
669
+ notes.push(tl('notes.webmail.snappyAdminPassword', { password: pass }));
670
+ notes.push(tl('notes.webmail.snappyFullEmailLogin'));
671
+ return { written, notes, adminPassword: pass };
672
+ }
673
+ function randomAdminPassword() {
674
+ const chars = 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789';
675
+ let s = '';
676
+ for (let i = 0; i < 16; i++)
677
+ s += chars[Math.floor(Math.random() * chars.length)];
678
+ return s;
679
+ }
680
+ /** Write ysk_sso plugin into Roundcube plugins/ and enable in config. */
681
+ export function installYskSsoIntoRoundcube(docRoot, panelBaseUrl) {
682
+ const written = [];
683
+ const notes = [];
684
+ const pluginDir = join(docRoot, 'plugins', 'ysk_sso');
685
+ mkdirSync(pluginDir, { recursive: true });
686
+ const base = panelBaseUrl.replace(/\/$/, '');
687
+ const php = `<?php
688
+ /**
689
+ * YSK Webmail SSO — Roundcube auto-login (installed into project plugins/)
690
+ */
691
+ class ysk_sso extends rcube_plugin {
692
+ public $task = 'login|mail';
693
+ function init() {
694
+ $this->add_hook('startup', array($this, 'startup'));
695
+ }
696
+ function startup($args) {
697
+ $token = isset($_GET['_ysk_sso']) ? $_GET['_ysk_sso'] : null;
698
+ if (!$token) return $args;
699
+ $url = ${JSON.stringify(base + '/api/v1/email/webmail/sso/consume')};
700
+ $ctx = stream_context_create(array(
701
+ 'http' => array(
702
+ 'method' => 'POST',
703
+ 'header' => "Content-Type: application/json\\r\\n",
704
+ 'content' => json_encode(array('token' => $token)),
705
+ 'timeout' => 8,
706
+ 'ignore_errors' => true,
707
+ ),
708
+ ));
709
+ $raw = @file_get_contents($url, false, $ctx);
710
+ $data = $raw ? json_decode($raw, true) : null;
711
+ if (empty($data['ok']) || empty($data['email'])) {
712
+ error_log('YSK SSO consume failed');
713
+ return $args;
714
+ }
715
+ $email = $data['email'];
716
+ $pass = isset($data['password']) ? $data['password'] : null;
717
+ $rcmail = rcube::get_instance();
718
+ if ($pass && method_exists($rcmail, 'login')) {
719
+ $auth = $rcmail->login($email, $pass, $rcmail->config->get('default_host'), true);
720
+ if ($auth) {
721
+ $rcmail->session->set('user_id', $rcmail->get_user_id());
722
+ $rcmail->session->set('password', $rcmail->encrypt($pass));
723
+ header('Location: ./?_task=mail');
724
+ exit;
725
+ }
726
+ }
727
+ return $args;
728
+ }
729
+ }
730
+ `;
731
+ const path = join(pluginDir, 'ysk_sso.php');
732
+ writeFileSync(path, php, 'utf8');
733
+ written.push(path);
734
+ notes.push(tl('notes.webmail.ssoPluginInstalled', { path: pluginDir }));
735
+ return { written, notes, pluginDir };
736
+ }
737
+ /** Write/refresh Roundcube config.inc.php + writable temp/logs. */
738
+ export function ensureRoundcubeRuntime(docRoot, imapHost, smtpHost, opts) {
739
+ const written = [];
740
+ const notes = [];
741
+ // Config/plugins/temp live on package root; docRoot may be public_html/
742
+ const packageRoot = resolveRoundcubePackageRoot(docRoot);
743
+ const configDir = join(packageRoot, 'config');
744
+ const tempDir = join(packageRoot, 'temp');
745
+ const logsDir = join(packageRoot, 'logs');
746
+ const dbDir = join(packageRoot, 'db');
747
+ mkdirSync(configDir, { recursive: true });
748
+ mkdirSync(tempDir, { recursive: true });
749
+ mkdirSync(logsDir, { recursive: true });
750
+ mkdirSync(dbDir, { recursive: true });
751
+ for (const d of [tempDir, logsDir, dbDir]) {
752
+ try {
753
+ chmodSync(d, 0o777);
754
+ }
755
+ catch {
756
+ /* best-effort */
757
+ }
758
+ }
759
+ const plugins = ['archive', 'zipdownload', 'managesieve'];
760
+ if (opts?.installSsoPlugin !== false) {
761
+ const sso = installYskSsoIntoRoundcube(packageRoot, opts?.panelBaseUrl ?? 'http://127.0.0.1:8787');
762
+ written.push(...sso.written);
763
+ notes.push(...sso.notes);
764
+ plugins.push('ysk_sso');
765
+ }
766
+ const configPath = join(configDir, 'config.inc.php');
767
+ // Preserve existing des_key if reinstall
768
+ let desKey = randomDesKey();
769
+ if (existsSync(configPath)) {
770
+ try {
771
+ const prev = readFileSync(configPath, 'utf8');
772
+ const m = prev.match(/\$config\['des_key'\]\s*=\s*'([^']+)'/);
773
+ if (m?.[1] && m[1].length >= 16)
774
+ desKey = m[1];
775
+ }
776
+ catch {
777
+ /* regenerate */
778
+ }
779
+ }
780
+ const forceHttps = opts?.forceHttps === true;
781
+ writeFileSync(configPath, buildRoundcubeConfigInc({
782
+ desKey,
783
+ imapHost,
784
+ smtpHost,
785
+ dbPath: join(dbDir, 'roundcube.db'),
786
+ forceHttps,
787
+ plugins,
788
+ }), 'utf8');
789
+ written.push(configPath, tempDir, logsDir, dbDir);
790
+ // Ensure SQLite schema exists (official sqlite.initial.sql uses unprefixed tables)
791
+ try {
792
+ const dbPath = join(dbDir, 'roundcube.db');
793
+ const schema = join(packageRoot, 'SQL', 'sqlite.initial.sql');
794
+ if (existsSync(schema)) {
795
+ let needInit = !existsSync(dbPath);
796
+ if (!needInit) {
797
+ try {
798
+ const tables = execFileSync('sqlite3', [dbPath, '.tables'], {
799
+ encoding: 'utf8',
800
+ timeout: 5000,
801
+ });
802
+ needInit = !/\bsession\b/.test(tables);
803
+ }
804
+ catch {
805
+ needInit = true;
806
+ }
807
+ }
808
+ if (needInit) {
809
+ execFileSync('sqlite3', [dbPath], {
810
+ input: readFileSync(schema),
811
+ timeout: 15_000,
812
+ });
813
+ try {
814
+ chmodSync(dbPath, 0o666);
815
+ }
816
+ catch {
817
+ /* */
818
+ }
819
+ written.push(dbPath);
820
+ notes.push(tl('notes.webmail.sqliteSchemaReady'));
821
+ }
822
+ }
823
+ }
824
+ catch (e) {
825
+ const msg = e instanceof Error ? e.message : String(e);
826
+ notes.push(tl('notes.webmail.sqliteSchemaFailed', { detail: msg.slice(0, 160) }));
827
+ }
828
+ notes.push(tl('notes.webmail.roundcubeConfigWritten'));
829
+ notes.push(tl('notes.webmail.imapSmtpHint', { imap: imapHost, smtp: smtpHost }));
830
+ if (forceHttps) {
831
+ notes.push(tl('notes.webmail.forceHttpsOn'));
832
+ }
833
+ else {
834
+ notes.push(tl('notes.webmail.forceHttpsOff'));
835
+ }
836
+ return { written, notes };
837
+ }
838
+ export function buildRoundcubeConfigInc(input) {
839
+ const des = String(input.desKey || randomDesKey()).replace(/'/g, '');
840
+ const imap = String(input.imapHost).replace(/'/g, '');
841
+ const smtp = String(input.smtpHost).replace(/'/g, '');
842
+ const db = String(input.dbPath).replace(/'/g, "\\'");
843
+ const plugins = input.plugins?.length
844
+ ? input.plugins
845
+ : ['archive', 'zipdownload', 'managesieve'];
846
+ const pluginPhp = plugins.map((p) => `'${String(p).replace(/'/g, '')}'`).join(', ');
847
+ // SQLite absolute path: sqlite:////absolute/path
848
+ const dsn = `sqlite:///${db}?mode=0646`;
849
+ const forceHttps = input.forceHttps === true;
850
+ return `<?php
851
+ /**
852
+ * YSK-managed Roundcube config — do not use the web installer.
853
+ * IMAP/SMTP point at this host's mail stack (override hosts via panel re-apply).
854
+ */
855
+ $config = [];
856
+ $config['db_dsnw'] = ${JSON.stringify(dsn)};
857
+ $config['db_prefix'] = '';
858
+ $config['default_host'] = 'ssl://${imap}';
859
+ $config['default_port'] = 993;
860
+ $config['imap_conn_options'] = [
861
+ 'ssl' => [
862
+ 'verify_peer' => false,
863
+ 'verify_peer_name' => false,
864
+ ],
865
+ ];
866
+ $config['smtp_server'] = 'tls://${smtp}';
867
+ $config['smtp_port'] = 587;
868
+ $config['smtp_user'] = '%u';
869
+ $config['smtp_pass'] = '%p';
870
+ $config['smtp_conn_options'] = [
871
+ 'ssl' => [
872
+ 'verify_peer' => false,
873
+ 'verify_peer_name' => false,
874
+ ],
875
+ ];
876
+ $config['support_url'] = '';
877
+ $config['product_name'] = 'YSK Webmail';
878
+ $config['des_key'] = '${des}';
879
+ $config['plugins'] = [${pluginPhp}];
880
+ $config['skin'] = 'elastic';
881
+ $config['enable_installer'] = false;
882
+ $config['mime_types'] = null;
883
+ $config['temp_dir'] = __DIR__ . '/../temp';
884
+ $config['log_dir'] = __DIR__ . '/../logs';
885
+ $config['session_lifetime'] = 30;
886
+ $config['ip_check'] = false;
887
+ // Behind Nginx TLS: force_https would redirect-loop (PHP sees HTTP on php -S / FPM).
888
+ // Nginx enforces HTTPS; use_https marks the session cookie Secure.
889
+ $config['force_https'] = false;
890
+ $config['use_https'] = ${forceHttps ? 'true' : 'false'};
891
+ $config['proxy_whitelist'] = ['127.0.0.1', '::1'];
892
+ `;
893
+ }
894
+ function randomDesKey() {
895
+ const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
896
+ let s = '';
897
+ for (let i = 0; i < 24; i++)
898
+ s += chars[Math.floor(Math.random() * chars.length)];
899
+ return s;
900
+ }
901
+ /**
902
+ * Create PHP project + install webmail + goLive (deploy + nginx via project lifecycle).
903
+ * Shared instance for all mail domains — one project / one hostname.
904
+ */
905
+ export async function createWebmailProject(input) {
906
+ const notes = [];
907
+ const written = [];
908
+ const name = input.name.trim() || GLOBAL_WEBMAIL_PROJECT_NAME;
909
+ const domain = input.domain.trim().toLowerCase();
910
+ const tool = normalizeWebmailTool(input.tool);
911
+ const wantDownload = input.download !== false;
912
+ // Shared webmail: existing project → reinstall by default (no orphan hellos)
913
+ const reinstall = input.reinstall !== false;
914
+ if (!name) {
915
+ throw new YskError(ErrorCodes.VALIDATION, tl('notes.needProjectName'), { httpStatus: 400 });
916
+ }
917
+ if (!domain) {
918
+ throw new YskError(ErrorCodes.VALIDATION, tl('notes.webmail.domainRequired'), {
919
+ httpStatus: 400,
920
+ });
921
+ }
922
+ // Honest gate: never create a half project when download needs EXECUTE
923
+ if (wantDownload && !input.host.executeEnabled()) {
924
+ const msg = tl('notes.webmail.needExecute');
925
+ return {
926
+ ok: false,
927
+ tool,
928
+ notes: [msg, tl('notes.webmail.needExecuteBeforeCreate')],
929
+ written,
930
+ blocked: true,
931
+ requiresExecute: true,
932
+ blockMessage: msg,
933
+ apply_status: 'blocked',
934
+ };
935
+ }
936
+ const byName = input.projects.list().find((p) => p.name.trim().toLowerCase() === name.toLowerCase());
937
+ const byDomain = input.projects.list().find((p) => (p.domain ?? '').trim().toLowerCase() === domain);
938
+ const existing = byName ?? byDomain;
939
+ if (existing && reinstall) {
940
+ notes.push(tl('notes.webmail.reinstalling', { id: existing.id, name: existing.name }));
941
+ return reinstallWebmailProject({
942
+ projects: input.projects,
943
+ projectOps: input.projectOps,
944
+ host: input.host,
945
+ actor: input.actor,
946
+ projectId: existing.id,
947
+ tool,
948
+ download: wantDownload,
949
+ imapHost: input.imapHost,
950
+ smtpHost: input.smtpHost,
951
+ mailDomain: input.mailDomain,
952
+ forceHttps: input.forceHttps,
953
+ installSsoPlugin: input.installSsoPlugin,
954
+ panelBaseUrl: input.panelBaseUrl,
955
+ goLive: true,
956
+ });
957
+ }
958
+ if (existing && !reinstall) {
959
+ return {
960
+ ok: false,
961
+ tool,
962
+ notes: [
963
+ tl('notes.ops.projectNameExists', { name: existing.name }),
964
+ `existingProjectId=${existing.id}`,
965
+ tl('notes.webmail.reinstallHint'),
966
+ ],
967
+ written,
968
+ projectId: existing.id,
969
+ apply_status: 'failed',
970
+ };
971
+ }
972
+ let created;
973
+ try {
974
+ created = await input.projects.create({
975
+ name,
976
+ domain,
977
+ runtime: 'php',
978
+ // Empty-ish scaffold; install replaces docRoot immediately after
979
+ templateId: 'php-hello',
980
+ forceTemplate: true,
981
+ actor: input.actor,
982
+ actorUserId: input.actorUserId,
983
+ });
984
+ }
985
+ catch (e) {
986
+ if (e instanceof YskError)
987
+ throw e;
988
+ const msg = e instanceof Error ? e.message : String(e);
989
+ return { ok: false, tool, notes: [msg], written, apply_status: 'failed' };
990
+ }
991
+ notes.push(tl('notes.webmail.projectCreated', { id: created.project.id, name, tool }));
992
+ // Do not surface php-hello scaffold noise when we immediately replace with Roundcube/Snappy
993
+ const row = input.projects.get(created.project.id);
994
+ // Always install into package root — never inherit a wrong public_html doc_root from scaffold
995
+ const packageRoot = join(row.homeDir, 'app', 'public');
996
+ try {
997
+ // Wipe hello template so we never leave only YSK PHP OK after a failed mid-install
998
+ mkdirSync(packageRoot, { recursive: true });
999
+ for (const ent of ['index.php', 'index.html', 'public_html']) {
1000
+ const p = join(packageRoot, ent);
1001
+ if (existsSync(p))
1002
+ rmSync(p, { recursive: true, force: true });
1003
+ }
1004
+ }
1005
+ catch {
1006
+ /* best-effort */
1007
+ }
1008
+ const inst = await installWebmailIntoProject({
1009
+ host: input.host,
1010
+ homeDir: row.homeDir,
1011
+ docRoot: packageRoot,
1012
+ tool,
1013
+ domain,
1014
+ imapHost: input.imapHost,
1015
+ smtpHost: input.smtpHost,
1016
+ mailDomain: input.mailDomain,
1017
+ download: wantDownload,
1018
+ forceHttps: input.forceHttps === true,
1019
+ installSsoPlugin: input.installSsoPlugin !== false,
1020
+ panelBaseUrl: input.panelBaseUrl,
1021
+ });
1022
+ notes.push(...inst.notes);
1023
+ written.push(...inst.written);
1024
+ if (!inst.ok) {
1025
+ const needEx = notes.some((n) => /YSK_EXECUTE|execute|EXECUTE/i.test(n));
1026
+ return {
1027
+ ok: false,
1028
+ project: row,
1029
+ projectId: row.id,
1030
+ tool,
1031
+ notes: [...notes, tl('notes.webmail.installIncompleteHint')],
1032
+ written,
1033
+ urlHint: `http://${domain}/`,
1034
+ apply_status: needEx ? 'blocked' : 'failed',
1035
+ requiresExecute: needEx,
1036
+ blocked: needEx,
1037
+ blockMessage: notes.find((n) => /YSK_EXECUTE|execute|EXECUTE/i.test(n)),
1038
+ snappyAdminPassword: inst.snappyAdminPassword,
1039
+ };
1040
+ }
1041
+ // Install may extract as root — fix ownership before goLive / php -S
1042
+ await ensureWebmailTreeOwnership(input.host, input.projects.get(row.id), notes);
1043
+ // Panel mailbox passwords need live Dovecot passwd-file (not PAM-only)
1044
+ await ensureMailAuthForWebmailLogin(input.host, notes, written);
1045
+ // Roundcube 1.6+: persist public_html as project doc_root before goLive
1046
+ // SnappyMail: always persist app/public (never leftover public_html/php-hello)
1047
+ const docRootRel = inst.webDocRootRel ||
1048
+ (tool === 'snappymail' ? 'app/public' : undefined) ||
1049
+ (tool === 'roundcube' ? undefined : 'app/public');
1050
+ if (docRootRel) {
1051
+ try {
1052
+ input.projects.updateNetwork(row.id, { docRoot: docRootRel, forceHttps: input.forceHttps === true }, input.actor);
1053
+ notes.push(tl('notes.webmail.docRootUpdated', { path: docRootRel }));
1054
+ }
1055
+ catch (e) {
1056
+ const msg = e instanceof Error ? e.message : String(e);
1057
+ notes.push(tl('notes.webmail.docRootUpdateFailed', { detail: msg }));
1058
+ }
1059
+ }
1060
+ else if (input.forceHttps === true) {
1061
+ try {
1062
+ input.projects.updateNetwork(row.id, { forceHttps: true }, input.actor);
1063
+ }
1064
+ catch {
1065
+ /* best-effort */
1066
+ }
1067
+ }
1068
+ const liveDocRoot = inst.webDocRoot ??
1069
+ join(row.homeDir, (input.projects.get(row.id).docRoot || 'app/public').replace(/^\//, ''));
1070
+ // Never goLive on php-hello leftover
1071
+ try {
1072
+ const idx = join(liveDocRoot, 'index.php');
1073
+ if (existsSync(idx) && /YSK PHP OK/i.test(readFileSync(idx, 'utf8'))) {
1074
+ notes.push(tl('notes.webmail.phpHelloStillPresent'));
1075
+ return {
1076
+ ok: false,
1077
+ project: row,
1078
+ projectId: row.id,
1079
+ tool,
1080
+ notes,
1081
+ written,
1082
+ urlHint: `http://${domain}/`,
1083
+ apply_status: 'failed',
1084
+ };
1085
+ }
1086
+ }
1087
+ catch {
1088
+ /* continue */
1089
+ }
1090
+ // Verify real app tree before deploy (never goLive on package-root stub)
1091
+ if (isWebmailPublicHtmlStub(liveDocRoot)) {
1092
+ notes.push(tl('notes.webmail.publicHtmlStub'));
1093
+ return {
1094
+ ok: false,
1095
+ project: row,
1096
+ projectId: row.id,
1097
+ tool,
1098
+ notes,
1099
+ written,
1100
+ urlHint: `http://${domain}/`,
1101
+ apply_status: 'failed',
1102
+ };
1103
+ }
1104
+ if (tool === 'roundcube' && !isRoundcubeDocRoot(liveDocRoot)) {
1105
+ notes.push(tl('notes.webmail.notRoundcubeTree'));
1106
+ return {
1107
+ ok: false,
1108
+ project: row,
1109
+ projectId: row.id,
1110
+ tool,
1111
+ notes,
1112
+ written,
1113
+ urlHint: `http://${domain}/`,
1114
+ apply_status: 'failed',
1115
+ };
1116
+ }
1117
+ if (tool === 'snappymail' && !isSnappyMailDocRoot(liveDocRoot)) {
1118
+ notes.push(tl('notes.webmail.notSnappyTree'));
1119
+ return {
1120
+ ok: false,
1121
+ project: row,
1122
+ projectId: row.id,
1123
+ tool,
1124
+ notes,
1125
+ written,
1126
+ urlHint: `http://${domain}/`,
1127
+ apply_status: 'failed',
1128
+ };
1129
+ }
1130
+ const live = await input.projectOps.goLive(row.id, { actor: input.actor });
1131
+ const liveNotes = (live.notes ?? []).slice(0, 16);
1132
+ if (!live.ok) {
1133
+ // Surface deploy failure first so OpsResultPanel summary is not only install success lines
1134
+ notes.unshift(tl('notes.webmail.goLiveFailed'), ...liveNotes.filter((n) => /fail|error|unhealthy|incomplete|失敗|錯誤/i.test(n)).slice(0, 6));
1135
+ notes.push(...liveNotes.filter((n) => !notes.includes(n)).slice(0, 10));
1136
+ }
1137
+ else {
1138
+ notes.push(...liveNotes);
1139
+ }
1140
+ notes.push(tl('notes.webmail.openHint'));
1141
+ notes.push(tl('notes.webmail.sslHint', { domain }));
1142
+ if (input.forceHttps === true) {
1143
+ notes.push(tl('notes.webmail.forceHttpsNeedsSsl'));
1144
+ }
1145
+ const fresh = input.projects.get(row.id);
1146
+ const blocked = Boolean(live.deploy?.requiresExecute || live.publish?.requiresExecute);
1147
+ // Install tree is the critical path; degraded php -S + nginx still counts as applied when deploy ok
1148
+ const ok = Boolean(live.ok) && inst.ok && !blocked;
1149
+ return {
1150
+ ok,
1151
+ project: fresh,
1152
+ projectId: fresh.id,
1153
+ tool,
1154
+ urlHint: input.forceHttps ? `https://${domain}/` : `http://${domain}/`,
1155
+ notes,
1156
+ written,
1157
+ blocked,
1158
+ requiresExecute: Boolean(live.deploy?.requiresExecute || live.publish?.requiresExecute),
1159
+ requiresRoot: Boolean(live.deploy?.requiresRoot || live.publish?.requiresRoot),
1160
+ blockMessage: blocked
1161
+ ? (live.notes ?? []).find((n) => /YSK_EXECUTE|execute|root/i.test(n))
1162
+ : !ok
1163
+ ? notes.find((n) => /goLive|deploy|unhealthy|失敗/i.test(n))
1164
+ : undefined,
1165
+ apply_status: ok ? 'applied' : blocked ? 'blocked' : live.ok === false ? 'failed' : 'written',
1166
+ snappyAdminPassword: inst.snappyAdminPassword,
1167
+ };
1168
+ }
1169
+ /**
1170
+ * Re-download / rewrite webmail into an existing PHP project (upgrade path).
1171
+ */
1172
+ export async function reinstallWebmailProject(input) {
1173
+ const notes = [];
1174
+ const written = [];
1175
+ const tool = normalizeWebmailTool(input.tool);
1176
+ let row;
1177
+ try {
1178
+ row = input.projects.get(input.projectId);
1179
+ }
1180
+ catch {
1181
+ return {
1182
+ ok: false,
1183
+ tool,
1184
+ notes: [tl('notes.webmail.projectNotFound')],
1185
+ written,
1186
+ apply_status: 'failed',
1187
+ };
1188
+ }
1189
+ const domain = (row.domain ?? '').trim().toLowerCase() || 'webmail.local';
1190
+ // Always install into package root (app/public), not public_html web root
1191
+ const configuredAbs = join(row.homeDir, (row.docRoot || 'app/public').replace(/^\//, ''));
1192
+ // SnappyMail: never use nested public_html as package root
1193
+ const packageRootAbs = tool === 'snappymail'
1194
+ ? join(row.homeDir, 'app', 'public')
1195
+ : resolveRoundcubePackageRoot(configuredAbs);
1196
+ const wantDownload = input.download !== false;
1197
+ if (wantDownload && !input.host.executeEnabled()) {
1198
+ const msg = tl('notes.webmail.needExecute');
1199
+ return {
1200
+ ok: false,
1201
+ project: row,
1202
+ projectId: row.id,
1203
+ tool,
1204
+ notes: [msg],
1205
+ written,
1206
+ blocked: true,
1207
+ requiresExecute: true,
1208
+ blockMessage: msg,
1209
+ apply_status: 'blocked',
1210
+ urlHint: `https://${domain}/`,
1211
+ };
1212
+ }
1213
+ notes.push(tl('notes.webmail.reinstallStart', {
1214
+ id: row.id,
1215
+ version: tool === 'snappymail' ? SNAPPYMAIL_VERSION : ROUNDCUBE_VERSION,
1216
+ }));
1217
+ const mailDomain = (input.mailDomain || '').trim().toLowerCase() || undefined;
1218
+ const endpoints = resolveWebmailMailEndpoints({
1219
+ webmailDomain: domain,
1220
+ mailDomain: input.mailDomain,
1221
+ imapHost: input.imapHost,
1222
+ smtpHost: input.smtpHost,
1223
+ });
1224
+ const inst = await installWebmailIntoProject({
1225
+ host: input.host,
1226
+ homeDir: row.homeDir,
1227
+ docRoot: packageRootAbs,
1228
+ tool,
1229
+ domain,
1230
+ imapHost: endpoints.imapHost,
1231
+ smtpHost: endpoints.smtpHost,
1232
+ mailDomain: endpoints.mailDomain ?? mailDomain,
1233
+ download: wantDownload,
1234
+ forceHttps: input.forceHttps === true,
1235
+ installSsoPlugin: input.installSsoPlugin !== false,
1236
+ panelBaseUrl: input.panelBaseUrl,
1237
+ });
1238
+ notes.push(...inst.notes);
1239
+ written.push(...inst.written);
1240
+ if (!inst.ok) {
1241
+ const needEx = notes.some((n) => /YSK_EXECUTE|execute|EXECUTE/i.test(n));
1242
+ return {
1243
+ ok: false,
1244
+ project: row,
1245
+ projectId: row.id,
1246
+ tool,
1247
+ notes: [...notes, tl('notes.webmail.installIncompleteHint')],
1248
+ written,
1249
+ urlHint: `https://${domain}/`,
1250
+ apply_status: needEx ? 'blocked' : 'failed',
1251
+ blocked: needEx,
1252
+ blockMessage: notes.find((n) => /YSK_EXECUTE|execute|EXECUTE/i.test(n)),
1253
+ snappyAdminPassword: inst.snappyAdminPassword,
1254
+ requiresExecute: needEx,
1255
+ };
1256
+ }
1257
+ // Install may extract as root — fix ownership before goLive / php -S
1258
+ await ensureWebmailTreeOwnership(input.host, input.projects.get(row.id), notes);
1259
+ await ensureMailAuthForWebmailLogin(input.host, notes, written);
1260
+ const docRootRel = inst.webDocRootRel ||
1261
+ (tool === 'snappymail' ? 'app/public' : undefined) ||
1262
+ 'app/public';
1263
+ if (docRootRel) {
1264
+ try {
1265
+ input.projects.updateNetwork(row.id, { docRoot: docRootRel, forceHttps: input.forceHttps === true }, input.actor);
1266
+ notes.push(tl('notes.webmail.docRootUpdated', { path: docRootRel }));
1267
+ }
1268
+ catch (e) {
1269
+ const msg = e instanceof Error ? e.message : String(e);
1270
+ notes.push(tl('notes.webmail.docRootUpdateFailed', { detail: msg }));
1271
+ }
1272
+ }
1273
+ else if (input.forceHttps === true) {
1274
+ try {
1275
+ input.projects.updateNetwork(row.id, { forceHttps: true }, input.actor);
1276
+ }
1277
+ catch {
1278
+ /* best-effort */
1279
+ }
1280
+ }
1281
+ const liveDocRoot = inst.webDocRoot ??
1282
+ join(row.homeDir, (input.projects.get(row.id).docRoot || 'app/public').replace(/^\//, ''));
1283
+ try {
1284
+ const idx = join(liveDocRoot, 'index.php');
1285
+ if (existsSync(idx) && /YSK PHP OK/i.test(readFileSync(idx, 'utf8'))) {
1286
+ notes.push(tl('notes.webmail.phpHelloStillPresent'));
1287
+ return {
1288
+ ok: false,
1289
+ project: row,
1290
+ projectId: row.id,
1291
+ tool,
1292
+ notes,
1293
+ written,
1294
+ urlHint: `https://${domain}/`,
1295
+ apply_status: 'failed',
1296
+ };
1297
+ }
1298
+ }
1299
+ catch {
1300
+ /* continue */
1301
+ }
1302
+ if (tool === 'roundcube' && !isRoundcubeDocRoot(liveDocRoot)) {
1303
+ notes.push(tl('notes.webmail.notRoundcubeTree'));
1304
+ return {
1305
+ ok: false,
1306
+ project: row,
1307
+ projectId: row.id,
1308
+ tool,
1309
+ notes,
1310
+ written,
1311
+ urlHint: `https://${domain}/`,
1312
+ apply_status: 'failed',
1313
+ };
1314
+ }
1315
+ if (input.goLive !== false) {
1316
+ const live = await input.projectOps.goLive(row.id, { actor: input.actor });
1317
+ const liveNotes = (live.notes ?? []).slice(0, 12);
1318
+ if (!live.ok) {
1319
+ notes.unshift(tl('notes.webmail.goLiveFailed'), ...liveNotes.filter((n) => /fail|error|unhealthy|incomplete|失敗|錯誤/i.test(n)).slice(0, 6));
1320
+ notes.push(...liveNotes.filter((n) => !notes.includes(n)).slice(0, 10));
1321
+ }
1322
+ else {
1323
+ notes.push(...liveNotes);
1324
+ }
1325
+ notes.push(tl('notes.webmail.openHint'));
1326
+ notes.push(tl('notes.webmail.sslHint', { domain }));
1327
+ if (input.forceHttps === true) {
1328
+ notes.push(tl('notes.webmail.forceHttpsNeedsSsl'));
1329
+ }
1330
+ const fresh = input.projects.get(row.id);
1331
+ const blocked = Boolean(live.deploy?.requiresExecute || live.publish?.requiresExecute);
1332
+ const ok = Boolean(live.ok) && inst.ok && !blocked;
1333
+ return {
1334
+ ok,
1335
+ project: fresh,
1336
+ projectId: fresh.id,
1337
+ tool,
1338
+ urlHint: input.forceHttps ? `https://${domain}/` : `http://${domain}/`,
1339
+ notes,
1340
+ written,
1341
+ blocked,
1342
+ requiresExecute: Boolean(live.deploy?.requiresExecute || live.publish?.requiresExecute),
1343
+ requiresRoot: Boolean(live.deploy?.requiresRoot || live.publish?.requiresRoot),
1344
+ blockMessage: blocked
1345
+ ? (live.notes ?? []).find((n) => /YSK_EXECUTE|execute|root/i.test(n))
1346
+ : !ok
1347
+ ? notes.find((n) => /goLive|deploy|unhealthy|失敗/i.test(n))
1348
+ : undefined,
1349
+ apply_status: ok ? 'applied' : blocked ? 'blocked' : live.ok === false ? 'failed' : 'written',
1350
+ snappyAdminPassword: inst.snappyAdminPassword,
1351
+ };
1352
+ }
1353
+ return {
1354
+ ok: true,
1355
+ project: row,
1356
+ projectId: row.id,
1357
+ tool,
1358
+ urlHint: `https://${domain}/`,
1359
+ notes,
1360
+ written,
1361
+ apply_status: 'written',
1362
+ snappyAdminPassword: inst.snappyAdminPassword,
1363
+ };
1364
+ }
1365
+ //# sourceMappingURL=webmail-project.js.map