@tdk-landscape/tdk-cli-core 1.3.14 → 1.3.22

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 (277) hide show
  1. package/README.md +3 -3
  2. package/Tiltfile +144 -0
  3. package/discovery/AGENTS.md +362 -0
  4. package/discovery/TILT_DISCOVERY.star +424 -0
  5. package/discovery/Tiltfile +58 -0
  6. package/discovery/config.star +258 -0
  7. package/discovery/constants.star +127 -0
  8. package/discovery/deterministic.star +211 -0
  9. package/discovery/discovery_daemon.star +191 -0
  10. package/discovery/discovery_orchestrator.star +460 -0
  11. package/discovery/filtering.star +5 -0
  12. package/discovery/identity-management-backend/service.yaml +26 -0
  13. package/discovery/identity-management-frontend/service.yaml +29 -0
  14. package/discovery/identity-sdk/service.yaml +9 -0
  15. package/discovery/incremental_discovery.star +213 -0
  16. package/discovery/indexing.star +7 -0
  17. package/discovery/json_manifest_scanner.star +51 -0
  18. package/discovery/libraries.star +46 -0
  19. package/discovery/loading.star +23 -0
  20. package/discovery/manifest/constants.star +104 -0
  21. package/discovery/manifest/loading.star +386 -0
  22. package/discovery/manifest/normalize.star +281 -0
  23. package/discovery/manifest/validation.star +108 -0
  24. package/discovery/normalization.star +11 -0
  25. package/discovery/registry.star +544 -0
  26. package/discovery/resource_snapshot.py +382 -0
  27. package/discovery/resource_snapshot.star +143 -0
  28. package/discovery/schemas.star +1 -0
  29. package/discovery/services/platform/cdc/debezium/nats-connector/service.yaml +9 -0
  30. package/discovery/services/platform/cdc/nats-http-bridge/service.yaml +9 -0
  31. package/discovery/services/platform/orchestrator/orchestrator-glue-backend/service.yaml +26 -0
  32. package/discovery/services/platform/synthetic-monitor/service.yaml +9 -0
  33. package/discovery/test_resource_snapshot.py +251 -0
  34. package/discovery/validation.star +78 -0
  35. package/discovery/versioning.star +1 -0
  36. package/dist/commands/config.d.ts.map +1 -1
  37. package/dist/commands/config.js +11 -0
  38. package/dist/commands/config.js.map +1 -1
  39. package/dist/commands/doctor.d.ts.map +1 -1
  40. package/dist/commands/doctor.js +1 -2
  41. package/dist/commands/doctor.js.map +1 -1
  42. package/dist/commands/project.d.ts.map +1 -1
  43. package/dist/commands/project.js +36 -41
  44. package/dist/commands/project.js.map +1 -1
  45. package/dist/commands/resource.d.ts.map +1 -1
  46. package/dist/commands/resource.js +51 -55
  47. package/dist/commands/resource.js.map +1 -1
  48. package/dist/commands/stack.d.ts.map +1 -1
  49. package/dist/commands/stack.js +22 -24
  50. package/dist/commands/stack.js.map +1 -1
  51. package/dist/commands/ui.d.ts.map +1 -1
  52. package/dist/commands/ui.js +1 -2
  53. package/dist/commands/ui.js.map +1 -1
  54. package/dist/commands/up.d.ts.map +1 -1
  55. package/dist/commands/up.js +1 -2
  56. package/dist/commands/up.js.map +1 -1
  57. package/dist/commands/upgrade.d.ts +8 -0
  58. package/dist/commands/upgrade.d.ts.map +1 -1
  59. package/dist/commands/upgrade.js +62 -21
  60. package/dist/commands/upgrade.js.map +1 -1
  61. package/dist/generator/extension-fetch.d.ts +19 -0
  62. package/dist/generator/extension-fetch.d.ts.map +1 -1
  63. package/dist/generator/extension-fetch.js +71 -5
  64. package/dist/generator/extension-fetch.js.map +1 -1
  65. package/dist/generator/template-engine.d.ts +1 -0
  66. package/dist/generator/template-engine.d.ts.map +1 -1
  67. package/dist/generator/template-engine.js +50 -6
  68. package/dist/generator/template-engine.js.map +1 -1
  69. package/dist/utils/command-helpers.d.ts.map +1 -1
  70. package/dist/utils/command-helpers.js +7 -9
  71. package/dist/utils/command-helpers.js.map +1 -1
  72. package/dist/utils/constants.d.ts +1 -0
  73. package/dist/utils/constants.d.ts.map +1 -1
  74. package/dist/utils/constants.js +1 -0
  75. package/dist/utils/constants.js.map +1 -1
  76. package/dist/utils/errors.d.ts +2 -0
  77. package/dist/utils/errors.d.ts.map +1 -1
  78. package/dist/utils/errors.js +6 -1
  79. package/dist/utils/errors.js.map +1 -1
  80. package/dist/utils/paths.js +1 -1
  81. package/dist/utils/paths.js.map +1 -1
  82. package/dist/utils/project-features.d.ts.map +1 -1
  83. package/dist/utils/project-features.js +1 -1
  84. package/dist/utils/project-features.js.map +1 -1
  85. package/dist/utils/resource-features.d.ts.map +1 -1
  86. package/dist/utils/resource-features.js +2 -2
  87. package/dist/utils/resource-features.js.map +1 -1
  88. package/dist/utils/tar.js +4 -4
  89. package/dist/utils/tar.js.map +1 -1
  90. package/dist/utils/validation.d.ts +7 -0
  91. package/dist/utils/validation.d.ts.map +1 -1
  92. package/dist/utils/validation.js +9 -0
  93. package/dist/utils/validation.js.map +1 -1
  94. package/engine/AGENTS.md +705 -0
  95. package/engine/README.md +29 -0
  96. package/engine/REFACTORING_MANIFEST_SYSTEM.md +974 -0
  97. package/engine/Tiltfile +80 -0
  98. package/engine/assets/docker/golden-layers.Dockerfile +221 -0
  99. package/engine/assets/scripts/cleanup-completed-migrator-images.sh +37 -0
  100. package/engine/assets/scripts/cleanup-tilt-images.sh +120 -0
  101. package/engine/assets/scripts/mac-m1-resource-monitor.sh +121 -0
  102. package/engine/config.star +3 -0
  103. package/engine/docs/AUTODISCOVERY_TEST.md +182 -0
  104. package/engine/docs/C4-ARCHITECTURE-operations.md +396 -0
  105. package/engine/docs/C4-ARCHITECTURE-overview.md +284 -0
  106. package/engine/docs/C4-ARCHITECTURE.md +17 -0
  107. package/engine/docs/GOLDEN_IMAGE_INTEGRATION.md +349 -0
  108. package/engine/docs/MANIFEST_DRIVEN_ARCHITECTURE.md +357 -0
  109. package/engine/docs/README.md +284 -0
  110. package/engine/entrypoint.star +97 -0
  111. package/engine/lifecycle/orchestrator.star +260 -0
  112. package/engine/paths.star +717 -0
  113. package/engine/schemas/manifest-schema.json +301 -0
  114. package/engine/schemas/service-schema.json +301 -0
  115. package/engine/scripts/README.md +89 -0
  116. package/engine/scripts/build-and-publish-lib.sh +205 -0
  117. package/engine/scripts/check-lib-publish.sh +85 -0
  118. package/engine/scripts/debug-container.sh +258 -0
  119. package/engine/scripts/generate-manifest.sh +197 -0
  120. package/engine/spec.master +702 -0
  121. package/engine/spec.master.example +341 -0
  122. package/engine/topologies/README.md +34 -0
  123. package/engine/topologies/platform/docker/AGENTS.md +59 -0
  124. package/engine/topologies/platform/docker/auth/auth.star +167 -0
  125. package/engine/topologies/platform/docker/build/golden_image.star +37 -0
  126. package/engine/topologies/platform/docker/build/golden_image_build.star +82 -0
  127. package/engine/topologies/platform/docker/build/golden_image_constants.star +93 -0
  128. package/engine/topologies/platform/docker/build/golden_image_dockerfile.star +291 -0
  129. package/engine/topologies/platform/docker/compose/compose.star +636 -0
  130. package/engine/topologies/platform/docker/compose/compose_helpers.star +52 -0
  131. package/engine/topologies/platform/docker/compose/traefik_standalone.star +53 -0
  132. package/engine/topologies/platform/docker/config/bunignore.star +142 -0
  133. package/engine/topologies/platform/docker/config/dockerignore.star +150 -0
  134. package/engine/topologies/platform/docker/constants.star +170 -0
  135. package/engine/topologies/platform/docker/dockerfile/dockerfile.star +54 -0
  136. package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +73 -0
  137. package/engine/topologies/platform/docker/index.star +27 -0
  138. package/engine/topologies/platform/docker/layers/bun_helpers.star +23 -0
  139. package/engine/topologies/platform/docker/layers/infisical/index.star +40 -0
  140. package/engine/topologies/platform/docker/layers/infisical/infisical_docker.star +262 -0
  141. package/engine/topologies/platform/docker/layers/l1_base_layers.star +87 -0
  142. package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +125 -0
  143. package/engine/topologies/platform/docker/layers/l3_builder_layers.star +209 -0
  144. package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +214 -0
  145. package/engine/topologies/platform/docker/layers/prisma/constants.star +135 -0
  146. package/engine/topologies/platform/docker/layers/prisma/db_readiness.star +96 -0
  147. package/engine/topologies/platform/docker/layers/prisma/filesystem_setup.star +109 -0
  148. package/engine/topologies/platform/docker/layers/prisma/migrate_script.star +98 -0
  149. package/engine/topologies/platform/docker/layers/prisma/prisma_build.star +126 -0
  150. package/engine/topologies/platform/docker/layers/prisma/prisma_runtime.star +161 -0
  151. package/engine/topologies/platform/docker/layers/prisma/secret_resolution.star +119 -0
  152. package/engine/topologies/platform/docker/networking/api_path_constants.star +230 -0
  153. package/engine/topologies/platform/docker/networking/sablier_container_cycle.star +27 -0
  154. package/engine/topologies/platform/docker/networking/traefik.star +232 -0
  155. package/engine/topologies/platform/docker/networking/traefik_constants.star +146 -0
  156. package/engine/topologies/platform/docker/networking/traefik_helpers.star +160 -0
  157. package/engine/topologies/platform/docker/secrets/infisical.star +135 -0
  158. package/engine/topologies/platform/net/proxy.star +4 -0
  159. package/engine/topologies/platform/registries/local.star +4 -0
  160. package/engine/topologies/platform/security/secrets.star +239 -0
  161. package/engine/topologies/platform/state/relational.star +4 -0
  162. package/engine/topologies/tilt/common/AGENTS.md +59 -0
  163. package/engine/topologies/tilt/common/utils.star +364 -0
  164. package/engine/topologies/tilt/common/utils_debug.star +69 -0
  165. package/engine/topologies/tilt/common/utils_deterministic.star +168 -0
  166. package/engine/topologies/tilt/common/utils_docker_networks.star +46 -0
  167. package/engine/topologies/tilt/common/utils_env.star +43 -0
  168. package/engine/topologies/tilt/common/utils_output.star +97 -0
  169. package/engine/topologies/tilt/config/AGENTS.md +68 -0
  170. package/engine/topologies/tilt/config/defaults.star +3 -0
  171. package/engine/topologies/tilt/config/feature_flags.star +10 -0
  172. package/engine/topologies/tilt/config/global.star +55 -0
  173. package/engine/topologies/tilt/config/profiles.star +382 -0
  174. package/engine/topologies/tilt/generators/agents_md.star +62 -0
  175. package/engine/topologies/tilt/generators/api_gateway.star +145 -0
  176. package/engine/topologies/tilt/generators/index.star +124 -0
  177. package/engine/topologies/tilt/generators/infisical/README.md +424 -0
  178. package/engine/topologies/tilt/generators/infisical/examples.star +312 -0
  179. package/engine/topologies/tilt/generators/infisical/index.star +57 -0
  180. package/engine/topologies/tilt/generators/infisical/machine_identity.star +420 -0
  181. package/engine/topologies/tilt/generators/infisical/organization.star +534 -0
  182. package/engine/topologies/tilt/generators/infisical/path_manager.star +476 -0
  183. package/engine/topologies/tilt/generators/infisical/secrets_generator.star +420 -0
  184. package/engine/topologies/tilt/generators/nginx_conf.star +143 -0
  185. package/engine/topologies/tilt/generators/npmrc.star +111 -0
  186. package/engine/topologies/tilt/generators/tsconfig.star +23 -0
  187. package/engine/topologies/tilt/generators/typescript/backend_library_tsconfig.star +71 -0
  188. package/engine/topologies/tilt/generators/typescript/backend_tsconfig.star +124 -0
  189. package/engine/topologies/tilt/generators/typescript/common.star +7 -0
  190. package/engine/topologies/tilt/generators/typescript/frontend_library_tsconfig.star +76 -0
  191. package/engine/topologies/tilt/generators/typescript/frontend_tsconfig.star +110 -0
  192. package/engine/topologies/tilt/generators/typescript/include.star +23 -0
  193. package/engine/topologies/tilt/generators/typescript/playwright_config.star +40 -0
  194. package/engine/topologies/tilt/generators/typescript/prisma_config.star +49 -0
  195. package/engine/topologies/tilt/generators/validators.star +853 -0
  196. package/engine/topologies/tilt/generators/vite/backend.star +78 -0
  197. package/engine/topologies/tilt/generators/vite/frontend.star +98 -0
  198. package/engine/topologies/tilt/generators/vite/generators.star +43 -0
  199. package/engine/topologies/tilt/generators/vite/helpers.star +244 -0
  200. package/engine/topologies/tilt/generators/vite/library.star +65 -0
  201. package/engine/topologies/tilt/generators/vite/sdk.star +73 -0
  202. package/engine/topologies/tilt/generators/vite/templates.star +737 -0
  203. package/engine/topologies/tilt/generators/vite_config.star +22 -0
  204. package/engine/topologies/tilt/manifest/AGENTS.md +61 -0
  205. package/engine/topologies/tilt/manifest/README.md +693 -0
  206. package/engine/topologies/tilt/manifest/__init__.star +218 -0
  207. package/engine/topologies/tilt/manifest/constants.star +252 -0
  208. package/engine/topologies/tilt/manifest/errors.star +266 -0
  209. package/engine/topologies/tilt/manifest/integration.star +339 -0
  210. package/engine/topologies/tilt/manifest/json_to_yaml.py +54 -0
  211. package/engine/topologies/tilt/manifest/loader.star +214 -0
  212. package/engine/topologies/tilt/manifest/mapper.star +227 -0
  213. package/engine/topologies/tilt/manifest/parser.star +400 -0
  214. package/engine/topologies/tilt/manifest/schema.star +462 -0
  215. package/engine/topologies/tilt/manifest/tests/test_integration.star +276 -0
  216. package/engine/topologies/tilt/manifest/tests/test_loader_parser.star +397 -0
  217. package/engine/topologies/tilt/manifest/tests/test_manifest.star +316 -0
  218. package/engine/topologies/tilt/manifest/tests/test_validator.star +470 -0
  219. package/engine/topologies/tilt/manifest/validator.star +717 -0
  220. package/engine/topologies/tilt/manifest/yaml_to_json.py +18 -0
  221. package/engine/topologies/tilt/resources/AGENTS.md +71 -0
  222. package/engine/topologies/tilt/resources/conditions.star +3 -0
  223. package/engine/topologies/tilt/resources/databases.star +244 -0
  224. package/engine/topologies/tilt/resources/declaration.star +3 -0
  225. package/engine/topologies/tilt/resources/deps.star +3 -0
  226. package/engine/topologies/tilt/resources/infra-loader.star +437 -0
  227. package/engine/topologies/tilt/resources/libs.star +30 -0
  228. package/engine/topologies/tilt/resources/libs_discovery.star +102 -0
  229. package/engine/topologies/tilt/resources/libs_paths.star +79 -0
  230. package/engine/topologies/tilt/resources/libs_resource_definition.star +151 -0
  231. package/engine/topologies/tilt/resources/libs_setup.star +164 -0
  232. package/engine/topologies/tilt/resources/libs_tsconfig.star +37 -0
  233. package/engine/topologies/tilt/resources/orchestrator/apply.star +77 -0
  234. package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +431 -0
  235. package/engine/topologies/tilt/resources/orchestrator/apply_manifest_orchestration.star +81 -0
  236. package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +148 -0
  237. package/engine/topologies/tilt/resources/orchestrator/apply_resource_validation.star +36 -0
  238. package/engine/topologies/tilt/resources/orchestrator/apply_runtime_flags.star +44 -0
  239. package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +164 -0
  240. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/AGENTS.md +75 -0
  241. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/index.star +21 -0
  242. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/resolver.star +134 -0
  243. package/engine/topologies/tilt/resources/orchestrator/generators/env.star +258 -0
  244. package/engine/topologies/tilt/resources/orchestrator/generators/frontend.star +169 -0
  245. package/engine/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +524 -0
  246. package/engine/topologies/tilt/resources/orchestrator/helpers.star +33 -0
  247. package/engine/topologies/tilt/resources/orchestrator.star +54 -0
  248. package/engine/topologies/tilt/resources/ordering.star +3 -0
  249. package/engine/topologies/tilt/resources/triggers.star +3 -0
  250. package/engine/topologies/tilt/resources/watchers.star +299 -0
  251. package/engine/where-things-live.star +717 -0
  252. package/ext/Tiltfile +66 -0
  253. package/ext/ide-components/README.md +219 -0
  254. package/ext/ide-components/code_executor/server.py +268 -0
  255. package/ext/ide-components/code_viewer/server.py +206 -0
  256. package/ext/ide-components/config_inspector/server.py +1050 -0
  257. package/ext/ide-components/file_browser/server.py +285 -0
  258. package/ext/ide-components/shared/config_service.py +469 -0
  259. package/ext/ide-components/shared/file_utils.py +298 -0
  260. package/ext/ide-components/shared/http_utils.py +232 -0
  261. package/ext/ide-components/shared/static/styles.css +1334 -0
  262. package/ext/ide-components/shared/syntax_highlighter.py +140 -0
  263. package/ext/ide-components/shared/template_engine.py +123 -0
  264. package/ext/ide-components/shared/templates/base.html +121 -0
  265. package/ext/ide-components/shared/test_config_service.py +326 -0
  266. package/ext/ide-components/shared/tilt_integration.py +158 -0
  267. package/ext/ui-enhancements/cron-status-server.sh +49 -0
  268. package/ext/ui-enhancements/cron-status-tracker.sh +146 -0
  269. package/ext/ui-enhancements/extension.yaml +36 -0
  270. package/ext/ui-enhancements/tiltfile.py +99 -0
  271. package/ext/ui-enhancements/ui/cron-jobs-tab.css +396 -0
  272. package/ext/ui-enhancements/ui/help-panel.css +279 -0
  273. package/ext/ui-enhancements/ui/icons.css +125 -0
  274. package/ext/ui-enhancements/ui/tooltips.css +114 -0
  275. package/package.json +13 -9
  276. package/specs/specs/TILT_SERVICE_DEFAULTS.star +205 -0
  277. package/specs/specs/TILT_TECH_STACK.star +159 -0
