bla-agents 1.1.0 → 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 (276) hide show
  1. package/.agents/skills/blind-llm-agents/SKILL.md +20 -14
  2. package/DISCLAIMER.md +15 -7
  3. package/README.md +153 -198
  4. package/dist/bundler/index.d.ts +19 -2
  5. package/dist/bundler/index.d.ts.map +1 -1
  6. package/dist/bundler/index.js +47 -4
  7. package/dist/bundler/index.js.map +1 -1
  8. package/dist/cli.d.ts +5 -0
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +123 -18
  11. package/dist/cli.js.map +1 -1
  12. package/dist/core/config.d.ts +54 -0
  13. package/dist/core/config.d.ts.map +1 -0
  14. package/dist/core/config.js +160 -0
  15. package/dist/core/config.js.map +1 -0
  16. package/dist/core/coverage-contract.d.ts +97 -0
  17. package/dist/core/coverage-contract.d.ts.map +1 -0
  18. package/dist/core/coverage-contract.js +164 -0
  19. package/dist/core/coverage-contract.js.map +1 -0
  20. package/dist/core/debug-posture.d.ts +40 -0
  21. package/dist/core/debug-posture.d.ts.map +1 -0
  22. package/dist/core/debug-posture.js +197 -0
  23. package/dist/core/debug-posture.js.map +1 -0
  24. package/dist/core/detector.d.ts.map +1 -1
  25. package/dist/core/detector.js +58 -6
  26. package/dist/core/detector.js.map +1 -1
  27. package/dist/core/identifiers.d.ts +32 -0
  28. package/dist/core/identifiers.d.ts.map +1 -0
  29. package/dist/core/identifiers.js +263 -0
  30. package/dist/core/identifiers.js.map +1 -0
  31. package/dist/core/llm-directives.d.ts +12 -0
  32. package/dist/core/llm-directives.d.ts.map +1 -0
  33. package/dist/core/llm-directives.js +23 -0
  34. package/dist/core/llm-directives.js.map +1 -0
  35. package/dist/core/prng.d.ts +10 -1
  36. package/dist/core/prng.d.ts.map +1 -1
  37. package/dist/core/prng.js +27 -2
  38. package/dist/core/prng.js.map +1 -1
  39. package/dist/core/release-plan.d.ts +68 -0
  40. package/dist/core/release-plan.d.ts.map +1 -0
  41. package/dist/core/release-plan.js +235 -0
  42. package/dist/core/release-plan.js.map +1 -0
  43. package/dist/core/sarif.d.ts +53 -0
  44. package/dist/core/sarif.d.ts.map +1 -0
  45. package/dist/core/sarif.js +91 -0
  46. package/dist/core/sarif.js.map +1 -0
  47. package/dist/core/sqlite-runtime.d.ts +13 -0
  48. package/dist/core/sqlite-runtime.d.ts.map +1 -1
  49. package/dist/core/sqlite-runtime.js +38 -8
  50. package/dist/core/sqlite-runtime.js.map +1 -1
  51. package/dist/core/types.d.ts +7 -2
  52. package/dist/core/types.d.ts.map +1 -1
  53. package/dist/engine/auditor.d.ts.map +1 -1
  54. package/dist/engine/auditor.js +251 -8
  55. package/dist/engine/auditor.js.map +1 -1
  56. package/dist/engine/benchmark.d.ts +1 -1
  57. package/dist/engine/benchmark.d.ts.map +1 -1
  58. package/dist/engine/benchmark.js +121 -41
  59. package/dist/engine/benchmark.js.map +1 -1
  60. package/dist/engine/defender.d.ts +1 -0
  61. package/dist/engine/defender.d.ts.map +1 -1
  62. package/dist/engine/defender.js +7 -1
  63. package/dist/engine/defender.js.map +1 -1
  64. package/dist/engine/harden.d.ts +61 -0
  65. package/dist/engine/harden.d.ts.map +1 -0
  66. package/dist/engine/harden.js +292 -0
  67. package/dist/engine/harden.js.map +1 -0
  68. package/dist/engine/protector.d.ts.map +1 -1
  69. package/dist/engine/protector.js +162 -21
  70. package/dist/engine/protector.js.map +1 -1
  71. package/dist/identity.d.ts +112 -2
  72. package/dist/identity.d.ts.map +1 -1
  73. package/dist/identity.js +112 -2
  74. package/dist/identity.js.map +1 -1
  75. package/dist/index.d.ts +26 -9
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +26 -9
  78. package/dist/index.js.map +1 -1
  79. package/dist/mcp/server.d.ts +59 -152
  80. package/dist/mcp/server.d.ts.map +1 -1
  81. package/dist/mcp/server.js +466 -50
  82. package/dist/mcp/server.js.map +1 -1
  83. package/dist/setup/clients.d.ts +49 -1
  84. package/dist/setup/clients.d.ts.map +1 -1
  85. package/dist/setup/clients.js +1193 -20
  86. package/dist/setup/clients.js.map +1 -1
  87. package/dist/setup/doctor.d.ts +58 -14
  88. package/dist/setup/doctor.d.ts.map +1 -1
  89. package/dist/setup/doctor.js +316 -22
  90. package/dist/setup/doctor.js.map +1 -1
  91. package/dist/setup/setup.d.ts +77 -7
  92. package/dist/setup/setup.d.ts.map +1 -1
  93. package/dist/setup/setup.js +591 -62
  94. package/dist/setup/setup.js.map +1 -1
  95. package/dist/shields/chaff/chaff-generator.d.ts.map +1 -1
  96. package/dist/shields/chaff/chaff-generator.js +12 -3
  97. package/dist/shields/chaff/chaff-generator.js.map +1 -1
  98. package/dist/shields/deception/architecture-mirage.js +1 -1
  99. package/dist/shields/deception/architecture-mirage.js.map +1 -1
  100. package/dist/shields/deception/canary-honeypot.d.ts +33 -0
  101. package/dist/shields/deception/canary-honeypot.d.ts.map +1 -0
  102. package/dist/shields/deception/canary-honeypot.js +95 -0
  103. package/dist/shields/deception/canary-honeypot.js.map +1 -0
  104. package/dist/shields/deception/cognitive-armor-trigger.d.ts +43 -0
  105. package/dist/shields/deception/cognitive-armor-trigger.d.ts.map +1 -0
  106. package/dist/shields/deception/cognitive-armor-trigger.js +204 -0
  107. package/dist/shields/deception/cognitive-armor-trigger.js.map +1 -0
  108. package/dist/shields/deception/crash-trace-decoy.js +1 -1
  109. package/dist/shields/deception/crash-trace-decoy.js.map +1 -1
  110. package/dist/shields/deception/decompiler-illusion.js +1 -1
  111. package/dist/shields/deception/decompiler-illusion.js.map +1 -1
  112. package/dist/shields/deception/diff-noise-injector.js +1 -1
  113. package/dist/shields/deception/diff-noise-injector.js.map +1 -1
  114. package/dist/shields/deception/evidence-contract-poison.js +1 -1
  115. package/dist/shields/deception/evidence-contract-poison.js.map +1 -1
  116. package/dist/shields/deception/format-payloads.d.ts +21 -0
  117. package/dist/shields/deception/format-payloads.d.ts.map +1 -0
  118. package/dist/shields/deception/format-payloads.js +24 -0
  119. package/dist/shields/deception/format-payloads.js.map +1 -0
  120. package/dist/shields/deception/index.d.ts +10 -2
  121. package/dist/shields/deception/index.d.ts.map +1 -1
  122. package/dist/shields/deception/index.js +20 -3
  123. package/dist/shields/deception/index.js.map +1 -1
  124. package/dist/shields/deception/prompt-completion-poison.d.ts +3 -2
  125. package/dist/shields/deception/prompt-completion-poison.d.ts.map +1 -1
  126. package/dist/shields/deception/prompt-completion-poison.js +6 -3
  127. package/dist/shields/deception/prompt-completion-poison.js.map +1 -1
  128. package/dist/shields/deception/shadow-business-logic.js +4 -4
  129. package/dist/shields/deception/shadow-business-logic.js.map +1 -1
  130. package/dist/shields/deception/system-diagnostic-decoy.d.ts +36 -0
  131. package/dist/shields/deception/system-diagnostic-decoy.d.ts.map +1 -0
  132. package/dist/shields/deception/system-diagnostic-decoy.js +101 -0
  133. package/dist/shields/deception/system-diagnostic-decoy.js.map +1 -0
  134. package/dist/shields/exhaustion/asar-header-amplifier.d.ts +12 -3
  135. package/dist/shields/exhaustion/asar-header-amplifier.d.ts.map +1 -1
  136. package/dist/shields/exhaustion/asar-header-amplifier.js +30 -8
  137. package/dist/shields/exhaustion/asar-header-amplifier.js.map +1 -1
  138. package/dist/shields/exhaustion/bpe-token-amplifier.js +2 -2
  139. package/dist/shields/exhaustion/bpe-token-amplifier.js.map +1 -1
  140. package/dist/shields/exhaustion/callgraph-labyrinth.js +2 -2
  141. package/dist/shields/exhaustion/callgraph-labyrinth.js.map +1 -1
  142. package/dist/shields/exhaustion/cdp-shape-budget-breaker.js +1 -1
  143. package/dist/shields/exhaustion/cdp-shape-budget-breaker.js.map +1 -1
  144. package/dist/shields/exhaustion/frida-capture-saturation.d.ts +10 -5
  145. package/dist/shields/exhaustion/frida-capture-saturation.d.ts.map +1 -1
  146. package/dist/shields/exhaustion/frida-capture-saturation.js +21 -8
  147. package/dist/shields/exhaustion/frida-capture-saturation.js.map +1 -1
  148. package/dist/shields/exhaustion/index.d.ts +2 -2
  149. package/dist/shields/exhaustion/index.d.ts.map +1 -1
  150. package/dist/shields/exhaustion/index.js +2 -2
  151. package/dist/shields/exhaustion/index.js.map +1 -1
  152. package/dist/shields/exhaustion/obligation-flooder.d.ts +17 -5
  153. package/dist/shields/exhaustion/obligation-flooder.d.ts.map +1 -1
  154. package/dist/shields/exhaustion/obligation-flooder.js +20 -8
  155. package/dist/shields/exhaustion/obligation-flooder.js.map +1 -1
  156. package/dist/shields/exhaustion/rea-budget-matrix.d.ts +8 -2
  157. package/dist/shields/exhaustion/rea-budget-matrix.d.ts.map +1 -1
  158. package/dist/shields/exhaustion/rea-budget-matrix.js +139 -16
  159. package/dist/shields/exhaustion/rea-budget-matrix.js.map +1 -1
  160. package/dist/shields/exhaustion/regex-worker-tarpit.d.ts.map +1 -1
  161. package/dist/shields/exhaustion/regex-worker-tarpit.js +2 -1
  162. package/dist/shields/exhaustion/regex-worker-tarpit.js.map +1 -1
  163. package/dist/shields/exhaustion/wasm-interface-exhaustion.d.ts +7 -4
  164. package/dist/shields/exhaustion/wasm-interface-exhaustion.d.ts.map +1 -1
  165. package/dist/shields/exhaustion/wasm-interface-exhaustion.js +16 -7
  166. package/dist/shields/exhaustion/wasm-interface-exhaustion.js.map +1 -1
  167. package/dist/shields/formats/android-dex-xref.d.ts +19 -0
  168. package/dist/shields/formats/android-dex-xref.d.ts.map +1 -0
  169. package/dist/shields/formats/android-dex-xref.js +427 -0
  170. package/dist/shields/formats/android-dex-xref.js.map +1 -0
  171. package/dist/shields/formats/android-manifest.d.ts +44 -0
  172. package/dist/shields/formats/android-manifest.d.ts.map +1 -0
  173. package/dist/shields/formats/android-manifest.js +240 -0
  174. package/dist/shields/formats/android-manifest.js.map +1 -0
  175. package/dist/shields/formats/android-r8.d.ts +44 -0
  176. package/dist/shields/formats/android-r8.d.ts.map +1 -0
  177. package/dist/shields/formats/android-r8.js +246 -0
  178. package/dist/shields/formats/android-r8.js.map +1 -0
  179. package/dist/shields/formats/apple-plist.d.ts +15 -0
  180. package/dist/shields/formats/apple-plist.d.ts.map +1 -1
  181. package/dist/shields/formats/apple-plist.js +59 -1
  182. package/dist/shields/formats/apple-plist.js.map +1 -1
  183. package/dist/shields/formats/archive.d.ts +27 -6
  184. package/dist/shields/formats/archive.d.ts.map +1 -1
  185. package/dist/shields/formats/archive.js +247 -45
  186. package/dist/shields/formats/archive.js.map +1 -1
  187. package/dist/shields/formats/asar.d.ts +50 -10
  188. package/dist/shields/formats/asar.d.ts.map +1 -1
  189. package/dist/shields/formats/asar.js +265 -39
  190. package/dist/shields/formats/asar.js.map +1 -1
  191. package/dist/shields/formats/bun-standalone.d.ts +78 -0
  192. package/dist/shields/formats/bun-standalone.d.ts.map +1 -0
  193. package/dist/shields/formats/bun-standalone.js +272 -0
  194. package/dist/shields/formats/bun-standalone.js.map +1 -0
  195. package/dist/shields/formats/dotnet-managed.d.ts +9 -0
  196. package/dist/shields/formats/dotnet-managed.d.ts.map +1 -1
  197. package/dist/shields/formats/dotnet-managed.js +26 -1
  198. package/dist/shields/formats/dotnet-managed.js.map +1 -1
  199. package/dist/shields/formats/electron-fuses.d.ts +63 -8
  200. package/dist/shields/formats/electron-fuses.d.ts.map +1 -1
  201. package/dist/shields/formats/electron-fuses.js +297 -65
  202. package/dist/shields/formats/electron-fuses.js.map +1 -1
  203. package/dist/shields/formats/erlang-beam.d.ts +34 -0
  204. package/dist/shields/formats/erlang-beam.d.ts.map +1 -0
  205. package/dist/shields/formats/erlang-beam.js +319 -0
  206. package/dist/shields/formats/erlang-beam.js.map +1 -0
  207. package/dist/shields/formats/evm-bytecode.d.ts +28 -0
  208. package/dist/shields/formats/evm-bytecode.d.ts.map +1 -0
  209. package/dist/shields/formats/evm-bytecode.js +124 -0
  210. package/dist/shields/formats/evm-bytecode.js.map +1 -0
  211. package/dist/shields/formats/go-flutter-exhaustion.d.ts +55 -0
  212. package/dist/shields/formats/go-flutter-exhaustion.d.ts.map +1 -0
  213. package/dist/shields/formats/go-flutter-exhaustion.js +346 -0
  214. package/dist/shields/formats/go-flutter-exhaustion.js.map +1 -0
  215. package/dist/shields/formats/gpu-ptx.d.ts +40 -0
  216. package/dist/shields/formats/gpu-ptx.d.ts.map +1 -0
  217. package/dist/shields/formats/gpu-ptx.js +62 -0
  218. package/dist/shields/formats/gpu-ptx.js.map +1 -0
  219. package/dist/shields/formats/headers.d.ts.map +1 -1
  220. package/dist/shields/formats/headers.js +54 -14
  221. package/dist/shields/formats/headers.js.map +1 -1
  222. package/dist/shields/formats/jvm-bytecode.d.ts +20 -0
  223. package/dist/shields/formats/jvm-bytecode.d.ts.map +1 -0
  224. package/dist/shields/formats/jvm-bytecode.js +134 -0
  225. package/dist/shields/formats/jvm-bytecode.js.map +1 -0
  226. package/dist/shields/formats/mobile-game.d.ts +4 -0
  227. package/dist/shields/formats/mobile-game.d.ts.map +1 -1
  228. package/dist/shields/formats/mobile-game.js +16 -0
  229. package/dist/shields/formats/mobile-game.js.map +1 -1
  230. package/dist/shields/formats/model.d.ts +22 -8
  231. package/dist/shields/formats/model.d.ts.map +1 -1
  232. package/dist/shields/formats/model.js +231 -59
  233. package/dist/shields/formats/model.js.map +1 -1
  234. package/dist/shields/formats/native.d.ts +65 -11
  235. package/dist/shields/formats/native.d.ts.map +1 -1
  236. package/dist/shields/formats/native.js +413 -108
  237. package/dist/shields/formats/native.js.map +1 -1
  238. package/dist/shields/formats/pcap-capture.d.ts +27 -0
  239. package/dist/shields/formats/pcap-capture.d.ts.map +1 -0
  240. package/dist/shields/formats/pcap-capture.js +201 -0
  241. package/dist/shields/formats/pcap-capture.js.map +1 -0
  242. package/dist/shields/formats/python.d.ts +22 -1
  243. package/dist/shields/formats/python.d.ts.map +1 -1
  244. package/dist/shields/formats/python.js +568 -27
  245. package/dist/shields/formats/python.js.map +1 -1
  246. package/dist/shields/formats/sourcemap.d.ts.map +1 -1
  247. package/dist/shields/formats/sourcemap.js +2 -0
  248. package/dist/shields/formats/sourcemap.js.map +1 -1
  249. package/dist/shields/formats/sqlite.d.ts +87 -15
  250. package/dist/shields/formats/sqlite.d.ts.map +1 -1
  251. package/dist/shields/formats/sqlite.js +377 -42
  252. package/dist/shields/formats/sqlite.js.map +1 -1
  253. package/dist/shields/formats/wasm.d.ts +6 -0
  254. package/dist/shields/formats/wasm.d.ts.map +1 -1
  255. package/dist/shields/formats/wasm.js +118 -3
  256. package/dist/shields/formats/wasm.js.map +1 -1
  257. package/dist/shields/javascript/ast-shield.d.ts +25 -5
  258. package/dist/shields/javascript/ast-shield.d.ts.map +1 -1
  259. package/dist/shields/javascript/ast-shield.js +428 -58
  260. package/dist/shields/javascript/ast-shield.js.map +1 -1
  261. package/dist/shields/runtime/memory-diff-shield.d.ts +56 -0
  262. package/dist/shields/runtime/memory-diff-shield.d.ts.map +1 -0
  263. package/dist/shields/runtime/memory-diff-shield.js +170 -0
  264. package/dist/shields/runtime/memory-diff-shield.js.map +1 -0
  265. package/dist/shields/runtime/runtime-shield.d.ts +12 -16
  266. package/dist/shields/runtime/runtime-shield.d.ts.map +1 -1
  267. package/dist/shields/runtime/runtime-shield.js +30 -24
  268. package/dist/shields/runtime/runtime-shield.js.map +1 -1
  269. package/dist/shields/tarpit/opaque-predicates.d.ts.map +1 -1
  270. package/dist/shields/tarpit/opaque-predicates.js +3 -3
  271. package/dist/shields/tarpit/opaque-predicates.js.map +1 -1
  272. package/dist/shields/tarpit/tarpit-generator.d.ts +9 -4
  273. package/dist/shields/tarpit/tarpit-generator.d.ts.map +1 -1
  274. package/dist/shields/tarpit/tarpit-generator.js +30 -23
  275. package/dist/shields/tarpit/tarpit-generator.js.map +1 -1
  276. package/package.json +13 -6
