@specific.dev/cli 0.1.37 → 0.1.38

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 (173) hide show
  1. package/dist/admin/404/index.html +1 -1
  2. package/dist/admin/404.html +1 -1
  3. package/dist/admin/__next.__PAGE__.txt +2 -2
  4. package/dist/admin/__next._full.txt +3 -3
  5. package/dist/admin/__next._head.txt +1 -1
  6. package/dist/admin/__next._index.txt +2 -2
  7. package/dist/admin/__next._tree.txt +2 -2
  8. package/dist/admin/_next/static/chunks/{de6af6d8adf8b50a.js → 0476153b08658d87.js} +2 -2
  9. package/dist/admin/_next/static/chunks/{4ab079bdcb131778.js → 1de437acc5206b1f.js} +2 -2
  10. package/dist/admin/_next/static/chunks/5ff94899b8b7a03a.css +3 -0
  11. package/dist/admin/_next/static/chunks/{895a6f91f0b479fb.js → 6aae09c9429b9f24.js} +2 -2
  12. package/dist/admin/_next/static/chunks/b71388016463cab2.js +1 -0
  13. package/dist/admin/_not-found/__next._full.txt +2 -2
  14. package/dist/admin/_not-found/__next._head.txt +1 -1
  15. package/dist/admin/_not-found/__next._index.txt +2 -2
  16. package/dist/admin/_not-found/__next._not-found.__PAGE__.txt +1 -1
  17. package/dist/admin/_not-found/__next._not-found.txt +1 -1
  18. package/dist/admin/_not-found/__next._tree.txt +2 -2
  19. package/dist/admin/_not-found/index.html +1 -1
  20. package/dist/admin/_not-found/index.txt +2 -2
  21. package/dist/admin/databases/__next._full.txt +3 -3
  22. package/dist/admin/databases/__next._head.txt +1 -1
  23. package/dist/admin/databases/__next._index.txt +2 -2
  24. package/dist/admin/databases/__next._tree.txt +2 -2
  25. package/dist/admin/databases/__next.databases.__PAGE__.txt +2 -2
  26. package/dist/admin/databases/__next.databases.txt +1 -1
  27. package/dist/admin/databases/index.html +1 -1
  28. package/dist/admin/databases/index.txt +3 -3
  29. package/dist/admin/index.html +1 -1
  30. package/dist/admin/index.txt +3 -3
  31. package/dist/cli.js +1182 -496
  32. package/package.json +1 -1
  33. package/dist/admin/_next/static/1o2O2QPOKhuZyxcNaCjq8/_buildManifest.js +0 -11
  34. package/dist/admin/_next/static/1o2O2QPOKhuZyxcNaCjq8/_clientMiddlewareManifest.json +0 -1
  35. package/dist/admin/_next/static/1o2O2QPOKhuZyxcNaCjq8/_ssgManifest.js +0 -1
  36. package/dist/admin/_next/static/2ZtqtFX2EkuM82mTM7NWT/_buildManifest.js +0 -11
  37. package/dist/admin/_next/static/2ZtqtFX2EkuM82mTM7NWT/_clientMiddlewareManifest.json +0 -1
  38. package/dist/admin/_next/static/2ZtqtFX2EkuM82mTM7NWT/_ssgManifest.js +0 -1
  39. package/dist/admin/_next/static/2vLF5bo4ZtUfhs8bdQBoF/_buildManifest.js +0 -11
  40. package/dist/admin/_next/static/2vLF5bo4ZtUfhs8bdQBoF/_clientMiddlewareManifest.json +0 -1
  41. package/dist/admin/_next/static/2vLF5bo4ZtUfhs8bdQBoF/_ssgManifest.js +0 -1
  42. package/dist/admin/_next/static/8_8s51m7RbLVvbIechG-b/_buildManifest.js +0 -11
  43. package/dist/admin/_next/static/8_8s51m7RbLVvbIechG-b/_clientMiddlewareManifest.json +0 -1
  44. package/dist/admin/_next/static/8_8s51m7RbLVvbIechG-b/_ssgManifest.js +0 -1
  45. package/dist/admin/_next/static/C4Y44KtLnP684m57gN3Ga/_buildManifest.js +0 -11
  46. package/dist/admin/_next/static/C4Y44KtLnP684m57gN3Ga/_clientMiddlewareManifest.json +0 -1
  47. package/dist/admin/_next/static/C4Y44KtLnP684m57gN3Ga/_ssgManifest.js +0 -1
  48. package/dist/admin/_next/static/DBeh36kAJnZBeBMJSPBW8/_buildManifest.js +0 -11
  49. package/dist/admin/_next/static/DBeh36kAJnZBeBMJSPBW8/_clientMiddlewareManifest.json +0 -1
  50. package/dist/admin/_next/static/DBeh36kAJnZBeBMJSPBW8/_ssgManifest.js +0 -1
  51. package/dist/admin/_next/static/REKEUu6DP2t99jKSAqNOu/_buildManifest.js +0 -11
  52. package/dist/admin/_next/static/REKEUu6DP2t99jKSAqNOu/_clientMiddlewareManifest.json +0 -1
  53. package/dist/admin/_next/static/REKEUu6DP2t99jKSAqNOu/_ssgManifest.js +0 -1
  54. package/dist/admin/_next/static/TDGT3mkKtTe0w_CxujLxI/_buildManifest.js +0 -11
  55. package/dist/admin/_next/static/TDGT3mkKtTe0w_CxujLxI/_clientMiddlewareManifest.json +0 -1
  56. package/dist/admin/_next/static/TDGT3mkKtTe0w_CxujLxI/_ssgManifest.js +0 -1
  57. package/dist/admin/_next/static/ZHMJ-g7mAlAMt_2uCXeEk/_buildManifest.js +0 -11
  58. package/dist/admin/_next/static/ZHMJ-g7mAlAMt_2uCXeEk/_clientMiddlewareManifest.json +0 -1
  59. package/dist/admin/_next/static/ZHMJ-g7mAlAMt_2uCXeEk/_ssgManifest.js +0 -1
  60. package/dist/admin/_next/static/a6JDAB-CdvWPvS4sBgJji/_buildManifest.js +0 -11
  61. package/dist/admin/_next/static/a6JDAB-CdvWPvS4sBgJji/_clientMiddlewareManifest.json +0 -1
  62. package/dist/admin/_next/static/a6JDAB-CdvWPvS4sBgJji/_ssgManifest.js +0 -1
  63. package/dist/admin/_next/static/abFUeBpymhlx-IxygVnM9/_buildManifest.js +0 -11
  64. package/dist/admin/_next/static/abFUeBpymhlx-IxygVnM9/_clientMiddlewareManifest.json +0 -1
  65. package/dist/admin/_next/static/abFUeBpymhlx-IxygVnM9/_ssgManifest.js +0 -1
  66. package/dist/admin/_next/static/chunks/1584f10ea1cebcb2.js +0 -4
  67. package/dist/admin/_next/static/chunks/195bbec70cfcd241.js +0 -2
  68. package/dist/admin/_next/static/chunks/2583656ea9ac4ad6.js +0 -5
  69. package/dist/admin/_next/static/chunks/605800ff25160d05.js +0 -1
  70. package/dist/admin/_next/static/chunks/656b870f0567ed5f.js +0 -1
  71. package/dist/admin/_next/static/chunks/71098a6cd6181738.css +0 -3
  72. package/dist/admin/_next/static/chunks/9032f4a1aac1ca5d.css +0 -3
  73. package/dist/admin/_next/static/chunks/a28af2dc6f5fbaad.js +0 -1
  74. package/dist/admin/_next/static/chunks/b4205fc2f84bda68.css +0 -3
  75. package/dist/admin/_next/static/chunks/c1a750c25bc8d092.js +0 -1
  76. package/dist/admin/_next/static/chunks/c3d30f6f144dca51.js +0 -2
  77. package/dist/admin/_next/static/chunks/cbf55ce8731457ae.js +0 -2
  78. package/dist/admin/_next/static/chunks/f0c001244d275aab.js +0 -5
  79. package/dist/admin/_next/static/chunks/fde89fd76ad6a3d0.css +0 -3
  80. package/dist/admin/_next/static/chunks/turbopack-a3d691c83d4b1778.js +0 -4
  81. package/dist/admin/_next/static/dcjrfD44GuB6g8bZ6BcFm/_buildManifest.js +0 -11
  82. package/dist/admin/_next/static/dcjrfD44GuB6g8bZ6BcFm/_clientMiddlewareManifest.json +0 -1
  83. package/dist/admin/_next/static/dcjrfD44GuB6g8bZ6BcFm/_ssgManifest.js +0 -1
  84. package/dist/admin/_next/static/fTEa8Scx922n-dMuqN3Vc/_buildManifest.js +0 -11
  85. package/dist/admin/_next/static/fTEa8Scx922n-dMuqN3Vc/_clientMiddlewareManifest.json +0 -1
  86. package/dist/admin/_next/static/fTEa8Scx922n-dMuqN3Vc/_ssgManifest.js +0 -1
  87. package/dist/admin/_next/static/kZNwyhHft01wPtJ_AvqQT/_buildManifest.js +0 -11
  88. package/dist/admin/_next/static/kZNwyhHft01wPtJ_AvqQT/_clientMiddlewareManifest.json +0 -1
  89. package/dist/admin/_next/static/kZNwyhHft01wPtJ_AvqQT/_ssgManifest.js +0 -1
  90. package/dist/admin/_next/static/kyVInC6N3DY6NWnjkLQ4J/_buildManifest.js +0 -11
  91. package/dist/admin/_next/static/kyVInC6N3DY6NWnjkLQ4J/_clientMiddlewareManifest.json +0 -1
  92. package/dist/admin/_next/static/kyVInC6N3DY6NWnjkLQ4J/_ssgManifest.js +0 -1
  93. package/dist/admin/_next/static/twedXBdhyxpjS68UQoNAc/_buildManifest.js +0 -11
  94. package/dist/admin/_next/static/twedXBdhyxpjS68UQoNAc/_clientMiddlewareManifest.json +0 -1
  95. package/dist/admin/_next/static/twedXBdhyxpjS68UQoNAc/_ssgManifest.js +0 -1
  96. package/dist/cli.d.ts +0 -3
  97. package/dist/cli.d.ts.map +0 -1
  98. package/dist/cli.js.map +0 -1
  99. package/dist/commands/check.d.ts +0 -2
  100. package/dist/commands/check.d.ts.map +0 -1
  101. package/dist/commands/check.js +0 -104
  102. package/dist/commands/check.js.map +0 -1
  103. package/dist/commands/clean.d.ts +0 -2
  104. package/dist/commands/clean.d.ts.map +0 -1
  105. package/dist/commands/clean.js +0 -70
  106. package/dist/commands/clean.js.map +0 -1
  107. package/dist/commands/deploy.d.ts +0 -2
  108. package/dist/commands/deploy.d.ts.map +0 -1
  109. package/dist/commands/deploy.js +0 -11
  110. package/dist/commands/deploy.js.map +0 -1
  111. package/dist/commands/dev.d.ts +0 -2
  112. package/dist/commands/dev.d.ts.map +0 -1
  113. package/dist/commands/dev.js +0 -398
  114. package/dist/commands/dev.js.map +0 -1
  115. package/dist/commands/docs.d.ts +0 -2
  116. package/dist/commands/docs.d.ts.map +0 -1
  117. package/dist/commands/docs.js +0 -32
  118. package/dist/commands/docs.js.map +0 -1
  119. package/dist/commands/exec.d.ts +0 -2
  120. package/dist/commands/exec.d.ts.map +0 -1
  121. package/dist/commands/exec.js +0 -178
  122. package/dist/commands/exec.js.map +0 -1
  123. package/dist/commands/init.d.ts +0 -2
  124. package/dist/commands/init.d.ts.map +0 -1
  125. package/dist/commands/init.js +0 -339
  126. package/dist/commands/init.js.map +0 -1
  127. package/dist/commands/psql.d.ts +0 -2
  128. package/dist/commands/psql.d.ts.map +0 -1
  129. package/dist/commands/psql.js +0 -53
  130. package/dist/commands/psql.js.map +0 -1
  131. package/dist/commands/secrets.d.ts +0 -3
  132. package/dist/commands/secrets.d.ts.map +0 -1
  133. package/dist/commands/secrets.js +0 -136
  134. package/dist/commands/secrets.js.map +0 -1
  135. package/dist/lib/dev/database-manager.d.ts +0 -17
  136. package/dist/lib/dev/database-manager.d.ts.map +0 -1
  137. package/dist/lib/dev/database-manager.js +0 -114
  138. package/dist/lib/dev/database-manager.js.map +0 -1
  139. package/dist/lib/dev/env-resolver.d.ts +0 -14
  140. package/dist/lib/dev/env-resolver.d.ts.map +0 -1
  141. package/dist/lib/dev/env-resolver.js +0 -109
  142. package/dist/lib/dev/env-resolver.js.map +0 -1
  143. package/dist/lib/dev/http-proxy.d.ts +0 -11
  144. package/dist/lib/dev/http-proxy.d.ts.map +0 -1
  145. package/dist/lib/dev/http-proxy.js +0 -165
  146. package/dist/lib/dev/http-proxy.js.map +0 -1
  147. package/dist/lib/dev/index.d.ts +0 -11
  148. package/dist/lib/dev/index.d.ts.map +0 -1
  149. package/dist/lib/dev/index.js +0 -7
  150. package/dist/lib/dev/index.js.map +0 -1
  151. package/dist/lib/dev/instance-state.d.ts +0 -45
  152. package/dist/lib/dev/instance-state.d.ts.map +0 -1
  153. package/dist/lib/dev/instance-state.js +0 -213
  154. package/dist/lib/dev/instance-state.js.map +0 -1
  155. package/dist/lib/dev/port-allocator.d.ts +0 -5
  156. package/dist/lib/dev/port-allocator.d.ts.map +0 -1
  157. package/dist/lib/dev/port-allocator.js +0 -21
  158. package/dist/lib/dev/port-allocator.js.map +0 -1
  159. package/dist/lib/dev/service-runner.d.ts +0 -16
  160. package/dist/lib/dev/service-runner.d.ts.map +0 -1
  161. package/dist/lib/dev/service-runner.js +0 -61
  162. package/dist/lib/dev/service-runner.js.map +0 -1
  163. package/dist/lib/secrets/index.d.ts +0 -2
  164. package/dist/lib/secrets/index.d.ts.map +0 -1
  165. package/dist/lib/secrets/index.js +0 -2
  166. package/dist/lib/secrets/index.js.map +0 -1
  167. package/dist/lib/secrets/parser.d.ts +0 -37
  168. package/dist/lib/secrets/parser.d.ts.map +0 -1
  169. package/dist/lib/secrets/parser.js +0 -116
  170. package/dist/lib/secrets/parser.js.map +0 -1
  171. /package/dist/admin/_next/static/{0zkv3YeV6IWOWVWE1S1A1 → dtzWfchSIjRVrII5xoJl6}/_buildManifest.js +0 -0
  172. /package/dist/admin/_next/static/{0zkv3YeV6IWOWVWE1S1A1 → dtzWfchSIjRVrII5xoJl6}/_clientMiddlewareManifest.json +0 -0
  173. /package/dist/admin/_next/static/{0zkv3YeV6IWOWVWE1S1A1 → dtzWfchSIjRVrII5xoJl6}/_ssgManifest.js +0 -0
