@caelo-cms/provisioning 0.10.29 → 0.10.30

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 (82) hide show
  1. package/dist/admin-domain.d.ts +54 -0
  2. package/dist/admin-domain.d.ts.map +1 -0
  3. package/dist/admin-domain.js +122 -0
  4. package/dist/admin-domain.js.map +1 -0
  5. package/dist/cli.js +65 -6
  6. package/dist/cli.js.map +1 -1
  7. package/dist/compose.d.ts +7 -9
  8. package/dist/compose.d.ts.map +1 -1
  9. package/dist/compose.js +17 -1
  10. package/dist/compose.js.map +1 -1
  11. package/dist/deployed-release.d.ts +67 -0
  12. package/dist/deployed-release.d.ts.map +1 -0
  13. package/dist/deployed-release.js +144 -0
  14. package/dist/deployed-release.js.map +1 -0
  15. package/dist/gcloud-retry.d.ts +16 -0
  16. package/dist/gcloud-retry.d.ts.map +1 -0
  17. package/dist/gcloud-retry.js +17 -0
  18. package/dist/gcloud-retry.js.map +1 -0
  19. package/dist/gcloud.d.ts.map +1 -1
  20. package/dist/gcloud.js +2 -0
  21. package/dist/gcloud.js.map +1 -1
  22. package/dist/gcp-names.d.ts +58 -0
  23. package/dist/gcp-names.d.ts.map +1 -0
  24. package/dist/gcp-names.js +88 -0
  25. package/dist/gcp-names.js.map +1 -0
  26. package/dist/install-state.d.ts +31 -0
  27. package/dist/install-state.d.ts.map +1 -1
  28. package/dist/install-state.js +38 -0
  29. package/dist/install-state.js.map +1 -1
  30. package/dist/lifecycle.d.ts.map +1 -1
  31. package/dist/lifecycle.js +314 -46
  32. package/dist/lifecycle.js.map +1 -1
  33. package/dist/mcp-iap.d.ts +5 -26
  34. package/dist/mcp-iap.d.ts.map +1 -1
  35. package/dist/mcp-iap.js +6 -18
  36. package/dist/mcp-iap.js.map +1 -1
  37. package/dist/migration-runner.d.ts +25 -0
  38. package/dist/migration-runner.d.ts.map +1 -1
  39. package/dist/migration-runner.js +60 -19
  40. package/dist/migration-runner.js.map +1 -1
  41. package/dist/operator-access.d.ts +83 -0
  42. package/dist/operator-access.d.ts.map +1 -0
  43. package/dist/operator-access.js +562 -0
  44. package/dist/operator-access.js.map +1 -0
  45. package/dist/runtime-secrets.d.ts +128 -0
  46. package/dist/runtime-secrets.d.ts.map +1 -0
  47. package/dist/runtime-secrets.js +444 -0
  48. package/dist/runtime-secrets.js.map +1 -0
  49. package/dist/stack-contract.d.ts +231 -0
  50. package/dist/stack-contract.d.ts.map +1 -0
  51. package/dist/stack-contract.js +455 -0
  52. package/dist/stack-contract.js.map +1 -0
  53. package/dist/stack-converge.d.ts +183 -0
  54. package/dist/stack-converge.d.ts.map +1 -0
  55. package/dist/stack-converge.js +513 -0
  56. package/dist/stack-converge.js.map +1 -0
  57. package/dist/wizard.d.ts.map +1 -1
  58. package/dist/wizard.js +8 -1
  59. package/dist/wizard.js.map +1 -1
  60. package/dist/wizards/gcp-cost.d.ts +6 -10
  61. package/dist/wizards/gcp-cost.d.ts.map +1 -1
  62. package/dist/wizards/gcp-cost.js +34 -2
  63. package/dist/wizards/gcp-cost.js.map +1 -1
  64. package/dist/wizards/gcp-pulumi.d.ts +32 -1
  65. package/dist/wizards/gcp-pulumi.d.ts.map +1 -1
  66. package/dist/wizards/gcp-pulumi.js +60 -5
  67. package/dist/wizards/gcp-pulumi.js.map +1 -1
  68. package/dist/wizards/gcp.d.ts.map +1 -1
  69. package/dist/wizards/gcp.js +79 -16
  70. package/dist/wizards/gcp.js.map +1 -1
  71. package/package.json +3 -3
  72. package/stacks/aws/Pulumi.yaml +4 -0
  73. package/stacks/aws/index.ts +11 -0
  74. package/stacks/azure/Pulumi.yaml +4 -0
  75. package/stacks/azure/index.ts +10 -1
  76. package/stacks/gcp/Pulumi.yaml +4 -3
  77. package/stacks/gcp/README.md +13 -2
  78. package/stacks/gcp/index.ts +200 -140
  79. package/stacks/gcp-firebase/Pulumi.yaml +4 -0
  80. package/stacks/gcp-firebase/index.ts +165 -75
  81. package/stacks/self-hosted/Pulumi.yaml +4 -0
  82. package/stacks/self-hosted/index.ts +3 -0
