@supatype/cli 0.1.0-alpha.6 → 0.1.0-alpha.7

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 (309) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +203 -1
  3. package/.turbo/turbo-typecheck.log +1 -1
  4. package/dist/app-config.d.ts +7 -0
  5. package/dist/app-config.d.ts.map +1 -0
  6. package/dist/app-config.js +113 -0
  7. package/dist/app-config.js.map +1 -0
  8. package/dist/augmentation-generator.d.ts +2 -0
  9. package/dist/augmentation-generator.d.ts.map +1 -0
  10. package/dist/augmentation-generator.js +111 -0
  11. package/dist/augmentation-generator.js.map +1 -0
  12. package/dist/binary-cache.d.ts +89 -0
  13. package/dist/binary-cache.d.ts.map +1 -0
  14. package/dist/binary-cache.js +656 -0
  15. package/dist/binary-cache.js.map +1 -0
  16. package/dist/cli.d.ts.map +1 -1
  17. package/dist/cli.js +13 -7
  18. package/dist/cli.js.map +1 -1
  19. package/dist/commands/admin.d.ts.map +1 -1
  20. package/dist/commands/admin.js +4 -3
  21. package/dist/commands/admin.js.map +1 -1
  22. package/dist/commands/app.d.ts.map +1 -1
  23. package/dist/commands/app.js +56 -209
  24. package/dist/commands/app.js.map +1 -1
  25. package/dist/commands/cache.d.ts +6 -0
  26. package/dist/commands/cache.d.ts.map +1 -0
  27. package/dist/commands/cache.js +105 -0
  28. package/dist/commands/cache.js.map +1 -0
  29. package/dist/commands/cloud.d.ts +12 -0
  30. package/dist/commands/cloud.d.ts.map +1 -1
  31. package/dist/commands/cloud.js +36 -46
  32. package/dist/commands/cloud.js.map +1 -1
  33. package/dist/commands/db.d.ts.map +1 -1
  34. package/dist/commands/db.js +47 -54
  35. package/dist/commands/db.js.map +1 -1
  36. package/dist/commands/deploy.d.ts +2 -1
  37. package/dist/commands/deploy.d.ts.map +1 -1
  38. package/dist/commands/deploy.js +92 -51
  39. package/dist/commands/deploy.js.map +1 -1
  40. package/dist/commands/dev.d.ts +11 -0
  41. package/dist/commands/dev.d.ts.map +1 -1
  42. package/dist/commands/dev.js +751 -384
  43. package/dist/commands/dev.js.map +1 -1
  44. package/dist/commands/diff.d.ts.map +1 -1
  45. package/dist/commands/diff.js +20 -15
  46. package/dist/commands/diff.js.map +1 -1
  47. package/dist/commands/engine.d.ts +1 -3
  48. package/dist/commands/engine.d.ts.map +1 -1
  49. package/dist/commands/engine.js +13 -85
  50. package/dist/commands/engine.js.map +1 -1
  51. package/dist/commands/functions.d.ts.map +1 -1
  52. package/dist/commands/functions.js +92 -105
  53. package/dist/commands/functions.js.map +1 -1
  54. package/dist/commands/generate.d.ts.map +1 -1
  55. package/dist/commands/generate.js +22 -12
  56. package/dist/commands/generate.js.map +1 -1
  57. package/dist/commands/init.d.ts +1 -1
  58. package/dist/commands/init.d.ts.map +1 -1
  59. package/dist/commands/init.js +124 -410
  60. package/dist/commands/init.js.map +1 -1
  61. package/dist/commands/migrate-from-v1.d.ts +5 -0
  62. package/dist/commands/migrate-from-v1.d.ts.map +1 -0
  63. package/dist/commands/migrate-from-v1.js +125 -0
  64. package/dist/commands/migrate-from-v1.js.map +1 -0
  65. package/dist/commands/migrate.d.ts.map +1 -1
  66. package/dist/commands/migrate.js +27 -23
  67. package/dist/commands/migrate.js.map +1 -1
  68. package/dist/commands/pg.d.ts +8 -0
  69. package/dist/commands/pg.d.ts.map +1 -0
  70. package/dist/commands/pg.js +102 -0
  71. package/dist/commands/pg.js.map +1 -0
  72. package/dist/commands/pull.d.ts.map +1 -1
  73. package/dist/commands/pull.js +5 -66
  74. package/dist/commands/pull.js.map +1 -1
  75. package/dist/commands/push.d.ts.map +1 -1
  76. package/dist/commands/push.js +99 -39
  77. package/dist/commands/push.js.map +1 -1
  78. package/dist/commands/seed.d.ts +2 -0
  79. package/dist/commands/seed.d.ts.map +1 -1
  80. package/dist/commands/seed.js +44 -11
  81. package/dist/commands/seed.js.map +1 -1
  82. package/dist/commands/self-host.d.ts +7 -1
  83. package/dist/commands/self-host.d.ts.map +1 -1
  84. package/dist/commands/self-host.js +272 -758
  85. package/dist/commands/self-host.js.map +1 -1
  86. package/dist/commands/self-update.d.ts +9 -0
  87. package/dist/commands/self-update.d.ts.map +1 -0
  88. package/dist/commands/self-update.js +33 -0
  89. package/dist/commands/self-update.js.map +1 -0
  90. package/dist/commands/status.d.ts.map +1 -1
  91. package/dist/commands/status.js +4 -3
  92. package/dist/commands/status.js.map +1 -1
  93. package/dist/commands/types.d.ts +3 -0
  94. package/dist/commands/types.d.ts.map +1 -0
  95. package/dist/commands/types.js +62 -0
  96. package/dist/commands/types.js.map +1 -0
  97. package/dist/commands/update.d.ts +7 -0
  98. package/dist/commands/update.d.ts.map +1 -0
  99. package/dist/commands/update.js +77 -0
  100. package/dist/commands/update.js.map +1 -0
  101. package/dist/components.d.ts +5 -0
  102. package/dist/components.d.ts.map +1 -0
  103. package/dist/components.js +3 -0
  104. package/dist/components.js.map +1 -0
  105. package/dist/config.d.ts +10 -51
  106. package/dist/config.d.ts.map +1 -1
  107. package/dist/config.js +101 -33
  108. package/dist/config.js.map +1 -1
  109. package/dist/docker-postgres.d.ts +39 -0
  110. package/dist/docker-postgres.d.ts.map +1 -0
  111. package/dist/docker-postgres.js +96 -0
  112. package/dist/docker-postgres.js.map +1 -0
  113. package/dist/engine-client.d.ts +67 -0
  114. package/dist/engine-client.d.ts.map +1 -0
  115. package/dist/engine-client.js +156 -0
  116. package/dist/engine-client.js.map +1 -0
  117. package/dist/ensure-binary.d.ts +7 -0
  118. package/dist/ensure-binary.d.ts.map +1 -0
  119. package/dist/ensure-binary.js +17 -0
  120. package/dist/ensure-binary.js.map +1 -0
  121. package/dist/functions-router-gen.d.ts +14 -0
  122. package/dist/functions-router-gen.d.ts.map +1 -0
  123. package/dist/functions-router-gen.js +199 -0
  124. package/dist/functions-router-gen.js.map +1 -0
  125. package/dist/index.d.ts +4 -5
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +2 -3
  128. package/dist/index.js.map +1 -1
  129. package/dist/kong-config.d.ts +21 -0
  130. package/dist/kong-config.d.ts.map +1 -0
  131. package/dist/kong-config.js +60 -0
  132. package/dist/kong-config.js.map +1 -0
  133. package/dist/local-gateway.d.ts +7 -0
  134. package/dist/local-gateway.d.ts.map +1 -0
  135. package/dist/local-gateway.js +9 -0
  136. package/dist/local-gateway.js.map +1 -0
  137. package/dist/local-storage.d.ts +8 -0
  138. package/dist/local-storage.d.ts.map +1 -0
  139. package/dist/local-storage.js +14 -0
  140. package/dist/local-storage.js.map +1 -0
  141. package/dist/pgbouncer-userlist.d.ts +5 -0
  142. package/dist/pgbouncer-userlist.d.ts.map +1 -0
  143. package/dist/pgbouncer-userlist.js +14 -0
  144. package/dist/pgbouncer-userlist.js.map +1 -0
  145. package/dist/postgres-ctl.d.ts +44 -0
  146. package/dist/postgres-ctl.d.ts.map +1 -0
  147. package/dist/postgres-ctl.js +137 -0
  148. package/dist/postgres-ctl.js.map +1 -0
  149. package/dist/process-manager.d.ts +41 -0
  150. package/dist/process-manager.d.ts.map +1 -0
  151. package/dist/process-manager.js +120 -0
  152. package/dist/process-manager.js.map +1 -0
  153. package/dist/project-config.d.ts +215 -0
  154. package/dist/project-config.d.ts.map +1 -0
  155. package/dist/project-config.js +145 -0
  156. package/dist/project-config.js.map +1 -0
  157. package/dist/pull-utils.d.ts +15 -0
  158. package/dist/pull-utils.d.ts.map +1 -1
  159. package/dist/pull-utils.js +12 -0
  160. package/dist/pull-utils.js.map +1 -1
  161. package/dist/release-pins.d.ts +7 -0
  162. package/dist/release-pins.d.ts.map +1 -0
  163. package/dist/release-pins.js +27 -0
  164. package/dist/release-pins.js.map +1 -0
  165. package/dist/release-public-key.d.ts +8 -0
  166. package/dist/release-public-key.d.ts.map +1 -0
  167. package/dist/release-public-key.js +13 -0
  168. package/dist/release-public-key.js.map +1 -0
  169. package/dist/runtime-routes.d.ts +25 -0
  170. package/dist/runtime-routes.d.ts.map +1 -0
  171. package/dist/runtime-routes.js +189 -0
  172. package/dist/runtime-routes.js.map +1 -0
  173. package/dist/scripts/postinstall.d.ts +5 -6
  174. package/dist/scripts/postinstall.d.ts.map +1 -1
  175. package/dist/scripts/postinstall.js +36 -20
  176. package/dist/scripts/postinstall.js.map +1 -1
  177. package/dist/self-host-compose.d.ts +14 -0
  178. package/dist/self-host-compose.d.ts.map +1 -0
  179. package/dist/self-host-compose.js +236 -0
  180. package/dist/self-host-compose.js.map +1 -0
  181. package/dist/storage-provision.d.ts +24 -0
  182. package/dist/storage-provision.d.ts.map +1 -0
  183. package/dist/storage-provision.js +44 -0
  184. package/dist/storage-provision.js.map +1 -0
  185. package/dist/systemd.d.ts +26 -0
  186. package/dist/systemd.d.ts.map +1 -0
  187. package/dist/systemd.js +102 -0
  188. package/dist/systemd.js.map +1 -0
  189. package/dist/tsx-runner.d.ts.map +1 -1
  190. package/dist/tsx-runner.js +9 -2
  191. package/dist/tsx-runner.js.map +1 -1
  192. package/dist/type-extractor.d.ts +31 -0
  193. package/dist/type-extractor.d.ts.map +1 -0
  194. package/dist/type-extractor.js +876 -0
  195. package/dist/type-extractor.js.map +1 -0
  196. package/package.json +4 -3
  197. package/releases/deno/VERSION +1 -0
  198. package/scripts/mirror-deno-release.sh +76 -0
  199. package/src/app-config.ts +128 -0
  200. package/src/augmentation-generator.ts +126 -0
  201. package/src/binary-cache.ts +802 -0
  202. package/src/cli.ts +13 -8
  203. package/src/commands/admin.ts +4 -3
  204. package/src/commands/app.ts +67 -231
  205. package/src/commands/cache.ts +117 -0
  206. package/src/commands/cloud.ts +46 -57
  207. package/src/commands/db.ts +54 -63
  208. package/src/commands/deploy.ts +110 -61
  209. package/src/commands/dev.ts +930 -405
  210. package/src/commands/diff.ts +21 -29
  211. package/src/commands/engine.ts +13 -116
  212. package/src/commands/functions.ts +97 -115
  213. package/src/commands/generate.ts +23 -10
  214. package/src/commands/init.ts +136 -414
  215. package/src/commands/migrate-from-v1.ts +131 -0
  216. package/src/commands/migrate.ts +27 -23
  217. package/src/commands/pg.ts +133 -0
  218. package/src/commands/pull.ts +6 -85
  219. package/src/commands/push.ts +128 -59
  220. package/src/commands/seed.ts +54 -12
  221. package/src/commands/self-host.ts +312 -880
  222. package/src/commands/self-update.ts +45 -0
  223. package/src/commands/status.ts +4 -3
  224. package/src/commands/types.ts +76 -0
  225. package/src/commands/update.ts +92 -0
  226. package/src/components.ts +6 -0
  227. package/src/config.ts +127 -94
  228. package/src/docker-postgres.ts +138 -0
  229. package/src/engine-client.ts +231 -0
  230. package/src/ensure-binary.ts +28 -0
  231. package/src/functions-router-gen.ts +224 -0
  232. package/src/index.ts +4 -12
  233. package/src/kong-config.ts +78 -0
  234. package/src/local-gateway.ts +9 -0
  235. package/src/local-storage.ts +14 -0
  236. package/src/pgbouncer-userlist.ts +15 -0
  237. package/src/postgres-ctl.ts +171 -0
  238. package/src/process-manager.ts +151 -0
  239. package/src/project-config.ts +353 -0
  240. package/src/pull-utils.ts +24 -0
  241. package/src/release-pins.ts +31 -0
  242. package/src/release-public-key.ts +12 -0
  243. package/src/runtime-routes.ts +216 -0
  244. package/src/scripts/postinstall.ts +36 -25
  245. package/src/self-host-compose.ts +257 -0
  246. package/src/storage-provision.ts +58 -0
  247. package/src/systemd.ts +137 -0
  248. package/src/tsx-runner.ts +11 -1
  249. package/src/type-extractor.ts +1016 -0
  250. package/tests/app-command.test.ts +54 -0
  251. package/tests/augmentation-generator.test.ts +59 -0
  252. package/tests/binary-cache-cloud-overrides.test.ts +123 -0
  253. package/tests/cached-artifact-format.test.ts +84 -0
  254. package/tests/cli-help.test.ts +40 -14
  255. package/tests/config.test.ts +140 -37
  256. package/tests/engine-distribution.test.ts +3 -3
  257. package/tests/ensure-binary.test.ts +59 -0
  258. package/tests/init.test.ts +28 -86
  259. package/tests/migrate-from-v1.test.ts +29 -0
  260. package/tests/pg-spawn-env.test.ts +18 -0
  261. package/tests/postgres-archive-tag.test.ts +9 -0
  262. package/tests/pull-utils.test.ts +36 -1
  263. package/tests/release-pins.test.ts +28 -0
  264. package/tests/runtime-contract.test.ts +236 -0
  265. package/tests/seed-discover.test.ts +31 -0
  266. package/tests/tsconfig.json +9 -0
  267. package/tests/type-extractor.test.ts +401 -0
  268. package/tsconfig.tsbuildinfo +1 -1
  269. package/vitest.config.ts +12 -0
  270. package/dist/engine/cache.d.ts +0 -37
  271. package/dist/engine/cache.d.ts.map +0 -1
  272. package/dist/engine/cache.js +0 -121
  273. package/dist/engine/cache.js.map +0 -1
  274. package/dist/engine/download.d.ts +0 -19
  275. package/dist/engine/download.d.ts.map +0 -1
  276. package/dist/engine/download.js +0 -108
  277. package/dist/engine/download.js.map +0 -1
  278. package/dist/engine/platform.d.ts +0 -24
  279. package/dist/engine/platform.d.ts.map +0 -1
  280. package/dist/engine/platform.js +0 -50
  281. package/dist/engine/platform.js.map +0 -1
  282. package/dist/engine/resolve.d.ts +0 -37
  283. package/dist/engine/resolve.d.ts.map +0 -1
  284. package/dist/engine/resolve.js +0 -133
  285. package/dist/engine/resolve.js.map +0 -1
  286. package/dist/engine/update-notify.d.ts +0 -11
  287. package/dist/engine/update-notify.d.ts.map +0 -1
  288. package/dist/engine/update-notify.js +0 -43
  289. package/dist/engine/update-notify.js.map +0 -1
  290. package/dist/engine/verify.d.ts +0 -50
  291. package/dist/engine/verify.d.ts.map +0 -1
  292. package/dist/engine/verify.js +0 -161
  293. package/dist/engine/verify.js.map +0 -1
  294. package/dist/engine-version.d.ts +0 -35
  295. package/dist/engine-version.d.ts.map +0 -1
  296. package/dist/engine-version.js +0 -35
  297. package/dist/engine-version.js.map +0 -1
  298. package/dist/engine.d.ts +0 -34
  299. package/dist/engine.d.ts.map +0 -1
  300. package/dist/engine.js +0 -76
  301. package/dist/engine.js.map +0 -1
  302. package/src/engine/cache.ts +0 -135
  303. package/src/engine/download.ts +0 -143
  304. package/src/engine/platform.ts +0 -66
  305. package/src/engine/resolve.ts +0 -197
  306. package/src/engine/update-notify.ts +0 -50
  307. package/src/engine/verify.ts +0 -206
  308. package/src/engine-version.ts +0 -39
  309. package/src/engine.ts +0 -99
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Release pins read from files under packages/cli/releases/.
3
+ * CI (deno-releases workflow) uses the same paths — bump only releases/deno/VERSION.
4
+ */
5
+ import { readFileSync } from "node:fs";
6
+ import { dirname, join } from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+ const CLI_PACKAGE_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..");
9
+ function readPinFile(...segments) {
10
+ const path = join(CLI_PACKAGE_ROOT, "releases", ...segments);
11
+ let raw;
12
+ try {
13
+ raw = readFileSync(path, "utf8");
14
+ }
15
+ catch {
16
+ throw new Error(`Missing release pin file: ${path}\n` +
17
+ "Expected packages/cli/releases/… — reinstall @supatype/cli or build from the monorepo.");
18
+ }
19
+ const version = raw.trim();
20
+ if (!/^\d+\.\d+\.\d+/.test(version)) {
21
+ throw new Error(`Invalid pin in ${path}: expected semver like 2.2.0, got ${JSON.stringify(raw)}`);
22
+ }
23
+ return version;
24
+ }
25
+ /** Pinned Deno runtime for edge functions (also published to CDN under /deno/v{version}/). */
26
+ export const DENO_RELEASE_PIN = readPinFile("deno", "VERSION");
27
+ //# sourceMappingURL=release-pins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-pins.js","sourceRoot":"","sources":["../src/release-pins.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;AAE5E,SAAS,WAAW,CAAC,GAAG,QAAkB;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC,CAAA;IAC5D,IAAI,GAAW,CAAA;IACf,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,IAAI;YACnC,wFAAwF,CAC3F,CAAA;IACH,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,qCAAqC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACnG,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Minisign public key for CDN release verification.
3
+ * Populated at publish via scripts/embed-release-pubkey.mjs (MINISIGN_PUBLIC_KEY secret),
4
+ * or overridden at runtime with SUPATYPE_RELEASE_PUBLIC_KEY.
5
+ */
6
+ export declare const EMBEDDED_RELEASE_PUBLIC_KEY = "untrusted comment: minisign public key DE133E99689AE71D\nRWQd55pomT4T3t+5FLZZ6+h0DoHrtiuU9RBUHHm9BcFHeGRvW7BXxBCr";
7
+ export declare function releasePublicKey(): string;
8
+ //# sourceMappingURL=release-public-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-public-key.d.ts","sourceRoot":"","sources":["../src/release-public-key.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,sHAAsH,CAAA;AAE9J,wBAAgB,gBAAgB,IAAI,MAAM,CAIzC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Minisign public key for CDN release verification.
3
+ * Populated at publish via scripts/embed-release-pubkey.mjs (MINISIGN_PUBLIC_KEY secret),
4
+ * or overridden at runtime with SUPATYPE_RELEASE_PUBLIC_KEY.
5
+ */
6
+ export const EMBEDDED_RELEASE_PUBLIC_KEY = "untrusted comment: minisign public key DE133E99689AE71D\nRWQd55pomT4T3t+5FLZZ6+h0DoHrtiuU9RBUHHm9BcFHeGRvW7BXxBCr";
7
+ export function releasePublicKey() {
8
+ const fromEnv = process.env["SUPATYPE_RELEASE_PUBLIC_KEY"]?.trim();
9
+ if (fromEnv)
10
+ return fromEnv;
11
+ return EMBEDDED_RELEASE_PUBLIC_KEY.trim();
12
+ }
13
+ //# sourceMappingURL=release-public-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-public-key.js","sourceRoot":"","sources":["../src/release-public-key.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,mHAAmH,CAAA;AAE9J,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,IAAI,EAAE,CAAA;IAClE,IAAI,OAAO;QAAE,OAAO,OAAO,CAAA;IAC3B,OAAO,2BAA2B,CAAC,IAAI,EAAE,CAAA;AAC3C,CAAC"}
@@ -0,0 +1,25 @@
1
+ export interface RuntimeRoute {
2
+ name: string;
3
+ serviceName: string;
4
+ serviceUrl: string;
5
+ paths: string[];
6
+ stripPath?: boolean;
7
+ protocols?: string[];
8
+ engineProtected?: boolean;
9
+ }
10
+ export interface RuntimeRouteOptions {
11
+ appUpstream?: string;
12
+ staticAppServiceUrl?: string;
13
+ /** Compose self-host: supatype-server container (functions proxy). */
14
+ functionsServiceUrl?: string;
15
+ /**
16
+ * Self-host Compose: Kong forwards API traffic to supatype-server (unified gateway),
17
+ * which proxies to internal services — same model as `supatype dev`.
18
+ */
19
+ unifiedGateway?: boolean;
20
+ }
21
+ /**
22
+ * Shared route contract used by local/self-host renderers.
23
+ */
24
+ export declare function runtimeRouteSpec(opts?: RuntimeRouteOptions): RuntimeRoute[];
25
+ //# sourceMappingURL=runtime-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-routes.d.ts","sourceRoot":"","sources":["../src/runtime-routes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,sEAAsE;IACtE,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AA2LD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,mBAAwB,GAAG,YAAY,EAAE,CAK/E"}
@@ -0,0 +1,189 @@
1
+ const SERVER_GATEWAY = "http://server:9999";
2
+ /**
3
+ * Kong routes when self-host uses supatype-server as the single API gateway.
4
+ */
5
+ function runtimeRouteSpecUnified() {
6
+ return [
7
+ {
8
+ name: "rest-v1",
9
+ serviceName: "supatype-server-rest",
10
+ serviceUrl: SERVER_GATEWAY,
11
+ paths: ["/rest/v1/"],
12
+ stripPath: false,
13
+ },
14
+ {
15
+ name: "auth-v1",
16
+ serviceName: "supatype-server-auth",
17
+ serviceUrl: SERVER_GATEWAY,
18
+ paths: ["/auth/v1/"],
19
+ stripPath: false,
20
+ },
21
+ {
22
+ name: "admin-v1",
23
+ serviceName: "supatype-server-admin",
24
+ serviceUrl: SERVER_GATEWAY,
25
+ paths: ["/admin/v1/"],
26
+ stripPath: false,
27
+ },
28
+ {
29
+ name: "storage-v1",
30
+ serviceName: "supatype-server-storage",
31
+ serviceUrl: SERVER_GATEWAY,
32
+ paths: ["/storage/v1/"],
33
+ stripPath: false,
34
+ },
35
+ {
36
+ name: "realtime-v1",
37
+ serviceName: "supatype-server-realtime",
38
+ serviceUrl: SERVER_GATEWAY,
39
+ paths: ["/realtime/v1/"],
40
+ stripPath: false,
41
+ protocols: ["http", "https", "ws", "wss"],
42
+ },
43
+ {
44
+ name: "functions-v1",
45
+ serviceName: "supatype-server-functions",
46
+ serviceUrl: SERVER_GATEWAY,
47
+ paths: ["/functions/v1/"],
48
+ stripPath: false,
49
+ },
50
+ {
51
+ name: "graphql-v1",
52
+ serviceName: "supatype-server-graphql",
53
+ serviceUrl: SERVER_GATEWAY,
54
+ paths: ["/graphql/v1/"],
55
+ stripPath: false,
56
+ },
57
+ {
58
+ name: "studio-config-route",
59
+ serviceName: "supatype-server-studio-config",
60
+ serviceUrl: SERVER_GATEWAY,
61
+ paths: ["/studio-config"],
62
+ stripPath: false,
63
+ },
64
+ {
65
+ name: "sql-route",
66
+ serviceName: "supatype-server-sql",
67
+ serviceUrl: SERVER_GATEWAY,
68
+ paths: ["/sql"],
69
+ stripPath: false,
70
+ },
71
+ {
72
+ name: "studio",
73
+ serviceName: "studio",
74
+ serviceUrl: "http://studio:3002",
75
+ paths: ["/studio/"],
76
+ stripPath: true,
77
+ },
78
+ {
79
+ name: "app-root",
80
+ serviceName: "supatype-server-app",
81
+ serviceUrl: SERVER_GATEWAY,
82
+ paths: ["/"],
83
+ stripPath: false,
84
+ },
85
+ ];
86
+ }
87
+ /**
88
+ * Legacy split-stack routes (PostgREST/storage/realtime directly from Kong).
89
+ * Kept for tests or explicit opt-out only — self-host uses unifiedGateway.
90
+ */
91
+ function runtimeRouteSpecSplit(opts) {
92
+ const routes = [
93
+ {
94
+ name: "rest-v1",
95
+ serviceName: "rest-v1",
96
+ serviceUrl: "http://postgrest:3000",
97
+ paths: ["/rest/v1/"],
98
+ stripPath: true,
99
+ },
100
+ {
101
+ name: "auth-v1",
102
+ serviceName: "auth-v1",
103
+ serviceUrl: "http://server:9999",
104
+ paths: ["/auth/v1/"],
105
+ stripPath: true,
106
+ },
107
+ {
108
+ name: "admin-v1",
109
+ serviceName: "admin-v1",
110
+ serviceUrl: "http://server:9999",
111
+ paths: ["/admin/v1/"],
112
+ stripPath: false,
113
+ },
114
+ {
115
+ name: "storage-v1",
116
+ serviceName: "storage-v1",
117
+ serviceUrl: "http://storage:5000",
118
+ paths: ["/storage/v1/"],
119
+ stripPath: true,
120
+ },
121
+ {
122
+ name: "realtime-v1",
123
+ serviceName: "realtime-v1",
124
+ serviceUrl: "http://realtime:4000",
125
+ paths: ["/realtime/v1/"],
126
+ stripPath: true,
127
+ protocols: ["http", "https", "ws", "wss"],
128
+ },
129
+ {
130
+ name: "functions-v1",
131
+ serviceName: "functions-v1",
132
+ serviceUrl: opts.functionsServiceUrl?.trim() || "http://server:9999",
133
+ paths: ["/functions/v1/"],
134
+ stripPath: false,
135
+ },
136
+ {
137
+ name: "studio",
138
+ serviceName: "studio",
139
+ serviceUrl: "http://studio:3002",
140
+ paths: ["/studio/"],
141
+ stripPath: true,
142
+ },
143
+ {
144
+ name: "studio-config-route",
145
+ serviceName: "engine-studio-config",
146
+ serviceUrl: "http://engine:7500",
147
+ paths: ["/studio-config"],
148
+ engineProtected: true,
149
+ },
150
+ {
151
+ name: "sql-route",
152
+ serviceName: "engine-sql",
153
+ serviceUrl: "http://engine:7500",
154
+ paths: ["/sql"],
155
+ engineProtected: true,
156
+ },
157
+ ];
158
+ const staticServiceUrl = opts.staticAppServiceUrl?.trim();
159
+ if (staticServiceUrl && staticServiceUrl.length > 0) {
160
+ routes.push({
161
+ name: "app-root",
162
+ serviceName: "app-root",
163
+ serviceUrl: staticServiceUrl,
164
+ paths: ["/"],
165
+ stripPath: false,
166
+ });
167
+ return routes;
168
+ }
169
+ if (opts.appUpstream && opts.appUpstream.trim().length > 0) {
170
+ routes.push({
171
+ name: "app-root",
172
+ serviceName: "app-root",
173
+ serviceUrl: opts.appUpstream.trim(),
174
+ paths: ["/"],
175
+ stripPath: false,
176
+ });
177
+ }
178
+ return routes;
179
+ }
180
+ /**
181
+ * Shared route contract used by local/self-host renderers.
182
+ */
183
+ export function runtimeRouteSpec(opts = {}) {
184
+ if (opts.unifiedGateway) {
185
+ return runtimeRouteSpecUnified();
186
+ }
187
+ return runtimeRouteSpecSplit(opts);
188
+ }
189
+ //# sourceMappingURL=runtime-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-routes.js","sourceRoot":"","sources":["../src/runtime-routes.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,11 @@
1
1
  /**
2
- * Postinstall script — downloads the correct engine binary for the current
3
- * platform and caches it at ~/.supatype/engine/{version}/supatype-engine[.exe].
2
+ * Postinstall script — downloads component binaries on first install.
4
3
  *
5
- * Pattern: same as Prisma, esbuild, SWC, Turbo.
4
+ * Components: supatype-engine, supatype-server, supatype-pg (Postgres), deno.
5
+ * Binaries are cached in ~/.supatype/cache/{component}/{version}/.
6
6
  *
7
- * The binary is verified via:
8
- * 1. Minisign signature on checksums.sha256 (proves checksum file is authentic)
9
- * 2. SHA256 checksum of binary (proves binary matches signed checksum)
7
+ * Failures are non-fatal: an installation message is printed and the user
8
+ * can run `supatype update` manually to retry.
10
9
  */
