bla-agents 0.0.0-stage → 1.5.3

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 (330) hide show
  1. package/.agents/skills/blind-llm-agents/SKILL.md +56 -0
  2. package/.agents/skills/blind-llm-agents/references/counter-rea-matrix.md +28 -0
  3. package/DISCLAIMER.md +28 -0
  4. package/LICENSE +21 -0
  5. package/README.md +246 -2
  6. package/dist/bundler/index.d.ts +117 -0
  7. package/dist/bundler/index.d.ts.map +1 -0
  8. package/dist/bundler/index.js +167 -0
  9. package/dist/bundler/index.js.map +1 -0
  10. package/dist/cli.d.ts +30 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +447 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/core/config.d.ts +54 -0
  15. package/dist/core/config.d.ts.map +1 -0
  16. package/dist/core/config.js +160 -0
  17. package/dist/core/config.js.map +1 -0
  18. package/dist/core/coverage-contract.d.ts +97 -0
  19. package/dist/core/coverage-contract.d.ts.map +1 -0
  20. package/dist/core/coverage-contract.js +164 -0
  21. package/dist/core/coverage-contract.js.map +1 -0
  22. package/dist/core/debug-posture.d.ts +40 -0
  23. package/dist/core/debug-posture.d.ts.map +1 -0
  24. package/dist/core/debug-posture.js +197 -0
  25. package/dist/core/debug-posture.js.map +1 -0
  26. package/dist/core/detector.d.ts +7 -0
  27. package/dist/core/detector.d.ts.map +1 -0
  28. package/dist/core/detector.js +190 -0
  29. package/dist/core/detector.js.map +1 -0
  30. package/dist/core/identifiers.d.ts +32 -0
  31. package/dist/core/identifiers.d.ts.map +1 -0
  32. package/dist/core/identifiers.js +263 -0
  33. package/dist/core/identifiers.js.map +1 -0
  34. package/dist/core/llm-directives.d.ts +12 -0
  35. package/dist/core/llm-directives.d.ts.map +1 -0
  36. package/dist/core/llm-directives.js +23 -0
  37. package/dist/core/llm-directives.js.map +1 -0
  38. package/dist/core/output-path.d.ts +3 -0
  39. package/dist/core/output-path.d.ts.map +1 -0
  40. package/dist/core/output-path.js +51 -0
  41. package/dist/core/output-path.js.map +1 -0
  42. package/dist/core/prng.d.ts +27 -0
  43. package/dist/core/prng.d.ts.map +1 -0
  44. package/dist/core/prng.js +85 -0
  45. package/dist/core/prng.js.map +1 -0
  46. package/dist/core/release-exposure.d.ts +26 -0
  47. package/dist/core/release-exposure.d.ts.map +1 -0
  48. package/dist/core/release-exposure.js +213 -0
  49. package/dist/core/release-exposure.js.map +1 -0
  50. package/dist/core/release-plan.d.ts +68 -0
  51. package/dist/core/release-plan.d.ts.map +1 -0
  52. package/dist/core/release-plan.js +235 -0
  53. package/dist/core/release-plan.js.map +1 -0
  54. package/dist/core/sarif.d.ts +53 -0
  55. package/dist/core/sarif.d.ts.map +1 -0
  56. package/dist/core/sarif.js +91 -0
  57. package/dist/core/sarif.js.map +1 -0
  58. package/dist/core/sqlite-runtime.d.ts +17 -0
  59. package/dist/core/sqlite-runtime.d.ts.map +1 -0
  60. package/dist/core/sqlite-runtime.js +49 -0
  61. package/dist/core/sqlite-runtime.js.map +1 -0
  62. package/dist/core/token-estimator.d.ts +11 -0
  63. package/dist/core/token-estimator.d.ts.map +1 -0
  64. package/dist/core/token-estimator.js +87 -0
  65. package/dist/core/token-estimator.js.map +1 -0
  66. package/dist/core/types.d.ts +159 -0
  67. package/dist/core/types.d.ts.map +1 -0
  68. package/dist/core/types.js +2 -0
  69. package/dist/core/types.js.map +1 -0
  70. package/dist/engine/auditor.d.ts +6 -0
  71. package/dist/engine/auditor.d.ts.map +1 -0
  72. package/dist/engine/auditor.js +977 -0
  73. package/dist/engine/auditor.js.map +1 -0
  74. package/dist/engine/benchmark.d.ts +6 -0
  75. package/dist/engine/benchmark.d.ts.map +1 -0
  76. package/dist/engine/benchmark.js +425 -0
  77. package/dist/engine/benchmark.js.map +1 -0
  78. package/dist/engine/defender.d.ts +57 -0
  79. package/dist/engine/defender.d.ts.map +1 -0
  80. package/dist/engine/defender.js +130 -0
  81. package/dist/engine/defender.js.map +1 -0
  82. package/dist/engine/harden.d.ts +61 -0
  83. package/dist/engine/harden.d.ts.map +1 -0
  84. package/dist/engine/harden.js +292 -0
  85. package/dist/engine/harden.js.map +1 -0
  86. package/dist/engine/protector.d.ts +8 -0
  87. package/dist/engine/protector.d.ts.map +1 -0
  88. package/dist/engine/protector.js +500 -0
  89. package/dist/engine/protector.js.map +1 -0
  90. package/dist/engine/verifier.d.ts +6 -0
  91. package/dist/engine/verifier.d.ts.map +1 -0
  92. package/dist/engine/verifier.js +91 -0
  93. package/dist/engine/verifier.js.map +1 -0
  94. package/dist/identity.d.ts +180 -0
  95. package/dist/identity.d.ts.map +1 -0
  96. package/dist/identity.js +180 -0
  97. package/dist/identity.js.map +1 -0
  98. package/dist/index.d.ts +53 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +53 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/mcp/server.d.ts +81 -0
  103. package/dist/mcp/server.d.ts.map +1 -0
  104. package/dist/mcp/server.js +730 -0
  105. package/dist/mcp/server.js.map +1 -0
  106. package/dist/setup/clients.d.ts +58 -0
  107. package/dist/setup/clients.d.ts.map +1 -0
  108. package/dist/setup/clients.js +1268 -0
  109. package/dist/setup/clients.js.map +1 -0
  110. package/dist/setup/doctor.d.ts +69 -0
  111. package/dist/setup/doctor.d.ts.map +1 -0
  112. package/dist/setup/doctor.js +339 -0
  113. package/dist/setup/doctor.js.map +1 -0
  114. package/dist/setup/setup.d.ts +99 -0
  115. package/dist/setup/setup.d.ts.map +1 -0
  116. package/dist/setup/setup.js +652 -0
  117. package/dist/setup/setup.js.map +1 -0
  118. package/dist/shields/chaff/chaff-generator.d.ts +17 -0
  119. package/dist/shields/chaff/chaff-generator.d.ts.map +1 -0
  120. package/dist/shields/chaff/chaff-generator.js +80 -0
  121. package/dist/shields/chaff/chaff-generator.js.map +1 -0
  122. package/dist/shields/deception/architecture-mirage.d.ts +16 -0
  123. package/dist/shields/deception/architecture-mirage.d.ts.map +1 -0
  124. package/dist/shields/deception/architecture-mirage.js +46 -0
  125. package/dist/shields/deception/architecture-mirage.js.map +1 -0
  126. package/dist/shields/deception/canary-honeypot.d.ts +33 -0
  127. package/dist/shields/deception/canary-honeypot.d.ts.map +1 -0
  128. package/dist/shields/deception/canary-honeypot.js +95 -0
  129. package/dist/shields/deception/canary-honeypot.js.map +1 -0
  130. package/dist/shields/deception/cognitive-armor-trigger.d.ts +43 -0
  131. package/dist/shields/deception/cognitive-armor-trigger.d.ts.map +1 -0
  132. package/dist/shields/deception/cognitive-armor-trigger.js +204 -0
  133. package/dist/shields/deception/cognitive-armor-trigger.js.map +1 -0
  134. package/dist/shields/deception/crash-trace-decoy.d.ts +16 -0
  135. package/dist/shields/deception/crash-trace-decoy.d.ts.map +1 -0
  136. package/dist/shields/deception/crash-trace-decoy.js +36 -0
  137. package/dist/shields/deception/crash-trace-decoy.js.map +1 -0
  138. package/dist/shields/deception/decompiler-illusion.d.ts +15 -0
  139. package/dist/shields/deception/decompiler-illusion.d.ts.map +1 -0
  140. package/dist/shields/deception/decompiler-illusion.js +29 -0
  141. package/dist/shields/deception/decompiler-illusion.js.map +1 -0
  142. package/dist/shields/deception/diff-noise-injector.d.ts +17 -0
  143. package/dist/shields/deception/diff-noise-injector.d.ts.map +1 -0
  144. package/dist/shields/deception/diff-noise-injector.js +29 -0
  145. package/dist/shields/deception/diff-noise-injector.js.map +1 -0
  146. package/dist/shields/deception/evidence-contract-poison.d.ts +25 -0
  147. package/dist/shields/deception/evidence-contract-poison.d.ts.map +1 -0
  148. package/dist/shields/deception/evidence-contract-poison.js +66 -0
  149. package/dist/shields/deception/evidence-contract-poison.js.map +1 -0
  150. package/dist/shields/deception/format-payloads.d.ts +21 -0
  151. package/dist/shields/deception/format-payloads.d.ts.map +1 -0
  152. package/dist/shields/deception/format-payloads.js +24 -0
  153. package/dist/shields/deception/format-payloads.js.map +1 -0
  154. package/dist/shields/deception/index.d.ts +35 -0
  155. package/dist/shields/deception/index.d.ts.map +1 -0
  156. package/dist/shields/deception/index.js +69 -0
  157. package/dist/shields/deception/index.js.map +1 -0
  158. package/dist/shields/deception/prompt-completion-poison.d.ts +19 -0
  159. package/dist/shields/deception/prompt-completion-poison.d.ts.map +1 -0
  160. package/dist/shields/deception/prompt-completion-poison.js +45 -0
  161. package/dist/shields/deception/prompt-completion-poison.js.map +1 -0
  162. package/dist/shields/deception/semantic-honeypot.d.ts +17 -0
  163. package/dist/shields/deception/semantic-honeypot.d.ts.map +1 -0
  164. package/dist/shields/deception/semantic-honeypot.js +45 -0
  165. package/dist/shields/deception/semantic-honeypot.js.map +1 -0
  166. package/dist/shields/deception/shadow-business-logic.d.ts +24 -0
  167. package/dist/shields/deception/shadow-business-logic.d.ts.map +1 -0
  168. package/dist/shields/deception/shadow-business-logic.js +66 -0
  169. package/dist/shields/deception/shadow-business-logic.js.map +1 -0
  170. package/dist/shields/deception/system-diagnostic-decoy.d.ts +36 -0
  171. package/dist/shields/deception/system-diagnostic-decoy.d.ts.map +1 -0
  172. package/dist/shields/deception/system-diagnostic-decoy.js +101 -0
  173. package/dist/shields/deception/system-diagnostic-decoy.js.map +1 -0
  174. package/dist/shields/exhaustion/asar-header-amplifier.d.ts +25 -0
  175. package/dist/shields/exhaustion/asar-header-amplifier.d.ts.map +1 -0
  176. package/dist/shields/exhaustion/asar-header-amplifier.js +59 -0
  177. package/dist/shields/exhaustion/asar-header-amplifier.js.map +1 -0
  178. package/dist/shields/exhaustion/bpe-token-amplifier.d.ts +21 -0
  179. package/dist/shields/exhaustion/bpe-token-amplifier.d.ts.map +1 -0
  180. package/dist/shields/exhaustion/bpe-token-amplifier.js +68 -0
  181. package/dist/shields/exhaustion/bpe-token-amplifier.js.map +1 -0
  182. package/dist/shields/exhaustion/callgraph-labyrinth.d.ts +20 -0
  183. package/dist/shields/exhaustion/callgraph-labyrinth.d.ts.map +1 -0
  184. package/dist/shields/exhaustion/callgraph-labyrinth.js +62 -0
  185. package/dist/shields/exhaustion/callgraph-labyrinth.js.map +1 -0
  186. package/dist/shields/exhaustion/cdp-shape-budget-breaker.d.ts +20 -0
  187. package/dist/shields/exhaustion/cdp-shape-budget-breaker.d.ts.map +1 -0
  188. package/dist/shields/exhaustion/cdp-shape-budget-breaker.js +40 -0
  189. package/dist/shields/exhaustion/cdp-shape-budget-breaker.js.map +1 -0
  190. package/dist/shields/exhaustion/frida-capture-saturation.d.ts +33 -0
  191. package/dist/shields/exhaustion/frida-capture-saturation.d.ts.map +1 -0
  192. package/dist/shields/exhaustion/frida-capture-saturation.js +58 -0
  193. package/dist/shields/exhaustion/frida-capture-saturation.js.map +1 -0
  194. package/dist/shields/exhaustion/index.d.ts +30 -0
  195. package/dist/shields/exhaustion/index.d.ts.map +1 -0
  196. package/dist/shields/exhaustion/index.js +43 -0
  197. package/dist/shields/exhaustion/index.js.map +1 -0
  198. package/dist/shields/exhaustion/obligation-flooder.d.ts +128 -0
  199. package/dist/shields/exhaustion/obligation-flooder.d.ts.map +1 -0
  200. package/dist/shields/exhaustion/obligation-flooder.js +145 -0
  201. package/dist/shields/exhaustion/obligation-flooder.js.map +1 -0
  202. package/dist/shields/exhaustion/rea-budget-matrix.d.ts +54 -0
  203. package/dist/shields/exhaustion/rea-budget-matrix.d.ts.map +1 -0
  204. package/dist/shields/exhaustion/rea-budget-matrix.js +300 -0
  205. package/dist/shields/exhaustion/rea-budget-matrix.js.map +1 -0
  206. package/dist/shields/exhaustion/regex-worker-tarpit.d.ts +23 -0
  207. package/dist/shields/exhaustion/regex-worker-tarpit.d.ts.map +1 -0
  208. package/dist/shields/exhaustion/regex-worker-tarpit.js +43 -0
  209. package/dist/shields/exhaustion/regex-worker-tarpit.js.map +1 -0
  210. package/dist/shields/exhaustion/wasm-interface-exhaustion.d.ts +26 -0
  211. package/dist/shields/exhaustion/wasm-interface-exhaustion.d.ts.map +1 -0
  212. package/dist/shields/exhaustion/wasm-interface-exhaustion.js +59 -0
  213. package/dist/shields/exhaustion/wasm-interface-exhaustion.js.map +1 -0
  214. package/dist/shields/formats/android-dex-xref.d.ts +19 -0
  215. package/dist/shields/formats/android-dex-xref.d.ts.map +1 -0
  216. package/dist/shields/formats/android-dex-xref.js +427 -0
  217. package/dist/shields/formats/android-dex-xref.js.map +1 -0
  218. package/dist/shields/formats/android-manifest.d.ts +44 -0
  219. package/dist/shields/formats/android-manifest.d.ts.map +1 -0
  220. package/dist/shields/formats/android-manifest.js +240 -0
  221. package/dist/shields/formats/android-manifest.js.map +1 -0
  222. package/dist/shields/formats/android-r8.d.ts +44 -0
  223. package/dist/shields/formats/android-r8.d.ts.map +1 -0
  224. package/dist/shields/formats/android-r8.js +246 -0
  225. package/dist/shields/formats/android-r8.js.map +1 -0
  226. package/dist/shields/formats/apple-plist.d.ts +46 -0
  227. package/dist/shields/formats/apple-plist.d.ts.map +1 -0
  228. package/dist/shields/formats/apple-plist.js +119 -0
  229. package/dist/shields/formats/apple-plist.js.map +1 -0
  230. package/dist/shields/formats/archive.d.ts +55 -0
  231. package/dist/shields/formats/archive.d.ts.map +1 -0
  232. package/dist/shields/formats/archive.js +369 -0
  233. package/dist/shields/formats/archive.js.map +1 -0
  234. package/dist/shields/formats/asar.d.ts +72 -0
  235. package/dist/shields/formats/asar.d.ts.map +1 -0
  236. package/dist/shields/formats/asar.js +343 -0
  237. package/dist/shields/formats/asar.js.map +1 -0
  238. package/dist/shields/formats/bun-standalone.d.ts +78 -0
  239. package/dist/shields/formats/bun-standalone.d.ts.map +1 -0
  240. package/dist/shields/formats/bun-standalone.js +272 -0
  241. package/dist/shields/formats/bun-standalone.js.map +1 -0
  242. package/dist/shields/formats/dotnet-managed.d.ts +30 -0
  243. package/dist/shields/formats/dotnet-managed.d.ts.map +1 -0
  244. package/dist/shields/formats/dotnet-managed.js +66 -0
  245. package/dist/shields/formats/dotnet-managed.js.map +1 -0
  246. package/dist/shields/formats/electron-fuses.d.ts +93 -0
  247. package/dist/shields/formats/electron-fuses.d.ts.map +1 -0
  248. package/dist/shields/formats/electron-fuses.js +349 -0
  249. package/dist/shields/formats/electron-fuses.js.map +1 -0
  250. package/dist/shields/formats/erlang-beam.d.ts +34 -0
  251. package/dist/shields/formats/erlang-beam.d.ts.map +1 -0
  252. package/dist/shields/formats/erlang-beam.js +319 -0
  253. package/dist/shields/formats/erlang-beam.js.map +1 -0
  254. package/dist/shields/formats/evm-bytecode.d.ts +28 -0
  255. package/dist/shields/formats/evm-bytecode.d.ts.map +1 -0
  256. package/dist/shields/formats/evm-bytecode.js +124 -0
  257. package/dist/shields/formats/evm-bytecode.js.map +1 -0
  258. package/dist/shields/formats/go-flutter-exhaustion.d.ts +55 -0
  259. package/dist/shields/formats/go-flutter-exhaustion.d.ts.map +1 -0
  260. package/dist/shields/formats/go-flutter-exhaustion.js +346 -0
  261. package/dist/shields/formats/go-flutter-exhaustion.js.map +1 -0
  262. package/dist/shields/formats/gpu-ptx.d.ts +40 -0
  263. package/dist/shields/formats/gpu-ptx.d.ts.map +1 -0
  264. package/dist/shields/formats/gpu-ptx.js +62 -0
  265. package/dist/shields/formats/gpu-ptx.js.map +1 -0
  266. package/dist/shields/formats/headers.d.ts +22 -0
  267. package/dist/shields/formats/headers.d.ts.map +1 -0
  268. package/dist/shields/formats/headers.js +193 -0
  269. package/dist/shields/formats/headers.js.map +1 -0
  270. package/dist/shields/formats/jvm-bytecode.d.ts +20 -0
  271. package/dist/shields/formats/jvm-bytecode.d.ts.map +1 -0
  272. package/dist/shields/formats/jvm-bytecode.js +134 -0
  273. package/dist/shields/formats/jvm-bytecode.js.map +1 -0
  274. package/dist/shields/formats/mobile-game.d.ts +42 -0
  275. package/dist/shields/formats/mobile-game.d.ts.map +1 -0
  276. package/dist/shields/formats/mobile-game.js +131 -0
  277. package/dist/shields/formats/mobile-game.js.map +1 -0
  278. package/dist/shields/formats/model.d.ts +66 -0
  279. package/dist/shields/formats/model.d.ts.map +1 -0
  280. package/dist/shields/formats/model.js +461 -0
  281. package/dist/shields/formats/model.js.map +1 -0
  282. package/dist/shields/formats/native.d.ts +101 -0
  283. package/dist/shields/formats/native.d.ts.map +1 -0
  284. package/dist/shields/formats/native.js +585 -0
  285. package/dist/shields/formats/native.js.map +1 -0
  286. package/dist/shields/formats/pcap-capture.d.ts +27 -0
  287. package/dist/shields/formats/pcap-capture.d.ts.map +1 -0
  288. package/dist/shields/formats/pcap-capture.js +201 -0
  289. package/dist/shields/formats/pcap-capture.js.map +1 -0
  290. package/dist/shields/formats/python.d.ts +62 -0
  291. package/dist/shields/formats/python.d.ts.map +1 -0
  292. package/dist/shields/formats/python.js +637 -0
  293. package/dist/shields/formats/python.js.map +1 -0
  294. package/dist/shields/formats/sourcemap.d.ts +22 -0
  295. package/dist/shields/formats/sourcemap.d.ts.map +1 -0
  296. package/dist/shields/formats/sourcemap.js +66 -0
  297. package/dist/shields/formats/sourcemap.js.map +1 -0
  298. package/dist/shields/formats/sqlite.d.ts +115 -0
  299. package/dist/shields/formats/sqlite.d.ts.map +1 -0
  300. package/dist/shields/formats/sqlite.js +528 -0
  301. package/dist/shields/formats/sqlite.js.map +1 -0
  302. package/dist/shields/formats/wasm.d.ts +38 -0
  303. package/dist/shields/formats/wasm.d.ts.map +1 -0
  304. package/dist/shields/formats/wasm.js +314 -0
  305. package/dist/shields/formats/wasm.js.map +1 -0
  306. package/dist/shields/javascript/ast-shield.d.ts +37 -0
  307. package/dist/shields/javascript/ast-shield.d.ts.map +1 -0
  308. package/dist/shields/javascript/ast-shield.js +645 -0
  309. package/dist/shields/javascript/ast-shield.js.map +1 -0
  310. package/dist/shields/runtime/memory-diff-shield.d.ts +56 -0
  311. package/dist/shields/runtime/memory-diff-shield.d.ts.map +1 -0
  312. package/dist/shields/runtime/memory-diff-shield.js +170 -0
  313. package/dist/shields/runtime/memory-diff-shield.js.map +1 -0
  314. package/dist/shields/runtime/runtime-shield.d.ts +24 -0
  315. package/dist/shields/runtime/runtime-shield.d.ts.map +1 -0
  316. package/dist/shields/runtime/runtime-shield.js +84 -0
  317. package/dist/shields/runtime/runtime-shield.js.map +1 -0
  318. package/dist/shields/tarpit/opaque-predicates.d.ts +10 -0
  319. package/dist/shields/tarpit/opaque-predicates.d.ts.map +1 -0
  320. package/dist/shields/tarpit/opaque-predicates.js +40 -0
  321. package/dist/shields/tarpit/opaque-predicates.js.map +1 -0
  322. package/dist/shields/tarpit/tarpit-generator.d.ts +31 -0
  323. package/dist/shields/tarpit/tarpit-generator.d.ts.map +1 -0
  324. package/dist/shields/tarpit/tarpit-generator.js +194 -0
  325. package/dist/shields/tarpit/tarpit-generator.js.map +1 -0
  326. package/dist/ui/reporter.d.ts +13 -0
  327. package/dist/ui/reporter.d.ts.map +1 -0
  328. package/dist/ui/reporter.js +197 -0
  329. package/dist/ui/reporter.js.map +1 -0
  330. package/package.json +89 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { ProtectionIntensity } from "./types.js";
