@nifrajs/web 3.3.0 → 4.0.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 (407) hide show
  1. package/dist/backend-only.d.ts +15 -0
  2. package/dist/backend-only.d.ts.map +1 -0
  3. package/dist/backend-only.js +16 -0
  4. package/dist/backend-only.js.map +1 -0
  5. package/dist/boundary.d.ts +5 -0
  6. package/dist/boundary.d.ts.map +1 -1
  7. package/dist/boundary.js +11 -2
  8. package/dist/boundary.js.map +1 -1
  9. package/dist/build-plan.d.ts +35 -6
  10. package/dist/build-plan.d.ts.map +1 -1
  11. package/dist/build-plan.js +89 -35
  12. package/dist/build-plan.js.map +1 -1
  13. package/dist/build-vite.d.ts +18 -0
  14. package/dist/build-vite.d.ts.map +1 -1
  15. package/dist/build-vite.js +97 -17
  16. package/dist/build-vite.js.map +1 -1
  17. package/dist/build.d.ts +72 -23
  18. package/dist/build.d.ts.map +1 -1
  19. package/dist/build.js +411 -98
  20. package/dist/build.js.map +1 -1
  21. package/dist/bun-dev-entry.d.ts +1 -1
  22. package/dist/bun-dev-entry.js +1 -1
  23. package/dist/cdn.d.ts +74 -0
  24. package/dist/cdn.d.ts.map +1 -0
  25. package/dist/cdn.js +132 -0
  26. package/dist/cdn.js.map +1 -0
  27. package/dist/client.d.ts +21 -1
  28. package/dist/client.d.ts.map +1 -1
  29. package/dist/client.js +226 -15
  30. package/dist/client.js.map +1 -1
  31. package/dist/conformance.d.ts +4 -3
  32. package/dist/conformance.d.ts.map +1 -1
  33. package/dist/conformance.js +12 -3
  34. package/dist/conformance.js.map +1 -1
  35. package/dist/csp.d.ts +93 -0
  36. package/dist/csp.d.ts.map +1 -0
  37. package/dist/csp.js +122 -0
  38. package/dist/csp.js.map +1 -0
  39. package/dist/css-contract.d.ts +21 -0
  40. package/dist/css-contract.d.ts.map +1 -0
  41. package/dist/css-contract.js +28 -0
  42. package/dist/css-contract.js.map +1 -0
  43. package/dist/dev-client.d.ts +76 -0
  44. package/dist/dev-client.d.ts.map +1 -0
  45. package/dist/dev-client.js +280 -0
  46. package/dist/dev-client.js.map +1 -0
  47. package/dist/dev-diagnostics.d.ts +26 -2
  48. package/dist/dev-diagnostics.d.ts.map +1 -1
  49. package/dist/dev-diagnostics.js +38 -7
  50. package/dist/dev-diagnostics.js.map +1 -1
  51. package/dist/dev-error.d.ts +4 -13
  52. package/dist/dev-error.d.ts.map +1 -1
  53. package/dist/dev-error.js +46 -4
  54. package/dist/dev-error.js.map +1 -1
  55. package/dist/dev-feed.d.ts +298 -0
  56. package/dist/dev-feed.d.ts.map +1 -0
  57. package/dist/dev-feed.js +797 -0
  58. package/dist/dev-feed.js.map +1 -0
  59. package/dist/dev-indicator.d.ts +38 -0
  60. package/dist/dev-indicator.d.ts.map +1 -0
  61. package/dist/dev-indicator.js +93 -0
  62. package/dist/dev-indicator.js.map +1 -0
  63. package/dist/dev-session.d.ts +77 -0
  64. package/dist/dev-session.d.ts.map +1 -0
  65. package/dist/dev-session.js +580 -0
  66. package/dist/dev-session.js.map +1 -0
  67. package/dist/dev-sourcemap.d.ts +27 -0
  68. package/dist/dev-sourcemap.d.ts.map +1 -0
  69. package/dist/dev-sourcemap.js +235 -0
  70. package/dist/dev-sourcemap.js.map +1 -0
  71. package/dist/dev-ssr-graph.d.ts.map +1 -1
  72. package/dist/dev-ssr-graph.js +13 -5
  73. package/dist/dev-ssr-graph.js.map +1 -1
  74. package/dist/dev.d.ts +15 -2
  75. package/dist/dev.d.ts.map +1 -1
  76. package/dist/dev.js +69 -44
  77. package/dist/dev.js.map +1 -1
  78. package/dist/diagnostic-catalog.d.ts +35 -0
  79. package/dist/diagnostic-catalog.d.ts.map +1 -0
  80. package/dist/diagnostic-catalog.js +203 -0
  81. package/dist/diagnostic-catalog.js.map +1 -0
  82. package/dist/diagnostic-prompt.d.ts +49 -0
  83. package/dist/diagnostic-prompt.d.ts.map +1 -0
  84. package/dist/diagnostic-prompt.js +303 -0
  85. package/dist/diagnostic-prompt.js.map +1 -0
  86. package/dist/diagnostic.d.ts +17 -23
  87. package/dist/diagnostic.d.ts.map +1 -1
  88. package/dist/diagnostic.js +31 -39
  89. package/dist/diagnostic.js.map +1 -1
  90. package/dist/draft.d.ts.map +1 -1
  91. package/dist/draft.js +4 -1
  92. package/dist/draft.js.map +1 -1
  93. package/dist/fn.d.ts +5 -0
  94. package/dist/fn.d.ts.map +1 -1
  95. package/dist/fn.js +13 -3
  96. package/dist/fn.js.map +1 -1
  97. package/dist/fs.d.ts.map +1 -1
  98. package/dist/fs.js +4 -2
  99. package/dist/fs.js.map +1 -1
  100. package/dist/index.d.ts +15 -15
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +13 -12
  103. package/dist/index.js.map +1 -1
  104. package/dist/internal/cdn/cloudflare.d.ts +48 -0
  105. package/dist/internal/cdn/cloudflare.d.ts.map +1 -0
  106. package/dist/internal/cdn/cloudflare.js +94 -0
  107. package/dist/internal/cdn/cloudflare.js.map +1 -0
  108. package/dist/internal/cdn/core.d.ts +91 -0
  109. package/dist/internal/cdn/core.d.ts.map +1 -0
  110. package/dist/internal/cdn/core.js +220 -0
  111. package/dist/internal/cdn/core.js.map +1 -0
  112. package/dist/internal/cdn/fastly.d.ts +17 -0
  113. package/dist/internal/cdn/fastly.d.ts.map +1 -0
  114. package/dist/internal/cdn/fastly.js +43 -0
  115. package/dist/internal/cdn/fastly.js.map +1 -0
  116. package/dist/internal/cdn/vercel.d.ts +31 -0
  117. package/dist/internal/cdn/vercel.d.ts.map +1 -0
  118. package/dist/internal/cdn/vercel.js +56 -0
  119. package/dist/internal/cdn/vercel.js.map +1 -0
  120. package/dist/internal/code-unit-order.d.ts +4 -0
  121. package/dist/internal/code-unit-order.d.ts.map +1 -0
  122. package/dist/internal/code-unit-order.js +6 -0
  123. package/dist/internal/code-unit-order.js.map +1 -0
  124. package/dist/internal/codegen.d.ts +3 -0
  125. package/dist/internal/codegen.d.ts.map +1 -1
  126. package/dist/internal/codegen.js +151 -30
  127. package/dist/internal/codegen.js.map +1 -1
  128. package/dist/internal/dev-csp.d.ts +24 -0
  129. package/dist/internal/dev-csp.d.ts.map +1 -0
  130. package/dist/internal/dev-csp.js +160 -0
  131. package/dist/internal/dev-csp.js.map +1 -0
  132. package/dist/internal/dev-reserved.d.ts +25 -0
  133. package/dist/internal/dev-reserved.d.ts.map +1 -0
  134. package/dist/internal/dev-reserved.js +39 -0
  135. package/dist/internal/dev-reserved.js.map +1 -0
  136. package/dist/internal/html-spans.d.ts +10 -0
  137. package/dist/internal/html-spans.d.ts.map +1 -0
  138. package/dist/internal/html-spans.js +46 -0
  139. package/dist/internal/html-spans.js.map +1 -0
  140. package/dist/internal/loading-runtime.d.ts +44 -0
  141. package/dist/internal/loading-runtime.d.ts.map +1 -0
  142. package/dist/internal/loading-runtime.js +206 -0
  143. package/dist/internal/loading-runtime.js.map +1 -0
  144. package/dist/internal/matches-runtime.d.ts +8 -0
  145. package/dist/internal/matches-runtime.d.ts.map +1 -0
  146. package/dist/internal/matches-runtime.js +61 -0
  147. package/dist/internal/matches-runtime.js.map +1 -0
  148. package/dist/internal/mount-shadow.d.ts +36 -0
  149. package/dist/internal/mount-shadow.d.ts.map +1 -0
  150. package/dist/internal/mount-shadow.js +65 -0
  151. package/dist/internal/mount-shadow.js.map +1 -0
  152. package/dist/internal/node-builtins.d.ts +3 -0
  153. package/dist/internal/node-builtins.d.ts.map +1 -0
  154. package/dist/internal/node-builtins.js +79 -0
  155. package/dist/internal/node-builtins.js.map +1 -0
  156. package/dist/internal/output-guard.d.ts +65 -0
  157. package/dist/internal/output-guard.d.ts.map +1 -0
  158. package/dist/internal/output-guard.js +630 -0
  159. package/dist/internal/output-guard.js.map +1 -0
  160. package/dist/internal/page-execution.d.ts +69 -0
  161. package/dist/internal/page-execution.d.ts.map +1 -0
  162. package/dist/internal/page-execution.js +1021 -0
  163. package/dist/internal/page-execution.js.map +1 -0
  164. package/dist/internal/parity.d.ts +21 -0
  165. package/dist/internal/parity.d.ts.map +1 -1
  166. package/dist/internal/parity.js +104 -22
  167. package/dist/internal/parity.js.map +1 -1
  168. package/dist/internal/private-env.d.ts +12 -0
  169. package/dist/internal/private-env.d.ts.map +1 -0
  170. package/dist/internal/private-env.js +335 -0
  171. package/dist/internal/private-env.js.map +1 -0
  172. package/dist/internal/public-url.d.ts +3 -0
  173. package/dist/internal/public-url.d.ts.map +1 -0
  174. package/dist/internal/public-url.js +18 -0
  175. package/dist/internal/public-url.js.map +1 -0
  176. package/dist/internal/render-document.d.ts +37 -21
  177. package/dist/internal/render-document.d.ts.map +1 -1
  178. package/dist/internal/render-document.js +104 -65
  179. package/dist/internal/render-document.js.map +1 -1
  180. package/dist/internal/request-url.d.ts +3 -0
  181. package/dist/internal/request-url.d.ts.map +1 -0
  182. package/dist/internal/request-url.js +14 -0
  183. package/dist/internal/request-url.js.map +1 -0
  184. package/dist/internal/response-controls.d.ts +75 -0
  185. package/dist/internal/response-controls.d.ts.map +1 -0
  186. package/dist/internal/response-controls.js +256 -0
  187. package/dist/internal/response-controls.js.map +1 -0
  188. package/dist/internal/runtime-contract.d.ts +11 -16
  189. package/dist/internal/runtime-contract.d.ts.map +1 -1
  190. package/dist/internal/runtime-contract.js.map +1 -1
  191. package/dist/internal/secret-scan.d.ts +104 -0
  192. package/dist/internal/secret-scan.d.ts.map +1 -0
  193. package/dist/internal/secret-scan.js +485 -0
  194. package/dist/internal/secret-scan.js.map +1 -0
  195. package/dist/internal/server-boundary.d.ts +6 -29
  196. package/dist/internal/server-boundary.d.ts.map +1 -1
  197. package/dist/internal/server-boundary.js +6 -66
  198. package/dist/internal/server-boundary.js.map +1 -1
  199. package/dist/internal/source-map.d.ts +47 -0
  200. package/dist/internal/source-map.d.ts.map +1 -0
  201. package/dist/internal/source-map.js +225 -0
  202. package/dist/internal/source-map.js.map +1 -0
  203. package/dist/internal/target-compat.d.ts +27 -0
  204. package/dist/internal/target-compat.d.ts.map +1 -0
  205. package/dist/internal/target-compat.js +77 -0
  206. package/dist/internal/target-compat.js.map +1 -0
  207. package/dist/internal/timing-safe-equal.d.ts +6 -0
  208. package/dist/internal/timing-safe-equal.d.ts.map +1 -1
  209. package/dist/internal/timing-safe-equal.js +10 -0
  210. package/dist/internal/timing-safe-equal.js.map +1 -1
  211. package/dist/internal/vitals-runtime.d.ts +18 -0
  212. package/dist/internal/vitals-runtime.d.ts.map +1 -0
  213. package/dist/internal/vitals-runtime.js +38 -0
  214. package/dist/internal/vitals-runtime.js.map +1 -0
  215. package/dist/internal/web-app.d.ts +56 -8
  216. package/dist/internal/web-app.d.ts.map +1 -1
  217. package/dist/internal/web-app.js +215 -772
  218. package/dist/internal/web-app.js.map +1 -1
  219. package/dist/internal/zone-graph.d.ts +89 -0
  220. package/dist/internal/zone-graph.d.ts.map +1 -0
  221. package/dist/internal/zone-graph.js +492 -0
  222. package/dist/internal/zone-graph.js.map +1 -0
  223. package/dist/isr.d.ts +83 -6
  224. package/dist/isr.d.ts.map +1 -1
  225. package/dist/isr.js +301 -39
  226. package/dist/isr.js.map +1 -1
  227. package/dist/llms-txt.d.ts +3 -0
  228. package/dist/llms-txt.d.ts.map +1 -1
  229. package/dist/llms-txt.js +37 -9
  230. package/dist/llms-txt.js.map +1 -1
  231. package/dist/manifest.d.ts +221 -14
  232. package/dist/manifest.d.ts.map +1 -1
  233. package/dist/manifest.js +386 -9
  234. package/dist/manifest.js.map +1 -1
  235. package/dist/module-graph.d.ts +26 -5
  236. package/dist/module-graph.d.ts.map +1 -1
  237. package/dist/module-graph.js +17 -7
  238. package/dist/module-graph.js.map +1 -1
  239. package/dist/navigation.d.ts +17 -3
  240. package/dist/navigation.d.ts.map +1 -1
  241. package/dist/navigation.js +11 -5
  242. package/dist/navigation.js.map +1 -1
  243. package/dist/nonce.d.ts +47 -0
  244. package/dist/nonce.d.ts.map +1 -0
  245. package/dist/nonce.js +63 -0
  246. package/dist/nonce.js.map +1 -0
  247. package/dist/plugins/css-modules.d.ts.map +1 -1
  248. package/dist/plugins/css-modules.js +4 -3
  249. package/dist/plugins/css-modules.js.map +1 -1
  250. package/dist/plugins/kit.d.ts +9 -0
  251. package/dist/plugins/kit.d.ts.map +1 -1
  252. package/dist/plugins/kit.js +18 -0
  253. package/dist/plugins/kit.js.map +1 -1
  254. package/dist/plugins/svg.d.ts +22 -3
  255. package/dist/plugins/svg.d.ts.map +1 -1
  256. package/dist/plugins/svg.js +112 -1
  257. package/dist/plugins/svg.js.map +1 -1
  258. package/dist/plugins/vite-leak-guard.d.ts +107 -3
  259. package/dist/plugins/vite-leak-guard.d.ts.map +1 -1
  260. package/dist/plugins/vite-leak-guard.js +378 -17
  261. package/dist/plugins/vite-leak-guard.js.map +1 -1
  262. package/dist/plugins/vite-zone-guard.d.ts +61 -0
  263. package/dist/plugins/vite-zone-guard.d.ts.map +1 -0
  264. package/dist/plugins/vite-zone-guard.js +208 -0
  265. package/dist/plugins/vite-zone-guard.js.map +1 -0
  266. package/dist/plugins/zone-guard.d.ts +27 -0
  267. package/dist/plugins/zone-guard.d.ts.map +1 -0
  268. package/dist/plugins/zone-guard.js +72 -0
  269. package/dist/plugins/zone-guard.js.map +1 -0
  270. package/dist/prerender.d.ts +10 -0
  271. package/dist/prerender.d.ts.map +1 -1
  272. package/dist/prerender.js +35 -3
  273. package/dist/prerender.js.map +1 -1
  274. package/dist/public-dir.d.ts +9 -0
  275. package/dist/public-dir.d.ts.map +1 -1
  276. package/dist/public-dir.js +131 -48
  277. package/dist/public-dir.js.map +1 -1
  278. package/dist/pwa-manifest.d.ts +68 -0
  279. package/dist/pwa-manifest.d.ts.map +1 -0
  280. package/dist/pwa-manifest.js +178 -0
  281. package/dist/pwa-manifest.js.map +1 -0
  282. package/dist/query.js +4 -4
  283. package/dist/query.js.map +1 -1
  284. package/dist/render-seam.d.ts +42 -2
  285. package/dist/render-seam.d.ts.map +1 -1
  286. package/dist/render-seam.js +6 -0
  287. package/dist/render-seam.js.map +1 -1
  288. package/dist/route-manifest.d.ts +3 -0
  289. package/dist/route-manifest.d.ts.map +1 -1
  290. package/dist/route-manifest.js +26 -3
  291. package/dist/route-manifest.js.map +1 -1
  292. package/dist/route-types.d.ts +24 -0
  293. package/dist/route-types.d.ts.map +1 -0
  294. package/dist/route-types.js +195 -0
  295. package/dist/route-types.js.map +1 -0
  296. package/dist/router.d.ts +28 -6
  297. package/dist/router.d.ts.map +1 -1
  298. package/dist/router.js +129 -40
  299. package/dist/router.js.map +1 -1
  300. package/dist/trusted-html.d.ts +34 -0
  301. package/dist/trusted-html.d.ts.map +1 -0
  302. package/dist/trusted-html.js +35 -0
  303. package/dist/trusted-html.js.map +1 -0
  304. package/dist/vitals.d.ts +33 -0
  305. package/dist/vitals.d.ts.map +1 -0
  306. package/dist/vitals.js +16 -0
  307. package/dist/vitals.js.map +1 -0
  308. package/dist/vite.d.ts +16 -1
  309. package/dist/vite.d.ts.map +1 -1
  310. package/dist/vite.js +187 -36
  311. package/dist/vite.js.map +1 -1
  312. package/dist/zones.d.ts +70 -0
  313. package/dist/zones.d.ts.map +1 -0
  314. package/dist/zones.js +365 -0
  315. package/dist/zones.js.map +1 -0
  316. package/package.json +67 -14
  317. package/src/backend-only.ts +16 -0
  318. package/src/boundary.ts +18 -5
  319. package/src/build-plan.ts +113 -36
  320. package/src/build-vite.ts +124 -15
  321. package/src/build.ts +535 -102
  322. package/src/bun-dev-entry.ts +1 -1
  323. package/src/cdn.ts +216 -0
  324. package/src/client.ts +251 -18
  325. package/src/conformance.ts +16 -3
  326. package/src/csp.ts +194 -0
  327. package/src/css-contract.ts +44 -0
  328. package/src/dev-client.ts +349 -0
  329. package/src/dev-diagnostics.ts +60 -7
  330. package/src/dev-error.ts +49 -5
  331. package/src/dev-feed.ts +1140 -0
  332. package/src/dev-indicator.ts +113 -0
  333. package/src/dev-session.ts +729 -0
  334. package/src/dev-sourcemap.ts +281 -0
  335. package/src/dev-ssr-graph.ts +16 -5
  336. package/src/dev.ts +86 -43
  337. package/src/diagnostic-catalog.ts +243 -0
  338. package/src/diagnostic-prompt.ts +355 -0
  339. package/src/diagnostic.ts +63 -66
  340. package/src/draft.ts +4 -1
  341. package/src/fn.ts +19 -3
  342. package/src/fs.ts +13 -2
  343. package/src/index.ts +57 -10
  344. package/src/internal/cdn/cloudflare.ts +146 -0
  345. package/src/internal/cdn/core.ts +316 -0
  346. package/src/internal/cdn/fastly.ts +62 -0
  347. package/src/internal/cdn/vercel.ts +95 -0
  348. package/src/internal/code-unit-order.ts +5 -0
  349. package/src/internal/codegen.ts +180 -29
  350. package/src/internal/dev-csp.ts +176 -0
  351. package/src/internal/dev-reserved.ts +52 -0
  352. package/src/internal/html-spans.ts +50 -0
  353. package/src/internal/loading-runtime.ts +244 -0
  354. package/src/internal/matches-runtime.ts +62 -0
  355. package/src/internal/mount-shadow.ts +88 -0
  356. package/src/internal/node-builtins.ts +79 -0
  357. package/src/internal/output-guard.ts +701 -0
  358. package/src/internal/page-execution.ts +1371 -0
  359. package/src/internal/parity.ts +150 -36
  360. package/src/internal/private-env.ts +334 -0
  361. package/src/internal/public-url.ts +22 -0
  362. package/src/internal/render-document.ts +153 -73
  363. package/src/internal/request-url.ts +14 -0
  364. package/src/internal/response-controls.ts +284 -0
  365. package/src/internal/runtime-contract.ts +10 -15
  366. package/src/internal/secret-scan.ts +623 -0
  367. package/src/internal/server-boundary.ts +6 -69
  368. package/src/internal/source-map.ts +256 -0
  369. package/src/internal/target-compat.ts +92 -0
  370. package/src/internal/timing-safe-equal.ts +13 -0
  371. package/src/internal/vitals-runtime.ts +53 -0
  372. package/src/internal/web-app.ts +290 -879
  373. package/src/internal/zone-graph.ts +593 -0
  374. package/src/isr.ts +366 -39
  375. package/src/llms-txt.ts +44 -8
  376. package/src/manifest.ts +671 -17
  377. package/src/module-graph.ts +53 -9
  378. package/src/navigation.ts +29 -6
  379. package/src/nonce.ts +104 -0
  380. package/src/plugins/css-modules.ts +5 -3
  381. package/src/plugins/kit.ts +24 -0
  382. package/src/plugins/svg.ts +135 -4
  383. package/src/plugins/vite-leak-guard.ts +529 -16
  384. package/src/plugins/vite-zone-guard.ts +263 -0
  385. package/src/plugins/zone-guard.ts +110 -0
  386. package/src/prerender.ts +49 -3
  387. package/src/public-dir.ts +135 -49
  388. package/src/pwa-manifest.ts +226 -0
  389. package/src/query.ts +4 -4
  390. package/src/render-seam.ts +46 -1
  391. package/src/route-manifest.ts +15 -3
  392. package/src/route-types.ts +264 -0
  393. package/src/router.ts +163 -63
  394. package/src/trusted-html.ts +44 -0
  395. package/src/vitals.ts +44 -0
  396. package/src/vite.ts +207 -36
  397. package/src/zones.ts +430 -0
  398. package/dist/plugins/vite-server-only.d.ts +0 -49
  399. package/dist/plugins/vite-server-only.d.ts.map +0 -1
  400. package/dist/plugins/vite-server-only.js +0 -57
  401. package/dist/plugins/vite-server-only.js.map +0 -1
  402. package/dist/server-only.d.ts +0 -21
  403. package/dist/server-only.d.ts.map +0 -1
  404. package/dist/server-only.js +0 -25
  405. package/dist/server-only.js.map +0 -1
  406. package/src/plugins/vite-server-only.ts +0 -75
  407. package/src/server-only.ts +0 -25