11
10
  export {};
12
11
  //# sourceMappingURL=postinstall.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"postinstall.d.ts","sourceRoot":"","sources":["../../src/scripts/postinstall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
1
+ {"version":3,"file":"postinstall.d.ts","sourceRoot":"","sources":["../../src/scripts/postinstall.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -1,31 +1,47 @@
1
1
  /**
2
- * Postinstall script — downloads the correct engine binary for the current
3
- * platform and caches it at ~/.supatype/engine/{version}/supatype-engine[.exe].
2
+ * Postinstall script — downloads component binaries on first install.
4
3
  *
5
- * Pattern: same as Prisma, esbuild, SWC, Turbo.
4
+ * Components: supatype-engine, supatype-server, supatype-pg (Postgres), deno.
5
+ * Binaries are cached in ~/.supatype/cache/{component}/{version}/.
6
6
  *
7
- * The binary is verified via:
8
- * 1. Minisign signature on checksums.sha256 (proves checksum file is authentic)
9
- * 2. SHA256 checksum of binary (proves binary matches signed checksum)
7
+ * Failures are non-fatal: an installation message is printed and the user
8
+ * can run `supatype update` manually to retry.
10
9
  */
11
- import { ENGINE_VERSION } from "../engine-version.js";
12
- import { detectPlatform } from "../engine/platform.js";
13
- import { hasCachedBinary } from "../engine/cache.js";
14
- import { resolveEngine } from "../engine/resolve.js";
10
+ import { download, currentPlatform, fetchAllLatestVersions } from "../binary-cache.js";
15
11
  async function main() {
16
- const platform = detectPlatform();
17
- // Skip if already cached at the right version
18
- if (hasCachedBinary(ENGINE_VERSION, platform)) {
19
- console.log(`[supatype] Engine v${ENGINE_VERSION} already cached.`);
12
+ const platform = currentPlatform();
13
+ let versions;
14
+ try {
15
+ console.log("[supatype] Fetching latest component versions...");
16
+ versions = await fetchAllLatestVersions();
17
+ }
18
+ catch (err) {
19
+ console.error(`[supatype] Failed to fetch latest versions: ${err.message}`);
20
+ console.error("[supatype] Run 'supatype update' to download component binaries.");
20
21
  return;
21
22
  }
22
- console.log(`[supatype] Downloading engine v${ENGINE_VERSION} for ${platform.os}-${platform.arch}...`);
23
- const result = await resolveEngine(ENGINE_VERSION);
24
- console.log(`[supatype] Engine installed at ${result.binaryPath}`);
23
+ console.log(`[supatype] Downloading component binaries for ${platform.os}/${platform.arch}...`);
24
+ const components = Object.entries(versions);
25
+ let anyFailed = false;
26
+ for (const [component, version] of components) {
27
+ try {
28
+ await download(component, version, platform);
29
+ }
30
+ catch (err) {
31
+ console.error(`[supatype] Failed to download ${component} v${version}: ${err.message}`);
32
+ anyFailed = true;
33
+ }
34
+ }
35
+ if (anyFailed) {
36
+ console.error("[supatype] Some downloads failed. Run 'supatype update' to retry.");
37
+ }
38
+ else {
39
+ console.log("[supatype] All component binaries downloaded successfully.");
40
+ }
25
41
  }
26
42
  main().catch((err) => {
27
- console.error("[supatype] Engine download failed:", err.message);
28
- console.error("[supatype] You can still use the CLI — the engine will be downloaded on first use.");
29
- // Don't exit(1) — let npm install succeed even if binary download fails.
43
+ // Non-fatal postinstall failures should not break npm install.
44
+ console.error("[supatype] Postinstall failed:", err);
45
+ process.exit(0);
30
46
  });
31
47
  //# sourceMappingURL=postinstall.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../../src/scripts/postinstall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,KAAK,UAAU,IAAI;IACjB,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAA;IAEjC,8CAA8C;IAC9C,IAAI,eAAe,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,sBAAsB,cAAc,kBAAkB,CAAC,CAAA;QACnE,OAAM;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CACT,kCAAkC,cAAc,QAAQ,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,KAAK,CAC1F,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,cAAc,CAAC,CAAA;IAClD,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;AACpE,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAChE,OAAO,CAAC,KAAK,CACX,oFAAoF,CACrF,CAAA;IACD,yEAAyE;AAC3E,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../../src/scripts/postinstall.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,sBAAsB,EAAkB,MAAM,oBAAoB,CAAA;AAEtG,KAAK,UAAU,IAAI;IACjB,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAA;IAElC,IAAI,QAAmC,CAAA;IACvC,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;QAC/D,QAAQ,GAAG,MAAM,sBAAsB,EAAE,CAAA;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+CAAgD,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;QACtF,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAA;QACjF,OAAM;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iDAAiD,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAA;IAE/F,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAA0B,CAAA;IAEpE,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,UAAU,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,SAAS,KAAK,OAAO,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;YAClG,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC;IACH,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAA;IACpF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;IAC3E,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,iEAAiE;IACjE,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAA;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
@@ -0,0 +1,14 @@
1
+ import type { SupatypeProjectConfig } from "./project-config.js";
2
+ export interface SelfHostComposePaths {
3
+ dir: string;
4
+ composePath: string;
5
+ kongPath: string;
6
+ nginxPath: string;
7
+ }
8
+ export declare function selfHostComposePaths(cwd: string): SelfHostComposePaths;
9
+ export declare function appUpstreamForCompose(config: SupatypeProjectConfig): string | undefined;
10
+ export declare function staticDirForCompose(config: SupatypeProjectConfig): string | undefined;
11
+ export declare function renderSelfHostCompose(config: SupatypeProjectConfig, cwd?: string): string;
12
+ export declare function writeSelfHostCompose(cwd: string, config: SupatypeProjectConfig): SelfHostComposePaths;
13
+ export declare function runDockerCompose(composePath: string, args: string[], projectRoot?: string): number;
14
+ //# sourceMappingURL=self-host-compose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-host-compose.d.ts","sourceRoot":"","sources":["../src/self-host-compose.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAGhE,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAQtE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAIvF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAIrF;AAuBD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CA4JxG;AAgBD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,oBAAoB,CAarG;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,GAAE,MAAsB,GAAG,MAAM,CAajH"}
@@ -0,0 +1,236 @@
1
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
2
+ import { dirname, join, relative, resolve } from "node:path";
3
+ import { spawnSync } from "node:child_process";
4
+ import { buildKongDeclarative } from "./kong-config.js";
5
+ export function selfHostComposePaths(cwd) {
6
+ const dir = resolve(cwd, ".supatype", "self-host");
7
+ return {
8
+ dir,
9
+ composePath: join(dir, "docker-compose.yml"),
10
+ kongPath: join(dir, "kong.yml"),
11
+ nginxPath: join(dir, "nginx.conf"),
12
+ };
13
+ }
14
+ export function appUpstreamForCompose(config) {
15
+ if (config.app.mode !== "proxy")
16
+ return undefined;
17
+ const upstream = config.app.upstream?.trim();
18
+ return upstream && upstream.length > 0 ? upstream : undefined;
19
+ }
20
+ export function staticDirForCompose(config) {
21
+ if (config.app.mode !== "static")
22
+ return undefined;
23
+ const dir = config.app.static_dir?.trim();
24
+ return dir && dir.length > 0 ? dir : "./public";
25
+ }
26
+ function projectMountPath(cwd) {
27
+ const composeDir = resolve(cwd, ".supatype", "self-host");
28
+ let rel = relative(composeDir, resolve(cwd)).replace(/\\/g, "/");
29
+ if (!rel.startsWith(".") && !rel.startsWith("/")) {
30
+ rel = `./${rel}`;
31
+ }
32
+ return rel || "../..";
33
+ }
34
+ function serverAppEnvForCompose(config) {
35
+ const mode = config.app.mode ?? "none";
36
+ const lines = [` SUPATYPE_APP_MODE: ${mode}`];
37
+ if (mode === "static") {
38
+ const dir = staticDirForCompose(config) ?? "./public";
39
+ lines.push(` SUPATYPE_APP_STATIC_DIR: /project/${dir.replace(/^\.\//, "")}`);
40
+ }
41
+ else if (mode === "proxy" && config.app.upstream?.trim()) {
42
+ lines.push(` SUPATYPE_APP_UPSTREAM: ${config.app.upstream.trim()}`);
43
+ }
44
+ return lines.join("\n");
45
+ }
46
+ export function renderSelfHostCompose(config, cwd = process.cwd()) {
47
+ const projectMount = projectMountPath(cwd);
48
+ const appEnv = serverAppEnvForCompose(config);
49
+ return `# Generated by supatype self-host compose
50
+ # Kong → supatype-server (unified gateway) → internal PostgREST / storage / etc.
51
+ services:
52
+ db:
53
+ image: \${SUPATYPE_POSTGRES_IMAGE:-supatype/postgres:17-latest}
54
+ environment:
55
+ POSTGRES_USER: \${POSTGRES_USER:-supatype_admin}
56
+ POSTGRES_PASSWORD: \${POSTGRES_PASSWORD:-postgres}
57
+ POSTGRES_DB: \${POSTGRES_DB:-supatype}
58
+ ports:
59
+ - "5432:5432"
60
+ volumes:
61
+ - db-data:/var/lib/postgresql/data
62
+ healthcheck:
63
+ test: ["CMD-SHELL", "pg_isready -U \${POSTGRES_USER:-supatype_admin}"]
64
+ interval: 5s
65
+ timeout: 5s
66
+ retries: 20
67
+
68
+ postgrest:
69
+ image: postgrest/postgrest:v12.2.8
70
+ expose:
71
+ - "3000"
72
+ environment:
73
+ PGRST_DB_URI: postgresql://\${POSTGRES_USER:-supatype_admin}:\${POSTGRES_PASSWORD:-postgres}@db:5432/\${POSTGRES_DB:-supatype}
74
+ PGRST_DB_SCHEMA: "public, supatype"
75
+ PGRST_DB_ANON_ROLE: anon
76
+ PGRST_JWT_SECRET: \${JWT_SECRET:-super-secret-jwt-token-change-in-production}
77
+ PGRST_DB_EXTRA_SEARCH_PATH: public,extensions
78
+ PGRST_DB_POOL: 3
79
+ depends_on:
80
+ db:
81
+ condition: service_healthy
82
+
83
+ storage:
84
+ image: \${SUPATYPE_STORAGE_IMAGE:-supatype/storage:latest}
85
+ expose:
86
+ - "5000"
87
+ environment:
88
+ PORT: 5000
89
+ DATABASE_URL: "postgresql://\${POSTGRES_USER:-supatype_admin}:\${POSTGRES_PASSWORD:-postgres}@db:5432/\${POSTGRES_DB:-supatype}"
90
+ JWT_SECRET: \${JWT_SECRET:-super-secret-jwt-token-change-in-production}
91
+ S3_ENDPOINT: http://minio:9000
92
+ S3_REGION: us-east-1
93
+ S3_ACCESS_KEY: supatype
94
+ S3_SECRET_KEY: supatype-secret
95
+ S3_FORCE_PATH_STYLE: "true"
96
+ depends_on:
97
+ db:
98
+ condition: service_healthy
99
+
100
+ functions-worker:
101
+ image: \${SUPATYPE_FUNCTIONS_WORKER_IMAGE:-supatype/functions-worker:latest}
102
+ expose:
103
+ - "8001"
104
+ volumes:
105
+ - ${projectMount}:/project:ro
106
+ environment:
107
+ SUPATYPE_FUNCTIONS_ROOT: /project/functions
108
+ SUPATYPE_DENO_FUNCTIONS_DIR: /project/functions
109
+ PORT: "8001"
110
+ SUPATYPE_URL: \${API_EXTERNAL_URL:-http://localhost:18473}
111
+ SUPATYPE_ANON_KEY: \${ANON_KEY:-}
112
+ SUPATYPE_SERVICE_ROLE_KEY: \${SERVICE_ROLE_KEY:-}
113
+ depends_on:
114
+ db:
115
+ condition: service_healthy
116
+
117
+ server:
118
+ image: \${SUPATYPE_SERVER_IMAGE:-\${SUPATYPE_AUTH_IMAGE:-supatype/server:latest}}
119
+ ports:
120
+ - "9999:9999"
121
+ volumes:
122
+ - ${projectMount}:/project:ro
123
+ working_dir: /project
124
+ environment:
125
+ SUPATYPE_MODE: standalone
126
+ SUPATYPE_MANIFEST_PATH: /project/.supatype/manifest.json
127
+ SUPATYPE_ADMIN_CONFIG_PATH: /project/.supatype/admin-config.json
128
+ SUPATYPE_API_CONFIG_PATH: /project/.supatype/api-config.json
129
+ SUPATYPE_POSTGREST_URL: http://postgrest:3000
130
+ SUPATYPE_GRAPHQL_URL: http://postgrest:3000
131
+ SUPATYPE_STORAGE_URL: http://storage:5000
132
+ SUPATYPE_URL: \${API_EXTERNAL_URL:-http://localhost:18473}
133
+ SUPATYPE_ANON_KEY: \${ANON_KEY:-}
134
+ SUPATYPE_SERVICE_ROLE_KEY: \${SERVICE_ROLE_KEY:-}
135
+ SUPATYPE_SQL_DATABASE_URL: "postgresql://\${POSTGRES_USER:-supatype_admin}:\${POSTGRES_PASSWORD:-postgres}@db:5432/\${POSTGRES_DB:-supatype}"
136
+ SUPATYPE_DENO_FUNCTIONS_DIR: /project/functions
137
+ SUPATYPE_FUNCTIONS_WORKER_URL: http://functions-worker:8001
138
+ ${appEnv}
139
+ GOTRUE_API_HOST: 0.0.0.0
140
+ GOTRUE_API_PORT: 9999
141
+ API_EXTERNAL_URL: \${API_EXTERNAL_URL:-http://localhost:18473}
142
+ GOTRUE_API_EXTERNAL_URL: \${API_EXTERNAL_URL:-http://localhost:18473}
143
+ GOTRUE_DB_DRIVER: postgres
144
+ GOTRUE_DB_DATABASE_URL: "postgres://\${POSTGRES_USER:-supatype_admin}:\${POSTGRES_PASSWORD:-postgres}@db:5432/\${POSTGRES_DB:-supatype}?search_path=auth"
145
+ GOTRUE_SITE_URL: \${SITE_URL:-http://localhost:3000}
146
+ GOTRUE_JWT_SECRET: \${JWT_SECRET:-super-secret-jwt-token-change-in-production}
147
+ GOTRUE_JWT_EXP: 3600
148
+ GOTRUE_JWT_AUD: authenticated
149
+ GOTRUE_JWT_DEFAULT_GROUP_NAME: authenticated
150
+ GOTRUE_JWT_ADMIN_ROLES: service_role,supatype_admin
151
+ GOTRUE_MAILER_AUTOCONFIRM: \${GOTRUE_MAILER_AUTOCONFIRM:-true}
152
+ GOTRUE_DISABLE_SIGNUP: \${DISABLE_SIGNUP:-false}
153
+ depends_on:
154
+ db:
155
+ condition: service_healthy
156
+ postgrest:
157
+ condition: service_started
158
+ storage:
159
+ condition: service_started
160
+ functions-worker:
161
+ condition: service_started
162
+
163
+ minio:
164
+ image: minio/minio:RELEASE.2024-11-07T00-52-20Z
165
+ command: server /data --console-address ":9001"
166
+ environment:
167
+ MINIO_ROOT_USER: supatype
168
+ MINIO_ROOT_PASSWORD: supatype-secret
169
+ ports:
170
+ - "9000:9000"
171
+ - "9001:9001"
172
+ volumes:
173
+ - minio-data:/data
174
+
175
+ studio:
176
+ image: \${SUPATYPE_STUDIO_IMAGE:-supatype/studio:latest}
177
+ expose:
178
+ - "3002"
179
+
180
+ kong:
181
+ image: kong:3.6
182
+ environment:
183
+ KONG_DATABASE: "off"
184
+ KONG_DECLARATIVE_CONFIG: /etc/kong/kong.yml
185
+ KONG_PROXY_ACCESS_LOG: /dev/stdout
186
+ KONG_ADMIN_ACCESS_LOG: /dev/stdout
187
+ KONG_PROXY_ERROR_LOG: /dev/stderr
188
+ KONG_ADMIN_ERROR_LOG: /dev/stderr
189
+ volumes:
190
+ - ./kong.yml:/etc/kong/kong.yml:ro
191
+ ports:
192
+ - "18473:8000"
193
+ depends_on:
194
+ - server
195
+ - studio
196
+
197
+ volumes:
198
+ db-data:
199
+ minio-data:
200
+ `;
201
+ }
202
+ function ensureComposeManifest(cwd) {
203
+ const manifestPath = join(cwd, ".supatype", "manifest.json");
204
+ if (existsSync(manifestPath))
205
+ return;
206
+ mkdirSync(dirname(manifestPath), { recursive: true });
207
+ const manifest = {
208
+ schema: "public",
209
+ postgrest_url: "http://postgrest:3000",
210
+ storage_url: "http://storage:5000",
211
+ realtime_enabled: true,
212
+ functions_enabled: false,
213
+ };
214
+ writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
215
+ }
216
+ export function writeSelfHostCompose(cwd, config) {
217
+ const paths = selfHostComposePaths(cwd);
218
+ mkdirSync(paths.dir, { recursive: true });
219
+ ensureComposeManifest(cwd);
220
+ writeFileSync(paths.composePath, renderSelfHostCompose(config, cwd), "utf8");
221
+ writeFileSync(paths.kongPath, buildKongDeclarative({
222
+ unifiedGateway: true,
223
+ }), "utf8");
224
+ return paths;
225
+ }
226
+ export function runDockerCompose(composePath, args, projectRoot = process.cwd()) {
227
+ const envFile = resolve(projectRoot, ".env");
228
+ const composeArgs = ["compose", "-f", composePath];
229
+ if (existsSync(envFile)) {
230
+ composeArgs.push("--env-file", envFile);
231
+ }
232
+ composeArgs.push(...args);
233
+ const result = spawnSync("docker", composeArgs, { stdio: "inherit", cwd: dirname(composePath) });
234
+ return result.status ?? 1;
235
+ }
236
+ //# sourceMappingURL=self-host-compose.js.map