@studiometa/forge-core 0.0.1 → 0.1.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 (248) hide show
  1. package/README.md +121 -0
  2. package/dist/constants.d.ts +13 -0
  3. package/dist/constants.d.ts.map +1 -0
  4. package/dist/context.d.ts +30 -0
  5. package/dist/context.d.ts.map +1 -0
  6. package/dist/executors/backups/create.d.ts +8 -0
  7. package/dist/executors/backups/create.d.ts.map +1 -0
  8. package/dist/executors/backups/delete.d.ts +7 -0
  9. package/dist/executors/backups/delete.d.ts.map +1 -0
  10. package/dist/executors/backups/get.d.ts +8 -0
  11. package/dist/executors/backups/get.d.ts.map +1 -0
  12. package/dist/executors/backups/index.d.ts +6 -0
  13. package/dist/executors/backups/index.d.ts.map +1 -0
  14. package/dist/executors/backups/list.d.ts +8 -0
  15. package/dist/executors/backups/list.d.ts.map +1 -0
  16. package/dist/executors/backups/types.d.ts +31 -0
  17. package/dist/executors/backups/types.d.ts.map +1 -0
  18. package/dist/executors/certificates/activate.d.ts +7 -0
  19. package/dist/executors/certificates/activate.d.ts.map +1 -0
  20. package/dist/executors/certificates/create.d.ts +8 -0
  21. package/dist/executors/certificates/create.d.ts.map +1 -0
  22. package/dist/executors/certificates/delete.d.ts +7 -0
  23. package/dist/executors/certificates/delete.d.ts.map +1 -0
  24. package/dist/executors/certificates/get.d.ts +8 -0
  25. package/dist/executors/certificates/get.d.ts.map +1 -0
  26. package/dist/executors/certificates/index.d.ts +7 -0
  27. package/dist/executors/certificates/index.d.ts.map +1 -0
  28. package/dist/executors/certificates/list.d.ts +8 -0
  29. package/dist/executors/certificates/list.d.ts.map +1 -0
  30. package/dist/executors/certificates/types.d.ts +43 -0
  31. package/dist/executors/certificates/types.d.ts.map +1 -0
  32. package/dist/executors/commands/create.d.ts +8 -0
  33. package/dist/executors/commands/create.d.ts.map +1 -0
  34. package/dist/executors/commands/get.d.ts +8 -0
  35. package/dist/executors/commands/get.d.ts.map +1 -0
  36. package/dist/executors/commands/index.d.ts +5 -0
  37. package/dist/executors/commands/index.d.ts.map +1 -0
  38. package/dist/executors/commands/list.d.ts +8 -0
  39. package/dist/executors/commands/list.d.ts.map +1 -0
  40. package/dist/executors/commands/types.d.ts +27 -0
  41. package/dist/executors/commands/types.d.ts.map +1 -0
  42. package/dist/executors/daemons/create.d.ts +8 -0
  43. package/dist/executors/daemons/create.d.ts.map +1 -0
  44. package/dist/executors/daemons/delete.d.ts +7 -0
  45. package/dist/executors/daemons/delete.d.ts.map +1 -0
  46. package/dist/executors/daemons/get.d.ts +8 -0
  47. package/dist/executors/daemons/get.d.ts.map +1 -0
  48. package/dist/executors/daemons/index.d.ts +7 -0
  49. package/dist/executors/daemons/index.d.ts.map +1 -0
  50. package/dist/executors/daemons/list.d.ts +8 -0
  51. package/dist/executors/daemons/list.d.ts.map +1 -0
  52. package/dist/executors/daemons/restart.d.ts +7 -0
  53. package/dist/executors/daemons/restart.d.ts.map +1 -0
  54. package/dist/executors/daemons/types.d.ts +38 -0
  55. package/dist/executors/daemons/types.d.ts.map +1 -0
  56. package/dist/executors/database-users/create.d.ts +8 -0
  57. package/dist/executors/database-users/create.d.ts.map +1 -0
  58. package/dist/executors/database-users/delete.d.ts +7 -0
  59. package/dist/executors/database-users/delete.d.ts.map +1 -0
  60. package/dist/executors/database-users/get.d.ts +8 -0
  61. package/dist/executors/database-users/get.d.ts.map +1 -0
  62. package/dist/executors/database-users/index.d.ts +6 -0
  63. package/dist/executors/database-users/index.d.ts.map +1 -0
  64. package/dist/executors/database-users/list.d.ts +8 -0
  65. package/dist/executors/database-users/list.d.ts.map +1 -0
  66. package/dist/executors/database-users/types.d.ts +31 -0
  67. package/dist/executors/database-users/types.d.ts.map +1 -0
  68. package/dist/executors/databases/create.d.ts +8 -0
  69. package/dist/executors/databases/create.d.ts.map +1 -0
  70. package/dist/executors/databases/delete.d.ts +7 -0
  71. package/dist/executors/databases/delete.d.ts.map +1 -0
  72. package/dist/executors/databases/get.d.ts +8 -0
  73. package/dist/executors/databases/get.d.ts.map +1 -0
  74. package/dist/executors/databases/index.d.ts +6 -0
  75. package/dist/executors/databases/index.d.ts.map +1 -0
  76. package/dist/executors/databases/list.d.ts +8 -0
  77. package/dist/executors/databases/list.d.ts.map +1 -0
  78. package/dist/executors/databases/types.d.ts +31 -0
  79. package/dist/executors/databases/types.d.ts.map +1 -0
  80. package/dist/executors/deployments/deploy.d.ts +7 -0
  81. package/dist/executors/deployments/deploy.d.ts.map +1 -0
  82. package/dist/executors/deployments/get-output.d.ts +7 -0
  83. package/dist/executors/deployments/get-output.d.ts.map +1 -0
  84. package/dist/executors/deployments/get-script.d.ts +7 -0
  85. package/dist/executors/deployments/get-script.d.ts.map +1 -0
  86. package/dist/executors/deployments/index.d.ts +7 -0
  87. package/dist/executors/deployments/index.d.ts.map +1 -0
  88. package/dist/executors/deployments/list.d.ts +8 -0
  89. package/dist/executors/deployments/list.d.ts.map +1 -0
  90. package/dist/executors/deployments/types.d.ts +41 -0
  91. package/dist/executors/deployments/types.d.ts.map +1 -0
  92. package/dist/executors/deployments/update-script.d.ts +7 -0
  93. package/dist/executors/deployments/update-script.d.ts.map +1 -0
  94. package/dist/executors/env/get.d.ts +7 -0
  95. package/dist/executors/env/get.d.ts.map +1 -0
  96. package/dist/executors/env/index.d.ts +4 -0
  97. package/dist/executors/env/index.d.ts.map +1 -0
  98. package/dist/executors/env/types.d.ts +19 -0
  99. package/dist/executors/env/types.d.ts.map +1 -0
  100. package/dist/executors/env/update.d.ts +7 -0
  101. package/dist/executors/env/update.d.ts.map +1 -0
  102. package/dist/executors/firewall-rules/create.d.ts +5 -0
  103. package/dist/executors/firewall-rules/create.d.ts.map +1 -0
  104. package/dist/executors/firewall-rules/delete.d.ts +4 -0
  105. package/dist/executors/firewall-rules/delete.d.ts.map +1 -0
  106. package/dist/executors/firewall-rules/get.d.ts +5 -0
  107. package/dist/executors/firewall-rules/get.d.ts.map +1 -0
  108. package/dist/executors/firewall-rules/index.d.ts +6 -0
  109. package/dist/executors/firewall-rules/index.d.ts.map +1 -0
  110. package/dist/executors/firewall-rules/list.d.ts +5 -0
  111. package/dist/executors/firewall-rules/list.d.ts.map +1 -0
  112. package/dist/executors/firewall-rules/types.d.ts +31 -0
  113. package/dist/executors/firewall-rules/types.d.ts.map +1 -0
  114. package/dist/executors/monitors/create.d.ts +5 -0
  115. package/dist/executors/monitors/create.d.ts.map +1 -0
  116. package/dist/executors/monitors/delete.d.ts +4 -0
  117. package/dist/executors/monitors/delete.d.ts.map +1 -0
  118. package/dist/executors/monitors/get.d.ts +5 -0
  119. package/dist/executors/monitors/get.d.ts.map +1 -0
  120. package/dist/executors/monitors/index.d.ts +6 -0
  121. package/dist/executors/monitors/index.d.ts.map +1 -0
  122. package/dist/executors/monitors/list.d.ts +5 -0
  123. package/dist/executors/monitors/list.d.ts.map +1 -0
  124. package/dist/executors/monitors/types.d.ts +31 -0
  125. package/dist/executors/monitors/types.d.ts.map +1 -0
  126. package/dist/executors/nginx/get.d.ts +7 -0
  127. package/dist/executors/nginx/get.d.ts.map +1 -0
  128. package/dist/executors/nginx/index.d.ts +4 -0
  129. package/dist/executors/nginx/index.d.ts.map +1 -0
  130. package/dist/executors/nginx/types.d.ts +19 -0
  131. package/dist/executors/nginx/types.d.ts.map +1 -0
  132. package/dist/executors/nginx/update.d.ts +7 -0
  133. package/dist/executors/nginx/update.d.ts.map +1 -0
  134. package/dist/executors/nginx-templates/create.d.ts +5 -0
  135. package/dist/executors/nginx-templates/create.d.ts.map +1 -0
  136. package/dist/executors/nginx-templates/delete.d.ts +4 -0
  137. package/dist/executors/nginx-templates/delete.d.ts.map +1 -0
  138. package/dist/executors/nginx-templates/get.d.ts +5 -0
  139. package/dist/executors/nginx-templates/get.d.ts.map +1 -0
  140. package/dist/executors/nginx-templates/index.d.ts +7 -0
  141. package/dist/executors/nginx-templates/index.d.ts.map +1 -0
  142. package/dist/executors/nginx-templates/list.d.ts +5 -0
  143. package/dist/executors/nginx-templates/list.d.ts.map +1 -0
  144. package/dist/executors/nginx-templates/types.d.ts +40 -0
  145. package/dist/executors/nginx-templates/types.d.ts.map +1 -0
  146. package/dist/executors/nginx-templates/update.d.ts +5 -0
  147. package/dist/executors/nginx-templates/update.d.ts.map +1 -0
  148. package/dist/executors/recipes/create.d.ts +5 -0
  149. package/dist/executors/recipes/create.d.ts.map +1 -0
  150. package/dist/executors/recipes/delete.d.ts +4 -0
  151. package/dist/executors/recipes/delete.d.ts.map +1 -0
  152. package/dist/executors/recipes/get.d.ts +5 -0
  153. package/dist/executors/recipes/get.d.ts.map +1 -0
  154. package/dist/executors/recipes/index.d.ts +7 -0
  155. package/dist/executors/recipes/index.d.ts.map +1 -0
  156. package/dist/executors/recipes/list.d.ts +5 -0
  157. package/dist/executors/recipes/list.d.ts.map +1 -0
  158. package/dist/executors/recipes/run.d.ts +7 -0
  159. package/dist/executors/recipes/run.d.ts.map +1 -0
  160. package/dist/executors/recipes/types.d.ts +34 -0
  161. package/dist/executors/recipes/types.d.ts.map +1 -0
  162. package/dist/executors/redirect-rules/create.d.ts +5 -0
  163. package/dist/executors/redirect-rules/create.d.ts.map +1 -0
  164. package/dist/executors/redirect-rules/delete.d.ts +4 -0
  165. package/dist/executors/redirect-rules/delete.d.ts.map +1 -0
  166. package/dist/executors/redirect-rules/get.d.ts +5 -0
  167. package/dist/executors/redirect-rules/get.d.ts.map +1 -0
  168. package/dist/executors/redirect-rules/index.d.ts +6 -0
  169. package/dist/executors/redirect-rules/index.d.ts.map +1 -0
  170. package/dist/executors/redirect-rules/list.d.ts +5 -0
  171. package/dist/executors/redirect-rules/list.d.ts.map +1 -0
  172. package/dist/executors/redirect-rules/types.d.ts +35 -0
  173. package/dist/executors/redirect-rules/types.d.ts.map +1 -0
  174. package/dist/executors/scheduled-jobs/create.d.ts +8 -0
  175. package/dist/executors/scheduled-jobs/create.d.ts.map +1 -0
  176. package/dist/executors/scheduled-jobs/delete.d.ts +7 -0
  177. package/dist/executors/scheduled-jobs/delete.d.ts.map +1 -0
  178. package/dist/executors/scheduled-jobs/get.d.ts +8 -0
  179. package/dist/executors/scheduled-jobs/get.d.ts.map +1 -0
  180. package/dist/executors/scheduled-jobs/index.d.ts +6 -0
  181. package/dist/executors/scheduled-jobs/index.d.ts.map +1 -0
  182. package/dist/executors/scheduled-jobs/list.d.ts +8 -0
  183. package/dist/executors/scheduled-jobs/list.d.ts.map +1 -0
  184. package/dist/executors/scheduled-jobs/types.d.ts +31 -0
  185. package/dist/executors/scheduled-jobs/types.d.ts.map +1 -0
  186. package/dist/executors/security-rules/create.d.ts +5 -0
  187. package/dist/executors/security-rules/create.d.ts.map +1 -0
  188. package/dist/executors/security-rules/delete.d.ts +4 -0
  189. package/dist/executors/security-rules/delete.d.ts.map +1 -0
  190. package/dist/executors/security-rules/get.d.ts +5 -0
  191. package/dist/executors/security-rules/get.d.ts.map +1 -0
  192. package/dist/executors/security-rules/index.d.ts +6 -0
  193. package/dist/executors/security-rules/index.d.ts.map +1 -0
  194. package/dist/executors/security-rules/list.d.ts +5 -0
  195. package/dist/executors/security-rules/list.d.ts.map +1 -0
  196. package/dist/executors/security-rules/types.d.ts +35 -0
  197. package/dist/executors/security-rules/types.d.ts.map +1 -0
  198. package/dist/executors/servers/create.d.ts +8 -0
  199. package/dist/executors/servers/create.d.ts.map +1 -0
  200. package/dist/executors/servers/delete.d.ts +7 -0
  201. package/dist/executors/servers/delete.d.ts.map +1 -0
  202. package/dist/executors/servers/get.d.ts +8 -0
  203. package/dist/executors/servers/get.d.ts.map +1 -0
  204. package/dist/executors/servers/index.d.ts +7 -0
  205. package/dist/executors/servers/index.d.ts.map +1 -0
  206. package/dist/executors/servers/list.d.ts +8 -0
  207. package/dist/executors/servers/list.d.ts.map +1 -0
  208. package/dist/executors/servers/reboot.d.ts +7 -0
  209. package/dist/executors/servers/reboot.d.ts.map +1 -0
  210. package/dist/executors/servers/types.d.ts +33 -0
  211. package/dist/executors/servers/types.d.ts.map +1 -0
  212. package/dist/executors/sites/create.d.ts +8 -0
  213. package/dist/executors/sites/create.d.ts.map +1 -0
  214. package/dist/executors/sites/delete.d.ts +7 -0
  215. package/dist/executors/sites/delete.d.ts.map +1 -0
  216. package/dist/executors/sites/get.d.ts +8 -0
  217. package/dist/executors/sites/get.d.ts.map +1 -0
  218. package/dist/executors/sites/index.d.ts +6 -0
  219. package/dist/executors/sites/index.d.ts.map +1 -0
  220. package/dist/executors/sites/list.d.ts +8 -0
  221. package/dist/executors/sites/list.d.ts.map +1 -0
  222. package/dist/executors/sites/types.d.ts +31 -0
  223. package/dist/executors/sites/types.d.ts.map +1 -0
  224. package/dist/executors/ssh-keys/create.d.ts +5 -0
  225. package/dist/executors/ssh-keys/create.d.ts.map +1 -0
  226. package/dist/executors/ssh-keys/delete.d.ts +4 -0
  227. package/dist/executors/ssh-keys/delete.d.ts.map +1 -0
  228. package/dist/executors/ssh-keys/get.d.ts +5 -0
  229. package/dist/executors/ssh-keys/get.d.ts.map +1 -0
  230. package/dist/executors/ssh-keys/index.d.ts +6 -0
  231. package/dist/executors/ssh-keys/index.d.ts.map +1 -0
  232. package/dist/executors/ssh-keys/list.d.ts +5 -0
  233. package/dist/executors/ssh-keys/list.d.ts.map +1 -0
  234. package/dist/executors/ssh-keys/types.d.ts +31 -0
  235. package/dist/executors/ssh-keys/types.d.ts.map +1 -0
  236. package/dist/executors/types.d.ts +18 -0
  237. package/dist/executors/types.d.ts.map +1 -0
  238. package/dist/executors/user/get.d.ts +8 -0
  239. package/dist/executors/user/get.d.ts.map +1 -0
  240. package/dist/executors/user/index.d.ts +3 -0
  241. package/dist/executors/user/index.d.ts.map +1 -0
  242. package/dist/executors/user/types.d.ts +9 -0
  243. package/dist/executors/user/types.d.ts.map +1 -0
  244. package/dist/index.d.ts +46 -0
  245. package/dist/index.d.ts.map +1 -0
  246. package/dist/index.js +480 -0
  247. package/dist/index.js.map +1 -0
  248. package/package.json +33 -1