@@ -0,0 +1,197 @@
1
+ import { existsSync, readFileSync, statSync } from "node:fs";
2
+ import { join, resolve } from "node:path";
3
+ /**
4
+ * Read-only production debug exposure inspector (Issue #19).
5
+ *
6
+ * Inspects authorized local build/deployment configuration files to identify
7
+ * unnecessary debug/inspector entry points (`--inspect`, `--remote-debugging-port`,
8
+ * `com.apple.security.get-task-allow`, `android:debuggable="true"`).
9
+ *
10
+ * Never probes network ports, never attaches to processes, and never claims that
11
+ * client-side JS markers can block Frida/GDB/CDP when the observer holds OS privileges.
12
+ */
13
+ export function inspectProductionDebugPosture(options) {
14
+ const rootDir = resolve(options.targetDir);
15
+ const pkgPath = options.packageJsonPath
16
+ ? resolve(options.packageJsonPath)
17
+ : join(rootDir, "package.json");
18
+ const envPath = options.envFilePath
19
+ ? resolve(options.envFilePath)
20
+ : join(rootDir, ".env.production");
21
+ const entitlementsPath = options.macosEntitlementsPath
22
+ ? resolve(options.macosEntitlementsPath)
23
+ : join(rootDir, "entitlements.plist");
24
+ const androidManifestPath = options.androidManifestPath
25
+ ? resolve(options.androidManifestPath)
26
+ : join(rootDir, "AndroidManifest.xml");
27
+ const checks = [];
28
+ // 1. Node CLI inspector & NODE_OPTIONS check
29
+ {
30
+ const sources = [];
31
+ const exposedFlags = [];
32
+ if (existsSync(pkgPath) && statSync(pkgPath).isFile()) {
33
+ try {
34
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
35
+ if (pkg.scripts && typeof pkg.scripts === "object") {
36
+ for (const [name, cmd] of Object.entries(pkg.scripts)) {
37
+ if (typeof cmd !== "string")
38
+ continue;
39
+ // Focus on production/start/serve/pack scripts or all scripts
40
+ if (/(^|[\s"'])(--inspect(?:-brk|-port)?|ELECTRON_RUN_AS_NODE=1)\b/.test(cmd)) {
41
+ exposedFlags.push(`package.json#scripts.${name}: "${cmd}"`);
42
+ }
43
+ }
44
+ sources.push("package.json#scripts");
45
+ }
46
+ }
47
+ catch {
48
+ // Ignore malformed package.json here; status falls back if no valid sources
49
+ }
50
+ }
51
+ if (existsSync(envPath) && statSync(envPath).isFile()) {
52
+ const envText = readFileSync(envPath, "utf8");
53
+ sources.push(".env.production");
54
+ if (/(--inspect(?:-brk|-port)?|ELECTRON_RUN_AS_NODE\s*=\s*1)/.test(envText)) {
55
+ exposedFlags.push(`.env.production contains inspector/run-as-node directive`);
56
+ }
57
+ }
58
+ const status = exposedFlags.length > 0
59
+ ? "exposed"
60
+ : sources.length > 0
61
+ ? "not-observed"
62
+ : "unknown";
63
+ checks.push({
64
+ id: "node-cli-inspector-exposure",
65
+ platform: "cross-platform",
66
+ status,
67
+ observedConfig: exposedFlags.length > 0
68
+ ? exposedFlags.join("; ")
69
+ : sources.length > 0
70
+ ? `Inspected ${sources.join(", ")}; no --inspect or ELECTRON_RUN_AS_NODE flags found.`
71
+ : "No package.json or .env.production found to verify Node launch flags.",
72
+ restrictedChannel: "Node.js V8 Inspector WebSocket (--inspect / NODE_OPTIONS)",
73
+ remediation: "Remove --inspect, --inspect-brk, and ELECTRON_RUN_AS_NODE=1 from production start scripts and environment files, and disable RunAsNode / EnableNodeCliInspectArguments in Electron fuses.",
74
+ });
75
+ }
76
+ // 2. Chromium / WebView remote debugging port exposure
77
+ {
78
+ const sources = [];
79
+ const exposedFlags = [];
80
+ if (existsSync(pkgPath) && statSync(pkgPath).isFile()) {
81
+ try {
82
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
83
+ if (pkg.scripts && typeof pkg.scripts === "object") {
84
+ for (const [name, cmd] of Object.entries(pkg.scripts)) {
85
+ if (typeof cmd !== "string")
86
+ continue;
87
+ if (/--remote-debugging-(?:port|pipe|address)|--remote-allow-origins/.test(cmd)) {
88
+ exposedFlags.push(`package.json#scripts.${name}: "${cmd}"`);
89
+ }
90
+ }
91
+ sources.push("package.json#scripts");
92
+ }
93
+ }
94
+ catch {
95
+ // Ignore
96
+ }
97
+ }
98
+ const status = exposedFlags.length > 0
99
+ ? "exposed"
100
+ : sources.length > 0
101
+ ? "not-observed"
102
+ : "unknown";
103
+ checks.push({
104
+ id: "chromium-remote-debugging-exposure",
105
+ platform: "cross-platform",
106
+ status,
107
+ observedConfig: exposedFlags.length > 0
108
+ ? exposedFlags.join("; ")
109
+ : sources.length > 0
110
+ ? `Inspected ${sources.join(", ")}; no --remote-debugging-port flags found.`
111
+ : "No launch configuration found to verify Chromium remote debugging flags.",
112
+ restrictedChannel: "Chrome DevTools Protocol (CDP) HTTP/WebSocket endpoint",
113
+ remediation: "Remove --remote-debugging-port and --remote-allow-origins from production launch scripts and BrowserWindow startup switches.",
114
+ });
115
+ }
116
+ // 3. macOS Entitlements / Hardened Runtime debug posture
117
+ {
118
+ if (existsSync(entitlementsPath) && statSync(entitlementsPath).isFile()) {
119
+ const xml = readFileSync(entitlementsPath, "utf8");
120
+ const riskyKeys = [
121
+ "com.apple.security.get-task-allow",
122
+ "com.apple.security.cs.allow-dyld-environment-variables",
123
+ "com.apple.security.cs.disable-library-validation",
124
+ "com.apple.security.cs.allow-unsigned-executable-memory",
125
+ ];
126
+ const enabledKeys = riskyKeys.filter((key) => {
127
+ const regex = new RegExp(`<key>\\s*${key.replace(/\./g, "\\.")}\\s*</key>\\s*<true\\s*/>`, "i");
128
+ return regex.test(xml);
129
+ });
130
+ checks.push({
131
+ id: "macos-entitlements-debug-posture",
132
+ platform: "macos",
133
+ status: enabledKeys.length > 0 ? "exposed" : "not-observed",
134
+ observedConfig: enabledKeys.length > 0
135
+ ? `Enabled debug/injection entitlements in ${entitlementsPath}: ${enabledKeys.join(", ")}`
136
+ : `Inspected ${entitlementsPath}; get-task-allow and dyld injection entitlements are not enabled.`,
137
+ restrictedChannel: "macOS task_for_pid / LLDB / Frida attach & DYLD_INSERT_LIBRARIES",
138
+ remediation: "Set com.apple.security.get-task-allow, allow-dyld-environment-variables, and disable-library-validation to false (or remove them) in production release entitlements with Hardened Runtime enabled.",
139
+ });
140
+ }
141
+ else {
142
+ checks.push({
143
+ id: "macos-entitlements-debug-posture",
144
+ platform: "macos",
145
+ status: "unknown",
146
+ observedConfig: "No macOS entitlements.plist provided or discovered in target directory.",
147
+ restrictedChannel: "macOS task_for_pid / LLDB / Frida attach & DYLD_INSERT_LIBRARIES",
148
+ remediation: "Provide macosEntitlementsPath to verify that com.apple.security.get-task-allow is omitted in release builds.",
149
+ });
150
+ }
151
+ }
152
+ // 4. Android Manifest debuggable posture
153
+ {
154
+ if (existsSync(androidManifestPath) && statSync(androidManifestPath).isFile()) {
155
+ const xml = readFileSync(androidManifestPath, "utf8");
156
+ const isDebuggable = /android:debuggable\s*=\s*["']true["']/i.test(xml);
157
+ checks.push({
158
+ id: "android-manifest-debuggable-posture",
159
+ platform: "android",
160
+ status: isDebuggable ? "exposed" : "not-observed",
161
+ observedConfig: isDebuggable
162
+ ? `android:debuggable="true" observed in ${androidManifestPath}`
163
+ : `Inspected ${androidManifestPath}; android:debuggable="true" is not set.`,
164
+ restrictedChannel: "Android JDWP / run-as / Frida gadget attach on non-rooted devices",
165
+ remediation: "Ensure android:debuggable=\"false\" in release buildTypes in build.gradle / AndroidManifest.xml.",
166
+ });
167
+ }
168
+ else {
169
+ checks.push({
170
+ id: "android-manifest-debuggable-posture",
171
+ platform: "android",
172
+ status: "unknown",
173
+ observedConfig: "No AndroidManifest.xml provided or discovered in target directory.",
174
+ restrictedChannel: "Android JDWP / run-as / Frida gadget attach on non-rooted devices",
175
+ remediation: "Provide androidManifestPath to verify that android:debuggable is false in release builds.",
176
+ });
177
+ }
178
+ }
179
+ const overallPosture = checks.some((c) => c.status === "exposed")
180
+ ? "exposed"
181
+ : checks.some((c) => c.status === "not-observed")
182
+ ? "not-observed"
183
+ : "unknown";
184
+ return {
185
+ targetPath: rootDir,
186
+ overallPosture,
187
+ checks,
188
+ runtimeBoundaryContract: {
189
+ shadowObjectsClassification: "decorative-deception-signal",
190
+ absenceOfRuntimeMarkersImpliesNoDebugger: false,
191
+ blocksFridaOrGdbWithLocalPrivileges: false,
192
+ blocksRuntimeStateRecovery: false,
193
+ secretStorageGuidance: "BLA JavaScript runtime shields cannot guarantee confidentiality of plaintext or decryption keys held by a client process when the observer has OS-level debugging/instrumentation permissions (e.g., Frida, GDB, LLDB, or root/admin access). Keep authoritative access control and long-lived secrets in trusted server or hardware boundaries.",
194
+ },
195
+ };
196
+ }
197
+ //# sourceMappingURL=debug-posture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-posture.js","sourceRoot":"","sources":["../../src/core/debug-posture.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CA4JvE"}
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAmNvE"}
@@ -16,8 +16,8 @@ export function detectArtifactFormat(targetPath) {
16
16
  return "directory";
17
17
  }
18
18
  const ext = extname(targetPath).toLowerCase();
19
- // Read up to 64 header bytes for binary magic inspection
20
- const header = Buffer.alloc(Math.min(64, stats.size));
19
+ // Read up to 4096 header bytes for binary magic & CLR metadata inspection
20
+ const header = Buffer.alloc(Math.min(4096, stats.size));
21
21
  if (header.length > 0) {
22
22
  const fd = openSync(targetPath, "r");
23
23
  try {
@@ -27,6 +27,11 @@ export function detectArtifactFormat(targetPath) {
27
27
  closeSync(fd);
28
28
  }
29
29
  }
30
+ // 0. Apple Binary PropertyList (`bplist00` / `bplist01`)
31
+ if (header.length >= 8 &&
32
+ header.subarray(0, 6).toString("latin1") === "bplist") {
33
+ return "apple-plist";
34
+ }
30
35
  // 1. SQLite 3 database: `SQLite format 3\0`
31
36
  if (header.length >= 16 &&
32
37
  header.subarray(0, 16).toString("latin1") === "SQLite format 3\0") {
@@ -68,20 +73,36 @@ export function detectArtifactFormat(targetPath) {
68
73
  header[3] === 0x46) {
69
74
  return "native-elf";
70
75
  }
71
- // 7. Mach-O binary (thin 32/64 BE/LE or fat universal)
76
+ // 7. JVM `.class` vs Mach-O binary (thin 32/64 BE/LE or fat universal)
72
77
  if (header.length >= 4) {
73
78
  const magicBE = header.readUInt32BE(0);
79
+ if (magicBE === 0xcafebabe) {
80
+ if (ext === ".class")
81
+ return "jvm-class";
82
+ // In Mach-O universal fat binaries, uint32BE(4) is nfat_arch (1..20).
83
+ // In JVM .class files, uint16BE(4) is minor_version and uint16BE(6) is major_version (>= 45).
84
+ if (header.length >= 8) {
85
+ const nfatOrVersion = header.readUInt32BE(4);
86
+ const majorVersion = header.readUInt16BE(6);
87
+ if (nfatOrVersion > 30 && majorVersion >= 45 && majorVersion <= 90) {
88
+ return "jvm-class";
89
+ }
90
+ }
91
+ return "native-macho";
92
+ }
74
93
  if (magicBE === 0xfeedface ||
75
94
  magicBE === 0xcefaedfe ||
76
95
  magicBE === 0xfeedfacf ||
77
96
  magicBE === 0xcffaedfe ||
78
- magicBE === 0xcafebabe ||
79
97
  magicBE === 0xbebafeca) {
80
98
  return "native-macho";
81
99
  }
82
100
  }
83
- // 8. PE binary (`MZ`)
101
+ // 8. PE binary (`MZ`) or .NET Managed CLR assembly (contains `BSJB` metadata root)
84
102
  if (header.length >= 2 && header[0] === 0x4d && header[1] === 0x5a) {
103
+ if (header.includes(Buffer.from("BSJB", "ascii"))) {
104
+ return "dotnet-managed";
105
+ }
85
106
  return "native-pe";
86
107
  }
87
108
  // 9. Electron ASAR archive: Pickles header (uint32LE(0) === 4, uint32LE(12) === jsonLen)
@@ -114,7 +135,26 @@ export function detectArtifactFormat(targetPath) {
114
135
  (header.length >= 16 && header[2] === 0x0d && header[3] === 0x0a)) {
115
136
  return "python-pyc";
116
137
  }
117
- // 13. Extension-based formats
138
+ // 13. Erlang BEAM IFF: `FOR1....BEAM`
139
+ if (header.length >= 12 &&
140
+ header.subarray(0, 4).toString("latin1") === "FOR1" &&
141
+ header.subarray(8, 12).toString("latin1") === "BEAM") {
142
+ return "erlang-beam";
143
+ }
144
+ // 14. Classic libpcap / pcapng magic
145
+ if (header.length >= 4) {
146
+ const magicLE = header.readUInt32LE(0);
147
+ if (magicLE === 0xa1b2c3d4 ||
148
+ magicLE === 0xa1b23c4d ||
149
+ magicLE === 0xd4c3b2a1) {
150
+ return "pcap-capture";
151
+ }
152
+ // pcapng section header block
153
+ if (magicLE === 0x0a0d0d0a) {
154
+ return "pcap-capture";
155
+ }
156
+ }
157
+ // 15. Extension-based formats
118
158
  if ([".js", ".mjs", ".cjs", ".jsx"].includes(ext))
119
159
  return "javascript";
120
160
  if ([".ts", ".mts", ".cts", ".tsx"].includes(ext))
@@ -133,6 +173,18 @@ export function detectArtifactFormat(targetPath) {
133
173
  return "model-gguf";
134
174
  if (ext === ".dex")
135
175
  return "android-dex";
176
+ if ([".plist", ".entitlements", ".mobileprovision"].includes(ext))
177
+ return "apple-plist";
178
+ if (ext === ".class")
179
+ return "jvm-class";
180
+ if (ext === ".beam")
181
+ return "erlang-beam";
182
+ if ([".evm", ".bin-evm", ".solidity-bin"].includes(ext))
183
+ return "evm-bytecode";
184
+ if ([".pcap", ".pcapng", ".cap"].includes(ext))
185
+ return "pcap-capture";
186
+ if (ext === ".ptx")
187
+ return "gpu-ptx";
136
188
  return "unknown";
137
189
  }
138
190
  //# sourceMappingURL=detector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { SeededPrng } from "./prng.js";
2
+ export type IdentifierStyle = "camel" | "pascal" | "snake" | "privateCamel" | "earlySort";
3
+ export interface RealisticIdentifierOptions {
4
+ readonly style?: IdentifierStyle;
5
+ /** Extra suffix entropy hex length (default 3). */
6
+ readonly entropy?: number;
7
+ /** Optional semantic stem forced into the name (still mixed with vocabulary). */
8
+ readonly hint?: string;
9
+ }
10
+ /**
11
+ * Draw a realistic identifier from a seeded distribution.
12
+ * Guarantees: no `_bla`, `__bla`, `$00_AAA` substring; valid JS/TS/Python ident.
13
+ */
14
+ export declare function realisticIdentifier(prng: SeededPrng, options?: RealisticIdentifierOptions): string;
15
+ /**
16
+ * Draw N unique realistic identifiers (retry on collision within the batch).
17
+ */
18
+ export declare function realisticIdentifierBatch(prng: SeededPrng, count: number, options?: RealisticIdentifierOptions): string[];
19
+ /** Shared honey-table names for SQLite (no `_bla_` prefix; probe looks these up by name). */
20
+ export declare const SQLITE_HONEY_TABLES: Readonly<{
21
+ readonly keyHierarchy: "enclave_key_hierarchy";
22
+ readonly attestationLedger: "tpm2_attestation_ledger";
23
+ readonly sessionLeases: "zero_trust_session_leases";
24
+ readonly canaryTransport: "canary_transport_redaction";
25
+ readonly systemDiagnostic: "system_diagnostic_log";
26
+ readonly activeTopologyView: "v_enclave_active_topology";
27
+ }>;
28
+ export declare const SQLITE_HONEY_TABLE_NAME_SET: ReadonlySet<string>;
29
+ /** Forbidden greppable marker substrings that must NEVER appear in emitted artifacts. */
30
+ export declare const FORBIDDEN_EMITTED_MARKERS: readonly RegExp[];
31
+ export declare function assertNoForbiddenMarkers(emitted: string, context?: string): void;
32
+ //# sourceMappingURL=identifiers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identifiers.d.ts","sourceRoot":"","sources":["../../src/core/identifiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAiL5C,MAAM,MAAM,eAAe,GACvB,OAAO,GACP,QAAQ,GACR,OAAO,GACP,cAAc,GACd,WAAW,CAAC;AAEhB,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;IACjC,mDAAmD;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,0BAA+B,GACvC,MAAM,CAiDR;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,0BAA+B,GACvC,MAAM,EAAE,CAeV;AAED,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB;;;;;;;EAOrB,CAAC;AAEZ,eAAO,MAAM,2BAA2B,EAAE,WAAW,CAAC,MAAM,CAE3D,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAIrD,CAAC;AAEH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,SAAqB,GAC3B,IAAI,CAQN"}
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Realistic identifier vocabulary for emitted shield artifacts.
3
+ *
4
+ * CRITICAL DEFENSIVE PROPERTY: every name drawn from this module must be
5
+ * statistically indistinguishable from ordinary application identifiers.
6
+ * No shared greppable substring (`_bla`, `$00_AAA`, `__bla_`, …) may appear
7
+ * in the emitted artifact — a single `grep -v` must not be able to separate
8
+ * injected noise from real code.
9
+ */
10
+ const VERBS = Object.freeze([
11
+ "resolve",
12
+ "compute",
13
+ "derive",
14
+ "validate",
15
+ "dispatch",
16
+ "project",
17
+ "reconcile",
18
+ "normalize",
19
+ "assemble",
20
+ "compose",
21
+ "evaluate",
22
+ "schedule",
23
+ "acquire",
24
+ "release",
25
+ "bind",
26
+ "adapt",
27
+ "mirror",
28
+ "fold",
29
+ "reduce",
30
+ "expand",
31
+ "encode",
32
+ "decode",
33
+ "seal",
34
+ "unseal",
35
+ "attest",
36
+ "verify",
37
+ "sync",
38
+ "flush",
39
+ "prime",
40
+ "hydrate",
41
+ "materialize",
42
+ "capture",
43
+ "emit",
44
+ "observe",
45
+ "trace",
46
+ "probe",
47
+ "sample",
48
+ "filter",
49
+ "transform",
50
+ "allocate",
51
+ ]);
52
+ const NOUNS = Object.freeze([
53
+ "Ledger",
54
+ "Envelope",
55
+ "Session",
56
+ "Ticket",
57
+ "Digest",
58
+ "Frame",
59
+ "Cursor",
60
+ "Handle",
61
+ "Slot",
62
+ "Epoch",
63
+ "Quota",
64
+ "Policy",
65
+ "Manifest",
66
+ "Bundle",
67
+ "Shard",
68
+ "Segment",
69
+ "Vector",
70
+ "Matrix",
71
+ "Buffer",
72
+ "Stream",
73
+ "Channel",
74
+ "Bridge",
75
+ "Gateway",
76
+ "Router",
77
+ "Registry",
78
+ "Catalog",
79
+ "Index",
80
+ "Cache",
81
+ "Pool",
82
+ "Queue",
83
+ "Stack",
84
+ "Tree",
85
+ "Graph",
86
+ "Node",
87
+ "Edge",
88
+ "Probe",
89
+ "Sensor",
90
+ "Metric",
91
+ "Sample",
92
+ "Record",
93
+ "Entry",
94
+ "Token",
95
+ "Claim",
96
+ "Scope",
97
+ "Context",
98
+ "Runtime",
99
+ "Worker",
100
+ "Service",
101
+ "Client",
102
+ "Provider",
103
+ ]);
104
+ const ADJECTIVES = Object.freeze([
105
+ "Active",
106
+ "Pending",
107
+ "Sealed",
108
+ "Transient",
109
+ "Durable",
110
+ "Local",
111
+ "Remote",
112
+ "Shared",
113
+ "Private",
114
+ "Mutable",
115
+ "Frozen",
116
+ "Lazy",
117
+ "Eager",
118
+ "Inline",
119
+ "Deferred",
120
+ "Primary",
121
+ "Secondary",
122
+ "Nested",
123
+ "Composite",
124
+ "Sparse",
125
+ ]);
126
+ const SNAKE_STEMS = Object.freeze([
127
+ "session",
128
+ "ledger",
129
+ "envelope",
130
+ "digest",
131
+ "cursor",
132
+ "handle",
133
+ "epoch",
134
+ "quota",
135
+ "policy",
136
+ "manifest",
137
+ "bundle",
138
+ "shard",
139
+ "segment",
140
+ "vector",
141
+ "matrix",
142
+ "buffer",
143
+ "stream",
144
+ "channel",
145
+ "bridge",
146
+ "gateway",
147
+ "router",
148
+ "registry",
149
+ "catalog",
150
+ "index",
151
+ "cache",
152
+ "pool",
153
+ "queue",
154
+ "probe",
155
+ "metric",
156
+ "sample",
157
+ "record",
158
+ "token",
159
+ "claim",
160
+ "scope",
161
+ "context",
162
+ "runtime",
163
+ "worker",
164
+ "service",
165
+ "client",
166
+ "provider",
167
+ "slot",
168
+ "frame",
169
+ "ticket",
170
+ ]);
171
+ /**
172
+ * Draw a realistic identifier from a seeded distribution.
173
+ * Guarantees: no `_bla`, `__bla`, `$00_AAA` substring; valid JS/TS/Python ident.
174
+ */
175
+ export function realisticIdentifier(prng, options = {}) {
176
+ const style = options.style ?? "camel";
177
+ const entropy = options.entropy ?? 3;
178
+ const tag = prng.hex(entropy);
179
+ const verb = prng.pick(VERBS);
180
+ const noun = prng.pick(NOUNS);
181
+ const adj = prng.pick(ADJECTIVES);
182
+ const hint = options.hint
183
+ ? options.hint.replace(/[^A-Za-z0-9_]/g, "").slice(0, 24)
184
+ : "";
185
+ if (style === "snake") {
186
+ const a = prng.pick(SNAKE_STEMS);
187
+ const b = prng.pick(SNAKE_STEMS);
188
+ const c = hint
189
+ ? hint.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase()
190
+ : prng.pick(SNAKE_STEMS);
191
+ return `${a}_${b}_${c}_${tag}`;
192
+ }
193
+ if (style === "pascal") {
194
+ const head = hint
195
+ ? hint.charAt(0).toUpperCase() + hint.slice(1)
196
+ : adj;
197
+ return `${head}${noun}${tag.charAt(0).toUpperCase()}${tag.slice(1)}`;
198
+ }
199
+ if (style === "privateCamel") {
200
+ const body = hint
201
+ ? hint.charAt(0).toLowerCase() + hint.slice(1)
202
+ : verb;
203
+ return `_${body}${noun}_${tag}`;
204
+ }
205
+ if (style === "earlySort") {
206
+ // `$` sorts before [A-Za-z_] in Unicode; vary the next chars so there is
207
+ // NO shared greppable literal across the emitted set (unlike `$00_AAA`).
208
+ const rank = prng.hex(2);
209
+ const body = hint
210
+ ? hint.charAt(0).toUpperCase() + hint.slice(1)
211
+ : `${adj}${noun}`;
212
+ return `$${rank}${body}_${tag}`;
213
+ }
214
+ // camel (default)
215
+ const body = hint
216
+ ? hint.charAt(0).toLowerCase() + hint.slice(1)
217
+ : verb;
218
+ return `${body}${adj}${noun}_${tag}`;
219
+ }
220
+ /**
221
+ * Draw N unique realistic identifiers (retry on collision within the batch).
222
+ */
223
+ export function realisticIdentifierBatch(prng, count, options = {}) {
224
+ const out = [];
225
+ const seen = new Set();
226
+ let guard = 0;
227
+ while (out.length < count && guard < count * 16) {
228
+ guard++;
229
+ const name = realisticIdentifier(prng, options);
230
+ if (seen.has(name))
231
+ continue;
232
+ seen.add(name);
233
+ out.push(name);
234
+ }
235
+ if (out.length < count) {
236
+ throw new Error(`Failed to draw ${count} unique realistic identifiers`);
237
+ }
238
+ return out;
239
+ }
240
+ /** Shared honey-table names for SQLite (no `_bla_` prefix; probe looks these up by name). */
241
+ export const SQLITE_HONEY_TABLES = Object.freeze({
242
+ keyHierarchy: "enclave_key_hierarchy",
243
+ attestationLedger: "tpm2_attestation_ledger",
244
+ sessionLeases: "zero_trust_session_leases",
245
+ canaryTransport: "canary_transport_redaction",
246
+ systemDiagnostic: "system_diagnostic_log",
247
+ activeTopologyView: "v_enclave_active_topology",
248
+ });
249
+ export const SQLITE_HONEY_TABLE_NAME_SET = new Set(Object.values(SQLITE_HONEY_TABLES));
250
+ /** Forbidden greppable marker substrings that must NEVER appear in emitted artifacts. */
251
+ export const FORBIDDEN_EMITTED_MARKERS = Object.freeze([
252
+ /_bla/i,
253
+ /\$00_AAA/,
254
+ /__bla/i,
255
+ ]);
256
+ export function assertNoForbiddenMarkers(emitted, context = "emitted artifact") {
257
+ for (const re of FORBIDDEN_EMITTED_MARKERS) {
258
+ if (re.test(emitted)) {
259
+ throw new Error(`Forbidden marker ${re} found in ${context} — shield would be trivially strippable`);
260
+ }
261
+ }
262
+ }
263
+ //# sourceMappingURL=identifiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identifiers.js","sourceRoot":"","sources":["../../src/core/identifiers.ts"],"names":[],"mappings":"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"}