everything-dev 1.53.1 → 2.0.0-rc.0

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 (713) hide show
  1. package/README.md +2 -11
  2. package/dist/_virtual/_rolldown/runtime.cjs +17 -2
  3. package/dist/_virtual/_rolldown/runtime.mjs +36 -0
  4. package/dist/api/auth-middleware.cjs +161 -0
  5. package/dist/api/auth-middleware.cjs.map +1 -0
  6. package/dist/api/auth-middleware.d.cts +69 -0
  7. package/dist/api/auth-middleware.d.mts +69 -0
  8. package/dist/api/auth-middleware.mjs +160 -0
  9. package/dist/api/auth-middleware.mjs.map +1 -0
  10. package/dist/api-contract.cjs +250 -62
  11. package/dist/api-contract.cjs.map +1 -1
  12. package/dist/api-contract.mjs +246 -65
  13. package/dist/api-contract.mjs.map +1 -1
  14. package/dist/app.cjs +99 -26
  15. package/dist/app.cjs.map +1 -1
  16. package/dist/app.d.cts +3 -0
  17. package/dist/app.d.mts +3 -0
  18. package/dist/app.mjs +100 -27
  19. package/dist/app.mjs.map +1 -1
  20. package/dist/auth-login.cjs +163 -0
  21. package/dist/auth-login.cjs.map +1 -0
  22. package/dist/auth-login.mjs +162 -0
  23. package/dist/auth-login.mjs.map +1 -0
  24. package/dist/auth-session.cjs +64 -0
  25. package/dist/auth-session.cjs.map +1 -0
  26. package/dist/auth-session.mjs +58 -0
  27. package/dist/auth-session.mjs.map +1 -0
  28. package/dist/auth-types-gen.cjs +0 -1
  29. package/dist/auth-types-gen.cjs.map +1 -1
  30. package/dist/build.cjs +37 -173
  31. package/dist/build.cjs.map +1 -1
  32. package/dist/build.mjs +37 -171
  33. package/dist/build.mjs.map +1 -1
  34. package/dist/bundle-cache.cjs +74 -0
  35. package/dist/bundle-cache.cjs.map +1 -0
  36. package/dist/bundle-cache.d.cts +27 -0
  37. package/dist/bundle-cache.d.mts +27 -0
  38. package/dist/bundle-cache.mjs +68 -0
  39. package/dist/bundle-cache.mjs.map +1 -0
  40. package/dist/bundle-fs-resolve.cjs +209 -0
  41. package/dist/bundle-fs-resolve.cjs.map +1 -0
  42. package/dist/bundle-fs-resolve.d.cts +76 -0
  43. package/dist/bundle-fs-resolve.d.mts +76 -0
  44. package/dist/bundle-fs-resolve.mjs +202 -0
  45. package/dist/bundle-fs-resolve.mjs.map +1 -0
  46. package/dist/cdn-deploy.cjs +126 -0
  47. package/dist/cdn-deploy.cjs.map +1 -0
  48. package/dist/cdn-deploy.mjs +124 -0
  49. package/dist/cdn-deploy.mjs.map +1 -0
  50. package/dist/cli/db-doctor.cjs +19 -19
  51. package/dist/cli/db-doctor.cjs.map +1 -1
  52. package/dist/cli/db-doctor.mjs +18 -18
  53. package/dist/cli/db-doctor.mjs.map +1 -1
  54. package/dist/cli/db-repair.cjs +9 -32
  55. package/dist/cli/db-repair.cjs.map +1 -1
  56. package/dist/cli/db-repair.mjs +9 -32
  57. package/dist/cli/db-repair.mjs.map +1 -1
  58. package/dist/cli/framework-version.cjs +7 -3
  59. package/dist/cli/framework-version.cjs.map +1 -1
  60. package/dist/cli/framework-version.mjs +7 -3
  61. package/dist/cli/framework-version.mjs.map +1 -1
  62. package/dist/cli/infra.cjs +159 -251
  63. package/dist/cli/infra.cjs.map +1 -1
  64. package/dist/cli/infra.mjs +154 -242
  65. package/dist/cli/infra.mjs.map +1 -1
  66. package/dist/cli/init.cjs +624 -196
  67. package/dist/cli/init.cjs.map +1 -1
  68. package/dist/cli/init.d.cts +61 -8
  69. package/dist/cli/init.d.mts +61 -8
  70. package/dist/cli/init.mjs +613 -194
  71. package/dist/cli/init.mjs.map +1 -1
  72. package/dist/cli/parse.cjs +8 -7
  73. package/dist/cli/parse.cjs.map +1 -1
  74. package/dist/cli/parse.mjs +9 -7
  75. package/dist/cli/parse.mjs.map +1 -1
  76. package/dist/cli/prompts.cjs +14 -1
  77. package/dist/cli/prompts.cjs.map +1 -1
  78. package/dist/cli/prompts.mjs +14 -1
  79. package/dist/cli/prompts.mjs.map +1 -1
  80. package/dist/cli/prune.cjs +220 -0
  81. package/dist/cli/prune.cjs.map +1 -0
  82. package/dist/cli/prune.mjs +220 -0
  83. package/dist/cli/prune.mjs.map +1 -0
  84. package/dist/cli/snapshot.cjs +2 -1
  85. package/dist/cli/snapshot.cjs.map +1 -1
  86. package/dist/cli/snapshot.mjs +2 -1
  87. package/dist/cli/snapshot.mjs.map +1 -1
  88. package/dist/cli/status.cjs +5 -4
  89. package/dist/cli/status.cjs.map +1 -1
  90. package/dist/cli/status.mjs +6 -5
  91. package/dist/cli/status.mjs.map +1 -1
  92. package/dist/cli/sync.cjs +156 -58
  93. package/dist/cli/sync.cjs.map +1 -1
  94. package/dist/cli/sync.mjs +158 -63
  95. package/dist/cli/sync.mjs.map +1 -1
  96. package/dist/cli/timing.cjs +0 -1
  97. package/dist/cli/timing.cjs.map +1 -1
  98. package/dist/cli/upgrade.cjs +95 -69
  99. package/dist/cli/upgrade.cjs.map +1 -1
  100. package/dist/cli/upgrade.mjs +97 -72
  101. package/dist/cli/upgrade.mjs.map +1 -1
  102. package/dist/cli/utils/helpers.cjs.map +1 -1
  103. package/dist/cli.cjs +320 -72
  104. package/dist/cli.cjs.map +1 -1
  105. package/dist/cli.mjs +316 -68
  106. package/dist/cli.mjs.map +1 -1
  107. package/dist/code-artifacts.cjs +76 -8
  108. package/dist/code-artifacts.cjs.map +1 -1
  109. package/dist/code-artifacts.mjs +76 -10
  110. package/dist/code-artifacts.mjs.map +1 -1
  111. package/dist/commands/build.cjs +65 -0
  112. package/dist/commands/build.cjs.map +1 -0
  113. package/dist/commands/build.mjs +65 -0
  114. package/dist/commands/build.mjs.map +1 -0
  115. package/dist/commands/config.cjs +77 -0
  116. package/dist/commands/config.cjs.map +1 -0
  117. package/dist/commands/config.d.cts +8 -0
  118. package/dist/commands/config.d.mts +8 -0
  119. package/dist/commands/config.mjs +74 -0
  120. package/dist/commands/config.mjs.map +1 -0
  121. package/dist/commands/db.cjs +107 -0
  122. package/dist/commands/db.cjs.map +1 -0
  123. package/dist/commands/db.mjs +107 -0
  124. package/dist/commands/db.mjs.map +1 -0
  125. package/dist/commands/deploy.cjs +336 -0
  126. package/dist/commands/deploy.cjs.map +1 -0
  127. package/dist/commands/deploy.mjs +334 -0
  128. package/dist/commands/deploy.mjs.map +1 -0
  129. package/dist/commands/dev.cjs +75 -0
  130. package/dist/commands/dev.cjs.map +1 -0
  131. package/dist/commands/dev.mjs +73 -0
  132. package/dist/commands/dev.mjs.map +1 -0
  133. package/dist/commands/init.cjs +234 -0
  134. package/dist/commands/init.cjs.map +1 -0
  135. package/dist/commands/init.mjs +231 -0
  136. package/dist/commands/init.mjs.map +1 -0
  137. package/dist/commands/keys.cjs +255 -0
  138. package/dist/commands/keys.cjs.map +1 -0
  139. package/dist/commands/keys.mjs +253 -0
  140. package/dist/commands/keys.mjs.map +1 -0
  141. package/dist/commands/ops.cjs +199 -0
  142. package/dist/commands/ops.cjs.map +1 -0
  143. package/dist/commands/ops.mjs +197 -0
  144. package/dist/commands/ops.mjs.map +1 -0
  145. package/dist/commands/plugins.cjs +211 -0
  146. package/dist/commands/plugins.cjs.map +1 -0
  147. package/dist/commands/plugins.mjs +211 -0
  148. package/dist/commands/plugins.mjs.map +1 -0
  149. package/dist/commands/shared.cjs +8 -0
  150. package/dist/commands/shared.cjs.map +1 -0
  151. package/dist/commands/shared.d.cts +6 -0
  152. package/dist/commands/shared.d.mts +6 -0
  153. package/dist/commands/shared.mjs +8 -0
  154. package/dist/commands/shared.mjs.map +1 -0
  155. package/dist/commands/upgrade.cjs +325 -0
  156. package/dist/commands/upgrade.cjs.map +1 -0
  157. package/dist/commands/upgrade.mjs +323 -0
  158. package/dist/commands/upgrade.mjs.map +1 -0
  159. package/dist/components/dev-render.cjs +340 -0
  160. package/dist/components/dev-render.cjs.map +1 -0
  161. package/dist/components/dev-render.mjs +332 -0
  162. package/dist/components/dev-render.mjs.map +1 -0
  163. package/dist/config.cjs +460 -221
  164. package/dist/config.cjs.map +1 -1
  165. package/dist/config.d.cts +491 -48
  166. package/dist/config.d.mts +491 -48
  167. package/dist/config.mjs +439 -212
  168. package/dist/config.mjs.map +1 -1
  169. package/dist/contract.cjs +327 -50
  170. package/dist/contract.cjs.map +1 -1
  171. package/dist/contract.d.cts +1951 -1062
  172. package/dist/contract.d.mts +1951 -1062
  173. package/dist/contract.meta.cjs +107 -12
  174. package/dist/contract.meta.cjs.map +1 -1
  175. package/dist/contract.meta.d.cts +166 -8
  176. package/dist/contract.meta.d.mts +166 -8
  177. package/dist/contract.meta.mjs +107 -11
  178. package/dist/contract.meta.mjs.map +1 -1
  179. package/dist/contract.mjs +580 -327
  180. package/dist/contract.mjs.map +1 -1
  181. package/dist/dag.cjs +5 -3
  182. package/dist/dag.cjs.map +1 -1
  183. package/dist/dag.mjs +6 -3
  184. package/dist/dag.mjs.map +1 -1
  185. package/dist/db/binding.cjs +80 -0
  186. package/dist/db/binding.cjs.map +1 -0
  187. package/dist/db/binding.d.cts +39 -0
  188. package/dist/db/binding.d.mts +39 -0
  189. package/dist/db/binding.mjs +78 -0
  190. package/dist/db/binding.mjs.map +1 -0
  191. package/dist/db/bindings.cjs +78 -0
  192. package/dist/db/bindings.cjs.map +1 -0
  193. package/dist/db/bindings.d.cts +34 -0
  194. package/dist/db/bindings.d.mts +34 -0
  195. package/dist/db/bindings.mjs +76 -0
  196. package/dist/db/bindings.mjs.map +1 -0
  197. package/dist/db/core.cjs +204 -0
  198. package/dist/db/core.cjs.map +1 -0
  199. package/dist/db/core.d.cts +69 -0
  200. package/dist/db/core.d.mts +69 -0
  201. package/dist/db/core.mjs +192 -0
  202. package/dist/db/core.mjs.map +1 -0
  203. package/dist/db/driver.cjs +167 -0
  204. package/dist/db/driver.cjs.map +1 -0
  205. package/dist/db/driver.d.cts +50 -0
  206. package/dist/db/driver.d.mts +50 -0
  207. package/dist/db/driver.mjs +165 -0
  208. package/dist/db/driver.mjs.map +1 -0
  209. package/dist/db/drizzle-kit.cjs +177 -0
  210. package/dist/db/drizzle-kit.cjs.map +1 -0
  211. package/dist/db/drizzle-kit.d.cts +25 -0
  212. package/dist/db/drizzle-kit.d.mts +25 -0
  213. package/dist/db/drizzle-kit.mjs +175 -0
  214. package/dist/db/drizzle-kit.mjs.map +1 -0
  215. package/dist/db/errors.cjs +27 -0
  216. package/dist/db/errors.cjs.map +1 -0
  217. package/dist/db/errors.d.cts +16 -0
  218. package/dist/db/errors.d.mts +16 -0
  219. package/dist/db/errors.mjs +26 -0
  220. package/dist/db/errors.mjs.map +1 -0
  221. package/dist/db/identity.cjs +55 -0
  222. package/dist/db/identity.cjs.map +1 -0
  223. package/dist/db/identity.d.cts +40 -0
  224. package/dist/db/identity.d.mts +40 -0
  225. package/dist/db/identity.mjs +53 -0
  226. package/dist/db/identity.mjs.map +1 -0
  227. package/dist/db/index.cjs +43 -0
  228. package/dist/db/index.d.cts +9 -0
  229. package/dist/db/index.d.mts +9 -0
  230. package/dist/db/index.mjs +10 -0
  231. package/dist/db/run-migrations.cjs +343 -0
  232. package/dist/db/run-migrations.cjs.map +1 -0
  233. package/dist/db/run-migrations.d.cts +87 -0
  234. package/dist/db/run-migrations.d.mts +87 -0
  235. package/dist/db/run-migrations.mjs +341 -0
  236. package/dist/db/run-migrations.mjs.map +1 -0
  237. package/dist/delegate-signer.cjs +85 -0
  238. package/dist/delegate-signer.cjs.map +1 -0
  239. package/dist/delegate-signer.mjs +84 -0
  240. package/dist/delegate-signer.mjs.map +1 -0
  241. package/dist/deploy-diff.cjs +119 -0
  242. package/dist/deploy-diff.cjs.map +1 -0
  243. package/dist/deploy-diff.mjs +109 -0
  244. package/dist/deploy-diff.mjs.map +1 -0
  245. package/dist/descriptor/constructors.cjs +49 -0
  246. package/dist/descriptor/constructors.cjs.map +1 -0
  247. package/dist/descriptor/constructors.d.cts +27 -0
  248. package/dist/descriptor/constructors.d.mts +27 -0
  249. package/dist/descriptor/constructors.mjs +45 -0
  250. package/dist/descriptor/constructors.mjs.map +1 -0
  251. package/dist/descriptor/index.cjs +24 -0
  252. package/dist/descriptor/index.d.cts +5 -0
  253. package/dist/descriptor/index.d.mts +5 -0
  254. package/dist/descriptor/index.mjs +6 -0
  255. package/dist/descriptor/resolve.cjs +258 -0
  256. package/dist/descriptor/resolve.cjs.map +1 -0
  257. package/dist/descriptor/resolve.d.cts +50 -0
  258. package/dist/descriptor/resolve.d.mts +50 -0
  259. package/dist/descriptor/resolve.mjs +252 -0
  260. package/dist/descriptor/resolve.mjs.map +1 -0
  261. package/dist/descriptor/schema.cjs +109 -0
  262. package/dist/descriptor/schema.cjs.map +1 -0
  263. package/dist/descriptor/schema.d.cts +217 -0
  264. package/dist/descriptor/schema.d.mts +217 -0
  265. package/dist/descriptor/schema.mjs +102 -0
  266. package/dist/descriptor/schema.mjs.map +1 -0
  267. package/dist/descriptor/serialize.cjs +45 -0
  268. package/dist/descriptor/serialize.cjs.map +1 -0
  269. package/dist/descriptor/serialize.d.cts +7 -0
  270. package/dist/descriptor/serialize.d.mts +7 -0
  271. package/dist/descriptor/serialize.mjs +45 -0
  272. package/dist/descriptor/serialize.mjs.map +1 -0
  273. package/dist/dev-log-pipeline.cjs +273 -0
  274. package/dist/dev-log-pipeline.cjs.map +1 -0
  275. package/dist/dev-log-pipeline.mjs +267 -0
  276. package/dist/dev-log-pipeline.mjs.map +1 -0
  277. package/dist/dev-logs.cjs +39 -8
  278. package/dist/dev-logs.cjs.map +1 -1
  279. package/dist/dev-logs.mjs +37 -9
  280. package/dist/dev-logs.mjs.map +1 -1
  281. package/dist/dev-program.cjs +405 -0
  282. package/dist/dev-program.cjs.map +1 -0
  283. package/dist/dev-program.d.cts +10 -0
  284. package/dist/dev-program.d.mts +10 -0
  285. package/dist/dev-program.mjs +395 -0
  286. package/dist/dev-program.mjs.map +1 -0
  287. package/dist/dev-session-data.d.cts +27 -0
  288. package/dist/dev-session-data.d.mts +27 -0
  289. package/dist/dev-session.cjs +178 -105
  290. package/dist/dev-session.cjs.map +1 -1
  291. package/dist/dev-session.mjs +180 -105
  292. package/dist/dev-session.mjs.map +1 -1
  293. package/dist/env/process-env.cjs +16 -0
  294. package/dist/env/process-env.cjs.map +1 -0
  295. package/dist/env/process-env.mjs +13 -0
  296. package/dist/env/process-env.mjs.map +1 -0
  297. package/dist/env/project-env.cjs +144 -0
  298. package/dist/env/project-env.cjs.map +1 -0
  299. package/dist/env/project-env.d.cts +1 -0
  300. package/dist/env/project-env.d.mts +1 -0
  301. package/dist/env/project-env.mjs +132 -0
  302. package/dist/env/project-env.mjs.map +1 -0
  303. package/dist/fastkv.cjs +59 -12
  304. package/dist/fastkv.cjs.map +1 -1
  305. package/dist/fastkv.d.cts +42 -6
  306. package/dist/fastkv.d.mts +42 -6
  307. package/dist/fastkv.mjs +58 -13
  308. package/dist/fastkv.mjs.map +1 -1
  309. package/dist/fingerprint.cjs +57 -0
  310. package/dist/fingerprint.cjs.map +1 -0
  311. package/dist/fingerprint.d.cts +14 -0
  312. package/dist/fingerprint.d.mts +14 -0
  313. package/dist/fingerprint.mjs +55 -0
  314. package/dist/fingerprint.mjs.map +1 -0
  315. package/dist/http-client.cjs +17 -17
  316. package/dist/http-client.cjs.map +1 -1
  317. package/dist/http-client.mjs +17 -17
  318. package/dist/http-client.mjs.map +1 -1
  319. package/dist/image-deploy.cjs +186 -0
  320. package/dist/image-deploy.cjs.map +1 -0
  321. package/dist/image-deploy.mjs +182 -0
  322. package/dist/image-deploy.mjs.map +1 -0
  323. package/dist/index.cjs +66 -18
  324. package/dist/index.d.cts +8 -7
  325. package/dist/index.d.mts +8 -7
  326. package/dist/index.mjs +6 -5
  327. package/dist/infra/docker.cjs +77 -0
  328. package/dist/infra/docker.cjs.map +1 -0
  329. package/dist/infra/docker.d.cts +10 -0
  330. package/dist/infra/docker.d.mts +10 -0
  331. package/dist/infra/docker.mjs +69 -0
  332. package/dist/infra/docker.mjs.map +1 -0
  333. package/dist/infra/materializer.cjs +74 -0
  334. package/dist/infra/materializer.cjs.map +1 -0
  335. package/dist/infra/materializer.mjs +70 -0
  336. package/dist/infra/materializer.mjs.map +1 -0
  337. package/dist/infra/planner.cjs +135 -103
  338. package/dist/infra/planner.cjs.map +1 -1
  339. package/dist/infra/planner.mjs +137 -104
  340. package/dist/infra/planner.mjs.map +1 -1
  341. package/dist/infra/port-ownership.cjs +57 -0
  342. package/dist/infra/port-ownership.cjs.map +1 -0
  343. package/dist/infra/port-ownership.mjs +57 -0
  344. package/dist/infra/port-ownership.mjs.map +1 -0
  345. package/dist/infra/preflight.cjs +45 -33
  346. package/dist/infra/preflight.cjs.map +1 -1
  347. package/dist/infra/preflight.d.cts +1 -0
  348. package/dist/infra/preflight.d.mts +1 -0
  349. package/dist/infra/preflight.mjs +46 -34
  350. package/dist/infra/preflight.mjs.map +1 -1
  351. package/dist/infra/types.cjs.map +1 -1
  352. package/dist/infra/types.d.cts +2 -0
  353. package/dist/infra/types.d.mts +2 -0
  354. package/dist/infra/types.mjs.map +1 -1
  355. package/dist/integrity.cjs +50 -61
  356. package/dist/integrity.cjs.map +1 -1
  357. package/dist/integrity.d.cts +16 -10
  358. package/dist/integrity.d.mts +16 -10
  359. package/dist/integrity.mjs +50 -59
  360. package/dist/integrity.mjs.map +1 -1
  361. package/dist/internal/manifest-normalizer.cjs +8 -2
  362. package/dist/internal/manifest-normalizer.cjs.map +1 -1
  363. package/dist/internal/manifest-normalizer.mjs +9 -3
  364. package/dist/internal/manifest-normalizer.mjs.map +1 -1
  365. package/dist/merge.cjs +19 -1
  366. package/dist/merge.cjs.map +1 -1
  367. package/dist/merge.d.cts +1 -1
  368. package/dist/merge.d.mts +1 -1
  369. package/dist/merge.mjs +19 -2
  370. package/dist/merge.mjs.map +1 -1
  371. package/dist/mf.cjs +190 -3
  372. package/dist/mf.cjs.map +1 -1
  373. package/dist/mf.d.cts +24 -2
  374. package/dist/mf.d.mts +24 -2
  375. package/dist/mf.mjs +189 -4
  376. package/dist/mf.mjs.map +1 -1
  377. package/dist/near-cli.cjs +59 -91
  378. package/dist/near-cli.cjs.map +1 -1
  379. package/dist/near-cli.mjs +58 -90
  380. package/dist/near-cli.mjs.map +1 -1
  381. package/dist/near-signer.cjs +73 -0
  382. package/dist/near-signer.cjs.map +1 -0
  383. package/dist/near-signer.mjs +70 -0
  384. package/dist/near-signer.mjs.map +1 -0
  385. package/dist/network.cjs +0 -1
  386. package/dist/network.cjs.map +1 -1
  387. package/dist/orchestrator.cjs +256 -87
  388. package/dist/orchestrator.cjs.map +1 -1
  389. package/dist/orchestrator.mjs +248 -87
  390. package/dist/orchestrator.mjs.map +1 -1
  391. package/dist/platform-deploy.cjs +81 -0
  392. package/dist/platform-deploy.cjs.map +1 -0
  393. package/dist/platform-deploy.mjs +80 -0
  394. package/dist/platform-deploy.mjs.map +1 -0
  395. package/dist/plugin.cjs +54 -1389
  396. package/dist/plugin.cjs.map +1 -1
  397. package/dist/plugin.d.cts +6 -896
  398. package/dist/plugin.d.mts +6 -896
  399. package/dist/plugin.mjs +53 -1387
  400. package/dist/plugin.mjs.map +1 -1
  401. package/dist/process-kill.cjs +44 -0
  402. package/dist/process-kill.cjs.map +1 -0
  403. package/dist/process-kill.mjs +43 -0
  404. package/dist/process-kill.mjs.map +1 -0
  405. package/dist/process-registry.cjs +64 -9
  406. package/dist/process-registry.cjs.map +1 -1
  407. package/dist/process-registry.mjs +61 -10
  408. package/dist/process-registry.mjs.map +1 -1
  409. package/dist/progress.cjs +45 -0
  410. package/dist/progress.cjs.map +1 -0
  411. package/dist/progress.d.cts +13 -0
  412. package/dist/progress.d.mts +13 -0
  413. package/dist/progress.mjs +42 -0
  414. package/dist/progress.mjs.map +1 -0
  415. package/dist/publish.cjs +513 -79
  416. package/dist/publish.cjs.map +1 -1
  417. package/dist/publish.mjs +515 -82
  418. package/dist/publish.mjs.map +1 -1
  419. package/dist/registry-use.cjs +41 -0
  420. package/dist/registry-use.cjs.map +1 -0
  421. package/dist/registry-use.mjs +40 -0
  422. package/dist/registry-use.mjs.map +1 -0
  423. package/dist/resolution/session.cjs +335 -0
  424. package/dist/resolution/session.cjs.map +1 -0
  425. package/dist/resolution/session.d.cts +105 -0
  426. package/dist/resolution/session.d.mts +105 -0
  427. package/dist/resolution/session.mjs +331 -0
  428. package/dist/resolution/session.mjs.map +1 -0
  429. package/dist/rollback.cjs +131 -0
  430. package/dist/rollback.cjs.map +1 -0
  431. package/dist/rollback.mjs +128 -0
  432. package/dist/rollback.mjs.map +1 -0
  433. package/dist/sdk.cjs +7 -7
  434. package/dist/sdk.d.cts +3 -3
  435. package/dist/sdk.d.mts +3 -3
  436. package/dist/sdk.mjs +2 -2
  437. package/dist/service-descriptor.cjs +67 -34
  438. package/dist/service-descriptor.cjs.map +1 -1
  439. package/dist/service-descriptor.d.cts +4 -1
  440. package/dist/service-descriptor.d.mts +3 -0
  441. package/dist/service-descriptor.mjs +63 -35
  442. package/dist/service-descriptor.mjs.map +1 -1
  443. package/dist/shared-deps.cjs +17 -16
  444. package/dist/shared-deps.cjs.map +1 -1
  445. package/dist/shared-deps.mjs +17 -16
  446. package/dist/shared-deps.mjs.map +1 -1
  447. package/dist/start-config-source.cjs +24 -0
  448. package/dist/start-config-source.cjs.map +1 -0
  449. package/dist/start-config-source.d.cts +29 -0
  450. package/dist/start-config-source.d.mts +29 -0
  451. package/dist/start-config-source.mjs +22 -0
  452. package/dist/start-config-source.mjs.map +1 -0
  453. package/dist/storage-upload.cjs +145 -0
  454. package/dist/storage-upload.cjs.map +1 -0
  455. package/dist/storage-upload.mjs +143 -0
  456. package/dist/storage-upload.mjs.map +1 -0
  457. package/dist/types.cjs +126 -20
  458. package/dist/types.cjs.map +1 -1
  459. package/dist/types.d.cts +867 -585
  460. package/dist/types.d.mts +867 -585
  461. package/dist/types.mjs +307 -208
  462. package/dist/types.mjs.map +1 -1
  463. package/dist/ui/api.cjs +105 -0
  464. package/dist/ui/api.cjs.map +1 -0
  465. package/dist/ui/api.d.cts +31 -0
  466. package/dist/ui/api.d.mts +31 -0
  467. package/dist/ui/api.mjs +99 -0
  468. package/dist/ui/api.mjs.map +1 -0
  469. package/dist/ui/auth-guards.cjs +50 -0
  470. package/dist/ui/auth-guards.cjs.map +1 -0
  471. package/dist/ui/auth-guards.d.cts +39 -0
  472. package/dist/ui/auth-guards.d.mts +39 -0
  473. package/dist/ui/auth-guards.mjs +48 -0
  474. package/dist/ui/auth-guards.mjs.map +1 -0
  475. package/dist/ui/auth.cjs +197 -0
  476. package/dist/ui/auth.cjs.map +1 -0
  477. package/dist/ui/auth.d.cts +56 -0
  478. package/dist/ui/auth.d.mts +56 -0
  479. package/dist/ui/auth.mjs +179 -0
  480. package/dist/ui/auth.mjs.map +1 -0
  481. package/dist/ui/entry.cjs +16 -0
  482. package/dist/ui/entry.cjs.map +1 -0
  483. package/dist/ui/entry.d.cts +12 -0
  484. package/dist/ui/entry.d.mts +12 -0
  485. package/dist/ui/entry.mjs +15 -0
  486. package/dist/ui/entry.mjs.map +1 -0
  487. package/dist/ui/head.cjs +14 -7
  488. package/dist/ui/head.cjs.map +1 -1
  489. package/dist/ui/head.mjs +15 -7
  490. package/dist/ui/head.mjs.map +1 -1
  491. package/dist/ui/hydrate.cjs +265 -0
  492. package/dist/ui/hydrate.cjs.map +1 -0
  493. package/dist/ui/hydrate.d.cts +48 -0
  494. package/dist/ui/hydrate.d.mts +48 -0
  495. package/dist/ui/hydrate.mjs +263 -0
  496. package/dist/ui/hydrate.mjs.map +1 -0
  497. package/dist/ui/i18n.cjs +153 -0
  498. package/dist/ui/i18n.cjs.map +1 -0
  499. package/dist/ui/i18n.d.cts +29 -0
  500. package/dist/ui/i18n.d.mts +29 -0
  501. package/dist/ui/i18n.mjs +140 -0
  502. package/dist/ui/i18n.mjs.map +1 -0
  503. package/dist/ui/index.cjs +19 -1
  504. package/dist/ui/index.d.cts +6 -3
  505. package/dist/ui/index.d.mts +6 -3
  506. package/dist/ui/index.mjs +5 -2
  507. package/dist/ui/locale.cjs +53 -0
  508. package/dist/ui/locale.cjs.map +1 -0
  509. package/dist/ui/locale.d.cts +18 -0
  510. package/dist/ui/locale.d.mts +18 -0
  511. package/dist/ui/locale.mjs +49 -0
  512. package/dist/ui/locale.mjs.map +1 -0
  513. package/dist/ui/manifest/index.cjs +25 -0
  514. package/dist/ui/manifest/index.cjs.map +1 -0
  515. package/dist/ui/manifest/index.d.cts +9 -0
  516. package/dist/ui/manifest/index.d.mts +9 -0
  517. package/dist/ui/manifest/index.mjs +13 -0
  518. package/dist/ui/manifest/index.mjs.map +1 -0
  519. package/dist/ui/manifest-generator.cjs +8 -0
  520. package/dist/ui/manifest-generator.d.cts +1 -0
  521. package/dist/ui/manifest-generator.d.mts +1 -0
  522. package/dist/ui/manifest-generator.mjs +3 -0
  523. package/dist/ui/message-catalogs.cjs +8 -0
  524. package/dist/ui/message-catalogs.cjs.map +1 -0
  525. package/dist/ui/message-catalogs.d.cts +5 -0
  526. package/dist/ui/message-catalogs.d.mts +5 -0
  527. package/dist/ui/message-catalogs.mjs +8 -0
  528. package/dist/ui/message-catalogs.mjs.map +1 -0
  529. package/dist/ui/metadata.cjs +0 -1
  530. package/dist/ui/metadata.cjs.map +1 -1
  531. package/dist/ui/metadata.d.cts +1 -1
  532. package/dist/ui/metadata.d.mts +1 -1
  533. package/dist/ui/plugin-path.cjs +37 -0
  534. package/dist/ui/plugin-path.cjs.map +1 -0
  535. package/dist/ui/plugin-path.d.cts +25 -0
  536. package/dist/ui/plugin-path.d.mts +25 -0
  537. package/dist/ui/plugin-path.mjs +35 -0
  538. package/dist/ui/plugin-path.mjs.map +1 -0
  539. package/dist/ui/router-client.cjs +61 -0
  540. package/dist/ui/router-client.cjs.map +1 -0
  541. package/dist/ui/router-client.d.cts +20 -0
  542. package/dist/ui/router-client.d.mts +20 -0
  543. package/dist/ui/router-client.mjs +60 -0
  544. package/dist/ui/router-client.mjs.map +1 -0
  545. package/dist/ui/router-defaults.cjs +48 -0
  546. package/dist/ui/router-defaults.cjs.map +1 -0
  547. package/dist/ui/router-defaults.d.cts +8 -0
  548. package/dist/ui/router-defaults.d.mts +8 -0
  549. package/dist/ui/router-defaults.mjs +45 -0
  550. package/dist/ui/router-defaults.mjs.map +1 -0
  551. package/dist/ui/router-error.cjs +70 -0
  552. package/dist/ui/router-error.cjs.map +1 -0
  553. package/dist/ui/router-error.d.cts +19 -0
  554. package/dist/ui/router-error.d.mts +19 -0
  555. package/dist/ui/router-error.mjs +69 -0
  556. package/dist/ui/router-error.mjs.map +1 -0
  557. package/dist/ui/router-server.cjs +153 -0
  558. package/dist/ui/router-server.cjs.map +1 -0
  559. package/dist/ui/router-server.d.cts +38 -0
  560. package/dist/ui/router-server.d.mts +38 -0
  561. package/dist/ui/router-server.mjs +152 -0
  562. package/dist/ui/router-server.mjs.map +1 -0
  563. package/dist/ui/router.cjs +4 -16
  564. package/dist/ui/router.cjs.map +1 -1
  565. package/dist/ui/router.mjs +4 -15
  566. package/dist/ui/router.mjs.map +1 -1
  567. package/dist/ui/runtime.cjs +5 -1
  568. package/dist/ui/runtime.cjs.map +1 -1
  569. package/dist/ui/runtime.d.cts +2 -1
  570. package/dist/ui/runtime.d.mts +2 -1
  571. package/dist/ui/runtime.mjs +5 -1
  572. package/dist/ui/runtime.mjs.map +1 -1
  573. package/dist/ui/slot.cjs +34 -0
  574. package/dist/ui/slot.cjs.map +1 -0
  575. package/dist/ui/slot.d.cts +43 -0
  576. package/dist/ui/slot.d.mts +43 -0
  577. package/dist/ui/slot.mjs +34 -0
  578. package/dist/ui/slot.mjs.map +1 -0
  579. package/dist/ui/tenant.cjs +300 -0
  580. package/dist/ui/tenant.cjs.map +1 -0
  581. package/dist/ui/tenant.d.cts +122 -0
  582. package/dist/ui/tenant.d.mts +122 -0
  583. package/dist/ui/tenant.mjs +279 -0
  584. package/dist/ui/tenant.mjs.map +1 -0
  585. package/dist/ui/types.d.cts +32 -2
  586. package/dist/ui/types.d.mts +32 -2
  587. package/dist/ui/version-check.cjs +47 -0
  588. package/dist/ui/version-check.cjs.map +1 -0
  589. package/dist/ui/version-check.d.cts +23 -0
  590. package/dist/ui/version-check.d.mts +23 -0
  591. package/dist/ui/version-check.mjs +46 -0
  592. package/dist/ui/version-check.mjs.map +1 -0
  593. package/dist/utils/banner.cjs +2 -2
  594. package/dist/utils/banner.cjs.map +1 -1
  595. package/dist/utils/banner.mjs +2 -2
  596. package/dist/utils/banner.mjs.map +1 -1
  597. package/dist/utils/linkify.cjs +1 -1
  598. package/dist/utils/linkify.cjs.map +1 -1
  599. package/dist/utils/linkify.mjs +1 -0
  600. package/dist/utils/linkify.mjs.map +1 -1
  601. package/dist/utils/run.cjs +6 -6
  602. package/dist/utils/run.cjs.map +1 -1
  603. package/dist/utils/run.mjs +6 -6
  604. package/dist/utils/run.mjs.map +1 -1
  605. package/dist/utils/save-config.cjs +12 -0
  606. package/dist/utils/save-config.cjs.map +1 -1
  607. package/dist/utils/save-config.mjs +12 -0
  608. package/dist/utils/save-config.mjs.map +1 -1
  609. package/dist/utils/snapshot-hash.cjs +10 -0
  610. package/dist/utils/snapshot-hash.cjs.map +1 -0
  611. package/dist/utils/snapshot-hash.mjs +10 -0
  612. package/dist/utils/snapshot-hash.mjs.map +1 -0
  613. package/dist/utils/string.cjs +0 -1
  614. package/dist/utils/string.cjs.map +1 -1
  615. package/dist/utils/theme.cjs +30 -12
  616. package/dist/utils/theme.cjs.map +1 -1
  617. package/dist/utils/theme.mjs +30 -11
  618. package/dist/utils/theme.mjs.map +1 -1
  619. package/dist/version-manifest-deploy.cjs +50 -0
  620. package/dist/version-manifest-deploy.cjs.map +1 -0
  621. package/dist/version-manifest-deploy.mjs +49 -0
  622. package/dist/version-manifest-deploy.mjs.map +1 -0
  623. package/dist/version-manifest-resolve.cjs +42 -0
  624. package/dist/version-manifest-resolve.cjs.map +1 -0
  625. package/dist/version-manifest-resolve.d.cts +38 -0
  626. package/dist/version-manifest-resolve.d.mts +38 -0
  627. package/dist/version-manifest-resolve.mjs +40 -0
  628. package/dist/version-manifest-resolve.mjs.map +1 -0
  629. package/dist/version-status.cjs +18 -0
  630. package/dist/version-status.cjs.map +1 -0
  631. package/dist/version-status.d.cts +22 -0
  632. package/dist/version-status.d.mts +22 -0
  633. package/dist/version-status.mjs +17 -0
  634. package/dist/version-status.mjs.map +1 -0
  635. package/dist/workspace-catalog.cjs +53 -0
  636. package/dist/workspace-catalog.cjs.map +1 -0
  637. package/dist/workspace-catalog.mjs +51 -0
  638. package/dist/workspace-catalog.mjs.map +1 -0
  639. package/dist/workspace.cjs +237 -0
  640. package/dist/workspace.cjs.map +1 -0
  641. package/dist/workspace.mjs +233 -0
  642. package/dist/workspace.mjs.map +1 -0
  643. package/package.json +179 -27
  644. package/skills/add-a-route/SKILL.md +132 -0
  645. package/skills/api-and-auth/SKILL.md +87 -21
  646. package/skills/api-and-auth/references/middleware.md +1 -1
  647. package/skills/cli-reference/SKILL.md +48 -21
  648. package/skills/code-style/SKILL.md +8 -0
  649. package/skills/dev-workflow/SKILL.md +50 -26
  650. package/skills/extends-config/SKILL.md +31 -19
  651. package/skills/init-upgrade/SKILL.md +29 -16
  652. package/skills/plugin-development/SKILL.md +46 -112
  653. package/skills/plugin-development/references/database.md +82 -0
  654. package/skills/plugin-development/references/request-context.md +67 -0
  655. package/skills/publish-sync/SKILL.md +99 -22
  656. package/skills/registry/SKILL.md +82 -0
  657. package/skills/super-app/SKILL.md +25 -15
  658. package/skills/talk-to-the-app/SKILL.md +138 -0
  659. package/skills/ui-integration/SKILL.md +93 -11
  660. package/dist/cli/db-studio.cjs +0 -131
  661. package/dist/cli/db-studio.cjs.map +0 -1
  662. package/dist/cli/db-studio.mjs +0 -127
  663. package/dist/cli/db-studio.mjs.map +0 -1
  664. package/dist/cli/init.d.cts.map +0 -1
  665. package/dist/cli/init.d.mts.map +0 -1
  666. package/dist/components/dev-view.cjs +0 -309
  667. package/dist/components/dev-view.cjs.map +0 -1
  668. package/dist/components/dev-view.mjs +0 -309
  669. package/dist/components/dev-view.mjs.map +0 -1
  670. package/dist/components/streaming-view.cjs +0 -134
  671. package/dist/components/streaming-view.cjs.map +0 -1
  672. package/dist/components/streaming-view.mjs +0 -132
  673. package/dist/components/streaming-view.mjs.map +0 -1
  674. package/dist/config.d.cts.map +0 -1
  675. package/dist/config.d.mts.map +0 -1
  676. package/dist/contract.d.cts.map +0 -1
  677. package/dist/contract.d.mts.map +0 -1
  678. package/dist/contract.meta.d.cts.map +0 -1
  679. package/dist/contract.meta.d.mts.map +0 -1
  680. package/dist/dag.d.cts.map +0 -1
  681. package/dist/dag.d.mts.map +0 -1
  682. package/dist/db.cjs +0 -81
  683. package/dist/db.cjs.map +0 -1
  684. package/dist/db.d.cts +0 -30
  685. package/dist/db.d.cts.map +0 -1
  686. package/dist/db.d.mts +0 -30
  687. package/dist/db.d.mts.map +0 -1
  688. package/dist/db.mjs +0 -75
  689. package/dist/db.mjs.map +0 -1
  690. package/dist/fastkv.d.cts.map +0 -1
  691. package/dist/fastkv.d.mts.map +0 -1
  692. package/dist/integrity.d.cts.map +0 -1
  693. package/dist/integrity.d.mts.map +0 -1
  694. package/dist/merge.d.cts.map +0 -1
  695. package/dist/merge.d.mts.map +0 -1
  696. package/dist/mf.d.cts.map +0 -1
  697. package/dist/mf.d.mts.map +0 -1
  698. package/dist/plugin.d.cts.map +0 -1
  699. package/dist/plugin.d.mts.map +0 -1
  700. package/dist/service-descriptor.d.cts.map +0 -1
  701. package/dist/service-descriptor.d.mts.map +0 -1
  702. package/dist/types.d.cts.map +0 -1
  703. package/dist/types.d.mts.map +0 -1
  704. package/dist/ui/head.d.cts.map +0 -1
  705. package/dist/ui/head.d.mts.map +0 -1
  706. package/dist/ui/metadata.d.cts.map +0 -1
  707. package/dist/ui/metadata.d.mts.map +0 -1
  708. package/dist/ui/router.d.cts.map +0 -1
  709. package/dist/ui/router.d.mts.map +0 -1
  710. package/dist/ui/runtime.d.cts.map +0 -1
  711. package/dist/ui/runtime.d.mts.map +0 -1
  712. package/dist/ui/types.d.cts.map +0 -1
  713. package/dist/ui/types.d.mts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"router.mjs","names":[],"sources":["../../src/ui/router.ts"],"sourcesContent":["import type { AnyRouter } from \"@tanstack/react-router\";\nimport type { HeadData, HeadLink, HeadMeta, HeadScript } from \"./types\";\n\nexport function getMetaKey(meta: HeadMeta): string {\n if (!meta) return \"null\";\n if (\"title\" in meta) return \"title\";\n if (\"charSet\" in meta) return \"charSet\";\n if (\"name\" in meta) return `name:${(meta as { name: string }).name}`;\n if (\"property\" in meta) {\n return `property:${(meta as { property: string }).property}`;\n }\n if (\"httpEquiv\" in meta) {\n return `httpEquiv:${(meta as { httpEquiv: string }).httpEquiv}`;\n }\n return JSON.stringify(meta);\n}\n\nexport function getLinkKey(link: HeadLink): string {\n const rel = (link as { rel?: string }).rel ?? \"\";\n const href = (link as { href?: string }).href ?? \"\";\n return `${rel}:${href}`;\n}\n\nexport function getScriptKey(script: HeadScript): string {\n if (!script) return \"null\";\n if (\"src\" in script && script.src) return `src:${script.src}`;\n if (\"children\" in script && script.children) {\n return `children:${typeof script.children === \"string\" ? script.children : JSON.stringify(script.children)}`;\n }\n return JSON.stringify(script);\n}\n\nexport async function collectHeadData(router: AnyRouter): Promise<HeadData> {\n await router.load();\n\n const metaMap = new Map<string, HeadMeta>();\n const linkMap = new Map<string, HeadLink>();\n const scriptMap = new Map<string, HeadScript>();\n\n for (const match of router.state.matches) {\n const route =\n (\n router as AnyRouter & {\n routesById?: Record<string, { options?: { head?: (...args: unknown[]) => unknown } }>;\n }\n ).routesById?.[(match as { routeId: string }).routeId] ??\n (match as { route?: { options?: { head?: (...args: unknown[]) => unknown } } }).route;\n const headFn = route?.options?.head;\n if (!headFn) continue;\n\n try {\n const headResult = (await headFn({\n loaderData: match.loaderData,\n matches: router.state.matches,\n match,\n params: match.params,\n })) as {\n meta?: HeadMeta[];\n links?: HeadLink[];\n scripts?: HeadScript[];\n };\n\n if (headResult?.meta) {\n for (const meta of headResult.meta) {\n metaMap.set(getMetaKey(meta), meta);\n }\n }\n if (headResult?.links) {\n for (const link of headResult.links) {\n linkMap.set(getLinkKey(link), link);\n }\n }\n if (headResult?.scripts) {\n for (const script of headResult.scripts) {\n scriptMap.set(getScriptKey(script), script);\n }\n }\n } catch (error) {\n console.warn(`[collectHeadData] head() failed for ${match.routeId}:`, error);\n }\n }\n\n return {\n meta: [...metaMap.values()],\n links: [...linkMap.values()],\n scripts: [...scriptMap.values()],\n };\n}\n\nfunction escapeHtml(s: string): string {\n return s\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction serializeMeta(meta: HeadMeta): string {\n if (!meta) return \"\";\n if (\"charSet\" in meta) return `<meta charset=\"${escapeHtml(String(meta.charSet))}\">`;\n if (\"title\" in meta) return `<title>${escapeHtml(String(meta.title))}</title>`;\n const attrs = Object.entries(meta as Record<string, unknown>)\n .filter(([, v]) => v != null)\n .map(([k, v]) => `${k}=\"${escapeHtml(String(v))}\"`)\n .join(\" \");\n return `<meta ${attrs}>`;\n}\n\nfunction serializeLink(link: HeadLink): string {\n if (!link) return \"\";\n const attrs = Object.entries(link as Record<string, unknown>)\n .filter(([, v]) => v != null)\n .map(([k, v]) => `${k}=\"${escapeHtml(String(v))}\"`)\n .join(\" \");\n return `<link ${attrs}>`;\n}\n\nfunction serializeScript(script: HeadScript, cspNonce?: string): string {\n if (!script) return \"\";\n if (\"src\" in script && script.src) {\n const attrs: string[] = [`src=\"${escapeHtml(script.src)}\"`];\n if (script.integrity) attrs.push(`integrity=\"${escapeHtml(script.integrity)}\"`);\n if (script.crossOrigin) attrs.push(`crossorigin=\"${escapeHtml(script.crossOrigin)}\"`);\n if (script.type) attrs.push(`type=\"${escapeHtml(script.type)}\"`);\n if (cspNonce) attrs.push(`nonce=\"${cspNonce}\"`);\n return `<script ${attrs.join(\" \")}></script>`;\n }\n if (\"children\" in script) {\n const attrs: string[] = [];\n if (script.type) attrs.push(`type=\"${escapeHtml(script.type)}\"`);\n if (cspNonce) attrs.push(`nonce=\"${cspNonce}\"`);\n const content =\n typeof script.children === \"string\" ? script.children : JSON.stringify(script.children);\n return `<script${attrs.length ? ` ${attrs.join(\" \")}` : \"\"}>${content}</script>`;\n }\n return \"\";\n}\n\nexport function serializeHeadData(\n headData: HeadData,\n cspNonce?: string,\n): { metaHtml: string; linkHtml: string; scriptHtml: string } {\n return {\n metaHtml: headData.meta\n .filter(Boolean)\n .map((m) => serializeMeta(m))\n .join(\"\\n\"),\n linkHtml: headData.links\n .filter(Boolean)\n .map((l) => serializeLink(l))\n .join(\"\\n\"),\n scriptHtml: headData.scripts\n .filter(Boolean)\n .map((s) => serializeScript(s, cspNonce))\n .join(\"\\n\"),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"router.mjs","names":[],"sources":["../../src/ui/router.ts"],"sourcesContent":["import type { AnyRouter } from \"@tanstack/react-router\";\nimport type { HeadData, HeadLink, HeadMeta, HeadScript } from \"./types\";\n\nexport function getMetaKey(meta: HeadMeta): string {\n if (!meta) return \"null\";\n if (\"title\" in meta) return \"title\";\n if (\"charSet\" in meta) return \"charSet\";\n if (\"name\" in meta) return `name:${(meta as { name: string }).name}`;\n if (\"property\" in meta) {\n return `property:${(meta as { property: string }).property}`;\n }\n if (\"httpEquiv\" in meta) {\n return `httpEquiv:${(meta as { httpEquiv: string }).httpEquiv}`;\n }\n return JSON.stringify(meta);\n}\n\nexport function getLinkKey(link: HeadLink): string {\n const rel = (link as { rel?: string }).rel ?? \"\";\n const href = (link as { href?: string }).href ?? \"\";\n return `${rel}:${href}`;\n}\n\nexport function getScriptKey(script: HeadScript): string {\n if (!script) return \"null\";\n if (\"src\" in script && script.src) return `src:${script.src}`;\n if (\"children\" in script && script.children) {\n return `children:${typeof script.children === \"string\" ? script.children : JSON.stringify(script.children)}`;\n }\n return JSON.stringify(script);\n}\n\nexport async function collectHeadData(router: AnyRouter): Promise<HeadData> {\n await router.load();\n\n const metaMap = new Map<string, HeadMeta>();\n const linkMap = new Map<string, HeadLink>();\n const scriptMap = new Map<string, HeadScript>();\n\n for (const match of router.state.matches) {\n const matchData = match as {\n meta?: HeadMeta[];\n links?: HeadLink[];\n headScripts?: HeadScript[];\n };\n\n if (matchData.meta) {\n for (const meta of matchData.meta) {\n metaMap.set(getMetaKey(meta), meta);\n }\n }\n if (matchData.links) {\n for (const link of matchData.links) {\n linkMap.set(getLinkKey(link), link);\n }\n }\n if (matchData.headScripts) {\n for (const script of matchData.headScripts) {\n scriptMap.set(getScriptKey(script), script);\n }\n }\n }\n\n return {\n meta: [...metaMap.values()],\n links: [...linkMap.values()],\n scripts: [...scriptMap.values()],\n };\n}\n\nfunction escapeHtml(s: string): string {\n return s\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction serializeMeta(meta: HeadMeta): string {\n if (!meta) return \"\";\n if (\"charSet\" in meta) return `<meta charset=\"${escapeHtml(String(meta.charSet))}\">`;\n if (\"title\" in meta) return `<title>${escapeHtml(String(meta.title))}</title>`;\n const attrs = Object.entries(meta as Record<string, unknown>)\n .filter(([, v]) => v != null)\n .map(([k, v]) => `${k}=\"${escapeHtml(String(v))}\"`)\n .join(\" \");\n return `<meta ${attrs}>`;\n}\n\nfunction serializeLink(link: HeadLink): string {\n if (!link) return \"\";\n const attrs = Object.entries(link as Record<string, unknown>)\n .filter(([, v]) => v != null)\n .map(([k, v]) => `${k}=\"${escapeHtml(String(v))}\"`)\n .join(\" \");\n return `<link ${attrs}>`;\n}\n\nfunction serializeScript(script: HeadScript, cspNonce?: string): string {\n if (!script) return \"\";\n if (\"src\" in script && script.src) {\n const attrs: string[] = [`src=\"${escapeHtml(script.src)}\"`];\n if (script.integrity) attrs.push(`integrity=\"${escapeHtml(script.integrity)}\"`);\n if (script.crossOrigin) attrs.push(`crossorigin=\"${escapeHtml(script.crossOrigin)}\"`);\n if (script.type) attrs.push(`type=\"${escapeHtml(script.type)}\"`);\n if (cspNonce) attrs.push(`nonce=\"${cspNonce}\"`);\n return `<script ${attrs.join(\" \")}></script>`;\n }\n if (\"children\" in script) {\n const attrs: string[] = [];\n if (script.type) attrs.push(`type=\"${escapeHtml(script.type)}\"`);\n if (cspNonce) attrs.push(`nonce=\"${cspNonce}\"`);\n const content =\n typeof script.children === \"string\" ? script.children : JSON.stringify(script.children);\n return `<script${attrs.length ? ` ${attrs.join(\" \")}` : \"\"}>${content}</script>`;\n }\n return \"\";\n}\n\nexport function serializeHeadData(\n headData: HeadData,\n cspNonce?: string,\n): { metaHtml: string; linkHtml: string; scriptHtml: string } {\n return {\n metaHtml: headData.meta\n .filter(Boolean)\n .map((m) => serializeMeta(m))\n .join(\"\\n\"),\n linkHtml: headData.links\n .filter(Boolean)\n .map((l) => serializeLink(l))\n .join(\"\\n\"),\n scriptHtml: headData.scripts\n .filter(Boolean)\n .map((s) => serializeScript(s, cspNonce))\n .join(\"\\n\"),\n };\n}\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
-
3
2
  //#region src/ui/runtime.ts
4
3
  function getRuntimeConfig() {
5
4
  if (typeof window === "undefined") throw new Error("Runtime config is only available in the browser");
@@ -10,6 +9,10 @@ function getCspNonce() {
10
9
  if (typeof window === "undefined") return;
11
10
  return window.__CSP_NONCE__;
12
11
  }
12
+ function getAppName(config) {
13
+ const runtimeConfig = config ?? (typeof window === "undefined" ? void 0 : window.__RUNTIME_CONFIG__);
14
+ return runtimeConfig?.runtime?.title ?? runtimeConfig?.account ?? "";
15
+ }
13
16
  function buildRuntimeHref(pathname, runtimeConfig) {
14
17
  const basePath = runtimeConfig?.runtime?.runtimeBasePath ?? "/";
15
18
  if (basePath === "/") return pathname;
@@ -27,6 +30,7 @@ function buildPublishedGatewayHref(accountId, gatewayId) {
27
30
  exports.buildPublishedAccountHref = buildPublishedAccountHref;
28
31
  exports.buildPublishedGatewayHref = buildPublishedGatewayHref;
29
32
  exports.buildRuntimeHref = buildRuntimeHref;
33
+ exports.getAppName = getAppName;
30
34
  exports.getCspNonce = getCspNonce;
31
35
  exports.getRuntimeConfig = getRuntimeConfig;
32
36
  //# sourceMappingURL=runtime.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.cjs","names":[],"sources":["../../src/ui/runtime.ts"],"sourcesContent":["import type { ClientRuntimeConfig } from \"../types\";\n\nexport type { ClientRuntimeInfo } from \"../types\";\n\ndeclare global {\n interface Window {\n __RUNTIME_CONFIG__?: ClientRuntimeConfig;\n __CSP_NONCE__?: string;\n }\n}\n\nexport function getRuntimeConfig(): ClientRuntimeConfig {\n if (typeof window === \"undefined\") {\n throw new Error(\"Runtime config is only available in the browser\");\n }\n\n if (!window.__RUNTIME_CONFIG__) {\n throw new Error(\"Missing runtime config\");\n }\n\n return window.__RUNTIME_CONFIG__;\n}\n\nexport function getCspNonce() {\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n return window.__CSP_NONCE__;\n}\n\nexport function buildRuntimeHref(pathname: string, runtimeConfig?: Partial<ClientRuntimeConfig>) {\n const basePath = runtimeConfig?.runtime?.runtimeBasePath ?? \"/\";\n if (basePath === \"/\") {\n return pathname;\n }\n\n if (!pathname.startsWith(\"/\")) {\n return `${basePath}/${pathname}`;\n }\n\n return pathname === \"/\" ? basePath : `${basePath}${pathname}`;\n}\n\nexport function buildPublishedAccountHref(accountId: string) {\n return `/apps/${encodeURIComponent(accountId)}`;\n}\n\nexport function buildPublishedGatewayHref(accountId: string, gatewayId: string) {\n return `${buildPublishedAccountHref(accountId)}/${encodeURIComponent(gatewayId)}`;\n}\n"],"mappings":";;;AAWA,SAAgB,mBAAwC;CACtD,IAAI,OAAO,WAAW,aACpB,MAAM,IAAI,MAAM,iDAAiD;CAGnE,IAAI,CAAC,OAAO,oBACV,MAAM,IAAI,MAAM,wBAAwB;CAG1C,OAAO,OAAO;AAChB;AAEA,SAAgB,cAAc;CAC5B,IAAI,OAAO,WAAW,aACpB;CAGF,OAAO,OAAO;AAChB;AAEA,SAAgB,iBAAiB,UAAkB,eAA8C;CAC/F,MAAM,WAAW,eAAe,SAAS,mBAAmB;CAC5D,IAAI,aAAa,KACf,OAAO;CAGT,IAAI,CAAC,SAAS,WAAW,GAAG,GAC1B,OAAO,GAAG,SAAS,GAAG;CAGxB,OAAO,aAAa,MAAM,WAAW,GAAG,WAAW;AACrD;AAEA,SAAgB,0BAA0B,WAAmB;CAC3D,OAAO,SAAS,mBAAmB,SAAS;AAC9C;AAEA,SAAgB,0BAA0B,WAAmB,WAAmB;CAC9E,OAAO,GAAG,0BAA0B,SAAS,EAAE,GAAG,mBAAmB,SAAS;AAChF"}
1
+ {"version":3,"file":"runtime.cjs","names":[],"sources":["../../src/ui/runtime.ts"],"sourcesContent":["import type { ClientRuntimeConfig } from \"../types\";\n\nexport type { ClientRuntimeInfo } from \"../types\";\n\ndeclare global {\n interface Window {\n __RUNTIME_CONFIG__?: ClientRuntimeConfig;\n __CSP_NONCE__?: string;\n }\n}\n\nexport function getRuntimeConfig(): ClientRuntimeConfig {\n if (typeof window === \"undefined\") {\n throw new Error(\"Runtime config is only available in the browser\");\n }\n\n if (!window.__RUNTIME_CONFIG__) {\n throw new Error(\"Missing runtime config\");\n }\n\n return window.__RUNTIME_CONFIG__;\n}\n\nexport function getCspNonce() {\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n return window.__CSP_NONCE__;\n}\n\nexport function getAppName(config?: Partial<ClientRuntimeConfig>): string {\n const runtimeConfig =\n config ?? (typeof window === \"undefined\" ? undefined : window.__RUNTIME_CONFIG__);\n return runtimeConfig?.runtime?.title ?? runtimeConfig?.account ?? \"\";\n}\n\nexport function buildRuntimeHref(pathname: string, runtimeConfig?: Partial<ClientRuntimeConfig>) {\n const basePath = runtimeConfig?.runtime?.runtimeBasePath ?? \"/\";\n if (basePath === \"/\") {\n return pathname;\n }\n\n if (!pathname.startsWith(\"/\")) {\n return `${basePath}/${pathname}`;\n }\n\n return pathname === \"/\" ? basePath : `${basePath}${pathname}`;\n}\n\nexport function buildPublishedAccountHref(accountId: string) {\n return `/apps/${encodeURIComponent(accountId)}`;\n}\n\nexport function buildPublishedGatewayHref(accountId: string, gatewayId: string) {\n return `${buildPublishedAccountHref(accountId)}/${encodeURIComponent(gatewayId)}`;\n}\n"],"mappings":";;AAWA,SAAgB,mBAAwC;CACtD,IAAI,OAAO,WAAW,aACpB,MAAM,IAAI,MAAM,iDAAiD;CAGnE,IAAI,CAAC,OAAO,oBACV,MAAM,IAAI,MAAM,wBAAwB;CAG1C,OAAO,OAAO;AAChB;AAEA,SAAgB,cAAc;CAC5B,IAAI,OAAO,WAAW,aACpB;CAGF,OAAO,OAAO;AAChB;AAEA,SAAgB,WAAW,QAA+C;CACxE,MAAM,gBACJ,WAAW,OAAO,WAAW,cAAc,SAAY,OAAO;CAChE,OAAO,eAAe,SAAS,SAAS,eAAe,WAAW;AACpE;AAEA,SAAgB,iBAAiB,UAAkB,eAA8C;CAC/F,MAAM,WAAW,eAAe,SAAS,mBAAmB;CAC5D,IAAI,aAAa,KACf,OAAO;CAGT,IAAI,CAAC,SAAS,WAAW,GAAG,GAC1B,OAAO,GAAG,SAAS,GAAG;CAGxB,OAAO,aAAa,MAAM,WAAW,GAAG,WAAW;AACrD;AAEA,SAAgB,0BAA0B,WAAmB;CAC3D,OAAO,SAAS,mBAAmB,SAAS;AAC9C;AAEA,SAAgB,0BAA0B,WAAmB,WAAmB;CAC9E,OAAO,GAAG,0BAA0B,SAAS,EAAE,GAAG,mBAAmB,SAAS;AAChF"}
@@ -8,9 +8,10 @@ declare global {
8
8
  }
9
9
  declare function getRuntimeConfig(): ClientRuntimeConfig;
10
10
  declare function getCspNonce(): string | undefined;
11
+ declare function getAppName(config?: Partial<ClientRuntimeConfig>): string;
11
12
  declare function buildRuntimeHref(pathname: string, runtimeConfig?: Partial<ClientRuntimeConfig>): string;
12
13
  declare function buildPublishedAccountHref(accountId: string): string;
13
14
  declare function buildPublishedGatewayHref(accountId: string, gatewayId: string): string;
14
15
  //#endregion
15
- export { type ClientRuntimeInfo, buildPublishedAccountHref, buildPublishedGatewayHref, buildRuntimeHref, getCspNonce, getRuntimeConfig };
16
+ export { type ClientRuntimeInfo, buildPublishedAccountHref, buildPublishedGatewayHref, buildRuntimeHref, getAppName, getCspNonce, getRuntimeConfig };
16
17
  //# sourceMappingURL=runtime.d.cts.map
@@ -8,9 +8,10 @@ declare global {
8
8
  }
9
9
  declare function getRuntimeConfig(): ClientRuntimeConfig;
10
10
  declare function getCspNonce(): string | undefined;
11
+ declare function getAppName(config?: Partial<ClientRuntimeConfig>): string;
11
12
  declare function buildRuntimeHref(pathname: string, runtimeConfig?: Partial<ClientRuntimeConfig>): string;
12
13
  declare function buildPublishedAccountHref(accountId: string): string;
13
14
  declare function buildPublishedGatewayHref(accountId: string, gatewayId: string): string;
14
15
  //#endregion
15
- export { type ClientRuntimeInfo, buildPublishedAccountHref, buildPublishedGatewayHref, buildRuntimeHref, getCspNonce, getRuntimeConfig };
16
+ export { type ClientRuntimeInfo, buildPublishedAccountHref, buildPublishedGatewayHref, buildRuntimeHref, getAppName, getCspNonce, getRuntimeConfig };
16
17
  //# sourceMappingURL=runtime.d.mts.map
@@ -8,6 +8,10 @@ function getCspNonce() {
8
8
  if (typeof window === "undefined") return;
9
9
  return window.__CSP_NONCE__;
10
10
  }
11
+ function getAppName(config) {
12
+ const runtimeConfig = config ?? (typeof window === "undefined" ? void 0 : window.__RUNTIME_CONFIG__);
13
+ return runtimeConfig?.runtime?.title ?? runtimeConfig?.account ?? "";
14
+ }
11
15
  function buildRuntimeHref(pathname, runtimeConfig) {
12
16
  const basePath = runtimeConfig?.runtime?.runtimeBasePath ?? "/";
13
17
  if (basePath === "/") return pathname;
@@ -22,5 +26,5 @@ function buildPublishedGatewayHref(accountId, gatewayId) {
22
26
  }
23
27
 
24
28
  //#endregion
25
- export { buildPublishedAccountHref, buildPublishedGatewayHref, buildRuntimeHref, getCspNonce, getRuntimeConfig };
29
+ export { buildPublishedAccountHref, buildPublishedGatewayHref, buildRuntimeHref, getAppName, getCspNonce, getRuntimeConfig };
26
30
  //# sourceMappingURL=runtime.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.mjs","names":[],"sources":["../../src/ui/runtime.ts"],"sourcesContent":["import type { ClientRuntimeConfig } from \"../types\";\n\nexport type { ClientRuntimeInfo } from \"../types\";\n\ndeclare global {\n interface Window {\n __RUNTIME_CONFIG__?: ClientRuntimeConfig;\n __CSP_NONCE__?: string;\n }\n}\n\nexport function getRuntimeConfig(): ClientRuntimeConfig {\n if (typeof window === \"undefined\") {\n throw new Error(\"Runtime config is only available in the browser\");\n }\n\n if (!window.__RUNTIME_CONFIG__) {\n throw new Error(\"Missing runtime config\");\n }\n\n return window.__RUNTIME_CONFIG__;\n}\n\nexport function getCspNonce() {\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n return window.__CSP_NONCE__;\n}\n\nexport function buildRuntimeHref(pathname: string, runtimeConfig?: Partial<ClientRuntimeConfig>) {\n const basePath = runtimeConfig?.runtime?.runtimeBasePath ?? \"/\";\n if (basePath === \"/\") {\n return pathname;\n }\n\n if (!pathname.startsWith(\"/\")) {\n return `${basePath}/${pathname}`;\n }\n\n return pathname === \"/\" ? basePath : `${basePath}${pathname}`;\n}\n\nexport function buildPublishedAccountHref(accountId: string) {\n return `/apps/${encodeURIComponent(accountId)}`;\n}\n\nexport function buildPublishedGatewayHref(accountId: string, gatewayId: string) {\n return `${buildPublishedAccountHref(accountId)}/${encodeURIComponent(gatewayId)}`;\n}\n"],"mappings":";AAWA,SAAgB,mBAAwC;CACtD,IAAI,OAAO,WAAW,aACpB,MAAM,IAAI,MAAM,iDAAiD;CAGnE,IAAI,CAAC,OAAO,oBACV,MAAM,IAAI,MAAM,wBAAwB;CAG1C,OAAO,OAAO;AAChB;AAEA,SAAgB,cAAc;CAC5B,IAAI,OAAO,WAAW,aACpB;CAGF,OAAO,OAAO;AAChB;AAEA,SAAgB,iBAAiB,UAAkB,eAA8C;CAC/F,MAAM,WAAW,eAAe,SAAS,mBAAmB;CAC5D,IAAI,aAAa,KACf,OAAO;CAGT,IAAI,CAAC,SAAS,WAAW,GAAG,GAC1B,OAAO,GAAG,SAAS,GAAG;CAGxB,OAAO,aAAa,MAAM,WAAW,GAAG,WAAW;AACrD;AAEA,SAAgB,0BAA0B,WAAmB;CAC3D,OAAO,SAAS,mBAAmB,SAAS;AAC9C;AAEA,SAAgB,0BAA0B,WAAmB,WAAmB;CAC9E,OAAO,GAAG,0BAA0B,SAAS,EAAE,GAAG,mBAAmB,SAAS;AAChF"}
1
+ {"version":3,"file":"runtime.mjs","names":[],"sources":["../../src/ui/runtime.ts"],"sourcesContent":["import type { ClientRuntimeConfig } from \"../types\";\n\nexport type { ClientRuntimeInfo } from \"../types\";\n\ndeclare global {\n interface Window {\n __RUNTIME_CONFIG__?: ClientRuntimeConfig;\n __CSP_NONCE__?: string;\n }\n}\n\nexport function getRuntimeConfig(): ClientRuntimeConfig {\n if (typeof window === \"undefined\") {\n throw new Error(\"Runtime config is only available in the browser\");\n }\n\n if (!window.__RUNTIME_CONFIG__) {\n throw new Error(\"Missing runtime config\");\n }\n\n return window.__RUNTIME_CONFIG__;\n}\n\nexport function getCspNonce() {\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n return window.__CSP_NONCE__;\n}\n\nexport function getAppName(config?: Partial<ClientRuntimeConfig>): string {\n const runtimeConfig =\n config ?? (typeof window === \"undefined\" ? undefined : window.__RUNTIME_CONFIG__);\n return runtimeConfig?.runtime?.title ?? runtimeConfig?.account ?? \"\";\n}\n\nexport function buildRuntimeHref(pathname: string, runtimeConfig?: Partial<ClientRuntimeConfig>) {\n const basePath = runtimeConfig?.runtime?.runtimeBasePath ?? \"/\";\n if (basePath === \"/\") {\n return pathname;\n }\n\n if (!pathname.startsWith(\"/\")) {\n return `${basePath}/${pathname}`;\n }\n\n return pathname === \"/\" ? basePath : `${basePath}${pathname}`;\n}\n\nexport function buildPublishedAccountHref(accountId: string) {\n return `/apps/${encodeURIComponent(accountId)}`;\n}\n\nexport function buildPublishedGatewayHref(accountId: string, gatewayId: string) {\n return `${buildPublishedAccountHref(accountId)}/${encodeURIComponent(gatewayId)}`;\n}\n"],"mappings":";AAWA,SAAgB,mBAAwC;CACtD,IAAI,OAAO,WAAW,aACpB,MAAM,IAAI,MAAM,iDAAiD;CAGnE,IAAI,CAAC,OAAO,oBACV,MAAM,IAAI,MAAM,wBAAwB;CAG1C,OAAO,OAAO;AAChB;AAEA,SAAgB,cAAc;CAC5B,IAAI,OAAO,WAAW,aACpB;CAGF,OAAO,OAAO;AAChB;AAEA,SAAgB,WAAW,QAA+C;CACxE,MAAM,gBACJ,WAAW,OAAO,WAAW,cAAc,SAAY,OAAO;CAChE,OAAO,eAAe,SAAS,SAAS,eAAe,WAAW;AACpE;AAEA,SAAgB,iBAAiB,UAAkB,eAA8C;CAC/F,MAAM,WAAW,eAAe,SAAS,mBAAmB;CAC5D,IAAI,aAAa,KACf,OAAO;CAGT,IAAI,CAAC,SAAS,WAAW,GAAG,GAC1B,OAAO,GAAG,SAAS,GAAG;CAGxB,OAAO,aAAa,MAAM,WAAW,GAAG,WAAW;AACrD;AAEA,SAAgB,0BAA0B,WAAmB;CAC3D,OAAO,SAAS,mBAAmB,SAAS;AAC9C;AAEA,SAAgB,0BAA0B,WAAmB,WAAmB;CAC9E,OAAO,GAAG,0BAA0B,SAAS,EAAE,GAAG,mBAAmB,SAAS;AAChF"}
@@ -0,0 +1,34 @@
1
+ let every_plugin_ui_manifest = require("every-plugin/ui/manifest");
2
+
3
+ //#region src/ui/slot.ts
4
+ const trimBase = (value) => (value ?? "").replace(/\/$/, "");
5
+ const withBuster = (url, buster) => buster ? `${url}?v=${encodeURIComponent(buster)}` : url;
6
+ function requireEntry(entryUrl, env, slot, surface, devFixed) {
7
+ if (entryUrl) return entryUrl;
8
+ if (env === "development") return devFixed;
9
+ throw new Error(`slot "${slot}" has no derived ${surface} entry — pins resolve it from the version manifest (the fixed dev name is development-only)`);
10
+ }
11
+ function ssrEntryUrl(slot, env) {
12
+ if (slot.ssrEntryUrl) return slot.ssrEntryUrl;
13
+ if (env === "development") return slot.ssrUrl ? withBuster(`${trimBase(slot.ssrUrl)}/${every_plugin_ui_manifest.UI_REMOTE_SERVER_ENTRY_FILENAME}`, slot.ssrIntegrity ?? slot.containerVersion) : void 0;
14
+ if (!slot.ssrUrl) return void 0;
15
+ throw new Error(`slot "${slot.name}" has no derived ssr entry — pins resolve it from the version manifest (the fixed dev name is development-only)`);
16
+ }
17
+ function entryUrls(slot, env) {
18
+ const base = trimBase(slot.publicUrl ?? slot.url);
19
+ return {
20
+ get web() {
21
+ return requireEntry(slot.entryUrl, env, slot.name, "web", withBuster(`${base}/${every_plugin_ui_manifest.UI_REMOTE_ENTRY_FILENAME}`, slot.integrity));
22
+ },
23
+ get ssr() {
24
+ return ssrEntryUrl(slot, env);
25
+ },
26
+ get browserManifest() {
27
+ return slot.localPath ? void 0 : slot.browserManifestUrl;
28
+ }
29
+ };
30
+ }
31
+
32
+ //#endregion
33
+ exports.entryUrls = entryUrls;
34
+ //# sourceMappingURL=slot.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot.cjs","names":["UI_REMOTE_SERVER_ENTRY_FILENAME","UI_REMOTE_ENTRY_FILENAME"],"sources":["../../src/ui/slot.ts"],"sourcesContent":["import {\n UI_REMOTE_ENTRY_FILENAME,\n UI_REMOTE_SERVER_ENTRY_FILENAME,\n} from \"every-plugin/ui/manifest\";\nimport type { BosEnv } from \"../merge\";\n\n/**\n * The host's entry-URL SlotResolver: one pure derivation from a stamped\n * config slot to the URLs each surface loads. `EntrySlot` is structural —\n * the version-manifest derivation (atomic-deploys 04) stamps exactly these\n * fields onto `RuntimeConfig` slots, so they satisfy it as-is. Each surface\n * of `entryUrls` resolves (and throws) lazily — a caller reading only `web`\n * never trips the ssr surface's resolution, and vice versa.\n */\nexport interface EntrySlot {\n /** slot identity, verbatim in resolution errors */\n name: string;\n url?: string;\n /** browser-facing base (ADR 0011) — the base rule is publicUrl ?? url, inside this module */\n publicUrl?: string;\n /** pin-derived hashed browser entry (absent in development) */\n entryUrl?: string;\n ssrUrl?: string;\n /** pin-derived hashed SSR entry */\n ssrEntryUrl?: string;\n integrity?: string;\n ssrIntegrity?: string;\n /** dev-only freshness token (localUiRemoteEntry's container mtime) */\n containerVersion?: string;\n /** pin-derived hashed browser manifest — absent for local slots, which no\n * pin derivation ever stamps (atomic-deploys 08) and the resolver drops\n * even if one were stamped */\n browserManifestUrl?: string;\n localPath?: string;\n}\n\nexport interface EntryUrls {\n /** browser script src / registration entry — bustered fixed name in dev, hashed in prod */\n readonly web: string;\n /** server container entry; undefined when the slot has no SSR coordinates */\n readonly ssr?: string;\n /** pin-derived hashed mf-manifest; undefined ⟺ local slot (atomic-deploys 08, STRUCTURAL) */\n readonly browserManifest?: string;\n}\n\nconst trimBase = (value: string | undefined): string => (value ?? \"\").replace(/\\/$/, \"\");\n\nconst withBuster = (url: string, buster: string | undefined): string =>\n buster ? `${url}?v=${encodeURIComponent(buster)}` : url;\n\nfunction requireEntry(\n entryUrl: string | undefined,\n env: BosEnv,\n slot: string,\n surface: string,\n devFixed: string,\n): string {\n if (entryUrl) return entryUrl;\n if (env === \"development\") return devFixed;\n throw new Error(\n `slot \"${slot}\" has no derived ${surface} entry — pins resolve it from the version manifest ` +\n `(the fixed dev name is development-only)`,\n );\n}\n\nfunction ssrEntryUrl(slot: EntrySlot, env: BosEnv): string | undefined {\n if (slot.ssrEntryUrl) return slot.ssrEntryUrl;\n if (env === \"development\") {\n return slot.ssrUrl\n ? withBuster(\n `${trimBase(slot.ssrUrl)}/${UI_REMOTE_SERVER_ENTRY_FILENAME}`,\n slot.ssrIntegrity ?? slot.containerVersion,\n )\n : undefined;\n }\n if (!slot.ssrUrl) return undefined;\n throw new Error(\n `slot \"${slot.name}\" has no derived ssr entry — pins resolve it from the version manifest ` +\n `(the fixed dev name is development-only)`,\n );\n}\n\nexport function entryUrls(slot: EntrySlot, env: BosEnv): EntryUrls {\n const base = trimBase(slot.publicUrl ?? slot.url);\n return {\n get web() {\n return requireEntry(\n slot.entryUrl,\n env,\n slot.name,\n \"web\",\n withBuster(`${base}/${UI_REMOTE_ENTRY_FILENAME}`, slot.integrity),\n );\n },\n get ssr() {\n return ssrEntryUrl(slot, env);\n },\n get browserManifest() {\n return slot.localPath ? undefined : slot.browserManifestUrl;\n },\n };\n}\n"],"mappings":";;;AA6CA,MAAM,YAAY,WAAuC,SAAS,GAAE,CAAE,QAAQ,OAAO,EAAE;AAEvF,MAAM,cAAc,KAAa,WAC/B,SAAS,GAAG,IAAI,KAAK,mBAAmB,MAAM,MAAM;AAEtD,SAAS,aACP,UACA,KACA,MACA,SACA,UACQ;CACR,IAAI,UAAU,OAAO;CACrB,IAAI,QAAQ,eAAe,OAAO;CAClC,MAAM,IAAI,MACR,SAAS,KAAK,mBAAmB,QAAQ,4FAE3C;AACF;AAEA,SAAS,YAAY,MAAiB,KAAiC;CACrE,IAAI,KAAK,aAAa,OAAO,KAAK;CAClC,IAAI,QAAQ,eACV,OAAO,KAAK,SACR,WACE,GAAG,SAAS,KAAK,MAAM,EAAE,GAAGA,4DAC5B,KAAK,gBAAgB,KAAK,gBAC5B,IACA;CAEN,IAAI,CAAC,KAAK,QAAQ,OAAO;CACzB,MAAM,IAAI,MACR,SAAS,KAAK,KAAK,gHAErB;AACF;AAEA,SAAgB,UAAU,MAAiB,KAAwB;CACjE,MAAM,OAAO,SAAS,KAAK,aAAa,KAAK,GAAG;CAChD,OAAO;EACL,IAAI,MAAM;GACR,OAAO,aACL,KAAK,UACL,KACA,KAAK,MACL,OACA,WAAW,GAAG,KAAK,GAAGC,qDAA4B,KAAK,SAAS,CAClE;EACF;EACA,IAAI,MAAM;GACR,OAAO,YAAY,MAAM,GAAG;EAC9B;EACA,IAAI,kBAAkB;GACpB,OAAO,KAAK,YAAY,SAAY,KAAK;EAC3C;CACF;AACF"}
@@ -0,0 +1,43 @@
1
+ import { BosEnv } from "../merge.cjs";
2
+ //#region src/ui/slot.d.ts
3
+ /**
4
+ * The host's entry-URL SlotResolver: one pure derivation from a stamped
5
+ * config slot to the URLs each surface loads. `EntrySlot` is structural —
6
+ * the version-manifest derivation (atomic-deploys 04) stamps exactly these
7
+ * fields onto `RuntimeConfig` slots, so they satisfy it as-is. Each surface
8
+ * of `entryUrls` resolves (and throws) lazily — a caller reading only `web`
9
+ * never trips the ssr surface's resolution, and vice versa.
10
+ */
11
+ interface EntrySlot {
12
+ /** slot identity, verbatim in resolution errors */
13
+ name: string;
14
+ url?: string;
15
+ /** browser-facing base (ADR 0011) — the base rule is publicUrl ?? url, inside this module */
16
+ publicUrl?: string;
17
+ /** pin-derived hashed browser entry (absent in development) */
18
+ entryUrl?: string;
19
+ ssrUrl?: string;
20
+ /** pin-derived hashed SSR entry */
21
+ ssrEntryUrl?: string;
22
+ integrity?: string;
23
+ ssrIntegrity?: string;
24
+ /** dev-only freshness token (localUiRemoteEntry's container mtime) */
25
+ containerVersion?: string;
26
+ /** pin-derived hashed browser manifest — absent for local slots, which no
27
+ * pin derivation ever stamps (atomic-deploys 08) and the resolver drops
28
+ * even if one were stamped */
29
+ browserManifestUrl?: string;
30
+ localPath?: string;
31
+ }
32
+ interface EntryUrls {
33
+ /** browser script src / registration entry — bustered fixed name in dev, hashed in prod */
34
+ readonly web: string;
35
+ /** server container entry; undefined when the slot has no SSR coordinates */
36
+ readonly ssr?: string;
37
+ /** pin-derived hashed mf-manifest; undefined ⟺ local slot (atomic-deploys 08, STRUCTURAL) */
38
+ readonly browserManifest?: string;
39
+ }
40
+ declare function entryUrls(slot: EntrySlot, env: BosEnv): EntryUrls;
41
+ //#endregion
42
+ export { EntrySlot, EntryUrls, entryUrls };
43
+ //# sourceMappingURL=slot.d.cts.map
@@ -0,0 +1,43 @@
1
+ import { BosEnv } from "../merge.mjs";
2
+ //#region src/ui/slot.d.ts
3
+ /**
4
+ * The host's entry-URL SlotResolver: one pure derivation from a stamped
5
+ * config slot to the URLs each surface loads. `EntrySlot` is structural —
6
+ * the version-manifest derivation (atomic-deploys 04) stamps exactly these
7
+ * fields onto `RuntimeConfig` slots, so they satisfy it as-is. Each surface
8
+ * of `entryUrls` resolves (and throws) lazily — a caller reading only `web`
9
+ * never trips the ssr surface's resolution, and vice versa.
10
+ */
11
+ interface EntrySlot {
12
+ /** slot identity, verbatim in resolution errors */
13
+ name: string;
14
+ url?: string;
15
+ /** browser-facing base (ADR 0011) — the base rule is publicUrl ?? url, inside this module */
16
+ publicUrl?: string;
17
+ /** pin-derived hashed browser entry (absent in development) */
18
+ entryUrl?: string;
19
+ ssrUrl?: string;
20
+ /** pin-derived hashed SSR entry */
21
+ ssrEntryUrl?: string;
22
+ integrity?: string;
23
+ ssrIntegrity?: string;
24
+ /** dev-only freshness token (localUiRemoteEntry's container mtime) */
25
+ containerVersion?: string;
26
+ /** pin-derived hashed browser manifest — absent for local slots, which no
27
+ * pin derivation ever stamps (atomic-deploys 08) and the resolver drops
28
+ * even if one were stamped */
29
+ browserManifestUrl?: string;
30
+ localPath?: string;
31
+ }
32
+ interface EntryUrls {
33
+ /** browser script src / registration entry — bustered fixed name in dev, hashed in prod */
34
+ readonly web: string;
35
+ /** server container entry; undefined when the slot has no SSR coordinates */
36
+ readonly ssr?: string;
37
+ /** pin-derived hashed mf-manifest; undefined ⟺ local slot (atomic-deploys 08, STRUCTURAL) */
38
+ readonly browserManifest?: string;
39
+ }
40
+ declare function entryUrls(slot: EntrySlot, env: BosEnv): EntryUrls;
41
+ //#endregion
42
+ export { EntrySlot, EntryUrls, entryUrls };
43
+ //# sourceMappingURL=slot.d.mts.map
@@ -0,0 +1,34 @@
1
+ import { UI_REMOTE_ENTRY_FILENAME, UI_REMOTE_SERVER_ENTRY_FILENAME } from "every-plugin/ui/manifest";
2
+
3
+ //#region src/ui/slot.ts
4
+ const trimBase = (value) => (value ?? "").replace(/\/$/, "");
5
+ const withBuster = (url, buster) => buster ? `${url}?v=${encodeURIComponent(buster)}` : url;
6
+ function requireEntry(entryUrl, env, slot, surface, devFixed) {
7
+ if (entryUrl) return entryUrl;
8
+ if (env === "development") return devFixed;
9
+ throw new Error(`slot "${slot}" has no derived ${surface} entry — pins resolve it from the version manifest (the fixed dev name is development-only)`);
10
+ }
11
+ function ssrEntryUrl(slot, env) {
12
+ if (slot.ssrEntryUrl) return slot.ssrEntryUrl;
13
+ if (env === "development") return slot.ssrUrl ? withBuster(`${trimBase(slot.ssrUrl)}/${UI_REMOTE_SERVER_ENTRY_FILENAME}`, slot.ssrIntegrity ?? slot.containerVersion) : void 0;
14
+ if (!slot.ssrUrl) return void 0;
15
+ throw new Error(`slot "${slot.name}" has no derived ssr entry — pins resolve it from the version manifest (the fixed dev name is development-only)`);
16
+ }
17
+ function entryUrls(slot, env) {
18
+ const base = trimBase(slot.publicUrl ?? slot.url);
19
+ return {
20
+ get web() {
21
+ return requireEntry(slot.entryUrl, env, slot.name, "web", withBuster(`${base}/${UI_REMOTE_ENTRY_FILENAME}`, slot.integrity));
22
+ },
23
+ get ssr() {
24
+ return ssrEntryUrl(slot, env);
25
+ },
26
+ get browserManifest() {
27
+ return slot.localPath ? void 0 : slot.browserManifestUrl;
28
+ }
29
+ };
30
+ }
31
+
32
+ //#endregion
33
+ export { entryUrls };
34
+ //# sourceMappingURL=slot.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot.mjs","names":[],"sources":["../../src/ui/slot.ts"],"sourcesContent":["import {\n UI_REMOTE_ENTRY_FILENAME,\n UI_REMOTE_SERVER_ENTRY_FILENAME,\n} from \"every-plugin/ui/manifest\";\nimport type { BosEnv } from \"../merge\";\n\n/**\n * The host's entry-URL SlotResolver: one pure derivation from a stamped\n * config slot to the URLs each surface loads. `EntrySlot` is structural —\n * the version-manifest derivation (atomic-deploys 04) stamps exactly these\n * fields onto `RuntimeConfig` slots, so they satisfy it as-is. Each surface\n * of `entryUrls` resolves (and throws) lazily — a caller reading only `web`\n * never trips the ssr surface's resolution, and vice versa.\n */\nexport interface EntrySlot {\n /** slot identity, verbatim in resolution errors */\n name: string;\n url?: string;\n /** browser-facing base (ADR 0011) — the base rule is publicUrl ?? url, inside this module */\n publicUrl?: string;\n /** pin-derived hashed browser entry (absent in development) */\n entryUrl?: string;\n ssrUrl?: string;\n /** pin-derived hashed SSR entry */\n ssrEntryUrl?: string;\n integrity?: string;\n ssrIntegrity?: string;\n /** dev-only freshness token (localUiRemoteEntry's container mtime) */\n containerVersion?: string;\n /** pin-derived hashed browser manifest — absent for local slots, which no\n * pin derivation ever stamps (atomic-deploys 08) and the resolver drops\n * even if one were stamped */\n browserManifestUrl?: string;\n localPath?: string;\n}\n\nexport interface EntryUrls {\n /** browser script src / registration entry — bustered fixed name in dev, hashed in prod */\n readonly web: string;\n /** server container entry; undefined when the slot has no SSR coordinates */\n readonly ssr?: string;\n /** pin-derived hashed mf-manifest; undefined ⟺ local slot (atomic-deploys 08, STRUCTURAL) */\n readonly browserManifest?: string;\n}\n\nconst trimBase = (value: string | undefined): string => (value ?? \"\").replace(/\\/$/, \"\");\n\nconst withBuster = (url: string, buster: string | undefined): string =>\n buster ? `${url}?v=${encodeURIComponent(buster)}` : url;\n\nfunction requireEntry(\n entryUrl: string | undefined,\n env: BosEnv,\n slot: string,\n surface: string,\n devFixed: string,\n): string {\n if (entryUrl) return entryUrl;\n if (env === \"development\") return devFixed;\n throw new Error(\n `slot \"${slot}\" has no derived ${surface} entry — pins resolve it from the version manifest ` +\n `(the fixed dev name is development-only)`,\n );\n}\n\nfunction ssrEntryUrl(slot: EntrySlot, env: BosEnv): string | undefined {\n if (slot.ssrEntryUrl) return slot.ssrEntryUrl;\n if (env === \"development\") {\n return slot.ssrUrl\n ? withBuster(\n `${trimBase(slot.ssrUrl)}/${UI_REMOTE_SERVER_ENTRY_FILENAME}`,\n slot.ssrIntegrity ?? slot.containerVersion,\n )\n : undefined;\n }\n if (!slot.ssrUrl) return undefined;\n throw new Error(\n `slot \"${slot.name}\" has no derived ssr entry — pins resolve it from the version manifest ` +\n `(the fixed dev name is development-only)`,\n );\n}\n\nexport function entryUrls(slot: EntrySlot, env: BosEnv): EntryUrls {\n const base = trimBase(slot.publicUrl ?? slot.url);\n return {\n get web() {\n return requireEntry(\n slot.entryUrl,\n env,\n slot.name,\n \"web\",\n withBuster(`${base}/${UI_REMOTE_ENTRY_FILENAME}`, slot.integrity),\n );\n },\n get ssr() {\n return ssrEntryUrl(slot, env);\n },\n get browserManifest() {\n return slot.localPath ? undefined : slot.browserManifestUrl;\n },\n };\n}\n"],"mappings":";;;AA6CA,MAAM,YAAY,WAAuC,SAAS,GAAE,CAAE,QAAQ,OAAO,EAAE;AAEvF,MAAM,cAAc,KAAa,WAC/B,SAAS,GAAG,IAAI,KAAK,mBAAmB,MAAM,MAAM;AAEtD,SAAS,aACP,UACA,KACA,MACA,SACA,UACQ;CACR,IAAI,UAAU,OAAO;CACrB,IAAI,QAAQ,eAAe,OAAO;CAClC,MAAM,IAAI,MACR,SAAS,KAAK,mBAAmB,QAAQ,4FAE3C;AACF;AAEA,SAAS,YAAY,MAAiB,KAAiC;CACrE,IAAI,KAAK,aAAa,OAAO,KAAK;CAClC,IAAI,QAAQ,eACV,OAAO,KAAK,SACR,WACE,GAAG,SAAS,KAAK,MAAM,EAAE,GAAG,mCAC5B,KAAK,gBAAgB,KAAK,gBAC5B,IACA;CAEN,IAAI,CAAC,KAAK,QAAQ,OAAO;CACzB,MAAM,IAAI,MACR,SAAS,KAAK,KAAK,gHAErB;AACF;AAEA,SAAgB,UAAU,MAAiB,KAAwB;CACjE,MAAM,OAAO,SAAS,KAAK,aAAa,KAAK,GAAG;CAChD,OAAO;EACL,IAAI,MAAM;GACR,OAAO,aACL,KAAK,UACL,KACA,KAAK,MACL,OACA,WAAW,GAAG,KAAK,GAAG,4BAA4B,KAAK,SAAS,CAClE;EACF;EACA,IAAI,MAAM;GACR,OAAO,YAAY,MAAM,GAAG;EAC9B;EACA,IAAI,kBAAkB;GACpB,OAAO,KAAK,YAAY,SAAY,KAAK;EAC3C;CACF;AACF"}
@@ -0,0 +1,300 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_ui_runtime = require('./runtime.cjs');
3
+ const require_ui_manifest_index = require('./manifest/index.cjs');
4
+ let zod = require("zod");
5
+
6
+ //#region src/ui/tenant.ts
7
+ /**
8
+ * Tenant helpers shared by every ui workspace.
9
+ *
10
+ * Two halves of the tenant surface live here:
11
+ * - origin construction (`buildTenantUrl`, `tenantLabel`, `gatewayForAccount`)
12
+ * - the pure helpers for the org node-config editor: a validated draft of the
13
+ * fields a tenant may customize in its published bos.config.json, prefilled
14
+ * from the currently published config, diffed against it, and an in-browser
15
+ * sha384 preflight so a wrong UI bundle cannot brick the tenant site.
16
+ */
17
+ const LOCALHOST_SUFFIX = ".localhost";
18
+ function isLocalHostname(hostname) {
19
+ const normalized = hostname.toLowerCase();
20
+ return normalized === "localhost" || normalized === "127.0.0.1" || normalized === "[::1]" || normalized.endsWith(LOCALHOST_SUFFIX);
21
+ }
22
+ /** Strips a `<label>.<gatewayId>` hostname (or a bare label) down to its label. */
23
+ function tenantLabel(hostnameOrLabel, gatewayId) {
24
+ const normalized = hostnameOrLabel.trim().toLowerCase().replace(/\/+$/, "");
25
+ if (!normalized) return "";
26
+ const gateway = gatewayId?.trim().toLowerCase();
27
+ if (gateway && normalized.endsWith(`.${gateway}`)) return normalized.slice(0, -(gateway.length + 1));
28
+ if (normalized.endsWith(LOCALHOST_SUFFIX)) return normalized.slice(0, -10);
29
+ return normalized.split(".")[0] ?? "";
30
+ }
31
+ /**
32
+ * Builds the absolute origin for a tenant, dev-aware.
33
+ *
34
+ * `buildTenantUrl("chicago", "citynode.app")`
35
+ * -> `https://chicago.citynode.app` in production
36
+ * -> `http://chicago.localhost:3000` when served from localhost
37
+ */
38
+ function buildTenantUrl(hostnameOrLabel, gatewayId, options = {}) {
39
+ const label = tenantLabel(hostnameOrLabel, gatewayId);
40
+ if (!label) return null;
41
+ const path = options.path ?? "";
42
+ const currentHostname = options.currentHostname ?? (typeof window === "undefined" ? void 0 : window.location.hostname);
43
+ if (currentHostname && isLocalHostname(currentHostname)) {
44
+ const currentPort = options.currentPort ?? (typeof window === "undefined" ? "" : window.location.port);
45
+ const port = currentPort ? `:${currentPort}` : "";
46
+ return `http://${label}${LOCALHOST_SUFFIX}${port}${path}`;
47
+ }
48
+ const gateway = gatewayId.trim().toLowerCase();
49
+ if (!gateway) return null;
50
+ return `https://${label}.${gateway}${path}`;
51
+ }
52
+ /**
53
+ * The gateway a slug should publish under for the given owner account,
54
+ * derived from the runtime config instead of hardcoded per-network domains.
55
+ *
56
+ * When the account lives on the same network as the runtime, the current
57
+ * runtime's gateway id is the answer. When the networks differ, the runtime
58
+ * config carries no gateway for that other network, so null is returned and
59
+ * the caller surfaces it rather than guessing a domain.
60
+ */
61
+ function gatewayForAccount(accountId, config = require_ui_runtime.getRuntimeConfig()) {
62
+ const gatewayId = config.runtime?.gatewayId;
63
+ if (!gatewayId) return null;
64
+ return accountId.trim().toLowerCase().endsWith(".testnet") === (config.networkId === "testnet") ? gatewayId : null;
65
+ }
66
+ const INTEGRITY_PATTERN = /^sha384-[A-Za-z0-9+/=]+$/;
67
+ const defaultTenantConfigDraftMessages = {
68
+ url: "must be a valid URL",
69
+ integrity: "must look like sha384-… (base64)",
70
+ manifest: "must look like versions/<version-id>.json",
71
+ title: "title is required",
72
+ description: "description is required",
73
+ uiPair: "a UI bundle needs both its URL and its integrity (direct hash or manifest pin)",
74
+ integrityMode: "choose one integrity mode — a direct entry hash or a version-manifest pin, not both",
75
+ pinPair: "a version-manifest pin needs both the manifest filename and its integrity",
76
+ ssrPair: "an SSR bundle needs both its URL and its integrity hash"
77
+ };
78
+ function createTenantConfigDraftSchema(messages = {}) {
79
+ const copy = {
80
+ ...defaultTenantConfigDraftMessages,
81
+ ...messages
82
+ };
83
+ const optionalUrl = zod.z.string().trim().url(copy.url).or(zod.z.literal("")).transform((value) => value.trim());
84
+ const optionalIntegrity = zod.z.string().trim().regex(INTEGRITY_PATTERN, copy.integrity).or(zod.z.literal(""));
85
+ const optionalManifestName = zod.z.string().trim().regex(/^versions\/[0-9a-f]{16}\.json$/, copy.manifest).or(zod.z.literal(""));
86
+ return zod.z.object({
87
+ title: zod.z.string().trim().min(1, copy.title),
88
+ description: zod.z.string().trim().min(1, copy.description),
89
+ repository: optionalUrl,
90
+ uiProduction: optionalUrl,
91
+ uiIntegrity: optionalIntegrity,
92
+ uiManifest: optionalManifestName,
93
+ uiPinIntegrity: optionalIntegrity,
94
+ ssrUrl: optionalUrl,
95
+ ssrIntegrity: optionalIntegrity
96
+ }).refine((draft) => !!draft.uiProduction === !!(draft.uiIntegrity || draft.uiManifest), {
97
+ message: copy.uiPair,
98
+ path: ["uiIntegrity"]
99
+ }).refine((draft) => !draft.uiIntegrity || !draft.uiManifest, {
100
+ message: copy.integrityMode,
101
+ path: ["uiManifest"]
102
+ }).refine((draft) => !!draft.uiManifest === !!draft.uiPinIntegrity, {
103
+ message: copy.pinPair,
104
+ path: ["uiPinIntegrity"]
105
+ }).refine((draft) => !!draft.ssrUrl === !!draft.ssrIntegrity, {
106
+ message: copy.ssrPair,
107
+ path: ["ssrIntegrity"]
108
+ });
109
+ }
110
+ const tenantConfigDraftSchema = createTenantConfigDraftSchema();
111
+ const emptyTenantConfigDraft = {
112
+ title: "",
113
+ description: "",
114
+ repository: "",
115
+ uiProduction: "",
116
+ uiIntegrity: "",
117
+ uiManifest: "",
118
+ uiPinIntegrity: "",
119
+ ssrUrl: "",
120
+ ssrIntegrity: ""
121
+ };
122
+ function readUi(resolvedConfig) {
123
+ return (resolvedConfig?.app)?.ui ?? {};
124
+ }
125
+ const asString = (value) => typeof value === "string" ? value : "";
126
+ function buildDraftFromResolvedConfig(resolvedConfig, fallback) {
127
+ const ui = readUi(resolvedConfig);
128
+ const title = asString(resolvedConfig?.title) || fallback.title;
129
+ return {
130
+ title,
131
+ description: asString(resolvedConfig?.description) || title,
132
+ repository: asString(resolvedConfig?.repository),
133
+ uiProduction: asString(ui.production),
134
+ uiIntegrity: asString(ui.integrity),
135
+ uiManifest: asString(ui.pin?.manifest),
136
+ uiPinIntegrity: asString(ui.pin?.integrity),
137
+ ssrUrl: asString(ui.ssr),
138
+ ssrIntegrity: asString(ui.ssrIntegrity)
139
+ };
140
+ }
141
+ function diffDraft(draft, resolvedConfig) {
142
+ const ui = readUi(resolvedConfig);
143
+ return [
144
+ [
145
+ "title",
146
+ asString(resolvedConfig?.title),
147
+ draft.title
148
+ ],
149
+ [
150
+ "description",
151
+ asString(resolvedConfig?.description),
152
+ draft.description
153
+ ],
154
+ [
155
+ "repository",
156
+ asString(resolvedConfig?.repository),
157
+ draft.repository
158
+ ],
159
+ [
160
+ "ui bundle",
161
+ asString(ui.production),
162
+ draft.uiProduction
163
+ ],
164
+ [
165
+ "ui integrity",
166
+ asString(ui.integrity),
167
+ draft.uiIntegrity
168
+ ],
169
+ [
170
+ "ui manifest pin",
171
+ asString(ui.pin?.manifest),
172
+ draft.uiManifest
173
+ ],
174
+ [
175
+ "ui pin integrity",
176
+ asString(ui.pin?.integrity),
177
+ draft.uiPinIntegrity
178
+ ],
179
+ [
180
+ "ssr bundle",
181
+ asString(ui.ssr),
182
+ draft.ssrUrl
183
+ ],
184
+ [
185
+ "ssr integrity",
186
+ asString(ui.ssrIntegrity),
187
+ draft.ssrIntegrity
188
+ ]
189
+ ].filter(([, from, to]) => from !== to).map(([field, from, to]) => ({
190
+ field,
191
+ from: from || "—",
192
+ to: to || "—"
193
+ }));
194
+ }
195
+ /** The `app` block for the published config, or undefined when no UI override is set. */
196
+ function draftUiOverride(draft) {
197
+ if (!draft.uiProduction) return void 0;
198
+ if (draft.uiManifest && draft.uiPinIntegrity) return { ui: {
199
+ production: normalizeBundleBaseUrl(draft.uiProduction),
200
+ pin: {
201
+ manifest: draft.uiManifest,
202
+ integrity: draft.uiPinIntegrity
203
+ },
204
+ ...draft.ssrUrl && draft.ssrIntegrity ? {
205
+ ssr: normalizeBundleBaseUrl(draft.ssrUrl),
206
+ ssrIntegrity: draft.ssrIntegrity
207
+ } : {}
208
+ } };
209
+ if (!draft.uiIntegrity) return void 0;
210
+ return { ui: {
211
+ production: normalizeBundleBaseUrl(draft.uiProduction),
212
+ integrity: draft.uiIntegrity,
213
+ ...draft.ssrUrl && draft.ssrIntegrity ? {
214
+ ssr: normalizeBundleBaseUrl(draft.ssrUrl),
215
+ ssrIntegrity: draft.ssrIntegrity
216
+ } : {}
217
+ } };
218
+ }
219
+ function toBase64(bytes) {
220
+ let binary = "";
221
+ const chunkSize = 32768;
222
+ for (let offset = 0; offset < bytes.length; offset += chunkSize) binary += String.fromCharCode(...bytes.subarray(offset, offset + chunkSize));
223
+ return btoa(binary);
224
+ }
225
+ async function computeSubresourceIntegrity(url) {
226
+ const response = await fetch(url, { cache: "no-store" });
227
+ if (!response.ok) throw new Error(`fetching the bundle returned ${response.status}`);
228
+ const buffer = await response.arrayBuffer();
229
+ const digest = await crypto.subtle.digest("SHA-384", buffer);
230
+ return `sha384-${toBase64(new Uint8Array(digest))}`;
231
+ }
232
+ function resolveClientEntryUrl(url) {
233
+ if (/\/remoteEntry(\.[a-f0-9]{8,})?\.js$/.test(url)) return url;
234
+ if (url.endsWith("/mf-manifest.json")) return `${url.replace(/\/mf-manifest\.json$/, "")}/${require_ui_manifest_index.manifest_exports.UI_REMOTE_ENTRY_FILENAME}`;
235
+ return `${url.replace(/\/$/, "")}/${require_ui_manifest_index.manifest_exports.UI_REMOTE_ENTRY_FILENAME}`;
236
+ }
237
+ function resolveServerEntryUrl(url) {
238
+ return `${url.replace(/\/$/, "")}/${require_ui_manifest_index.manifest_exports.UI_REMOTE_SERVER_ENTRY_FILENAME}`;
239
+ }
240
+ function normalizeBundleBaseUrl(url) {
241
+ return url.trim().replace(/\/remoteEntry(\.server)?(\.[a-f0-9]{8,})?\.js$/, "").replace(/\/mf-manifest\.json$/, "");
242
+ }
243
+ async function computeUiEntryIntegrity(baseUrl) {
244
+ return computeSubresourceIntegrity(resolveClientEntryUrl(baseUrl.trim()));
245
+ }
246
+ async function computeSsrEntryIntegrity(baseUrl) {
247
+ return computeSubresourceIntegrity(resolveServerEntryUrl(baseUrl.trim()));
248
+ }
249
+ async function verifyEntryIntegrity(entryUrl, expected) {
250
+ try {
251
+ const computed = await computeSubresourceIntegrity(entryUrl);
252
+ return computed === expected ? { status: "match" } : {
253
+ status: "mismatch",
254
+ computed
255
+ };
256
+ } catch (error) {
257
+ return {
258
+ status: "unverified",
259
+ reason: error instanceof Error ? error.message : String(error)
260
+ };
261
+ }
262
+ }
263
+ async function verifyUiIntegrity(baseUrl, expected) {
264
+ return verifyEntryIntegrity(resolveClientEntryUrl(baseUrl.trim()), expected);
265
+ }
266
+ /**
267
+ * Pin preflight: fetch the pinned version-manifest document and SRI-compare it
268
+ * against the pin — the manifest's own `entryIntegrity` covers the entry bytes
269
+ * at serve time.
270
+ */
271
+ async function verifyUiPin(baseUrl, pin) {
272
+ return verifyEntryIntegrity(`${baseUrl.trim().replace(/\/$/, "")}/${pin.manifest.replace(/^\//, "")}`, pin.integrity);
273
+ }
274
+ async function verifySsrIntegrity(baseUrl, expected) {
275
+ return verifyEntryIntegrity(resolveServerEntryUrl(baseUrl.trim()), expected);
276
+ }
277
+
278
+ //#endregion
279
+ exports.INTEGRITY_PATTERN = INTEGRITY_PATTERN;
280
+ exports.buildDraftFromResolvedConfig = buildDraftFromResolvedConfig;
281
+ exports.buildTenantUrl = buildTenantUrl;
282
+ exports.computeSsrEntryIntegrity = computeSsrEntryIntegrity;
283
+ exports.computeSubresourceIntegrity = computeSubresourceIntegrity;
284
+ exports.computeUiEntryIntegrity = computeUiEntryIntegrity;
285
+ exports.createTenantConfigDraftSchema = createTenantConfigDraftSchema;
286
+ exports.defaultTenantConfigDraftMessages = defaultTenantConfigDraftMessages;
287
+ exports.diffDraft = diffDraft;
288
+ exports.draftUiOverride = draftUiOverride;
289
+ exports.emptyTenantConfigDraft = emptyTenantConfigDraft;
290
+ exports.gatewayForAccount = gatewayForAccount;
291
+ exports.isLocalHostname = isLocalHostname;
292
+ exports.normalizeBundleBaseUrl = normalizeBundleBaseUrl;
293
+ exports.resolveClientEntryUrl = resolveClientEntryUrl;
294
+ exports.resolveServerEntryUrl = resolveServerEntryUrl;
295
+ exports.tenantConfigDraftSchema = tenantConfigDraftSchema;
296
+ exports.tenantLabel = tenantLabel;
297
+ exports.verifySsrIntegrity = verifySsrIntegrity;
298
+ exports.verifyUiIntegrity = verifyUiIntegrity;
299
+ exports.verifyUiPin = verifyUiPin;
300
+ //# sourceMappingURL=tenant.cjs.map