2
+ export interface BlaProjectConfig {
3
+ readonly $schema?: string;
4
+ readonly input?: string;
5
+ readonly output?: string;
6
+ readonly intensity?: ProtectionIntensity;
7
+ /** Per-project PRNG seed. Prefer a random value persisted in `.blarc` — never a shared fixed fingerprint. */
8
+ readonly seed?: string;
9
+ /** When true, write `.bla-manifest.json` next to protected artifacts. Default false (opt-in via `--manifest`). */
10
+ readonly emitManifest?: boolean;
11
+ /** Opt-in risky LLM directive layers (COPPA/medical bait, dual-use imitation, AI chat markers). Default false. */
12
+ readonly llmDirectives?: boolean;
13
+ readonly honeySourceMaps?: boolean;
14
+ readonly minDefenseScore?: number;
15
+ }
16
+ /**
17
+ * Starter defaults written by `initBlaConfig`.
18
+ * `seed` is filled at init/resolve time with a per-project random value — never a global constant.
19
+ * `emitManifest` defaults to false so customer artifacts are not accompanied by attestation JSON unless requested.
20
+ */
21
+ export declare const DEFAULT_BLA_CONFIG: BlaProjectConfig;
22
+ /** Legacy fixed seeds that fingerprint every project the same way — never reuse as a default. */
23
+ export declare const LEGACY_FIXED_SEEDS: ReadonlySet<string>;
24
+ export declare function generateProjectSeed(): string;
25
+ /**
26
+ * Loads `bla.config.json`, `.blarc.json`, `.blarc`, or the `"bla"` field from `package.json`
27
+ * in `cwd` (or an explicit config file path).
28
+ */
29
+ export declare function loadBlaConfig(cwd?: string, explicitConfigPath?: string): {
30
+ config: BlaProjectConfig;
31
+ sourcePath: string | null;
32
+ };
33
+ /**
34
+ * Resolves the PRNG seed for a project:
35
+ * 1. Explicit CLI/`--seed` / caller override
36
+ * 2. Non-legacy seed already stored in project config
37
+ * 3. Otherwise mint a random per-project seed and persist it to `.blarc` (or update the existing config file)
38
+ *
39
+ * This kills the shared `bla-shield-seed-v1` / `bla-project-seed-v1` fingerprint across unrelated projects.
40
+ */
41
+ export declare function resolveProjectSeed(cwd?: string, explicitSeed?: string | number, explicitConfigPath?: string): {
42
+ seed: string;
43
+ sourcePath: string | null;
44
+ persisted: boolean;
45
+ };
46
+ /**
47
+ * Writes a starter `bla.config.json` in `targetDir` with a fresh per-project random seed.
48
+ */
49
+ export declare function initBlaConfig(targetDir?: string, overwrite?: boolean): {
50
+ configPath: string;
51
+ created: boolean;
52
+ config: BlaProjectConfig;
53
+ };
54
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,6GAA6G;IAC7G,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,kHAAkH;IAClH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,kHAAkH;IAClH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,gBAQ/B,CAAC;AAEH,iGAAiG;AACjG,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAIjD,CAAC;AAIH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,GAAE,MAAsB,EAC3B,kBAAkB,CAAC,EAAE,MAAM,GAC1B;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAmDzD;AAWD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,GAAE,MAAsB,EAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAC9B,kBAAkB,CAAC,EAAE,MAAM,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CA2BjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,SAAS,GAAE,MAAsB,EACjC,SAAS,UAAQ,GAChB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CA+BpE"}
@@ -0,0 +1,160 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { join, resolve } from "node:path";
4
+ /**
5
+ * Starter defaults written by `initBlaConfig`.
6
+ * `seed` is filled at init/resolve time with a per-project random value — never a global constant.
7
+ * `emitManifest` defaults to false so customer artifacts are not accompanied by attestation JSON unless requested.
8
+ */
9
+ export const DEFAULT_BLA_CONFIG = Object.freeze({
10
+ $schema: "https://bla.tools/schemas/bla.config.v1.json",
11
+ input: "./dist",
12
+ intensity: "bankrupt",
13
+ emitManifest: false,
14
+ llmDirectives: false,
15
+ honeySourceMaps: true,
16
+ minDefenseScore: 90,
17
+ });
18
+ /** Legacy fixed seeds that fingerprint every project the same way — never reuse as a default. */
19
+ export const LEGACY_FIXED_SEEDS = new Set([
20
+ "bla-project-seed-v1",
21
+ "bla-shield-seed-v1",
22
+ "bla-js-shield-v1",
23
+ ]);
24
+ const CONFIG_FILENAMES = ["bla.config.json", ".blarc.json", ".blarc"];
25
+ export function generateProjectSeed() {
26
+ return `bla-${randomBytes(16).toString("hex")}`;
27
+ }
28
+ function isUsableSeed(seed) {
29
+ return typeof seed === "string" && seed.length > 0 && !LEGACY_FIXED_SEEDS.has(seed);
30
+ }
31
+ /**
32
+ * Loads `bla.config.json`, `.blarc.json`, `.blarc`, or the `"bla"` field from `package.json`
33
+ * in `cwd` (or an explicit config file path).
34
+ */
35
+ export function loadBlaConfig(cwd = process.cwd(), explicitConfigPath) {
36
+ const root = resolve(cwd);
37
+ if (explicitConfigPath) {
38
+ const absExplicit = resolve(root, explicitConfigPath);
39
+ if (!existsSync(absExplicit)) {
40
+ throw new Error(`BLA config file not found: ${absExplicit}`);
41
+ }
42
+ const parsed = JSON.parse(readFileSync(absExplicit, "utf8"));
43
+ return {
44
+ config: { ...DEFAULT_BLA_CONFIG, ...parsed },
45
+ sourcePath: absExplicit,
46
+ };
47
+ }
48
+ for (const name of CONFIG_FILENAMES) {
49
+ const candidate = join(root, name);
50
+ if (existsSync(candidate)) {
51
+ try {
52
+ const parsed = JSON.parse(readFileSync(candidate, "utf8"));
53
+ return {
54
+ config: { ...DEFAULT_BLA_CONFIG, ...parsed },
55
+ sourcePath: candidate,
56
+ };
57
+ }
58
+ catch {
59
+ // ignore malformed optional config
60
+ }
61
+ }
62
+ }
63
+ const pkgPath = join(root, "package.json");
64
+ if (existsSync(pkgPath)) {
65
+ try {
66
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
67
+ if (pkg.bla && typeof pkg.bla === "object") {
68
+ return {
69
+ config: { ...DEFAULT_BLA_CONFIG, ...pkg.bla },
70
+ sourcePath: pkgPath,
71
+ };
72
+ }
73
+ }
74
+ catch {
75
+ // ignore
76
+ }
77
+ }
78
+ return {
79
+ config: { ...DEFAULT_BLA_CONFIG },
80
+ sourcePath: null,
81
+ };
82
+ }
83
+ function persistSeed(targetPath, seed, existing) {
84
+ const next = {
85
+ ...DEFAULT_BLA_CONFIG,
86
+ ...existing,
87
+ seed,
88
+ };
89
+ writeFileSync(targetPath, JSON.stringify(next, null, 2) + "\n", "utf8");
90
+ }
91
+ /**
92
+ * Resolves the PRNG seed for a project:
93
+ * 1. Explicit CLI/`--seed` / caller override
94
+ * 2. Non-legacy seed already stored in project config
95
+ * 3. Otherwise mint a random per-project seed and persist it to `.blarc` (or update the existing config file)
96
+ *
97
+ * This kills the shared `bla-shield-seed-v1` / `bla-project-seed-v1` fingerprint across unrelated projects.
98
+ */
99
+ export function resolveProjectSeed(cwd = process.cwd(), explicitSeed, explicitConfigPath) {
100
+ if (explicitSeed !== undefined && explicitSeed !== null && String(explicitSeed).length > 0) {
101
+ const seed = String(explicitSeed);
102
+ if (!LEGACY_FIXED_SEEDS.has(seed)) {
103
+ return { seed, sourcePath: null, persisted: false };
104
+ }
105
+ // Explicit legacy string: honor it (power users / tests) but do not persist as a "fresh" project seed.
106
+ return { seed, sourcePath: null, persisted: false };
107
+ }
108
+ const loaded = loadBlaConfig(cwd, explicitConfigPath);
109
+ if (isUsableSeed(loaded.config.seed)) {
110
+ return { seed: loaded.config.seed, sourcePath: loaded.sourcePath, persisted: false };
111
+ }
112
+ const seed = generateProjectSeed();
113
+ const root = resolve(cwd);
114
+ let targetPath;
115
+ if (loaded.sourcePath && !loaded.sourcePath.endsWith("package.json")) {
116
+ targetPath = loaded.sourcePath;
117
+ const existing = JSON.parse(readFileSync(targetPath, "utf8"));
118
+ persistSeed(targetPath, seed, existing);
119
+ }
120
+ else {
121
+ targetPath = join(root, ".blarc");
122
+ persistSeed(targetPath, seed, loaded.config);
123
+ }
124
+ return { seed, sourcePath: targetPath, persisted: true };
125
+ }
126
+ /**
127
+ * Writes a starter `bla.config.json` in `targetDir` with a fresh per-project random seed.
128
+ */
129
+ export function initBlaConfig(targetDir = process.cwd(), overwrite = false) {
130
+ const configPath = join(resolve(targetDir), "bla.config.json");
131
+ if (existsSync(configPath) && !overwrite) {
132
+ const existing = JSON.parse(readFileSync(configPath, "utf8"));
133
+ const merged = { ...DEFAULT_BLA_CONFIG, ...existing };
134
+ if (!isUsableSeed(merged.seed)) {
135
+ const seed = generateProjectSeed();
136
+ persistSeed(configPath, seed, existing);
137
+ return {
138
+ configPath,
139
+ created: false,
140
+ config: { ...merged, seed },
141
+ };
142
+ }
143
+ return {
144
+ configPath,
145
+ created: false,
146
+ config: merged,
147
+ };
148
+ }
149
+ const config = {
150
+ ...DEFAULT_BLA_CONFIG,
151
+ seed: generateProjectSeed(),
152
+ };
153
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n", "utf8");
154
+ return {
155
+ configPath,
156
+ created: true,
157
+ config,
158
+ };
159
+ }
160
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ export type ClientArtifactCoverageStatus = "assessed-static-and-heuristic-cost-amplification" | "not-protected";
2
+ export type ServerAuthorizationCoverageStatus = "not-assessed/external-control-required" | "verified-local-reference-fixture";
3
+ export interface ThreatPremiseBoundary {
4
+ readonly id: "authenticated-low-privilege-session" | "controlled-client-same-origin-fetch" | "authorized-user-response-observation";
5
+ readonly coveredByClientArtifactShield: false;
6
+ readonly authoritativeControlLocation: "server-side-application";
7
+ readonly explanation: string;
8
+ }
9
+ export interface DefenseCoverageContract {
10
+ readonly clientArtifact: {
11
+ readonly status: ClientArtifactCoverageStatus;
12
+ readonly scope: "static-reverse-engineering-and-automated-inspection-friction";
13
+ readonly guaranteesConfidentialityOfShippedData: false;
14
+ readonly enforcesAccessControl: false;
15
+ };
16
+ readonly serverAuthorization: {
17
+ readonly status: ServerAuthorizationCoverageStatus;
18
+ readonly responsibility: "external-application-backend";
19
+ readonly summary: string;
20
+ };
21
+ readonly threatPremises: readonly ThreatPremiseBoundary[];
22
+ }
23
+ export declare function buildDefenseCoverageContract(options?: {
24
+ readonly clientProtected?: boolean;
25
+ readonly localServerFixtureVerified?: boolean;
26
+ }): DefenseCoverageContract;
27
+ export type SyntheticRole = "viewer" | "admin";
28
+ export interface SyntheticSessionRecord {
29
+ readonly sessionId: string;
30
+ readonly userId: string;
31
+ readonly tenantId: string;
32
+ readonly role: SyntheticRole;
33
+ readonly csrfToken: string;
34
+ readonly expiresAtMs: number;
35
+ revoked: boolean;
36
+ }
37
+ export interface InternalTenantDocumentRecord {
38
+ readonly docId: string;
39
+ readonly tenantId: string;
40
+ title: string;
41
+ quotaLimit: number;
42
+ /** Sensitive backend-only field that must NEVER be serialized to client responses. */
43
+ readonly internalSigningKeyMaterial: string;
44
+ readonly internalBillingWebhookSecret: string;
45
+ }
46
+ export interface MinimizedClientDocumentDto {
47
+ readonly docId: string;
48
+ readonly tenantId: string;
49
+ readonly title: string;
50
+ readonly quotaLimit: number;
51
+ }
52
+ export interface SyntheticHttpRequest {
53
+ readonly method: "GET" | "POST";
54
+ readonly path: string;
55
+ readonly origin: string;
56
+ readonly sessionId?: string;
57
+ readonly csrfToken?: string;
58
+ readonly requestNonce?: string;
59
+ readonly body?: Record<string, unknown>;
60
+ }
61
+ export interface SyntheticHttpResponse<T = unknown> {
62
+ readonly status: number;
63
+ readonly ok: boolean;
64
+ readonly errorCode?: "UNAUTHENTICATED" | "SESSION_EXPIRED_OR_REVOKED" | "CROSS_ORIGIN_REJECTED" | "CSRF_OR_REPLAY_REJECTED" | "FORBIDDEN_TENANT_OR_ROLE" | "NOT_FOUND";
65
+ readonly data?: T;
66
+ }
67
+ /**
68
+ * Small self-contained local reference service demonstrating authoritative server-side
69
+ * session verification, tenant/object isolation, CSRF + replay protection, and
70
+ * response data minimization (Issue #20).
71
+ */
72
+ export declare class ReferenceTenantAuthorizationService {
73
+ private readonly allowedOrigin;
74
+ private readonly sessions;
75
+ private readonly documents;
76
+ private readonly consumedNonces;
77
+ private nowFn;
78
+ constructor(options?: {
79
+ allowedOrigin?: string;
80
+ nowFn?: () => number;
81
+ });
82
+ issueSession(params: {
83
+ readonly userId: string;
84
+ readonly tenantId: string;
85
+ readonly role: SyntheticRole;
86
+ readonly ttlMs?: number;
87
+ }): SyntheticSessionRecord;
88
+ revokeSession(sessionId: string): boolean;
89
+ seedDocument(doc: InternalTenantDocumentRecord): void;
90
+ snapshotDocumentState(docId: string): {
91
+ title: string;
92
+ quotaLimit: number;
93
+ } | undefined;
94
+ private minimizeDocument;
95
+ handleRequest(req: SyntheticHttpRequest): SyntheticHttpResponse;
96
+ }
97
+ //# sourceMappingURL=coverage-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-contract.d.ts","sourceRoot":"","sources":["../../src/core/coverage-contract.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,4BAA4B,GACpC,kDAAkD,GAClD,eAAe,CAAC;AAEpB,MAAM,MAAM,iCAAiC,GACzC,wCAAwC,GACxC,kCAAkC,CAAC;AAEvC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EACP,qCAAqC,GACrC,qCAAqC,GACrC,sCAAsC,CAAC;IAC3C,QAAQ,CAAC,6BAA6B,EAAE,KAAK,CAAC;IAC9C,QAAQ,CAAC,4BAA4B,EAAE,yBAAyB,CAAC;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,cAAc,EAAE;QACvB,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;QAC9C,QAAQ,CAAC,KAAK,EAAE,8DAA8D,CAAC;QAC/E,QAAQ,CAAC,sCAAsC,EAAE,KAAK,CAAC;QACvD,QAAQ,CAAC,qBAAqB,EAAE,KAAK,CAAC;KACvC,CAAC;IACF,QAAQ,CAAC,mBAAmB,EAAE;QAC5B,QAAQ,CAAC,MAAM,EAAE,iCAAiC,CAAC;QACnD,QAAQ,CAAC,cAAc,EAAE,8BAA8B,CAAC;QACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,QAAQ,CAAC,cAAc,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAC3D;AAED,wBAAgB,4BAA4B,CAAC,OAAO,CAAC,EAAE;IACrD,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;CAC/C,GAAG,uBAAuB,CA8C1B;AAMD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC;IAC5C,QAAQ,CAAC,4BAA4B,EAAE,MAAM,CAAC;CAC/C;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,GAAG,OAAO;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EACf,iBAAiB,GACjB,4BAA4B,GAC5B,uBAAuB,GACvB,yBAAyB,GACzB,0BAA0B,GAC1B,WAAW,CAAC;IAChB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;CACnB;AAED;;;;GAIG;AACH,qBAAa,mCAAmC;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IACtE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmD;IAC7E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,KAAK,CAAe;gBAEhB,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;KAAE;IAK/D,YAAY,CAAC,MAAM,EAAE;QAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;QAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KACzB,GAAG,sBAAsB;IAgBnB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAOzC,YAAY,CAAC,GAAG,EAAE,4BAA4B,GAAG,IAAI;IAIrD,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;IAM9F,OAAO,CAAC,gBAAgB;IAUjB,aAAa,CAAC,GAAG,EAAE,oBAAoB,GAAG,qBAAqB;CA0EvE"}
@@ -0,0 +1,164 @@
1
+ import { createHash, randomBytes } from "node:crypto";
2
+ export function buildDefenseCoverageContract(options) {
3
+ const clientProtected = options?.clientProtected ?? true;
4
+ const serverVerified = options?.localServerFixtureVerified ?? false;
5
+ return {
6
+ clientArtifact: {
7
+ status: clientProtected
8
+ ? "assessed-static-and-heuristic-cost-amplification"
9
+ : "not-protected",
10
+ scope: "static-reverse-engineering-and-automated-inspection-friction",
11
+ guaranteesConfidentialityOfShippedData: false,
12
+ enforcesAccessControl: false,
13
+ },
14
+ serverAuthorization: {
15
+ status: serverVerified
16
+ ? "verified-local-reference-fixture"
17
+ : "not-assessed/external-control-required",
18
+ responsibility: "external-application-backend",
19
+ summary: serverVerified
20
+ ? "Verified against local synthetic multi-tenant reference fixture only; production backends must enforce per-request identity, object/tenant authorization, session revocation, and response data minimization independently."
21
+ : "Server-side authentication, object/tenant authorization, session invalidation, and CSRF/replay controls are outside BLA client-artifact scope and must be enforced by the backend service.",
22
+ },
23
+ threatPremises: [
24
+ {
25
+ id: "authenticated-low-privilege-session",
26
+ coveredByClientArtifactShield: false,
27
+ authoritativeControlLocation: "server-side-application",
28
+ explanation: "An active browser scenario (e.g., Playwright same-origin fetch) can reuse an existing low-privilege session cookie/token. Hiding UI buttons or obfuscating client bundles does not prevent direct API requests; the server must authorize every request against the session's tenant and role.",
29
+ },
30
+ {
31
+ id: "controlled-client-same-origin-fetch",
32
+ coveredByClientArtifactShield: false,
33
+ authoritativeControlLocation: "server-side-application",
34
+ explanation: "BLA runtime globals and AST shields execute inside the untrusted client context and carry no server identity or resource authorization authority.",
35
+ },
36
+ {
37
+ id: "authorized-user-response-observation",
38
+ coveredByClientArtifactShield: false,
39
+ authoritativeControlLocation: "server-side-application",
40
+ explanation: "BLA cannot prevent a user from recording network responses or data that their session is legitimately permitted to receive. Sensitive fields that the client does not strictly need must be omitted by the server before serialization (data minimization).",
41
+ },
42
+ ],
43
+ };
44
+ }
45
+ /**
46
+ * Small self-contained local reference service demonstrating authoritative server-side
47
+ * session verification, tenant/object isolation, CSRF + replay protection, and
48
+ * response data minimization (Issue #20).
49
+ */
50
+ export class ReferenceTenantAuthorizationService {
51
+ allowedOrigin;
52
+ sessions = new Map();
53
+ documents = new Map();
54
+ consumedNonces = new Set();
55
+ nowFn;
56
+ constructor(options) {
57
+ this.allowedOrigin = options?.allowedOrigin ?? "https://app.local.fixture";
58
+ this.nowFn = options?.nowFn ?? (() => Date.now());
59
+ }
60
+ issueSession(params) {
61
+ const sessionId = `sess_${randomBytes(12).toString("hex")}`;
62
+ const csrfToken = `csrf_${randomBytes(12).toString("hex")}`;
63
+ const record = {
64
+ sessionId,
65
+ userId: params.userId,
66
+ tenantId: params.tenantId,
67
+ role: params.role,
68
+ csrfToken,
69
+ expiresAtMs: this.nowFn() + (params.ttlMs ?? 60_000),
70
+ revoked: false,
71
+ };
72
+ this.sessions.set(sessionId, record);
73
+ return record;
74
+ }
75
+ revokeSession(sessionId) {
76
+ const sess = this.sessions.get(sessionId);
77
+ if (!sess)
78
+ return false;
79
+ sess.revoked = true;
80
+ return true;
81
+ }
82
+ seedDocument(doc) {
83
+ this.documents.set(doc.docId, { ...doc });
84
+ }
85
+ snapshotDocumentState(docId) {
86
+ const doc = this.documents.get(docId);
87
+ if (!doc)
88
+ return undefined;
89
+ return { title: doc.title, quotaLimit: doc.quotaLimit };
90
+ }
91
+ minimizeDocument(doc) {
92
+ // Data minimization: never include internalSigningKeyMaterial or internalBillingWebhookSecret
93
+ return {
94
+ docId: doc.docId,
95
+ tenantId: doc.tenantId,
96
+ title: doc.title,
97
+ quotaLimit: doc.quotaLimit,
98
+ };
99
+ }
100
+ handleRequest(req) {
101
+ // 1. Validate session existence and active status on every request
102
+ if (!req.sessionId) {
103
+ return { status: 401, ok: false, errorCode: "UNAUTHENTICATED" };
104
+ }
105
+ const session = this.sessions.get(req.sessionId);
106
+ if (!session || session.revoked || this.nowFn() >= session.expiresAtMs) {
107
+ return { status: 401, ok: false, errorCode: "SESSION_EXPIRED_OR_REVOKED" };
108
+ }
109
+ // 2. Parse route `/api/tenants/:tenantId/documents/:docId`
110
+ const match = /^\/api\/tenants\/([^/]+)\/documents\/([^/]+)$/.exec(req.path);
111
+ if (!match) {
112
+ return { status: 404, ok: false, errorCode: "NOT_FOUND" };
113
+ }
114
+ const [, requestedTenantId, requestedDocId] = match;
115
+ // 3. Enforce tenant boundary before inspecting or mutating any object
116
+ if (requestedTenantId !== session.tenantId) {
117
+ return { status: 403, ok: false, errorCode: "FORBIDDEN_TENANT_OR_ROLE" };
118
+ }
119
+ const doc = this.documents.get(requestedDocId);
120
+ if (!doc || doc.tenantId !== session.tenantId) {
121
+ return { status: 403, ok: false, errorCode: "FORBIDDEN_TENANT_OR_ROLE" };
122
+ }
123
+ if (req.method === "GET") {
124
+ return {
125
+ status: 200,
126
+ ok: true,
127
+ data: this.minimizeDocument(doc),
128
+ };
129
+ }
130
+ // 4. State-changing request (POST): enforce origin, CSRF token, replay nonce, and role
131
+ if (req.origin !== this.allowedOrigin) {
132
+ return { status: 403, ok: false, errorCode: "CROSS_ORIGIN_REJECTED" };
133
+ }
134
+ if (!req.csrfToken ||
135
+ req.csrfToken !== session.csrfToken ||
136
+ !req.requestNonce ||
137
+ req.requestNonce.trim().length < 8) {
138
+ return { status: 403, ok: false, errorCode: "CSRF_OR_REPLAY_REJECTED" };
139
+ }
140
+ const nonceKey = createHash("sha256")
141
+ .update(`${session.sessionId}:${req.requestNonce}`)
142
+ .digest("hex");
143
+ if (this.consumedNonces.has(nonceKey)) {
144
+ return { status: 403, ok: false, errorCode: "CSRF_OR_REPLAY_REJECTED" };
145
+ }
146
+ // Role check MUST happen before committing any state or consuming business state
147
+ if (session.role !== "admin") {
148
+ return { status: 403, ok: false, errorCode: "FORBIDDEN_TENANT_OR_ROLE" };
149
+ }
150
+ this.consumedNonces.add(nonceKey);
151
+ if (typeof req.body?.title === "string" && req.body.title.trim().length > 0) {
152
+ doc.title = req.body.title.trim();
153
+ }
154
+ if (typeof req.body?.quotaLimit === "number" && Number.isSafeInteger(req.body.quotaLimit)) {
155
+ doc.quotaLimit = req.body.quotaLimit;
156
+ }
157
+ return {
158
+ status: 200,
159
+ ok: true,
160
+ data: this.minimizeDocument(doc),
161
+ };
162
+ }
163
+ }
164
+ //# sourceMappingURL=coverage-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-contract.js","sourceRoot":"","sources":["../../src/core/coverage-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export type DebugPostureStatus = "exposed" | "not-observed" | "unknown";
2
+ export interface DebugPostureCheck {
3
+ readonly id: "node-cli-inspector-exposure" | "chromium-remote-debugging-exposure" | "macos-entitlements-debug-posture" | "android-manifest-debuggable-posture";
4
+ readonly platform: "cross-platform" | "macos" | "android";
5
+ readonly status: DebugPostureStatus;
6
+ readonly observedConfig: string;
7
+ readonly restrictedChannel: string;
8
+ readonly remediation: string;
9
+ }
10
+ export interface ProductionDebugPostureReport {
11
+ readonly targetPath: string;
12
+ readonly overallPosture: "exposed" | "not-observed" | "unknown";
13
+ readonly checks: readonly DebugPostureCheck[];
14
+ readonly runtimeBoundaryContract: {
15
+ readonly shadowObjectsClassification: "decorative-deception-signal";
16
+ readonly absenceOfRuntimeMarkersImpliesNoDebugger: false;
17
+ readonly blocksFridaOrGdbWithLocalPrivileges: false;
18
+ readonly blocksRuntimeStateRecovery: false;
19
+ readonly secretStorageGuidance: string;
20
+ };
21
+ }
22
+ export interface InspectDebugPostureOptions {
23
+ readonly targetDir: string;
24
+ readonly packageJsonPath?: string;
25
+ readonly envFilePath?: string;
26
+ readonly macosEntitlementsPath?: string;
27
+ readonly androidManifestPath?: string;
28
+ }
29
+ /**
30
+ * Read-only production debug exposure inspector (Issue #19).
31
+ *
32
+ * Inspects authorized local build/deployment configuration files to identify
33
+ * unnecessary debug/inspector entry points (`--inspect`, `--remote-debugging-port`,
34
+ * `com.apple.security.get-task-allow`, `android:debuggable="true"`).
35
+ *
36
+ * Never probes network ports, never attaches to processes, and never claims that
37
+ * client-side JS markers can block Frida/GDB/CDP when the observer holds OS privileges.
38
+ */
39
+ export declare function inspectProductionDebugPosture(options: InspectDebugPostureOptions): ProductionDebugPostureReport;
40
+ //# sourceMappingURL=debug-posture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-posture.d.ts","sourceRoot":"","sources":["../../src/core/debug-posture.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EACP,6BAA6B,GAC7B,oCAAoC,GACpC,kCAAkC,GAClC,qCAAqC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,GAAG,SAAS,CAAC;IAC1D,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,SAAS,GAAG,cAAc,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC9C,QAAQ,CAAC,uBAAuB,EAAE;QAChC,QAAQ,CAAC,2BAA2B,EAAE,6BAA6B,CAAC;QACpE,QAAQ,CAAC,wCAAwC,EAAE,KAAK,CAAC;QACzD,QAAQ,CAAC,mCAAmC,EAAE,KAAK,CAAC;QACpD,QAAQ,CAAC,0BAA0B,EAAE,KAAK,CAAC;QAC3C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;KACxC,CAAC;CACH;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CACvC;AAED;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,0BAA0B,GAClC,4BAA4B,CAmN9B"}