@@ -0,0 +1,485 @@
1
+ /**
2
+ * Secret detection for everything a client build publishes: a heuristic net under the zone rules,
3
+ * not a guarantee. The zone rules keep backend code out of the browser; this catches a credential
4
+ * typed straight into browser code, a library carrying one, and a server-only environment value that
5
+ * reached the output some other way (a `define`, a prerendered page, a copied `public/` file).
6
+ *
7
+ * - Source rules run on the browser build's own modules before minification, while names still exist.
8
+ * - Format rules and private-value matching also run on every emitted file, every `public/` file and
9
+ * every prerendered page and `_data.json`, source maps included.
10
+ *
11
+ * A finding never prints the value it found: only the rule, the location and a redacted preview.
12
+ */
13
+ import { readdirSync, readFileSync, statSync } from "node:fs";
14
+ import { basename, isAbsolute, join, relative } from "node:path";
15
+ import { codeUnitOrder } from "./code-unit-order.js";
16
+ import { isSensitiveFieldName } from "./output-guard.js";
17
+ const RULES = new Set([
18
+ "private-key",
19
+ "credential-url",
20
+ "key-format",
21
+ "assigned-secret",
22
+ "private-env-value",
23
+ ]);
24
+ /** High-precision token formats. Publishable keys (Stripe `pk_`, Google `AIza`, Supabase anon JWTs)
25
+ * are public by design and deliberately absent. */
26
+ const KEY_FORMATS = [
27
+ { what: "AWS access key id", pattern: /\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/g },
28
+ { what: "Stripe secret key", pattern: /\b[sr]k_(?:live|test)_[0-9A-Za-z]{16,}/g },
29
+ { what: "Stripe webhook secret", pattern: /\bwhsec_[0-9A-Za-z+/=]{24,}/g },
30
+ {
31
+ what: "GitHub token",
32
+ pattern: /\b(?:gh[pousr]_[A-Za-z0-9]{36,}|github_pat_[A-Za-z0-9_]{50,})/g,
33
+ },
34
+ { what: "Slack token", pattern: /\bxox[abeoprs]-[A-Za-z0-9-]{10,}/g },
35
+ {
36
+ what: "Slack webhook URL",
37
+ pattern: /https:\/\/hooks\.slack\.com\/services\/T[A-Z0-9]+\/B[A-Z0-9]+\/[A-Za-z0-9]{16,}/g,
38
+ },
39
+ {
40
+ what: "OpenAI API key",
41
+ pattern: /\bsk-(?:(?:proj|svcacct|admin)-[A-Za-z0-9_-]{40,}|[A-Za-z0-9]{20}T3BlbkFJ[A-Za-z0-9]{20})/g,
42
+ },
43
+ { what: "Anthropic API key", pattern: /\bsk-ant-(?:api|admin)\d{2}-[A-Za-z0-9_-]{80,}/g },
44
+ { what: "SendGrid API key", pattern: /\bSG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}\b/g },
45
+ { what: "Twilio API key", pattern: /\bSK[0-9a-f]{32}\b/g },
46
+ { what: "Mailgun API key", pattern: /\bkey-[0-9a-f]{32}\b/g },
47
+ { what: "npm token", pattern: /\bnpm_[A-Za-z0-9]{36}\b/g },
48
+ ];
49
+ /** A PEM block with a body: a parser's bare `-----BEGIN PRIVATE KEY-----` constant is not a key. */
50
+ const PRIVATE_KEY = /-----BEGIN (?:[A-Z0-9]+ )*PRIVATE KEY(?: BLOCK)?-----[A-Za-z0-9+/=\s\\]{64,}?-----END/g;
51
+ const CREDENTIAL_URL = /\b[a-z][a-z0-9+.-]{1,20}:\/\/([^\s/?#@:"'`<>\\]{1,64}):([^\s/?#@"'`<>\\]{3,128})@[^\s/?#"'`<>\\]+/gi;
52
+ const JWT = /\beyJ[A-Za-z0-9_-]{8,}\.(eyJ[A-Za-z0-9_-]{8,})\.[A-Za-z0-9_-]{16,}/g;
53
+ const PLACEHOLDER = /^(?:user(?:name)?|pass(?:word)?|pwd|secret|admin|root|guest|test|demo|example|changeme|change-me|xxx+|\*+|\.\.\.+|my-?password|your-?password|<[^>]*>|\$\{[^}]*\}|\{\{[^}]*\}\}|%[A-Za-z_]+%?)$/i;
54
+ /** A literal assigned to a name: `apiKey: "..."`, `const secret = '...'`. Template literals with an
55
+ * interpolation are not literals. The lookbehind starts a name only where an identifier starts: a
56
+ * match from inside a long word run backtracks the rest of that run, quadratic in its length. */
57
+ const ASSIGNED = /(?<![\w$])([A-Za-z_$][\w$]*)["']?\s*(?:[:=]|\?\?=|\|\|=)\s*(?:"([^"\\\r\n]{16,256})"|'([^'\\\r\n]{16,256})'|`([^`\\$\r\n]{16,256})`)/g;
58
+ const EXTRA_SECRET_NAME = /(?:accesskey|signingkey|encryptionkey|masterkey|serviceaccountkey|connectionstring)$/;
59
+ /** Values that look like keys but are public by design. */
60
+ const PUBLIC_VALUE = /^(?:AIza[0-9A-Za-z_-]{35}|pk_(?:live|test)_[0-9A-Za-z]+|6L[0-9A-Za-z_-]{38}|G-[A-Z0-9]{6,}|UA-\d+-\d+)$/;
61
+ /** Shannon entropy in bits per character. */
62
+ function entropy(value) {
63
+ const counts = new Map();
64
+ for (const char of value)
65
+ counts.set(char, (counts.get(char) ?? 0) + 1);
66
+ let bits = 0;
67
+ for (const count of counts.values()) {
68
+ const p = count / value.length;
69
+ bits -= p * Math.log2(p);
70
+ }
71
+ return bits;
72
+ }
73
+ /** Random-looking: long, unbroken, mixed character classes, high entropy. Excludes paths and URLs. */
74
+ function looksRandom(value, minLength) {
75
+ if (value.length < minLength || /\s/.test(value))
76
+ return false;
77
+ if (/^(?:[/~.]|[A-Za-z]:[\\/])/.test(value) || /^[a-z][a-z0-9+.-]*:\/\//i.test(value))
78
+ return false;
79
+ const classes = Number(/[a-z]/.test(value)) +
80
+ Number(/[A-Z]/.test(value)) +
81
+ Number(/[0-9]/.test(value)) +
82
+ Number(/[^A-Za-z0-9]/.test(value));
83
+ return classes >= 2 && entropy(value) >= 3.5;
84
+ }
85
+ function jwtRole(payload) {
86
+ try {
87
+ const json = atob(payload.replaceAll("-", "+").replaceAll("_", "/"));
88
+ return JSON.parse(json).role;
89
+ }
90
+ catch {
91
+ return undefined;
92
+ }
93
+ }
94
+ function formatMatches(text) {
95
+ const matches = [];
96
+ for (const { what, pattern } of KEY_FORMATS) {
97
+ for (const found of text.matchAll(pattern)) {
98
+ matches.push({ rule: "key-format", index: found.index, text: found[0], what });
99
+ }
100
+ }
101
+ for (const found of text.matchAll(JWT)) {
102
+ // A Supabase-style service key: a JWT whose role bypasses row-level security.
103
+ if (jwtRole(found[1] ?? "") === "service_role") {
104
+ matches.push({
105
+ rule: "key-format",
106
+ index: found.index,
107
+ text: found[0],
108
+ what: "service-role JWT",
109
+ });
110
+ }
111
+ }
112
+ for (const found of text.matchAll(PRIVATE_KEY)) {
113
+ matches.push({ rule: "private-key", index: found.index, text: found[0], what: "private key" });
114
+ }
115
+ for (const found of text.matchAll(CREDENTIAL_URL)) {
116
+ const user = found[1] ?? "";
117
+ const password = found[2] ?? "";
118
+ // @nifra-gate-reviewed: a password equal to its user name is a placeholder in the text being
119
+ // scanned; nothing is authenticated here.
120
+ if (PLACEHOLDER.test(password) || password === user || /[${}<>*]/.test(password))
121
+ continue;
122
+ matches.push({
123
+ rule: "credential-url",
124
+ index: found.index,
125
+ text: found[0],
126
+ what: "URL with a password",
127
+ });
128
+ }
129
+ return matches;
130
+ }
131
+ function assignedMatches(text) {
132
+ const matches = [];
133
+ for (const found of text.matchAll(ASSIGNED)) {
134
+ const name = found[1] ?? "";
135
+ if (!isSensitiveFieldName(name) && !EXTRA_SECRET_NAME.test(name.toLowerCase()))
136
+ continue;
137
+ const value = found[2] ?? found[3] ?? found[4] ?? "";
138
+ if (PUBLIC_VALUE.test(value) || PLACEHOLDER.test(value) || !looksRandom(value, 16))
139
+ continue;
140
+ matches.push({
141
+ rule: "assigned-secret",
142
+ index: found.index + found[0].indexOf(value),
143
+ text: value,
144
+ what: `literal assigned to "${name}"`,
145
+ });
146
+ }
147
+ return matches;
148
+ }
149
+ // Environment variables a shell, an OS or a CI system sets: none is an app secret unless its name
150
+ // says so (`GITHUB_TOKEN`, `VERCEL_OIDC_TOKEN`).
151
+ const AMBIENT_ENV = /^(?:PATH|HOME|PWD|OLDPWD|SHELL|USER|LOGNAME|TMPDIR|TMP|TEMP|LANG|LANGUAGE|EDITOR|VISUAL|PAGER|HOSTNAME|SHLVL|DISPLAY|MANPATH|INFOPATH|COLORTERM|COMMAND_MODE|_|(?:LC|NPM|npm|BUN|NODE|XPC|TERM|__CF|HOMEBREW|SSH|GPG|ITERM|VSCODE|JAVA|ANDROID|CONDA|PYENV|NVM|ZSH|GITHUB|RUNNER|CI|VERCEL|CF_PAGES|NETLIFY|RENDER|RAILWAY|FLY|CLAUDE|CLAUDECODE|GIT|DENO|PNPM|YARN)(?:_.*)?)$/;
152
+ const SECRET_ENV_TOKENS = new Set([
153
+ "SECRET",
154
+ "SECRETS",
155
+ "TOKEN",
156
+ "PASSWORD",
157
+ "PASSWD",
158
+ "PASS",
159
+ "PRIVATE",
160
+ "CREDENTIAL",
161
+ "CREDENTIALS",
162
+ "APIKEY",
163
+ "KEY",
164
+ "DSN",
165
+ "SALT",
166
+ "PEPPER",
167
+ "WEBHOOK",
168
+ ]);
169
+ const CONNECTION_ENV = /(?:DATABASE|DB|REDIS|MONGO(?:DB)?|POSTGRES(?:QL)?|PG|MYSQL|AMQP|RABBITMQ)_?(?:URL|URI)$|CONNECTION_?STRING/;
170
+ const secretEnvName = (name) => CONNECTION_ENV.test(name.toUpperCase()) ||
171
+ name
172
+ .toUpperCase()
173
+ .split(/[^A-Z0-9]+/)
174
+ .some((token) => SECRET_ENV_TOKENS.has(token));
175
+ function base64Variants(value) {
176
+ const bytes = new TextEncoder().encode(value);
177
+ const variants = [];
178
+ // A value inside a larger encoded blob lands at one of three byte alignments. Keep only the
179
+ // characters the value's own bytes determine: none that mix in a neighbour or the padding.
180
+ for (const shift of [0, 1, 2]) {
181
+ const shifted = new Uint8Array(shift + bytes.length);
182
+ shifted.set(bytes, shift);
183
+ let binary = "";
184
+ for (const byte of shifted)
185
+ binary += String.fromCharCode(byte);
186
+ const encoded = btoa(binary);
187
+ const core = encoded.slice(shift === 0 ? 0 : shift + 1, Math.floor(shifted.length / 3) * 4);
188
+ if (core.length >= 8) {
189
+ variants.push(core);
190
+ const url = core.replaceAll("+", "-").replaceAll("/", "_");
191
+ if (url !== core)
192
+ variants.push(url);
193
+ }
194
+ }
195
+ return variants;
196
+ }
197
+ /** The non-public values a build must not publish, in every encoding a page or bundle carries. */
198
+ function envNeedles(env, prefix) {
199
+ const publicValues = new Set();
200
+ if (prefix !== "") {
201
+ for (const [name, value] of Object.entries(env)) {
202
+ if (name.startsWith(prefix) && value !== undefined)
203
+ publicValues.add(value);
204
+ }
205
+ }
206
+ const needles = [];
207
+ for (const [name, value] of Object.entries(env)) {
208
+ if (value === undefined || value.length < 8 || (prefix !== "" && name.startsWith(prefix))) {
209
+ continue;
210
+ }
211
+ // The same value published under a public name is public by declaration.
212
+ if (publicValues.has(value))
213
+ continue;
214
+ const named = secretEnvName(name);
215
+ if (!named && AMBIENT_ENV.test(name))
216
+ continue;
217
+ const credentialUrl = /^[a-z][a-z0-9+.-]*:\/\/[^/@\s]+:[^/@\s]+@/i.test(value);
218
+ if (!named && !credentialUrl && !looksRandom(value, 20))
219
+ continue;
220
+ const forms = [["raw", value]];
221
+ const add = (form, encoded) => {
222
+ if (encoded !== value && !forms.some(([, existing]) => existing === encoded)) {
223
+ forms.push([form, encoded]);
224
+ }
225
+ };
226
+ add("URL-encoded", encodeURIComponent(value));
227
+ add("JSON-escaped", JSON.stringify(value).slice(1, -1));
228
+ add("HTML-escaped", value
229
+ .replaceAll("&", "&amp;")
230
+ .replaceAll("<", "&lt;")
231
+ .replaceAll(">", "&gt;")
232
+ .replaceAll('"', "&quot;"));
233
+ for (const encoded of base64Variants(value))
234
+ add("base64", encoded);
235
+ for (const [form, needle] of forms)
236
+ needles.push({ env: name, form, needle });
237
+ }
238
+ return needles;
239
+ }
240
+ function envMatches(text, needles) {
241
+ const matches = [];
242
+ for (const { env, form, needle } of needles) {
243
+ const index = text.indexOf(needle);
244
+ if (index === -1)
245
+ continue;
246
+ matches.push({
247
+ rule: "private-env-value",
248
+ index,
249
+ text: needle,
250
+ what: `value of ${env}${form === "raw" ? "" : ` (${form})`}`,
251
+ env,
252
+ });
253
+ }
254
+ return matches;
255
+ }
256
+ const lineOf = (text, index) => {
257
+ let line = 1;
258
+ for (let i = text.indexOf("\n"); i !== -1 && i < index; i = text.indexOf("\n", i + 1))
259
+ line++;
260
+ return line;
261
+ };
262
+ const preview = (match) => match.rule === "private-env-value"
263
+ ? `${match.text.length} chars`
264
+ : `${match.text.slice(0, 4)}... (${match.text.length} chars)`;
265
+ /** Refuse an exemption that does not name its rule, its location and its reason. */
266
+ export function assertSecretExemptions(exemptions) {
267
+ exemptions.forEach((exemption, i) => {
268
+ const where = `secretExemptions[${i}]`;
269
+ if (!RULES.has(exemption.rule)) {
270
+ throw new Error(`[nifra/web] ${where}.rule must be one of ${[...RULES].join(", ")}; got ${JSON.stringify(exemption.rule)}`);
271
+ }
272
+ if (typeof exemption.reason !== "string" || exemption.reason.trim() === "") {
273
+ throw new Error(`[nifra/web] ${where} needs a reason: why this may reach the browser`);
274
+ }
275
+ const file = typeof exemption.file === "string" && exemption.file !== "";
276
+ const env = typeof exemption.env === "string" && exemption.env !== "";
277
+ if (!file && !(env && exemption.rule === "private-env-value")) {
278
+ throw new Error(`[nifra/web] ${where} must name a file${exemption.rule === "private-env-value" ? " or an env variable" : ""}; an exemption covers one location, never a value everywhere`);
279
+ }
280
+ });
281
+ }
282
+ /**
283
+ * Scan what a build publishes. Sources are scanned first: a match there is reported at its source
284
+ * location, and the same text in an emitted file (where names are hashed) is not reported again,
285
+ * exempted or not.
286
+ */
287
+ export function scanForSecrets(input) {
288
+ const exemptions = input.exemptions ?? [];
289
+ assertSecretExemptions(exemptions);
290
+ const needles = envNeedles(input.env ?? {}, input.publicEnvPrefix ?? "PUBLIC_");
291
+ const seen = new Set();
292
+ const findings = [];
293
+ const exempt = (file, match) => exemptions.some((exemption) => exemption.rule === match.rule &&
294
+ (exemption.file === file || (match.env !== undefined && exemption.env === match.env)));
295
+ const originTexts = new Map();
296
+ const originText = (origin) => {
297
+ if (!originTexts.has(origin.path)) {
298
+ let text;
299
+ try {
300
+ text = readFileSync(origin.path, "utf8");
301
+ }
302
+ catch {
303
+ text = undefined;
304
+ }
305
+ originTexts.set(origin.path, text);
306
+ }
307
+ return originTexts.get(origin.path);
308
+ };
309
+ const scan = (file, isSource) => {
310
+ const matches = [
311
+ ...formatMatches(file.text),
312
+ ...(isSource && file.firstParty === true ? assignedMatches(file.text) : []),
313
+ ...envMatches(file.text, needles),
314
+ ];
315
+ for (const match of matches) {
316
+ const key = `${match.rule}\0${match.text}`;
317
+ if (!isSource && seen.has(key))
318
+ continue;
319
+ seen.add(key);
320
+ let at = { name: file.name, text: file.text, index: match.index };
321
+ for (const origin of file.origins ?? []) {
322
+ const text = originText(origin);
323
+ const index = text?.indexOf(match.text) ?? -1;
324
+ if (text !== undefined && index !== -1) {
325
+ at = { name: origin.name, text, index };
326
+ break;
327
+ }
328
+ }
329
+ if (exempt(at.name, match) || (at.name !== file.name && exempt(file.name, match)))
330
+ continue;
331
+ findings.push({
332
+ rule: match.rule,
333
+ file: at.name,
334
+ line: lineOf(at.text, at.index),
335
+ ...(at.name === file.name ? {} : { via: file.name }),
336
+ what: match.what,
337
+ preview: preview(match),
338
+ });
339
+ }
340
+ };
341
+ for (const file of input.sources ?? [])
342
+ scan(file, true);
343
+ for (const file of input.artifacts ?? [])
344
+ scan(file, false);
345
+ return findings.sort((a, b) => codeUnitOrder(a.file, b.file) || a.line - b.line || codeUnitOrder(a.rule, b.rule));
346
+ }
347
+ const AUTH_SCHEME = /\b(Bearer|Basic|Token)\s+[A-Za-z0-9._~+/=-]{16,}/g;
348
+ const CREDENTIAL_HEADER = /\b(cookie|set-cookie|authorization|proxy-authorization|x-api-key|api-key)(["']?\s*(?:=>|:|=)\s*["'`]?)[^"'`\r\n,}]{8,}/gi;
349
+ /**
350
+ * A scrubber for text a dev tool hands to a person or an agent: logs, error messages, stacks,
351
+ * codeframes. Broader than the build scan because a log line is not a published artifact: every JWT
352
+ * (a session token is a credential), an `Authorization`/`Cookie` value, and every non-public env
353
+ * value in each encoding the build scan matches. Each hit becomes `[redacted:<what>]`.
354
+ */
355
+ export function createRedactor(env, publicEnvPrefix = "PUBLIC_") {
356
+ const needles = envNeedles(env, publicEnvPrefix).sort((a, b) => b.needle.length - a.needle.length);
357
+ return (text) => {
358
+ if (text.length < 8)
359
+ return text;
360
+ let out = text;
361
+ for (const { env: name, needle } of needles) {
362
+ if (out.includes(needle))
363
+ out = out.replaceAll(needle, `[redacted:${name}]`);
364
+ }
365
+ out = out.replace(PRIVATE_KEY, "[redacted:private key]");
366
+ for (const { what, pattern } of KEY_FORMATS)
367
+ out = out.replace(pattern, `[redacted:${what}]`);
368
+ out = out.replace(JWT, "[redacted:JWT]");
369
+ out = out.replace(CREDENTIAL_URL, (match, user, password) =>
370
+ // @nifra-gate-reviewed: the same placeholder test as the scan; nothing is authenticated here.
371
+ PLACEHOLDER.test(password) || password === user
372
+ ? match
373
+ : match.replace(`:${password}@`, ":[redacted]@"));
374
+ out = out.replace(AUTH_SCHEME, "$1 [redacted]");
375
+ return out.replace(CREDENTIAL_HEADER, "$1$2[redacted]");
376
+ };
377
+ }
378
+ /** The build environment: Bun's, else Node's. */
379
+ export const buildEnvironment = () => (typeof Bun !== "undefined" ? Bun.env : undefined) ?? process.env;
380
+ /** Scan and throw the build-failing message on any finding. */
381
+ export function assertNoSecrets(input) {
382
+ const message = formatSecretFindings(scanForSecrets(input));
383
+ if (message !== undefined)
384
+ throw new Error(message);
385
+ }
386
+ /** The build-failing message for secret findings, or `undefined` when there are none. */
387
+ export function formatSecretFindings(findings) {
388
+ if (findings.length === 0)
389
+ return undefined;
390
+ const lines = findings.map((finding) => ` - ${finding.file}:${finding.line}${finding.via === undefined ? "" : ` (in ${finding.via})`} ${finding.what} [${finding.rule}] ${finding.preview}`);
391
+ return [
392
+ "[nifra/web] the build would publish what looks like a credential:",
393
+ ...lines,
394
+ "Keep credentials on the server: read them from the environment in a route's backend half or under",
395
+ "backend/, and rotate any that were committed. A reviewed false positive is exempted in",
396
+ 'nifra.config.ts: export const secretExemptions = [{ rule, file, reason: "why it may ship" }].',
397
+ ].join("\n");
398
+ }
399
+ const INLINE_MAP = /\/[/*]# sourceMappingURL=data:application\/json;(?:charset=[^;,]+;)?base64,([A-Za-z0-9+/=]+)/;
400
+ /** A published file's text, or `undefined` for a binary one (a NUL byte in its first 8 KB). */
401
+ export function textOf(bytes) {
402
+ if (bytes.subarray(0, 8192).includes(0))
403
+ return undefined;
404
+ return new TextDecoder().decode(bytes);
405
+ }
406
+ /** An emitted bundle, plus its inline source map decoded: base64 would hide a key from every rule. */
407
+ export function emittedScanFiles(name, text, origins) {
408
+ const files = [{ name, text, ...(origins ? { origins } : {}) }];
409
+ const inline = INLINE_MAP.exec(text)?.[1];
410
+ if (inline !== undefined) {
411
+ try {
412
+ files.push({ name: `${name} (inline source map)`, text: atob(inline) });
413
+ }
414
+ catch {
415
+ // An unreadable inline map is the output accounting's finding, not this scan's.
416
+ }
417
+ }
418
+ return files;
419
+ }
420
+ /** How a finding names a module: app-relative inside the app, from `node_modules/` for a package. */
421
+ export function originName(appRoot, file) {
422
+ const rel = relative(appRoot, file).replaceAll("\\", "/");
423
+ if (!rel.startsWith("../") && !isAbsolute(rel))
424
+ return rel;
425
+ const at = file.replaceAll("\\", "/").lastIndexOf("/node_modules/");
426
+ return at === -1 ? file : file.replaceAll("\\", "/").slice(at + 1);
427
+ }
428
+ /**
429
+ * The scan's view of a client graph: the first-party browser modules as sources, and for each emitted
430
+ * file (by basename) the modules bundled into it.
431
+ */
432
+ export function graphScanInput(graph, sourceOf, classifier) {
433
+ const sources = [];
434
+ const fileOf = (id) => {
435
+ const source = sourceOf(id);
436
+ return source.kind === "file" ? source.file : undefined;
437
+ };
438
+ for (const id of Object.keys(graph.modules)) {
439
+ const file = fileOf(id);
440
+ if (file === undefined)
441
+ continue;
442
+ const zone = classifier.classify(file).zone;
443
+ if (zone !== "route-frontend" && zone !== "frontend" && zone !== "shared")
444
+ continue;
445
+ let text;
446
+ try {
447
+ text = readFileSync(file, "utf8");
448
+ }
449
+ catch {
450
+ continue;
451
+ }
452
+ sources.push({ name: originName(classifier.appRoot, file), text, firstParty: true });
453
+ }
454
+ const byOutput = new Map();
455
+ for (const [output, chunk] of Object.entries(graph.chunks)) {
456
+ const origins = chunk.modules
457
+ .map(fileOf)
458
+ .filter((file) => file !== undefined)
459
+ .map((path) => ({ name: originName(classifier.appRoot, path), path }));
460
+ byOutput.set(basename(output), origins);
461
+ }
462
+ return { sources, originsOf: (outputName) => byOutput.get(basename(outputName)) ?? [] };
463
+ }
464
+ /** Every file under a `public/` directory, named as the app sees it (`public/robots.txt`). */
465
+ export function publicScanFiles(dir, label) {
466
+ const files = [];
467
+ for (const entry of readdirSync(dir, { recursive: true })) {
468
+ const path = join(dir, entry);
469
+ let bytes;
470
+ try {
471
+ if (!statSync(path).isFile())
472
+ continue;
473
+ bytes = readFileSync(path);
474
+ }
475
+ catch {
476
+ continue;
477
+ }
478
+ const text = textOf(bytes);
479
+ if (text !== undefined) {
480
+ files.push({ name: `${label}/${entry.replaceAll("\\", "/")}`, text });
481
+ }
482
+ }
483
+ return files;
484
+ }
485
+ //# sourceMappingURL=secret-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-scan.js","sourceRoot":"","sources":["../../src/internal/secret-scan.ts"],"names":[],"mappings":"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"}
@@ -1,39 +1,16 @@
1
1
  /**
2
- * The server/client boundary, owned in one place.
2
+ * The client-build transforms that every pipeline must apply identically - the Bun client build, the
3
+ * Vite dev server, the Vite production build, and `nifra dev --bun`:
3
4
  *
4
- * The client build must never ship server-only code, or server-only config, to a browser. Three
5
- * conventions enforce that, and each has to mean the SAME thing in every pipeline that builds the client
6
- * - the Bun client build, the Vite dev server, the Vite production build, and `nifra dev --bun`:
7
- *
8
- * - `*.server` modules - emptied, so a secret / `node:` / native import subtree never reaches the client.
9
5
  * - `*.fn` modules - replaced with HTTP stubs, so the function bodies (and their imports) stay server-side.
10
6
  * - public-env prefix - which environment variables the client bundle is allowed to inline.
11
7
  *
12
- * When each pipeline re-encoded one of these rules, they drifted. A hand-written glob
13
- * `**\/*.server.{ts,tsx,js,jsx}` missed the extensionless `db.server` and the `.mts`/`.cts`/`.mjs`/`.cjs`
14
- * forms the regex matches, waving a module the build empties straight into the browser. So the matchers,
15
- * the replacement bodies, and the env mapping get exactly one definition here; every pipeline imports it,
16
- * and parity tests assert the Bun and Vite halves emit identical bytes. A matcher that decides whether a
17
- * secret can reach a browser gets one owner, not four.
8
+ * Which files may reach a browser at all is the zone classifier's job (`zones.ts`). These two get one
9
+ * definition here so the Bun and Vite halves emit identical bytes; a copied-then-edited second version
10
+ * is how a client that works in dev and 404s in production happens.
18
11
  */
19
- /** Matches `db.server.ts`, `auth.server.tsx`, `x.server.mjs`, and the extensionless `foo.server`. */
20
- export declare const SERVER_ONLY_MODULE: RegExp;
21
- /** Modules whose exports become client stubs. Mirrors the `.server` convention's shape. */
12
+ /** Modules whose exports become client stubs: `todos.fn.ts`, `x.fn.mjs`, or the extensionless `foo.fn`. */
22
13
  export declare const SERVER_FN_MODULE: RegExp;
23
- /**
24
- * The replacement body for an emptied module. A Proxy rather than `export {}` so any named OR default
25
- * import resolves to `undefined` instead of failing the bundle with a missing-export error - the client
26
- * degrades at the call site it wrote, not at link time in a file it never named.
27
- *
28
- * Shared so the Bun and Vite pipelines emit the same bytes; a parity test asserts it.
29
- */
30
- export declare const SERVER_ONLY_REPLACEMENT = "module.exports = new Proxy({}, { get: () => undefined })";
31
- /**
32
- * Vite dev serves native ESM, so the Bun/CommonJS proxy above is invalid there. Emit inert ESM
33
- * bindings derived from the source's public names while discarding the implementation and imports.
34
- * An unsupported exotic export fails closed at ESM link time; server code is never served as fallback.
35
- */
36
- export declare function viteServerOnlyReplacement(source: string): string;
37
14
  /**
38
15
  * The namespace a `*.fn.ts` module is mounted under: its filename without the `.fn` suffix.
39
16
  *
@@ -1 +1 @@
1
- {"version":3,"file":"server-boundary.d.ts","sourceRoot":"","sources":["../../src/internal/server-boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAOH,qGAAqG;AACrG,eAAO,MAAM,kBAAkB,QAA+B,CAAA;AAC9D,2FAA2F;AAC3F,eAAO,MAAM,gBAAgB,QAA2B,CAAA;AAMxD;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,6DAA6D,CAAA;AAQjG;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAyBhE;AA+DD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,+DAA+D;AAC/D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAa5D;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAmC9E;AAMD,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKtE"}
1
+ {"version":3,"file":"server-boundary.d.ts","sourceRoot":"","sources":["../../src/internal/server-boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,2GAA2G;AAC3G,eAAO,MAAM,gBAAgB,QAA2B,CAAA;AAiExD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,+DAA+D;AAC/D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAa5D;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAmC9E;AAMD,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKtE"}