1use super::*;
2
3pub fn bootstrap_core_services(
4 config: &PlatformConfig,
5) -> Result<CoreBootstrap, RegistrationError> {
6 bootstrap_core_services_with_translation_catalogs(config, Vec::new())
7}
8
9pub fn bootstrap_core_services_with_translation_catalogs(
10 config: &PlatformConfig,
11 customer_translation_catalogs: Vec<TranslationCatalog>,
12) -> Result<CoreBootstrap, RegistrationError> {
13 let mut registry = ServiceRegistry::new();
14 let cache_topology = cache_topology_from_config(config);
15 let cache = CacheRuntimeServices {
16 topology: cache_topology,
17 planner: CachePlanner::new(cache_topology),
18 };
19 let browser = browser_security_from_config(config);
20 let cli = cli_runtime_from_config(config);
21 let data = data_runtime_from_config(config);
22 let jobs = jobs_runtime_from_config(config);
23 let observability = observability_runtime_from_config(config);
24 let i18n = i18n_runtime_from_config(config, customer_translation_catalogs);
25 let seo = seo_runtime_from_config(config);
26 let a11y = a11y_runtime_services();
27 let template = template_runtime_services();
28 let tls = tls_runtime_from_config(config);
29 let wasm = wasm_runtime_from_config(config);
30
31 registry.register_core_service("core.config", "Typed platform configuration")?;
32 registry.register_core_service(
33 "core.cli",
34 format!(
35 "Platform CLI contract for `{}` with {} baseline commands",
36 cli.customer_app, cli.baseline_command_count
37 ),
38 )?;
39 registry.register_core_service("core.logging", "Structured logging service")?;
40 registry.register_core_service(
41 "core.health",
42 "Liveness, readiness, and operator-facing dependency health checks",
43 )?;
44 registry.register_core_service(
45 "core.maintenance",
46 "Maintenance-mode control for deployment-wide and customer-app-scoped traffic shaping",
47 )?;
48 registry.register_core_service(
49 "core.flags",
50 "Scoped feature-flag control plane for staged rollout and customer targeting",
51 )?;
52
53 if config.observability.metrics {
54 registry.register_core_service(
55 "core.metrics",
56 "Structured metric catalog for HTTP, auth, cache, queue, TLS, storage, and extensions",
57 )?;
58 }
59
60 if config.observability.tracing {
61 registry.register_core_service("core.tracing", "Distributed tracing pipeline")?;
62 }
63
64 registry.register_core_service("core.auth", "Authorization engine and model loader")?;
65 registry.register_core_service(
66 "core.data",
67 format!(
68 "Primary {:?} data access with schema `{}` and pool {}..{}",
69 data.driver, data.schema, data.pool.min_connections, data.pool.max_connections
70 ),
71 )?;
72 registry.register_core_service(
73 "core.data.migrations",
74 format!(
75 "Owned migration planning through `{}`",
76 data.migrations_table
77 ),
78 )?;
79 registry.register_core_service(
80 "core.cache.l1",
81 format!("Local cache backend: {}", cache.topology.l1()),
82 )?;
83
84 if let Some(distributed) = cache.distributed_backend() {
85 registry.register_core_service(
86 "core.cache.l2",
87 format!("Distributed cache backend: {distributed}"),
88 )?;
89 registry.register_core_service(
90 "core.cache.invalidation",
91 format!("Shared invalidation, coalescing, and coordination via {distributed}"),
92 )?;
93 }
94 registry.register_core_service(
95 "core.cache.http",
96 "HTTP cache-control, validators, variation keys, and surrogate tags",
97 )?;
98 registry.register_core_service(
99 "core.http",
100 "HTTP request pipeline, middleware ordering, and typed request context",
101 )?;
102 registry.register_core_service(
103 "core.http.sessions",
104 format!(
105 "Server-side session policy backed by {:?}",
106 browser.sessions.store
107 ),
108 )?;
109 registry.register_core_service(
110 "core.http.cookies",
111 "Signed cookie policy with central Secure, HttpOnly, SameSite, domain, and path defaults",
112 )?;
113 registry.register_core_service(
114 "core.http.csrf",
115 "CSRF token issuance and validation for state-changing browser flows",
116 )?;
117
118 registry.register_core_service("core.storage", "Storage policy and object access layer")?;
119 registry.register_core_service("core.assets", "Asset manifest and CDN publication layer")?;
120 registry.register_core_service(
121 "core.i18n",
122 format!(
123 "Locale resolution, fallback translation runtime, and URL generation rooted at `{}`",
124 seo.canonical_host
125 ),
126 )?;
127 registry.register_core_service(
128 "core.seo",
129 format!(
130 "Typed metadata, sitemap, canonical URL, and JSON-LD services with sitemap {}",
131 if seo.sitemap_enabled {
132 "enabled"
133 } else {
134 "disabled"
135 }
136 ),
137 )?;
138 registry.register_core_service(
139 "core.a11y",
140 "Accessibility-aware form, table, dialog, navigation, live-region, and theme-baseline contracts",
141 )?;
142 registry.register_core_service("core.template", "HTML-first template runtime")?;
143 registry.register_core_service(
144 "core.template.fragments",
145 "Named fragment, slot, and partial-rendering composition runtime",
146 )?;
147 registry.register_core_service(
148 "core.wasm",
149 format!(
150 "WASM extension host runtime rooted at `{}` with network {}",
151 wasm.extension_directory,
152 if wasm.allow_network {
153 "enabled"
154 } else {
155 "disabled"
156 }
157 ),
158 )?;
159 registry.register_core_service(
160 "core.wasm.limits",
161 "Per-surface WASM resource limits for pages, APIs, jobs, webhooks, and widgets",
162 )?;
163 registry.register_core_service(
164 "core.customer_plugins",
165 "Linked customer-plugin registration and stable first-party hook runtime",
166 )?;
167 registry.register_core_service(
168 "core.jobs",
169 format!(
170 "Background jobs, scheduler, and domain-event queues over {:?}",
171 jobs.backend
172 ),
173 )?;
174
175 match tls.mode {
176 TlsMode::External => {
177 registry.register_core_service(
178 "core.tls.metadata",
179 "Trusted termination metadata and secure transport policy",
180 )?;
181 }
182 _ => {
183 registry.register_core_service(
184 "core.tls",
185 "Certificate lifecycle, TLS termination, and renewal orchestration",
186 )?;
187 registry.register_core_service(
188 "core.tls.reload",
189 "Hot-reloadable certificate bindings and SNI inventory",
190 )?;
191 }
192 }
193
194 Ok(CoreBootstrap {
195 registry,
196 cache,
197 browser,
198 cli,
199 data,
200 jobs,
201 observability,
202 i18n,
203 seo,
204 a11y,
205 template,
206 tls,
207 wasm,
208 })
209}