@@ -0,0 +1,231 @@
1
+ export type GcpProvider = "gcp" | "gcp-firebase";
2
+ export type CloudRunSlug = "admin" | "gateway";
3
+ /**
4
+ * One container env var, in the shape Pulumi's `gcp.cloudrunv2.Service`
5
+ * `envs` accepts. `V` is the value type: `pulumi.Input<string>` in the
6
+ * stacks, `string` in upgrade.
7
+ */
8
+ export type CloudRunEnvVar<V = string> = {
9
+ readonly name: string;
10
+ readonly value: V;
11
+ } | {
12
+ readonly name: string;
13
+ readonly valueSource: {
14
+ readonly secretKeyRef: {
15
+ readonly secret: V;
16
+ readonly version: string;
17
+ };
18
+ };
19
+ };
20
+ /** Install metadata every service's env derives from. */
21
+ export interface ServiceEnvInputs {
22
+ readonly provider: GcpProvider;
23
+ readonly projectId: string;
24
+ /** Pulumi stack name (`production`). */
25
+ readonly env: string;
26
+ /** Install domain; the public site is served at its apex. */
27
+ readonly domain: string;
28
+ readonly region: string;
29
+ }
30
+ /** The password-less connection URLs of the install's Cloud SQL databases. */
31
+ export interface DatabaseUrls<V = string> {
32
+ /** admin_role on cms_admin — the admin's primary pool. */
33
+ readonly admin: V;
34
+ /** admin_role on cms_public — the admin's second pool (DDL, migrations). */
35
+ readonly publicAdmin: V;
36
+ /** public_role on cms_public — the gateway's visitor-write pool. */
37
+ readonly public: V;
38
+ }
39
+ /**
40
+ * Password-less connection URLs for a Cloud SQL instance at `host`. The
41
+ * password reaches the apps separately, as a Secret Manager reference
42
+ * ({@link SERVICE_SECRET_ENV}).
43
+ */
44
+ export declare function databaseUrls(host: string): DatabaseUrls;
45
+ /** What a running service's env derives from: install metadata + the database. */
46
+ export interface RuntimeEnvInputs<V = string> extends ServiceEnvInputs {
47
+ /** From the Cloud SQL private IP — an Output in the stacks. */
48
+ readonly databaseUrls: DatabaseUrls<V>;
49
+ }
50
+ /**
51
+ * What the admin's env derives from. Most values come from install metadata;
52
+ * the few Pulumi generates (database host, Firebase site id, the gateway's
53
+ * auto-named Cloud Run service) are passed in — as Outputs by the stack, as
54
+ * discovered strings by upgrade.
55
+ */
56
+ export type AdminEnvInputs<V = string> = (RuntimeEnvInputs<V> & {
57
+ readonly provider: "gcp";
58
+ }) | (RuntimeEnvInputs<V> & {
59
+ readonly provider: "gcp-firebase";
60
+ readonly firebaseSiteId: V;
61
+ readonly gatewayService: V;
62
+ });
63
+ /** The public site's base URL, as the admin seeds `site_base_url` from it (#551). */
64
+ export declare function publicSiteUrl(domain: string): string;
65
+ /**
66
+ * The admin env var naming the MCP service account (issue #37). `upgrade`
67
+ * leaves it untouched when it could not set that account up.
68
+ */
69
+ export declare const MCP_ENV_VAR = "CAELO_MCP_IAP_SERVICE_ACCOUNT";
70
+ /**
71
+ * The admin env var naming the operator-access sync job. `upgrade` leaves it
72
+ * untouched when it could not set the job up.
73
+ */
74
+ export declare const OPERATOR_ACCESS_JOB_ENV_VAR = "CAELO_OPERATOR_ACCESS_JOB";
75
+ /**
76
+ * The Secret Manager secrets admin + gateway read at runtime, by logical
77
+ * name ({@link gcpSecretId} gives the secret id).
78
+ */
79
+ export type RuntimeSecret = "postgres-password" | "secret-kek" | "internal-secret" | "tool-approval-secret";
80
+ /**
81
+ * Secrets the CLI generates and stores (runtime-secrets.ts
82
+ * `ensureGeneratedSecrets`) rather than Pulumi: the wizard creates them
83
+ * before `pulumi up`, upgrade creates them on installs that predate them.
84
+ * Pulumi only references them, so a `pulumi up` after an upgrade never
85
+ * collides with a secret upgrade created.
86
+ */
87
+ export declare const CLI_GENERATED_SECRETS: readonly ["internal-secret", "tool-approval-secret"];
88
+ /**
89
+ * Each service's Secret Manager-backed env vars and the secret each reads.
90
+ * The services' run SAs get `secretAccessor` on exactly these secrets
91
+ * ({@link runtimeSecretBindings}), so this table is also the least-privilege
92
+ * boundary between the two services.
93
+ */
94
+ export declare const SERVICE_SECRET_ENV: Readonly<Record<CloudRunSlug, Readonly<Record<string, RuntimeSecret>>>>;
95
+ /** The secrets `service` reads (deduplicated, table order). */
96
+ export declare function serviceSecrets(service: CloudRunSlug): RuntimeSecret[];
97
+ /**
98
+ * Env vars an older stack set that the contract no longer gives a service;
99
+ * upgrade removes them. The gateway never used the KEK, and its run SA
100
+ * cannot read it.
101
+ */
102
+ export declare const RETIRED_SERVICE_ENV: Readonly<Record<CloudRunSlug, readonly string[]>>;
103
+ /**
104
+ * The env of the gateway service. Order is stable so the stacks see no
105
+ * spurious diffs.
106
+ */
107
+ export declare function gatewayEnvContract<V>(inputs: RuntimeEnvInputs<V>): CloudRunEnvVar<V | string>[];
108
+ /**
109
+ * The env of the admin service.
110
+ *
111
+ * @example
112
+ * adminEnvContract({ provider: "gcp", projectId: "p", env: "production",
113
+ * domain: "example.com", region: "europe-west1",
114
+ * databaseUrls: databaseUrls("10.20.0.3") })
115
+ * // → [{ name: "CAELO_PROVIDER", value: "gcp" }, …,
116
+ * // { name: "CAELO_SITE_URL", value: "https://example.com" }, …,
117
+ * // { name: "CAELO_SECRET_KEK", valueSource: { secretKeyRef: … } }, …]
118
+ */
119
+ export declare function adminEnvContract<V>(inputs: AdminEnvInputs<V>): CloudRunEnvVar<V | string>[];
120
+ /**
121
+ * Cloud CDN policy of the `gcp` stack's static backend bucket. The GCS
122
+ * publisher sets an explicit Cache-Control on every object: content-hashed
123
+ * assets `max-age=31536000, immutable`, pages `max-age=60` + SWR. In
124
+ * CACHE_ALL_STATIC mode `clientTtl` clamps the max-age browsers see and
125
+ * `maxTtl` caps the edge TTL, so both must allow a year or the immutable
126
+ * policy is cut back to 1h (#555). `defaultTtl` applies only to responses
127
+ * without a max-age.
128
+ */
129
+ export declare const STATIC_CDN_POLICY: {
130
+ readonly cacheMode: "CACHE_ALL_STATIC";
131
+ readonly defaultTtl: 3600;
132
+ readonly maxTtl: 31536000;
133
+ readonly clientTtl: 31536000;
134
+ };
135
+ /** Who an IAM invariant grants a role to. */
136
+ export type IamPrincipal =
137
+ /** The runtime SA the admin (and the migration jobs) run as. */
138
+ "run-sa"
139
+ /** The runtime SA the gateway runs as. */
140
+ | "gateway-sa"
141
+ /** The `gcp` stack's static-publisher SA. */
142
+ | "static-publisher-sa"
143
+ /** IAP's Google-managed service agent (forwards IAP traffic to Cloud Run). */
144
+ | "iap-service-agent" | "allUsers";
145
+ /** The resource an IAM invariant's binding lives on. */
146
+ export type IamTarget = {
147
+ readonly kind: "project";
148
+ } | {
149
+ readonly kind: "secret";
150
+ readonly name: string;
151
+ } | {
152
+ readonly kind: "bucket";
153
+ readonly bucket: "media" | "static" | "staging";
154
+ } | {
155
+ readonly kind: "run-service";
156
+ readonly service: CloudRunSlug;
157
+ };
158
+ /**
159
+ * One IAM binding a stack declares and upgrade ensures.
160
+ *
161
+ * `onFailure` decides what upgrade does when it can neither find nor add the
162
+ * binding: `abort` (before any traffic shifts) when the install cannot work
163
+ * without it, `warn` when only something non-essential degrades.
164
+ */
165
+ export interface IamInvariant {
166
+ /**
167
+ * Logical name of the stack resource that declares the binding, without
168
+ * the `${namePrefix}-` prefix — the parity test finds it in the stack by
169
+ * this name.
170
+ */
171
+ readonly stackResource: string;
172
+ readonly role: string;
173
+ readonly member: IamPrincipal;
174
+ readonly target: IamTarget;
175
+ readonly onFailure: "abort" | "warn";
176
+ readonly why: string;
177
+ }
178
+ /** One `secretAccessor` binding a stack declares for a service's run SA. */
179
+ export interface RuntimeSecretBinding {
180
+ readonly service: CloudRunSlug;
181
+ readonly secret: RuntimeSecret;
182
+ /** Logical stack resource name, without the `${namePrefix}-` prefix. */
183
+ readonly stackResource: string;
184
+ }
185
+ /**
186
+ * The `secretAccessor` bindings both stacks declare: each service's run SA
187
+ * on exactly the secrets its env reads ({@link SERVICE_SECRET_ENV}).
188
+ */
189
+ export declare function runtimeSecretBindings(): RuntimeSecretBinding[];
190
+ /** Every IAM binding upgrade ensures on an install of `provider`. */
191
+ export declare function stackIamInvariants(provider: GcpProvider): IamInvariant[];
192
+ /**
193
+ * IAM bindings the stacks declare that upgrade deliberately does not ensure,
194
+ * keyed by provider and the stack resource's logical name as written in the
195
+ * stack source, with each `${…}` placeholder written as `*`.
196
+ */
197
+ export declare const STACK_IAM_NOT_ENSURED: Record<GcpProvider, Readonly<Record<string, string>>>;
198
+ /** The IAM member string for a principal on a concrete install. */
199
+ export declare function iamMember(principal: IamPrincipal, install: {
200
+ readonly projectId: string;
201
+ readonly projectNumber: string;
202
+ readonly env: string;
203
+ }): string;
204
+ /** Name prefix of the `gcp` stack's static backend bucket (Pulumi auto-suffixed). */
205
+ export declare function staticBackendBucketPrefix(env: string): string;
206
+ /**
207
+ * #553 — the admin's memory, in Cloud Run / Kubernetes quantity notation.
208
+ * The admin runs the quality audit (Lighthouse driving the bundled
209
+ * Chromium in a child process) next to the editor's requests; 1 GiB left
210
+ * no headroom for both, 2 GiB does. Every adapter exposes the same
211
+ * `adminMemory` knob with this default (CLAUDE.md §11.B), and `upgrade`
212
+ * raises an existing install's admin to it (never lowers a larger value).
213
+ */
214
+ export declare const ADMIN_MEMORY_DEFAULT = "2Gi";
215
+ /**
216
+ * Parse a memory quantity (`512Mi`, `2Gi`, `2G`, `1.5Gi`) to MiB; null when
217
+ * it is not a quantity this contract understands.
218
+ */
219
+ /**
220
+ * #553 — Azure Container Apps (Consumption) only accepts fixed CPU/memory
221
+ * pairs: 0.25 vCPU / 0.5Gi up to 4 vCPU / 8Gi in 0.25 vCPU steps, memory
222
+ * always 2 GiB per vCPU. Map `adminMemory` onto that pair, or throw with
223
+ * the accepted values — an unsupported size must fail before `pulumi up`
224
+ * does, not deploy something else.
225
+ */
226
+ export declare function azureContainerAppResources(quantity: string): {
227
+ readonly cpu: number;
228
+ readonly memory: string;
229
+ };
230
+ export declare function memoryQuantityMiB(quantity: string): number | null;
231
+ //# sourceMappingURL=stack-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-contract.d.ts","sourceRoot":"","sources":["../src/stack-contract.ts"],"names":[],"mappings":"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"}