mcpmake 0.1.1 → 0.2.1

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 (385) hide show
  1. package/README.md +88 -635
  2. package/dist/commands/bundle.d.ts +1 -0
  3. package/dist/commands/bundle.d.ts.map +1 -0
  4. package/dist/commands/bundle.js +5 -4
  5. package/dist/commands/bundle.js.map +1 -0
  6. package/dist/commands/ci.d.ts +1 -0
  7. package/dist/commands/ci.d.ts.map +1 -0
  8. package/dist/commands/ci.js +3 -2
  9. package/dist/commands/ci.js.map +1 -0
  10. package/dist/commands/deploy.d.ts +1 -0
  11. package/dist/commands/deploy.d.ts.map +1 -0
  12. package/dist/commands/deploy.js +4 -3
  13. package/dist/commands/deploy.js.map +1 -0
  14. package/dist/commands/diff.d.ts +1 -0
  15. package/dist/commands/diff.d.ts.map +1 -0
  16. package/dist/commands/diff.js +5 -4
  17. package/dist/commands/diff.js.map +1 -0
  18. package/dist/commands/from/describe.d.ts +1 -0
  19. package/dist/commands/from/describe.d.ts.map +1 -0
  20. package/dist/commands/from/describe.js +11 -10
  21. package/dist/commands/from/describe.js.map +1 -0
  22. package/dist/commands/from/har.d.ts +1 -0
  23. package/dist/commands/from/har.d.ts.map +1 -0
  24. package/dist/commands/from/har.js +14 -13
  25. package/dist/commands/from/har.js.map +1 -0
  26. package/dist/commands/from/openapi.d.ts +1 -0
  27. package/dist/commands/from/openapi.d.ts.map +1 -0
  28. package/dist/commands/from/openapi.js +17 -16
  29. package/dist/commands/from/openapi.js.map +1 -0
  30. package/dist/commands/from/postman.d.ts +1 -0
  31. package/dist/commands/from/postman.d.ts.map +1 -0
  32. package/dist/commands/from/postman.js +13 -12
  33. package/dist/commands/from/postman.js.map +1 -0
  34. package/dist/commands/from/stainless.d.ts +110 -0
  35. package/dist/commands/from/stainless.d.ts.map +1 -0
  36. package/dist/commands/from/stainless.js +272 -0
  37. package/dist/commands/from/stainless.js.map +1 -0
  38. package/dist/commands/from/target-support.d.ts +1 -0
  39. package/dist/commands/from/target-support.d.ts.map +1 -0
  40. package/dist/commands/from/target-support.js +2 -1
  41. package/dist/commands/from/target-support.js.map +1 -0
  42. package/dist/commands/from/url.d.ts +1 -0
  43. package/dist/commands/from/url.d.ts.map +1 -0
  44. package/dist/commands/from/url.js +14 -13
  45. package/dist/commands/from/url.js.map +1 -0
  46. package/dist/commands/from/website.d.ts +1 -0
  47. package/dist/commands/from/website.d.ts.map +1 -0
  48. package/dist/commands/from/website.js +17 -16
  49. package/dist/commands/from/website.js.map +1 -0
  50. package/dist/commands/lint.d.ts +1 -0
  51. package/dist/commands/lint.d.ts.map +1 -0
  52. package/dist/commands/lint.js +6 -5
  53. package/dist/commands/lint.js.map +1 -0
  54. package/dist/commands/merge.d.ts +1 -0
  55. package/dist/commands/merge.d.ts.map +1 -0
  56. package/dist/commands/merge.js +3 -2
  57. package/dist/commands/merge.js.map +1 -0
  58. package/dist/commands/publish.d.ts +1 -0
  59. package/dist/commands/publish.d.ts.map +1 -0
  60. package/dist/commands/publish.js +4 -3
  61. package/dist/commands/publish.js.map +1 -0
  62. package/dist/commands/rescan.d.ts +1 -0
  63. package/dist/commands/rescan.d.ts.map +1 -0
  64. package/dist/commands/rescan.js +12 -11
  65. package/dist/commands/rescan.js.map +1 -0
  66. package/dist/commands/update.d.ts +1 -0
  67. package/dist/commands/update.d.ts.map +1 -0
  68. package/dist/commands/update.js +10 -9
  69. package/dist/commands/update.js.map +1 -0
  70. package/dist/commands/verify.d.ts +1 -0
  71. package/dist/commands/verify.d.ts.map +1 -0
  72. package/dist/commands/verify.js +7 -6
  73. package/dist/commands/verify.js.map +1 -0
  74. package/dist/index.d.ts +1 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +23 -2
  77. package/dist/index.js.map +1 -0
  78. package/dist/registry/official-registry.d.ts +1 -0
  79. package/dist/registry/official-registry.d.ts.map +1 -0
  80. package/dist/registry/official-registry.js +1 -0
  81. package/dist/registry/official-registry.js.map +1 -0
  82. package/package.json +20 -46
  83. package/dist/analyzer/auth-detector.d.ts +0 -12
  84. package/dist/analyzer/auth-detector.js +0 -142
  85. package/dist/analyzer/dom-parser.d.ts +0 -10
  86. package/dist/analyzer/dom-parser.js +0 -259
  87. package/dist/analyzer/goal-crawler.d.ts +0 -25
  88. package/dist/analyzer/goal-crawler.js +0 -177
  89. package/dist/analyzer/hybrid-detector.d.ts +0 -28
  90. package/dist/analyzer/hybrid-detector.js +0 -96
  91. package/dist/analyzer/index.d.ts +0 -12
  92. package/dist/analyzer/index.js +0 -8
  93. package/dist/analyzer/screenshot-capture.d.ts +0 -29
  94. package/dist/analyzer/screenshot-capture.js +0 -42
  95. package/dist/analyzer/selector-builder.d.ts +0 -19
  96. package/dist/analyzer/selector-builder.js +0 -199
  97. package/dist/analyzer/semantic-analyzer.d.ts +0 -13
  98. package/dist/analyzer/semantic-analyzer.js +0 -145
  99. package/dist/analyzer/site-crawler.d.ts +0 -38
  100. package/dist/analyzer/site-crawler.js +0 -235
  101. package/dist/cloud/billing/billing-engine.d.ts +0 -44
  102. package/dist/cloud/billing/billing-engine.js +0 -81
  103. package/dist/cloud/billing/credit-store.d.ts +0 -64
  104. package/dist/cloud/billing/credit-store.js +0 -168
  105. package/dist/cloud/billing/index.d.ts +0 -4
  106. package/dist/cloud/billing/index.js +0 -2
  107. package/dist/cloud/billing/usage-store.d.ts +0 -42
  108. package/dist/cloud/billing/usage-store.js +0 -85
  109. package/dist/cloud/billing/usage-tracker.d.ts +0 -38
  110. package/dist/cloud/billing/usage-tracker.js +0 -95
  111. package/dist/cloud/build-pipeline.d.ts +0 -39
  112. package/dist/cloud/build-pipeline.js +0 -310
  113. package/dist/cloud/build-queue.d.ts +0 -30
  114. package/dist/cloud/build-queue.js +0 -70
  115. package/dist/cloud/caddy-manager.d.ts +0 -18
  116. package/dist/cloud/caddy-manager.js +0 -97
  117. package/dist/cloud/container-backend.d.ts +0 -62
  118. package/dist/cloud/container-backend.js +0 -59
  119. package/dist/cloud/container-manager.d.ts +0 -64
  120. package/dist/cloud/container-manager.js +0 -301
  121. package/dist/cloud/crypto.d.ts +0 -27
  122. package/dist/cloud/crypto.js +0 -63
  123. package/dist/cloud/db/index.d.ts +0 -27
  124. package/dist/cloud/db/index.js +0 -53
  125. package/dist/cloud/db/migrations.d.ts +0 -12
  126. package/dist/cloud/db/migrations.js +0 -329
  127. package/dist/cloud/db/pg-store.d.ts +0 -45
  128. package/dist/cloud/db/pg-store.js +0 -336
  129. package/dist/cloud/failure-tracker.d.ts +0 -51
  130. package/dist/cloud/failure-tracker.js +0 -102
  131. package/dist/cloud/idle-monitor.d.ts +0 -30
  132. package/dist/cloud/idle-monitor.js +0 -70
  133. package/dist/cloud/mailer.d.ts +0 -21
  134. package/dist/cloud/mailer.js +0 -193
  135. package/dist/cloud/mcp-proxy.d.ts +0 -58
  136. package/dist/cloud/mcp-proxy.js +0 -203
  137. package/dist/cloud/metric-samples.d.ts +0 -43
  138. package/dist/cloud/metric-samples.js +0 -85
  139. package/dist/cloud/metrics.d.ts +0 -26
  140. package/dist/cloud/metrics.js +0 -59
  141. package/dist/cloud/multipart.d.ts +0 -26
  142. package/dist/cloud/multipart.js +0 -132
  143. package/dist/cloud/observability.d.ts +0 -27
  144. package/dist/cloud/observability.js +0 -98
  145. package/dist/cloud/rate-limiter.d.ts +0 -31
  146. package/dist/cloud/rate-limiter.js +0 -58
  147. package/dist/cloud/request-security.d.ts +0 -5
  148. package/dist/cloud/request-security.js +0 -74
  149. package/dist/cloud/resource-monitor.d.ts +0 -69
  150. package/dist/cloud/resource-monitor.js +0 -130
  151. package/dist/cloud/secret-store.d.ts +0 -38
  152. package/dist/cloud/secret-store.js +0 -103
  153. package/dist/cloud/security.d.ts +0 -26
  154. package/dist/cloud/security.js +0 -142
  155. package/dist/cloud/server.d.ts +0 -21
  156. package/dist/cloud/server.js +0 -1079
  157. package/dist/cloud/shared-state.d.ts +0 -72
  158. package/dist/cloud/shared-state.js +0 -159
  159. package/dist/cloud/ssrf.d.ts +0 -43
  160. package/dist/cloud/ssrf.js +0 -150
  161. package/dist/cloud/store.d.ts +0 -41
  162. package/dist/cloud/store.js +0 -75
  163. package/dist/cloud/stripe.d.ts +0 -78
  164. package/dist/cloud/stripe.js +0 -317
  165. package/dist/cloud/telemetry-store.d.ts +0 -53
  166. package/dist/cloud/telemetry-store.js +0 -108
  167. package/dist/cloud/web/auth.d.ts +0 -225
  168. package/dist/cloud/web/auth.js +0 -555
  169. package/dist/cloud/web/charts.d.ts +0 -70
  170. package/dist/cloud/web/charts.js +0 -178
  171. package/dist/cloud/web/csrf.d.ts +0 -14
  172. package/dist/cloud/web/csrf.js +0 -22
  173. package/dist/cloud/web/docs.d.ts +0 -40
  174. package/dist/cloud/web/docs.js +0 -174
  175. package/dist/cloud/web/router.d.ts +0 -25
  176. package/dist/cloud/web/router.js +0 -1921
  177. package/dist/cloud/web/static/alpine.min.js +0 -5
  178. package/dist/cloud/web/static/favicon.svg +0 -4
  179. package/dist/cloud/web/static/htmx-sse.js +0 -290
  180. package/dist/cloud/web/static/htmx.min.js +0 -1
  181. package/dist/cloud/web/static/style.css +0 -2683
  182. package/dist/cloud/web/static-server.d.ts +0 -13
  183. package/dist/cloud/web/static-server.js +0 -73
  184. package/dist/cloud/web/template-engine.d.ts +0 -27
  185. package/dist/cloud/web/template-engine.js +0 -146
  186. package/dist/cloud/web/templates/layouts/admin.hbs +0 -57
  187. package/dist/cloud/web/templates/layouts/auth.hbs +0 -138
  188. package/dist/cloud/web/templates/layouts/base.hbs +0 -16
  189. package/dist/cloud/web/templates/layouts/dashboard.hbs +0 -39
  190. package/dist/cloud/web/templates/layouts/landing.hbs +0 -82
  191. package/dist/cloud/web/templates/pages/admin/overview.hbs +0 -123
  192. package/dist/cloud/web/templates/pages/admin/servers.hbs +0 -129
  193. package/dist/cloud/web/templates/pages/admin/telemetry.hbs +0 -39
  194. package/dist/cloud/web/templates/pages/admin/user-edit.hbs +0 -91
  195. package/dist/cloud/web/templates/pages/admin/users.hbs +0 -179
  196. package/dist/cloud/web/templates/pages/auth/forgot-password.hbs +0 -25
  197. package/dist/cloud/web/templates/pages/auth/login.hbs +0 -33
  198. package/dist/cloud/web/templates/pages/auth/register.hbs +0 -32
  199. package/dist/cloud/web/templates/pages/auth/reset-password.hbs +0 -34
  200. package/dist/cloud/web/templates/pages/dashboard/billing.hbs +0 -140
  201. package/dist/cloud/web/templates/pages/dashboard/create.hbs +0 -173
  202. package/dist/cloud/web/templates/pages/dashboard/index.hbs +0 -8
  203. package/dist/cloud/web/templates/pages/dashboard/server-detail.hbs +0 -280
  204. package/dist/cloud/web/templates/pages/dashboard/server-logs.hbs +0 -35
  205. package/dist/cloud/web/templates/pages/dashboard/server-metrics.hbs +0 -63
  206. package/dist/cloud/web/templates/pages/dashboard/servers-partial.hbs +0 -21
  207. package/dist/cloud/web/templates/pages/dashboard/servers.hbs +0 -44
  208. package/dist/cloud/web/templates/pages/docs/show.hbs +0 -16
  209. package/dist/cloud/web/templates/pages/errors/404.hbs +0 -9
  210. package/dist/cloud/web/templates/pages/errors/500.hbs +0 -8
  211. package/dist/cloud/web/templates/pages/landing/index.hbs +0 -223
  212. package/dist/cloud/web/templates/pages/legal/privacy.hbs +0 -71
  213. package/dist/cloud/web/templates/pages/legal/terms.hbs +0 -73
  214. package/dist/cloud/web/templates/partials/admin-stats.hbs +0 -52
  215. package/dist/cloud/web/templates/partials/flash-message.hbs +0 -6
  216. package/dist/cloud/web/templates/partials/pricing-table.hbs +0 -103
  217. package/dist/cloud/web/templates/partials/server-card.hbs +0 -19
  218. package/dist/cloud/web/templates/partials/status-badge.hbs +0 -1
  219. package/dist/config/configurable-command.d.ts +0 -13
  220. package/dist/config/configurable-command.js +0 -70
  221. package/dist/config/mcpmake-config.d.ts +0 -68
  222. package/dist/config/mcpmake-config.js +0 -207
  223. package/dist/docs/cli.md +0 -400
  224. package/dist/docs/mcp-2026-07-28-migration.md +0 -78
  225. package/dist/docs/migrate-from-stainless.md +0 -94
  226. package/dist/docs/quickstart.md +0 -166
  227. package/dist/docs/show-hn.md +0 -26
  228. package/dist/docs/website-servers.md +0 -169
  229. package/dist/emitter/code-writer.d.ts +0 -8
  230. package/dist/emitter/code-writer.js +0 -25
  231. package/dist/emitter/index.d.ts +0 -32
  232. package/dist/emitter/index.js +0 -280
  233. package/dist/emitter/mcpb-bundler.d.ts +0 -31
  234. package/dist/emitter/mcpb-bundler.js +0 -172
  235. package/dist/emitter/project-scaffolder.d.ts +0 -4
  236. package/dist/emitter/project-scaffolder.js +0 -89
  237. package/dist/emitter/python-template-loader.d.ts +0 -4
  238. package/dist/emitter/python-template-loader.js +0 -30
  239. package/dist/emitter/python-templates/dockerfile.hbs +0 -14
  240. package/dist/emitter/python-templates/env.example.hbs +0 -6
  241. package/dist/emitter/python-templates/requirements.txt.hbs +0 -4
  242. package/dist/emitter/python-templates/server.py.hbs +0 -77
  243. package/dist/emitter/site-scaffolder.d.ts +0 -13
  244. package/dist/emitter/site-scaffolder.js +0 -70
  245. package/dist/emitter/site-template-loader.d.ts +0 -5
  246. package/dist/emitter/site-template-loader.js +0 -47
  247. package/dist/emitter/site-templates/browser-manager.ts.hbs +0 -233
  248. package/dist/emitter/site-templates/config.ts.hbs +0 -28
  249. package/dist/emitter/site-templates/dockerfile.hbs +0 -31
  250. package/dist/emitter/site-templates/env.example.hbs +0 -19
  251. package/dist/emitter/site-templates/package.json.hbs +0 -26
  252. package/dist/emitter/site-templates/server-main-http.ts.hbs +0 -108
  253. package/dist/emitter/site-templates/server-main.ts.hbs +0 -23
  254. package/dist/emitter/site-templates/tool-handler-action.ts.hbs +0 -86
  255. package/dist/emitter/site-templates/tool-handler-form.ts.hbs +0 -116
  256. package/dist/emitter/site-templates/tool-handler-lifecycle.ts.hbs +0 -146
  257. package/dist/emitter/site-templates/tool-index.ts.hbs +0 -11
  258. package/dist/emitter/template-loader.d.ts +0 -1
  259. package/dist/emitter/template-loader.js +0 -27
  260. package/dist/emitter/templates/auth-provider.ts.hbs +0 -57
  261. package/dist/emitter/templates/config.ts.hbs +0 -63
  262. package/dist/emitter/templates/discovery.ts.hbs +0 -301
  263. package/dist/emitter/templates/dockerfile.hbs +0 -34
  264. package/dist/emitter/templates/env.example.hbs +0 -28
  265. package/dist/emitter/templates/gitignore.hbs +0 -5
  266. package/dist/emitter/templates/http-executor.ts.hbs +0 -117
  267. package/dist/emitter/templates/oauth.ts.hbs +0 -188
  268. package/dist/emitter/templates/package.json.hbs +0 -25
  269. package/dist/emitter/templates/prompts.ts.hbs +0 -22
  270. package/dist/emitter/templates/readme.md.hbs +0 -123
  271. package/dist/emitter/templates/resources.ts.hbs +0 -63
  272. package/dist/emitter/templates/server-main-http.ts.hbs +0 -407
  273. package/dist/emitter/templates/server-main.ts.hbs +0 -40
  274. package/dist/emitter/templates/task-handlers.ts.hbs +0 -189
  275. package/dist/emitter/templates/task-manager.ts.hbs +0 -139
  276. package/dist/emitter/templates/task-sse.ts.hbs +0 -105
  277. package/dist/emitter/templates/tool-handler.ts.hbs +0 -124
  278. package/dist/emitter/templates/tool-index.ts.hbs +0 -11
  279. package/dist/emitter/templates/tool-test.ts.hbs +0 -57
  280. package/dist/emitter/templates/trace.ts.hbs +0 -79
  281. package/dist/emitter/templates/tsconfig.json.hbs +0 -16
  282. package/dist/emitter/templates/types.ts.hbs +0 -5
  283. package/dist/emitter/worker-template-loader.d.ts +0 -5
  284. package/dist/emitter/worker-template-loader.js +0 -33
  285. package/dist/emitter/worker-templates/config.ts.hbs +0 -54
  286. package/dist/emitter/worker-templates/dev-vars.example.hbs +0 -10
  287. package/dist/emitter/worker-templates/gitignore.hbs +0 -6
  288. package/dist/emitter/worker-templates/package.json.hbs +0 -24
  289. package/dist/emitter/worker-templates/readme.md.hbs +0 -53
  290. package/dist/emitter/worker-templates/server.test.ts.hbs +0 -20
  291. package/dist/emitter/worker-templates/tool-handler.ts.hbs +0 -85
  292. package/dist/emitter/worker-templates/tool-index.ts.hbs +0 -28
  293. package/dist/emitter/worker-templates/tsconfig.json.hbs +0 -17
  294. package/dist/emitter/worker-templates/worker.ts.hbs +0 -242
  295. package/dist/emitter/worker-templates/wrangler.toml.hbs +0 -19
  296. package/dist/generator/spec-generator.d.ts +0 -6
  297. package/dist/generator/spec-generator.js +0 -50
  298. package/dist/parser/har-filter.d.ts +0 -8
  299. package/dist/parser/har-filter.js +0 -71
  300. package/dist/parser/har-loader.d.ts +0 -2
  301. package/dist/parser/har-loader.js +0 -14
  302. package/dist/parser/har-normalizer.d.ts +0 -20
  303. package/dist/parser/har-normalizer.js +0 -78
  304. package/dist/parser/index.d.ts +0 -10
  305. package/dist/parser/index.js +0 -6
  306. package/dist/parser/openapi-loader.d.ts +0 -6
  307. package/dist/parser/openapi-loader.js +0 -308
  308. package/dist/parser/operation-extractor.d.ts +0 -13
  309. package/dist/parser/operation-extractor.js +0 -155
  310. package/dist/parser/overlay-loader.d.ts +0 -10
  311. package/dist/parser/overlay-loader.js +0 -184
  312. package/dist/parser/postman-loader.d.ts +0 -9
  313. package/dist/parser/postman-loader.js +0 -106
  314. package/dist/parser/schema-converter.d.ts +0 -12
  315. package/dist/parser/schema-converter.js +0 -117
  316. package/dist/plugins/adapter.d.ts +0 -40
  317. package/dist/plugins/adapter.js +0 -15
  318. package/dist/plugins/loader.d.ts +0 -25
  319. package/dist/plugins/loader.js +0 -58
  320. package/dist/pricing.d.ts +0 -55
  321. package/dist/pricing.js +0 -133
  322. package/dist/providers/index.d.ts +0 -15
  323. package/dist/providers/index.js +0 -56
  324. package/dist/recorder/browser-recorder.d.ts +0 -22
  325. package/dist/recorder/browser-recorder.js +0 -205
  326. package/dist/rescan/diff-engine.d.ts +0 -5
  327. package/dist/rescan/diff-engine.js +0 -312
  328. package/dist/rescan/index.d.ts +0 -3
  329. package/dist/rescan/index.js +0 -2
  330. package/dist/rescan/rescan-runner.d.ts +0 -42
  331. package/dist/rescan/rescan-runner.js +0 -69
  332. package/dist/rescan/rescan-scheduler.d.ts +0 -41
  333. package/dist/rescan/rescan-scheduler.js +0 -179
  334. package/dist/site-transformer/browser-tools.d.ts +0 -10
  335. package/dist/site-transformer/browser-tools.js +0 -59
  336. package/dist/site-transformer/index.d.ts +0 -2
  337. package/dist/site-transformer/index.js +0 -2
  338. package/dist/site-transformer/selector-healer.d.ts +0 -8
  339. package/dist/site-transformer/selector-healer.js +0 -106
  340. package/dist/site-transformer/tool-generator.d.ts +0 -13
  341. package/dist/site-transformer/tool-generator.js +0 -245
  342. package/dist/transformer/auth-detector.d.ts +0 -13
  343. package/dist/transformer/auth-detector.js +0 -90
  344. package/dist/transformer/catalog-builder.d.ts +0 -18
  345. package/dist/transformer/catalog-builder.js +0 -56
  346. package/dist/transformer/client-compat.d.ts +0 -6
  347. package/dist/transformer/client-compat.js +0 -44
  348. package/dist/transformer/har-clusterer.d.ts +0 -9
  349. package/dist/transformer/har-clusterer.js +0 -27
  350. package/dist/transformer/har-dedup.d.ts +0 -10
  351. package/dist/transformer/har-dedup.js +0 -81
  352. package/dist/transformer/har-schema-inferrer.d.ts +0 -15
  353. package/dist/transformer/har-schema-inferrer.js +0 -90
  354. package/dist/transformer/har-to-operations.d.ts +0 -13
  355. package/dist/transformer/har-to-operations.js +0 -192
  356. package/dist/transformer/index.d.ts +0 -8
  357. package/dist/transformer/index.js +0 -6
  358. package/dist/transformer/llm-namer.d.ts +0 -6
  359. package/dist/transformer/llm-namer.js +0 -59
  360. package/dist/transformer/naming.d.ts +0 -4
  361. package/dist/transformer/naming.js +0 -30
  362. package/dist/transformer/operation-filter.d.ts +0 -13
  363. package/dist/transformer/operation-filter.js +0 -52
  364. package/dist/transformer/resource-builder.d.ts +0 -12
  365. package/dist/transformer/resource-builder.js +0 -80
  366. package/dist/transformer/schema-merger.d.ts +0 -14
  367. package/dist/transformer/schema-merger.js +0 -65
  368. package/dist/transformer/tool-builder.d.ts +0 -3
  369. package/dist/transformer/tool-builder.js +0 -114
  370. package/dist/types/index.d.ts +0 -131
  371. package/dist/types/index.js +0 -1
  372. package/dist/types/site.d.ts +0 -284
  373. package/dist/types/site.js +0 -8
  374. package/dist/utils/fail.d.ts +0 -48
  375. package/dist/utils/fail.js +0 -204
  376. package/dist/utils/fs.d.ts +0 -5
  377. package/dist/utils/fs.js +0 -28
  378. package/dist/utils/interactive.d.ts +0 -6
  379. package/dist/utils/interactive.js +0 -30
  380. package/dist/utils/logger.d.ts +0 -1
  381. package/dist/utils/logger.js +0 -2
  382. package/dist/utils/sanitize.d.ts +0 -28
  383. package/dist/utils/sanitize.js +0 -44
  384. package/dist/utils/watcher.d.ts +0 -11
  385. package/dist/utils/watcher.js +0 -36
