@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,266 @@
1
+ /**
2
+ * Stage 3, TRIGGER PROXIMITY.
3
+ *
4
+ * SPEC.md: "TRIGGER PROXIMITY — labels near the candidate, across many
5
+ * languages ('SSN', 'passport no', 'diagnosis', 'my name is', 'IBAN',
6
+ * 'kimlik', 'Personalausweis', '护照', 'паспорт', 'पासपोर्ट', and so on).
7
+ * Maintain the trigger lexicon as per-language data files, not inline code,
8
+ * so contributors can extend it. Cover at minimum the twenty most-spoken
9
+ * languages."
10
+ *
11
+ * This module is the MATCHER; the lexicons themselves live in
12
+ * `@discretion/data` as required. Two matching strategies run together
13
+ * because one alone cannot cover the world's scripts:
14
+ *
15
+ * • Space-delimited scripts tokenize, then look up 1..4-word n-grams in a
16
+ * hash map. Exact, and O(window) rather than O(window × terms).
17
+ * • Scripts that do not space their words (Han, Kana, Hangul-adjacent
18
+ * compounds, Thai, Khmer, Lao) cannot be tokenized that way, so their
19
+ * terms are substring-searched instead. Keeping them in a separate,
20
+ * much smaller list is what makes the substring pass affordable.
21
+ *
22
+ * Matching is case- and diacritic-insensitive: a form label reading "TCKN",
23
+ * "tckn" or "Tckn" is the same signal, and a user typing "numero" instead of
24
+ * "número" should not lose protection.
25
+ */
26
+
27
+ import type { EntityType } from '../types.js';
28
+
29
+ // ─────────────────────────────────────────────────────────────────────────────
30
+ // Lexicon shape
31
+ // ─────────────────────────────────────────────────────────────────────────────
32
+
33
+ /** One language's triggers, keyed by the entity type each vouches for. */
34
+ export interface LanguageTriggers {
35
+ /** BCP-47 primary subtag, e.g. 'tr', 'zh', 'he'. */
36
+ readonly code: string;
37
+ readonly triggers: Readonly<Partial<Record<EntityType, readonly string[]>>>;
38
+ }
39
+
40
+ /** A trigger found near a candidate. */
41
+ export interface TriggerMatch {
42
+ /** The lexicon term that matched, in its lexicon (folded) form. */
43
+ readonly term: string;
44
+ /** Entity types this term vouches for. */
45
+ readonly types: readonly EntityType[];
46
+ /** Characters between the trigger and the candidate. 0 when adjacent. */
47
+ readonly distance: number;
48
+ /** Language codes that contributed this term. */
49
+ readonly languages: readonly string[];
50
+ }
51
+
52
+ export interface TriggerIndex {
53
+ /** Number of distinct terms indexed, for reporting. */
54
+ readonly termCount: number;
55
+ /**
56
+ * Triggers found within `window` characters of the span, nearest first.
57
+ * Searching both sides matters: most languages label before the value
58
+ * ("SSN: …") but several place it after ("… کد ملی").
59
+ */
60
+ near(text: string, start: number, end: number, window?: number): readonly TriggerMatch[];
61
+ }
62
+
63
+ // ─────────────────────────────────────────────────────────────────────────────
64
+ // Folding
65
+ // ─────────────────────────────────────────────────────────────────────────────
66
+
67
+ const COMBINING_MARKS = /\p{M}+/gu;
68
+
69
+ /**
70
+ * Fold a string for comparison: lowercase, then strip combining marks via NFD.
71
+ *
72
+ * Order matters. Turkish 'İ' lowercases to 'i' + U+0307 COMBINING DOT ABOVE,
73
+ * so the mark strip has to come after the case fold to remove it.
74
+ */
75
+ export function foldForMatch(value: string): string {
76
+ return value.toLowerCase().normalize('NFD').replace(COMBINING_MARKS, '').normalize('NFC');
77
+ }
78
+
79
+ /** Scripts whose text is not space-delimited, so n-gram lookup cannot see it. */
80
+ const UNSPACED_SCRIPT = /[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Thai}\p{Script=Khmer}\p{Script=Lao}\p{Script=Myanmar}]/u;
81
+
82
+ /** Longest trigger, in words, that n-gram lookup will assemble. */
83
+ const MAX_NGRAM_WORDS = 4;
84
+
85
+ /** How far from the candidate a trigger still counts, in characters. */
86
+ const DEFAULT_WINDOW = 64;
87
+
88
+ /** Word characters for tokenizing space-delimited scripts. */
89
+ const WORD_TOKEN = /[\p{L}\p{M}\p{N}_]+/gu;
90
+
91
+ // ─────────────────────────────────────────────────────────────────────────────
92
+ // Index construction
93
+ // ─────────────────────────────────────────────────────────────────────────────
94
+
95
+ interface TermEntry {
96
+ readonly term: string;
97
+ readonly types: EntityType[];
98
+ readonly languages: string[];
99
+ }
100
+
101
+ interface Token {
102
+ readonly text: string;
103
+ readonly start: number;
104
+ readonly end: number;
105
+ }
106
+
107
+ /**
108
+ * Compile per-language lexicons into one index.
109
+ *
110
+ * All languages are matched at once rather than gated on a detected document
111
+ * language. That is deliberate: real messages mix languages (an English
112
+ * sentence quoting a German form label), language detection on a short chat
113
+ * message is unreliable, and a missed trigger costs recall on a privacy tool.
114
+ * The cost is that a term which is a common word in another language can
115
+ * mis-fire, which is why `near` reports what matched — Stage 3 weighs it,
116
+ * and the explanation records it.
117
+ */
118
+ export function buildTriggerIndex(lexicons: readonly LanguageTriggers[]): TriggerIndex {
119
+ const spaced = new Map<string, TermEntry>();
120
+ const unspaced: TermEntry[] = [];
121
+
122
+ for (const lexicon of lexicons) {
123
+ for (const [type, terms] of Object.entries(lexicon.triggers)) {
124
+ for (const raw of terms ?? []) {
125
+ const term = foldForMatch(raw.trim());
126
+ if (term.length === 0) continue;
127
+ addTerm(term, type as EntityType, lexicon.code, spaced, unspaced);
128
+ }
129
+ }
130
+ }
131
+
132
+ // Longest first, so "kimlik no" wins over "kimlik" on the same text.
133
+ unspaced.sort((a, b) => b.term.length - a.term.length);
134
+
135
+ return {
136
+ termCount: spaced.size + unspaced.length,
137
+ near(text, start, end, window = DEFAULT_WINDOW) {
138
+ return findNear(text, start, end, window, spaced, unspaced);
139
+ },
140
+ };
141
+ }
142
+
143
+ function addTerm(
144
+ term: string,
145
+ type: EntityType,
146
+ language: string,
147
+ spaced: Map<string, TermEntry>,
148
+ unspaced: TermEntry[],
149
+ ): void {
150
+ if (UNSPACED_SCRIPT.test(term)) {
151
+ const existing = unspaced.find((e) => e.term === term);
152
+ mergeInto(existing ?? pushNew(unspaced, term), type, language);
153
+ return;
154
+ }
155
+ const existing = spaced.get(term);
156
+ if (existing === undefined) {
157
+ spaced.set(term, { term, types: [type], languages: [language] });
158
+ return;
159
+ }
160
+ mergeInto(existing, type, language);
161
+ }
162
+
163
+ function pushNew(list: TermEntry[], term: string): TermEntry {
164
+ const entry: TermEntry = { term, types: [], languages: [] };
165
+ list.push(entry);
166
+ return entry;
167
+ }
168
+
169
+ function mergeInto(entry: TermEntry, type: EntityType, language: string): void {
170
+ if (!entry.types.includes(type)) entry.types.push(type);
171
+ if (!entry.languages.includes(language)) entry.languages.push(language);
172
+ }
173
+
174
+ // ─────────────────────────────────────────────────────────────────────────────
175
+ // Lookup
176
+ // ─────────────────────────────────────────────────────────────────────────────
177
+
178
+ function findNear(
179
+ text: string,
180
+ start: number,
181
+ end: number,
182
+ window: number,
183
+ spaced: ReadonlyMap<string, TermEntry>,
184
+ unspaced: readonly TermEntry[],
185
+ ): TriggerMatch[] {
186
+ const from = Math.max(0, start - window);
187
+ const to = Math.min(text.length, end + window);
188
+ const before = foldForMatch(text.slice(from, start));
189
+ const after = foldForMatch(text.slice(end, to));
190
+
191
+ const matches: TriggerMatch[] = [];
192
+ collectSpaced(before, spaced, (entry, tokenEnd) =>
193
+ matches.push(toMatch(entry, before.length - tokenEnd)),
194
+ );
195
+ collectSpaced(after, spaced, (entry, _tokenEnd, tokenStart) =>
196
+ matches.push(toMatch(entry, tokenStart)),
197
+ );
198
+ collectUnspaced(before, unspaced, (entry, index) =>
199
+ matches.push(toMatch(entry, before.length - (index + entry.term.length))),
200
+ );
201
+ collectUnspaced(after, unspaced, (entry, index) => matches.push(toMatch(entry, index)));
202
+
203
+ matches.sort((a, b) => a.distance - b.distance);
204
+ return dedupe(matches);
205
+ }
206
+
207
+ function toMatch(entry: TermEntry, distance: number): TriggerMatch {
208
+ return {
209
+ term: entry.term,
210
+ types: entry.types,
211
+ languages: entry.languages,
212
+ distance: Math.max(0, distance),
213
+ };
214
+ }
215
+
216
+ /** Tokenize and probe every 1..MAX_NGRAM_WORDS window against the map. */
217
+ function collectSpaced(
218
+ text: string,
219
+ spaced: ReadonlyMap<string, TermEntry>,
220
+ emit: (entry: TermEntry, tokenEnd: number, tokenStart: number) => void,
221
+ ): void {
222
+ const tokens = tokenize(text);
223
+ for (let i = 0; i < tokens.length; i += 1) {
224
+ for (let n = 1; n <= MAX_NGRAM_WORDS && i + n <= tokens.length; n += 1) {
225
+ const slice = tokens.slice(i, i + n);
226
+ const first = slice[0];
227
+ const last = slice[n - 1];
228
+ if (first === undefined || last === undefined) continue;
229
+ const entry = spaced.get(slice.map((t) => t.text).join(' '));
230
+ if (entry !== undefined) emit(entry, last.end, first.start);
231
+ }
232
+ }
233
+ }
234
+
235
+ function tokenize(text: string): Token[] {
236
+ const tokens: Token[] = [];
237
+ const pattern = new RegExp(WORD_TOKEN.source, WORD_TOKEN.flags);
238
+ let match: RegExpExecArray | null;
239
+ while ((match = pattern.exec(text)) !== null) {
240
+ tokens.push({ text: match[0], start: match.index, end: match.index + match[0].length });
241
+ }
242
+ return tokens;
243
+ }
244
+
245
+ function collectUnspaced(
246
+ text: string,
247
+ unspaced: readonly TermEntry[],
248
+ emit: (entry: TermEntry, index: number) => void,
249
+ ): void {
250
+ for (const entry of unspaced) {
251
+ const index = text.indexOf(entry.term);
252
+ if (index !== -1) emit(entry, index);
253
+ }
254
+ }
255
+
256
+ /** Keep the nearest occurrence of each distinct term. */
257
+ function dedupe(matches: readonly TriggerMatch[]): TriggerMatch[] {
258
+ const seen = new Set<string>();
259
+ const out: TriggerMatch[] = [];
260
+ for (const match of matches) {
261
+ if (seen.has(match.term)) continue;
262
+ seen.add(match.term);
263
+ out.push(match);
264
+ }
265
+ return out;
266
+ }
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Stage 3 types.
3
+ *
4
+ * SPEC.md, Stage 3: "This is where false positives die, and the most
5
+ * important stage for real-world quality. Each candidate's confidence is
6
+ * adjusted by evidence from its surroundings."
7
+ *
8
+ * Two properties are load-bearing in the shapes below.
9
+ *
10
+ * EXPLAINABILITY. Every adjustment is a NAMED, SIGNED contribution rather
11
+ * than an opaque delta, so the adjusted score always decomposes into the
12
+ * reasons that produced it. Stage 4 (M8) calibrates these into probabilities
13
+ * and SPEC.md requires the review UI to show why an entity was reported; a
14
+ * score that cannot show its work would make both impossible.
15
+ *
16
+ * NO PLAINTEXT IN EXPLANATIONS. A contribution's `detail` may name the
17
+ * LEXICON TERM that matched ("iban", "kimlik no") but never the candidate's
18
+ * own text and never a raw document key, because explanations flow into
19
+ * reports and UI surfaces that must stay free of sensitive values — SPEC.md's
20
+ * third non-negotiable. `structure:*` contributions therefore report the key
21
+ * only when it matched a known lexicon term, and otherwise report the slot
22
+ * kind alone.
23
+ */
24
+
25
+ import type { EntityType } from '../types.js';
26
+ import type { Stage1Candidate } from '../detect/types.js';
27
+ import type { Stage2Candidate } from '../ner/types.js';
28
+
29
+ /** Any candidate entering Stage 3, from Stage 1 or Stage 2. */
30
+ export type PipelineCandidate = Stage1Candidate | Stage2Candidate;
31
+
32
+ /**
33
+ * The FORMAT of a document — how it is written, not what it is about.
34
+ *
35
+ * SPEC.md: "detect whether input is prose, source code (and which language),
36
+ * JSON, YAML, CSV, a log dump, a markdown table, or an email thread. Each
37
+ * mode shifts weights."
38
+ */
39
+ export type DocumentFormat =
40
+ | 'prose'
41
+ | 'code'
42
+ | 'json'
43
+ | 'yaml'
44
+ | 'csv'
45
+ | 'log'
46
+ | 'markdown-table'
47
+ | 'email'
48
+ | 'unknown';
49
+
50
+ /**
51
+ * The SUBJECT DOMAIN of a document, detected from terminology.
52
+ *
53
+ * Kept as a second, independent axis rather than folded into the format
54
+ * union: a medical record can arrive as prose, as CSV, or as a JSON payload,
55
+ * and collapsing the two would force a false choice. SPEC.md lists "medical,
56
+ * legal, and financial terminology used for context scoring" under the
57
+ * gazetteers, which is what feeds this.
58
+ */
59
+ export type DocumentDomain = 'medical' | 'legal' | 'financial' | 'general';
60
+
61
+ /** One named, signed reason the confidence moved. */
62
+ export interface ContextContribution {
63
+ /** Stable signal name, e.g. `trigger:NATIONAL_ID`, `negative:uri-authority`. */
64
+ readonly signal: string;
65
+ /** Signed adjustment applied to the raw confidence. */
66
+ readonly delta: number;
67
+ /** Safe supporting detail — a lexicon term or rule name, never a value. */
68
+ readonly detail?: string;
69
+ }
70
+
71
+ /** A candidate after Stage 3, carrying its adjustment and its reasons. */
72
+ export interface ContextScoredCandidate {
73
+ readonly candidate: PipelineCandidate;
74
+ /** Confidence after applying every contribution, clamped to [0, 1]. */
75
+ readonly contextConfidence: number;
76
+ readonly contributions: readonly ContextContribution[];
77
+ /**
78
+ * Stage 3 concluded this candidate should not be emitted at all.
79
+ *
80
+ * Suppression is reserved for evidence that the candidate is NOT sensitive
81
+ * (a documentation example, a value inside a URI's authority, a lab
82
+ * reference range) — never for mere weakness of evidence, which is what the
83
+ * confidence score is for.
84
+ */
85
+ readonly suppressed: boolean;
86
+ /** Rule id that suppressed it. Present exactly when `suppressed`. */
87
+ readonly suppressionReason?: string;
88
+ }
89
+
90
+ /** What Stage 3 learned about the document as a whole. */
91
+ export interface DocumentProfile {
92
+ readonly format: DocumentFormat;
93
+ readonly domain: DocumentDomain;
94
+ /** Signals that decided the format, for reporting and debugging. */
95
+ readonly formatEvidence: readonly string[];
96
+ /** Domain terms that matched, for reporting. Lexicon terms only. */
97
+ readonly domainEvidence: readonly string[];
98
+ }
99
+
100
+ /**
101
+ * The evidence a rule sees about one candidate.
102
+ *
103
+ * Deliberately narrow: rules receive the document text and the candidate's
104
+ * span, not the other candidates. Reasoning about OTHER candidates' spans is
105
+ * overlap resolution, which SPEC.md assigns to Stage 4 — keeping it out of
106
+ * this interface is what stops Stage 3 quietly absorbing M8's job.
107
+ * Co-occurrence, the one signal that legitimately looks across candidates,
108
+ * runs as a separate pass with its own input.
109
+ */
110
+ export interface RuleContext {
111
+ /** The full normalized document text. */
112
+ readonly text: string;
113
+ /** Candidate start offset in the normalized text (inclusive). */
114
+ readonly start: number;
115
+ /** Candidate end offset (exclusive). */
116
+ readonly end: number;
117
+ readonly type: EntityType;
118
+ readonly profile: DocumentProfile;
119
+ /** The line containing the candidate, and the candidate's offsets within it. */
120
+ readonly line: { readonly text: string; readonly start: number; readonly end: number };
121
+ }
122
+
123
+ /**
124
+ * A negative-context rule.
125
+ *
126
+ * SPEC.md: "NEGATIVE CONTEXT — signals that a candidate is NOT sensitive:
127
+ * inside a code comment describing a format, in a documentation example
128
+ * block, a known dummy value, lorem ipsum, a test fixture, a UUID in a log
129
+ * line, a git SHA. These must actively suppress."
130
+ *
131
+ * Each rule must state the real positive it risks suppressing, because in a
132
+ * privacy tool a wrong suppression is a leak, and an un-reviewed suppression
133
+ * rule is how leaks get shipped.
134
+ */
135
+ export interface NegativeRule {
136
+ /** Stable id, surfaced as `negative:<id>` in contributions. */
137
+ readonly id: string;
138
+ /** Entity types this rule may act on, or `'all'`. */
139
+ readonly appliesTo: readonly EntityType[] | 'all';
140
+ /**
141
+ * `'suppress'` drops the candidate; a negative number reduces confidence.
142
+ * Prefer a penalty over suppression unless the evidence is conclusive.
143
+ */
144
+ readonly action: 'suppress' | number;
145
+ /** The general principle, quoted into ARCHITECTURE.md and reviewable. */
146
+ readonly principle: string;
147
+ /** What real positive this could wrongly suppress. Required, not optional. */
148
+ readonly risk: string;
149
+ test(ctx: RuleContext): boolean;
150
+ }
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Keccak-256 — the ORIGINAL Keccak submission padding (0x01), NOT the
3
+ * standardized SHA3-256 (0x06). Ethereum's EIP-55 address checksum and
4
+ * Monero's address checksum both use original Keccak; using SHA3 here would
5
+ * silently break every EIP-55 verification while still "looking like a
6
+ * hash". The pinned vectors in test/crypto.test.ts are Keccak vectors
7
+ * specifically, so a padding mix-up cannot survive the tests.
8
+ *
9
+ * Lanes are BigInt: this is validation-only code on short inputs, and the
10
+ * BigInt formulation reads like the specification instead of like paired
11
+ * 32-bit register juggling.
12
+ */
13
+
14
+ const MASK64 = (1n << 64n) - 1n;
15
+
16
+ const ROUND_CONSTANTS: readonly bigint[] = [
17
+ 0x0000000000000001n, 0x0000000000008082n, 0x800000000000808an, 0x8000000080008000n,
18
+ 0x000000000000808bn, 0x0000000080000001n, 0x8000000080008081n, 0x8000000000008009n,
19
+ 0x000000000000008an, 0x0000000000000088n, 0x0000000080008009n, 0x000000008000000an,
20
+ 0x000000008000808bn, 0x800000000000008bn, 0x8000000000008089n, 0x8000000000008003n,
21
+ 0x8000000000008002n, 0x8000000000000080n, 0x000000000000800an, 0x800000008000000an,
22
+ 0x8000000080008081n, 0x8000000000008080n, 0x0000000080000001n, 0x8000000080008008n,
23
+ ];
24
+
25
+ /** Rho rotation offsets, indexed x + 5y. */
26
+ const RHO: readonly number[] = [
27
+ 0, 1, 62, 28, 27,
28
+ 36, 44, 6, 55, 20,
29
+ 3, 10, 43, 25, 39,
30
+ 41, 45, 15, 21, 8,
31
+ 18, 2, 61, 56, 14,
32
+ ];
33
+
34
+ const rotl = (a: bigint, n: number): bigint =>
35
+ ((a << BigInt(n)) | (a >> BigInt(64 - n))) & MASK64;
36
+
37
+ function permute(state: bigint[]): void {
38
+ for (let round = 0; round < 24; round++) {
39
+ // θ
40
+ const c: bigint[] = [];
41
+ for (let x = 0; x < 5; x++) {
42
+ c.push(state[x]! ^ state[x + 5]! ^ state[x + 10]! ^ state[x + 15]! ^ state[x + 20]!);
43
+ }
44
+ for (let x = 0; x < 5; x++) {
45
+ const d = c[(x + 4) % 5]! ^ rotl(c[(x + 1) % 5]!, 1);
46
+ for (let y = 0; y < 25; y += 5) state[x + y] = state[x + y]! ^ d;
47
+ }
48
+ // ρ and π
49
+ const b: bigint[] = new Array<bigint>(25).fill(0n);
50
+ for (let x = 0; x < 5; x++) {
51
+ for (let y = 0; y < 5; y++) {
52
+ b[y + 5 * ((2 * x + 3 * y) % 5)] = rotl(state[x + 5 * y]!, RHO[x + 5 * y]!);
53
+ }
54
+ }
55
+ // χ
56
+ for (let x = 0; x < 5; x++) {
57
+ for (let y = 0; y < 25; y += 5) {
58
+ state[x + y] = b[x + y]! ^ (~b[((x + 1) % 5) + y]! & MASK64 & b[((x + 2) % 5) + y]!);
59
+ }
60
+ }
61
+ // ι
62
+ state[0] = state[0]! ^ ROUND_CONSTANTS[round]!;
63
+ }
64
+ }
65
+
66
+ const RATE = 136; // 1088-bit rate for 256-bit output
67
+
68
+ /** Keccak-256 digest of `input`. */
69
+ export function keccak256(input: Uint8Array): Uint8Array {
70
+ const state: bigint[] = new Array<bigint>(25).fill(0n);
71
+
72
+ // Multi-rate padding with the ORIGINAL 0x01 domain byte.
73
+ const padded = new Uint8Array(Math.ceil((input.length + 1) / RATE) * RATE);
74
+ padded.set(input);
75
+ padded[input.length] = 0x01;
76
+ padded[padded.length - 1] = padded[padded.length - 1]! | 0x80;
77
+
78
+ for (let off = 0; off < padded.length; off += RATE) {
79
+ for (let i = 0; i < RATE / 8; i++) {
80
+ let lane = 0n;
81
+ for (let b = 7; b >= 0; b--) {
82
+ lane = (lane << 8n) | BigInt(padded[off + i * 8 + b]!);
83
+ }
84
+ state[i] = state[i]! ^ lane;
85
+ }
86
+ permute(state);
87
+ }
88
+
89
+ const out = new Uint8Array(32);
90
+ for (let i = 0; i < 4; i++) {
91
+ let lane = state[i]!;
92
+ for (let b = 0; b < 8; b++) {
93
+ out[i * 8 + b] = Number(lane & 0xffn);
94
+ lane >>= 8n;
95
+ }
96
+ }
97
+ return out;
98
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * SHA-256 (FIPS 180-4), pure TypeScript.
3
+ *
4
+ * Exists because base58check needs double-SHA-256 and `packages/core` is
5
+ * environment-agnostic: `node:crypto` is banned by the eslint fence and
6
+ * `crypto.subtle` is both a banned global and async. This implementation is
7
+ * VALIDATION-ONLY — it verifies checksums on candidate wallet addresses,
8
+ * never protects anything — so the correctness argument is the pinned NIST
9
+ * vectors in test/crypto.test.ts, not constant-time behaviour, which is
10
+ * irrelevant here.
11
+ */
12
+
13
+ const K: readonly number[] = [
14
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
15
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
16
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
17
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
18
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
19
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
20
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
21
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
22
+ ];
23
+
24
+ const rotr = (x: number, n: number): number => (x >>> n) | (x << (32 - n));
25
+
26
+ /** SHA-256 digest of `input`. */
27
+ export function sha256(input: Uint8Array): Uint8Array {
28
+ // Pad: append 0x80, zeros, then the 64-bit big-endian bit length.
29
+ const bitLen = input.length * 8;
30
+ const padded = new Uint8Array(((input.length + 8) >> 6 << 6) + 64);
31
+ padded.set(input);
32
+ padded[input.length] = 0x80;
33
+ const view = new DataView(padded.buffer);
34
+ view.setUint32(padded.length - 8, Math.floor(bitLen / 0x100000000), false);
35
+ view.setUint32(padded.length - 4, bitLen >>> 0, false);
36
+
37
+ let h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a;
38
+ let h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19;
39
+
40
+ const w = new Int32Array(64);
41
+ for (let off = 0; off < padded.length; off += 64) {
42
+ for (let i = 0; i < 16; i++) w[i] = view.getUint32(off + i * 4, false);
43
+ for (let i = 16; i < 64; i++) {
44
+ const s0 = rotr(w[i - 15]!, 7) ^ rotr(w[i - 15]!, 18) ^ (w[i - 15]! >>> 3);
45
+ const s1 = rotr(w[i - 2]!, 17) ^ rotr(w[i - 2]!, 19) ^ (w[i - 2]! >>> 10);
46
+ w[i] = (w[i - 16]! + s0 + w[i - 7]! + s1) | 0;
47
+ }
48
+
49
+ let a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7;
50
+ for (let i = 0; i < 64; i++) {
51
+ const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);
52
+ const ch = (e & f) ^ (~e & g);
53
+ const t1 = (h + S1 + ch + K[i]! + w[i]!) | 0;
54
+ const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);
55
+ const maj = (a & b) ^ (a & c) ^ (b & c);
56
+ const t2 = (S0 + maj) | 0;
57
+ h = g; g = f; f = e; e = (d + t1) | 0;
58
+ d = c; c = b; b = a; a = (t1 + t2) | 0;
59
+ }
60
+
61
+ h0 = (h0 + a) | 0; h1 = (h1 + b) | 0; h2 = (h2 + c) | 0; h3 = (h3 + d) | 0;
62
+ h4 = (h4 + e) | 0; h5 = (h5 + f) | 0; h6 = (h6 + g) | 0; h7 = (h7 + h) | 0;
63
+ }
64
+
65
+ const out = new Uint8Array(32);
66
+ const outView = new DataView(out.buffer);
67
+ for (const [i, v] of [h0, h1, h2, h3, h4, h5, h6, h7].entries()) {
68
+ outView.setUint32(i * 4, v >>> 0, false);
69
+ }
70
+ return out;
71
+ }
72
+
73
+ /** Double SHA-256, the checksum base58check uses. */
74
+ export function sha256d(input: Uint8Array): Uint8Array {
75
+ return sha256(sha256(input));
76
+ }
@@ -0,0 +1,50 @@
1
+ # Writing a Stage 1 detector
2
+
3
+ Read this instead of re-reading SPEC.md. It is the whole contract.
4
+
5
+ ## One detector = one file
6
+
7
+ `src/detect/detectors/<family>/<name>.ts` — exports nothing, self-registers:
8
+
9
+ ```ts
10
+ registerDetector({
11
+ id: 'national-id-tr-tckn', // kebab-case, unique, never churns
12
+ entityType: 'NATIONAL_ID', // existing member — never add one
13
+ regions: ['TR'], // ISO alpha-2, or [GLOBAL_REGION]
14
+ pattern: /\b[1-9]\d{10}\b/g, // MUST have /g. Over-generate.
15
+ baseConfidence: CONFIDENCE.HIGH, // reached only when validate() passes
16
+ description: 'One line.',
17
+ validate(ctx) { // ctx: text/start/end/match/defaultRegion
18
+ if (bad) return invalid('checksum failed'); // candidate DROPPED
19
+ return valid({ canonical, metadata: { scheme: 'tckn', country: 'TR' },
20
+ validator: 'tckn-mod-10' });
21
+ },
22
+ });
23
+ ```
24
+
25
+ Imports: `registerDetector` from `../../registry.js`; `CONFIDENCE`,
26
+ `GLOBAL_REGION`, `invalid`, `valid` from `../../types.js`. Then add one line
27
+ to the family barrel: `import './tckn.js';`
28
+
29
+ ## Rules
30
+
31
+ - Reuse `src/checksums/`. Missing algorithm → add it there with tests.
32
+ - Wrong checksum = `invalid()`, not low confidence. No-checksum formats cap
33
+ at LOW/MEDIUM; context-dependent ones set `requiresContext: true`.
34
+ - Known test/doc values: `valid({ sensitive: false })`.
35
+ - No stubs, no truncated tables. Never put a matched value in a reason.
36
+ - Strict TS; no DOM/Node globals in core; `.js` on relative imports.
37
+
38
+ ## Tests (`test/detectors-<family>.test.ts`) — per detector
39
+
40
+ 1. ≥3 valid vectors (published specimens preferred).
41
+ 2. Invalid vectors OUTNUMBERING valid: wrong check digit, transposition,
42
+ wrong length (short+long), wrong charset/prefix, cross-scheme near-miss.
43
+ 3. Property test: paired generator in `test/generators/<family>.ts` —
44
+ `generateValidX(seed): string`, deterministic, must NOT call the
45
+ validator. Generated always validates; single-char mutation fails (skip
46
+ mutation only for checksum-less formats — say so in a comment).
47
+ 4. Offset test: `runStage1(normalize(...))` with the value mid-sentence;
48
+ original span re-normalizes to exactly the value.
49
+
50
+ Generators are reused by M3's corpus builder — export them cleanly.
@@ -0,0 +1,36 @@
1
+ /**
2
+ * AU_BSB — Australian Bank-State-Branch codes, XXX-XXX.
3
+ *
4
+ * There is NO checksum, and the folk "third digit is the state" rule has
5
+ * real exceptions (640-xxx and 80x-xxx exist), so encoding it would reject
6
+ * genuine BSBs. What remains trustworthy is the notation itself: the
7
+ * hyphenated 3-3 grouping is banking convention and little else. MEDIUM,
8
+ * structure-only, stated plainly — Stage 3 triggers ("BSB") do the rest.
9
+ */
10
+
11
+ import { registerDetector } from '../../registry.js';
12
+ import { CONFIDENCE, invalid, valid } from '../../types.js';
13
+ import type { ValidationContext, ValidationResult } from '../../types.js';
14
+
15
+ function validateBsb(ctx: ValidationContext): ValidationResult {
16
+ const before = ctx.start > 0 ? ctx.text[ctx.start - 1] : '';
17
+ if (/[\d-]/.test(before ?? '')) return invalid('fragment of a longer sequence');
18
+ const after = ctx.text.slice(ctx.end, ctx.end + 2);
19
+ if (/^\d/.test(after) || /^-\d/.test(after)) return invalid('fragment of a longer sequence');
20
+
21
+ const digits = ctx.match[0].replace(/-/g, '');
22
+ return valid({
23
+ canonical: digits,
24
+ validator: 'bsb-structural',
25
+ });
26
+ }
27
+
28
+ registerDetector({
29
+ id: 'au-bsb',
30
+ entityType: 'AU_BSB',
31
+ regions: ['AU'],
32
+ pattern: /\b\d{3}-\d{3}\b/g,
33
+ baseConfidence: CONFIDENCE.MEDIUM,
34
+ description: 'Australian BSB codes in XXX-XXX notation. No checksum exists; capped at MEDIUM.',
35
+ validate: validateBsb,
36
+ });