@@ -0,0 +1,258 @@
1
+ # =============================================================================
2
+ # 🧪 TILT SDK - ENV GENERATORS
3
+ # =============================================================================
4
+ # Path: .tilt/provisioner/orchestrator/generators/env.star
5
+ # Purpose: Environment file generation helpers
6
+ # =============================================================================
7
+
8
+ # === INLINED CONSTANTS for pure extension loading ===
9
+ BASE_PORT_FRONTEND = 3000
10
+ BASE_PORT_BACKEND = 4000
11
+ OUTPUT = struct(AUTOGENERATED_FOLDER = ".autogenerated")
12
+ # === END INLINED CONSTANTS ===
13
+
14
+
15
+ load("../../../../platform/docker/auth/auth.star", "AuthConfig")
16
+ load("../../../../platform/docker/networking/traefik_helpers.star", "get_api_path")
17
+ load("../../../../platform/docker/constants.star", "PlatformDockerConstants")
18
+
19
+
20
+
21
+ def _normalize_dependency_path(dependency):
22
+ dep = str(dependency).strip()
23
+ if not dep:
24
+ return ''
25
+
26
+ if dep.endswith('-management-backend'):
27
+ return dep.replace('-management-backend', '')
28
+
29
+ if dep.endswith('-backend'):
30
+ return dep[:-8]
31
+
32
+ if dep.endswith('-frontend'):
33
+ return dep[:-9]
34
+
35
+ return dep
36
+
37
+
38
+ def _dependency_env_key(dependency):
39
+ dep = str(dependency).upper()
40
+ key = ''
41
+ for i in range(len(dep)):
42
+ char = dep[i]
43
+ if (char >= 'A' and char <= 'Z') or (char >= '0' and char <= '9'):
44
+ key += char
45
+ else:
46
+ key += '_'
47
+ while '__' in key:
48
+ key = key.replace('__', '_')
49
+ return key.strip('_')
50
+
51
+
52
+ def _build_dependency_env_lines(manifest):
53
+ dependencies = manifest.get('dependencies', manifest.get('dependsOn', []))
54
+ if not dependencies:
55
+ return ''
56
+
57
+ # Deduplicate while preserving first-seen order.
58
+ seen = {}
59
+ ordered = []
60
+ for dep in dependencies:
61
+ dep_path = _normalize_dependency_path(dep)
62
+ if dep_path and not seen.get(dep_path, False):
63
+ seen[dep_path] = True
64
+ ordered.append(dep_path)
65
+
66
+ if not ordered:
67
+ return ''
68
+
69
+ lines = '\n# Dependency API URLs (using standardized /api/v1 paths)\n'
70
+ for dep_path in ordered:
71
+ dep_key = _dependency_env_key(dep_path)
72
+ # Use standardized API path from traefik helpers
73
+ dep_api_path = get_api_path(dep_path)
74
+ lines += 'VITE_{dep_key}_API_URL=http://{local_domain}{dep_api_path}\n'.format(
75
+ dep_key=dep_key,
76
+ dep_api_path=dep_api_path,
77
+ local_domain=PlatformDockerConstants.LOCAL_DOMAIN,
78
+ )
79
+ return lines
80
+
81
+
82
+ def _generate_params_env(manifest, backend_manifest=None, write_fn=None):
83
+ """Generate params (non-secret) environment variables from manifest.
84
+
85
+ This generates config like BASE_URL, PORT, etc. - NEVER secrets.
86
+ Secrets are handled separately by _generate_secrets_env().
87
+
88
+ Args:
89
+ manifest: Service manifest dict with configuration
90
+ backend_manifest: Optional backend manifest for frontend services
91
+ write_fn: Optional write function for file output (callable)
92
+
93
+ Returns:
94
+ str: Generated environment file content
95
+ """
96
+ resource_path = manifest.get('_resource_path', '')
97
+ app_type = manifest.get('appType', 'backend')
98
+ stack = manifest.get('stack', 'app')
99
+ port = manifest.get('port', BASE_PORT_FRONTEND)
100
+ # Use standardized API path from traefik helpers
101
+ api_path = get_api_path(stack)
102
+ api_url = 'http://' + PlatformDockerConstants.LOCAL_DOMAIN + api_path
103
+ target_filename = '/' + OUTPUT.AUTOGENERATED_FOLDER + '/.env.backend.autogenerated'
104
+
105
+ # Auth configuration - support both identity service and local JWT modes
106
+ # Use centralized auth utilities for consistency
107
+ # Extract auth config from manifest to pass as a separate dict
108
+ # Auto-detect identity-service mode if 'identity' is in dependsOn
109
+ internal_deps = manifest.get('dependsOn', []) if manifest else []
110
+ has_identity_dep = 'identity' in internal_deps
111
+
112
+ # If manifest has authMode, use it; otherwise auto-detect based on identity dependency
113
+ manifest_auth_mode = manifest.get('authMode') if manifest else None
114
+ if manifest_auth_mode:
115
+ auth_mode = manifest_auth_mode
116
+ elif has_identity_dep:
117
+ auth_mode = 'identity-service'
118
+ else:
119
+ auth_mode = None
120
+
121
+ auth_config = {
122
+ 'authMode': auth_mode,
123
+ 'jwtSecret': manifest.get('jwtSecret') if manifest else None,
124
+ 'identityServiceUrl': manifest.get('identityServiceUrl') if manifest else None,
125
+ }
126
+
127
+ # If we auto-detected identity-service mode but no URL is set, use default
128
+ if auth_mode == 'identity-service' and not auth_config['identityServiceUrl']:
129
+ auth_config['identityServiceUrl'] = AuthConfig.get_identity_resource_url(None)
130
+
131
+ if app_type == 'frontend':
132
+ backend_port = backend_manifest.get('port', BASE_PORT_BACKEND) if backend_manifest else BASE_PORT_BACKEND
133
+ backend_name = manifest.get('backendName', stack + '-backend')
134
+ target_filename = '/' + OUTPUT.AUTOGENERATED_FOLDER + '/.env.frontend.autogenerated'
135
+
136
+ # Get basePath from manifest or default to /{stack}
137
+ base_path = manifest.get('basePath', '/' + stack)
138
+ public_url = 'http://' + PlatformDockerConstants.LOCAL_DOMAIN + base_path
139
+
140
+ content = """# Generated by Tilt SDK - DO NOT EDIT
141
+ # Frontend Environment Variables
142
+ VITE_API_PORT={backend_port}
143
+ VITE_API_URL={api_url}
144
+ VITE_BACKEND_NAME={backend_name}
145
+ PUBLIC_URL={public_url}
146
+ """.format(
147
+ backend_port=backend_port,
148
+ api_url=api_url,
149
+ backend_name=backend_name,
150
+ public_url=public_url,
151
+ )
152
+ content += _build_dependency_env_lines(manifest)
153
+ else:
154
+ db_name = manifest.get('databaseName', PlatformDockerConstants.get_db_name(stack))
155
+
156
+ content = """# Generated by Tilt SDK - DO NOT EDIT
157
+ # Backend Environment Variables
158
+ PORT={port}
159
+ DATABASE_NAME={db_name}
160
+ API_URL={api_url}
161
+ """.format(port=port, db_name=db_name, api_url=api_url)
162
+
163
+ if manifest.get('usePrisma', True):
164
+ content += """
165
+ # Prisma
166
+ DATABASE_URL=""" + PlatformDockerConstants.get_database_url_for_env(db_name) + """
167
+ """
168
+
169
+ # Add authentication configuration using centralized auth utilities
170
+ content += AuthConfig.generate_env_file_auth_section(auth_config)
171
+
172
+ # Add params (non-secret config variables)
173
+ # NOTE: Secrets are NEVER added here - they come from Infisical only
174
+ params = manifest.get('params', manifest.get('envVars', {})) # Fallback to envVars during migration
175
+ if params:
176
+ content += '\n# Params (non-secret config)\n'
177
+ # Sort keys for deterministic output to avoid unnecessary file rewrites.
178
+ for key in sorted(params.keys()):
179
+ value = params.get(key)
180
+ content += key + '=' + str(value) + '\n'
181
+
182
+ if write_fn and resource_path:
183
+ write_fn(resource_path + target_filename, content)
184
+
185
+ return content
186
+
187
+
188
+ def _generate_secrets_env(manifest, write_fn=None):
189
+ """Generate secrets environment variables from Infisical.
190
+
191
+ This function returns a dict of secrets that will be resolved
192
+ from Infisical at runtime. The actual values are NOT embedded here.
193
+
194
+ CRITICAL: This function NEVER reads secrets from files - only from Infisical.
195
+
196
+ Args:
197
+ manifest: Service manifest dict with secrets configuration
198
+ write_fn: Optional write function for file output (callable)
199
+
200
+ Returns:
201
+ dict: Map of secret names to Infisical placeholder values
202
+ """
203
+ resource_path = manifest.get('_resource_path', '')
204
+ secrets_config = manifest.get('secrets', {})
205
+
206
+ if not secrets_config:
207
+ return {}
208
+
209
+ required = secrets_config.get('required', [])
210
+ optional = secrets_config.get('optional', [])
211
+
212
+ # Build a placeholder map - actual values come from Infisical at runtime
213
+ secrets_env = {}
214
+
215
+ for secret_name in required:
216
+ # Placeholder - value resolved by Infisical
217
+ secrets_env[secret_name] = "${INFISICAL_SECRET:" + secret_name + "}"
218
+
219
+ for secret_name in optional:
220
+ # Placeholder - value resolved by Infisical
221
+ secrets_env[secret_name] = "${INFISICAL_SECRET:" + secret_name + "}"
222
+
223
+ return secrets_env
224
+
225
+
226
+ def _get_all_env(manifest, backend_manifest=None, write_fn=None):
227
+ """Generate complete environment (params + secrets placeholder).
228
+
229
+ Returns a dict with both params and secrets keys.
230
+ Actual secret values resolved by Infisical at container runtime.
231
+
232
+ Args:
233
+ manifest: Service manifest dict with configuration
234
+ backend_manifest: Optional backend manifest for frontend services
235
+ write_fn: Optional write function for file output (callable)
236
+
237
+ Returns:
238
+ dict: Contains 'params' (str) and 'secrets' (dict) keys
239
+ """
240
+ # Phase 1: Generate params (non-secret config)
241
+ params_content = _generate_params_env(manifest, backend_manifest, write_fn)
242
+
243
+ # Phase 2: Get secrets configuration (resolved by Infisical)
244
+ secrets_env = _generate_secrets_env(manifest, write_fn)
245
+
246
+ return {
247
+ 'params': params_content,
248
+ 'secrets': secrets_env,
249
+ }
250
+
251
+
252
+ EnvGenerators = struct(
253
+ generate_params_env = _generate_params_env,
254
+ generate_secrets_env = _generate_secrets_env,
255
+ get_all_env = _get_all_env,
256
+ # Legacy alias for backward compatibility during migration
257
+ generate_env_file = _generate_params_env,
258
+ )
@@ -0,0 +1,169 @@
1
+ # =============================================================================
2
+ # 🎨 TILT SDK - FRONTEND API CLIENT GENERATORS
3
+ # =============================================================================
4
+ # Purpose: Generate api-client.ts, env.ts, and index.ts for frontend services
5
+ # These files import from @{npm_scope}/platform-api-client package
6
+ # =============================================================================
7
+
8
+ # Load npm scope from project.json
9
+ # Use TDK_PROJECT_ROOT env var set by Tilt, fallback to current directory
10
+ def _load_npm_scope():
11
+ project_root = os.environ.get('TDK_PROJECT_ROOT', '')
12
+ project_json_path = '.tdk/project.json'
13
+ if project_root:
14
+ project_json_path = project_root + '/' + project_json_path
15
+
16
+ if os.path.exists(project_json_path):
17
+ _project_json = read_json(project_json_path)
18
+ return _project_json.get('project', {}).get('name', 'tdk-project')
19
+ return 'tdk-project'
20
+
21
+ _NPM_SCOPE = _load_npm_scope()
22
+
23
+ load("../../../../platform/docker/networking/traefik_helpers.star", "get_api_path")
24
+ load("../../../../platform/docker/constants.star", "PlatformDockerConstants")
25
+ load("./dependencies/resolver.star", "resolve_backend_api_path")
26
+
27
+ def generate_frontend_api_client(manifest, write_fn=None):
28
+ """Generate .autogenerated/api-client.ts for a frontend resource.
29
+
30
+ Args:
31
+ manifest: Resource manifest with stack field
32
+ write_fn: Optional function to write file (for Tilt)
33
+
34
+ Returns:
35
+ str: Generated file content
36
+ """
37
+ stack = manifest.get("stack", "app")
38
+
39
+ # Auto-resolve apiPath from backend manifest if backendName is specified
40
+ backend_api_path = resolve_backend_api_path(manifest)
41
+ if backend_api_path:
42
+ api_path = backend_api_path
43
+ else:
44
+ api_path = get_api_path(stack, manifest)
45
+
46
+ content = '''// 🛑 GENERATED BY TILT SDK - DO NOT EDIT
47
+ // Source: engine/topologies/tilt/resources/orchestrator/generators/frontend.star
48
+ // Purpose: Pre-configured API client for {stack} resource
49
+
50
+ import {{ createApiClient }} from '@" + _NPM_SCOPE + "'/platform-api-client';
51
+
52
+ /**
53
+ * Pre-configured API client for {stack} resource
54
+ *
55
+ * Usage:
56
+ * ```typescript
57
+ * import {{ apiClient }} from '../.autogenerated/api-client';
58
+ * const data = await apiClient.get('/');
59
+ * ```
60
+ */
61
+ export const apiClient = createApiClient({{
62
+ baseURL: import.meta.env.VITE_API_URL || 'http://{local_domain}{api_path}',
63
+ withAuth: true,
64
+ }});
65
+
66
+ export default apiClient;
67
+ '''.format(
68
+ stack=stack,
69
+ api_path=api_path,
70
+ local_domain=PlatformDockerConstants.API_LOCAL_DOMAIN,
71
+ )
72
+
73
+ if write_fn:
74
+ resource_path = manifest.get('_resource_path', '')
75
+ write_fn(resource_path + '/.autogenerated/api-client.ts', content)
76
+
77
+ return content
78
+
79
+
80
+ def generate_frontend_env_ts(manifest, write_fn=None):
81
+ """Generate .autogenerated/env.ts for a frontend resource.
82
+
83
+ Args:
84
+ manifest: Resource manifest with stack field
85
+ write_fn: Optional function to write file (for Tilt)
86
+
87
+ Returns:
88
+ str: Generated file content
89
+ """
90
+ stack = manifest.get("stack", "app")
91
+
92
+ # Auto-resolve apiPath from backend manifest if backendName is specified
93
+ backend_api_path = resolve_backend_api_path(manifest)
94
+ if backend_api_path:
95
+ api_path = backend_api_path
96
+ else:
97
+ api_path = get_api_path(stack, manifest)
98
+
99
+ content = '''// 🛑 GENERATED BY TILT SDK - DO NOT EDIT
100
+ // Source: .tilt/topologies/tilt/resources/orchestrator/generators/frontend.star
101
+ // Purpose: Environment constants for {stack} resource
102
+
103
+ /**
104
+ * Base API URL for {stack} resource
105
+ * Uses VITE_API_URL env var with fallback to local dev URL
106
+ */
107
+ export const API_URL = import.meta.env.VITE_API_URL || 'http://{local_domain}{api_path}';
108
+ '''.format(
109
+ stack=stack,
110
+ api_path=api_path,
111
+ local_domain=PlatformDockerConstants.API_LOCAL_DOMAIN,
112
+ )
113
+
114
+ if write_fn:
115
+ resource_path = manifest.get('_resource_path', '')
116
+ write_fn(resource_path + '/.autogenerated/env.ts', content)
117
+
118
+ return content
119
+
120
+
121
+ def generate_frontend_api_index(manifest, write_fn=None):
122
+ """Generate .autogenerated/api-index.ts for clean imports.
123
+
124
+ Args:
125
+ manifest: Service manifest
126
+ write_fn: Optional function to write file (for Tilt)
127
+
128
+ Returns:
129
+ str: Generated file content
130
+ """
131
+ content = '''// 🛑 GENERATED BY TILT SDK - DO NOT EDIT
132
+ // Source: .tilt/topologies/tilt/resources/orchestrator/generators/frontend.star
133
+ // Purpose: Clean barrel exports for API client
134
+
135
+ export { apiClient } from './api-client';
136
+ export { API_URL } from './env';
137
+ '''
138
+
139
+ if write_fn:
140
+ resource_path = manifest.get('_resource_path', '')
141
+ write_fn(resource_path + '/.autogenerated/api-index.ts', content)
142
+
143
+ return content
144
+
145
+
146
+ def generate_all_frontend_api_files(manifest, write_fn=None):
147
+ """Generate all frontend API files for a service.
148
+
149
+ Args:
150
+ manifest: Service manifest
151
+ write_fn: Function to write files
152
+
153
+ Returns:
154
+ dict: Generated content for each file
155
+ """
156
+ return {
157
+ 'api-client.ts': generate_frontend_api_client(manifest, write_fn),
158
+ 'env.ts': generate_frontend_env_ts(manifest, write_fn),
159
+ 'api-index.ts': generate_frontend_api_index(manifest, write_fn),
160
+ }
161
+
162
+
163
+ # Export struct for easy importing
164
+ FrontendGenerators = struct(
165
+ generate_api_client = generate_frontend_api_client,
166
+ generate_env_ts = generate_frontend_env_ts,
167
+ generate_api_index = generate_frontend_api_index,
168
+ generate_all = generate_all_frontend_api_files,
169
+ )