@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,188 @@
1
+ /**
2
+ * IP_ADDRESS (IPv6) — full parse with compression, zone ids and v4-mapped
3
+ * tails, plus scope classification.
4
+ *
5
+ * The candidate pattern is deliberately loose — hex-and-colon runs are easy
6
+ * to over-match and hard to precisely match with one regex (compressed
7
+ * forms, embedded IPv4, zones). Precision comes from `parseIpv6`, a strict
8
+ * parser that either produces exactly eight 16-bit groups or rejects. Times
9
+ * ("12:30:45"), MACs ("aa:bb:cc:dd:ee:ff") and C++ scope operators
10
+ * ("std::vector") all fail the parse or the pattern's look-arounds.
11
+ *
12
+ * The all-zero address `::` is rejected outright rather than classified:
13
+ * a bare double colon appears in too many non-address contexts to report.
14
+ */
15
+
16
+ import { registerDetector } from '../../registry.js';
17
+ import { CONFIDENCE, GLOBAL_REGION, invalid, valid } from '../../types.js';
18
+ import type { ValidationContext, ValidationResult } from '../../types.js';
19
+
20
+ type Ipv6Scope =
21
+ | 'global'
22
+ | 'loopback'
23
+ | 'link-local'
24
+ | 'unique-local'
25
+ | 'multicast'
26
+ | 'documentation'
27
+ | 'v4-mapped'
28
+ | '6to4';
29
+
30
+ interface ParsedIpv6 {
31
+ readonly groups: readonly number[];
32
+ readonly zone?: string;
33
+ }
34
+
35
+ /** Strict parse to eight groups, or null. */
36
+ function parseIpv6(input: string): ParsedIpv6 | null {
37
+ let s = input;
38
+ let zone: string | undefined;
39
+
40
+ const pct = s.indexOf('%');
41
+ if (pct >= 0) {
42
+ zone = s.slice(pct + 1);
43
+ s = s.slice(0, pct);
44
+ if (zone.length === 0) return null;
45
+ }
46
+
47
+ // Embedded IPv4 tail → two trailing hex groups.
48
+ let v4Groups: number[] | null = null;
49
+ if (s.includes('.')) {
50
+ const lastColon = s.lastIndexOf(':');
51
+ if (lastColon < 0) return null;
52
+ const tail = s.slice(lastColon + 1);
53
+ const parts = tail.split('.');
54
+ if (parts.length !== 4) return null;
55
+ const octets: number[] = [];
56
+ for (const p of parts) {
57
+ if (!/^\d{1,3}$/.test(p)) return null;
58
+ const v = Number(p);
59
+ if (v > 255) return null;
60
+ octets.push(v);
61
+ }
62
+ v4Groups = [(octets[0]! << 8) | octets[1]!, (octets[2]! << 8) | octets[3]!];
63
+ s = s.slice(0, lastColon + 1); // keep the colon: "::ffff:" stays parseable
64
+ }
65
+
66
+ const splitGroups = (part: string): number[] | null => {
67
+ if (part === '') return [];
68
+ const out: number[] = [];
69
+ for (const g of part.split(':')) {
70
+ if (!/^[0-9A-Fa-f]{1,4}$/.test(g)) return null;
71
+ out.push(parseInt(g, 16));
72
+ }
73
+ return out;
74
+ };
75
+
76
+ let groups: number[];
77
+ const compressionIndex = s.indexOf('::');
78
+ if (compressionIndex >= 0) {
79
+ if (s.indexOf('::', compressionIndex + 1) >= 0) return null; // two '::'
80
+ let head = s.slice(0, compressionIndex);
81
+ let tail = s.slice(compressionIndex + 2);
82
+ if (head.endsWith(':')) head = head.slice(0, -1);
83
+ if (tail.endsWith(':')) tail = tail.slice(0, -1);
84
+ const headGroups = splitGroups(head);
85
+ const tailGroups = splitGroups(tail);
86
+ if (headGroups === null || tailGroups === null) return null;
87
+ const tailAll = v4Groups === null ? tailGroups : [...tailGroups, ...v4Groups];
88
+ const fixed = headGroups.length + tailAll.length;
89
+ if (fixed > 7) return null; // '::' must compress at least one group
90
+ groups = [...headGroups, ...new Array<number>(8 - fixed).fill(0), ...tailAll];
91
+ } else {
92
+ let body = s;
93
+ if (v4Groups !== null) {
94
+ if (!body.endsWith(':')) return null;
95
+ body = body.slice(0, -1);
96
+ }
97
+ const parsed = splitGroups(body);
98
+ if (parsed === null) return null;
99
+ const all = v4Groups === null ? parsed : [...parsed, ...v4Groups];
100
+ if (all.length !== 8) return null;
101
+ groups = all;
102
+ }
103
+
104
+ return zone === undefined ? { groups } : { groups, zone };
105
+ }
106
+
107
+ function classify(g: readonly number[]): Ipv6Scope | 'unspecified' {
108
+ if (g.every((x) => x === 0)) return 'unspecified';
109
+ if (g.slice(0, 7).every((x) => x === 0) && g[7] === 1) return 'loopback';
110
+ const g0 = g[0]!;
111
+ if ((g0 & 0xffc0) === 0xfe80) return 'link-local';
112
+ if ((g0 & 0xfe00) === 0xfc00) return 'unique-local';
113
+ if ((g0 & 0xff00) === 0xff00) return 'multicast';
114
+ if (g0 === 0x2001 && g[1] === 0x0db8) return 'documentation';
115
+ if (g.slice(0, 5).every((x) => x === 0) && g[5] === 0xffff) return 'v4-mapped';
116
+ if (g0 === 0x2002) return '6to4';
117
+ return 'global';
118
+ }
119
+
120
+ /** RFC 5952 canonical text: lowercase hex, longest zero run compressed. */
121
+ function canonicalIpv6(groups: readonly number[]): string {
122
+ let bestStart = -1;
123
+ let bestLen = 0;
124
+ let i = 0;
125
+ while (i < 8) {
126
+ if (groups[i] === 0) {
127
+ let j = i;
128
+ while (j < 8 && groups[j] === 0) j++;
129
+ if (j - i > bestLen) {
130
+ bestLen = j - i;
131
+ bestStart = i;
132
+ }
133
+ i = j;
134
+ } else {
135
+ i++;
136
+ }
137
+ }
138
+ const hex = groups.map((g) => g.toString(16));
139
+ if (bestLen < 2) return hex.join(':');
140
+ const head = hex.slice(0, bestStart).join(':');
141
+ const tail = hex.slice(bestStart + bestLen).join(':');
142
+ return `${head}::${tail}`;
143
+ }
144
+
145
+ function validateIpv6(ctx: ValidationContext): ValidationResult {
146
+ const parsed = parseIpv6(ctx.match[0]);
147
+ if (parsed === null) return invalid('not a parseable IPv6 address');
148
+
149
+ const scope = classify(parsed.groups);
150
+ if (scope === 'unspecified') return invalid('unspecified address');
151
+
152
+ const canonical = canonicalIpv6(parsed.groups);
153
+
154
+ if (scope === 'documentation') {
155
+ return valid({
156
+ canonical,
157
+ sensitive: false,
158
+ confidence: CONFIDENCE.MEDIUM,
159
+ metadata: { version: 6, scope },
160
+ validator: 'ipv6-parse',
161
+ });
162
+ }
163
+ const strong = scope === 'global' || scope === '6to4' || scope === 'v4-mapped';
164
+ return valid({
165
+ canonical,
166
+ confidence: strong ? CONFIDENCE.HIGH : scope === 'multicast' ? CONFIDENCE.LOW : CONFIDENCE.MEDIUM,
167
+ metadata: {
168
+ version: 6,
169
+ scope,
170
+ ...(parsed.zone !== undefined ? { zone: parsed.zone } : {}),
171
+ },
172
+ validator: 'ipv6-parse',
173
+ });
174
+ }
175
+
176
+ registerDetector({
177
+ id: 'ip-v6',
178
+ entityType: 'IP_ADDRESS',
179
+ regions: [GLOBAL_REGION],
180
+ // Loose harvest: needs a colon early (two colons total guaranteed by the
181
+ // parser), hex/colon body, optional v4 tail and zone. Look-arounds keep it
182
+ // out of words, times and scope operators.
183
+ pattern:
184
+ /(?<![\w:.])(?=[0-9A-Fa-f]{0,4}:[0-9A-Fa-f]{0,4}:)[0-9A-Fa-f:]{2,45}(?:\.\d{1,3}(?:\.\d{1,3}){2})?(?:%[0-9A-Za-z._~-]{1,16})?(?![\w:])/g,
185
+ baseConfidence: CONFIDENCE.HIGH,
186
+ description: 'IPv6 addresses (compressed, zoned, v4-mapped) with strict parsing and scope classification.',
187
+ validate: validateIpv6,
188
+ });
@@ -0,0 +1,68 @@
1
+ /**
2
+ * MAC_ADDRESS — colon, hyphen and Cisco dotted notations.
3
+ *
4
+ * A MAC has no checksum, but its shape — six hex octets with a CONSISTENT
5
+ * separator, or three dotted quads — is distinctive enough that structural
6
+ * validation carries high confidence. The separator consistency is enforced
7
+ * in the pattern via a backreference; mixed separators do not match at all.
8
+ *
9
+ * The broadcast (ff:ff:…) and null (00:00:…) addresses are well-known
10
+ * constants that identify no device: detected, classified non-sensitive,
11
+ * mirroring SPEC.md's treatment of known test values.
12
+ */
13
+
14
+ import { registerDetector } from '../../registry.js';
15
+ import { CONFIDENCE, GLOBAL_REGION, invalid, valid } from '../../types.js';
16
+ import type { ValidationContext, ValidationResult } from '../../types.js';
17
+
18
+ function validateMac(ctx: ValidationContext): ValidationResult {
19
+ // A six-group run inside a longer separated sequence (an IPv6 address, a
20
+ // long hex dump) is a fragment, not a MAC. \b cannot see separators.
21
+ const before = ctx.start >= 2 ? ctx.text.slice(ctx.start - 2, ctx.start) : '';
22
+ if (/[0-9A-Fa-f][:-]$/.test(before)) return invalid('fragment of a longer sequence');
23
+ const after = ctx.text.slice(ctx.end, ctx.end + 2);
24
+ if (/^[:-][0-9A-Fa-f]/.test(after)) return invalid('fragment of a longer sequence');
25
+
26
+ const raw = ctx.match[0];
27
+ const hex = raw.replace(/[^0-9A-Fa-f]/g, '');
28
+ if (hex.length !== 12) return invalid('not six octets');
29
+ const bytes: number[] = [];
30
+ for (let i = 0; i < 12; i += 2) bytes.push(parseInt(hex.slice(i, i + 2), 16));
31
+
32
+ const canonical = bytes.map((b) => b.toString(16).padStart(2, '0')).join(':');
33
+ const notation = raw.includes(':') ? 'colon' : raw.includes('-') ? 'hyphen' : 'cisco-dotted';
34
+
35
+ const allFF = bytes.every((b) => b === 0xff);
36
+ const allZero = bytes.every((b) => b === 0);
37
+ if (allFF || allZero) {
38
+ return valid({
39
+ canonical,
40
+ sensitive: false,
41
+ confidence: CONFIDENCE.LOW,
42
+ metadata: { notation, special: allFF ? 'broadcast' : 'null' },
43
+ validator: 'mac-structural',
44
+ });
45
+ }
46
+
47
+ const b0 = bytes[0]!;
48
+ return valid({
49
+ canonical,
50
+ metadata: {
51
+ notation,
52
+ multicast: (b0 & 0x01) !== 0,
53
+ locallyAdministered: (b0 & 0x02) !== 0,
54
+ },
55
+ validator: 'mac-structural',
56
+ });
57
+ }
58
+
59
+ registerDetector({
60
+ id: 'mac-address',
61
+ entityType: 'MAC_ADDRESS',
62
+ regions: [GLOBAL_REGION],
63
+ pattern:
64
+ /\b(?:[0-9A-Fa-f]{2}([:-])(?:[0-9A-Fa-f]{2}\1){4}[0-9A-Fa-f]{2}|[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4})\b/g,
65
+ baseConfidence: CONFIDENCE.HIGH,
66
+ description: 'MAC addresses in colon, hyphen, or Cisco dotted notation; broadcast/null non-sensitive.',
67
+ validate: validateMac,
68
+ });
@@ -0,0 +1,81 @@
1
+ /**
2
+ * PHONE — libphonenumber-js with the FULL metadata bundle.
3
+ *
4
+ * SPEC.md: "use libphonenumber-js with the full metadata bundle, not the
5
+ * minimal one. Never hand-roll phone regex. Parse and validate, with region
6
+ * inference from surrounding text and a user-set default region."
7
+ *
8
+ * The regex below is a candidate harvester only — it collects digit runs with
9
+ * phone-ish punctuation and hands them to libphonenumber, which is the
10
+ * validator. Region inference from SURROUNDING TEXT is a Stage 3 concern
11
+ * (trigger lexicons carry language/region evidence); in M2 the sources of
12
+ * region are the number's own +prefix or the user's configured default.
13
+ *
14
+ * Known false-positive shapes are rejected before parsing: year ranges
15
+ * ("2019-2023") and calendar dates, both of which are 8-digit runs that
16
+ * genuinely validate as subscriber numbers in 8-digit national plans
17
+ * (Denmark's 20 19 20 23 is a real mobile shape). The date guard is cheap
18
+ * and kills the whole class.
19
+ */
20
+
21
+ import { parsePhoneNumberFromString } from 'libphonenumber-js/max';
22
+ import type { CountryCode } from 'libphonenumber-js/max';
23
+ import { registerDetector } from '../../registry.js';
24
+ import { CONFIDENCE, GLOBAL_REGION, invalid, valid } from '../../types.js';
25
+ import type { ValidationContext, ValidationResult } from '../../types.js';
26
+
27
+ /** "2019-2023", "1999/2001" — year ranges, never phone numbers. */
28
+ const YEAR_RANGE = /^(?:19|20)\d{2}\s?[-/]\s?(?:19|20)\d{2}$/;
29
+
30
+ /** Calendar dates: 2023-08-26, 26/08/2023, 08.26.23 and friends. */
31
+ const DATE_LIKE = /^(?:\d{4}[-/.]\d{1,2}[-/.]\d{1,4}|\d{1,2}[-/.]\d{1,2}[-/.]\d{2,4})$/;
32
+
33
+ function validatePhone(ctx: ValidationContext): ValidationResult {
34
+ const raw = ctx.match[0];
35
+
36
+ const trimmed = raw.trim();
37
+ if (YEAR_RANGE.test(trimmed)) return invalid('year range');
38
+ if (DATE_LIKE.test(trimmed)) return invalid('date-like');
39
+
40
+ const digitCount = raw.replace(/\D/g, '').length;
41
+ // E.164 caps national significant numbers at 15 digits; anything shorter
42
+ // than 7 is a short code or fragment we do not report.
43
+ if (digitCount < 7) return invalid('too few digits');
44
+ if (digitCount > 16) return invalid('too many digits');
45
+
46
+ const hasPlus = trimmed.startsWith('+');
47
+
48
+ let parsed;
49
+ if (hasPlus) {
50
+ parsed = parsePhoneNumberFromString(trimmed);
51
+ } else if (ctx.defaultRegion !== undefined) {
52
+ parsed = parsePhoneNumberFromString(trimmed, ctx.defaultRegion as CountryCode);
53
+ } else {
54
+ // A national-format number with no region context cannot be validated,
55
+ // and emitting unvalidated digit runs is the false-positive machine
56
+ // SPEC.md forbids. Stage 3's trigger evidence will widen this later.
57
+ return invalid('national format with no region context');
58
+ }
59
+
60
+ if (parsed === undefined || !parsed.isValid()) return invalid('not a valid number for any plan');
61
+
62
+ return valid({
63
+ canonical: parsed.number,
64
+ metadata: {
65
+ ...(parsed.country !== undefined ? { country: parsed.country } : {}),
66
+ countryCallingCode: parsed.countryCallingCode,
67
+ viaDefaultRegion: !hasPlus,
68
+ },
69
+ validator: 'libphonenumber-isvalid',
70
+ });
71
+ }
72
+
73
+ registerDetector({
74
+ id: 'phone',
75
+ entityType: 'PHONE',
76
+ regions: [GLOBAL_REGION],
77
+ pattern: /[+(]?\d[\d \t()./-]{4,22}\d/g,
78
+ baseConfidence: CONFIDENCE.HIGH,
79
+ description: 'Phone numbers in all international formats, validated by libphonenumber (full metadata).',
80
+ validate: validatePhone,
81
+ });
@@ -0,0 +1,124 @@
1
+ /**
2
+ * URL_WITH_CREDENTIALS — userinfo passwords and credential-bearing query
3
+ * parameters.
4
+ *
5
+ * SPEC.md: "URL_WITH_CREDENTIALS — userinfo components or tokens in query
6
+ * parameters."
7
+ *
8
+ * Two shapes, one detector:
9
+ * • scheme://user:password@host… (userinfo with a password)
10
+ * • scheme://…?token=…&… (a credential-named query parameter)
11
+ *
12
+ * The emitted span is the WHOLE URL, not just the secret. Masking only the
13
+ * password would leave "https://admin:…@internal.corp.com" — still leaking
14
+ * the username and the internal host — and M4's surrogate substitution can
15
+ * replace a whole URL with a same-shape fake, which it cannot do for a URL
16
+ * with a hole in it. The credential's location travels in metadata.
17
+ *
18
+ * A bare username without a password (git@github.com style) is NOT a
19
+ * credential; ubiquitous and public. Template placeholders (${VAR},
20
+ * YOUR_API_KEY) are detected but non-sensitive, mirroring test values.
21
+ */
22
+
23
+ import { registerDetector } from '../../registry.js';
24
+ import { CONFIDENCE, GLOBAL_REGION, invalid, valid } from '../../types.js';
25
+ import type { ValidationContext, ValidationResult } from '../../types.js';
26
+
27
+ /** Parameter names that are credentials whenever they carry a real value. */
28
+ const STRONG_PARAMS = new Set([
29
+ 'token', 'accesstoken', 'authtoken', 'idtoken', 'refreshtoken', 'apitoken', 'sastoken',
30
+ 'apikey', 'secret', 'clientsecret', 'privatekey', 'password', 'passwd', 'pwd',
31
+ 'authorization', 'bearer', 'credential', 'credentials',
32
+ ]);
33
+
34
+ /**
35
+ * Names too generic to trust alone ("?key=north", "?sig=v2"): the value must
36
+ * itself look like key material — long and drawn from token alphabets.
37
+ */
38
+ const WEAK_PARAMS = new Set(['key', 'auth', 'sig', 'signature', 'session', 'sessionid', 'code']);
39
+
40
+ const WEAK_VALUE_SHAPE = /^[A-Za-z0-9+/_.=~%-]{16,}$/;
41
+
42
+ /** Obvious template/placeholder values: detected, non-sensitive. */
43
+ function isPlaceholder(value: string): boolean {
44
+ if (/^\$\{[^}]*\}$/.test(value) || /^\{\{[^}]*\}\}$/.test(value)) return true;
45
+ if (/^<[^>]*>$/.test(value)) return true;
46
+ if (/^(?:x+|X+|\*+|\.+)$/.test(value)) return true;
47
+ if (/^YOUR[_-]/i.test(value) || /[_-]HERE$/i.test(value)) return true;
48
+ if (/^(?:changeme|placeholder|redacted|example|dummy|sample|test)$/i.test(value)) return true;
49
+ return false;
50
+ }
51
+
52
+ /** RFC 2606/6761 documentation hosts → the whole URL is a doc example. */
53
+ function isReservedHost(host: string): boolean {
54
+ const h = host.toLowerCase().replace(/:\d+$/, '');
55
+ if (h === 'localhost' || h.endsWith('.localhost')) return true;
56
+ if (/(^|\.)example\.(com|net|org)$/.test(h)) return true;
57
+ return /\.(test|invalid|example)$/.test(h);
58
+ }
59
+
60
+ function validateUrlCredentials(ctx: ValidationContext): ValidationResult {
61
+ const raw = ctx.match[0];
62
+ const schemeEnd = raw.indexOf('://');
63
+ if (schemeEnd < 0) return invalid('no scheme');
64
+ const rest = raw.slice(schemeEnd + 3);
65
+
66
+ // Userinfo form: user:password@host…
67
+ const slash = rest.search(/[/?#]/);
68
+ const authority = slash < 0 ? rest : rest.slice(0, slash);
69
+ const at = authority.lastIndexOf('@');
70
+ if (at > 0) {
71
+ const userinfo = authority.slice(0, at);
72
+ const host = authority.slice(at + 1);
73
+ const colon = userinfo.indexOf(':');
74
+ if (colon <= 0 || colon === userinfo.length - 1) {
75
+ return invalid('userinfo has no password');
76
+ }
77
+ const password = userinfo.slice(colon + 1);
78
+ const placeholder = isPlaceholder(password) || isReservedHost(host);
79
+ return valid({
80
+ sensitive: !placeholder,
81
+ metadata: { kind: 'userinfo', host },
82
+ validator: 'url-credential-structural',
83
+ });
84
+ }
85
+
86
+ // Query-parameter form.
87
+ const paramPattern = /[?&]([A-Za-z0-9_-]+)=([^\s&"'<>]+)/g;
88
+ let m: RegExpExecArray | null;
89
+ while ((m = paramPattern.exec(raw)) !== null) {
90
+ const name = m[1]!.toLowerCase().replace(/[_-]/g, '');
91
+ const value = m[2]!;
92
+ const strong = STRONG_PARAMS.has(name);
93
+ const weak = WEAK_PARAMS.has(name);
94
+ if (!strong && !weak) continue;
95
+ if (strong && value.length < 6) continue;
96
+ if (weak && !WEAK_VALUE_SHAPE.test(value)) continue;
97
+
98
+ const host = authority;
99
+ const placeholder = isPlaceholder(value) || isReservedHost(host);
100
+ return valid({
101
+ sensitive: !placeholder,
102
+ metadata: { kind: 'query', param: m[1]!, host },
103
+ validator: 'url-credential-structural',
104
+ });
105
+ }
106
+
107
+ return invalid('no credential-bearing component');
108
+ }
109
+
110
+ registerDetector({
111
+ id: 'url-with-credentials',
112
+ entityType: 'URL_WITH_CREDENTIALS',
113
+ regions: [GLOBAL_REGION],
114
+ // Commas and pipes terminate the URI. RFC 3986 permits a comma as a
115
+ // sub-delimiter, but in the shapes URIs actually appear in — CSV rows,
116
+ // pipe-delimited logs, markdown table cells — an unencoded one is a FIELD
117
+ // boundary, and swallowing it made this span eat the neighbouring cells.
118
+ // That is not merely a mislabelled span: masking OVERWRITES the span, so an
119
+ // over-long one destroys the user's adjacent data.
120
+ pattern: /\b[A-Za-z][A-Za-z0-9+.-]{1,15}:\/\/[^\s"'<>,|]{3,700}/g,
121
+ baseConfidence: CONFIDENCE.HIGH,
122
+ description: 'URLs carrying credentials in userinfo or query parameters; whole-URL span.',
123
+ validate: validateUrlCredentials,
124
+ });
@@ -0,0 +1,52 @@
1
+ /**
2
+ * CRYPTO_WALLET: Cardano.
3
+ *
4
+ * Shelley addresses ('addr1…') are bech32 with a REAL checksum — verified
5
+ * here with the length limit raised past BIP-173's 90 characters, which
6
+ * Cardano exceeds by design — so they earn HIGH. Byron-era addresses
7
+ * ('Ae2…', 'DdzFF…') wrap their CRC in a CBOR envelope; verifying it would
8
+ * mean parsing CBOR for a legacy format, so Byron validates structurally
9
+ * (base58-decodable with the known prefix) at MEDIUM. The asymmetry is
10
+ * deliberate and stated here rather than hidden.
11
+ */
12
+
13
+ import { base58Decode } from '../../../encoding/base58.js';
14
+ import { bech32Decode } from '../../../encoding/bech32.js';
15
+ import { registerDetector } from '../../registry.js';
16
+ import { CONFIDENCE, GLOBAL_REGION, invalid, valid } from '../../types.js';
17
+ import type { ValidationContext, ValidationResult } from '../../types.js';
18
+
19
+ function validateAda(ctx: ValidationContext): ValidationResult {
20
+ const raw = ctx.match[0];
21
+
22
+ if (raw.toLowerCase().startsWith('addr1')) {
23
+ const decoded = bech32Decode(raw, 130);
24
+ if (decoded === null) return invalid('bech32 checksum failed');
25
+ if (decoded.hrp !== 'addr') return invalid('not the Cardano hrp');
26
+ return valid({
27
+ canonical: raw.toLowerCase(),
28
+ metadata: { chain: 'ada', era: 'shelley' },
29
+ validator: 'bech32',
30
+ });
31
+ }
32
+
33
+ const bytes = base58Decode(raw);
34
+ if (bytes === null) return invalid('not base58');
35
+ if (bytes.length < 30) return invalid('too short for a Byron address');
36
+ return valid({
37
+ canonical: raw,
38
+ confidence: CONFIDENCE.MEDIUM,
39
+ metadata: { chain: 'ada', era: 'byron' },
40
+ validator: 'byron-structural',
41
+ });
42
+ }
43
+
44
+ registerDetector({
45
+ id: 'crypto-ada',
46
+ entityType: 'CRYPTO_WALLET',
47
+ regions: [GLOBAL_REGION],
48
+ pattern: /\b(?:addr1[02-9ac-hj-np-z]{20,110}|(?:Ae2|DdzFF)[1-9A-HJ-NP-Za-km-z]{20,120})\b/g,
49
+ baseConfidence: CONFIDENCE.HIGH,
50
+ description: 'Cardano addresses: Shelley bech32 checksummed at HIGH, Byron structural at MEDIUM.',
51
+ validate: validateAda,
52
+ });
@@ -0,0 +1,77 @@
1
+ /**
2
+ * CRYPTO_WALLET: Bitcoin.
3
+ *
4
+ * Three address families, all checksum-verified:
5
+ * • base58check version 0x00 (P2PKH, '1…') and 0x05 (P2SH, '3…')
6
+ * • bech32 'bc1q…' — segwit v0, program exactly 20 or 32 bytes
7
+ * • bech32m 'bc1p…' — segwit v1+ (taproot), program 2–40 bytes
8
+ * The v0/v1 encoding split is BIP-350's rule: a v0 address closed with
9
+ * bech32m (or v1 with bech32) is INVALID, not merely unusual.
10
+ *
11
+ * The genesis address is treated like a documentation value: it appears in
12
+ * every Bitcoin tutorial and identifies no user.
13
+ */
14
+
15
+ import { base58CheckDecode } from '../../../encoding/base58.js';
16
+ import { bech32Decode, convertBits } from '../../../encoding/bech32.js';
17
+ import { registerDetector } from '../../registry.js';
18
+ import { CONFIDENCE, GLOBAL_REGION, invalid, valid } from '../../types.js';
19
+ import type { ValidationContext, ValidationResult } from '../../types.js';
20
+
21
+ const WELL_KNOWN: ReadonlySet<string> = new Set([
22
+ '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa', // genesis block coinbase
23
+ ]);
24
+
25
+ function validateBtc(ctx: ValidationContext): ValidationResult {
26
+ const raw = ctx.match[0];
27
+
28
+ if (raw[0] === '1' || raw[0] === '3') {
29
+ const decoded = base58CheckDecode(raw);
30
+ if (decoded === null) return invalid('base58check checksum failed');
31
+ if (decoded.version !== 0x00 && decoded.version !== 0x05) {
32
+ return invalid('not a Bitcoin version byte');
33
+ }
34
+ if (decoded.payload.length !== 20) return invalid('payload is not a hash160');
35
+ return valid({
36
+ canonical: raw,
37
+ sensitive: !WELL_KNOWN.has(raw),
38
+ metadata: { chain: 'btc', kind: decoded.version === 0x00 ? 'p2pkh' : 'p2sh' },
39
+ validator: 'base58check',
40
+ });
41
+ }
42
+
43
+ const decoded = bech32Decode(raw);
44
+ if (decoded === null) return invalid('bech32 checksum failed');
45
+ if (decoded.hrp !== 'bc') return invalid('not the Bitcoin hrp');
46
+ if (decoded.data.length === 0) return invalid('empty witness data');
47
+ const version = decoded.data[0]!;
48
+ if (version > 16) return invalid('witness version out of range');
49
+ const program = convertBits(decoded.data.slice(1), 5, 8, false);
50
+ if (program === null || program.length < 2 || program.length > 40) {
51
+ return invalid('malformed witness program');
52
+ }
53
+ if (version === 0) {
54
+ if (decoded.encoding !== 'bech32') return invalid('segwit v0 requires bech32');
55
+ if (program.length !== 20 && program.length !== 32) {
56
+ return invalid('v0 program must be 20 or 32 bytes');
57
+ }
58
+ } else if (decoded.encoding !== 'bech32m') {
59
+ return invalid('segwit v1+ requires bech32m');
60
+ }
61
+
62
+ return valid({
63
+ canonical: raw.toLowerCase(),
64
+ metadata: { chain: 'btc', kind: version === 0 ? 'segwit-v0' : `segwit-v${version}` },
65
+ validator: decoded.encoding,
66
+ });
67
+ }
68
+
69
+ registerDetector({
70
+ id: 'crypto-btc',
71
+ entityType: 'CRYPTO_WALLET',
72
+ regions: [GLOBAL_REGION],
73
+ pattern: /\b(?:[13][1-9A-HJ-NP-Za-km-z]{25,34}|(?:bc1|BC1)[0-9A-Za-z]{11,87})\b/g,
74
+ baseConfidence: CONFIDENCE.HIGH,
75
+ description: 'Bitcoin addresses: base58check P2PKH/P2SH and BIP-173/350 segwit, all checksummed.',
76
+ validate: validateBtc,
77
+ });
@@ -0,0 +1,42 @@
1
+ /**
2
+ * CRYPTO_WALLET: Polkadot.
3
+ *
4
+ * SS58 closes with the first two bytes of blake2b-512("SS58PRE" ‖ payload).
5
+ * Blake2b is not among the bundled hash primitives, and Polkadot would be
6
+ * its only consumer, so per the recorded decision (ARCHITECTURE.md D9) this
7
+ * detector validates STRUCTURALLY at MEDIUM: base58 decodes to exactly 35
8
+ * bytes (1 network + 32 key + 2 checksum) with the Polkadot network byte
9
+ * 0x00 — which is also why the address always starts with '1'. The checksum
10
+ * bytes are present but unverified; the confidence cap says so.
11
+ */
12
+
13
+ import { base58Decode } from '../../../encoding/base58.js';
14
+ import { registerDetector } from '../../registry.js';
15
+ import { CONFIDENCE, GLOBAL_REGION, invalid, valid } from '../../types.js';
16
+ import type { ValidationContext, ValidationResult } from '../../types.js';
17
+
18
+ function validateDot(ctx: ValidationContext): ValidationResult {
19
+ const raw = ctx.match[0];
20
+ const bytes = base58Decode(raw);
21
+ if (bytes === null) return invalid('not base58');
22
+ if (bytes.length !== 35) return invalid('not an SS58 account envelope');
23
+ if (bytes[0] !== 0x00) return invalid('not the Polkadot network prefix');
24
+
25
+ return valid({
26
+ canonical: raw,
27
+ metadata: { chain: 'dot', checksum: 'unverified' },
28
+ validator: 'ss58-structural',
29
+ });
30
+ }
31
+
32
+ registerDetector({
33
+ id: 'crypto-dot',
34
+ entityType: 'CRYPTO_WALLET',
35
+ regions: [GLOBAL_REGION],
36
+ // Network byte 0x00 → leading '1'; 35 bytes → 45–51 chars, disjoint from
37
+ // the Bitcoin P2PKH length range (26–35) that shares the prefix.
38
+ pattern: /\b1[1-9A-HJ-NP-Za-km-z]{44,50}\b/g,
39
+ baseConfidence: CONFIDENCE.MEDIUM,
40
+ description: 'Polkadot SS58 addresses, structural (blake2b checksum unverified - ARCHITECTURE.md D9).',
41
+ validate: validateDot,
42
+ });