@@ -1,114 +0,0 @@
1
- import EmbeddedPostgres from "embedded-postgres";
2
- import * as fs from "fs";
3
- import * as path from "path";
4
- export async function startDatabase(db, port, dataDir = ".specific/data") {
5
- if (db.engine === "redis") {
6
- return startRedis(db, port);
7
- }
8
- if (db.engine === "object_store") {
9
- return startObjectStore(db, port, dataDir);
10
- }
11
- return startPostgres(db, port, dataDir);
12
- }
13
- async function startPostgres(db, port, dataDir) {
14
- const dbDataPath = path.join(process.cwd(), dataDir, db.name);
15
- const host = "127.0.0.1";
16
- const user = "postgres";
17
- const password = "postgres";
18
- const pg = new EmbeddedPostgres({
19
- databaseDir: dbDataPath,
20
- port,
21
- user,
22
- password,
23
- persistent: true,
24
- onLog: () => { },
25
- onError: () => { },
26
- });
27
- // Only initialize if the data directory doesn't exist yet
28
- const dataExists = fs.existsSync(dbDataPath);
29
- if (!dataExists) {
30
- await pg.initialise();
31
- }
32
- await pg.start();
33
- // Create the database if it doesn't exist
34
- try {
35
- await pg.createDatabase(db.name);
36
- }
37
- catch {
38
- // Database may already exist, which is fine
39
- }
40
- return {
41
- name: db.name,
42
- engine: "postgres",
43
- port,
44
- host,
45
- user,
46
- password,
47
- dbName: db.name,
48
- url: `postgres://${user}:${password}@${host}:${port}/${db.name}`,
49
- async stop() {
50
- await pg.stop();
51
- },
52
- };
53
- }
54
- async function startRedis(db, port) {
55
- const { RedisMemoryServer } = await import("redis-memory-server");
56
- const server = new RedisMemoryServer({
57
- instance: {
58
- port,
59
- },
60
- });
61
- const host = await server.getHost();
62
- const actualPort = await server.getPort();
63
- return {
64
- name: db.name,
65
- engine: "redis",
66
- port: actualPort,
67
- host,
68
- user: "",
69
- password: "",
70
- dbName: db.name,
71
- url: `redis://${host}:${actualPort}`,
72
- async stop() {
73
- await server.stop();
74
- },
75
- };
76
- }
77
- async function startObjectStore(db, port, dataDir) {
78
- const S3rver = (await import("s3rver")).default;
79
- const dbDataPath = path.join(process.cwd(), dataDir, db.name);
80
- // Ensure data directory exists
81
- if (!fs.existsSync(dbDataPath)) {
82
- fs.mkdirSync(dbDataPath, { recursive: true });
83
- }
84
- const host = "127.0.0.1";
85
- const accessKey = "S3RVER";
86
- const secretKey = "S3RVER";
87
- const server = new S3rver({
88
- address: host,
89
- port,
90
- directory: dbDataPath,
91
- silent: true,
92
- allowMismatchedSignatures: true,
93
- configureBuckets: [{ name: db.name }],
94
- });
95
- await server.run();
96
- const endpoint = `http://${host}:${port}`;
97
- return {
98
- name: db.name,
99
- engine: "object_store",
100
- port,
101
- host,
102
- user: "",
103
- password: "",
104
- dbName: db.name,
105
- url: endpoint,
106
- endpoint,
107
- accessKey,
108
- secretKey,
109
- async stop() {
110
- await server.close();
111
- },
112
- };
113
- }
114
- //# sourceMappingURL=database-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"database-manager.js","sourceRoot":"","sources":["../../../src/lib/dev/database-manager.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import type { Reference } from "@specific/config";
2
- import type { DatabaseInstance } from "./database-manager.js";
3
- export declare class MissingSecretError extends Error {
4
- secretName: string;
5
- constructor(secretName: string);
6
- }
7
- export declare function resolveEnvValue(value: string | Reference, databases: Map<string, DatabaseInstance>, secrets: Map<string, string>, servicePort?: number): string;
8
- export declare function resolveEnv(env: Record<string, string | Reference> | undefined, databases: Map<string, DatabaseInstance>, secrets: Map<string, string>, servicePort?: number): Record<string, string>;
9
- /**
10
- * Resolve environment variables for exec mode.
11
- * Silently skips port references since there's no service port in exec context.
12
- */
13
- export declare function resolveEnvForExec(env: Record<string, string | Reference> | undefined, databases: Map<string, DatabaseInstance>, secrets: Map<string, string>): Record<string, string>;
14
- //# sourceMappingURL=env-resolver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env-resolver.d.ts","sourceRoot":"","sources":["../../../src/lib/dev/env-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,qBAAa,kBAAmB,SAAQ,KAAK;IACxB,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM;CAQtC;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACxC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAqER;AAED,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,EACnD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACxC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,EACnD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACxC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBxB"}
@@ -1,109 +0,0 @@
1
- import { SECRETS_FILE } from "../secrets/index.js";
2
- export class MissingSecretError extends Error {
3
- secretName;
4
- constructor(secretName) {
5
- super(`Missing secret '${secretName}'\n\n` +
6
- `This secret is declared in specific.hcl but has no value in ${SECRETS_FILE}.\n\n` +
7
- `Run: specific secrets set ${secretName}`);
8
- this.secretName = secretName;
9
- this.name = "MissingSecretError";
10
- }
11
- }
12
- export function resolveEnvValue(value, databases, secrets, servicePort) {
13
- if (typeof value === "string") {
14
- return value;
15
- }
16
- switch (value.type) {
17
- case "port":
18
- if (servicePort === undefined) {
19
- throw new Error("Port reference used but no port allocated");
20
- }
21
- return String(servicePort);
22
- case "database": {
23
- const db = databases.get(value.name);
24
- if (!db) {
25
- throw new Error(`Database "${value.name}" not found`);
26
- }
27
- switch (value.attribute) {
28
- case "url":
29
- return db.url;
30
- case "host":
31
- return db.host;
32
- case "port":
33
- return String(db.port);
34
- case "user":
35
- return db.user;
36
- case "password":
37
- return db.password;
38
- case "name":
39
- return db.dbName;
40
- case "endpoint":
41
- if (!db.endpoint) {
42
- throw new Error(`Database "${value.name}" does not have an endpoint (not an object_store)`);
43
- }
44
- return db.endpoint;
45
- case "access_key":
46
- if (!db.accessKey) {
47
- throw new Error(`Database "${value.name}" does not have an access_key (not an object_store)`);
48
- }
49
- return db.accessKey;
50
- case "secret_key":
51
- if (!db.secretKey) {
52
- throw new Error(`Database "${value.name}" does not have a secret_key (not an object_store)`);
53
- }
54
- return db.secretKey;
55
- default:
56
- throw new Error(`Unknown database attribute: ${value.attribute}`);
57
- }
58
- }
59
- case "config":
60
- // Config variables not supported yet
61
- throw new Error(`Config variables not supported in dev mode yet`);
62
- case "secret": {
63
- const secretValue = secrets.get(value.name);
64
- if (secretValue === undefined) {
65
- throw new MissingSecretError(value.name);
66
- }
67
- return secretValue;
68
- }
69
- case "build":
70
- // Build references shouldn't appear in env
71
- throw new Error(`Build references cannot be used as env values`);
72
- default:
73
- throw new Error(`Unknown reference type`);
74
- }
75
- }
76
- export function resolveEnv(env, databases, secrets, servicePort) {
77
- if (!env) {
78
- return {};
79
- }
80
- const resolved = {};
81
- for (const [key, value] of Object.entries(env)) {
82
- resolved[key] = resolveEnvValue(value, databases, secrets, servicePort);
83
- }
84
- return resolved;
85
- }
86
- /**
87
- * Resolve environment variables for exec mode.
88
- * Silently skips port references since there's no service port in exec context.
89
- */
90
- export function resolveEnvForExec(env, databases, secrets) {
91
- if (!env) {
92
- return {};
93
- }
94
- const resolved = {};
95
- for (const [key, value] of Object.entries(env)) {
96
- if (typeof value === "string") {
97
- resolved[key] = value;
98
- continue;
99
- }
100
- // Skip port references silently
101
- if (value.type === "port") {
102
- continue;
103
- }
104
- // For other reference types, use the standard resolver (will throw on errors)
105
- resolved[key] = resolveEnvValue(value, databases, secrets);
106
- }
107
- return resolved;
108
- }
109
- //# sourceMappingURL=env-resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env-resolver.js","sourceRoot":"","sources":["../../../src/lib/dev/env-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- export interface ServiceRoute {
2
- name: string;
3
- port: number;
4
- }
5
- export interface HttpProxyInstance {
6
- httpPort: number;
7
- httpsPort: number;
8
- stop(): Promise<void>;
9
- }
10
- export declare function startHttpProxy(services: ServiceRoute[]): Promise<HttpProxyInstance>;
11
- //# sourceMappingURL=http-proxy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-proxy.d.ts","sourceRoot":"","sources":["../../../src/lib/dev/http-proxy.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAMD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,YAAY,EAAE,GACvB,OAAO,CAAC,iBAAiB,CAAC,CAuJ5B"}
@@ -1,165 +0,0 @@
1
- import * as http from "http";
2
- import * as https from "https";
3
- import httpProxy from "http-proxy";
4
- import devcert from "devcert";
5
- const HTTP_PORT = 80;
6
- const HTTPS_PORT = 443;
7
- const DOMAIN_SUFFIX = ".local.spcf.app";
8
- export async function startHttpProxy(services) {
9
- // Build service lookup map: name -> port
10
- const serviceMap = new Map();
11
- const domains = [];
12
- for (const svc of services) {
13
- serviceMap.set(svc.name, svc.port);
14
- domains.push(`${svc.name}${DOMAIN_SUFFIX}`);
15
- }
16
- // Get TLS certificate from devcert for all service domains
17
- // Use skipCertutil to avoid sudo prompts - CA was already installed during `specific init`
18
- let key;
19
- let cert;
20
- try {
21
- const result = await devcert.certificateFor(domains, { skipCertutil: true });
22
- key = result.key;
23
- cert = result.cert;
24
- }
25
- catch (err) {
26
- const message = err instanceof Error ? err.message : String(err);
27
- // Check if this is a CA installation issue
28
- if (message.includes("sudo") || message.includes("password") || message.includes("CA")) {
29
- throw new Error(`TLS certificate authority not installed. Run 'specific init' first to set up TLS certificates.`);
30
- }
31
- throw err;
32
- }
33
- // Create the proxy server
34
- const proxy = httpProxy.createProxyServer({});
35
- // Handle proxy errors
36
- proxy.on("error", (err, req, res) => {
37
- if (res instanceof http.ServerResponse && !res.headersSent) {
38
- res.writeHead(502, { "Content-Type": "text/html" });
39
- res.end(`<h1>Bad Gateway</h1><p>Service unavailable: ${err.message}</p>`);
40
- }
41
- });
42
- // Shared request handler
43
- const handleRequest = (req, res) => {
44
- const host = req.headers.host || "";
45
- const serviceName = extractServiceName(host);
46
- if (!serviceName) {
47
- return sendNotFound(res, null, services);
48
- }
49
- const targetPort = serviceMap.get(serviceName);
50
- if (!targetPort) {
51
- return sendNotFound(res, serviceName, services);
52
- }
53
- proxy.web(req, res, { target: `http://127.0.0.1:${targetPort}` });
54
- };
55
- // Shared WebSocket upgrade handler
56
- const handleUpgrade = (req, socket, head) => {
57
- const host = req.headers.host || "";
58
- const serviceName = extractServiceName(host);
59
- if (!serviceName) {
60
- socket.end("HTTP/1.1 404 Not Found\r\n\r\n");
61
- return;
62
- }
63
- const targetPort = serviceMap.get(serviceName);
64
- if (!targetPort) {
65
- socket.end("HTTP/1.1 404 Not Found\r\n\r\n");
66
- return;
67
- }
68
- proxy.ws(req, socket, head, { target: `http://127.0.0.1:${targetPort}` });
69
- };
70
- // Create HTTP server (port 80)
71
- const httpServer = http.createServer(handleRequest);
72
- httpServer.on("upgrade", handleUpgrade);
73
- // Create HTTPS server (port 443)
74
- const httpsServer = https.createServer({ key, cert }, handleRequest);
75
- httpsServer.on("upgrade", handleUpgrade);
76
- // Start both servers
77
- return new Promise((resolve, reject) => {
78
- let httpStarted = false;
79
- let httpsStarted = false;
80
- let failed = false;
81
- const checkReady = () => {
82
- if (failed)
83
- return;
84
- if (httpStarted && httpsStarted) {
85
- resolve({
86
- httpPort: HTTP_PORT,
87
- httpsPort: HTTPS_PORT,
88
- async stop() {
89
- return new Promise((resolve) => {
90
- let closed = 0;
91
- const onClose = () => {
92
- closed++;
93
- if (closed === 2)
94
- resolve();
95
- };
96
- httpServer.close(onClose);
97
- httpsServer.close(onClose);
98
- // Force close after timeout
99
- setTimeout(() => {
100
- httpServer.closeAllConnections?.();
101
- httpsServer.closeAllConnections?.();
102
- resolve();
103
- }, 3000);
104
- });
105
- },
106
- });
107
- }
108
- };
109
- const handleError = (port) => (err) => {
110
- if (failed)
111
- return;
112
- failed = true;
113
- if (err.code === "EACCES") {
114
- reject(new Error(`Cannot bind to port ${port}. ` +
115
- `Try running with sudo: sudo specific dev`));
116
- }
117
- else if (err.code === "EADDRINUSE") {
118
- reject(new Error(`Port ${port} is already in use`));
119
- }
120
- else {
121
- reject(err);
122
- }
123
- };
124
- httpServer.on("error", handleError(HTTP_PORT));
125
- httpsServer.on("error", handleError(HTTPS_PORT));
126
- httpServer.listen(HTTP_PORT, () => {
127
- httpStarted = true;
128
- checkReady();
129
- });
130
- httpsServer.listen(HTTPS_PORT, () => {
131
- httpsStarted = true;
132
- checkReady();
133
- });
134
- });
135
- }
136
- function extractServiceName(host) {
137
- // Remove port if present
138
- const hostname = host.split(":")[0];
139
- if (!hostname || !hostname.endsWith(DOMAIN_SUFFIX)) {
140
- return null;
141
- }
142
- return hostname.slice(0, -DOMAIN_SUFFIX.length);
143
- }
144
- function sendNotFound(res, requestedService, availableServices) {
145
- const serviceList = availableServices
146
- .map((s) => `<li>${s.name}.local.spcf.app</li>`)
147
- .join("\n");
148
- const message = requestedService
149
- ? `No service named "${requestedService}" is running.`
150
- : "Invalid host header.";
151
- res.writeHead(404, { "Content-Type": "text/html" });
152
- res.end(`<!DOCTYPE html>
153
- <html>
154
- <head><title>Service Not Found</title></head>
155
- <body>
156
- <h1>Service Not Found</h1>
157
- <p>${message}</p>
158
- ${availableServices.length > 0
159
- ? `<p>Available services:</p>
160
- <ul>${serviceList}</ul>`
161
- : "<p>No services are currently exposed.</p>"}
162
- </body>
163
- </html>`);
164
- }
165
- //# sourceMappingURL=http-proxy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-proxy.js","sourceRoot":"","sources":["../../../src/lib/dev/http-proxy.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- export { PortAllocator } from "./port-allocator.js";
2
- export { startDatabase } from "./database-manager.js";
3
- export type { DatabaseInstance } from "./database-manager.js";
4
- export { startService } from "./service-runner.js";
5
- export type { RunningService, LogLine } from "./service-runner.js";
6
- export { resolveEnvForExec, MissingSecretError } from "./env-resolver.js";
7
- export { InstanceStateManager } from "./instance-state.js";
8
- export type { InstanceState, DatabaseState, ServiceState } from "./instance-state.js";
9
- export { startHttpProxy } from "./http-proxy.js";
10
- export type { HttpProxyInstance, ServiceRoute } from "./http-proxy.js";
11
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/dev/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,7 +0,0 @@
1
- export { PortAllocator } from "./port-allocator.js";
2
- export { startDatabase } from "./database-manager.js";
3
- export { startService } from "./service-runner.js";
4
- export { resolveEnvForExec, MissingSecretError } from "./env-resolver.js";
5
- export { InstanceStateManager } from "./instance-state.js";
6
- export { startHttpProxy } from "./http-proxy.js";
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/dev/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,45 +0,0 @@
1
- export interface DatabaseState {
2
- engine: "postgres" | "redis" | "object_store";
3
- port: number;
4
- host: string;
5
- user: string;
6
- password: string;
7
- dbName: string;
8
- url: string;
9
- endpoint?: string;
10
- accessKey?: string;
11
- secretKey?: string;
12
- }
13
- export interface ServiceState {
14
- port?: number;
15
- pid: number;
16
- }
17
- export interface InstanceState {
18
- version: 1;
19
- owner: {
20
- pid: number;
21
- command: "dev" | "exec";
22
- startedAt: string;
23
- };
24
- databases: Record<string, DatabaseState>;
25
- services: Record<string, ServiceState>;
26
- }
27
- export declare class InstanceStateManager {
28
- private stateDir;
29
- private statePath;
30
- private lockPath;
31
- private ownsInstances;
32
- constructor(projectRoot: string);
33
- private ensureStateDir;
34
- private isProcessRunning;
35
- private acquireLock;
36
- getExistingInstances(): Promise<InstanceState | null>;
37
- cleanStaleState(): Promise<boolean>;
38
- claimOwnership(command: "dev" | "exec"): Promise<void>;
39
- registerDatabase(name: string, info: DatabaseState): Promise<void>;
40
- registerService(name: string, info: ServiceState): Promise<void>;
41
- releaseOwnership(): Promise<void>;
42
- private readState;
43
- private writeStateAtomic;
44
- }
45
- //# sourceMappingURL=instance-state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instance-state.d.ts","sourceRoot":"","sources":["../../../src/lib/dev/instance-state.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,cAAc,CAAC;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IAEZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACxC;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAkB;gBAE3B,WAAW,EAAE,MAAM;IAM/B,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,gBAAgB;YAWV,WAAW;IAwDnB,oBAAoB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAuBrD,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IA+BnC,cAAc,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCtD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAelE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAehE,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBvC,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,gBAAgB;CAMzB"}