@percher/toml 0.1.1 → 0.1.3

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.
package/dist/schema.d.ts CHANGED
@@ -1,40 +1,56 @@
1
- import { z } from "zod";
1
+ import { z } from "zod/v3";
2
2
  export declare const appSchema: z.ZodObject<{
3
3
  name: z.ZodString;
4
4
  runtime: z.ZodEnum<["node", "bun", "python", "static", "docker"]>;
5
- framework: z.ZodOptional<z.ZodEnum<["nextjs", "sveltekit", "astro", "remix", "vite", "express", "fastify", "hono", "fastapi", "flask", "django", "docker"]>>;
6
- }, "strip", z.ZodTypeAny, {
5
+ framework: z.ZodOptional<z.ZodEnum<["nextjs", "sveltekit", "astro", "remix", "nuxt", "vite", "preact", "solid", "express", "fastify", "hono", "elysia", "fastapi", "flask", "django", "eleventy", "hugo", "laravel", "rails", "phoenix", "go", "rust", "dotnet", "java", "docker"]>>;
6
+ }, "strict", z.ZodTypeAny, {
7
7
  name: string;
8
8
  runtime: "node" | "bun" | "python" | "static" | "docker";
9
- framework?: "docker" | "nextjs" | "sveltekit" | "astro" | "remix" | "vite" | "express" | "fastify" | "hono" | "fastapi" | "flask" | "django" | undefined;
9
+ framework?: "docker" | "nextjs" | "sveltekit" | "astro" | "remix" | "nuxt" | "vite" | "preact" | "solid" | "express" | "fastify" | "hono" | "elysia" | "fastapi" | "flask" | "django" | "eleventy" | "hugo" | "laravel" | "rails" | "phoenix" | "go" | "rust" | "dotnet" | "java" | undefined;
10
10
  }, {
11
11
  name: string;
12
12
  runtime: "node" | "bun" | "python" | "static" | "docker";
13
- framework?: "docker" | "nextjs" | "sveltekit" | "astro" | "remix" | "vite" | "express" | "fastify" | "hono" | "fastapi" | "flask" | "django" | undefined;
13
+ framework?: "docker" | "nextjs" | "sveltekit" | "astro" | "remix" | "nuxt" | "vite" | "preact" | "solid" | "express" | "fastify" | "hono" | "elysia" | "fastapi" | "flask" | "django" | "eleventy" | "hugo" | "laravel" | "rails" | "phoenix" | "go" | "rust" | "dotnet" | "java" | undefined;
14
14
  }>;
15
15
  export declare const buildSchema: z.ZodObject<{
16
16
  command: z.ZodOptional<z.ZodString>;
17
17
  output: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
18
- }, "strip", z.ZodTypeAny, {
18
+ /**
19
+ * Allow-list of env var names from the app's runtime env that should
20
+ * also be available at build time. Frameworks like Vite/Next/Astro/
21
+ * Expo bake `*_PUBLIC_*` values into the static bundle at build time;
22
+ * without this list, those variables are only present at runtime and
23
+ * frontends ship with the default value baked in. Values are read
24
+ * from the encrypted env store at deploy time — never from the TOML
25
+ * itself, so no secrets in source control.
26
+ */
27
+ pass_env: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
28
+ }, "strict", z.ZodTypeAny, {
19
29
  command?: string | undefined;
20
30
  output?: string | undefined;
31
+ pass_env?: string[] | undefined;
21
32
  }, {
22
33
  command?: string | undefined;
23
34
  output?: string | undefined;
35
+ pass_env?: string[] | undefined;
24
36
  }>;
25
37
  export declare const webSchema: z.ZodObject<{
26
38
  port: z.ZodNumber;
27
39
  health: z.ZodOptional<z.ZodString>;
28
- }, "strip", z.ZodTypeAny, {
40
+ /** Enable password protection. Set SITE_PASSWORD env var to configure. */
41
+ password: z.ZodOptional<z.ZodBoolean>;
42
+ }, "strict", z.ZodTypeAny, {
29
43
  port: number;
30
44
  health?: string | undefined;
45
+ password?: boolean | undefined;
31
46
  }, {
32
47
  port: number;
33
48
  health?: string | undefined;
49
+ password?: boolean | undefined;
34
50
  }>;