@@ -1,64 +0,0 @@
1
- /**
2
- * Docker container lifecycle management via the Docker Engine API.
3
- *
4
- * Communicates over the Unix socket at /var/run/docker.sock using
5
- * native http.request — no dockerode dependency.
6
- */
7
- export interface ContainerInfo {
8
- slug: string;
9
- containerId: string;
10
- port: number;
11
- status: 'building' | 'running' | 'stopped' | 'error';
12
- endpoint: string;
13
- bearerToken: string;
14
- createdAt: string;
15
- lastActiveAt: string;
16
- }
17
- /** Runtime status of a container as reported by the backend. */
18
- export type ContainerStatus = 'running' | 'stopped' | 'error';
19
- /** Parameters for launching a tenant container. */
20
- export interface StartContainerOpts {
21
- slug: string;
22
- imageName: string;
23
- imageTag: string;
24
- envVars: Record<string, string>;
25
- port: number;
26
- serverType?: 'http' | 'playwright';
27
- /** Decrypted secrets to merge into the container environment. */
28
- secrets?: Record<string, string>;
29
- }
30
- /**
31
- * Build a Docker image from a generated project directory.
32
- *
33
- * Uses `tar` to create the build context and streams it to the Docker build API.
34
- * The directory must contain a Dockerfile.
35
- */
36
- export declare function buildImage(buildDir: string, imageName: string, imageTag: string): Promise<void>;
37
- /**
38
- * Start a container with strict resource limits and security constraints.
39
- *
40
- * Returns the container ID.
41
- */
42
- export declare function startContainer(opts: StartContainerOpts): Promise<string>;
43
- /**
44
- * Stop and remove a container.
45
- */
46
- export declare function stopContainer(containerId: string): Promise<void>;
47
- /**
48
- * Get container logs as an async generator (streaming).
49
- */
50
- export declare function getContainerLogs(containerId: string): AsyncGenerator<string>;
51
- /**
52
- * Check if a container is running.
53
- */
54
- export declare function getContainerStatus(containerId: string): Promise<ContainerStatus>;
55
- /**
56
- * Reclaim disk by removing dangling (untagged) images. A re-deploy reuses the
57
- * same image tag, so the previous build becomes dangling — left unchecked these
58
- * silently fill the disk. Best-effort: errors are logged, never thrown.
59
- *
60
- * NOTE: images orphaned by *deleting* a server are still tagged (not dangling),
61
- * so they are not reclaimed here — that is left to the daily `docker image
62
- * prune` cron / a future targeted removal.
63
- */
64
- export declare function pruneDanglingImages(): Promise<void>;
@@ -1,301 +0,0 @@
1
- /**
2
- * Docker container lifecycle management via the Docker Engine API.
3
- *
4
- * Communicates over the Unix socket at /var/run/docker.sock using
5
- * native http.request — no dockerode dependency.
6
- */
7
- import http from 'node:http';
8
- import { logger } from '../utils/logger.js';
9
- import { execFile } from 'node:child_process';
10
- const DOCKER_SOCKET = '/var/run/docker.sock';
11
- const TENANT_NETWORK = 'mcp-tenant';
12
- /** Docker container IDs are 64-char hex strings (or short 12-char prefixes). */
13
- const CONTAINER_ID_RE = /^[a-f0-9]{12,64}$/;
14
- function validateContainerId(id) {
15
- if (!CONTAINER_ID_RE.test(id)) {
16
- throw new Error(`Invalid container ID: ${id}`);
17
- }
18
- }
19
- /**
20
- * Build a Docker image from a generated project directory.
21
- *
22
- * Uses `tar` to create the build context and streams it to the Docker build API.
23
- * The directory must contain a Dockerfile.
24
- */
25
- export async function buildImage(buildDir, imageName, imageTag) {
26
- const fullTag = `${imageName}:${imageTag}`;
27
- logger.info(`Building Docker image: ${fullTag} from ${buildDir}`);
28
- // Create a tar archive of the build directory and pipe it to Docker build API.
29
- // We use a child process for tar since Node's native APIs don't include tar.
30
- const tarStream = await createTarStream(buildDir);
31
- await new Promise((resolve, reject) => {
32
- const req = http.request({
33
- socketPath: DOCKER_SOCKET,
34
- path: `/build?t=${encodeURIComponent(fullTag)}&rm=true`,
35
- method: 'POST',
36
- headers: {
37
- 'Content-Type': 'application/x-tar',
38
- },
39
- }, (res) => {
40
- const chunks = [];
41
- res.on('data', (chunk) => chunks.push(chunk));
42
- res.on('end', () => {
43
- if (res.statusCode && res.statusCode >= 400) {
44
- const body = Buffer.concat(chunks).toString('utf-8');
45
- reject(new Error(`Docker build failed (${res.statusCode}): ${body}`));
46
- return;
47
- }
48
- // Check for build errors in the stream output
49
- const output = Buffer.concat(chunks).toString('utf-8');
50
- if (output.includes('"error"')) {
51
- // Docker build streams JSON objects; check for error fields
52
- for (const line of output.split('\n')) {
53
- if (!line.trim())
54
- continue;
55
- try {
56
- const msg = JSON.parse(line);
57
- if (msg.error) {
58
- reject(new Error(`Docker build error: ${msg.error}`));
59
- return;
60
- }
61
- }
62
- catch {
63
- // Not JSON, skip
64
- }
65
- }
66
- }
67
- logger.info(`Docker image built: ${fullTag}`);
68
- resolve();
69
- });
70
- });
71
- req.on('error', (err) => {
72
- reject(new Error(`Docker build request failed: ${err.message}`));
73
- });
74
- tarStream.pipe(req);
75
- });
76
- }
77
- /**
78
- * Start a container with strict resource limits and security constraints.
79
- *
80
- * Returns the container ID.
81
- */
82
- export async function startContainer(opts) {
83
- const fullTag = `${opts.imageName}:${opts.imageTag}`;
84
- const containerName = `mcpmake-${opts.slug}`;
85
- const isPlaywright = opts.serverType === 'playwright';
86
- // Merge explicit env vars with decrypted secrets (envVars take precedence)
87
- const mergedEnv = { ...(opts.secrets ?? {}), ...opts.envVars };
88
- const envList = Object.entries(mergedEnv).map(([k, v]) => `${k}=${v}`);
89
- // Resource limits differ for Playwright containers (Chromium needs more resources)
90
- const hostConfig = {
91
- // Port mapping: host port -> container port 3000
92
- PortBindings: {
93
- '3000/tcp': [{ HostIp: '127.0.0.1', HostPort: String(opts.port) }],
94
- },
95
- // Resource limits
96
- Memory: isPlaywright ? 768 * 1024 * 1024 : 256 * 1024 * 1024,
97
- NanoCPUs: isPlaywright ? 1_000_000_000 : 500_000_000,
98
- // Security: Chromium needs write access to the root filesystem
99
- ReadonlyRootfs: !isPlaywright,
100
- // tmpfs: Playwright needs a larger temp directory
101
- Tmpfs: isPlaywright
102
- ? { '/tmp': 'rw,noexec,nosuid,size=256m' }
103
- : { '/tmp': 'rw,noexec,nosuid,size=64m' },
104
- // Network
105
- NetworkMode: TENANT_NETWORK,
106
- // Drop all capabilities
107
- CapDrop: ['ALL'],
108
- // Prevent privilege escalation
109
- SecurityOpt: ['no-new-privileges'],
110
- };
111
- // Chromium rendering requires a larger shared memory segment
112
- if (isPlaywright) {
113
- hostConfig.ShmSize = 256 * 1024 * 1024;
114
- }
115
- // Create the container
116
- const createBody = {
117
- Image: fullTag,
118
- name: containerName,
119
- Env: [...envList, 'PORT=3000', 'TRANSPORT=http', 'NODE_ENV=production'],
120
- ExposedPorts: { '3000/tcp': {} },
121
- HostConfig: hostConfig,
122
- Labels: {
123
- 'mcpmake.slug': opts.slug,
124
- 'mcpmake.managed': 'true',
125
- },
126
- };
127
- const createResult = await dockerRequest('POST', `/containers/create?name=${encodeURIComponent(containerName)}`, createBody);
128
- const containerId = createResult.Id;
129
- validateContainerId(containerId);
130
- logger.info(`Container created: ${containerId.slice(0, 12)} (${containerName})`);
131
- // Start the container
132
- await dockerRequest('POST', `/containers/${containerId}/start`, undefined);
133
- logger.info(`Container started: ${containerId.slice(0, 12)}`);
134
- return containerId;
135
- }
136
- /**
137
- * Stop and remove a container.
138
- */
139
- export async function stopContainer(containerId) {
140
- validateContainerId(containerId);
141
- const shortId = containerId.slice(0, 12);
142
- try {
143
- await dockerRequest('POST', `/containers/${containerId}/stop?t=10`, undefined);
144
- logger.info(`Container stopped: ${shortId}`);
145
- }
146
- catch (err) {
147
- // Container might already be stopped
148
- logger.warn(`Stop failed for ${shortId} (may already be stopped): ${err}`);
149
- }
150
- try {
151
- await dockerRequest('DELETE', `/containers/${containerId}?force=true`, undefined);
152
- logger.info(`Container removed: ${shortId}`);
153
- }
154
- catch (err) {
155
- logger.warn(`Remove failed for ${shortId}: ${err}`);
156
- }
157
- }
158
- /**
159
- * Get container logs as an async generator (streaming).
160
- */
161
- export async function* getContainerLogs(containerId) {
162
- validateContainerId(containerId);
163
- const res = await new Promise((resolve, reject) => {
164
- const req = http.request({
165
- socketPath: DOCKER_SOCKET,
166
- path: `/containers/${containerId}/logs?follow=true&stdout=true&stderr=true&timestamps=true`,
167
- method: 'GET',
168
- }, resolve);
169
- req.on('error', reject);
170
- req.end();
171
- });
172
- if (res.statusCode && res.statusCode >= 400) {
173
- const chunks = [];
174
- for await (const chunk of res) {
175
- chunks.push(chunk);
176
- }
177
- throw new Error(`Failed to get logs (${res.statusCode}): ${Buffer.concat(chunks).toString('utf-8')}`);
178
- }
179
- // Docker log stream uses a multiplexed format:
180
- // 8-byte header: [stream_type(1), 0, 0, 0, size(4 big-endian)]
181
- // followed by `size` bytes of payload.
182
- let buffer = Buffer.alloc(0);
183
- for await (const chunk of res) {
184
- buffer = Buffer.concat([buffer, chunk]);
185
- while (buffer.length >= 8) {
186
- const payloadSize = buffer.readUInt32BE(4);
187
- const totalFrameSize = 8 + payloadSize;
188
- if (buffer.length < totalFrameSize)
189
- break;
190
- const payload = buffer.subarray(8, totalFrameSize).toString('utf-8');
191
- buffer = buffer.subarray(totalFrameSize);
192
- yield payload;
193
- }
194
- }
195
- }
196
- /**
197
- * Check if a container is running.
198
- */
199
- export async function getContainerStatus(containerId) {
200
- validateContainerId(containerId);
201
- try {
202
- const info = await dockerRequest('GET', `/containers/${containerId}/json`, undefined);
203
- if (info.State.Running)
204
- return 'running';
205
- if (info.State.Status === 'exited' || info.State.Status === 'dead')
206
- return 'stopped';
207
- return 'error';
208
- }
209
- catch {
210
- return 'error';
211
- }
212
- }
213
- /**
214
- * Reclaim disk by removing dangling (untagged) images. A re-deploy reuses the
215
- * same image tag, so the previous build becomes dangling — left unchecked these
216
- * silently fill the disk. Best-effort: errors are logged, never thrown.
217
- *
218
- * NOTE: images orphaned by *deleting* a server are still tagged (not dangling),
219
- * so they are not reclaimed here — that is left to the daily `docker image
220
- * prune` cron / a future targeted removal.
221
- */
222
- export async function pruneDanglingImages() {
223
- try {
224
- const filters = encodeURIComponent(JSON.stringify({ dangling: ['true'] }));
225
- await dockerRequest('POST', `/images/prune?filters=${filters}`, undefined);
226
- logger.info('Pruned dangling Docker images');
227
- }
228
- catch (err) {
229
- logger.warn(`Dangling image prune failed: ${err}`);
230
- }
231
- }
232
- // ---------------------------------------------------------------------------
233
- // Internal helpers
234
- // ---------------------------------------------------------------------------
235
- /**
236
- * Create a tar stream from a directory using the system `tar` command.
237
- * Uses execFile (no shell) to avoid command injection.
238
- * Returns a readable stream.
239
- */
240
- function createTarStream(dir) {
241
- // Validate path contains only safe characters
242
- if (!/^[a-zA-Z0-9_.\/\-]+$/.test(dir)) {
243
- throw new Error(`Unsafe path for tar: ${dir}`);
244
- }
245
- return new Promise((resolve, reject) => {
246
- const child = execFile('tar', ['-cf', '-', '-C', dir, '.'], {
247
- maxBuffer: 100 * 1024 * 1024, // 100 MB max
248
- encoding: 'buffer',
249
- });
250
- if (!child.stdout) {
251
- reject(new Error('Failed to create tar stream'));
252
- return;
253
- }
254
- child.on('error', reject);
255
- resolve(child.stdout);
256
- });
257
- }
258
- /**
259
- * Make a request to the Docker Engine API via Unix socket.
260
- */
261
- function dockerRequest(method, path, body) {
262
- return new Promise((resolve, reject) => {
263
- const payload = body !== undefined ? JSON.stringify(body) : undefined;
264
- const req = http.request({
265
- socketPath: DOCKER_SOCKET,
266
- path,
267
- method,
268
- headers: {
269
- ...(payload
270
- ? {
271
- 'Content-Type': 'application/json',
272
- 'Content-Length': Buffer.byteLength(payload),
273
- }
274
- : {}),
275
- },
276
- }, (res) => {
277
- const chunks = [];
278
- res.on('data', (chunk) => chunks.push(chunk));
279
- res.on('end', () => {
280
- const responseBody = Buffer.concat(chunks).toString('utf-8');
281
- if (res.statusCode && res.statusCode >= 400) {
282
- reject(new Error(`Docker API ${method} ${path} returned ${res.statusCode}: ${responseBody}`));
283
- return;
284
- }
285
- try {
286
- resolve(responseBody ? JSON.parse(responseBody) : null);
287
- }
288
- catch {
289
- resolve(responseBody);
290
- }
291
- });
292
- });
293
- req.on('error', (err) => {
294
- reject(new Error(`Docker API request failed: ${err.message}`));
295
- });
296
- if (payload) {
297
- req.write(payload);
298
- }
299
- req.end();
300
- });
301
- }
@@ -1,27 +0,0 @@
1
- /**
2
- * AES-256-GCM encryption module for secret storage.
3
- *
4
- * Uses Node.js built-in `crypto` — no external dependencies.
5
- * Each record gets its own random salt so that the same plaintext
6
- * encrypted twice produces different ciphertexts (key isolation).
7
- *
8
- * Wire format: "enc:v1:<base64 payload>"
9
- * payload = salt(16) || iv(12) || authTag(16) || ciphertext
10
- */
11
- /**
12
- * Encrypt a plaintext string with AES-256-GCM.
13
- *
14
- * Derives a per-record key via scrypt(masterKey, randomSalt, 32).
15
- * Returns a prefixed, base64-encoded string.
16
- */
17
- export declare function encrypt(plaintext: string, masterKey: string): string;
18
- /**
19
- * Decrypt a value previously produced by `encrypt()`.
20
- *
21
- * Throws on tampered data, wrong key, or malformed input.
22
- */
23
- export declare function decrypt(encrypted: string, masterKey: string): string;
24
- /**
25
- * Check whether a value looks like an encrypted string from this module.
26
- */
27
- export declare function isEncrypted(value: string): boolean;
@@ -1,63 +0,0 @@
1
- /**
2
- * AES-256-GCM encryption module for secret storage.
3
- *
4
- * Uses Node.js built-in `crypto` — no external dependencies.
5
- * Each record gets its own random salt so that the same plaintext
6
- * encrypted twice produces different ciphertexts (key isolation).
7
- *
8
- * Wire format: "enc:v1:<base64 payload>"
9
- * payload = salt(16) || iv(12) || authTag(16) || ciphertext
10
- */
11
- import { randomBytes, scryptSync, createCipheriv, createDecipheriv } from 'node:crypto';
12
- const PREFIX = 'enc:v1:';
13
- const SALT_LEN = 16;
14
- const IV_LEN = 12;
15
- const TAG_LEN = 16;
16
- const KEY_LEN = 32; // 256 bits
17
- /**
18
- * Encrypt a plaintext string with AES-256-GCM.
19
- *
20
- * Derives a per-record key via scrypt(masterKey, randomSalt, 32).
21
- * Returns a prefixed, base64-encoded string.
22
- */
23
- export function encrypt(plaintext, masterKey) {
24
- const salt = randomBytes(SALT_LEN);
25
- const key = scryptSync(masterKey, salt, KEY_LEN);
26
- const iv = randomBytes(IV_LEN);
27
- const cipher = createCipheriv('aes-256-gcm', key, iv);
28
- const encrypted = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()]);
29
- const tag = cipher.getAuthTag();
30
- // Pack: salt || iv || tag || ciphertext
31
- const payload = Buffer.concat([salt, iv, tag, encrypted]);
32
- return PREFIX + payload.toString('base64');
33
- }
34
- /**
35
- * Decrypt a value previously produced by `encrypt()`.
36
- *
37
- * Throws on tampered data, wrong key, or malformed input.
38
- */
39
- export function decrypt(encrypted, masterKey) {
40
- if (!isEncrypted(encrypted)) {
41
- throw new Error('Value is not in encrypted format (missing enc:v1: prefix)');
42
- }
43
- const payload = Buffer.from(encrypted.slice(PREFIX.length), 'base64');
44
- const minLen = SALT_LEN + IV_LEN + TAG_LEN;
45
- if (payload.length < minLen) {
46
- throw new Error('Encrypted payload too short');
47
- }
48
- const salt = payload.subarray(0, SALT_LEN);
49
- const iv = payload.subarray(SALT_LEN, SALT_LEN + IV_LEN);
50
- const tag = payload.subarray(SALT_LEN + IV_LEN, SALT_LEN + IV_LEN + TAG_LEN);
51
- const ciphertext = payload.subarray(SALT_LEN + IV_LEN + TAG_LEN);
52
- const key = scryptSync(masterKey, salt, KEY_LEN);
53
- const decipher = createDecipheriv('aes-256-gcm', key, iv);
54
- decipher.setAuthTag(tag);
55
- const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
56
- return decrypted.toString('utf8');
57
- }
58
- /**
59
- * Check whether a value looks like an encrypted string from this module.
60
- */
61
- export function isEncrypted(value) {
62
- return value.startsWith(PREFIX);
63
- }
@@ -1,27 +0,0 @@
1
- /**
2
- * Database connection manager.
3
- *
4
- * Provides a thin abstraction over PostgreSQL via the `pg` module.
5
- * Uses dynamic import so the rest of the app doesn't fail when pg
6
- * isn't installed (i.e. in-memory-only mode).
7
- */
8
- export interface QueryResult<T> {
9
- rows: T[];
10
- }
11
- export interface Database {
12
- query<T>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
13
- }
14
- export declare class PgDatabase implements Database {
15
- private pool;
16
- constructor(pool: any);
17
- query<T>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
18
- }
19
- /**
20
- * Create a Database backed by PostgreSQL and store it as the singleton.
21
- * Verifies connectivity before returning.
22
- */
23
- export declare function createDatabase(url: string): Promise<Database>;
24
- /**
25
- * Return the current database singleton, or null if not initialised.
26
- */
27
- export declare function getDatabase(): Database | null;
@@ -1,53 +0,0 @@
1
- /**
2
- * Database connection manager.
3
- *
4
- * Provides a thin abstraction over PostgreSQL via the `pg` module.
5
- * Uses dynamic import so the rest of the app doesn't fail when pg
6
- * isn't installed (i.e. in-memory-only mode).
7
- */
8
- // ---------------------------------------------------------------------------
9
- // PostgreSQL implementation
10
- // ---------------------------------------------------------------------------
11
- export class PgDatabase {
12
- pool; // pg.Pool — typed as any to avoid hard dep
13
- constructor(pool) {
14
- this.pool = pool;
15
- }
16
- async query(sql, params) {
17
- const result = await this.pool.query(sql, params);
18
- return { rows: result.rows };
19
- }
20
- }
21
- // ---------------------------------------------------------------------------
22
- // Singleton
23
- // ---------------------------------------------------------------------------
24
- let instance = null;
25
- /**
26
- * Create a Database backed by PostgreSQL and store it as the singleton.
27
- * Verifies connectivity before returning.
28
- */
29
- export async function createDatabase(url) {
30
- // Dynamic import — pg is a CommonJS module, use createRequire for reliable loading
31
- let Pool;
32
- try {
33
- const { createRequire } = await import('node:module');
34
- const require = createRequire(import.meta.url);
35
- const pg = require('pg');
36
- Pool = pg.Pool;
37
- }
38
- catch {
39
- throw new Error('pg package not installed. Install it with: npm install pg');
40
- }
41
- const pool = new Pool({ connectionString: url, max: 10 });
42
- // Verify the connection is good
43
- await pool.query('SELECT 1');
44
- const db = new PgDatabase(pool);
45
- instance = db;
46
- return db;
47
- }
48
- /**
49
- * Return the current database singleton, or null if not initialised.
50
- */
51
- export function getDatabase() {
52
- return instance;
53
- }
@@ -1,12 +0,0 @@
1
- /**
2
- * Simple sequential migration runner.
3
- *
4
- * Stores the current schema version in a `_migrations` table.
5
- * Each migration is a plain SQL string executed in order.
6
- */
7
- import type { Database } from './index.js';
8
- /**
9
- * Run all pending migrations in order.
10
- * Creates the `_migrations` meta-table on first run.
11
- */
12
- export declare function runMigrations(db: Database): Promise<void>;