@discretion/core 0.1.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 (885) hide show
  1. package/CHANGELOG.md +117 -0
  2. package/LICENSE +21 -0
  3. package/README.md +319 -0
  4. package/dist/src/checksums/aba.d.ts +25 -0
  5. package/dist/src/checksums/aba.d.ts.map +1 -0
  6. package/dist/src/checksums/aba.js +47 -0
  7. package/dist/src/checksums/aba.js.map +1 -0
  8. package/dist/src/checksums/digits.d.ts +55 -0
  9. package/dist/src/checksums/digits.d.ts.map +1 -0
  10. package/dist/src/checksums/digits.js +114 -0
  11. package/dist/src/checksums/digits.js.map +1 -0
  12. package/dist/src/checksums/icao9303.d.ts +29 -0
  13. package/dist/src/checksums/icao9303.d.ts.map +1 -0
  14. package/dist/src/checksums/icao9303.js +56 -0
  15. package/dist/src/checksums/icao9303.js.map +1 -0
  16. package/dist/src/checksums/index.d.ts +21 -0
  17. package/dist/src/checksums/index.d.ts.map +1 -0
  18. package/dist/src/checksums/index.js +21 -0
  19. package/dist/src/checksums/index.js.map +1 -0
  20. package/dist/src/checksums/iso7064.d.ts +67 -0
  21. package/dist/src/checksums/iso7064.d.ts.map +1 -0
  22. package/dist/src/checksums/iso7064.js +159 -0
  23. package/dist/src/checksums/iso7064.js.map +1 -0
  24. package/dist/src/checksums/luhn.d.ts +32 -0
  25. package/dist/src/checksums/luhn.d.ts.map +1 -0
  26. package/dist/src/checksums/luhn.js +66 -0
  27. package/dist/src/checksums/luhn.js.map +1 -0
  28. package/dist/src/checksums/mod97.d.ts +55 -0
  29. package/dist/src/checksums/mod97.d.ts.map +1 -0
  30. package/dist/src/checksums/mod97.js +94 -0
  31. package/dist/src/checksums/mod97.js.map +1 -0
  32. package/dist/src/checksums/verhoeff.d.ts +28 -0
  33. package/dist/src/checksums/verhoeff.d.ts.map +1 -0
  34. package/dist/src/checksums/verhoeff.js +80 -0
  35. package/dist/src/checksums/verhoeff.js.map +1 -0
  36. package/dist/src/checksums/weighted.d.ts +64 -0
  37. package/dist/src/checksums/weighted.d.ts.map +1 -0
  38. package/dist/src/checksums/weighted.js +97 -0
  39. package/dist/src/checksums/weighted.js.map +1 -0
  40. package/dist/src/context/documentProfile.d.ts +34 -0
  41. package/dist/src/context/documentProfile.d.ts.map +1 -0
  42. package/dist/src/context/documentProfile.js +253 -0
  43. package/dist/src/context/documentProfile.js.map +1 -0
  44. package/dist/src/context/negativeRules.d.ts +60 -0
  45. package/dist/src/context/negativeRules.d.ts.map +1 -0
  46. package/dist/src/context/negativeRules.js +696 -0
  47. package/dist/src/context/negativeRules.js.map +1 -0
  48. package/dist/src/context/score.d.ts +52 -0
  49. package/dist/src/context/score.d.ts.map +1 -0
  50. package/dist/src/context/score.js +346 -0
  51. package/dist/src/context/score.js.map +1 -0
  52. package/dist/src/context/structure.d.ts +46 -0
  53. package/dist/src/context/structure.d.ts.map +1 -0
  54. package/dist/src/context/structure.js +528 -0
  55. package/dist/src/context/structure.js.map +1 -0
  56. package/dist/src/context/triggers.d.ts +73 -0
  57. package/dist/src/context/triggers.d.ts.map +1 -0
  58. package/dist/src/context/triggers.js +172 -0
  59. package/dist/src/context/triggers.js.map +1 -0
  60. package/dist/src/context/types.d.ts +137 -0
  61. package/dist/src/context/types.d.ts.map +1 -0
  62. package/dist/src/context/types.js +25 -0
  63. package/dist/src/context/types.js.map +1 -0
  64. package/dist/src/crypto/keccak256.d.ts +15 -0
  65. package/dist/src/crypto/keccak256.d.ts.map +1 -0
  66. package/dist/src/crypto/keccak256.js +89 -0
  67. package/dist/src/crypto/keccak256.js.map +1 -0
  68. package/dist/src/crypto/sha256.d.ts +16 -0
  69. package/dist/src/crypto/sha256.d.ts.map +1 -0
  70. package/dist/src/crypto/sha256.js +81 -0
  71. package/dist/src/crypto/sha256.js.map +1 -0
  72. package/dist/src/detect/detectors/bankcodes/auBsb.d.ts +11 -0
  73. package/dist/src/detect/detectors/bankcodes/auBsb.d.ts.map +1 -0
  74. package/dist/src/detect/detectors/bankcodes/auBsb.js +34 -0
  75. package/dist/src/detect/detectors/bankcodes/auBsb.js.map +1 -0
  76. package/dist/src/detect/detectors/bankcodes/brAgencia.d.ts +15 -0
  77. package/dist/src/detect/detectors/bankcodes/brAgencia.d.ts.map +1 -0
  78. package/dist/src/detect/detectors/bankcodes/brAgencia.js +43 -0
  79. package/dist/src/detect/detectors/bankcodes/brAgencia.js.map +1 -0
  80. package/dist/src/detect/detectors/bankcodes/caTransit.d.ts +13 -0
  81. package/dist/src/detect/detectors/bankcodes/caTransit.d.ts.map +1 -0
  82. package/dist/src/detect/detectors/bankcodes/caTransit.js +86 -0
  83. package/dist/src/detect/detectors/bankcodes/caTransit.js.map +1 -0
  84. package/dist/src/detect/detectors/bankcodes/inIfsc.d.ts +13 -0
  85. package/dist/src/detect/detectors/bankcodes/inIfsc.d.ts.map +1 -0
  86. package/dist/src/detect/detectors/bankcodes/inIfsc.js +37 -0
  87. package/dist/src/detect/detectors/bankcodes/inIfsc.js.map +1 -0
  88. package/dist/src/detect/detectors/bankcodes/index.d.ts +10 -0
  89. package/dist/src/detect/detectors/bankcodes/index.d.ts.map +1 -0
  90. package/dist/src/detect/detectors/bankcodes/index.js +10 -0
  91. package/dist/src/detect/detectors/bankcodes/index.js.map +1 -0
  92. package/dist/src/detect/detectors/bankcodes/ukSortCode.d.ts +13 -0
  93. package/dist/src/detect/detectors/bankcodes/ukSortCode.d.ts.map +1 -0
  94. package/dist/src/detect/detectors/bankcodes/ukSortCode.js +36 -0
  95. package/dist/src/detect/detectors/bankcodes/ukSortCode.js.map +1 -0
  96. package/dist/src/detect/detectors/bankcodes/usRouting.d.ts +12 -0
  97. package/dist/src/detect/detectors/bankcodes/usRouting.d.ts.map +1 -0
  98. package/dist/src/detect/detectors/bankcodes/usRouting.js +45 -0
  99. package/dist/src/detect/detectors/bankcodes/usRouting.js.map +1 -0
  100. package/dist/src/detect/detectors/contact/email.d.ts +16 -0
  101. package/dist/src/detect/detectors/contact/email.d.ts.map +1 -0
  102. package/dist/src/detect/detectors/contact/email.js +111 -0
  103. package/dist/src/detect/detectors/contact/email.js.map +1 -0
  104. package/dist/src/detect/detectors/contact/index.d.ts +11 -0
  105. package/dist/src/detect/detectors/contact/index.d.ts.map +1 -0
  106. package/dist/src/detect/detectors/contact/index.js +11 -0
  107. package/dist/src/detect/detectors/contact/index.js.map +1 -0
  108. package/dist/src/detect/detectors/contact/ipv4.d.ts +12 -0
  109. package/dist/src/detect/detectors/contact/ipv4.d.ts.map +1 -0
  110. package/dist/src/detect/detectors/contact/ipv4.js +109 -0
  111. package/dist/src/detect/detectors/contact/ipv4.js.map +1 -0
  112. package/dist/src/detect/detectors/contact/ipv6.d.ts +16 -0
  113. package/dist/src/detect/detectors/contact/ipv6.d.ts.map +1 -0
  114. package/dist/src/detect/detectors/contact/ipv6.js +187 -0
  115. package/dist/src/detect/detectors/contact/ipv6.js.map +1 -0
  116. package/dist/src/detect/detectors/contact/mac.d.ts +14 -0
  117. package/dist/src/detect/detectors/contact/mac.d.ts.map +1 -0
  118. package/dist/src/detect/detectors/contact/mac.js +64 -0
  119. package/dist/src/detect/detectors/contact/mac.js.map +1 -0
  120. package/dist/src/detect/detectors/contact/phone.d.ts +21 -0
  121. package/dist/src/detect/detectors/contact/phone.d.ts.map +1 -0
  122. package/dist/src/detect/detectors/contact/phone.js +76 -0
  123. package/dist/src/detect/detectors/contact/phone.js.map +1 -0
  124. package/dist/src/detect/detectors/contact/urlCredentials.d.ts +23 -0
  125. package/dist/src/detect/detectors/contact/urlCredentials.d.ts.map +1 -0
  126. package/dist/src/detect/detectors/contact/urlCredentials.js +123 -0
  127. package/dist/src/detect/detectors/contact/urlCredentials.js.map +1 -0
  128. package/dist/src/detect/detectors/crypto/ada.d.ts +13 -0
  129. package/dist/src/detect/detectors/crypto/ada.d.ts.map +1 -0
  130. package/dist/src/detect/detectors/crypto/ada.js +51 -0
  131. package/dist/src/detect/detectors/crypto/ada.js.map +1 -0
  132. package/dist/src/detect/detectors/crypto/btc.d.ts +15 -0
  133. package/dist/src/detect/detectors/crypto/btc.d.ts.map +1 -0
  134. package/dist/src/detect/detectors/crypto/btc.js +78 -0
  135. package/dist/src/detect/detectors/crypto/btc.js.map +1 -0
  136. package/dist/src/detect/detectors/crypto/dot.d.ts +13 -0
  137. package/dist/src/detect/detectors/crypto/dot.d.ts.map +1 -0
  138. package/dist/src/detect/detectors/crypto/dot.js +41 -0
  139. package/dist/src/detect/detectors/crypto/dot.js.map +1 -0
  140. package/dist/src/detect/detectors/crypto/eth.d.ts +15 -0
  141. package/dist/src/detect/detectors/crypto/eth.d.ts.map +1 -0
  142. package/dist/src/detect/detectors/crypto/eth.js +63 -0
  143. package/dist/src/detect/detectors/crypto/eth.js.map +1 -0
  144. package/dist/src/detect/detectors/crypto/index.d.ts +12 -0
  145. package/dist/src/detect/detectors/crypto/index.d.ts.map +1 -0
  146. package/dist/src/detect/detectors/crypto/index.js +12 -0
  147. package/dist/src/detect/detectors/crypto/index.js.map +1 -0
  148. package/dist/src/detect/detectors/crypto/ltc.d.ts +12 -0
  149. package/dist/src/detect/detectors/crypto/ltc.d.ts.map +1 -0
  150. package/dist/src/detect/detectors/crypto/ltc.js +71 -0
  151. package/dist/src/detect/detectors/crypto/ltc.js.map +1 -0
  152. package/dist/src/detect/detectors/crypto/sol.d.ts +13 -0
  153. package/dist/src/detect/detectors/crypto/sol.d.ts.map +1 -0
  154. package/dist/src/detect/detectors/crypto/sol.js +39 -0
  155. package/dist/src/detect/detectors/crypto/sol.js.map +1 -0
  156. package/dist/src/detect/detectors/crypto/trx.d.ts +8 -0
  157. package/dist/src/detect/detectors/crypto/trx.d.ts.map +1 -0
  158. package/dist/src/detect/detectors/crypto/trx.js +34 -0
  159. package/dist/src/detect/detectors/crypto/trx.js.map +1 -0
  160. package/dist/src/detect/detectors/crypto/xmr.d.ts +10 -0
  161. package/dist/src/detect/detectors/crypto/xmr.d.ts.map +1 -0
  162. package/dist/src/detect/detectors/crypto/xmr.js +51 -0
  163. package/dist/src/detect/detectors/crypto/xmr.js.map +1 -0
  164. package/dist/src/detect/detectors/documents/driversLicense.d.ts +24 -0
  165. package/dist/src/detect/detectors/documents/driversLicense.d.ts.map +1 -0
  166. package/dist/src/detect/detectors/documents/driversLicense.js +79 -0
  167. package/dist/src/detect/detectors/documents/driversLicense.js.map +1 -0
  168. package/dist/src/detect/detectors/documents/healthData.d.ts +23 -0
  169. package/dist/src/detect/detectors/documents/healthData.d.ts.map +1 -0
  170. package/dist/src/detect/detectors/documents/healthData.js +78 -0
  171. package/dist/src/detect/detectors/documents/healthData.js.map +1 -0
  172. package/dist/src/detect/detectors/documents/index.d.ts +9 -0
  173. package/dist/src/detect/detectors/documents/index.d.ts.map +1 -0
  174. package/dist/src/detect/detectors/documents/index.js +9 -0
  175. package/dist/src/detect/detectors/documents/index.js.map +1 -0
  176. package/dist/src/detect/detectors/documents/passportMrz.d.ts +20 -0
  177. package/dist/src/detect/detectors/documents/passportMrz.d.ts.map +1 -0
  178. package/dist/src/detect/detectors/documents/passportMrz.js +194 -0
  179. package/dist/src/detect/detectors/documents/passportMrz.js.map +1 -0
  180. package/dist/src/detect/detectors/documents/usNpi.d.ts +16 -0
  181. package/dist/src/detect/detectors/documents/usNpi.d.ts.map +1 -0
  182. package/dist/src/detect/detectors/documents/usNpi.js +48 -0
  183. package/dist/src/detect/detectors/documents/usNpi.js.map +1 -0
  184. package/dist/src/detect/detectors/documents/vin.d.ts +15 -0
  185. package/dist/src/detect/detectors/documents/vin.d.ts.map +1 -0
  186. package/dist/src/detect/detectors/documents/vin.js +64 -0
  187. package/dist/src/detect/detectors/documents/vin.js.map +1 -0
  188. package/dist/src/detect/detectors/financial/creditCard.d.ts +23 -0
  189. package/dist/src/detect/detectors/financial/creditCard.d.ts.map +1 -0
  190. package/dist/src/detect/detectors/financial/creditCard.js +157 -0
  191. package/dist/src/detect/detectors/financial/creditCard.js.map +1 -0
  192. package/dist/src/detect/detectors/financial/iban.d.ts +18 -0
  193. package/dist/src/detect/detectors/financial/iban.d.ts.map +1 -0
  194. package/dist/src/detect/detectors/financial/iban.js +80 -0
  195. package/dist/src/detect/detectors/financial/iban.js.map +1 -0
  196. package/dist/src/detect/detectors/financial/ibanRegistry.d.ts +35 -0
  197. package/dist/src/detect/detectors/financial/ibanRegistry.d.ts.map +1 -0
  198. package/dist/src/detect/detectors/financial/ibanRegistry.js +92 -0
  199. package/dist/src/detect/detectors/financial/ibanRegistry.js.map +1 -0
  200. package/dist/src/detect/detectors/financial/index.d.ts +7 -0
  201. package/dist/src/detect/detectors/financial/index.d.ts.map +1 -0
  202. package/dist/src/detect/detectors/financial/index.js +7 -0
  203. package/dist/src/detect/detectors/financial/index.js.map +1 -0
  204. package/dist/src/detect/detectors/financial/swiftBic.d.ts +17 -0
  205. package/dist/src/detect/detectors/financial/swiftBic.d.ts.map +1 -0
  206. package/dist/src/detect/detectors/financial/swiftBic.js +55 -0
  207. package/dist/src/detect/detectors/financial/swiftBic.js.map +1 -0
  208. package/dist/src/detect/detectors/index.d.ts +15 -0
  209. package/dist/src/detect/detectors/index.d.ts.map +1 -0
  210. package/dist/src/detect/detectors/index.js +15 -0
  211. package/dist/src/detect/detectors/index.js.map +1 -0
  212. package/dist/src/detect/detectors/location/coordinates.d.ts +14 -0
  213. package/dist/src/detect/detectors/location/coordinates.d.ts.map +1 -0
  214. package/dist/src/detect/detectors/location/coordinates.js +79 -0
  215. package/dist/src/detect/detectors/location/coordinates.js.map +1 -0
  216. package/dist/src/detect/detectors/location/index.d.ts +7 -0
  217. package/dist/src/detect/detectors/location/index.d.ts.map +1 -0
  218. package/dist/src/detect/detectors/location/index.js +7 -0
  219. package/dist/src/detect/detectors/location/index.js.map +1 -0
  220. package/dist/src/detect/detectors/location/postalCode.d.ts +13 -0
  221. package/dist/src/detect/detectors/location/postalCode.d.ts.map +1 -0
  222. package/dist/src/detect/detectors/location/postalCode.js +53 -0
  223. package/dist/src/detect/detectors/location/postalCode.js.map +1 -0
  224. package/dist/src/detect/detectors/location/postalRegistry.d.ts +19 -0
  225. package/dist/src/detect/detectors/location/postalRegistry.d.ts.map +1 -0
  226. package/dist/src/detect/detectors/location/postalRegistry.js +73 -0
  227. package/dist/src/detect/detectors/location/postalRegistry.js.map +1 -0
  228. package/dist/src/detect/detectors/location/streetAddress.d.ts +21 -0
  229. package/dist/src/detect/detectors/location/streetAddress.d.ts.map +1 -0
  230. package/dist/src/detect/detectors/location/streetAddress.js +70 -0
  231. package/dist/src/detect/detectors/location/streetAddress.js.map +1 -0
  232. package/dist/src/detect/detectors/natid/africa.d.ts +17 -0
  233. package/dist/src/detect/detectors/natid/africa.d.ts.map +1 -0
  234. package/dist/src/detect/detectors/natid/africa.js +106 -0
  235. package/dist/src/detect/detectors/natid/africa.js.map +1 -0
  236. package/dist/src/detect/detectors/natid/ar.d.ts +14 -0
  237. package/dist/src/detect/detectors/natid/ar.d.ts.map +1 -0
  238. package/dist/src/detect/detectors/natid/ar.js +62 -0
  239. package/dist/src/detect/detectors/natid/ar.js.map +1 -0
  240. package/dist/src/detect/detectors/natid/au.d.ts +13 -0
  241. package/dist/src/detect/detectors/natid/au.d.ts.map +1 -0
  242. package/dist/src/detect/detectors/natid/au.js +100 -0
  243. package/dist/src/detect/detectors/natid/au.js.map +1 -0
  244. package/dist/src/detect/detectors/natid/be.d.ts +8 -0
  245. package/dist/src/detect/detectors/natid/be.d.ts.map +1 -0
  246. package/dist/src/detect/detectors/natid/be.js +44 -0
  247. package/dist/src/detect/detectors/natid/be.js.map +1 -0
  248. package/dist/src/detect/detectors/natid/bg.d.ts +7 -0
  249. package/dist/src/detect/detectors/natid/bg.d.ts.map +1 -0
  250. package/dist/src/detect/detectors/natid/bg.js +44 -0
  251. package/dist/src/detect/detectors/natid/bg.js.map +1 -0
  252. package/dist/src/detect/detectors/natid/br.d.ts +8 -0
  253. package/dist/src/detect/detectors/natid/br.d.ts.map +1 -0
  254. package/dist/src/detect/detectors/natid/br.js +85 -0
  255. package/dist/src/detect/detectors/natid/br.js.map +1 -0
  256. package/dist/src/detect/detectors/natid/ca.d.ts +8 -0
  257. package/dist/src/detect/detectors/natid/ca.d.ts.map +1 -0
  258. package/dist/src/detect/detectors/natid/ca.js +41 -0
  259. package/dist/src/detect/detectors/natid/ca.js.map +1 -0
  260. package/dist/src/detect/detectors/natid/cl.d.ts +9 -0
  261. package/dist/src/detect/detectors/natid/cl.d.ts.map +1 -0
  262. package/dist/src/detect/detectors/natid/cl.js +47 -0
  263. package/dist/src/detect/detectors/natid/cl.js.map +1 -0
  264. package/dist/src/detect/detectors/natid/cn.d.ts +9 -0
  265. package/dist/src/detect/detectors/natid/cn.d.ts.map +1 -0
  266. package/dist/src/detect/detectors/natid/cn.js +49 -0
  267. package/dist/src/detect/detectors/natid/cn.js.map +1 -0
  268. package/dist/src/detect/detectors/natid/co.d.ts +10 -0
  269. package/dist/src/detect/detectors/natid/co.d.ts.map +1 -0
  270. package/dist/src/detect/detectors/natid/co.js +43 -0
  271. package/dist/src/detect/detectors/natid/co.js.map +1 -0
  272. package/dist/src/detect/detectors/natid/cz.d.ts +11 -0
  273. package/dist/src/detect/detectors/natid/cz.d.ts.map +1 -0
  274. package/dist/src/detect/detectors/natid/cz.js +44 -0
  275. package/dist/src/detect/detectors/natid/cz.js.map +1 -0
  276. package/dist/src/detect/detectors/natid/de.d.ts +16 -0
  277. package/dist/src/detect/detectors/natid/de.d.ts.map +1 -0
  278. package/dist/src/detect/detectors/natid/de.js +77 -0
  279. package/dist/src/detect/detectors/natid/de.js.map +1 -0
  280. package/dist/src/detect/detectors/natid/dk.d.ts +9 -0
  281. package/dist/src/detect/detectors/natid/dk.d.ts.map +1 -0
  282. package/dist/src/detect/detectors/natid/dk.js +31 -0
  283. package/dist/src/detect/detectors/natid/dk.js.map +1 -0
  284. package/dist/src/detect/detectors/natid/es.d.ts +12 -0
  285. package/dist/src/detect/detectors/natid/es.d.ts.map +1 -0
  286. package/dist/src/detect/detectors/natid/es.js +96 -0
  287. package/dist/src/detect/detectors/natid/es.js.map +1 -0
  288. package/dist/src/detect/detectors/natid/fi.d.ts +10 -0
  289. package/dist/src/detect/detectors/natid/fi.d.ts.map +1 -0
  290. package/dist/src/detect/detectors/natid/fi.js +40 -0
  291. package/dist/src/detect/detectors/natid/fi.js.map +1 -0
  292. package/dist/src/detect/detectors/natid/fr.d.ts +12 -0
  293. package/dist/src/detect/detectors/natid/fr.d.ts.map +1 -0
  294. package/dist/src/detect/detectors/natid/fr.js +61 -0
  295. package/dist/src/detect/detectors/natid/fr.js.map +1 -0
  296. package/dist/src/detect/detectors/natid/gb.d.ts +10 -0
  297. package/dist/src/detect/detectors/natid/gb.d.ts.map +1 -0
  298. package/dist/src/detect/detectors/natid/gb.js +72 -0
  299. package/dist/src/detect/detectors/natid/gb.js.map +1 -0
  300. package/dist/src/detect/detectors/natid/gr.d.ts +7 -0
  301. package/dist/src/detect/detectors/natid/gr.d.ts.map +1 -0
  302. package/dist/src/detect/detectors/natid/gr.js +36 -0
  303. package/dist/src/detect/detectors/natid/gr.js.map +1 -0
  304. package/dist/src/detect/detectors/natid/gulf.d.ts +16 -0
  305. package/dist/src/detect/detectors/natid/gulf.d.ts.map +1 -0
  306. package/dist/src/detect/detectors/natid/gulf.js +121 -0
  307. package/dist/src/detect/detectors/natid/gulf.js.map +1 -0
  308. package/dist/src/detect/detectors/natid/hk.d.ts +9 -0
  309. package/dist/src/detect/detectors/natid/hk.d.ts.map +1 -0
  310. package/dist/src/detect/detectors/natid/hk.js +41 -0
  311. package/dist/src/detect/detectors/natid/hk.js.map +1 -0
  312. package/dist/src/detect/detectors/natid/hr.d.ts +6 -0
  313. package/dist/src/detect/detectors/natid/hr.d.ts.map +1 -0
  314. package/dist/src/detect/detectors/natid/hr.js +32 -0
  315. package/dist/src/detect/detectors/natid/hr.js.map +1 -0
  316. package/dist/src/detect/detectors/natid/hu.d.ts +7 -0
  317. package/dist/src/detect/detectors/natid/hu.d.ts.map +1 -0
  318. package/dist/src/detect/detectors/natid/hu.js +37 -0
  319. package/dist/src/detect/detectors/natid/hu.js.map +1 -0
  320. package/dist/src/detect/detectors/natid/ie.d.ts +9 -0
  321. package/dist/src/detect/detectors/natid/ie.d.ts.map +1 -0
  322. package/dist/src/detect/detectors/natid/ie.js +36 -0
  323. package/dist/src/detect/detectors/natid/ie.js.map +1 -0
  324. package/dist/src/detect/detectors/natid/il.d.ts +10 -0
  325. package/dist/src/detect/detectors/natid/il.d.ts.map +1 -0
  326. package/dist/src/detect/detectors/natid/il.js +38 -0
  327. package/dist/src/detect/detectors/natid/il.js.map +1 -0
  328. package/dist/src/detect/detectors/natid/in.d.ts +17 -0
  329. package/dist/src/detect/detectors/natid/in.d.ts.map +1 -0
  330. package/dist/src/detect/detectors/natid/in.js +67 -0
  331. package/dist/src/detect/detectors/natid/in.js.map +1 -0
  332. package/dist/src/detect/detectors/natid/index.d.ts +55 -0
  333. package/dist/src/detect/detectors/natid/index.d.ts.map +1 -0
  334. package/dist/src/detect/detectors/natid/index.js +55 -0
  335. package/dist/src/detect/detectors/natid/index.js.map +1 -0
  336. package/dist/src/detect/detectors/natid/is.d.ts +8 -0
  337. package/dist/src/detect/detectors/natid/is.d.ts.map +1 -0
  338. package/dist/src/detect/detectors/natid/is.js +42 -0
  339. package/dist/src/detect/detectors/natid/is.js.map +1 -0
  340. package/dist/src/detect/detectors/natid/it.d.ts +12 -0
  341. package/dist/src/detect/detectors/natid/it.d.ts.map +1 -0
  342. package/dist/src/detect/detectors/natid/it.js +62 -0
  343. package/dist/src/detect/detectors/natid/it.js.map +1 -0
  344. package/dist/src/detect/detectors/natid/jp.d.ts +9 -0
  345. package/dist/src/detect/detectors/natid/jp.d.ts.map +1 -0
  346. package/dist/src/detect/detectors/natid/jp.js +46 -0
  347. package/dist/src/detect/detectors/natid/jp.js.map +1 -0
  348. package/dist/src/detect/detectors/natid/kr.d.ts +11 -0
  349. package/dist/src/detect/detectors/natid/kr.d.ts.map +1 -0
  350. package/dist/src/detect/detectors/natid/kr.js +40 -0
  351. package/dist/src/detect/detectors/natid/kr.js.map +1 -0
  352. package/dist/src/detect/detectors/natid/kz.d.ts +8 -0
  353. package/dist/src/detect/detectors/natid/kz.d.ts.map +1 -0
  354. package/dist/src/detect/detectors/natid/kz.js +46 -0
  355. package/dist/src/detect/detectors/natid/kz.js.map +1 -0
  356. package/dist/src/detect/detectors/natid/mx.d.ts +16 -0
  357. package/dist/src/detect/detectors/natid/mx.d.ts.map +1 -0
  358. package/dist/src/detect/detectors/natid/mx.js +82 -0
  359. package/dist/src/detect/detectors/natid/mx.js.map +1 -0
  360. package/dist/src/detect/detectors/natid/nl.d.ts +8 -0
  361. package/dist/src/detect/detectors/natid/nl.d.ts.map +1 -0
  362. package/dist/src/detect/detectors/natid/nl.js +40 -0
  363. package/dist/src/detect/detectors/natid/nl.js.map +1 -0
  364. package/dist/src/detect/detectors/natid/no.d.ts +9 -0
  365. package/dist/src/detect/detectors/natid/no.d.ts.map +1 -0
  366. package/dist/src/detect/detectors/natid/no.js +52 -0
  367. package/dist/src/detect/detectors/natid/no.js.map +1 -0
  368. package/dist/src/detect/detectors/natid/nz.d.ts +9 -0
  369. package/dist/src/detect/detectors/natid/nz.d.ts.map +1 -0
  370. package/dist/src/detect/detectors/natid/nz.js +52 -0
  371. package/dist/src/detect/detectors/natid/nz.js.map +1 -0
  372. package/dist/src/detect/detectors/natid/pe.d.ts +7 -0
  373. package/dist/src/detect/detectors/natid/pe.d.ts.map +1 -0
  374. package/dist/src/detect/detectors/natid/pe.js +26 -0
  375. package/dist/src/detect/detectors/natid/pe.js.map +1 -0
  376. package/dist/src/detect/detectors/natid/pl.d.ts +11 -0
  377. package/dist/src/detect/detectors/natid/pl.d.ts.map +1 -0
  378. package/dist/src/detect/detectors/natid/pl.js +105 -0
  379. package/dist/src/detect/detectors/natid/pl.js.map +1 -0
  380. package/dist/src/detect/detectors/natid/pt.d.ts +6 -0
  381. package/dist/src/detect/detectors/natid/pt.d.ts.map +1 -0
  382. package/dist/src/detect/detectors/natid/pt.js +35 -0
  383. package/dist/src/detect/detectors/natid/pt.js.map +1 -0
  384. package/dist/src/detect/detectors/natid/ro.d.ts +8 -0
  385. package/dist/src/detect/detectors/natid/ro.d.ts.map +1 -0
  386. package/dist/src/detect/detectors/natid/ro.js +48 -0
  387. package/dist/src/detect/detectors/natid/ro.js.map +1 -0
  388. package/dist/src/detect/detectors/natid/ru.d.ts +11 -0
  389. package/dist/src/detect/detectors/natid/ru.d.ts.map +1 -0
  390. package/dist/src/detect/detectors/natid/ru.js +86 -0
  391. package/dist/src/detect/detectors/natid/ru.js.map +1 -0
  392. package/dist/src/detect/detectors/natid/se.d.ts +9 -0
  393. package/dist/src/detect/detectors/natid/se.d.ts.map +1 -0
  394. package/dist/src/detect/detectors/natid/se.js +43 -0
  395. package/dist/src/detect/detectors/natid/se.js.map +1 -0
  396. package/dist/src/detect/detectors/natid/seasia.d.ts +19 -0
  397. package/dist/src/detect/detectors/natid/seasia.d.ts.map +1 -0
  398. package/dist/src/detect/detectors/natid/seasia.js +182 -0
  399. package/dist/src/detect/detectors/natid/seasia.js.map +1 -0
  400. package/dist/src/detect/detectors/natid/sg.d.ts +8 -0
  401. package/dist/src/detect/detectors/natid/sg.d.ts.map +1 -0
  402. package/dist/src/detect/detectors/natid/sg.js +39 -0
  403. package/dist/src/detect/detectors/natid/sg.js.map +1 -0
  404. package/dist/src/detect/detectors/natid/si.d.ts +8 -0
  405. package/dist/src/detect/detectors/natid/si.d.ts.map +1 -0
  406. package/dist/src/detect/detectors/natid/si.js +44 -0
  407. package/dist/src/detect/detectors/natid/si.js.map +1 -0
  408. package/dist/src/detect/detectors/natid/tr.d.ts +14 -0
  409. package/dist/src/detect/detectors/natid/tr.d.ts.map +1 -0
  410. package/dist/src/detect/detectors/natid/tr.js +79 -0
  411. package/dist/src/detect/detectors/natid/tr.js.map +1 -0
  412. package/dist/src/detect/detectors/natid/tw.d.ts +9 -0
  413. package/dist/src/detect/detectors/natid/tw.d.ts.map +1 -0
  414. package/dist/src/detect/detectors/natid/tw.js +40 -0
  415. package/dist/src/detect/detectors/natid/tw.js.map +1 -0
  416. package/dist/src/detect/detectors/natid/ua.d.ts +7 -0
  417. package/dist/src/detect/detectors/natid/ua.d.ts.map +1 -0
  418. package/dist/src/detect/detectors/natid/ua.js +38 -0
  419. package/dist/src/detect/detectors/natid/ua.js.map +1 -0
  420. package/dist/src/detect/detectors/natid/us.d.ts +15 -0
  421. package/dist/src/detect/detectors/natid/us.d.ts.map +1 -0
  422. package/dist/src/detect/detectors/natid/us.js +119 -0
  423. package/dist/src/detect/detectors/natid/us.js.map +1 -0
  424. package/dist/src/detect/detectors/natid/za.d.ts +9 -0
  425. package/dist/src/detect/detectors/natid/za.d.ts.map +1 -0
  426. package/dist/src/detect/detectors/natid/za.js +44 -0
  427. package/dist/src/detect/detectors/natid/za.js.map +1 -0
  428. package/dist/src/detect/detectors/secrets/apiKey.d.ts +14 -0
  429. package/dist/src/detect/detectors/secrets/apiKey.d.ts.map +1 -0
  430. package/dist/src/detect/detectors/secrets/apiKey.js +103 -0
  431. package/dist/src/detect/detectors/secrets/apiKey.js.map +1 -0
  432. package/dist/src/detect/detectors/secrets/connectionString.d.ts +12 -0
  433. package/dist/src/detect/detectors/secrets/connectionString.d.ts.map +1 -0
  434. package/dist/src/detect/detectors/secrets/connectionString.js +70 -0
  435. package/dist/src/detect/detectors/secrets/connectionString.js.map +1 -0
  436. package/dist/src/detect/detectors/secrets/genericSecret.d.ts +22 -0
  437. package/dist/src/detect/detectors/secrets/genericSecret.d.ts.map +1 -0
  438. package/dist/src/detect/detectors/secrets/genericSecret.js +77 -0
  439. package/dist/src/detect/detectors/secrets/genericSecret.js.map +1 -0
  440. package/dist/src/detect/detectors/secrets/index.d.ts +9 -0
  441. package/dist/src/detect/detectors/secrets/index.d.ts.map +1 -0
  442. package/dist/src/detect/detectors/secrets/index.js +9 -0
  443. package/dist/src/detect/detectors/secrets/index.js.map +1 -0
  444. package/dist/src/detect/detectors/secrets/jwt.d.ts +11 -0
  445. package/dist/src/detect/detectors/secrets/jwt.d.ts.map +1 -0
  446. package/dist/src/detect/detectors/secrets/jwt.js +111 -0
  447. package/dist/src/detect/detectors/secrets/jwt.js.map +1 -0
  448. package/dist/src/detect/detectors/secrets/pemPrivateKey.d.ts +16 -0
  449. package/dist/src/detect/detectors/secrets/pemPrivateKey.d.ts.map +1 -0
  450. package/dist/src/detect/detectors/secrets/pemPrivateKey.js +56 -0
  451. package/dist/src/detect/detectors/secrets/pemPrivateKey.js.map +1 -0
  452. package/dist/src/detect/detectors/vat/euVat.d.ts +17 -0
  453. package/dist/src/detect/detectors/vat/euVat.d.ts.map +1 -0
  454. package/dist/src/detect/detectors/vat/euVat.js +293 -0
  455. package/dist/src/detect/detectors/vat/euVat.js.map +1 -0
  456. package/dist/src/detect/detectors/vat/index.d.ts +5 -0
  457. package/dist/src/detect/detectors/vat/index.d.ts.map +1 -0
  458. package/dist/src/detect/detectors/vat/index.js +5 -0
  459. package/dist/src/detect/detectors/vat/index.js.map +1 -0
  460. package/dist/src/detect/entropy.d.ts +28 -0
  461. package/dist/src/detect/entropy.d.ts.map +1 -0
  462. package/dist/src/detect/entropy.js +64 -0
  463. package/dist/src/detect/entropy.js.map +1 -0
  464. package/dist/src/detect/isoCountries.d.ts +10 -0
  465. package/dist/src/detect/isoCountries.d.ts.map +1 -0
  466. package/dist/src/detect/isoCountries.js +25 -0
  467. package/dist/src/detect/isoCountries.js.map +1 -0
  468. package/dist/src/detect/registry.d.ts +50 -0
  469. package/dist/src/detect/registry.d.ts.map +1 -0
  470. package/dist/src/detect/registry.js +110 -0
  471. package/dist/src/detect/registry.js.map +1 -0
  472. package/dist/src/detect/runner.d.ts +64 -0
  473. package/dist/src/detect/runner.d.ts.map +1 -0
  474. package/dist/src/detect/runner.js +142 -0
  475. package/dist/src/detect/runner.js.map +1 -0
  476. package/dist/src/detect/types.d.ts +251 -0
  477. package/dist/src/detect/types.d.ts.map +1 -0
  478. package/dist/src/detect/types.js +59 -0
  479. package/dist/src/detect/types.js.map +1 -0
  480. package/dist/src/encoding/base58.d.ts +26 -0
  481. package/dist/src/encoding/base58.d.ts.map +1 -0
  482. package/dist/src/encoding/base58.js +77 -0
  483. package/dist/src/encoding/base58.js.map +1 -0
  484. package/dist/src/encoding/base58monero.d.ts +15 -0
  485. package/dist/src/encoding/base58monero.d.ts.map +1 -0
  486. package/dist/src/encoding/base58monero.js +87 -0
  487. package/dist/src/encoding/base58monero.js.map +1 -0
  488. package/dist/src/encoding/bech32.d.ts +28 -0
  489. package/dist/src/encoding/bech32.d.ts.map +1 -0
  490. package/dist/src/encoding/bech32.js +108 -0
  491. package/dist/src/encoding/bech32.js.map +1 -0
  492. package/dist/src/encoding/bytes.d.ts +15 -0
  493. package/dist/src/encoding/bytes.d.ts.map +1 -0
  494. package/dist/src/encoding/bytes.js +46 -0
  495. package/dist/src/encoding/bytes.js.map +1 -0
  496. package/dist/src/entityFamily.d.ts +18 -0
  497. package/dist/src/entityFamily.d.ts.map +1 -0
  498. package/dist/src/entityFamily.js +54 -0
  499. package/dist/src/entityFamily.js.map +1 -0
  500. package/dist/src/entityLabel.d.ts +18 -0
  501. package/dist/src/entityLabel.d.ts.map +1 -0
  502. package/dist/src/entityLabel.js +53 -0
  503. package/dist/src/entityLabel.js.map +1 -0
  504. package/dist/src/entityTypes.d.ts +64 -0
  505. package/dist/src/entityTypes.d.ts.map +1 -0
  506. package/dist/src/entityTypes.js +94 -0
  507. package/dist/src/entityTypes.js.map +1 -0
  508. package/dist/src/exposure/index.d.ts +86 -0
  509. package/dist/src/exposure/index.d.ts.map +1 -0
  510. package/dist/src/exposure/index.js +134 -0
  511. package/dist/src/exposure/index.js.map +1 -0
  512. package/dist/src/fuse/calibrate.d.ts +95 -0
  513. package/dist/src/fuse/calibrate.d.ts.map +1 -0
  514. package/dist/src/fuse/calibrate.js +165 -0
  515. package/dist/src/fuse/calibrate.js.map +1 -0
  516. package/dist/src/fuse/defaultCalibration.d.ts +52 -0
  517. package/dist/src/fuse/defaultCalibration.d.ts.map +1 -0
  518. package/dist/src/fuse/defaultCalibration.js +41 -0
  519. package/dist/src/fuse/defaultCalibration.js.map +1 -0
  520. package/dist/src/fuse/explain.d.ts +55 -0
  521. package/dist/src/fuse/explain.d.ts.map +1 -0
  522. package/dist/src/fuse/explain.js +91 -0
  523. package/dist/src/fuse/explain.js.map +1 -0
  524. package/dist/src/fuse/profiles.d.ts +80 -0
  525. package/dist/src/fuse/profiles.d.ts.map +1 -0
  526. package/dist/src/fuse/profiles.js +126 -0
  527. package/dist/src/fuse/profiles.js.map +1 -0
  528. package/dist/src/fuse/resolve.d.ts +73 -0
  529. package/dist/src/fuse/resolve.d.ts.map +1 -0
  530. package/dist/src/fuse/resolve.js +206 -0
  531. package/dist/src/fuse/resolve.js.map +1 -0
  532. package/dist/src/gazetteer/index.d.ts +41 -0
  533. package/dist/src/gazetteer/index.d.ts.map +1 -0
  534. package/dist/src/gazetteer/index.js +117 -0
  535. package/dist/src/gazetteer/index.js.map +1 -0
  536. package/dist/src/generate/bankcodes.d.ts +20 -0
  537. package/dist/src/generate/bankcodes.d.ts.map +1 -0
  538. package/dist/src/generate/bankcodes.js +71 -0
  539. package/dist/src/generate/bankcodes.js.map +1 -0
  540. package/dist/src/generate/contact.d.ts +31 -0
  541. package/dist/src/generate/contact.d.ts.map +1 -0
  542. package/dist/src/generate/contact.js +139 -0
  543. package/dist/src/generate/contact.js.map +1 -0
  544. package/dist/src/generate/crypto.d.ts +27 -0
  545. package/dist/src/generate/crypto.d.ts.map +1 -0
  546. package/dist/src/generate/crypto.js +88 -0
  547. package/dist/src/generate/crypto.js.map +1 -0
  548. package/dist/src/generate/documents.d.ts +24 -0
  549. package/dist/src/generate/documents.d.ts.map +1 -0
  550. package/dist/src/generate/documents.js +124 -0
  551. package/dist/src/generate/documents.js.map +1 -0
  552. package/dist/src/generate/financial.d.ts +26 -0
  553. package/dist/src/generate/financial.d.ts.map +1 -0
  554. package/dist/src/generate/financial.js +136 -0
  555. package/dist/src/generate/financial.js.map +1 -0
  556. package/dist/src/generate/index.d.ts +23 -0
  557. package/dist/src/generate/index.d.ts.map +1 -0
  558. package/dist/src/generate/index.js +23 -0
  559. package/dist/src/generate/index.js.map +1 -0
  560. package/dist/src/generate/location.d.ts +12 -0
  561. package/dist/src/generate/location.d.ts.map +1 -0
  562. package/dist/src/generate/location.js +75 -0
  563. package/dist/src/generate/location.js.map +1 -0
  564. package/dist/src/generate/natidAmOc.d.ts +22 -0
  565. package/dist/src/generate/natidAmOc.d.ts.map +1 -0
  566. package/dist/src/generate/natidAmOc.js +181 -0
  567. package/dist/src/generate/natidAmOc.js.map +1 -0
  568. package/dist/src/generate/natidAsia.d.ts +20 -0
  569. package/dist/src/generate/natidAsia.d.ts.map +1 -0
  570. package/dist/src/generate/natidAsia.js +147 -0
  571. package/dist/src/generate/natidAsia.js.map +1 -0
  572. package/dist/src/generate/natidCee.d.ts +21 -0
  573. package/dist/src/generate/natidCee.d.ts.map +1 -0
  574. package/dist/src/generate/natidCee.js +181 -0
  575. package/dist/src/generate/natidCee.js.map +1 -0
  576. package/dist/src/generate/natidMeCis.d.ts +17 -0
  577. package/dist/src/generate/natidMeCis.d.ts.map +1 -0
  578. package/dist/src/generate/natidMeCis.js +121 -0
  579. package/dist/src/generate/natidMeCis.js.map +1 -0
  580. package/dist/src/generate/natidWest.d.ts +32 -0
  581. package/dist/src/generate/natidWest.d.ts.map +1 -0
  582. package/dist/src/generate/natidWest.js +187 -0
  583. package/dist/src/generate/natidWest.js.map +1 -0
  584. package/dist/src/generate/prng.d.ts +10 -0
  585. package/dist/src/generate/prng.d.ts.map +1 -0
  586. package/dist/src/generate/prng.js +18 -0
  587. package/dist/src/generate/prng.js.map +1 -0
  588. package/dist/src/generate/secrets.d.ts +23 -0
  589. package/dist/src/generate/secrets.d.ts.map +1 -0
  590. package/dist/src/generate/secrets.js +126 -0
  591. package/dist/src/generate/secrets.js.map +1 -0
  592. package/dist/src/generate/vat.d.ts +11 -0
  593. package/dist/src/generate/vat.d.ts.map +1 -0
  594. package/dist/src/generate/vat.js +233 -0
  595. package/dist/src/generate/vat.js.map +1 -0
  596. package/dist/src/index.d.ts +81 -0
  597. package/dist/src/index.d.ts.map +1 -0
  598. package/dist/src/index.js +76 -0
  599. package/dist/src/index.js.map +1 -0
  600. package/dist/src/mask/egressGuard.d.ts +54 -0
  601. package/dist/src/mask/egressGuard.d.ts.map +1 -0
  602. package/dist/src/mask/egressGuard.js +67 -0
  603. package/dist/src/mask/egressGuard.js.map +1 -0
  604. package/dist/src/mask/masker.d.ts +76 -0
  605. package/dist/src/mask/masker.d.ts.map +1 -0
  606. package/dist/src/mask/masker.js +201 -0
  607. package/dist/src/mask/masker.js.map +1 -0
  608. package/dist/src/mask/restorer.d.ts +96 -0
  609. package/dist/src/mask/restorer.d.ts.map +1 -0
  610. package/dist/src/mask/restorer.js +263 -0
  611. package/dist/src/mask/restorer.js.map +1 -0
  612. package/dist/src/mask/surrogatePools.d.ts +33 -0
  613. package/dist/src/mask/surrogatePools.d.ts.map +1 -0
  614. package/dist/src/mask/surrogatePools.js +81 -0
  615. package/dist/src/mask/surrogatePools.js.map +1 -0
  616. package/dist/src/mask/surrogates.d.ts +45 -0
  617. package/dist/src/mask/surrogates.d.ts.map +1 -0
  618. package/dist/src/mask/surrogates.js +241 -0
  619. package/dist/src/mask/surrogates.js.map +1 -0
  620. package/dist/src/mask/vault.d.ts +76 -0
  621. package/dist/src/mask/vault.d.ts.map +1 -0
  622. package/dist/src/mask/vault.js +141 -0
  623. package/dist/src/mask/vault.js.map +1 -0
  624. package/dist/src/ner/align.d.ts +36 -0
  625. package/dist/src/ner/align.d.ts.map +1 -0
  626. package/dist/src/ner/align.js +73 -0
  627. package/dist/src/ner/align.js.map +1 -0
  628. package/dist/src/ner/chunk.d.ts +27 -0
  629. package/dist/src/ner/chunk.d.ts.map +1 -0
  630. package/dist/src/ner/chunk.js +55 -0
  631. package/dist/src/ner/chunk.js.map +1 -0
  632. package/dist/src/ner/chunkCache.d.ts +63 -0
  633. package/dist/src/ner/chunkCache.d.ts.map +1 -0
  634. package/dist/src/ner/chunkCache.js +99 -0
  635. package/dist/src/ner/chunkCache.js.map +1 -0
  636. package/dist/src/ner/engine.d.ts +53 -0
  637. package/dist/src/ner/engine.d.ts.map +1 -0
  638. package/dist/src/ner/engine.js +113 -0
  639. package/dist/src/ner/engine.js.map +1 -0
  640. package/dist/src/ner/merge.d.ts +26 -0
  641. package/dist/src/ner/merge.d.ts.map +1 -0
  642. package/dist/src/ner/merge.js +108 -0
  643. package/dist/src/ner/merge.js.map +1 -0
  644. package/dist/src/ner/runStage2.d.ts +17 -0
  645. package/dist/src/ner/runStage2.d.ts.map +1 -0
  646. package/dist/src/ner/runStage2.js +43 -0
  647. package/dist/src/ner/runStage2.js.map +1 -0
  648. package/dist/src/ner/stage2b.d.ts +59 -0
  649. package/dist/src/ner/stage2b.d.ts.map +1 -0
  650. package/dist/src/ner/stage2b.js +51 -0
  651. package/dist/src/ner/stage2b.js.map +1 -0
  652. package/dist/src/ner/transformersClassifier.d.ts +45 -0
  653. package/dist/src/ner/transformersClassifier.d.ts.map +1 -0
  654. package/dist/src/ner/transformersClassifier.js +40 -0
  655. package/dist/src/ner/transformersClassifier.js.map +1 -0
  656. package/dist/src/ner/types.d.ts +93 -0
  657. package/dist/src/ner/types.d.ts.map +1 -0
  658. package/dist/src/ner/types.js +12 -0
  659. package/dist/src/ner/types.js.map +1 -0
  660. package/dist/src/normalization.d.ts +24 -0
  661. package/dist/src/normalization.d.ts.map +1 -0
  662. package/dist/src/normalization.js +92 -0
  663. package/dist/src/normalization.js.map +1 -0
  664. package/dist/src/offsetMap.d.ts +165 -0
  665. package/dist/src/offsetMap.d.ts.map +1 -0
  666. package/dist/src/offsetMap.js +225 -0
  667. package/dist/src/offsetMap.js.map +1 -0
  668. package/dist/src/pipeline.d.ts +58 -0
  669. package/dist/src/pipeline.d.ts.map +1 -0
  670. package/dist/src/pipeline.js +57 -0
  671. package/dist/src/pipeline.js.map +1 -0
  672. package/dist/src/protect.d.ts +146 -0
  673. package/dist/src/protect.d.ts.map +1 -0
  674. package/dist/src/protect.js +161 -0
  675. package/dist/src/protect.js.map +1 -0
  676. package/dist/src/scripts.d.ts +37 -0
  677. package/dist/src/scripts.d.ts.map +1 -0
  678. package/dist/src/scripts.js +145 -0
  679. package/dist/src/scripts.js.map +1 -0
  680. package/dist/src/transforms/foldDigits.d.ts +49 -0
  681. package/dist/src/transforms/foldDigits.d.ts.map +1 -0
  682. package/dist/src/transforms/foldDigits.js +135 -0
  683. package/dist/src/transforms/foldDigits.js.map +1 -0
  684. package/dist/src/transforms/graphemes.d.ts +6 -0
  685. package/dist/src/transforms/graphemes.d.ts.map +1 -0
  686. package/dist/src/transforms/graphemes.js +6 -0
  687. package/dist/src/transforms/graphemes.js.map +1 -0
  688. package/dist/src/transforms/homoglyphFold.d.ts +5 -0
  689. package/dist/src/transforms/homoglyphFold.d.ts.map +1 -0
  690. package/dist/src/transforms/homoglyphFold.js +214 -0
  691. package/dist/src/transforms/homoglyphFold.js.map +1 -0
  692. package/dist/src/transforms/nfkc.d.ts +20 -0
  693. package/dist/src/transforms/nfkc.d.ts.map +1 -0
  694. package/dist/src/transforms/nfkc.js +48 -0
  695. package/dist/src/transforms/nfkc.js.map +1 -0
  696. package/dist/src/transforms/stripInvisibles.d.ts +37 -0
  697. package/dist/src/transforms/stripInvisibles.d.ts.map +1 -0
  698. package/dist/src/transforms/stripInvisibles.js +151 -0
  699. package/dist/src/transforms/stripInvisibles.js.map +1 -0
  700. package/dist/src/transforms/whitespacePunct.d.ts +21 -0
  701. package/dist/src/transforms/whitespacePunct.d.ts.map +1 -0
  702. package/dist/src/transforms/whitespacePunct.js +100 -0
  703. package/dist/src/transforms/whitespacePunct.js.map +1 -0
  704. package/dist/src/types.d.ts +212 -0
  705. package/dist/src/types.d.ts.map +1 -0
  706. package/dist/src/types.js +14 -0
  707. package/dist/src/types.js.map +1 -0
  708. package/package.json +67 -0
  709. package/src/checksums/aba.ts +45 -0
  710. package/src/checksums/digits.ts +108 -0
  711. package/src/checksums/icao9303.ts +53 -0
  712. package/src/checksums/index.ts +36 -0
  713. package/src/checksums/iso7064.ts +168 -0
  714. package/src/checksums/luhn.ts +66 -0
  715. package/src/checksums/mod97.ts +91 -0
  716. package/src/checksums/verhoeff.ts +84 -0
  717. package/src/checksums/weighted.ts +108 -0
  718. package/src/context/documentProfile.ts +293 -0
  719. package/src/context/negativeRules.ts +765 -0
  720. package/src/context/score.ts +430 -0
  721. package/src/context/structure.ts +611 -0
  722. package/src/context/triggers.ts +266 -0
  723. package/src/context/types.ts +150 -0
  724. package/src/crypto/keccak256.ts +98 -0
  725. package/src/crypto/sha256.ts +76 -0
  726. package/src/detect/AUTHORING.md +50 -0
  727. package/src/detect/detectors/bankcodes/auBsb.ts +36 -0
  728. package/src/detect/detectors/bankcodes/brAgencia.ts +46 -0
  729. package/src/detect/detectors/bankcodes/caTransit.ts +89 -0
  730. package/src/detect/detectors/bankcodes/inIfsc.ts +40 -0
  731. package/src/detect/detectors/bankcodes/index.ts +9 -0
  732. package/src/detect/detectors/bankcodes/ukSortCode.ts +38 -0
  733. package/src/detect/detectors/bankcodes/usRouting.ts +47 -0
  734. package/src/detect/detectors/contact/email.ts +113 -0
  735. package/src/detect/detectors/contact/index.ts +10 -0
  736. package/src/detect/detectors/contact/ipv4.ts +112 -0
  737. package/src/detect/detectors/contact/ipv6.ts +188 -0
  738. package/src/detect/detectors/contact/mac.ts +68 -0
  739. package/src/detect/detectors/contact/phone.ts +81 -0
  740. package/src/detect/detectors/contact/urlCredentials.ts +124 -0
  741. package/src/detect/detectors/crypto/ada.ts +52 -0
  742. package/src/detect/detectors/crypto/btc.ts +77 -0
  743. package/src/detect/detectors/crypto/dot.ts +42 -0
  744. package/src/detect/detectors/crypto/eth.ts +70 -0
  745. package/src/detect/detectors/crypto/index.ts +11 -0
  746. package/src/detect/detectors/crypto/ltc.ts +69 -0
  747. package/src/detect/detectors/crypto/sol.ts +41 -0
  748. package/src/detect/detectors/crypto/trx.ts +35 -0
  749. package/src/detect/detectors/crypto/xmr.ts +54 -0
  750. package/src/detect/detectors/documents/driversLicense.ts +83 -0
  751. package/src/detect/detectors/documents/healthData.ts +88 -0
  752. package/src/detect/detectors/documents/index.ts +8 -0
  753. package/src/detect/detectors/documents/passportMrz.ts +203 -0
  754. package/src/detect/detectors/documents/usNpi.ts +50 -0
  755. package/src/detect/detectors/documents/vin.ts +67 -0
  756. package/src/detect/detectors/financial/creditCard.ts +167 -0
  757. package/src/detect/detectors/financial/iban.ts +82 -0
  758. package/src/detect/detectors/financial/ibanRegistry.ts +112 -0
  759. package/src/detect/detectors/financial/index.ts +6 -0
  760. package/src/detect/detectors/financial/swiftBic.ts +61 -0
  761. package/src/detect/detectors/index.ts +14 -0
  762. package/src/detect/detectors/location/coordinates.ts +84 -0
  763. package/src/detect/detectors/location/index.ts +6 -0
  764. package/src/detect/detectors/location/postalCode.ts +56 -0
  765. package/src/detect/detectors/location/postalRegistry.ts +74 -0
  766. package/src/detect/detectors/location/streetAddress.ts +84 -0
  767. package/src/detect/detectors/natid/africa.ts +108 -0
  768. package/src/detect/detectors/natid/ar.ts +62 -0
  769. package/src/detect/detectors/natid/au.ts +99 -0
  770. package/src/detect/detectors/natid/be.ts +45 -0
  771. package/src/detect/detectors/natid/bg.ts +44 -0
  772. package/src/detect/detectors/natid/br.ts +81 -0
  773. package/src/detect/detectors/natid/ca.ts +40 -0
  774. package/src/detect/detectors/natid/cl.ts +47 -0
  775. package/src/detect/detectors/natid/cn.ts +48 -0
  776. package/src/detect/detectors/natid/co.ts +46 -0
  777. package/src/detect/detectors/natid/cz.ts +44 -0
  778. package/src/detect/detectors/natid/de.ts +75 -0
  779. package/src/detect/detectors/natid/dk.ts +31 -0
  780. package/src/detect/detectors/natid/es.ts +95 -0
  781. package/src/detect/detectors/natid/fi.ts +41 -0
  782. package/src/detect/detectors/natid/fr.ts +63 -0
  783. package/src/detect/detectors/natid/gb.ts +70 -0
  784. package/src/detect/detectors/natid/gr.ts +35 -0
  785. package/src/detect/detectors/natid/gulf.ts +116 -0
  786. package/src/detect/detectors/natid/hk.ts +42 -0
  787. package/src/detect/detectors/natid/hr.ts +32 -0
  788. package/src/detect/detectors/natid/hu.ts +36 -0
  789. package/src/detect/detectors/natid/ie.ts +37 -0
  790. package/src/detect/detectors/natid/il.ts +37 -0
  791. package/src/detect/detectors/natid/in.ts +67 -0
  792. package/src/detect/detectors/natid/index.ts +54 -0
  793. package/src/detect/detectors/natid/is.ts +42 -0
  794. package/src/detect/detectors/natid/it.ts +65 -0
  795. package/src/detect/detectors/natid/jp.ts +48 -0
  796. package/src/detect/detectors/natid/kr.ts +41 -0
  797. package/src/detect/detectors/natid/kz.ts +44 -0
  798. package/src/detect/detectors/natid/mx.ts +83 -0
  799. package/src/detect/detectors/natid/nl.ts +38 -0
  800. package/src/detect/detectors/natid/no.ts +50 -0
  801. package/src/detect/detectors/natid/nz.ts +53 -0
  802. package/src/detect/detectors/natid/pe.ts +28 -0
  803. package/src/detect/detectors/natid/pl.ts +100 -0
  804. package/src/detect/detectors/natid/pt.ts +36 -0
  805. package/src/detect/detectors/natid/ro.ts +47 -0
  806. package/src/detect/detectors/natid/ru.ts +82 -0
  807. package/src/detect/detectors/natid/se.ts +42 -0
  808. package/src/detect/detectors/natid/seasia.ts +174 -0
  809. package/src/detect/detectors/natid/sg.ts +39 -0
  810. package/src/detect/detectors/natid/si.ts +42 -0
  811. package/src/detect/detectors/natid/tr.ts +76 -0
  812. package/src/detect/detectors/natid/tw.ts +41 -0
  813. package/src/detect/detectors/natid/ua.ts +38 -0
  814. package/src/detect/detectors/natid/us.ts +118 -0
  815. package/src/detect/detectors/natid/za.ts +42 -0
  816. package/src/detect/detectors/secrets/apiKey.ts +115 -0
  817. package/src/detect/detectors/secrets/connectionString.ts +71 -0
  818. package/src/detect/detectors/secrets/genericSecret.ts +81 -0
  819. package/src/detect/detectors/secrets/index.ts +8 -0
  820. package/src/detect/detectors/secrets/jwt.ts +101 -0
  821. package/src/detect/detectors/secrets/pemPrivateKey.ts +59 -0
  822. package/src/detect/detectors/vat/euVat.ts +280 -0
  823. package/src/detect/detectors/vat/index.ts +4 -0
  824. package/src/detect/entropy.ts +60 -0
  825. package/src/detect/isoCountries.ts +30 -0
  826. package/src/detect/registry.ts +134 -0
  827. package/src/detect/runner.ts +187 -0
  828. package/src/detect/types.ts +296 -0
  829. package/src/encoding/base58.ts +85 -0
  830. package/src/encoding/base58monero.ts +90 -0
  831. package/src/encoding/bech32.ts +125 -0
  832. package/src/encoding/bytes.ts +48 -0
  833. package/src/entityFamily.ts +70 -0
  834. package/src/entityLabel.ts +56 -0
  835. package/src/entityTypes.ts +107 -0
  836. package/src/exposure/index.ts +189 -0
  837. package/src/fuse/calibrate.ts +224 -0
  838. package/src/fuse/defaultCalibration.ts +71 -0
  839. package/src/fuse/explain.ts +114 -0
  840. package/src/fuse/profiles.ts +187 -0
  841. package/src/fuse/resolve.ts +237 -0
  842. package/src/gazetteer/index.ts +139 -0
  843. package/src/generate/bankcodes.ts +82 -0
  844. package/src/generate/contact.ts +147 -0
  845. package/src/generate/crypto.ts +91 -0
  846. package/src/generate/documents.ts +142 -0
  847. package/src/generate/financial.ts +149 -0
  848. package/src/generate/index.ts +22 -0
  849. package/src/generate/location.ts +80 -0
  850. package/src/generate/natidAmOc.ts +198 -0
  851. package/src/generate/natidAsia.ts +162 -0
  852. package/src/generate/natidCee.ts +196 -0
  853. package/src/generate/natidMeCis.ts +131 -0
  854. package/src/generate/natidWest.ts +208 -0
  855. package/src/generate/prng.ts +17 -0
  856. package/src/generate/secrets.ts +141 -0
  857. package/src/generate/vat.ts +239 -0
  858. package/src/index.ts +186 -0
  859. package/src/mask/egressGuard.ts +88 -0
  860. package/src/mask/masker.ts +276 -0
  861. package/src/mask/restorer.ts +284 -0
  862. package/src/mask/surrogatePools.ts +96 -0
  863. package/src/mask/surrogates.ts +248 -0
  864. package/src/mask/vault.ts +153 -0
  865. package/src/ner/align.ts +86 -0
  866. package/src/ner/chunk.ts +65 -0
  867. package/src/ner/chunkCache.ts +110 -0
  868. package/src/ner/engine.ts +141 -0
  869. package/src/ner/merge.ts +123 -0
  870. package/src/ner/runStage2.ts +51 -0
  871. package/src/ner/stage2b.ts +73 -0
  872. package/src/ner/transformersClassifier.ts +79 -0
  873. package/src/ner/types.ts +99 -0
  874. package/src/normalization.ts +119 -0
  875. package/src/offsetMap.ts +271 -0
  876. package/src/pipeline.ts +96 -0
  877. package/src/protect.ts +284 -0
  878. package/src/scripts.ts +164 -0
  879. package/src/transforms/foldDigits.ts +138 -0
  880. package/src/transforms/graphemes.ts +5 -0
  881. package/src/transforms/homoglyphFold.ts +221 -0
  882. package/src/transforms/nfkc.ts +48 -0
  883. package/src/transforms/stripInvisibles.ts +158 -0
  884. package/src/transforms/whitespacePunct.ts +100 -0
  885. package/src/types.ts +339 -0
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Stage 4 — EXPLANATIONS.
3
+ *
4
+ * SPEC.md: "Every emitted entity carries an EXPLANATION: which stages fired,
5
+ * which triggers were found, which validator passed. This drives the review UI
6
+ * and makes failures diagnosable."
7
+ *
8
+ * The last clause is the one that shapes this module. An explanation is not
9
+ * decoration for the UI — it is how a wrong detection gets diagnosed without
10
+ * re-running the pipeline under a debugger. So it records what actually
11
+ * happened rather than a summary of it: which stages contributed, which named
12
+ * Stage 3 signals fired and with what sign, and what the profile decided.
13
+ *
14
+ * NO PLAINTEXT IN EXPLANATIONS, which is why triggers are lexicon terms and
15
+ * signal names rather than document text. Explanations flow into eval reports,
16
+ * the review panel, and the popup; a value that reached any of those would
17
+ * breach SPEC's third non-negotiable. The one exception is the entity's own
18
+ * text, which the caller already holds and which `DetectedEntity` carries in
19
+ * its own field.
20
+ */
21
+ /**
22
+ * Build the explanation for one entity.
23
+ *
24
+ * `triggers` carries the Stage 3 signal names rather than only lexicon
25
+ * matches, because "why was this reported" is answered as much by
26
+ * `structure:key-names-API_KEY` as by a trigger word — and a reviewer chasing
27
+ * a false positive needs the negative signals too, which is why suppression
28
+ * and penalty signals appear with their sign rather than being filtered out.
29
+ */
30
+ export function explain(input) {
31
+ const { scored } = input;
32
+ const stages = [scored.candidate.stage];
33
+ // Stage 3 fired if it contributed anything at all.
34
+ if (scored.contributions.length > 0)
35
+ stages.push('stage3-context');
36
+ stages.push('stage4-fusion');
37
+ const triggers = scored.contributions.map((c) => {
38
+ const sign = c.delta >= 0 ? '+' : '';
39
+ const detail = c.detail === undefined ? '' : ` (${c.detail})`;
40
+ return `${c.signal}${detail} ${sign}${c.delta.toFixed(2)}`;
41
+ });
42
+ if (input.absorbedOverlap === true) {
43
+ triggers.push('stage4:absorbed-overlapping-span +0.00');
44
+ }
45
+ for (const type of input.wonAgainst ?? []) {
46
+ triggers.push(`stage4:more-specific-than-${type} +0.00`);
47
+ }
48
+ return {
49
+ stages,
50
+ triggers,
51
+ ...(scored.candidate.validatorPassed !== undefined
52
+ ? { validatorPassed: scored.candidate.validatorPassed }
53
+ : {}),
54
+ };
55
+ }
56
+ /** Assemble the entity a consumer actually receives. */
57
+ export function toDetectedEntity(input) {
58
+ const { candidate } = input.scored;
59
+ return {
60
+ text: candidate.text,
61
+ type: candidate.type,
62
+ start: candidate.start,
63
+ end: candidate.end,
64
+ calibratedConfidence: input.calibratedConfidence,
65
+ explanation: explain(input),
66
+ };
67
+ }
68
+ /**
69
+ * A one-line reason a candidate was NOT reported.
70
+ *
71
+ * SPEC's explanation requirement covers emitted entities, but the review UI
72
+ * has to answer "why did you miss this?" too, and a suppression with no
73
+ * recorded reason is exactly the failure D18 was written about. Kept in the
74
+ * same module so the two stay consistent.
75
+ */
76
+ export function explainOmission(scored, decision) {
77
+ if (scored.suppressed) {
78
+ return `suppressed by ${scored.suppressionReason ?? 'an unnamed rule'}`;
79
+ }
80
+ switch (decision?.reason) {
81
+ case 'allowlist':
82
+ return 'on the user allowlist';
83
+ case 'type-out-of-profile':
84
+ return 'entity type is outside the active sensitivity profile';
85
+ case 'below-threshold':
86
+ return 'calibrated confidence below the profile threshold';
87
+ default:
88
+ return 'not reported';
89
+ }
90
+ }
91
+ //# sourceMappingURL=explain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../src/fuse/explain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAiBH;;;;;;;;GAQG;AACH,MAAM,UAAU,OAAO,CAAC,KAAkB;IACxC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzB,MAAM,MAAM,GAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAE1D,mDAAmD;IACnD,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACnE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE7B,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;QAC9D,OAAO,GAAG,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,6BAA6B,IAAI,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO;QACL,MAAM;QACN,QAAQ;QACR,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,KAAK,SAAS;YAChD,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,eAAe,EAAE;YACvD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,gBAAgB,CAAC,KAAkB;IACjD,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;IACnC,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,MAA8B,EAC9B,QAA0B;IAE1B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,iBAAiB,MAAM,CAAC,iBAAiB,IAAI,iBAAiB,EAAE,CAAC;IAC1E,CAAC;IACD,QAAQ,QAAQ,EAAE,MAAM,EAAE,CAAC;QACzB,KAAK,WAAW;YACd,OAAO,uBAAuB,CAAC;QACjC,KAAK,qBAAqB;YACxB,OAAO,uDAAuD,CAAC;QACjE,KAAK,iBAAiB;YACpB,OAAO,mDAAmD,CAAC;QAC7D;YACE,OAAO,cAAc,CAAC;IAC1B,CAAC;AACH,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Stage 4 — SENSITIVITY PROFILES, allowlist and denylist.
3
+ *
4
+ * SPEC.md:
5
+ * "Apply the active SENSITIVITY PROFILE, which sets thresholds:
6
+ * Minimal — secrets and financial identifiers only.
7
+ * Balanced — default. Secrets, financial, national IDs, contact details,
8
+ * person names.
9
+ * Strict — adds health data, addresses, dates of birth, organizations,
10
+ * low-confidence candidates.
11
+ * Custom — per-entity-type threshold control."
12
+ * "Apply user allowlist (never mask …) and denylist (always mask …).
13
+ * Denylist beats everything."
14
+ *
15
+ * A profile does two things at once and it is worth separating them: it says
16
+ * WHICH TYPES are in scope, and it says HOW SURE the pipeline must be before
17
+ * reporting one. The second only became meaningful with calibration — before
18
+ * a confidence meant something comparable across types, a threshold was an
19
+ * arbitrary cut. That is why profiles land in the same milestone as the
20
+ * calibration curve rather than earlier.
21
+ *
22
+ * Thresholds are stated as CALIBRATED probabilities, so "0.5" reads as "report
23
+ * this when it is more likely right than wrong" rather than as a detector-local
24
+ * number whose meaning varies by type.
25
+ */
26
+ import type { EntityType } from '../types.js';
27
+ export type ProfileName = 'minimal' | 'balanced' | 'strict' | 'custom';
28
+ export interface SensitivityProfile {
29
+ readonly name: ProfileName;
30
+ /** Types the profile reports at all. */
31
+ readonly types: ReadonlySet<EntityType>;
32
+ /**
33
+ * Minimum CALIBRATED confidence to report, per type, with a default.
34
+ * Meaningful only because Stage 4 calibrated the scale (D23).
35
+ */
36
+ readonly threshold: (type: EntityType) => number;
37
+ }
38
+ /**
39
+ * The three named profiles.
40
+ *
41
+ * Thresholds differ by INTENT, not by tuning. Minimal exists for a developer
42
+ * who wants surgical protection and would rather miss a weak signal than see
43
+ * a spurious one, so it demands high confidence. Strict exists for someone who
44
+ * would rather over-mask, so it deliberately admits low-confidence candidates
45
+ * — SPEC names "low-confidence candidates" as part of what Strict adds.
46
+ */
47
+ export declare const PROFILES: Readonly<Record<Exclude<ProfileName, 'custom'>, SensitivityProfile>>;
48
+ /** A user's own additions to whatever profile is active. */
49
+ export interface UserLists {
50
+ /**
51
+ * Never mask these. Matched case- and whitespace-insensitively on the
52
+ * entity's text — a user's own employer name, say.
53
+ */
54
+ readonly allow?: readonly string[];
55
+ /** Always mask these, whatever the profile or confidence says. */
56
+ readonly deny?: readonly string[];
57
+ }
58
+ export interface ProfileDecision {
59
+ readonly report: boolean;
60
+ /** Why, in one stable token, for the explanation and for tests. */
61
+ readonly reason: 'denylist' | 'allowlist' | 'type-out-of-profile' | 'below-threshold' | 'in-profile';
62
+ }
63
+ /**
64
+ * Decide whether one entity is reported under a profile.
65
+ *
66
+ * ORDER IS THE WHOLE CONTRACT, and it follows SPEC exactly: "Denylist beats
67
+ * everything." A denylisted value is reported even when its type is out of
68
+ * profile and even when confidence is far below threshold — it is the one
69
+ * override a user can state absolutely. The allowlist is checked next, before
70
+ * type and threshold, so that suppressing a value the user has vouched for
71
+ * does not depend on which profile happens to be active.
72
+ */
73
+ export declare function decide(entity: {
74
+ readonly type: EntityType;
75
+ readonly text: string;
76
+ readonly calibratedConfidence: number;
77
+ }, profileIn: SensitivityProfile, lists?: UserLists): ProfileDecision;
78
+ /** Build a custom profile from explicit per-type thresholds. */
79
+ export declare function customProfile(thresholds: Partial<Record<EntityType, number>>, defaultThreshold?: number): SensitivityProfile;
80
+ //# sourceMappingURL=profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../../src/fuse/profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AA6CvE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,MAAM,CAAC;CAClD;AAeD;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,kBAAkB,CAAC,CAezF,CAAC;AAEF,4DAA4D;AAC5D,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,kEAAkE;IAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAMD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,qBAAqB,GAAG,iBAAiB,GAAG,YAAY,CAAC;CACtG;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CACpB,MAAM,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;CAAE,EACnG,SAAS,EAAE,kBAAkB,EAC7B,KAAK,GAAE,SAAc,GACpB,eAAe,CAgBjB;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAC3B,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,EAC/C,gBAAgB,SAAM,GACrB,kBAAkB,CAMpB"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Stage 4 — SENSITIVITY PROFILES, allowlist and denylist.
3
+ *
4
+ * SPEC.md:
5
+ * "Apply the active SENSITIVITY PROFILE, which sets thresholds:
6
+ * Minimal — secrets and financial identifiers only.
7
+ * Balanced — default. Secrets, financial, national IDs, contact details,
8
+ * person names.
9
+ * Strict — adds health data, addresses, dates of birth, organizations,
10
+ * low-confidence candidates.
11
+ * Custom — per-entity-type threshold control."
12
+ * "Apply user allowlist (never mask …) and denylist (always mask …).
13
+ * Denylist beats everything."
14
+ *
15
+ * A profile does two things at once and it is worth separating them: it says
16
+ * WHICH TYPES are in scope, and it says HOW SURE the pipeline must be before
17
+ * reporting one. The second only became meaningful with calibration — before
18
+ * a confidence meant something comparable across types, a threshold was an
19
+ * arbitrary cut. That is why profiles land in the same milestone as the
20
+ * calibration curve rather than earlier.
21
+ *
22
+ * Thresholds are stated as CALIBRATED probabilities, so "0.5" reads as "report
23
+ * this when it is more likely right than wrong" rather than as a detector-local
24
+ * number whose meaning varies by type.
25
+ */
26
+ /** Broad families, used to state the profiles in SPEC's own vocabulary. */
27
+ const SECRETS = [
28
+ 'API_KEY',
29
+ 'PRIVATE_KEY',
30
+ 'JWT',
31
+ 'GENERIC_SECRET',
32
+ 'CONNECTION_STRING',
33
+ 'URL_WITH_CREDENTIALS',
34
+ ];
35
+ const FINANCIAL = [
36
+ 'CREDIT_CARD',
37
+ 'IBAN',
38
+ 'SWIFT_BIC',
39
+ 'US_ROUTING_NUMBER',
40
+ 'UK_SORT_CODE',
41
+ 'CA_TRANSIT_NUMBER',
42
+ 'AU_BSB',
43
+ 'IN_IFSC',
44
+ 'BR_AGENCIA',
45
+ 'CRYPTO_WALLET',
46
+ 'VAT_NUMBER',
47
+ ];
48
+ const GOVERNMENT_ID = [
49
+ 'NATIONAL_ID',
50
+ 'TAX_ID',
51
+ 'PASSPORT_MRZ',
52
+ 'DRIVERS_LICENSE',
53
+ 'VIN',
54
+ 'US_NPI',
55
+ ];
56
+ const CONTACT = ['EMAIL', 'PHONE', 'IP_ADDRESS', 'MAC_ADDRESS'];
57
+ const LOCATION_TYPES = ['STREET_ADDRESS', 'POSTAL_CODE', 'COORDINATES', 'LOCATION'];
58
+ const HEALTH = ['HEALTH_DATA'];
59
+ const PEOPLE = ['PERSON'];
60
+ const ORGS = ['ORG'];
61
+ const DATES = ['DATE_OF_BIRTH'];
62
+ function profile(name, types, defaultThreshold, overrides = {}) {
63
+ return {
64
+ name,
65
+ types: new Set(types.flat()),
66
+ threshold: (type) => overrides[type] ?? defaultThreshold,
67
+ };
68
+ }
69
+ /**
70
+ * The three named profiles.
71
+ *
72
+ * Thresholds differ by INTENT, not by tuning. Minimal exists for a developer
73
+ * who wants surgical protection and would rather miss a weak signal than see
74
+ * a spurious one, so it demands high confidence. Strict exists for someone who
75
+ * would rather over-mask, so it deliberately admits low-confidence candidates
76
+ * — SPEC names "low-confidence candidates" as part of what Strict adds.
77
+ */
78
+ export const PROFILES = {
79
+ minimal: profile('minimal', [SECRETS, FINANCIAL], 0.7),
80
+ balanced: profile('balanced', [SECRETS, FINANCIAL, GOVERNMENT_ID, CONTACT, PEOPLE], 0.5, {
81
+ // A leaked credential is unrecoverable, so it is reported on weaker
82
+ // evidence than a name, which the user can dismiss at no cost.
83
+ API_KEY: 0.35,
84
+ PRIVATE_KEY: 0.35,
85
+ CONNECTION_STRING: 0.35,
86
+ }),
87
+ strict: profile('strict', [SECRETS, FINANCIAL, GOVERNMENT_ID, CONTACT, PEOPLE, HEALTH, LOCATION_TYPES, ORGS, DATES], 0.25, { API_KEY: 0.2, PRIVATE_KEY: 0.2, CONNECTION_STRING: 0.2 }),
88
+ };
89
+ function fold(value) {
90
+ return value.trim().toLowerCase().replace(/\s+/g, ' ');
91
+ }
92
+ /**
93
+ * Decide whether one entity is reported under a profile.
94
+ *
95
+ * ORDER IS THE WHOLE CONTRACT, and it follows SPEC exactly: "Denylist beats
96
+ * everything." A denylisted value is reported even when its type is out of
97
+ * profile and even when confidence is far below threshold — it is the one
98
+ * override a user can state absolutely. The allowlist is checked next, before
99
+ * type and threshold, so that suppressing a value the user has vouched for
100
+ * does not depend on which profile happens to be active.
101
+ */
102
+ export function decide(entity, profileIn, lists = {}) {
103
+ const text = fold(entity.text);
104
+ if ((lists.deny ?? []).some((d) => fold(d) === text)) {
105
+ return { report: true, reason: 'denylist' };
106
+ }
107
+ if ((lists.allow ?? []).some((a) => fold(a) === text)) {
108
+ return { report: false, reason: 'allowlist' };
109
+ }
110
+ if (!profileIn.types.has(entity.type)) {
111
+ return { report: false, reason: 'type-out-of-profile' };
112
+ }
113
+ if (entity.calibratedConfidence < profileIn.threshold(entity.type)) {
114
+ return { report: false, reason: 'below-threshold' };
115
+ }
116
+ return { report: true, reason: 'in-profile' };
117
+ }
118
+ /** Build a custom profile from explicit per-type thresholds. */
119
+ export function customProfile(thresholds, defaultThreshold = 0.5) {
120
+ return {
121
+ name: 'custom',
122
+ types: new Set(Object.keys(thresholds)),
123
+ threshold: (type) => thresholds[type] ?? defaultThreshold,
124
+ };
125
+ }
126
+ //# sourceMappingURL=profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../../src/fuse/profiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Stage 4 — OVERLAP RESOLUTION.
3
+ *
4
+ * SPEC.md: "Resolve overlapping candidates: prefer the more specific type,
5
+ * then higher calibrated confidence, then longer span. Never emit overlapping
6
+ * entities."
7
+ *
8
+ * THE SAFETY PROPERTY THAT GOVERNS THIS FILE. Resolution DROPS candidates, so
9
+ * D18 applies to it exactly as it applies to a suppression rule — but it has a
10
+ * failure mode a suppression rule does not. Dropping a WIDE candidate in
11
+ * favour of a narrow one it contains does not merely relabel a span: the
12
+ * characters outside the narrow span stop being masked. A rule that naively
13
+ * "prefers the more specific type" would take CONNECTION_STRING over the
14
+ * credentialled URL containing it and leave the scheme, host and port of a
15
+ * live database URI in the outgoing text.
16
+ *
17
+ * So the ordering here is deliberately NOT SPEC's literal order. It is:
18
+ *
19
+ * 1. WIDEST SPAN first — never reduce masked coverage.
20
+ * 2. then the more specific TYPE, for spans of equal extent.
21
+ * 3. then higher confidence.
22
+ *
23
+ * Coverage is promoted above specificity because coverage is the property
24
+ * that cannot be recovered downstream: a mislabelled span is a cosmetic
25
+ * defect in the review UI, an unmasked one is a leak. Where spans are equal
26
+ * the two orderings agree, which is the case SPEC's wording is really about.
27
+ * `resolveOverlaps` asserts the coverage property on its own output.
28
+ *
29
+ * THE SPECIFICITY ORDER IS MEASURED, NOT ASSUMED. A census over the 2,600
30
+ * document corpus found 66.8% of Stage 1 candidates in at least one cross-type
31
+ * overlap, and for each pair recorded which type ground truth actually agreed
32
+ * with. Every rank below cites that measurement.
33
+ */
34
+ import type { EntityType } from '../types.js';
35
+ import type { PipelineCandidate } from '../context/types.js';
36
+ /** A candidate with the confidence Stage 3 gave it. */
37
+ export interface ScoredForResolution {
38
+ readonly candidate: PipelineCandidate;
39
+ readonly confidence: number;
40
+ }
41
+ export interface ResolutionResult {
42
+ /** Non-overlapping survivors, in document order. */
43
+ readonly emitted: readonly ScoredForResolution[];
44
+ /** Candidates yielded to a winner, retained so the choice is explainable. */
45
+ readonly dropped: readonly {
46
+ readonly item: ScoredForResolution;
47
+ readonly toType: EntityType;
48
+ }[];
49
+ }
50
+ /**
51
+ * Resolve a candidate set into a non-overlapping one.
52
+ *
53
+ * Greedy by the ordering above. Because the widest span is always taken
54
+ * first, any candidate it contains is dropped only after its characters are
55
+ * already covered — which is what makes the coverage property hold rather
56
+ * than merely being hoped for.
57
+ *
58
+ * Non-sensitive candidates (known test values) never displace a sensitive
59
+ * one: they are detected so the eval can assert they were seen, and letting
60
+ * one win an overlap would unmask the value it covers.
61
+ */
62
+ export declare function resolveOverlaps(items: readonly ScoredForResolution[]): ResolutionResult;
63
+ /**
64
+ * Every character a sensitive candidate covered is still covered.
65
+ *
66
+ * The invariant resolution exists to preserve, exposed so callers and tests
67
+ * can assert it directly rather than trusting the ordering to imply it.
68
+ */
69
+ export declare function coverageHoles(before: readonly ScoredForResolution[], after: readonly ScoredForResolution[]): {
70
+ readonly start: number;
71
+ readonly end: number;
72
+ }[];
73
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/fuse/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AA6E7D,uDAAuD;AACvD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC;CAClG;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,GAAG,gBAAgB,CA6DvF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,mBAAmB,EAAE,EACtC,KAAK,EAAE,SAAS,mBAAmB,EAAE,GACpC;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,CAmBpD"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Stage 4 — OVERLAP RESOLUTION.
3
+ *
4
+ * SPEC.md: "Resolve overlapping candidates: prefer the more specific type,
5
+ * then higher calibrated confidence, then longer span. Never emit overlapping
6
+ * entities."
7
+ *
8
+ * THE SAFETY PROPERTY THAT GOVERNS THIS FILE. Resolution DROPS candidates, so
9
+ * D18 applies to it exactly as it applies to a suppression rule — but it has a
10
+ * failure mode a suppression rule does not. Dropping a WIDE candidate in
11
+ * favour of a narrow one it contains does not merely relabel a span: the
12
+ * characters outside the narrow span stop being masked. A rule that naively
13
+ * "prefers the more specific type" would take CONNECTION_STRING over the
14
+ * credentialled URL containing it and leave the scheme, host and port of a
15
+ * live database URI in the outgoing text.
16
+ *
17
+ * So the ordering here is deliberately NOT SPEC's literal order. It is:
18
+ *
19
+ * 1. WIDEST SPAN first — never reduce masked coverage.
20
+ * 2. then the more specific TYPE, for spans of equal extent.
21
+ * 3. then higher confidence.
22
+ *
23
+ * Coverage is promoted above specificity because coverage is the property
24
+ * that cannot be recovered downstream: a mislabelled span is a cosmetic
25
+ * defect in the review UI, an unmasked one is a leak. Where spans are equal
26
+ * the two orderings agree, which is the case SPEC's wording is really about.
27
+ * `resolveOverlaps` asserts the coverage property on its own output.
28
+ *
29
+ * THE SPECIFICITY ORDER IS MEASURED, NOT ASSUMED. A census over the 2,600
30
+ * document corpus found 66.8% of Stage 1 candidates in at least one cross-type
31
+ * overlap, and for each pair recorded which type ground truth actually agreed
32
+ * with. Every rank below cites that measurement.
33
+ */
34
+ /**
35
+ * Type specificity: LOWER wins a tie between spans of equal extent.
36
+ *
37
+ * Derived from the overlap census — the "which type did ground truth agree
38
+ * with" column — not from intuition about which type sounds more precise.
39
+ */
40
+ const SPECIFICITY = {
41
+ // Self-verifying structure. A valid MRZ or PEM block is what it says it is.
42
+ PASSPORT_MRZ: 0,
43
+ PRIVATE_KEY: 0,
44
+ JWT: 0,
45
+ // A connection string and a credentialled URL claim IDENTICAL spans 140
46
+ // times in the corpus, and ground truth agreed with CONNECTION_STRING in
47
+ // 140 of 140. The DB/queue scheme is the more specific reading of the same
48
+ // characters, exactly as the M7 taxonomy predicted.
49
+ CONNECTION_STRING: 1,
50
+ URL_WITH_CREDENTIALS: 2,
51
+ // Checksum-validated identifiers.
52
+ IBAN: 3,
53
+ CREDIT_CARD: 3,
54
+ CRYPTO_WALLET: 3,
55
+ API_KEY: 3,
56
+ VAT_NUMBER: 3,
57
+ US_NPI: 3,
58
+ VIN: 3,
59
+ SWIFT_BIC: 3,
60
+ US_ROUTING_NUMBER: 3,
61
+ UK_SORT_CODE: 3,
62
+ CA_TRANSIT_NUMBER: 3,
63
+ AU_BSB: 3,
64
+ IN_IFSC: 3,
65
+ BR_AGENCIA: 3,
66
+ // Structured but not self-verifying.
67
+ EMAIL: 4,
68
+ PHONE: 4,
69
+ IP_ADDRESS: 4,
70
+ MAC_ADDRESS: 4,
71
+ COORDINATES: 4,
72
+ STREET_ADDRESS: 4,
73
+ HEALTH_DATA: 5,
74
+ // National and tax identifiers. Deliberately EQUAL: the census found
75
+ // TAX_ID-over-NATIONAL_ID and NATIONAL_ID-over-TAX_ID both occurring on
76
+ // equal spans with ground truth split roughly evenly between them (28/10/10
77
+ // and 19/11/11). No static ordering is honest about that — it is a genuine
78
+ // cross-scheme ambiguity that calibrated confidence has to settle, so they
79
+ // tie here and fall through to the confidence comparison.
80
+ NATIONAL_ID: 6,
81
+ TAX_ID: 6,
82
+ // Named entities: statistical proposals, not validated claims.
83
+ PERSON: 7,
84
+ ORG: 7,
85
+ LOCATION: 7,
86
+ // Shape-only, no validator behind it.
87
+ POSTAL_CODE: 8,
88
+ DRIVERS_LICENSE: 8,
89
+ DATE_OF_BIRTH: 8,
90
+ // Entropy alone. The census is unambiguous: a specific type covering the
91
+ // same characters was right in 2,047 of 2,053 measured overlaps.
92
+ GENERIC_SECRET: 9,
93
+ };
94
+ /** Types absent from the table sort between shape-only and generic. */
95
+ const DEFAULT_SPECIFICITY = 8;
96
+ function specificityOf(type) {
97
+ return SPECIFICITY[type] ?? DEFAULT_SPECIFICITY;
98
+ }
99
+ function overlaps(a, b) {
100
+ return a.start < b.end && b.start < a.end;
101
+ }
102
+ function width(item) {
103
+ return item.candidate.end - item.candidate.start;
104
+ }
105
+ /**
106
+ * Resolve a candidate set into a non-overlapping one.
107
+ *
108
+ * Greedy by the ordering above. Because the widest span is always taken
109
+ * first, any candidate it contains is dropped only after its characters are
110
+ * already covered — which is what makes the coverage property hold rather
111
+ * than merely being hoped for.
112
+ *
113
+ * Non-sensitive candidates (known test values) never displace a sensitive
114
+ * one: they are detected so the eval can assert they were seen, and letting
115
+ * one win an overlap would unmask the value it covers.
116
+ */
117
+ export function resolveOverlaps(items) {
118
+ const ordered = [...items].sort((a, b) => {
119
+ // Sensitive first: a non-sensitive candidate must never displace one that
120
+ // would otherwise be masked.
121
+ if (a.candidate.sensitive !== b.candidate.sensitive)
122
+ return a.candidate.sensitive ? -1 : 1;
123
+ const byWidth = width(b) - width(a);
124
+ if (byWidth !== 0)
125
+ return byWidth;
126
+ const bySpecificity = specificityOf(a.candidate.type) - specificityOf(b.candidate.type);
127
+ if (bySpecificity !== 0)
128
+ return bySpecificity;
129
+ const byConfidence = b.confidence - a.confidence;
130
+ if (byConfidence !== 0)
131
+ return byConfidence;
132
+ // Total order, so the result cannot depend on input order.
133
+ return a.candidate.start - b.candidate.start || a.candidate.detectorId.localeCompare(b.candidate.detectorId);
134
+ });
135
+ const emitted = [];
136
+ const dropped = [];
137
+ for (const item of ordered) {
138
+ const at = emitted.findIndex((kept) => overlaps(kept.candidate, item.candidate));
139
+ if (at === -1) {
140
+ emitted.push(item);
141
+ continue;
142
+ }
143
+ const winner = emitted[at];
144
+ const contained = winner.candidate.start <= item.candidate.start && item.candidate.end <= winner.candidate.end;
145
+ // CONTAINED: the winner already covers every character, so dropping the
146
+ // loser costs nothing but a label.
147
+ if (contained || !item.candidate.sensitive) {
148
+ dropped.push({ item, toType: winner.candidate.type });
149
+ continue;
150
+ }
151
+ // PARTIAL: the loser extends beyond the winner, so dropping it would
152
+ // leave the overhang unmasked. Measured on the corpus, this is rare (8
153
+ // spans in 2,600 documents, every one a Korean street address abutting
154
+ // another entity) but it is a leak, not a mislabelling. The winner
155
+ // absorbs the union instead.
156
+ //
157
+ // Widening in BOTH coordinate spaces is sound without re-consulting the
158
+ // offset map: the map is monotonic, so the union of two mapped spans
159
+ // contains the mapping of the union, and erring wider only ever masks
160
+ // more.
161
+ emitted[at] = {
162
+ ...winner,
163
+ candidate: {
164
+ ...winner.candidate,
165
+ start: Math.min(winner.candidate.start, item.candidate.start),
166
+ end: Math.max(winner.candidate.end, item.candidate.end),
167
+ originalStart: Math.min(winner.candidate.originalStart, item.candidate.originalStart),
168
+ originalEnd: Math.max(winner.candidate.originalEnd, item.candidate.originalEnd),
169
+ },
170
+ };
171
+ dropped.push({ item, toType: winner.candidate.type });
172
+ }
173
+ emitted.sort((a, b) => a.candidate.start - b.candidate.start);
174
+ return { emitted, dropped };
175
+ }
176
+ /**
177
+ * Every character a sensitive candidate covered is still covered.
178
+ *
179
+ * The invariant resolution exists to preserve, exposed so callers and tests
180
+ * can assert it directly rather than trusting the ordering to imply it.
181
+ */
182
+ export function coverageHoles(before, after) {
183
+ const covered = after
184
+ .filter((i) => i.candidate.sensitive)
185
+ .map((i) => ({ start: i.candidate.start, end: i.candidate.end }))
186
+ .sort((a, b) => a.start - b.start);
187
+ const holes = [];
188
+ for (const item of before) {
189
+ if (!item.candidate.sensitive)
190
+ continue;
191
+ let cursor = item.candidate.start;
192
+ for (const span of covered) {
193
+ if (span.end <= cursor)
194
+ continue;
195
+ if (span.start > cursor)
196
+ break;
197
+ cursor = Math.max(cursor, span.end);
198
+ if (cursor >= item.candidate.end)
199
+ break;
200
+ }
201
+ if (cursor < item.candidate.end)
202
+ holes.push({ start: cursor, end: item.candidate.end });
203
+ }
204
+ return holes;
205
+ }
206
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/fuse/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAKH;;;;;GAKG;AACH,MAAM,WAAW,GAAkD;IACjE,4EAA4E;IAC5E,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,CAAC;IACd,GAAG,EAAE,CAAC;IAEN,wEAAwE;IACxE,yEAAyE;IACzE,2EAA2E;IAC3E,oDAAoD;IACpD,iBAAiB,EAAE,CAAC;IACpB,oBAAoB,EAAE,CAAC;IAEvB,kCAAkC;IAClC,IAAI,EAAE,CAAC;IACP,WAAW,EAAE,CAAC;IACd,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,SAAS,EAAE,CAAC;IACZ,iBAAiB,EAAE,CAAC;IACpB,YAAY,EAAE,CAAC;IACf,iBAAiB,EAAE,CAAC;IACpB,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,CAAC;IAEb,qCAAqC;IACrC,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,CAAC;IACd,cAAc,EAAE,CAAC;IACjB,WAAW,EAAE,CAAC;IAEd,qEAAqE;IACrE,wEAAwE;IACxE,4EAA4E;IAC5E,2EAA2E;IAC3E,2EAA2E;IAC3E,0DAA0D;IAC1D,WAAW,EAAE,CAAC;IACd,MAAM,EAAE,CAAC;IAET,+DAA+D;IAC/D,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,QAAQ,EAAE,CAAC;IAEX,sCAAsC;IACtC,WAAW,EAAE,CAAC;IACd,eAAe,EAAE,CAAC;IAClB,aAAa,EAAE,CAAC;IAEhB,yEAAyE;IACzE,iEAAiE;IACjE,cAAc,EAAE,CAAC;CAClB,CAAC;AAEF,uEAAuE;AACvE,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,SAAS,aAAa,CAAC,IAAgB;IACrC,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC;AAClD,CAAC;AAeD,SAAS,QAAQ,CAAC,CAAoB,EAAE,CAAoB;IAC1D,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;AAC5C,CAAC;AAED,SAAS,KAAK,CAAC,IAAyB;IACtC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACnD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,KAAqC;IACnE,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvC,0EAA0E;QAC1E,6BAA6B;QAC7B,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,OAAO,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QAClC,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxF,IAAI,aAAa,KAAK,CAAC;YAAE,OAAO,aAAa,CAAC;QAC9C,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;QACjD,IAAI,YAAY,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC;QAC5C,2DAA2D;QAC3D,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC/G,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAwD,EAAE,CAAC;IAExE,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACjF,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAE,CAAC;QAC5B,MAAM,SAAS,GACb,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;QAE/F,wEAAwE;QACxE,mCAAmC;QACnC,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD,SAAS;QACX,CAAC;QAED,qEAAqE;QACrE,uEAAuE;QACvE,uEAAuE;QACvE,mEAAmE;QACnE,6BAA6B;QAC7B,EAAE;QACF,wEAAwE;QACxE,qEAAqE;QACrE,sEAAsE;QACtE,QAAQ;QACR,OAAO,CAAC,EAAE,CAAC,GAAG;YACZ,GAAG,MAAM;YACT,SAAS,EAAE;gBACT,GAAG,MAAM,CAAC,SAAS;gBACnB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAC7D,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;gBACvD,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;gBACrF,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;aAChF;SACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAsC,EACtC,KAAqC;IAErC,MAAM,OAAO,GAAG,KAAK;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;SACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;SAChE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAErC,MAAM,KAAK,GAAqC,EAAE,CAAC;IACnD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS;YAAE,SAAS;QACxC,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,GAAG,IAAI,MAAM;gBAAE,SAAS;YACjC,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM;gBAAE,MAAM;YAC/B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG;gBAAE,MAAM;QAC1C,CAAC;QACD,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Stage 2b — GAZETTEER lookup.
3
+ *
4
+ * SPEC.md: "Bundled compressed lookup sets, checked in parallel with the
5
+ * model … Gazetteer hit alone is medium confidence; gazetteer plus model
6
+ * agreement is high."
7
+ *
8
+ * The bundled sets are Bloom filters (see `@discretion/data`'s
9
+ * gazetteers.ts for why). Two consequences shape this module:
10
+ *
11
+ * • A filter can report a false POSITIVE and never a false negative. So a
12
+ * hit is corroboration, never proof — which is exactly the weight SPEC.md
13
+ * assigns it — while a miss is conclusive.
14
+ * • The hash here must match the builder's byte for byte, so it is written
15
+ * out explicitly rather than pulled from a library that might change.
16
+ */
17
+ import type { EntityType } from '../types.js';
18
+ /** Entity types a gazetteer can speak to. */
19
+ export type GazetteerType = 'PERSON' | 'ORG' | 'LOCATION';
20
+ export declare function isGazetteerType(type: EntityType): type is GazetteerType;
21
+ /** How a value matched the gazetteer. */
22
+ export interface GazetteerHit {
23
+ readonly type: GazetteerType;
24
+ /** True when the whole value matched, rather than one of its words. */
25
+ readonly whole: boolean;
26
+ /** Number of the value's words that matched, for multi-word names. */
27
+ readonly matchedWords: number;
28
+ readonly totalWords: number;
29
+ }
30
+ /**
31
+ * Look a value up as `type`.
32
+ *
33
+ * A person's full name is rarely a single gazetteer entry — the sets hold
34
+ * given names and family names separately — so a multi-word value is checked
35
+ * whole first, then word by word. `matchedWords` lets the caller weigh
36
+ * "every word is a known name" differently from "one word out of four is".
37
+ */
38
+ export declare function lookupGazetteer(value: string, type: GazetteerType): GazetteerHit | undefined;
39
+ /** Entry counts per set, for reporting and for BENCHMARKS.md. */
40
+ export declare function gazetteerSizes(): Readonly<Record<GazetteerType, number>>;
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/gazetteer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC;AAI1D,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,IAAI,aAAa,CAEvE;AAkED,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,sEAAsE;IACtE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAKD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,CAe5F;AAED,iEAAiE;AACjE,wBAAgB,cAAc,IAAI,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAMxE"}