package/dist/index.js ADDED
@@ -0,0 +1,480 @@
1
+ /**
2
+ * All supported resources.
3
+ * Single source of truth — MCP schema and handlers derive from this.
4
+ */
5
+ const RESOURCES = [
6
+ "servers",
7
+ "sites",
8
+ "deployments",
9
+ "certificates",
10
+ "databases",
11
+ "database-users",
12
+ "daemons",
13
+ "env",
14
+ "nginx",
15
+ "firewall-rules",
16
+ "ssh-keys",
17
+ "security-rules",
18
+ "redirect-rules",
19
+ "nginx-templates",
20
+ "monitors",
21
+ "recipes",
22
+ "backups",
23
+ "commands",
24
+ "scheduled-jobs",
25
+ "user"
26
+ ];
27
+ /**
28
+ * All supported actions.
29
+ * Single source of truth — MCP schema and handlers derive from this.
30
+ */
31
+ const ACTIONS = [
32
+ "list",
33
+ "get",
34
+ "create",
35
+ "update",
36
+ "delete",
37
+ "deploy",
38
+ "reboot",
39
+ "restart",
40
+ "activate",
41
+ "run",
42
+ "help",
43
+ "schema"
44
+ ];
45
+ /**
46
+ * Create a test executor context with a mock HTTP client.
47
+ *
48
+ * @param overrides Partial overrides for the context.
49
+ */
50
+ function createTestExecutorContext(overrides = {}) {
51
+ return {
52
+ client: new Proxy({}, { get: (_target, prop) => {
53
+ return (..._args) => {
54
+ throw new Error(`HttpClient.${String(prop)}() called without mock — inject a mock client in createTestExecutorContext()`);
55
+ };
56
+ } }),
57
+ ...overrides
58
+ };
59
+ }
60
+ /**
61
+ * Create a new server.
62
+ */
63
+ async function createServer(options, ctx) {
64
+ return { data: (await ctx.client.post("/servers", options)).server };
65
+ }
66
+ /**
67
+ * Delete a server.
68
+ */
69
+ async function deleteServer(options, ctx) {
70
+ await ctx.client.delete(`/servers/${options.server_id}`);
71
+ return { data: void 0 };
72
+ }
73
+ /**
74
+ * Get a specific server by ID.
75
+ */
76
+ async function getServer(options, ctx) {
77
+ return { data: (await ctx.client.get(`/servers/${options.server_id}`)).server };
78
+ }
79
+ /**
80
+ * List all servers.
81
+ */
82
+ async function listServers(_options, ctx) {
83
+ return { data: (await ctx.client.get("/servers")).servers };
84
+ }
85
+ /**
86
+ * Reboot a server.
87
+ */
88
+ async function rebootServer(options, ctx) {
89
+ await ctx.client.post(`/servers/${options.server_id}/reboot`);
90
+ return { data: void 0 };
91
+ }
92
+ /**
93
+ * Create a new site on a server.
94
+ */
95
+ async function createSite(options, ctx) {
96
+ const { server_id, ...data } = options;
97
+ return { data: (await ctx.client.post(`/servers/${server_id}/sites`, data)).site };
98
+ }
99
+ /**
100
+ * Delete a site.
101
+ */
102
+ async function deleteSite(options, ctx) {
103
+ await ctx.client.delete(`/servers/${options.server_id}/sites/${options.site_id}`);
104
+ return { data: void 0 };
105
+ }
106
+ /**
107
+ * Get a specific site by ID.
108
+ */
109
+ async function getSite(options, ctx) {
110
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}`)).site };
111
+ }
112
+ /**
113
+ * List all sites on a server.
114
+ */
115
+ async function listSites(options, ctx) {
116
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/sites`)).sites };
117
+ }
118
+ /**
119
+ * Trigger a deployment for a site.
120
+ */
121
+ async function deploySite(options, ctx) {
122
+ await ctx.client.post(`/servers/${options.server_id}/sites/${options.site_id}/deployment/deploy`);
123
+ return { data: void 0 };
124
+ }
125
+ /**
126
+ * Get the output of a deployment.
127
+ */
128
+ async function getDeploymentOutput(options, ctx) {
129
+ return { data: await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}/deployments/${options.deployment_id}/output`) };
130
+ }
131
+ /**
132
+ * Get the deployment script for a site.
133
+ */
134
+ async function getDeploymentScript(options, ctx) {
135
+ return { data: await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}/deployment/script`) };
136
+ }
137
+ /**
138
+ * List all deployments for a site.
139
+ */
140
+ async function listDeployments(options, ctx) {
141
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}/deployments`)).deployments };
142
+ }
143
+ /**
144
+ * Update the deployment script for a site.
145
+ */
146
+ async function updateDeploymentScript(options, ctx) {
147
+ await ctx.client.put(`/servers/${options.server_id}/sites/${options.site_id}/deployment/script`, { content: options.content });
148
+ return { data: void 0 };
149
+ }
150
+ /**
151
+ * Activate an SSL certificate.
152
+ */
153
+ async function activateCertificate(options, ctx) {
154
+ await ctx.client.post(`/servers/${options.server_id}/sites/${options.site_id}/certificates/${options.id}/activate`, {});
155
+ return { data: void 0 };
156
+ }
157
+ /**
158
+ * Create a new SSL certificate.
159
+ */
160
+ async function createCertificate(options, ctx) {
161
+ const { server_id, site_id, ...data } = options;
162
+ return { data: (await ctx.client.post(`/servers/${server_id}/sites/${site_id}/certificates`, data)).certificate };
163
+ }
164
+ /**
165
+ * Delete an SSL certificate.
166
+ */
167
+ async function deleteCertificate(options, ctx) {
168
+ await ctx.client.delete(`/servers/${options.server_id}/sites/${options.site_id}/certificates/${options.id}`);
169
+ return { data: void 0 };
170
+ }
171
+ /**
172
+ * Get a single SSL certificate.
173
+ */
174
+ async function getCertificate(options, ctx) {
175
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}/certificates/${options.id}`)).certificate };
176
+ }
177
+ /**
178
+ * List SSL certificates for a site.
179
+ */
180
+ async function listCertificates(options, ctx) {
181
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}/certificates`)).certificates };
182
+ }
183
+ /**
184
+ * Create a new database.
185
+ */
186
+ async function createDatabase(options, ctx) {
187
+ const { server_id, ...data } = options;
188
+ return { data: (await ctx.client.post(`/servers/${server_id}/databases`, data)).database };
189
+ }
190
+ /**
191
+ * Delete a database.
192
+ */
193
+ async function deleteDatabase(options, ctx) {
194
+ await ctx.client.delete(`/servers/${options.server_id}/databases/${options.id}`);
195
+ return { data: void 0 };
196
+ }
197
+ /**
198
+ * Get a single database.
199
+ */
200
+ async function getDatabase(options, ctx) {
201
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/databases/${options.id}`)).database };
202
+ }
203
+ /**
204
+ * List databases on a server.
205
+ */
206
+ async function listDatabases(options, ctx) {
207
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/databases`)).databases };
208
+ }
209
+ /**
210
+ * Create a new database user.
211
+ */
212
+ async function createDatabaseUser(options, ctx) {
213
+ const { server_id, ...data } = options;
214
+ return { data: (await ctx.client.post(`/servers/${server_id}/database-users`, data)).user };
215
+ }
216
+ /**
217
+ * Delete a database user.
218
+ */
219
+ async function deleteDatabaseUser(options, ctx) {
220
+ await ctx.client.delete(`/servers/${options.server_id}/database-users/${options.id}`);
221
+ return { data: void 0 };
222
+ }
223
+ /**
224
+ * Get a single database user.
225
+ */
226
+ async function getDatabaseUser(options, ctx) {
227
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/database-users/${options.id}`)).user };
228
+ }
229
+ /**
230
+ * List database users on a server.
231
+ */
232
+ async function listDatabaseUsers(options, ctx) {
233
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/database-users`)).users };
234
+ }
235
+ /**
236
+ * Create a new daemon (background process).
237
+ */
238
+ async function createDaemon(options, ctx) {
239
+ const { server_id, ...data } = options;
240
+ return { data: (await ctx.client.post(`/servers/${server_id}/daemons`, data)).daemon };
241
+ }
242
+ /**
243
+ * Delete a daemon.
244
+ */
245
+ async function deleteDaemon(options, ctx) {
246
+ await ctx.client.delete(`/servers/${options.server_id}/daemons/${options.id}`);
247
+ return { data: void 0 };
248
+ }
249
+ /**
250
+ * Get a single daemon.
251
+ */
252
+ async function getDaemon(options, ctx) {
253
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/daemons/${options.id}`)).daemon };
254
+ }
255
+ /**
256
+ * List daemons (background processes) on a server.
257
+ */
258
+ async function listDaemons(options, ctx) {
259
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/daemons`)).daemons };
260
+ }
261
+ /**
262
+ * Restart a daemon.
263
+ */
264
+ async function restartDaemon(options, ctx) {
265
+ await ctx.client.post(`/servers/${options.server_id}/daemons/${options.id}/restart`, {});
266
+ return { data: void 0 };
267
+ }
268
+ async function createFirewallRule(options, ctx) {
269
+ const { server_id, ...data } = options;
270
+ return { data: (await ctx.client.post(`/servers/${server_id}/firewall-rules`, data)).rule };
271
+ }
272
+ async function deleteFirewallRule(options, ctx) {
273
+ await ctx.client.delete(`/servers/${options.server_id}/firewall-rules/${options.id}`);
274
+ return { data: void 0 };
275
+ }
276
+ async function getFirewallRule(options, ctx) {
277
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/firewall-rules/${options.id}`)).rule };
278
+ }
279
+ async function listFirewallRules(options, ctx) {
280
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/firewall-rules`)).rules };
281
+ }
282
+ async function createSshKey(options, ctx) {
283
+ const { server_id, ...data } = options;
284
+ return { data: (await ctx.client.post(`/servers/${server_id}/keys`, data)).key };
285
+ }
286
+ async function deleteSshKey(options, ctx) {
287
+ await ctx.client.delete(`/servers/${options.server_id}/keys/${options.id}`);
288
+ return { data: void 0 };
289
+ }
290
+ async function getSshKey(options, ctx) {
291
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/keys/${options.id}`)).key };
292
+ }
293
+ async function listSshKeys(options, ctx) {
294
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/keys`)).keys };
295
+ }
296
+ async function createSecurityRule(options, ctx) {
297
+ const { server_id, site_id, ...data } = options;
298
+ return { data: (await ctx.client.post(`/servers/${server_id}/sites/${site_id}/security-rules`, data)).security_rule };
299
+ }
300
+ async function deleteSecurityRule(options, ctx) {
301
+ await ctx.client.delete(`/servers/${options.server_id}/sites/${options.site_id}/security-rules/${options.id}`);
302
+ return { data: void 0 };
303
+ }
304
+ async function getSecurityRule(options, ctx) {
305
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}/security-rules/${options.id}`)).security_rule };
306
+ }
307
+ async function listSecurityRules(options, ctx) {
308
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}/security-rules`)).security_rules };
309
+ }
310
+ async function createRedirectRule(options, ctx) {
311
+ const { server_id, site_id, ...data } = options;
312
+ return { data: (await ctx.client.post(`/servers/${server_id}/sites/${site_id}/redirect-rules`, data)).redirect_rule };
313
+ }
314
+ async function deleteRedirectRule(options, ctx) {
315
+ await ctx.client.delete(`/servers/${options.server_id}/sites/${options.site_id}/redirect-rules/${options.id}`);
316
+ return { data: void 0 };
317
+ }
318
+ async function getRedirectRule(options, ctx) {
319
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}/redirect-rules/${options.id}`)).redirect_rule };
320
+ }
321
+ async function listRedirectRules(options, ctx) {
322
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}/redirect-rules`)).redirect_rules };
323
+ }
324
+ async function createMonitor(options, ctx) {
325
+ const { server_id, ...data } = options;
326
+ return { data: (await ctx.client.post(`/servers/${server_id}/monitors`, data)).monitor };
327
+ }
328
+ async function deleteMonitor(options, ctx) {
329
+ await ctx.client.delete(`/servers/${options.server_id}/monitors/${options.id}`);
330
+ return { data: void 0 };
331
+ }
332
+ async function getMonitor(options, ctx) {
333
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/monitors/${options.id}`)).monitor };
334
+ }
335
+ async function listMonitors(options, ctx) {
336
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/monitors`)).monitors };
337
+ }
338
+ async function createNginxTemplate(options, ctx) {
339
+ const { server_id, ...data } = options;
340
+ return { data: (await ctx.client.post(`/servers/${server_id}/nginx/templates`, data)).template };
341
+ }
342
+ async function deleteNginxTemplate(options, ctx) {
343
+ await ctx.client.delete(`/servers/${options.server_id}/nginx/templates/${options.id}`);
344
+ return { data: void 0 };
345
+ }
346
+ async function getNginxTemplate(options, ctx) {
347
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/nginx/templates/${options.id}`)).template };
348
+ }
349
+ async function listNginxTemplates(options, ctx) {
350
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/nginx/templates`)).templates };
351
+ }
352
+ async function updateNginxTemplate(options, ctx) {
353
+ const { server_id, id, ...data } = options;
354
+ return { data: (await ctx.client.put(`/servers/${server_id}/nginx/templates/${id}`, data)).template };
355
+ }
356
+ /**
357
+ * Get environment variables for a site.
358
+ */
359
+ async function getEnv(options, ctx) {
360
+ return { data: await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}/env`) };
361
+ }
362
+ /**
363
+ * Update environment variables for a site.
364
+ */
365
+ async function updateEnv(options, ctx) {
366
+ await ctx.client.put(`/servers/${options.server_id}/sites/${options.site_id}/env`, { content: options.content });
367
+ return { data: void 0 };
368
+ }
369
+ /**
370
+ * Get Nginx configuration for a site.
371
+ */
372
+ async function getNginxConfig(options, ctx) {
373
+ return { data: await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}/nginx`) };
374
+ }
375
+ /**
376
+ * Update Nginx configuration for a site.
377
+ */
378
+ async function updateNginxConfig(options, ctx) {
379
+ await ctx.client.put(`/servers/${options.server_id}/sites/${options.site_id}/nginx`, { content: options.content });
380
+ return { data: void 0 };
381
+ }
382
+ async function createRecipe(options, ctx) {
383
+ return { data: (await ctx.client.post("/recipes", options)).recipe };
384
+ }
385
+ async function deleteRecipe(options, ctx) {
386
+ await ctx.client.delete(`/recipes/${options.id}`);
387
+ return { data: void 0 };
388
+ }
389
+ async function getRecipe(options, ctx) {
390
+ return { data: (await ctx.client.get(`/recipes/${options.id}`)).recipe };
391
+ }
392
+ async function listRecipes(_options, ctx) {
393
+ return { data: (await ctx.client.get("/recipes")).recipes };
394
+ }
395
+ /**
396
+ * Run a recipe on specified servers.
397
+ */
398
+ async function runRecipe(options, ctx) {
399
+ await ctx.client.post(`/recipes/${options.id}/run`, { servers: options.servers });
400
+ return { data: void 0 };
401
+ }
402
+ /**
403
+ * Create a new backup configuration.
404
+ */
405
+ async function createBackupConfig(options, ctx) {
406
+ const { server_id, ...data } = options;
407
+ return { data: (await ctx.client.post(`/servers/${server_id}/backup-configs`, data)).backup };
408
+ }
409
+ /**
410
+ * Delete a backup configuration.
411
+ */
412
+ async function deleteBackupConfig(options, ctx) {
413
+ await ctx.client.delete(`/servers/${options.server_id}/backup-configs/${options.id}`);
414
+ return { data: void 0 };
415
+ }
416
+ /**
417
+ * Get a specific backup configuration.
418
+ */
419
+ async function getBackupConfig(options, ctx) {
420
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/backup-configs/${options.id}`)).backup };
421
+ }
422
+ /**
423
+ * List backup configurations for a server.
424
+ */
425
+ async function listBackupConfigs(options, ctx) {
426
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/backup-configs`)).backups };
427
+ }
428
+ /**
429
+ * Execute a command on a site.
430
+ */
431
+ async function createCommand(options, ctx) {
432
+ return { data: (await ctx.client.post(`/servers/${options.server_id}/sites/${options.site_id}/commands`, { command: options.command })).command };
433
+ }
434
+ /**
435
+ * Get a specific command.
436
+ */
437
+ async function getCommand(options, ctx) {
438
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}/commands/${options.id}`)).command };
439
+ }
440
+ /**
441
+ * List commands executed on a site.
442
+ */
443
+ async function listCommands(options, ctx) {
444
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}/commands`)).commands };
445
+ }
446
+ /**
447
+ * Create a new scheduled job (cron).
448
+ */
449
+ async function createScheduledJob(options, ctx) {
450
+ const { server_id, ...data } = options;
451
+ return { data: (await ctx.client.post(`/servers/${server_id}/jobs`, data)).job };
452
+ }
453
+ /**
454
+ * Delete a scheduled job.
455
+ */
456
+ async function deleteScheduledJob(options, ctx) {
457
+ await ctx.client.delete(`/servers/${options.server_id}/jobs/${options.id}`);
458
+ return { data: void 0 };
459
+ }
460
+ /**
461
+ * Get a specific scheduled job.
462
+ */
463
+ async function getScheduledJob(options, ctx) {
464
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/jobs/${options.id}`)).job };
465
+ }
466
+ /**
467
+ * List scheduled jobs (cron) on a server.
468
+ */
469
+ async function listScheduledJobs(options, ctx) {
470
+ return { data: (await ctx.client.get(`/servers/${options.server_id}/jobs`)).jobs };
471
+ }
472
+ /**
473
+ * Get the currently authenticated user.
474
+ */
475
+ async function getUser(_options, ctx) {
476
+ return { data: (await ctx.client.get("/user")).user };
477
+ }
478
+ export { ACTIONS, RESOURCES, activateCertificate, createBackupConfig, createCertificate, createCommand, createDaemon, createDatabase, createDatabaseUser, createFirewallRule, createMonitor, createNginxTemplate, createRecipe, createRedirectRule, createScheduledJob, createSecurityRule, createServer, createSite, createSshKey, createTestExecutorContext, deleteBackupConfig, deleteCertificate, deleteDaemon, deleteDatabase, deleteDatabaseUser, deleteFirewallRule, deleteMonitor, deleteNginxTemplate, deleteRecipe, deleteRedirectRule, deleteScheduledJob, deleteSecurityRule, deleteServer, deleteSite, deleteSshKey, deploySite, getBackupConfig, getCertificate, getCommand, getDaemon, getDatabase, getDatabaseUser, getDeploymentOutput, getDeploymentScript, getEnv, getFirewallRule, getMonitor, getNginxConfig, getNginxTemplate, getRecipe, getRedirectRule, getScheduledJob, getSecurityRule, getServer, getSite, getSshKey, getUser, listBackupConfigs, listCertificates, listCommands, listDaemons, listDatabaseUsers, listDatabases, listDeployments, listFirewallRules, listMonitors, listNginxTemplates, listRecipes, listRedirectRules, listScheduledJobs, listSecurityRules, listServers, listSites, listSshKeys, rebootServer, restartDaemon, runRecipe, updateDeploymentScript, updateEnv, updateNginxConfig, updateNginxTemplate };
479
+
480
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/constants.ts","../src/context.ts","../src/executors/servers/create.ts","../src/executors/servers/delete.ts","../src/executors/servers/get.ts","../src/executors/servers/list.ts","../src/executors/servers/reboot.ts","../src/executors/sites/create.ts","../src/executors/sites/delete.ts","../src/executors/sites/get.ts","../src/executors/sites/list.ts","../src/executors/deployments/deploy.ts","../src/executors/deployments/get-output.ts","../src/executors/deployments/get-script.ts","../src/executors/deployments/list.ts","../src/executors/deployments/update-script.ts","../src/executors/certificates/activate.ts","../src/executors/certificates/create.ts","../src/executors/certificates/delete.ts","../src/executors/certificates/get.ts","../src/executors/certificates/list.ts","../src/executors/databases/create.ts","../src/executors/databases/delete.ts","../src/executors/databases/get.ts","../src/executors/databases/list.ts","../src/executors/database-users/create.ts","../src/executors/database-users/delete.ts","../src/executors/database-users/get.ts","../src/executors/database-users/list.ts","../src/executors/daemons/create.ts","../src/executors/daemons/delete.ts","../src/executors/daemons/get.ts","../src/executors/daemons/list.ts","../src/executors/daemons/restart.ts","../src/executors/firewall-rules/create.ts","../src/executors/firewall-rules/delete.ts","../src/executors/firewall-rules/get.ts","../src/executors/firewall-rules/list.ts","../src/executors/ssh-keys/create.ts","../src/executors/ssh-keys/delete.ts","../src/executors/ssh-keys/get.ts","../src/executors/ssh-keys/list.ts","../src/executors/security-rules/create.ts","../src/executors/security-rules/delete.ts","../src/executors/security-rules/get.ts","../src/executors/security-rules/list.ts","../src/executors/redirect-rules/create.ts","../src/executors/redirect-rules/delete.ts","../src/executors/redirect-rules/get.ts","../src/executors/redirect-rules/list.ts","../src/executors/monitors/create.ts","../src/executors/monitors/delete.ts","../src/executors/monitors/get.ts","../src/executors/monitors/list.ts","../src/executors/nginx-templates/create.ts","../src/executors/nginx-templates/delete.ts","../src/executors/nginx-templates/get.ts","../src/executors/nginx-templates/list.ts","../src/executors/nginx-templates/update.ts","../src/executors/env/get.ts","../src/executors/env/update.ts","../src/executors/nginx/get.ts","../src/executors/nginx/update.ts","../src/executors/recipes/create.ts","../src/executors/recipes/delete.ts","../src/executors/recipes/get.ts","../src/executors/recipes/list.ts","../src/executors/recipes/run.ts","../src/executors/backups/create.ts","../src/executors/backups/delete.ts","../src/executors/backups/get.ts","../src/executors/backups/list.ts","../src/executors/commands/create.ts","../src/executors/commands/get.ts","../src/executors/commands/list.ts","../src/executors/scheduled-jobs/create.ts","../src/executors/scheduled-jobs/delete.ts","../src/executors/scheduled-jobs/get.ts","../src/executors/scheduled-jobs/list.ts","../src/executors/user/get.ts"],"sourcesContent":["/**\n * All supported resources.\n * Single source of truth — MCP schema and handlers derive from this.\n */\nexport const RESOURCES = [\n \"servers\",\n \"sites\",\n \"deployments\",\n \"certificates\",\n \"databases\",\n \"database-users\",\n \"daemons\",\n \"env\",\n \"nginx\",\n \"firewall-rules\",\n \"ssh-keys\",\n \"security-rules\",\n \"redirect-rules\",\n \"nginx-templates\",\n \"monitors\",\n \"recipes\",\n \"backups\",\n \"commands\",\n \"scheduled-jobs\",\n \"user\",\n] as const;\n\nexport type Resource = (typeof RESOURCES)[number];\n\n/**\n * All supported actions.\n * Single source of truth — MCP schema and handlers derive from this.\n */\nexport const ACTIONS = [\n \"list\",\n \"get\",\n \"create\",\n \"update\",\n \"delete\",\n \"deploy\",\n \"reboot\",\n \"restart\",\n \"activate\",\n \"run\",\n \"help\",\n \"schema\",\n] as const;\n\nexport type Action = (typeof ACTIONS)[number];\n","import type { HttpClient } from \"@studiometa/forge-api\";\n\n/**\n * Execution context injected into all executors.\n *\n * Provides access to the HTTP client and other dependencies.\n * Uses DI for testability — tests inject mocks via `createTestExecutorContext()`.\n */\nexport interface ExecutorContext {\n /** HTTP client for Forge API calls. */\n client: HttpClient;\n}\n\n/**\n * Result of an executor function.\n */\nexport interface ExecutorResult<T> {\n /** The response data. */\n data: T;\n /** Pagination metadata (for list operations). */\n meta?: { total_count?: number; current_page?: number };\n}\n\n/**\n * Create a test executor context with a mock HTTP client.\n *\n * @param overrides Partial overrides for the context.\n */\nexport function createTestExecutorContext(\n overrides: Partial<ExecutorContext> = {},\n): ExecutorContext {\n const defaultClient = new Proxy({} as HttpClient, {\n get: (_target, prop) => {\n return (..._args: unknown[]) => {\n throw new Error(\n `HttpClient.${String(prop)}() called without mock — inject a mock client in createTestExecutorContext()`,\n );\n };\n },\n });\n\n return {\n client: defaultClient,\n ...overrides,\n };\n}\n","import type { ForgeServer, ServerResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateServerOptions } from \"./types.ts\";\n\n/**\n * Create a new server.\n */\nexport async function createServer(\n options: CreateServerOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeServer>> {\n const response = await ctx.client.post<ServerResponse>(\"/servers\", options);\n const server = response.server;\n\n return {\n data: server,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteServerOptions } from \"./types.ts\";\n\n/**\n * Delete a server.\n */\nexport async function deleteServer(\n options: DeleteServerOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(`/servers/${options.server_id}`);\n\n return {\n data: undefined,\n };\n}\n","import type { ForgeServer, ServerResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetServerOptions } from \"./types.ts\";\n\n/**\n * Get a specific server by ID.\n */\nexport async function getServer(\n options: GetServerOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeServer>> {\n const response = await ctx.client.get<ServerResponse>(`/servers/${options.server_id}`);\n const server = response.server;\n\n return {\n data: server,\n };\n}\n","import type { ForgeServer, ServersResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListServersOptions } from \"./types.ts\";\n\n/**\n * List all servers.\n */\nexport async function listServers(\n _options: ListServersOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeServer[]>> {\n const response = await ctx.client.get<ServersResponse>(\"/servers\");\n const servers = response.servers;\n\n return {\n data: servers,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { RebootServerOptions } from \"./types.ts\";\n\n/**\n * Reboot a server.\n */\nexport async function rebootServer(\n options: RebootServerOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.post(`/servers/${options.server_id}/reboot`);\n\n return {\n data: undefined,\n };\n}\n","import type { ForgeSite, SiteResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateSiteOptions } from \"./types.ts\";\n\n/**\n * Create a new site on a server.\n */\nexport async function createSite(\n options: CreateSiteOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeSite>> {\n const { server_id, ...data } = options;\n const response = await ctx.client.post<SiteResponse>(`/servers/${server_id}/sites`, data);\n const site = response.site;\n\n return {\n data: site,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteSiteOptions } from \"./types.ts\";\n\n/**\n * Delete a site.\n */\nexport async function deleteSite(\n options: DeleteSiteOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(`/servers/${options.server_id}/sites/${options.site_id}`);\n\n return {\n data: undefined,\n };\n}\n","import type { ForgeSite, SiteResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetSiteOptions } from \"./types.ts\";\n\n/**\n * Get a specific site by ID.\n */\nexport async function getSite(\n options: GetSiteOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeSite>> {\n const response = await ctx.client.get<SiteResponse>(\n `/servers/${options.server_id}/sites/${options.site_id}`,\n );\n const site = response.site;\n\n return {\n data: site,\n };\n}\n","import type { ForgeSite, SitesResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListSitesOptions } from \"./types.ts\";\n\n/**\n * List all sites on a server.\n */\nexport async function listSites(\n options: ListSitesOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeSite[]>> {\n const response = await ctx.client.get<SitesResponse>(`/servers/${options.server_id}/sites`);\n const sites = response.sites;\n\n return {\n data: sites,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeploySiteOptions } from \"./types.ts\";\n\n/**\n * Trigger a deployment for a site.\n */\nexport async function deploySite(\n options: DeploySiteOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.post(`/servers/${options.server_id}/sites/${options.site_id}/deployment/deploy`);\n\n return {\n data: undefined,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetDeploymentOutputOptions } from \"./types.ts\";\n\n/**\n * Get the output of a deployment.\n */\nexport async function getDeploymentOutput(\n options: GetDeploymentOutputOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<string>> {\n const output = await ctx.client.get<string>(\n `/servers/${options.server_id}/sites/${options.site_id}/deployments/${options.deployment_id}/output`,\n );\n\n return {\n data: output,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetDeploymentScriptOptions } from \"./types.ts\";\n\n/**\n * Get the deployment script for a site.\n */\nexport async function getDeploymentScript(\n options: GetDeploymentScriptOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<string>> {\n const script = await ctx.client.get<string>(\n `/servers/${options.server_id}/sites/${options.site_id}/deployment/script`,\n );\n\n return {\n data: script,\n };\n}\n","import type { ForgeDeployment, DeploymentsResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListDeploymentsOptions } from \"./types.ts\";\n\n/**\n * List all deployments for a site.\n */\nexport async function listDeployments(\n options: ListDeploymentsOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeDeployment[]>> {\n const response = await ctx.client.get<DeploymentsResponse>(\n `/servers/${options.server_id}/sites/${options.site_id}/deployments`,\n );\n const deployments = response.deployments;\n\n return {\n data: deployments,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { UpdateDeploymentScriptOptions } from \"./types.ts\";\n\n/**\n * Update the deployment script for a site.\n */\nexport async function updateDeploymentScript(\n options: UpdateDeploymentScriptOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.put(`/servers/${options.server_id}/sites/${options.site_id}/deployment/script`, {\n content: options.content,\n });\n\n return {\n data: undefined,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ActivateCertificateOptions } from \"./types.ts\";\n\n/**\n * Activate an SSL certificate.\n */\nexport async function activateCertificate(\n options: ActivateCertificateOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.post(\n `/servers/${options.server_id}/sites/${options.site_id}/certificates/${options.id}/activate`,\n {},\n );\n\n return {\n data: undefined,\n };\n}\n","import type { CertificateResponse, ForgeCertificate } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateCertificateOptions } from \"./types.ts\";\n\n/**\n * Create a new SSL certificate.\n */\nexport async function createCertificate(\n options: CreateCertificateOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeCertificate>> {\n const { server_id, site_id, ...data } = options;\n const response = await ctx.client.post<CertificateResponse>(\n `/servers/${server_id}/sites/${site_id}/certificates`,\n data,\n );\n const cert = response.certificate;\n\n return {\n data: cert,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteCertificateOptions } from \"./types.ts\";\n\n/**\n * Delete an SSL certificate.\n */\nexport async function deleteCertificate(\n options: DeleteCertificateOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(\n `/servers/${options.server_id}/sites/${options.site_id}/certificates/${options.id}`,\n );\n\n return {\n data: undefined,\n };\n}\n","import type { CertificateResponse, ForgeCertificate } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetCertificateOptions } from \"./types.ts\";\n\n/**\n * Get a single SSL certificate.\n */\nexport async function getCertificate(\n options: GetCertificateOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeCertificate>> {\n const response = await ctx.client.get<CertificateResponse>(\n `/servers/${options.server_id}/sites/${options.site_id}/certificates/${options.id}`,\n );\n const cert = response.certificate;\n\n return {\n data: cert,\n };\n}\n","import type { CertificatesResponse, ForgeCertificate } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListCertificatesOptions } from \"./types.ts\";\n\n/**\n * List SSL certificates for a site.\n */\nexport async function listCertificates(\n options: ListCertificatesOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeCertificate[]>> {\n const response = await ctx.client.get<CertificatesResponse>(\n `/servers/${options.server_id}/sites/${options.site_id}/certificates`,\n );\n const certificates = response.certificates;\n\n return {\n data: certificates,\n };\n}\n","import type { DatabaseResponse, ForgeDatabase } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateDatabaseOptions } from \"./types.ts\";\n\n/**\n * Create a new database.\n */\nexport async function createDatabase(\n options: CreateDatabaseOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeDatabase>> {\n const { server_id, ...data } = options;\n const response = await ctx.client.post<DatabaseResponse>(`/servers/${server_id}/databases`, data);\n const db = response.database;\n\n return {\n data: db,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteDatabaseOptions } from \"./types.ts\";\n\n/**\n * Delete a database.\n */\nexport async function deleteDatabase(\n options: DeleteDatabaseOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(`/servers/${options.server_id}/databases/${options.id}`);\n\n return {\n data: undefined,\n };\n}\n","import type { DatabaseResponse, ForgeDatabase } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetDatabaseOptions } from \"./types.ts\";\n\n/**\n * Get a single database.\n */\nexport async function getDatabase(\n options: GetDatabaseOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeDatabase>> {\n const response = await ctx.client.get<DatabaseResponse>(\n `/servers/${options.server_id}/databases/${options.id}`,\n );\n const db = response.database;\n\n return {\n data: db,\n };\n}\n","import type { DatabasesResponse, ForgeDatabase } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListDatabasesOptions } from \"./types.ts\";\n\n/**\n * List databases on a server.\n */\nexport async function listDatabases(\n options: ListDatabasesOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeDatabase[]>> {\n const response = await ctx.client.get<DatabasesResponse>(\n `/servers/${options.server_id}/databases`,\n );\n const databases = response.databases;\n\n return {\n data: databases,\n };\n}\n","import type { DatabaseUserResponse, ForgeDatabaseUser } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateDatabaseUserOptions } from \"./types.ts\";\n\n/**\n * Create a new database user.\n */\nexport async function createDatabaseUser(\n options: CreateDatabaseUserOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeDatabaseUser>> {\n const { server_id, ...data } = options;\n const response = await ctx.client.post<DatabaseUserResponse>(\n `/servers/${server_id}/database-users`,\n data,\n );\n const user = response.user;\n\n return {\n data: user,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteDatabaseUserOptions } from \"./types.ts\";\n\n/**\n * Delete a database user.\n */\nexport async function deleteDatabaseUser(\n options: DeleteDatabaseUserOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(`/servers/${options.server_id}/database-users/${options.id}`);\n\n return {\n data: undefined,\n };\n}\n","import type { DatabaseUserResponse, ForgeDatabaseUser } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetDatabaseUserOptions } from \"./types.ts\";\n\n/**\n * Get a single database user.\n */\nexport async function getDatabaseUser(\n options: GetDatabaseUserOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeDatabaseUser>> {\n const response = await ctx.client.get<DatabaseUserResponse>(\n `/servers/${options.server_id}/database-users/${options.id}`,\n );\n const user = response.user;\n\n return {\n data: user,\n };\n}\n","import type { DatabaseUsersResponse, ForgeDatabaseUser } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListDatabaseUsersOptions } from \"./types.ts\";\n\n/**\n * List database users on a server.\n */\nexport async function listDatabaseUsers(\n options: ListDatabaseUsersOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeDatabaseUser[]>> {\n const response = await ctx.client.get<DatabaseUsersResponse>(\n `/servers/${options.server_id}/database-users`,\n );\n const users = response.users;\n\n return {\n data: users,\n };\n}\n","import type { DaemonResponse, ForgeDaemon } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateDaemonOptions } from \"./types.ts\";\n\n/**\n * Create a new daemon (background process).\n */\nexport async function createDaemon(\n options: CreateDaemonOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeDaemon>> {\n const { server_id, ...data } = options;\n const response = await ctx.client.post<DaemonResponse>(`/servers/${server_id}/daemons`, data);\n const daemon = response.daemon;\n\n return {\n data: daemon,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteDaemonOptions } from \"./types.ts\";\n\n/**\n * Delete a daemon.\n */\nexport async function deleteDaemon(\n options: DeleteDaemonOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(`/servers/${options.server_id}/daemons/${options.id}`);\n\n return {\n data: undefined,\n };\n}\n","import type { DaemonResponse, ForgeDaemon } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetDaemonOptions } from \"./types.ts\";\n\n/**\n * Get a single daemon.\n */\nexport async function getDaemon(\n options: GetDaemonOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeDaemon>> {\n const response = await ctx.client.get<DaemonResponse>(\n `/servers/${options.server_id}/daemons/${options.id}`,\n );\n const daemon = response.daemon;\n\n return {\n data: daemon,\n };\n}\n","import type { DaemonsResponse, ForgeDaemon } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListDaemonsOptions } from \"./types.ts\";\n\n/**\n * List daemons (background processes) on a server.\n */\nexport async function listDaemons(\n options: ListDaemonsOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeDaemon[]>> {\n const response = await ctx.client.get<DaemonsResponse>(`/servers/${options.server_id}/daemons`);\n const daemons = response.daemons;\n\n return {\n data: daemons,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { RestartDaemonOptions } from \"./types.ts\";\n\n/**\n * Restart a daemon.\n */\nexport async function restartDaemon(\n options: RestartDaemonOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.post(`/servers/${options.server_id}/daemons/${options.id}/restart`, {});\n\n return {\n data: undefined,\n };\n}\n","import type { FirewallRuleResponse, ForgeFirewallRule } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateFirewallRuleOptions } from \"./types.ts\";\n\nexport async function createFirewallRule(\n options: CreateFirewallRuleOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeFirewallRule>> {\n const { server_id, ...data } = options;\n const response = await ctx.client.post<FirewallRuleResponse>(\n `/servers/${server_id}/firewall-rules`,\n data,\n );\n const rule = response.rule;\n\n return {\n data: rule,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteFirewallRuleOptions } from \"./types.ts\";\n\nexport async function deleteFirewallRule(\n options: DeleteFirewallRuleOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(`/servers/${options.server_id}/firewall-rules/${options.id}`);\n\n return {\n data: undefined,\n };\n}\n","import type { FirewallRuleResponse, ForgeFirewallRule } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetFirewallRuleOptions } from \"./types.ts\";\n\nexport async function getFirewallRule(\n options: GetFirewallRuleOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeFirewallRule>> {\n const response = await ctx.client.get<FirewallRuleResponse>(\n `/servers/${options.server_id}/firewall-rules/${options.id}`,\n );\n const rule = response.rule;\n\n return {\n data: rule,\n };\n}\n","import type { FirewallRulesResponse, ForgeFirewallRule } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListFirewallRulesOptions } from \"./types.ts\";\n\nexport async function listFirewallRules(\n options: ListFirewallRulesOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeFirewallRule[]>> {\n const response = await ctx.client.get<FirewallRulesResponse>(\n `/servers/${options.server_id}/firewall-rules`,\n );\n const rules = response.rules;\n return {\n data: rules,\n };\n}\n","import type { ForgeSshKey, SshKeyResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateSshKeyOptions } from \"./types.ts\";\n\nexport async function createSshKey(\n options: CreateSshKeyOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeSshKey>> {\n const { server_id, ...data } = options;\n const response = await ctx.client.post<SshKeyResponse>(`/servers/${server_id}/keys`, data);\n const key = response.key;\n\n return {\n data: key,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteSshKeyOptions } from \"./types.ts\";\n\nexport async function deleteSshKey(\n options: DeleteSshKeyOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(`/servers/${options.server_id}/keys/${options.id}`);\n\n return {\n data: undefined,\n };\n}\n","import type { ForgeSshKey, SshKeyResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetSshKeyOptions } from \"./types.ts\";\n\nexport async function getSshKey(\n options: GetSshKeyOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeSshKey>> {\n const response = await ctx.client.get<SshKeyResponse>(\n `/servers/${options.server_id}/keys/${options.id}`,\n );\n const key = response.key;\n\n return {\n data: key,\n };\n}\n","import type { ForgeSshKey, SshKeysResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListSshKeysOptions } from \"./types.ts\";\n\nexport async function listSshKeys(\n options: ListSshKeysOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeSshKey[]>> {\n const response = await ctx.client.get<SshKeysResponse>(`/servers/${options.server_id}/keys`);\n const keys = response.keys;\n return {\n data: keys,\n };\n}\n","import type { ForgeSecurityRule, SecurityRuleResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateSecurityRuleOptions } from \"./types.ts\";\n\nexport async function createSecurityRule(\n options: CreateSecurityRuleOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeSecurityRule>> {\n const { server_id, site_id, ...data } = options;\n const response = await ctx.client.post<SecurityRuleResponse>(\n `/servers/${server_id}/sites/${site_id}/security-rules`,\n data,\n );\n const rule = response.security_rule;\n\n return {\n data: rule,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteSecurityRuleOptions } from \"./types.ts\";\n\nexport async function deleteSecurityRule(\n options: DeleteSecurityRuleOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(\n `/servers/${options.server_id}/sites/${options.site_id}/security-rules/${options.id}`,\n );\n\n return {\n data: undefined,\n };\n}\n","import type { ForgeSecurityRule, SecurityRuleResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetSecurityRuleOptions } from \"./types.ts\";\n\nexport async function getSecurityRule(\n options: GetSecurityRuleOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeSecurityRule>> {\n const response = await ctx.client.get<SecurityRuleResponse>(\n `/servers/${options.server_id}/sites/${options.site_id}/security-rules/${options.id}`,\n );\n const rule = response.security_rule;\n\n return {\n data: rule,\n };\n}\n","import type { ForgeSecurityRule, SecurityRulesResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListSecurityRulesOptions } from \"./types.ts\";\n\nexport async function listSecurityRules(\n options: ListSecurityRulesOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeSecurityRule[]>> {\n const response = await ctx.client.get<SecurityRulesResponse>(\n `/servers/${options.server_id}/sites/${options.site_id}/security-rules`,\n );\n const rules = response.security_rules;\n\n return {\n data: rules,\n };\n}\n","import type { ForgeRedirectRule, RedirectRuleResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateRedirectRuleOptions } from \"./types.ts\";\n\nexport async function createRedirectRule(\n options: CreateRedirectRuleOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeRedirectRule>> {\n const { server_id, site_id, ...data } = options;\n const response = await ctx.client.post<RedirectRuleResponse>(\n `/servers/${server_id}/sites/${site_id}/redirect-rules`,\n data,\n );\n const rule = response.redirect_rule;\n\n return {\n data: rule,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteRedirectRuleOptions } from \"./types.ts\";\n\nexport async function deleteRedirectRule(\n options: DeleteRedirectRuleOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(\n `/servers/${options.server_id}/sites/${options.site_id}/redirect-rules/${options.id}`,\n );\n\n return {\n data: undefined,\n };\n}\n","import type { ForgeRedirectRule, RedirectRuleResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetRedirectRuleOptions } from \"./types.ts\";\n\nexport async function getRedirectRule(\n options: GetRedirectRuleOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeRedirectRule>> {\n const response = await ctx.client.get<RedirectRuleResponse>(\n `/servers/${options.server_id}/sites/${options.site_id}/redirect-rules/${options.id}`,\n );\n const rule = response.redirect_rule;\n\n return {\n data: rule,\n };\n}\n","import type { ForgeRedirectRule, RedirectRulesResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListRedirectRulesOptions } from \"./types.ts\";\n\nexport async function listRedirectRules(\n options: ListRedirectRulesOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeRedirectRule[]>> {\n const response = await ctx.client.get<RedirectRulesResponse>(\n `/servers/${options.server_id}/sites/${options.site_id}/redirect-rules`,\n );\n const rules = response.redirect_rules;\n return {\n data: rules,\n };\n}\n","import type { ForgeMonitor, MonitorResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateMonitorOptions } from \"./types.ts\";\n\nexport async function createMonitor(\n options: CreateMonitorOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeMonitor>> {\n const { server_id, ...data } = options;\n const response = await ctx.client.post<MonitorResponse>(`/servers/${server_id}/monitors`, data);\n const monitor = response.monitor;\n\n return {\n data: monitor,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteMonitorOptions } from \"./types.ts\";\n\nexport async function deleteMonitor(\n options: DeleteMonitorOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(`/servers/${options.server_id}/monitors/${options.id}`);\n\n return {\n data: undefined,\n };\n}\n","import type { ForgeMonitor, MonitorResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetMonitorOptions } from \"./types.ts\";\n\nexport async function getMonitor(\n options: GetMonitorOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeMonitor>> {\n const response = await ctx.client.get<MonitorResponse>(\n `/servers/${options.server_id}/monitors/${options.id}`,\n );\n const monitor = response.monitor;\n\n return {\n data: monitor,\n };\n}\n","import type { ForgeMonitor, MonitorsResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListMonitorsOptions } from \"./types.ts\";\n\nexport async function listMonitors(\n options: ListMonitorsOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeMonitor[]>> {\n const response = await ctx.client.get<MonitorsResponse>(`/servers/${options.server_id}/monitors`);\n const monitors = response.monitors;\n return {\n data: monitors,\n };\n}\n","import type { ForgeNginxTemplate, NginxTemplateResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateNginxTemplateOptions } from \"./types.ts\";\n\nexport async function createNginxTemplate(\n options: CreateNginxTemplateOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeNginxTemplate>> {\n const { server_id, ...data } = options;\n const response = await ctx.client.post<NginxTemplateResponse>(\n `/servers/${server_id}/nginx/templates`,\n data,\n );\n const template = response.template;\n\n return {\n data: template,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteNginxTemplateOptions } from \"./types.ts\";\n\nexport async function deleteNginxTemplate(\n options: DeleteNginxTemplateOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(`/servers/${options.server_id}/nginx/templates/${options.id}`);\n\n return {\n data: undefined,\n };\n}\n","import type { ForgeNginxTemplate, NginxTemplateResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetNginxTemplateOptions } from \"./types.ts\";\n\nexport async function getNginxTemplate(\n options: GetNginxTemplateOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeNginxTemplate>> {\n const response = await ctx.client.get<NginxTemplateResponse>(\n `/servers/${options.server_id}/nginx/templates/${options.id}`,\n );\n const template = response.template;\n\n return {\n data: template,\n };\n}\n","import type { ForgeNginxTemplate, NginxTemplatesResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListNginxTemplatesOptions } from \"./types.ts\";\n\nexport async function listNginxTemplates(\n options: ListNginxTemplatesOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeNginxTemplate[]>> {\n const response = await ctx.client.get<NginxTemplatesResponse>(\n `/servers/${options.server_id}/nginx/templates`,\n );\n const templates = response.templates;\n return {\n data: templates,\n };\n}\n","import type { ForgeNginxTemplate, NginxTemplateResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { UpdateNginxTemplateOptions } from \"./types.ts\";\n\nexport async function updateNginxTemplate(\n options: UpdateNginxTemplateOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeNginxTemplate>> {\n const { server_id, id, ...data } = options;\n const response = await ctx.client.put<NginxTemplateResponse>(\n `/servers/${server_id}/nginx/templates/${id}`,\n data,\n );\n const template = response.template;\n\n return {\n data: template,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetEnvOptions } from \"./types.ts\";\n\n/**\n * Get environment variables for a site.\n */\nexport async function getEnv(\n options: GetEnvOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<string>> {\n const content = await ctx.client.get<string>(\n `/servers/${options.server_id}/sites/${options.site_id}/env`,\n );\n\n return {\n data: content,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { UpdateEnvOptions } from \"./types.ts\";\n\n/**\n * Update environment variables for a site.\n */\nexport async function updateEnv(\n options: UpdateEnvOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.put(`/servers/${options.server_id}/sites/${options.site_id}/env`, {\n content: options.content,\n });\n\n return {\n data: undefined,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetNginxConfigOptions } from \"./types.ts\";\n\n/**\n * Get Nginx configuration for a site.\n */\nexport async function getNginxConfig(\n options: GetNginxConfigOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<string>> {\n const content = await ctx.client.get<string>(\n `/servers/${options.server_id}/sites/${options.site_id}/nginx`,\n );\n\n return {\n data: content,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { UpdateNginxConfigOptions } from \"./types.ts\";\n\n/**\n * Update Nginx configuration for a site.\n */\nexport async function updateNginxConfig(\n options: UpdateNginxConfigOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.put(`/servers/${options.server_id}/sites/${options.site_id}/nginx`, {\n content: options.content,\n });\n\n return {\n data: undefined,\n };\n}\n","import type { ForgeRecipe, RecipeResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateRecipeOptions } from \"./types.ts\";\n\nexport async function createRecipe(\n options: CreateRecipeOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeRecipe>> {\n const response = await ctx.client.post<RecipeResponse>(\"/recipes\", options);\n const recipe = response.recipe;\n\n return {\n data: recipe,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteRecipeOptions } from \"./types.ts\";\n\nexport async function deleteRecipe(\n options: DeleteRecipeOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(`/recipes/${options.id}`);\n\n return {\n data: undefined,\n };\n}\n","import type { ForgeRecipe, RecipeResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetRecipeOptions } from \"./types.ts\";\n\nexport async function getRecipe(\n options: GetRecipeOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeRecipe>> {\n const response = await ctx.client.get<RecipeResponse>(`/recipes/${options.id}`);\n const recipe = response.recipe;\n\n return {\n data: recipe,\n };\n}\n","import type { ForgeRecipe, RecipesResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListRecipesOptions } from \"./types.ts\";\n\nexport async function listRecipes(\n _options: ListRecipesOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeRecipe[]>> {\n const response = await ctx.client.get<RecipesResponse>(\"/recipes\");\n const recipes = response.recipes;\n return {\n data: recipes,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { RunRecipeOptions } from \"./types.ts\";\n\n/**\n * Run a recipe on specified servers.\n */\nexport async function runRecipe(\n options: RunRecipeOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.post(`/recipes/${options.id}/run`, {\n servers: options.servers,\n });\n\n return {\n data: undefined,\n };\n}\n","import type { BackupConfigResponse, ForgeBackupConfig } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateBackupConfigOptions } from \"./types.ts\";\n\n/**\n * Create a new backup configuration.\n */\nexport async function createBackupConfig(\n options: CreateBackupConfigOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeBackupConfig>> {\n const { server_id, ...data } = options;\n const response = await ctx.client.post<BackupConfigResponse>(\n `/servers/${server_id}/backup-configs`,\n data,\n );\n const backup = response.backup;\n\n return {\n data: backup,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteBackupConfigOptions } from \"./types.ts\";\n\n/**\n * Delete a backup configuration.\n */\nexport async function deleteBackupConfig(\n options: DeleteBackupConfigOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(`/servers/${options.server_id}/backup-configs/${options.id}`);\n\n return {\n data: undefined,\n };\n}\n","import type { BackupConfigResponse, ForgeBackupConfig } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetBackupConfigOptions } from \"./types.ts\";\n\n/**\n * Get a specific backup configuration.\n */\nexport async function getBackupConfig(\n options: GetBackupConfigOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeBackupConfig>> {\n const response = await ctx.client.get<BackupConfigResponse>(\n `/servers/${options.server_id}/backup-configs/${options.id}`,\n );\n const backup = response.backup;\n\n return {\n data: backup,\n };\n}\n","import type { BackupConfigsResponse, ForgeBackupConfig } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListBackupConfigsOptions } from \"./types.ts\";\n\n/**\n * List backup configurations for a server.\n */\nexport async function listBackupConfigs(\n options: ListBackupConfigsOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeBackupConfig[]>> {\n const response = await ctx.client.get<BackupConfigsResponse>(\n `/servers/${options.server_id}/backup-configs`,\n );\n const backups = response.backups;\n\n return {\n data: backups,\n };\n}\n","import type { CommandResponse, ForgeCommand } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateCommandOptions } from \"./types.ts\";\n\n/**\n * Execute a command on a site.\n */\nexport async function createCommand(\n options: CreateCommandOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeCommand>> {\n const response = await ctx.client.post<CommandResponse>(\n `/servers/${options.server_id}/sites/${options.site_id}/commands`,\n { command: options.command },\n );\n const command = response.command;\n\n return {\n data: command,\n };\n}\n","import type { CommandResponse, ForgeCommand } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetCommandOptions } from \"./types.ts\";\n\n/**\n * Get a specific command.\n */\nexport async function getCommand(\n options: GetCommandOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeCommand>> {\n const response = await ctx.client.get<CommandResponse>(\n `/servers/${options.server_id}/sites/${options.site_id}/commands/${options.id}`,\n );\n const command = response.command;\n\n return {\n data: command,\n };\n}\n","import type { CommandsResponse, ForgeCommand } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListCommandsOptions } from \"./types.ts\";\n\n/**\n * List commands executed on a site.\n */\nexport async function listCommands(\n options: ListCommandsOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeCommand[]>> {\n const response = await ctx.client.get<CommandsResponse>(\n `/servers/${options.server_id}/sites/${options.site_id}/commands`,\n );\n const commands = response.commands;\n\n return {\n data: commands,\n };\n}\n","import type { ForgeScheduledJob, ScheduledJobResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { CreateScheduledJobOptions } from \"./types.ts\";\n\n/**\n * Create a new scheduled job (cron).\n */\nexport async function createScheduledJob(\n options: CreateScheduledJobOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeScheduledJob>> {\n const { server_id, ...data } = options;\n const response = await ctx.client.post<ScheduledJobResponse>(`/servers/${server_id}/jobs`, data);\n const job = response.job;\n\n return {\n data: job,\n };\n}\n","import type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { DeleteScheduledJobOptions } from \"./types.ts\";\n\n/**\n * Delete a scheduled job.\n */\nexport async function deleteScheduledJob(\n options: DeleteScheduledJobOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<void>> {\n await ctx.client.delete(`/servers/${options.server_id}/jobs/${options.id}`);\n\n return {\n data: undefined,\n };\n}\n","import type { ForgeScheduledJob, ScheduledJobResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetScheduledJobOptions } from \"./types.ts\";\n\n/**\n * Get a specific scheduled job.\n */\nexport async function getScheduledJob(\n options: GetScheduledJobOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeScheduledJob>> {\n const response = await ctx.client.get<ScheduledJobResponse>(\n `/servers/${options.server_id}/jobs/${options.id}`,\n );\n const job = response.job;\n\n return {\n data: job,\n };\n}\n","import type { ForgeScheduledJob, ScheduledJobsResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { ListScheduledJobsOptions } from \"./types.ts\";\n\n/**\n * List scheduled jobs (cron) on a server.\n */\nexport async function listScheduledJobs(\n options: ListScheduledJobsOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeScheduledJob[]>> {\n const response = await ctx.client.get<ScheduledJobsResponse>(\n `/servers/${options.server_id}/jobs`,\n );\n const jobs = response.jobs;\n\n return {\n data: jobs,\n };\n}\n","import type { ForgeUser, UserResponse } from \"@studiometa/forge-api\";\nimport type { ExecutorContext, ExecutorResult } from \"../../context.ts\";\n\nimport type { GetUserOptions } from \"./types.ts\";\n\n/**\n * Get the currently authenticated user.\n */\nexport async function getUser(\n _options: GetUserOptions,\n ctx: ExecutorContext,\n): Promise<ExecutorResult<ForgeUser>> {\n const response = await ctx.client.get<UserResponse>(\"/user\");\n const user = response.user;\n\n return {\n data: user,\n };\n}\n"],"mappings":";;;;AAIA,MAAa,YAAY;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;AAQD,MAAa,UAAU;CACrB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;AClBD,SAAgB,0BACd,YAAsC,EAAE,EACvB;AAWjB,QAAO;EACL,QAXoB,IAAI,MAAM,EAAE,EAAgB,EAChD,MAAM,SAAS,SAAS;AACtB,WAAQ,GAAG,UAAqB;AAC9B,UAAM,IAAI,MACR,cAAc,OAAO,KAAK,CAAC,8EAC5B;;KAGN,CAAC;EAIA,GAAG;EACJ;;;;;ACpCH,eAAsB,aACpB,SACA,KACsC;AAItC,QAAO,EACL,OAJe,MAAM,IAAI,OAAO,KAAqB,YAAY,QAAQ,EACnD,QAIvB;;;;;ACVH,eAAsB,aACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OAAO,YAAY,QAAQ,YAAY;AAExD,QAAO,EACL,MAAM,KAAA,GACP;;;;;ACPH,eAAsB,UACpB,SACA,KACsC;AAItC,QAAO,EACL,OAJe,MAAM,IAAI,OAAO,IAAoB,YAAY,QAAQ,YAAY,EAC9D,QAIvB;;;;;ACTH,eAAsB,YACpB,UACA,KACwC;AAIxC,QAAO,EACL,OAJe,MAAM,IAAI,OAAO,IAAqB,WAAW,EACzC,SAIxB;;;;;ACVH,eAAsB,aACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,KAAK,YAAY,QAAQ,UAAU,SAAS;AAE7D,QAAO,EACL,MAAM,KAAA,GACP;;;;;ACPH,eAAsB,WACpB,SACA,KACoC;CACpC,MAAM,EAAE,WAAW,GAAG,SAAS;AAI/B,QAAO,EACL,OAJe,MAAM,IAAI,OAAO,KAAmB,YAAY,UAAU,SAAS,KAAK,EACnE,MAIrB;;;;;ACXH,eAAsB,WACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OAAO,YAAY,QAAQ,UAAU,SAAS,QAAQ,UAAU;AAEjF,QAAO,EACL,MAAM,KAAA,GACP;;;;;ACPH,eAAsB,QACpB,SACA,KACoC;AAMpC,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,SAAS,QAAQ,UAChD,EACqB,MAIrB;;;;;ACXH,eAAsB,UACpB,SACA,KACsC;AAItC,QAAO,EACL,OAJe,MAAM,IAAI,OAAO,IAAmB,YAAY,QAAQ,UAAU,QAAQ,EACpE,OAItB;;;;;ACVH,eAAsB,WACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,KAAK,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,oBAAoB;AAEjG,QAAO,EACL,MAAM,KAAA,GACP;;;;;ACRH,eAAsB,oBACpB,SACA,KACiC;AAKjC,QAAO,EACL,MALa,MAAM,IAAI,OAAO,IAC9B,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,eAAe,QAAQ,cAAc,SAC7F,EAIA;;;;;ACVH,eAAsB,oBACpB,SACA,KACiC;AAKjC,QAAO,EACL,MALa,MAAM,IAAI,OAAO,IAC9B,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,oBACxD,EAIA;;;;;ACTH,eAAsB,gBACpB,SACA,KAC4C;AAM5C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,cACxD,EAC4B,aAI5B;;;;;ACZH,eAAsB,uBACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,IAAI,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,qBAAqB,EAC/F,SAAS,QAAQ,SAClB,CAAC;AAEF,QAAO,EACL,MAAM,KAAA,GACP;;;;;ACVH,eAAsB,oBACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,KACf,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,gBAAgB,QAAQ,GAAG,YAClF,EAAE,CACH;AAED,QAAO,EACL,MAAM,KAAA,GACP;;;;;ACVH,eAAsB,kBACpB,SACA,KAC2C;CAC3C,MAAM,EAAE,WAAW,SAAS,GAAG,SAAS;AAOxC,QAAO,EACL,OAPe,MAAM,IAAI,OAAO,KAChC,YAAY,UAAU,SAAS,QAAQ,gBACvC,KACD,EACqB,aAIrB;;;;;ACdH,eAAsB,kBACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OACf,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,gBAAgB,QAAQ,KAChF;AAED,QAAO,EACL,MAAM,KAAA,GACP;;;;;ACTH,eAAsB,eACpB,SACA,KAC2C;AAM3C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,gBAAgB,QAAQ,KAChF,EACqB,aAIrB;;;;;ACXH,eAAsB,iBACpB,SACA,KAC6C;AAM7C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,eACxD,EAC6B,cAI7B;;;;;ACXH,eAAsB,eACpB,SACA,KACwC;CACxC,MAAM,EAAE,WAAW,GAAG,SAAS;AAI/B,QAAO,EACL,OAJe,MAAM,IAAI,OAAO,KAAuB,YAAY,UAAU,aAAa,KAAK,EAC7E,UAInB;;;;;ACXH,eAAsB,eACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OAAO,YAAY,QAAQ,UAAU,aAAa,QAAQ,KAAK;AAEhF,QAAO,EACL,MAAM,KAAA,GACP;;;;;ACPH,eAAsB,YACpB,SACA,KACwC;AAMxC,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,aAAa,QAAQ,KACpD,EACmB,UAInB;;;;;ACXH,eAAsB,cACpB,SACA,KAC0C;AAM1C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,YAC/B,EAC0B,WAI1B;;;;;ACXH,eAAsB,mBACpB,SACA,KAC4C;CAC5C,MAAM,EAAE,WAAW,GAAG,SAAS;AAO/B,QAAO,EACL,OAPe,MAAM,IAAI,OAAO,KAChC,YAAY,UAAU,kBACtB,KACD,EACqB,MAIrB;;;;;ACdH,eAAsB,mBACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OAAO,YAAY,QAAQ,UAAU,kBAAkB,QAAQ,KAAK;AAErF,QAAO,EACL,MAAM,KAAA,GACP;;;;;ACPH,eAAsB,gBACpB,SACA,KAC4C;AAM5C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,kBAAkB,QAAQ,KACzD,EACqB,MAIrB;;;;;ACXH,eAAsB,kBACpB,SACA,KAC8C;AAM9C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,iBAC/B,EACsB,OAItB;;;;;ACXH,eAAsB,aACpB,SACA,KACsC;CACtC,MAAM,EAAE,WAAW,GAAG,SAAS;AAI/B,QAAO,EACL,OAJe,MAAM,IAAI,OAAO,KAAqB,YAAY,UAAU,WAAW,KAAK,EACrE,QAIvB;;;;;ACXH,eAAsB,aACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OAAO,YAAY,QAAQ,UAAU,WAAW,QAAQ,KAAK;AAE9E,QAAO,EACL,MAAM,KAAA,GACP;;;;;ACPH,eAAsB,UACpB,SACA,KACsC;AAMtC,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,WAAW,QAAQ,KAClD,EACuB,QAIvB;;;;;ACXH,eAAsB,YACpB,SACA,KACwC;AAIxC,QAAO,EACL,OAJe,MAAM,IAAI,OAAO,IAAqB,YAAY,QAAQ,UAAU,UAAU,EACtE,SAIxB;;;;;ACVH,eAAsB,cACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,KAAK,YAAY,QAAQ,UAAU,WAAW,QAAQ,GAAG,WAAW,EAAE,CAAC;AAExF,QAAO,EACL,MAAM,KAAA,GACP;;ACVH,eAAsB,mBACpB,SACA,KAC4C;CAC5C,MAAM,EAAE,WAAW,GAAG,SAAS;AAO/B,QAAO,EACL,OAPe,MAAM,IAAI,OAAO,KAChC,YAAY,UAAU,kBACtB,KACD,EACqB,MAIrB;;ACdH,eAAsB,mBACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OAAO,YAAY,QAAQ,UAAU,kBAAkB,QAAQ,KAAK;AAErF,QAAO,EACL,MAAM,KAAA,GACP;;ACPH,eAAsB,gBACpB,SACA,KAC4C;AAM5C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,kBAAkB,QAAQ,KACzD,EACqB,MAIrB;;ACXH,eAAsB,kBACpB,SACA,KAC8C;AAK9C,QAAO,EACL,OALe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,iBAC/B,EACsB,OAGtB;;ACVH,eAAsB,aACpB,SACA,KACsC;CACtC,MAAM,EAAE,WAAW,GAAG,SAAS;AAI/B,QAAO,EACL,OAJe,MAAM,IAAI,OAAO,KAAqB,YAAY,UAAU,QAAQ,KAAK,EACrE,KAIpB;;ACXH,eAAsB,aACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OAAO,YAAY,QAAQ,UAAU,QAAQ,QAAQ,KAAK;AAE3E,QAAO,EACL,MAAM,KAAA,GACP;;ACPH,eAAsB,UACpB,SACA,KACsC;AAMtC,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,QAAQ,QAAQ,KAC/C,EACoB,KAIpB;;ACXH,eAAsB,YACpB,SACA,KACwC;AAGxC,QAAO,EACL,OAHe,MAAM,IAAI,OAAO,IAAqB,YAAY,QAAQ,UAAU,OAAO,EACtE,MAGrB;;ACRH,eAAsB,mBACpB,SACA,KAC4C;CAC5C,MAAM,EAAE,WAAW,SAAS,GAAG,SAAS;AAOxC,QAAO,EACL,OAPe,MAAM,IAAI,OAAO,KAChC,YAAY,UAAU,SAAS,QAAQ,kBACvC,KACD,EACqB,eAIrB;;ACdH,eAAsB,mBACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OACf,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,kBAAkB,QAAQ,KAClF;AAED,QAAO,EACL,MAAM,KAAA,GACP;;ACTH,eAAsB,gBACpB,SACA,KAC4C;AAM5C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,kBAAkB,QAAQ,KAClF,EACqB,eAIrB;;ACXH,eAAsB,kBACpB,SACA,KAC8C;AAM9C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,iBACxD,EACsB,gBAItB;;ACXH,eAAsB,mBACpB,SACA,KAC4C;CAC5C,MAAM,EAAE,WAAW,SAAS,GAAG,SAAS;AAOxC,QAAO,EACL,OAPe,MAAM,IAAI,OAAO,KAChC,YAAY,UAAU,SAAS,QAAQ,kBACvC,KACD,EACqB,eAIrB;;ACdH,eAAsB,mBACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OACf,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,kBAAkB,QAAQ,KAClF;AAED,QAAO,EACL,MAAM,KAAA,GACP;;ACTH,eAAsB,gBACpB,SACA,KAC4C;AAM5C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,kBAAkB,QAAQ,KAClF,EACqB,eAIrB;;ACXH,eAAsB,kBACpB,SACA,KAC8C;AAK9C,QAAO,EACL,OALe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,iBACxD,EACsB,gBAGtB;;ACVH,eAAsB,cACpB,SACA,KACuC;CACvC,MAAM,EAAE,WAAW,GAAG,SAAS;AAI/B,QAAO,EACL,OAJe,MAAM,IAAI,OAAO,KAAsB,YAAY,UAAU,YAAY,KAAK,EACtE,SAIxB;;ACXH,eAAsB,cACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OAAO,YAAY,QAAQ,UAAU,YAAY,QAAQ,KAAK;AAE/E,QAAO,EACL,MAAM,KAAA,GACP;;ACPH,eAAsB,WACpB,SACA,KACuC;AAMvC,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,YAAY,QAAQ,KACnD,EACwB,SAIxB;;ACXH,eAAsB,aACpB,SACA,KACyC;AAGzC,QAAO,EACL,OAHe,MAAM,IAAI,OAAO,IAAsB,YAAY,QAAQ,UAAU,WAAW,EACvE,UAGzB;;ACRH,eAAsB,oBACpB,SACA,KAC6C;CAC7C,MAAM,EAAE,WAAW,GAAG,SAAS;AAO/B,QAAO,EACL,OAPe,MAAM,IAAI,OAAO,KAChC,YAAY,UAAU,mBACtB,KACD,EACyB,UAIzB;;ACdH,eAAsB,oBACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OAAO,YAAY,QAAQ,UAAU,mBAAmB,QAAQ,KAAK;AAEtF,QAAO,EACL,MAAM,KAAA,GACP;;ACPH,eAAsB,iBACpB,SACA,KAC6C;AAM7C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,mBAAmB,QAAQ,KAC1D,EACyB,UAIzB;;ACXH,eAAsB,mBACpB,SACA,KAC+C;AAK/C,QAAO,EACL,OALe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,kBAC/B,EAC0B,WAG1B;;ACVH,eAAsB,oBACpB,SACA,KAC6C;CAC7C,MAAM,EAAE,WAAW,IAAI,GAAG,SAAS;AAOnC,QAAO,EACL,OAPe,MAAM,IAAI,OAAO,IAChC,YAAY,UAAU,mBAAmB,MACzC,KACD,EACyB,UAIzB;;;;;ACXH,eAAsB,OACpB,SACA,KACiC;AAKjC,QAAO,EACL,MALc,MAAM,IAAI,OAAO,IAC/B,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,MACxD,EAIA;;;;;ACVH,eAAsB,UACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,IAAI,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,OAAO,EACjF,SAAS,QAAQ,SAClB,CAAC;AAEF,QAAO,EACL,MAAM,KAAA,GACP;;;;;ACVH,eAAsB,eACpB,SACA,KACiC;AAKjC,QAAO,EACL,MALc,MAAM,IAAI,OAAO,IAC/B,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,QACxD,EAIA;;;;;ACVH,eAAsB,kBACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,IAAI,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,SAAS,EACnF,SAAS,QAAQ,SAClB,CAAC;AAEF,QAAO,EACL,MAAM,KAAA,GACP;;ACZH,eAAsB,aACpB,SACA,KACsC;AAItC,QAAO,EACL,OAJe,MAAM,IAAI,OAAO,KAAqB,YAAY,QAAQ,EACnD,QAIvB;;ACVH,eAAsB,aACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OAAO,YAAY,QAAQ,KAAK;AAEjD,QAAO,EACL,MAAM,KAAA,GACP;;ACPH,eAAsB,UACpB,SACA,KACsC;AAItC,QAAO,EACL,OAJe,MAAM,IAAI,OAAO,IAAoB,YAAY,QAAQ,KAAK,EACvD,QAIvB;;ACTH,eAAsB,YACpB,UACA,KACwC;AAGxC,QAAO,EACL,OAHe,MAAM,IAAI,OAAO,IAAqB,WAAW,EACzC,SAGxB;;;;;ACNH,eAAsB,UACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,KAAK,YAAY,QAAQ,GAAG,OAAO,EAClD,SAAS,QAAQ,SAClB,CAAC;AAEF,QAAO,EACL,MAAM,KAAA,GACP;;;;;ACTH,eAAsB,mBACpB,SACA,KAC4C;CAC5C,MAAM,EAAE,WAAW,GAAG,SAAS;AAO/B,QAAO,EACL,OAPe,MAAM,IAAI,OAAO,KAChC,YAAY,UAAU,kBACtB,KACD,EACuB,QAIvB;;;;;ACdH,eAAsB,mBACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OAAO,YAAY,QAAQ,UAAU,kBAAkB,QAAQ,KAAK;AAErF,QAAO,EACL,MAAM,KAAA,GACP;;;;;ACPH,eAAsB,gBACpB,SACA,KAC4C;AAM5C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,kBAAkB,QAAQ,KACzD,EACuB,QAIvB;;;;;ACXH,eAAsB,kBACpB,SACA,KAC8C;AAM9C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,iBAC/B,EACwB,SAIxB;;;;;ACXH,eAAsB,cACpB,SACA,KACuC;AAOvC,QAAO,EACL,OAPe,MAAM,IAAI,OAAO,KAChC,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,YACvD,EAAE,SAAS,QAAQ,SAAS,CAC7B,EACwB,SAIxB;;;;;ACZH,eAAsB,WACpB,SACA,KACuC;AAMvC,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,YAAY,QAAQ,KAC5E,EACwB,SAIxB;;;;;ACXH,eAAsB,aACpB,SACA,KACyC;AAMzC,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,SAAS,QAAQ,QAAQ,WACxD,EACyB,UAIzB;;;;;ACXH,eAAsB,mBACpB,SACA,KAC4C;CAC5C,MAAM,EAAE,WAAW,GAAG,SAAS;AAI/B,QAAO,EACL,OAJe,MAAM,IAAI,OAAO,KAA2B,YAAY,UAAU,QAAQ,KAAK,EAC3E,KAIpB;;;;;ACXH,eAAsB,mBACpB,SACA,KAC+B;AAC/B,OAAM,IAAI,OAAO,OAAO,YAAY,QAAQ,UAAU,QAAQ,QAAQ,KAAK;AAE3E,QAAO,EACL,MAAM,KAAA,GACP;;;;;ACPH,eAAsB,gBACpB,SACA,KAC4C;AAM5C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,QAAQ,QAAQ,KAC/C,EACoB,KAIpB;;;;;ACXH,eAAsB,kBACpB,SACA,KAC8C;AAM9C,QAAO,EACL,OANe,MAAM,IAAI,OAAO,IAChC,YAAY,QAAQ,UAAU,OAC/B,EACqB,MAIrB;;;;;ACXH,eAAsB,QACpB,UACA,KACoC;AAIpC,QAAO,EACL,OAJe,MAAM,IAAI,OAAO,IAAkB,QAAQ,EACtC,MAIrB"}