35
51
  export declare const convexConfigSchema: z.ZodObject<{
36
52
  deployment_url: z.ZodString;
37
- }, "strip", z.ZodTypeAny, {
53
+ }, "strict", z.ZodTypeAny, {
38
54
  deployment_url: string;
39
55
  }, {
40
56
  deployment_url: string;
@@ -42,7 +58,7 @@ export declare const convexConfigSchema: z.ZodObject<{
42
58
  export declare const supabaseConfigSchema: z.ZodObject<{
43
59
  url: z.ZodString;
44
60
  anon_key: z.ZodOptional<z.ZodString>;
45
- }, "strip", z.ZodTypeAny, {
61
+ }, "strict", z.ZodTypeAny, {
46
62
  url: string;
47
63
  anon_key?: string | undefined;
48
64
  }, {
@@ -50,11 +66,11 @@ export declare const supabaseConfigSchema: z.ZodObject<{
50
66
  anon_key?: string | undefined;
51
67
  }>;
52
68
  export declare const dataSchema: z.ZodEffects<z.ZodObject<{
53
- mode: z.ZodEnum<["pocketbase", "postgres", "sqlite", "convex", "supabase", "none"]>;
69
+ mode: z.ZodEnum<["pocketbase", "postgres", "sqlite", "convex", "supabase", "external", "none"]>;
54
70
  file: z.ZodOptional<z.ZodString>;
55
71
  convex: z.ZodOptional<z.ZodObject<{
56
72
  deployment_url: z.ZodString;
57
- }, "strip", z.ZodTypeAny, {
73
+ }, "strict", z.ZodTypeAny, {
58
74
  deployment_url: string;
59
75
  }, {
60
76
  deployment_url: string;
@@ -62,15 +78,15 @@ export declare const dataSchema: z.ZodEffects<z.ZodObject<{
62
78
  supabase: z.ZodOptional<z.ZodObject<{
63
79
  url: z.ZodString;
64
80
  anon_key: z.ZodOptional<z.ZodString>;
65
- }, "strip", z.ZodTypeAny, {
81
+ }, "strict", z.ZodTypeAny, {
66
82
  url: string;
67
83
  anon_key?: string | undefined;
68
84
  }, {
69
85
  url: string;
70
86
  anon_key?: string | undefined;
71
87
  }>>;
72
- }, "strip", z.ZodTypeAny, {
73
- mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "none";
88
+ }, "strict", z.ZodTypeAny, {
89
+ mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "external" | "none";
74
90
  convex?: {
75
91
  deployment_url: string;
76
92
  } | undefined;
@@ -80,7 +96,7 @@ export declare const dataSchema: z.ZodEffects<z.ZodObject<{
80
96
  } | undefined;
81
97
  file?: string | undefined;
82
98
  }, {
83
- mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "none";
99
+ mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "external" | "none";
84
100
  convex?: {
85
101
  deployment_url: string;
86
102
  } | undefined;
@@ -90,7 +106,7 @@ export declare const dataSchema: z.ZodEffects<z.ZodObject<{
90
106
  } | undefined;
91
107
  file?: string | undefined;
92
108
  }>, {
93
- mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "none";
109
+ mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "external" | "none";
94
110
  convex?: {
95
111
  deployment_url: string;
96
112
  } | undefined;
@@ -100,7 +116,7 @@ export declare const dataSchema: z.ZodEffects<z.ZodObject<{
100
116
  } | undefined;
101
117
  file?: string | undefined;
102
118
  }, {
103
- mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "none";
119
+ mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "external" | "none";
104
120
  convex?: {
105
121
  deployment_url: string;
106
122
  } | undefined;
@@ -113,29 +129,236 @@ export declare const dataSchema: z.ZodEffects<z.ZodObject<{
113
129
  export declare const domainSchema: z.ZodObject<{
114
130
  subdomain: z.ZodOptional<z.ZodString>;
115
131
  custom: z.ZodOptional<z.ZodString>;
116
- }, "strip", z.ZodTypeAny, {
132
+ }, "strict", z.ZodTypeAny, {
117
133
  custom?: string | undefined;
118
134
  subdomain?: string | undefined;
119
135
  }, {
120
136
  custom?: string | undefined;
121
137
  subdomain?: string | undefined;
122
138
  }>;
123
- export declare const resourcesSchema: z.ZodObject<{
139
+ /**
140
+ * Phase 6.3: CPU-based autoscaling. Mutually exclusive with the static
141
+ * `instances` field on the parent resourcesSchema — see the superRefine
142
+ * below. All threshold/sustain fields have sane defaults and most users
143
+ * never touch them.
144
+ */
145
+ export declare const autoscaleSchema: z.ZodEffects<z.ZodObject<{
146
+ min: z.ZodNumber;
147
+ max: z.ZodNumber;
148
+ scale_up_cpu_percent: z.ZodOptional<z.ZodNumber>;
149
+ scale_up_sustain_seconds: z.ZodOptional<z.ZodNumber>;
150
+ scale_down_cpu_percent: z.ZodOptional<z.ZodNumber>;
151
+ scale_down_sustain_seconds: z.ZodOptional<z.ZodNumber>;
152
+ cooldown_seconds: z.ZodOptional<z.ZodNumber>;
153
+ }, "strict", z.ZodTypeAny, {
154
+ min: number;
155
+ max: number;
156
+ scale_up_cpu_percent?: number | undefined;
157
+ scale_up_sustain_seconds?: number | undefined;
158
+ scale_down_cpu_percent?: number | undefined;
159
+ scale_down_sustain_seconds?: number | undefined;
160
+ cooldown_seconds?: number | undefined;
161
+ }, {
162
+ min: number;
163
+ max: number;
164
+ scale_up_cpu_percent?: number | undefined;
165
+ scale_up_sustain_seconds?: number | undefined;
166
+ scale_down_cpu_percent?: number | undefined;
167
+ scale_down_sustain_seconds?: number | undefined;
168
+ cooldown_seconds?: number | undefined;
169
+ }>, {
170
+ min: number;
171
+ max: number;
172
+ scale_up_cpu_percent?: number | undefined;
173
+ scale_up_sustain_seconds?: number | undefined;
174
+ scale_down_cpu_percent?: number | undefined;
175
+ scale_down_sustain_seconds?: number | undefined;
176
+ cooldown_seconds?: number | undefined;
177
+ }, {
178
+ min: number;
179
+ max: number;
180
+ scale_up_cpu_percent?: number | undefined;
181
+ scale_up_sustain_seconds?: number | undefined;
182
+ scale_down_cpu_percent?: number | undefined;
183
+ scale_down_sustain_seconds?: number | undefined;
184
+ cooldown_seconds?: number | undefined;
185
+ }>;
186
+ export declare const resourcesSchema: z.ZodEffects<z.ZodObject<{
124
187
  memory: z.ZodOptional<z.ZodEnum<["256mb", "512mb", "1gb", "2gb"]>>;
125
188
  cpu: z.ZodOptional<z.ZodNumber>;
126
- }, "strip", z.ZodTypeAny, {
189
+ /** Number of parallel container instances (Phase 6.1). Plan-gated. */
190
+ instances: z.ZodOptional<z.ZodNumber>;
191
+ autoscale: z.ZodOptional<z.ZodEffects<z.ZodObject<{
192
+ min: z.ZodNumber;
193
+ max: z.ZodNumber;
194
+ scale_up_cpu_percent: z.ZodOptional<z.ZodNumber>;
195
+ scale_up_sustain_seconds: z.ZodOptional<z.ZodNumber>;
196
+ scale_down_cpu_percent: z.ZodOptional<z.ZodNumber>;
197
+ scale_down_sustain_seconds: z.ZodOptional<z.ZodNumber>;
198
+ cooldown_seconds: z.ZodOptional<z.ZodNumber>;
199
+ }, "strict", z.ZodTypeAny, {
200
+ min: number;
201
+ max: number;
202
+ scale_up_cpu_percent?: number | undefined;
203
+ scale_up_sustain_seconds?: number | undefined;
204
+ scale_down_cpu_percent?: number | undefined;
205
+ scale_down_sustain_seconds?: number | undefined;
206
+ cooldown_seconds?: number | undefined;
207
+ }, {
208
+ min: number;
209
+ max: number;
210
+ scale_up_cpu_percent?: number | undefined;
211
+ scale_up_sustain_seconds?: number | undefined;
212
+ scale_down_cpu_percent?: number | undefined;
213
+ scale_down_sustain_seconds?: number | undefined;
214
+ cooldown_seconds?: number | undefined;
215
+ }>, {
216
+ min: number;
217
+ max: number;
218
+ scale_up_cpu_percent?: number | undefined;
219
+ scale_up_sustain_seconds?: number | undefined;
220
+ scale_down_cpu_percent?: number | undefined;
221
+ scale_down_sustain_seconds?: number | undefined;
222
+ cooldown_seconds?: number | undefined;
223
+ }, {
224
+ min: number;
225
+ max: number;
226
+ scale_up_cpu_percent?: number | undefined;
227
+ scale_up_sustain_seconds?: number | undefined;
228
+ scale_down_cpu_percent?: number | undefined;
229
+ scale_down_sustain_seconds?: number | undefined;
230
+ cooldown_seconds?: number | undefined;
231
+ }>>;
232
+ }, "strict", z.ZodTypeAny, {
127
233
  memory?: "256mb" | "512mb" | "1gb" | "2gb" | undefined;
128
234
  cpu?: number | undefined;
235
+ instances?: number | undefined;
236
+ autoscale?: {
237
+ min: number;
238
+ max: number;
239
+ scale_up_cpu_percent?: number | undefined;
240
+ scale_up_sustain_seconds?: number | undefined;
241
+ scale_down_cpu_percent?: number | undefined;
242
+ scale_down_sustain_seconds?: number | undefined;
243
+ cooldown_seconds?: number | undefined;
244
+ } | undefined;
129
245
  }, {
130
246
  memory?: "256mb" | "512mb" | "1gb" | "2gb" | undefined;
131
247
  cpu?: number | undefined;
248
+ instances?: number | undefined;
249
+ autoscale?: {
250
+ min: number;
251
+ max: number;
252
+ scale_up_cpu_percent?: number | undefined;
253
+ scale_up_sustain_seconds?: number | undefined;
254
+ scale_down_cpu_percent?: number | undefined;
255
+ scale_down_sustain_seconds?: number | undefined;
256
+ cooldown_seconds?: number | undefined;
257
+ } | undefined;
258
+ }>, {
259
+ memory?: "256mb" | "512mb" | "1gb" | "2gb" | undefined;
260
+ cpu?: number | undefined;
261
+ instances?: number | undefined;
262
+ autoscale?: {
263
+ min: number;
264
+ max: number;
265
+ scale_up_cpu_percent?: number | undefined;
266
+ scale_up_sustain_seconds?: number | undefined;
267
+ scale_down_cpu_percent?: number | undefined;
268
+ scale_down_sustain_seconds?: number | undefined;
269
+ cooldown_seconds?: number | undefined;
270
+ } | undefined;
271
+ }, {
272
+ memory?: "256mb" | "512mb" | "1gb" | "2gb" | undefined;
273
+ cpu?: number | undefined;
274
+ instances?: number | undefined;
275
+ autoscale?: {
276
+ min: number;
277
+ max: number;
278
+ scale_up_cpu_percent?: number | undefined;
279
+ scale_up_sustain_seconds?: number | undefined;
280
+ scale_down_cpu_percent?: number | undefined;
281
+ scale_down_sustain_seconds?: number | undefined;
282
+ cooldown_seconds?: number | undefined;
283
+ } | undefined;
284
+ }>;
285
+ /**
286
+ * Legacy `[env]` shape: `KEY = "value"` pairs that seed the encrypted
287
+ * env store with placeholder values when running `percher init`. Still
288
+ * supported for back-compat — all existing percher.toml files in the
289
+ * wild use this shape.
290
+ */
291
+ export declare const envValuesSchema: z.ZodRecord<z.ZodString, z.ZodString>;
292
+ /**
293
+ * FUTURE12 Phase 6 — explicit env contract. Replaces the legacy
294
+ * KEY=VALUE shape over time. The three lists tell Percher's
295
+ * server-side env scanner how to treat each env reference it finds in
296
+ * the source:
297
+ *
298
+ * - `required` — must exist in the encrypted env store before queueing.
299
+ * - `optional` — may be referenced by source; presence is not enforced.
300
+ * - `ignore` — explicitly ignored by the scanner (e.g. NODE_ENV).
301
+ *
302
+ * A key may appear in only one list. Phase 6a (this file) ships the
303
+ * parsing + validation only; the actual pre-queue gate is Phase 6b/c.
304
+ */
305
+ export declare const envContractSchema: z.ZodEffects<z.ZodObject<{
306
+ required: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
307
+ optional: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
308
+ ignore: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
309
+ }, "strict", z.ZodTypeAny, {
310
+ required?: string[] | undefined;
311
+ optional?: string[] | undefined;
312
+ ignore?: string[] | undefined;
313
+ }, {
314
+ required?: string[] | undefined;
315
+ optional?: string[] | undefined;
316
+ ignore?: string[] | undefined;
317
+ }>, {
318
+ required?: string[] | undefined;
319
+ optional?: string[] | undefined;
320
+ ignore?: string[] | undefined;
321
+ }, {
322
+ required?: string[] | undefined;
323
+ optional?: string[] | undefined;
324
+ ignore?: string[] | undefined;
132
325
  }>;
133
- export declare const envSchema: z.ZodRecord<z.ZodString, z.ZodString>;
326
+ /**
327
+ * The `[env]` table must coexist in Phase 6a with two shapes:
328
+ *
329
+ * - Legacy: `[env]\nKEY = "value"` → `Record<string, string>`
330
+ * - Contract: `[env]\nrequired = [...]` → `{ required, optional, ignore }`
331
+ *
332
+ * A TOML table can only ever carry one of the two. We branch on shape
333
+ * detection: if the table has any of the contract keys (`required`,
334
+ * `optional`, `ignore`), parse as contract. Otherwise parse as the
335
+ * legacy string-map. This guarantees that mistyping a contract field
336
+ * (e.g. `required = "OPENAI_API_KEY"` instead of an array) yields a
337
+ * contract validation error, not a silent fallback into legacy.
338
+ *
339
+ * Phase 6b/c will narrow this — when the gate is live and templates
340
+ * have migrated, we can remove the legacy branch.
341
+ */
342
+ export type EnvContract = z.infer<typeof envContractSchema>;
343
+ export type EnvValues = Record<string, string>;
344
+ export type EnvSection = EnvValues | EnvContract;
345
+ /**
346
+ * Narrow an `[env]` section to the new contract shape, or null if it's
347
+ * the legacy KEY=VALUE map (or missing). Useful for downstream code in
348
+ * Phase 6b/c that needs to read `required`/`optional`/`ignore`.
349
+ */
350
+ export declare function isEnvContract(value: EnvSection | undefined): value is EnvContract;
351
+ /**
352
+ * Narrow an `[env]` section to the legacy `Record<string, string>`
353
+ * shape. Returns null when the section is the new contract or missing.
354
+ */
355
+ export declare function getEnvValues(value: EnvSection | undefined): EnvValues | null;
356
+ export declare const envSchema: z.ZodType<EnvSection, z.ZodTypeDef, unknown>;
134
357
  export declare const devSchema: z.ZodObject<{
135
358
  ignore: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
136
359
  debounce: z.ZodOptional<z.ZodNumber>;
137
360
  auto_open: z.ZodOptional<z.ZodBoolean>;
138
- }, "strip", z.ZodTypeAny, {
361
+ }, "strict", z.ZodTypeAny, {
139
362
  ignore?: string[] | undefined;
140
363
  debounce?: number | undefined;
141
364
  auto_open?: boolean | undefined;
@@ -148,7 +371,7 @@ export declare const requiredEnvSchema: z.ZodRecord<z.ZodString, z.ZodEnum<["sec
148
371
  export declare const cronSchema: z.ZodObject<{
149
372
  schedule: z.ZodString;
150
373
  command: z.ZodString;
151
- }, "strip", z.ZodTypeAny, {
374
+ }, "strict", z.ZodTypeAny, {
152
375
  command: string;
153
376
  schedule: string;
154
377
  }, {
@@ -158,29 +381,29 @@ export declare const cronSchema: z.ZodObject<{
158
381
  export declare const addonsSchema: z.ZodObject<{
159
382
  pocketbase: z.ZodOptional<z.ZodObject<{
160
383
  enabled: z.ZodOptional<z.ZodBoolean>;
161
- }, "strip", z.ZodTypeAny, {
384
+ }, "strict", z.ZodTypeAny, {
162
385
  enabled?: boolean | undefined;
163
386
  }, {
164
387
  enabled?: boolean | undefined;
165
388
  }>>;
166
389
  cron: z.ZodOptional<z.ZodObject<{
167
390
  enabled: z.ZodOptional<z.ZodBoolean>;
168
- }, "strip", z.ZodTypeAny, {
391
+ }, "strict", z.ZodTypeAny, {
169
392
  enabled?: boolean | undefined;
170
393
  }, {
171
394
  enabled?: boolean | undefined;
172
395
  }>>;
173
396
  storage: z.ZodOptional<z.ZodObject<{
174
- mode: z.ZodOptional<z.ZodEnum<["pocketbase", "volume"]>>;
397
+ mode: z.ZodOptional<z.ZodEnum<["pocketbase", "volume", "s3"]>>;
175
398
  max_size: z.ZodOptional<z.ZodString>;
176
- }, "strip", z.ZodTypeAny, {
177
- mode?: "pocketbase" | "volume" | undefined;
399
+ }, "strict", z.ZodTypeAny, {
400
+ mode?: "pocketbase" | "volume" | "s3" | undefined;
178
401
  max_size?: string | undefined;
179
402
  }, {
180
- mode?: "pocketbase" | "volume" | undefined;
403
+ mode?: "pocketbase" | "volume" | "s3" | undefined;
181
404
  max_size?: string | undefined;
182
405
  }>>;
183
- }, "strip", z.ZodTypeAny, {
406
+ }, "strict", z.ZodTypeAny, {
184
407
  pocketbase?: {
185
408
  enabled?: boolean | undefined;
186
409
  } | undefined;
@@ -188,7 +411,7 @@ export declare const addonsSchema: z.ZodObject<{
188
411
  enabled?: boolean | undefined;
189
412
  } | undefined;
190
413
  storage?: {
191
- mode?: "pocketbase" | "volume" | undefined;
414
+ mode?: "pocketbase" | "volume" | "s3" | undefined;
192
415
  max_size?: string | undefined;
193
416
  } | undefined;
194
417
  }, {
@@ -199,7 +422,7 @@ export declare const addonsSchema: z.ZodObject<{
199
422
  enabled?: boolean | undefined;
200
423
  } | undefined;
201
424
  storage?: {
202
- mode?: "pocketbase" | "volume" | undefined;
425
+ mode?: "pocketbase" | "volume" | "s3" | undefined;
203
426
  max_size?: string | undefined;
204
427
  } | undefined;
205
428
  }>;
@@ -208,7 +431,7 @@ export declare const checkSchema: z.ZodObject<{
208
431
  interval: z.ZodOptional<z.ZodNumber>;
209
432
  timeout: z.ZodOptional<z.ZodNumber>;
210
433
  initial_delay: z.ZodOptional<z.ZodNumber>;
211
- }, "strip", z.ZodTypeAny, {
434
+ }, "strict", z.ZodTypeAny, {
212
435
  path: string;
213
436
  interval?: number | undefined;
214
437
  timeout?: number | undefined;
@@ -223,42 +446,58 @@ export declare const percherConfigSchema: z.ZodObject<{
223
446
  app: z.ZodObject<{
224
447
  name: z.ZodString;
225
448
  runtime: z.ZodEnum<["node", "bun", "python", "static", "docker"]>;
226
- framework: z.ZodOptional<z.ZodEnum<["nextjs", "sveltekit", "astro", "remix", "vite", "express", "fastify", "hono", "fastapi", "flask", "django", "docker"]>>;
227
- }, "strip", z.ZodTypeAny, {
449
+ framework: z.ZodOptional<z.ZodEnum<["nextjs", "sveltekit", "astro", "remix", "nuxt", "vite", "preact", "solid", "express", "fastify", "hono", "elysia", "fastapi", "flask", "django", "eleventy", "hugo", "laravel", "rails", "phoenix", "go", "rust", "dotnet", "java", "docker"]>>;
450
+ }, "strict", z.ZodTypeAny, {
228
451
  name: string;
229
452
  runtime: "node" | "bun" | "python" | "static" | "docker";
230
- framework?: "docker" | "nextjs" | "sveltekit" | "astro" | "remix" | "vite" | "express" | "fastify" | "hono" | "fastapi" | "flask" | "django" | undefined;
453
+ framework?: "docker" | "nextjs" | "sveltekit" | "astro" | "remix" | "nuxt" | "vite" | "preact" | "solid" | "express" | "fastify" | "hono" | "elysia" | "fastapi" | "flask" | "django" | "eleventy" | "hugo" | "laravel" | "rails" | "phoenix" | "go" | "rust" | "dotnet" | "java" | undefined;
231
454
  }, {
232
455
  name: string;
233
456
  runtime: "node" | "bun" | "python" | "static" | "docker";
234
- framework?: "docker" | "nextjs" | "sveltekit" | "astro" | "remix" | "vite" | "express" | "fastify" | "hono" | "fastapi" | "flask" | "django" | undefined;
457
+ framework?: "docker" | "nextjs" | "sveltekit" | "astro" | "remix" | "nuxt" | "vite" | "preact" | "solid" | "express" | "fastify" | "hono" | "elysia" | "fastapi" | "flask" | "django" | "eleventy" | "hugo" | "laravel" | "rails" | "phoenix" | "go" | "rust" | "dotnet" | "java" | undefined;
235
458
  }>;
236
459
  build: z.ZodOptional<z.ZodObject<{
237
460
  command: z.ZodOptional<z.ZodString>;
238
461
  output: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
239
- }, "strip", z.ZodTypeAny, {
462
+ /**
463
+ * Allow-list of env var names from the app's runtime env that should
464
+ * also be available at build time. Frameworks like Vite/Next/Astro/
465
+ * Expo bake `*_PUBLIC_*` values into the static bundle at build time;
466
+ * without this list, those variables are only present at runtime and
467
+ * frontends ship with the default value baked in. Values are read
468
+ * from the encrypted env store at deploy time — never from the TOML
469
+ * itself, so no secrets in source control.
470
+ */
471
+ pass_env: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
472
+ }, "strict", z.ZodTypeAny, {
240
473
  command?: string | undefined;
241
474
  output?: string | undefined;
475
+ pass_env?: string[] | undefined;
242
476
  }, {
243
477
  command?: string | undefined;
244
478
  output?: string | undefined;
479
+ pass_env?: string[] | undefined;
245
480
  }>>;
246
481
  web: z.ZodOptional<z.ZodObject<{
247
482
  port: z.ZodNumber;
248
483
  health: z.ZodOptional<z.ZodString>;
249
- }, "strip", z.ZodTypeAny, {
484
+ /** Enable password protection. Set SITE_PASSWORD env var to configure. */
485
+ password: z.ZodOptional<z.ZodBoolean>;
486
+ }, "strict", z.ZodTypeAny, {
250
487
  port: number;
251
488
  health?: string | undefined;
489
+ password?: boolean | undefined;
252
490
  }, {
253
491
  port: number;
254
492
  health?: string | undefined;
493
+ password?: boolean | undefined;
255
494
  }>>;
256
495
  data: z.ZodOptional<z.ZodEffects<z.ZodObject<{
257
- mode: z.ZodEnum<["pocketbase", "postgres", "sqlite", "convex", "supabase", "none"]>;
496
+ mode: z.ZodEnum<["pocketbase", "postgres", "sqlite", "convex", "supabase", "external", "none"]>;
258
497
  file: z.ZodOptional<z.ZodString>;
259
498
  convex: z.ZodOptional<z.ZodObject<{
260
499
  deployment_url: z.ZodString;
261
- }, "strip", z.ZodTypeAny, {
500
+ }, "strict", z.ZodTypeAny, {
262
501
  deployment_url: string;
263
502
  }, {
264
503
  deployment_url: string;
@@ -266,15 +505,15 @@ export declare const percherConfigSchema: z.ZodObject<{
266
505
  supabase: z.ZodOptional<z.ZodObject<{
267
506
  url: z.ZodString;
268
507
  anon_key: z.ZodOptional<z.ZodString>;
269
- }, "strip", z.ZodTypeAny, {
508
+ }, "strict", z.ZodTypeAny, {
270
509
  url: string;
271
510
  anon_key?: string | undefined;
272
511
  }, {
273
512
  url: string;
274
513
  anon_key?: string | undefined;
275
514
  }>>;
276
- }, "strip", z.ZodTypeAny, {
277
- mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "none";
515
+ }, "strict", z.ZodTypeAny, {
516
+ mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "external" | "none";
278
517
  convex?: {
279
518
  deployment_url: string;
280
519
  } | undefined;
@@ -284,7 +523,7 @@ export declare const percherConfigSchema: z.ZodObject<{
284
523
  } | undefined;
285
524
  file?: string | undefined;
286
525
  }, {
287
- mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "none";
526
+ mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "external" | "none";
288
527
  convex?: {
289
528
  deployment_url: string;
290
529
  } | undefined;
@@ -294,7 +533,7 @@ export declare const percherConfigSchema: z.ZodObject<{
294
533
  } | undefined;
295
534
  file?: string | undefined;
296
535
  }>, {
297
- mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "none";
536
+ mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "external" | "none";
298
537
  convex?: {
299
538
  deployment_url: string;
300
539
  } | undefined;
@@ -304,7 +543,7 @@ export declare const percherConfigSchema: z.ZodObject<{
304
543
  } | undefined;
305
544
  file?: string | undefined;
306
545
  }, {
307
- mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "none";
546
+ mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "external" | "none";
308
547
  convex?: {
309
548
  deployment_url: string;
310
549
  } | undefined;
@@ -314,32 +553,121 @@ export declare const percherConfigSchema: z.ZodObject<{
314
553
  } | undefined;
315
554
  file?: string | undefined;
316
555
  }>>;
317
- env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
556
+ env: z.ZodOptional<z.ZodType<EnvSection, z.ZodTypeDef, unknown>>;
318
557
  domain: z.ZodOptional<z.ZodObject<{
319
558
  subdomain: z.ZodOptional<z.ZodString>;
320
559
  custom: z.ZodOptional<z.ZodString>;
321
- }, "strip", z.ZodTypeAny, {
560
+ }, "strict", z.ZodTypeAny, {
322
561
  custom?: string | undefined;
323
562
  subdomain?: string | undefined;
324
563
  }, {
325
564
  custom?: string | undefined;
326
565
  subdomain?: string | undefined;
327
566
  }>>;
328
- resources: z.ZodOptional<z.ZodObject<{
567
+ resources: z.ZodOptional<z.ZodEffects<z.ZodObject<{
329
568
  memory: z.ZodOptional<z.ZodEnum<["256mb", "512mb", "1gb", "2gb"]>>;
330
569
  cpu: z.ZodOptional<z.ZodNumber>;
331
- }, "strip", z.ZodTypeAny, {
570
+ /** Number of parallel container instances (Phase 6.1). Plan-gated. */
571
+ instances: z.ZodOptional<z.ZodNumber>;
572
+ autoscale: z.ZodOptional<z.ZodEffects<z.ZodObject<{
573
+ min: z.ZodNumber;
574
+ max: z.ZodNumber;
575
+ scale_up_cpu_percent: z.ZodOptional<z.ZodNumber>;
576
+ scale_up_sustain_seconds: z.ZodOptional<z.ZodNumber>;
577
+ scale_down_cpu_percent: z.ZodOptional<z.ZodNumber>;
578
+ scale_down_sustain_seconds: z.ZodOptional<z.ZodNumber>;
579
+ cooldown_seconds: z.ZodOptional<z.ZodNumber>;
580
+ }, "strict", z.ZodTypeAny, {
581
+ min: number;
582
+ max: number;
583
+ scale_up_cpu_percent?: number | undefined;
584
+ scale_up_sustain_seconds?: number | undefined;
585
+ scale_down_cpu_percent?: number | undefined;
586
+ scale_down_sustain_seconds?: number | undefined;
587
+ cooldown_seconds?: number | undefined;
588
+ }, {
589
+ min: number;
590
+ max: number;
591
+ scale_up_cpu_percent?: number | undefined;
592
+ scale_up_sustain_seconds?: number | undefined;
593
+ scale_down_cpu_percent?: number | undefined;
594
+ scale_down_sustain_seconds?: number | undefined;
595
+ cooldown_seconds?: number | undefined;
596
+ }>, {
597
+ min: number;
598
+ max: number;
599
+ scale_up_cpu_percent?: number | undefined;
600
+ scale_up_sustain_seconds?: number | undefined;
601
+ scale_down_cpu_percent?: number | undefined;
602
+ scale_down_sustain_seconds?: number | undefined;
603
+ cooldown_seconds?: number | undefined;
604
+ }, {
605
+ min: number;
606
+ max: number;
607
+ scale_up_cpu_percent?: number | undefined;
608
+ scale_up_sustain_seconds?: number | undefined;
609
+ scale_down_cpu_percent?: number | undefined;
610
+ scale_down_sustain_seconds?: number | undefined;
611
+ cooldown_seconds?: number | undefined;
612
+ }>>;
613
+ }, "strict", z.ZodTypeAny, {
332
614
  memory?: "256mb" | "512mb" | "1gb" | "2gb" | undefined;
333
615
  cpu?: number | undefined;
616
+ instances?: number | undefined;
617
+ autoscale?: {
618
+ min: number;
619
+ max: number;
620
+ scale_up_cpu_percent?: number | undefined;
621
+ scale_up_sustain_seconds?: number | undefined;
622
+ scale_down_cpu_percent?: number | undefined;
623
+ scale_down_sustain_seconds?: number | undefined;
624
+ cooldown_seconds?: number | undefined;
625
+ } | undefined;
334
626
  }, {
335
627
  memory?: "256mb" | "512mb" | "1gb" | "2gb" | undefined;
336
628
  cpu?: number | undefined;
629
+ instances?: number | undefined;
630
+ autoscale?: {
631
+ min: number;
632
+ max: number;
633
+ scale_up_cpu_percent?: number | undefined;
634
+ scale_up_sustain_seconds?: number | undefined;
635
+ scale_down_cpu_percent?: number | undefined;
636
+ scale_down_sustain_seconds?: number | undefined;
637
+ cooldown_seconds?: number | undefined;
638
+ } | undefined;
639
+ }>, {
640
+ memory?: "256mb" | "512mb" | "1gb" | "2gb" | undefined;
641
+ cpu?: number | undefined;
642
+ instances?: number | undefined;
643
+ autoscale?: {
644
+ min: number;
645
+ max: number;
646
+ scale_up_cpu_percent?: number | undefined;
647
+ scale_up_sustain_seconds?: number | undefined;
648
+ scale_down_cpu_percent?: number | undefined;
649
+ scale_down_sustain_seconds?: number | undefined;
650
+ cooldown_seconds?: number | undefined;
651
+ } | undefined;
652
+ }, {
653
+ memory?: "256mb" | "512mb" | "1gb" | "2gb" | undefined;
654
+ cpu?: number | undefined;
655
+ instances?: number | undefined;
656
+ autoscale?: {
657
+ min: number;
658
+ max: number;
659
+ scale_up_cpu_percent?: number | undefined;
660
+ scale_up_sustain_seconds?: number | undefined;
661
+ scale_down_cpu_percent?: number | undefined;
662
+ scale_down_sustain_seconds?: number | undefined;
663
+ cooldown_seconds?: number | undefined;
664
+ } | undefined;
337
665
  }>>;
338
666
  dev: z.ZodOptional<z.ZodObject<{
339
667
  ignore: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
340
668
  debounce: z.ZodOptional<z.ZodNumber>;
341
669
  auto_open: z.ZodOptional<z.ZodBoolean>;
342
- }, "strip", z.ZodTypeAny, {
670
+ }, "strict", z.ZodTypeAny, {
343
671
  ignore?: string[] | undefined;
344
672
  debounce?: number | undefined;
345
673
  auto_open?: boolean | undefined;
@@ -352,7 +680,7 @@ export declare const percherConfigSchema: z.ZodObject<{
352
680
  crons: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
353
681
  schedule: z.ZodString;
354
682
  command: z.ZodString;
355
- }, "strip", z.ZodTypeAny, {
683
+ }, "strict", z.ZodTypeAny, {
356
684
  command: string;
357
685
  schedule: string;
358
686
  }, {
@@ -362,29 +690,29 @@ export declare const percherConfigSchema: z.ZodObject<{
362
690
  addons: z.ZodOptional<z.ZodObject<{
363
691
  pocketbase: z.ZodOptional<z.ZodObject<{
364
692
  enabled: z.ZodOptional<z.ZodBoolean>;
365
- }, "strip", z.ZodTypeAny, {
693
+ }, "strict", z.ZodTypeAny, {
366
694
  enabled?: boolean | undefined;
367
695
  }, {
368
696
  enabled?: boolean | undefined;
369
697
  }>>;
370
698
  cron: z.ZodOptional<z.ZodObject<{
371
699
  enabled: z.ZodOptional<z.ZodBoolean>;
372
- }, "strip", z.ZodTypeAny, {
700
+ }, "strict", z.ZodTypeAny, {
373
701
  enabled?: boolean | undefined;
374
702
  }, {
375
703
  enabled?: boolean | undefined;
376
704
  }>>;
377
705
  storage: z.ZodOptional<z.ZodObject<{
378
- mode: z.ZodOptional<z.ZodEnum<["pocketbase", "volume"]>>;
706
+ mode: z.ZodOptional<z.ZodEnum<["pocketbase", "volume", "s3"]>>;
379
707
  max_size: z.ZodOptional<z.ZodString>;
380
- }, "strip", z.ZodTypeAny, {
381
- mode?: "pocketbase" | "volume" | undefined;
708
+ }, "strict", z.ZodTypeAny, {
709
+ mode?: "pocketbase" | "volume" | "s3" | undefined;
382
710
  max_size?: string | undefined;
383
711
  }, {
384
- mode?: "pocketbase" | "volume" | undefined;
712
+ mode?: "pocketbase" | "volume" | "s3" | undefined;
385
713
  max_size?: string | undefined;
386
714
  }>>;
387
- }, "strip", z.ZodTypeAny, {
715
+ }, "strict", z.ZodTypeAny, {
388
716
  pocketbase?: {
389
717
  enabled?: boolean | undefined;
390
718
  } | undefined;
@@ -392,7 +720,7 @@ export declare const percherConfigSchema: z.ZodObject<{
392
720
  enabled?: boolean | undefined;
393
721
  } | undefined;
394
722
  storage?: {
395
- mode?: "pocketbase" | "volume" | undefined;
723
+ mode?: "pocketbase" | "volume" | "s3" | undefined;
396
724
  max_size?: string | undefined;
397
725
  } | undefined;
398
726
  }, {
@@ -403,7 +731,7 @@ export declare const percherConfigSchema: z.ZodObject<{
403
731
  enabled?: boolean | undefined;
404
732
  } | undefined;
405
733
  storage?: {
406
- mode?: "pocketbase" | "volume" | undefined;
734
+ mode?: "pocketbase" | "volume" | "s3" | undefined;
407
735
  max_size?: string | undefined;
408
736
  } | undefined;
409
737
  }>>;
@@ -412,7 +740,7 @@ export declare const percherConfigSchema: z.ZodObject<{
412
740
  interval: z.ZodOptional<z.ZodNumber>;
413
741
  timeout: z.ZodOptional<z.ZodNumber>;
414
742
  initial_delay: z.ZodOptional<z.ZodNumber>;
415
- }, "strip", z.ZodTypeAny, {
743
+ }, "strict", z.ZodTypeAny, {
416
744
  path: string;
417
745
  interval?: number | undefined;
418
746
  timeout?: number | undefined;
@@ -423,22 +751,24 @@ export declare const percherConfigSchema: z.ZodObject<{
423
751
  timeout?: number | undefined;
424
752
  initial_delay?: number | undefined;
425
753
  }>>>;
426
- }, "strip", z.ZodTypeAny, {
754
+ }, "strict", z.ZodTypeAny, {
427
755
  app: {
428
756
  name: string;
429
757
  runtime: "node" | "bun" | "python" | "static" | "docker";
430
- framework?: "docker" | "nextjs" | "sveltekit" | "astro" | "remix" | "vite" | "express" | "fastify" | "hono" | "fastapi" | "flask" | "django" | undefined;
758
+ framework?: "docker" | "nextjs" | "sveltekit" | "astro" | "remix" | "nuxt" | "vite" | "preact" | "solid" | "express" | "fastify" | "hono" | "elysia" | "fastapi" | "flask" | "django" | "eleventy" | "hugo" | "laravel" | "rails" | "phoenix" | "go" | "rust" | "dotnet" | "java" | undefined;
431
759
  };
432
760
  build?: {
433
761
  command?: string | undefined;
434
762
  output?: string | undefined;
763
+ pass_env?: string[] | undefined;
435
764
  } | undefined;
436
765
  web?: {
437
766
  port: number;
438
767
  health?: string | undefined;
768
+ password?: boolean | undefined;
439
769
  } | undefined;
440
770
  data?: {
441
- mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "none";
771
+ mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "external" | "none";
442
772
  convex?: {
443
773
  deployment_url: string;
444
774
  } | undefined;
@@ -448,7 +778,7 @@ export declare const percherConfigSchema: z.ZodObject<{
448
778
  } | undefined;
449
779
  file?: string | undefined;
450
780
  } | undefined;
451
- env?: Record<string, string> | undefined;
781
+ env?: EnvSection | undefined;
452
782
  domain?: {
453
783
  custom?: string | undefined;
454
784
  subdomain?: string | undefined;
@@ -456,6 +786,16 @@ export declare const percherConfigSchema: z.ZodObject<{
456
786
  resources?: {
457
787
  memory?: "256mb" | "512mb" | "1gb" | "2gb" | undefined;
458
788
  cpu?: number | undefined;
789
+ instances?: number | undefined;
790
+ autoscale?: {
791
+ min: number;
792
+ max: number;
793
+ scale_up_cpu_percent?: number | undefined;
794
+ scale_up_sustain_seconds?: number | undefined;
795
+ scale_down_cpu_percent?: number | undefined;
796
+ scale_down_sustain_seconds?: number | undefined;
797
+ cooldown_seconds?: number | undefined;
798
+ } | undefined;
459
799
  } | undefined;
460
800
  dev?: {
461
801
  ignore?: string[] | undefined;
@@ -475,7 +815,7 @@ export declare const percherConfigSchema: z.ZodObject<{
475
815
  enabled?: boolean | undefined;
476
816
  } | undefined;
477
817
  storage?: {
478
- mode?: "pocketbase" | "volume" | undefined;
818
+ mode?: "pocketbase" | "volume" | "s3" | undefined;
479
819
  max_size?: string | undefined;
480
820
  } | undefined;
481
821
  } | undefined;
@@ -489,18 +829,20 @@ export declare const percherConfigSchema: z.ZodObject<{
489
829
  app: {
490
830
  name: string;
491
831
  runtime: "node" | "bun" | "python" | "static" | "docker";
492
- framework?: "docker" | "nextjs" | "sveltekit" | "astro" | "remix" | "vite" | "express" | "fastify" | "hono" | "fastapi" | "flask" | "django" | undefined;
832
+ framework?: "docker" | "nextjs" | "sveltekit" | "astro" | "remix" | "nuxt" | "vite" | "preact" | "solid" | "express" | "fastify" | "hono" | "elysia" | "fastapi" | "flask" | "django" | "eleventy" | "hugo" | "laravel" | "rails" | "phoenix" | "go" | "rust" | "dotnet" | "java" | undefined;
493
833
  };
494
834
  build?: {
495
835
  command?: string | undefined;
496
836
  output?: string | undefined;
837
+ pass_env?: string[] | undefined;
497
838
  } | undefined;
498
839
  web?: {
499
840
  port: number;
500
841
  health?: string | undefined;
842
+ password?: boolean | undefined;
501
843
  } | undefined;
502
844
  data?: {
503
- mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "none";
845
+ mode: "pocketbase" | "postgres" | "sqlite" | "convex" | "supabase" | "external" | "none";
504
846
  convex?: {
505
847
  deployment_url: string;
506
848
  } | undefined;
@@ -510,7 +852,7 @@ export declare const percherConfigSchema: z.ZodObject<{
510
852
  } | undefined;
511
853
  file?: string | undefined;
512
854
  } | undefined;
513
- env?: Record<string, string> | undefined;
855
+ env?: unknown;
514
856
  domain?: {
515
857
  custom?: string | undefined;
516
858
  subdomain?: string | undefined;
@@ -518,6 +860,16 @@ export declare const percherConfigSchema: z.ZodObject<{
518
860
  resources?: {
519
861
  memory?: "256mb" | "512mb" | "1gb" | "2gb" | undefined;
520
862
  cpu?: number | undefined;
863
+ instances?: number | undefined;
864
+ autoscale?: {
865
+ min: number;
866
+ max: number;
867
+ scale_up_cpu_percent?: number | undefined;
868
+ scale_up_sustain_seconds?: number | undefined;
869
+ scale_down_cpu_percent?: number | undefined;
870
+ scale_down_sustain_seconds?: number | undefined;
871
+ cooldown_seconds?: number | undefined;
872
+ } | undefined;
521
873
  } | undefined;
522
874
  dev?: {
523
875
  ignore?: string[] | undefined;
@@ -537,7 +889,7 @@ export declare const percherConfigSchema: z.ZodObject<{
537
889
  enabled?: boolean | undefined;
538
890
  } | undefined;
539
891
  storage?: {
540
- mode?: "pocketbase" | "volume" | undefined;
892
+ mode?: "pocketbase" | "volume" | "s3" | undefined;
541
893
  max_size?: string | undefined;
542
894
  } | undefined;
543
895
  } | undefined;