@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,248 @@
1
+ /**
2
+ * The surrogate registry: given a detected entity, produce a same-shape
3
+ * replacement value.
4
+ *
5
+ * SPEC.md, substitution: replace a value with "a realistic value of the same
6
+ * type and shape" so the model reasons over coherent text, and for
7
+ * identifiers "a value passing that country's checksum, so downstream
8
+ * validation in the model's reasoning still behaves". We reuse the M2/M3
9
+ * generators as the source — a surrogate IBAN needs exactly the checksum
10
+ * validity a real one has, and that generator already exists.
11
+ *
12
+ * Two SPEC judgement calls, recorded in ARCHITECTURE.md D12:
13
+ *
14
+ * • "Same country / same issuer." Honored where the detector's metadata
15
+ * carries it: IBAN → same country, CREDIT_CARD → same issuer, national
16
+ * identifiers → the SAME scheme's generator (a TCKN surrogate for a TCKN),
17
+ * VAT → same member state, crypto → same chain, IP → same version.
18
+ *
19
+ * • "SECRET → a same-shape dummy that is clearly non-functional." The reused
20
+ * generators produce syntactically valid but RANDOM values (a JWT with a
21
+ * random signature, a PEM with a random body, a provider token with a
22
+ * random body) — non-functional because random, not because marked. That
23
+ * satisfies "non-functional"; if a visibly-marked dummy is later wanted it
24
+ * is a pool swap, not a structural change. Flagged, not silently resolved.
25
+ *
26
+ * `chooseSurrogate` returns `null` when no sensible surrogate exists for the
27
+ * type — the masker then falls back to a bracket token and records it, per
28
+ * SPEC.md's FALLBACK rule.
29
+ */
30
+
31
+ import * as generate from '../generate/index.js';
32
+ import { detectScripts } from '../scripts.js';
33
+ import type { EntityType, ScriptName } from '../types.js';
34
+ import { PERSON_POOLS, DEFAULT_PERSON_POOL, ORG_POOL, LOCATION_POOL } from './surrogatePools.js';
35
+
36
+ const g = generate;
37
+
38
+ /** What the masker gives the registry about one detected value. */
39
+ export interface SurrogateRequest {
40
+ readonly type: EntityType;
41
+ /** The matched text (normalized). Used for shape and script inference. */
42
+ readonly text: string;
43
+ /** Detector metadata: scheme, country, issuer, chain, version, kind. */
44
+ readonly metadata?: Readonly<Record<string, unknown>>;
45
+ }
46
+
47
+ const meta = (req: SurrogateRequest, key: string): string | undefined => {
48
+ const v = req.metadata?.[key];
49
+ return typeof v === 'string' ? v : undefined;
50
+ };
51
+
52
+ /** National/tax/vat scheme → the generator that produces a valid instance. */
53
+ const SCHEME_GENERATORS: Readonly<Record<string, (seed: number) => string>> = {
54
+ ssn: g.generateValidSsn, sin: g.generateValidSin, nino: g.generateValidNino, nhs: g.generateValidNhs,
55
+ pps: g.generateValidPps, 'steuer-id': g.generateValidSteuerId, personalausweis: g.generateValidAusweis,
56
+ nir: g.generateValidNir, dni: g.generateValidDni, nie: g.generateValidNie,
57
+ 'codice-fiscale': g.generateValidCodiceFiscale, bsn: g.generateValidBsn, rijksregister: g.generateValidBeRrn,
58
+ pesel: g.generateValidPesel, nip: g.generateValidNip, regon: g.generateValidRegon,
59
+ personnummer: g.generateValidPersonnummer, fodselsnummer: g.generateValidFodselsnummer, cpr: g.generateValidCpr,
60
+ hetu: g.generateValidHetu, kennitala: g.generateValidKennitala, nif: g.generateValidPtNif, afm: g.generateValidAfm,
61
+ 'rodne-cislo': g.generateValidRodneCislo, 'szemelyi-szam': g.generateValidSzemelyi, cnp: g.generateValidCnp,
62
+ egn: g.generateValidEgn, oib: g.generateValidOib, emso: g.generateValidEmso, tckn: g.generateValidTckn,
63
+ vkn: g.generateValidVkn, inn: g.generateValidInn12, snils: g.generateValidSnils, rnokpp: g.generateValidRnokpp,
64
+ iin: g.generateValidIin, 'teudat-zehut': g.generateValidTeudatZehut, 'saudi-id': g.generateValidSaudiId,
65
+ 'emirates-id': g.generateValidEmiratesId, qid: g.generateValidQid, 'civil-id': g.generateValidKwCivilId,
66
+ aadhaar: g.generateValidAadhaar, pan: g.generateValidPan, ric: g.generateValidRic, 'tw-id': g.generateValidTwId,
67
+ 'my-number': g.generateValidMyNumber, rrn: g.generateValidKrRrn, nric: g.generateValidNric, hkid: g.generateValidHkid,
68
+ cnic: g.generateValidCnic, nid: g.generateValidBdNid, mykad: g.generateValidMykad, nik: g.generateValidNik,
69
+ 'thai-id': g.generateValidThaiId, cccd: g.generateValidCccd, psn: g.generateValidPsn, tfn: g.generateValidTfn,
70
+ medicare: g.generateValidMedicare, abn: g.generateValidAbn, ird: g.generateValidIrd, cpf: g.generateValidCpf,
71
+ cnpj: g.generateValidCnpj, curp: g.generateValidCurp, rfc: g.generateValidRfc, cuit: g.generateValidCuit,
72
+ rut: g.generateValidRut, nit: g.generateValidNit, 'za-id': g.generateValidZaId,
73
+ };
74
+
75
+ /** Bare-number schemes whose detector span is value-only but whose generator
76
+ * emits a label — produce the bare value directly. */
77
+ const BARE_VALUE_SCHEMES: Readonly<Record<string, (seed: number) => string>> = {
78
+ cnie: (s) => {
79
+ const rng = g.mulberry32(s);
80
+ const L = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
81
+ const prefix = rng() < 0.5 ? L[Math.floor(rng() * 26)]! : L[Math.floor(rng() * 26)]! + L[Math.floor(rng() * 26)]!;
82
+ let d = '';
83
+ for (let i = 0; i < 6; i++) d += Math.floor(rng() * 10);
84
+ return `${prefix}${d}`;
85
+ },
86
+ nin: (s) => {
87
+ const rng = g.mulberry32(s);
88
+ let d = '';
89
+ for (let i = 0; i < 11; i++) d += Math.floor(rng() * 10);
90
+ return d;
91
+ },
92
+ 'ke-id': (s) => {
93
+ const rng = g.mulberry32(s);
94
+ let d = '';
95
+ for (let i = 0; i < 8; i++) d += Math.floor(rng() * 10);
96
+ return d;
97
+ },
98
+ 'ar-dni': (s) => {
99
+ const rng = g.mulberry32(s);
100
+ const n = 10_000_000 + Math.floor(rng() * 89_999_999);
101
+ return String(n).replace(/\B(?=(\d{3})+(?!\d))/g, '.');
102
+ },
103
+ 'pe-dni': (s) => {
104
+ const rng = g.mulberry32(s);
105
+ let d = '';
106
+ for (let i = 0; i < 8; i++) d += Math.floor(rng() * 10);
107
+ return d;
108
+ },
109
+ agencia: (s) => {
110
+ const rng = g.mulberry32(s);
111
+ let d = '';
112
+ for (let i = 0; i < 4; i++) d += Math.floor(rng() * 10);
113
+ return rng() < 0.4 ? `${d}-${Math.floor(rng() * 10)}` : d;
114
+ },
115
+ };
116
+
117
+ /** Dominant script of the detected text, for PERSON surrogate matching. */
118
+ function scriptOf(text: string): ScriptName {
119
+ return detectScripts(text).dominant ?? 'latin';
120
+ }
121
+
122
+ function personSurrogate(text: string, seed: number): string {
123
+ const script = scriptOf(text);
124
+ const pool = PERSON_POOLS.find((p) => p.script === script) ?? DEFAULT_PERSON_POOL;
125
+ const rng = g.mulberry32(seed);
126
+ const given = pool.given[Math.floor(rng() * pool.given.length)]!;
127
+ const surname = pool.surnames[Math.floor(rng() * pool.surnames.length)]!;
128
+ return pool.order === 'given-first' ? `${given}${pool.sep}${surname}` : `${surname}${pool.sep}${given}`;
129
+ }
130
+
131
+ /** A plausible ICD-10 code (letter + 2 digits + optional .subcode). */
132
+ function icd10Surrogate(seed: number): string {
133
+ const rng = g.mulberry32(seed);
134
+ const letters = 'ABCDEFGHIJKLMNOPRSTUVWXYZ';
135
+ const head = `${letters[Math.floor(rng() * letters.length)]}${Math.floor(rng() * 10)}${Math.floor(rng() * 10)}`;
136
+ return rng() < 0.6 ? `${head}.${Math.floor(rng() * 10)}` : head;
137
+ }
138
+
139
+ /**
140
+ * Choose a surrogate for a detected entity. Returns the surrogate string, or
141
+ * `null` when the type has no sensible surrogate (masker → bracket token).
142
+ * `seed` varies across collision retries so a fresh value is produced.
143
+ */
144
+ export function chooseSurrogate(req: SurrogateRequest, seed: number): string | null {
145
+ switch (req.type) {
146
+ case 'EMAIL':
147
+ return g.generateValidEmail(seed);
148
+ case 'PHONE':
149
+ return g.generateValidPhone(seed);
150
+ case 'IP_ADDRESS':
151
+ return meta(req, 'version') === '6' || req.text.includes(':')
152
+ ? g.generateValidIpv6(seed)
153
+ : g.generateValidIpv4(seed);
154
+ case 'MAC_ADDRESS':
155
+ return g.generateValidMac(seed);
156
+ case 'URL_WITH_CREDENTIALS':
157
+ return g.generateValidCredentialUrl(seed);
158
+ case 'CREDIT_CARD':
159
+ return g.generateValidCardForIssuer(meta(req, 'issuer') ?? 'visa', seed);
160
+ case 'IBAN': {
161
+ const country = meta(req, 'country') ?? req.text.slice(0, 2).toUpperCase();
162
+ return g.generateValidIbanForCountry(country, seed);
163
+ }
164
+ case 'SWIFT_BIC':
165
+ return g.generateValidBic(seed);
166
+ case 'US_ROUTING_NUMBER':
167
+ return g.generateValidRouting(seed);
168
+ case 'UK_SORT_CODE':
169
+ return g.generateValidSortCode(seed);
170
+ case 'CA_TRANSIT_NUMBER':
171
+ return g.generateValidTransit(seed);
172
+ case 'AU_BSB':
173
+ return g.generateValidBsb(seed);
174
+ case 'IN_IFSC':
175
+ return g.generateValidIfsc(seed);
176
+ case 'BR_AGENCIA':
177
+ return BARE_VALUE_SCHEMES['agencia']!(seed);
178
+ case 'CRYPTO_WALLET': {
179
+ const chain = meta(req, 'chain');
180
+ const byChain: Record<string, (s: number) => string> = {
181
+ btc: g.generateValidBtc, eth: g.generateValidEth, ltc: g.generateValidLtc, trx: g.generateValidTrx,
182
+ xmr: g.generateValidXmr, sol: g.generateValidSol, ada: g.generateValidAda, dot: g.generateValidDot,
183
+ };
184
+ return (chain !== undefined ? byChain[chain] : undefined)?.(seed) ?? g.generateValidBtc(seed);
185
+ }
186
+ case 'API_KEY':
187
+ return g.generateValidProviderToken(seed);
188
+ case 'JWT':
189
+ return g.generateValidJwt(seed);
190
+ case 'PRIVATE_KEY':
191
+ return g.generateValidPem(seed);
192
+ case 'GENERIC_SECRET':
193
+ return g.generateHighEntropySecret(seed);
194
+ case 'CONNECTION_STRING':
195
+ return g.generateValidConnectionString(seed);
196
+ case 'PASSPORT_MRZ':
197
+ return g.generateValidTd3(seed);
198
+ case 'DRIVERS_LICENSE':
199
+ return g.generateValidDvla(seed);
200
+ case 'VIN':
201
+ return g.generateValidVin(seed);
202
+ case 'US_NPI':
203
+ return g.generateValidNpi(seed);
204
+ case 'HEALTH_DATA': {
205
+ const kind = meta(req, 'kind');
206
+ if (kind === 'snomed') return g.generateValidSctid(seed);
207
+ if (kind === 'lab-result') return g.generateValidLabResult(seed);
208
+ if (kind === 'icd10') return icd10Surrogate(seed);
209
+ return null; // bare-number SNOMED without kind, or an unmodeled shape
210
+ }
211
+ case 'POSTAL_CODE':
212
+ return g.generateValidPostal(seed);
213
+ case 'STREET_ADDRESS':
214
+ return g.generateValidStreet(seed);
215
+ case 'COORDINATES':
216
+ return g.generateValidCoordinates(seed);
217
+ case 'NATIONAL_ID':
218
+ case 'TAX_ID': {
219
+ const scheme = meta(req, 'scheme');
220
+ if (scheme !== undefined) {
221
+ const bare = BARE_VALUE_SCHEMES[scheme];
222
+ if (bare !== undefined) return bare(seed);
223
+ const gen = SCHEME_GENERATORS[scheme];
224
+ if (gen !== undefined) return gen(seed);
225
+ }
226
+ return null; // unknown scheme → token
227
+ }
228
+ case 'VAT_NUMBER': {
229
+ const country = meta(req, 'country') ?? req.text.slice(0, 2).toUpperCase();
230
+ const c = country === 'GR' ? 'EL' : country;
231
+ if (g.VAT_COUNTRIES.includes(c)) return g.generateValidVatFor(c, seed);
232
+ return g.generateValidEuVat(seed);
233
+ }
234
+ case 'PERSON':
235
+ return personSurrogate(req.text, seed);
236
+ case 'ORG':
237
+ return ORG_POOL[seed % ORG_POOL.length]!;
238
+ case 'LOCATION':
239
+ return LOCATION_POOL[seed % LOCATION_POOL.length]!;
240
+ case 'DATE_OF_BIRTH':
241
+ // Ordering-preserving date shifting needs a date detector (absent until
242
+ // a later milestone) and a session offset; until then no surrogate,
243
+ // so the masker uses a token. Recorded in ARCHITECTURE.md D12.
244
+ return null;
245
+ default:
246
+ return null;
247
+ }
248
+ }
@@ -0,0 +1,153 @@
1
+ /**
2
+ * vault.ts — the in-memory bidirectional map between originals and their
3
+ * replacements.
4
+ *
5
+ * SPEC.md contract: deterministic and referentially consistent; normalized
6
+ * lookup so trivial variants (case, surrounding whitespace) resolve to one
7
+ * entry; clear() wipes it; and NO method exposes the full plaintext set
8
+ * except the egress guard, which needs it.
9
+ *
10
+ * That last rule is enforced by shape, not convention: the only bulk
11
+ * accessor is `createEgressAuditor()`, which returns a capability object
12
+ * whose sole consumer is `guardEgress`. Every other read requires already
13
+ * knowing the value being looked up (`getByOriginal`) or holds no plaintext
14
+ * (`getBySurrogate` returns the entry, whose `original` the restorer needs
15
+ * one at a time — that is restoration's whole job). There is deliberately
16
+ * no `entries()` / iteration API. (TypeScript cannot stop a caller from
17
+ * invoking the auditor factory, but the single, loudly-named door makes any
18
+ * misuse a visible code-review event rather than an accident. Recorded in
19
+ * ARCHITECTURE.md D11.)
20
+ *
21
+ * NORMALIZED LOOKUP is deliberately conservative. The lookup key folds
22
+ * case and trims/collapses whitespace, but a normalized key may be shared
23
+ * by DIFFERENT exact originals (two base58 values differing only in case
24
+ * are different values). The exact map always wins; the normalized index
25
+ * resolves a variant only when it maps to exactly one entry — an ambiguous
26
+ * normalized hit returns undefined rather than guessing.
27
+ */
28
+
29
+ import type { EntityType, VaultEntry } from '../types.js';
30
+
31
+ /** Case-folded, trimmed, inner-whitespace-collapsed lookup key. */
32
+ export function normalizedKey(value: string): string {
33
+ return value.trim().replace(/\s+/g, ' ').toLowerCase();
34
+ }
35
+
36
+ /** What the egress guard receives: the one deliberate door to plaintext. */
37
+ export interface EgressAuditor {
38
+ /** Every entry: (exact original, canonical, id, type). Guard-only. */
39
+ auditEntries(): readonly { original: string; canonical: string; id: string; type: EntityType }[];
40
+ }
41
+
42
+ export class Vault {
43
+ private readonly byOriginal = new Map<string, VaultEntry>();
44
+ private readonly byCanonical = new Map<string, VaultEntry>();
45
+ private readonly byNormalized = new Map<string, Set<VaultEntry>>();
46
+ private readonly byReplacement = new Map<string, VaultEntry>();
47
+ private counter = 0;
48
+
49
+ /**
50
+ * Register a new masked value. The caller (the masker) has already
51
+ * resolved consistency — `register` throws on a duplicate original or
52
+ * replacement rather than silently merging, because reaching that point
53
+ * means the masker's lookup logic is broken and restoration would be
54
+ * ambiguous.
55
+ */
56
+ register(entry: Omit<VaultEntry, 'id' | 'createdAt'>): VaultEntry {
57
+ if (this.byOriginal.has(entry.original)) {
58
+ throw new Error('vault: original already registered');
59
+ }
60
+ if (this.byReplacement.has(entry.replacement)) {
61
+ throw new Error('vault: replacement already in use');
62
+ }
63
+ const full: VaultEntry = {
64
+ ...entry,
65
+ id: `v${++this.counter}`,
66
+ createdAt: Date.now(),
67
+ };
68
+ this.byOriginal.set(full.original, full);
69
+ if (full.canonical !== undefined) {
70
+ if (!this.byCanonical.has(full.canonical)) this.byCanonical.set(full.canonical, full);
71
+ }
72
+ const key = normalizedKey(full.original);
73
+ let set = this.byNormalized.get(key);
74
+ if (set === undefined) {
75
+ set = new Set();
76
+ this.byNormalized.set(key, set);
77
+ }
78
+ set.add(full);
79
+ this.byReplacement.set(full.replacement, full);
80
+ return full;
81
+ }
82
+
83
+ /**
84
+ * Find the entry for an original: exact writing first, then the
85
+ * detector's canonical form (separator variants of one identifier), then
86
+ * the case/whitespace-normalized index — which only resolves when
87
+ * unambiguous.
88
+ */
89
+ getByOriginal(original: string, canonical?: string): VaultEntry | undefined {
90
+ const exact = this.byOriginal.get(original);
91
+ if (exact !== undefined) return exact;
92
+ if (canonical !== undefined) {
93
+ const viaCanonical = this.byCanonical.get(canonical);
94
+ if (viaCanonical !== undefined) return viaCanonical;
95
+ }
96
+ const set = this.byNormalized.get(normalizedKey(original));
97
+ if (set !== undefined && set.size === 1) {
98
+ return set.values().next().value;
99
+ }
100
+ return undefined;
101
+ }
102
+
103
+ /** Find the entry whose replacement is exactly `replacement`. */
104
+ getBySurrogate(replacement: string): VaultEntry | undefined {
105
+ return this.byReplacement.get(replacement);
106
+ }
107
+
108
+ /** True when `value` is already in use as a replacement or an original —
109
+ * the collision check surrogate selection runs before committing. */
110
+ wouldCollide(value: string): boolean {
111
+ if (this.byReplacement.has(value)) return true;
112
+ if (this.byOriginal.has(value)) return true;
113
+ // Case-insensitive replacement uniqueness: the restorer's fuzzy pass
114
+ // (case-changed surrogates) is only sound when no two replacements
115
+ // collide case-insensitively.
116
+ const key = normalizedKey(value);
117
+ for (const replacement of this.byReplacement.keys()) {
118
+ if (normalizedKey(replacement) === key) return true;
119
+ }
120
+ return this.byNormalized.has(key);
121
+ }
122
+
123
+ /** All current replacements (surrogates/tokens) — contains no originals;
124
+ * the restorer builds its match tables from this. */
125
+ replacements(): readonly string[] {
126
+ return [...this.byReplacement.keys()];
127
+ }
128
+
129
+ get size(): number {
130
+ return this.byOriginal.size;
131
+ }
132
+
133
+ /** Wipe everything. Called on navigation away and conversation switch. */
134
+ clear(): void {
135
+ this.byOriginal.clear();
136
+ this.byCanonical.clear();
137
+ this.byNormalized.clear();
138
+ this.byReplacement.clear();
139
+ }
140
+
141
+ /** THE one deliberate door to the plaintext set. Egress guard only. */
142
+ createEgressAuditor(): EgressAuditor {
143
+ return {
144
+ auditEntries: () =>
145
+ [...this.byOriginal.values()].map((e) => ({
146
+ original: e.original,
147
+ canonical: e.canonical ?? e.original,
148
+ id: e.id,
149
+ type: e.type,
150
+ })),
151
+ };
152
+ }
153
+ }
@@ -0,0 +1,86 @@
1
+ /**
2
+ * align.ts — map model token pieces back to exact character spans.
3
+ *
4
+ * Transformers.js exposes no offset mapping, so spans are recovered by
5
+ * scanning the input LEFT TO RIGHT and matching each piece at (or just
6
+ * after) the cursor. This is exact for pieces that are verbatim substrings
7
+ * — the overwhelming case, since Stage 2 runs on Stage-0-normalized text
8
+ * and the candidate models' tokenizers (mBERT WordPiece, XLM-R
9
+ * SentencePiece) do NFKC-compatible normalization the input has already
10
+ * been through. The exceptions are handled explicitly:
11
+ *
12
+ * • '##piece' — WordPiece continuation: match the bare piece.
13
+ * • '▁piece' — SentencePiece word start: match the bare piece ('▁'
14
+ * alone is a zero-width word boundary).
15
+ * • '[UNK]' / '<unk>' — unlocatable: recorded as zero-width at the
16
+ * cursor; the entity merger bridges across them.
17
+ * • normalization stragglers — a bounded forward search (SEARCH_WINDOW)
18
+ * recovers when the tokenizer skipped or rewrote a
19
+ * character; a piece not found within the window is
20
+ * treated like [UNK] rather than being guessed at.
21
+ *
22
+ * Whitespace between pieces is consumed by skipping it before each match.
23
+ * Greedy left-to-right matching is order-safe because pieces arrive in
24
+ * input order.
25
+ */
26
+
27
+ /** How far past the cursor a piece may be found before we refuse to guess. */
28
+ const SEARCH_WINDOW = 24;
29
+
30
+ const UNKNOWN_PIECES = new Set(['[UNK]', '<unk>']);
31
+
32
+ export interface AlignedPiece {
33
+ /** Start offset in the input (inclusive); equals `end` when unlocated. */
34
+ readonly start: number;
35
+ /** End offset in the input (exclusive). */
36
+ readonly end: number;
37
+ /** False for [UNK]/unfindable pieces — zero-width placeholders. */
38
+ readonly located: boolean;
39
+ }
40
+
41
+ const WHITESPACE = /\s/;
42
+
43
+ function skipWhitespace(text: string, from: number): number {
44
+ let i = from;
45
+ while (i < text.length && WHITESPACE.test(text[i]!)) i += 1;
46
+ return i;
47
+ }
48
+
49
+ /** Strip subword markers down to the piece's surface text. */
50
+ function surfaceOf(piece: string): string {
51
+ if (piece.startsWith('##')) return piece.slice(2);
52
+ if (piece.startsWith('▁')) return piece.slice(1); // '▁'
53
+ return piece;
54
+ }
55
+
56
+ /** Align every piece to its character span in `text`. */
57
+ export function alignPieces(text: string, pieces: readonly string[]): AlignedPiece[] {
58
+ const aligned: AlignedPiece[] = [];
59
+ let cursor = 0;
60
+
61
+ for (const raw of pieces) {
62
+ const piece = surfaceOf(raw);
63
+ if (piece.length === 0 || UNKNOWN_PIECES.has(raw)) {
64
+ aligned.push({ start: cursor, end: cursor, located: false });
65
+ continue;
66
+ }
67
+
68
+ const from = skipWhitespace(text, cursor);
69
+ let at = -1;
70
+ if (text.startsWith(piece, from)) {
71
+ at = from;
72
+ } else {
73
+ const found = text.indexOf(piece, from);
74
+ if (found !== -1 && found - from <= SEARCH_WINDOW) at = found;
75
+ }
76
+
77
+ if (at === -1) {
78
+ aligned.push({ start: cursor, end: cursor, located: false });
79
+ continue;
80
+ }
81
+ aligned.push({ start: at, end: at + piece.length, located: true });
82
+ cursor = at + piece.length;
83
+ }
84
+
85
+ return aligned;
86
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * chunk.ts — window long inputs so the model sees ALL of the text.
3
+ *
4
+ * Transformer runtimes silently truncate past their token limit (verified
5
+ * against the actual runtime: a 3000-character input stopped producing
6
+ * predictions at token 512 with no error). Undetected text would be
7
+ * undetected sensitive data, so the engine windows the input in CHARACTER
8
+ * units — safe because the worst tokenizer ratio is one token per
9
+ * character (CJK) — with an overlap wide enough that any entity split by
10
+ * one window boundary lies fully inside a neighbouring window.
11
+ *
12
+ * De-duplication rule for the overlap: a window "owns" the entities whose
13
+ * span midpoint falls in its core (the window minus half an overlap at
14
+ * each interior edge). Every midpoint lands in exactly one core, so each
15
+ * entity is emitted exactly once, and — because overlap/2 exceeds any
16
+ * plausible entity length — the owning window saw the whole entity.
17
+ */
18
+
19
+ export interface Chunk {
20
+ /** Offset of this window's first character in the full text. */
21
+ readonly offset: number;
22
+ readonly text: string;
23
+ /** Core region (absolute offsets): this window owns midpoints in it. */
24
+ readonly coreStart: number;
25
+ readonly coreEnd: number;
26
+ }
27
+
28
+ /** Look this far back from a hard cut for a whitespace break. */
29
+ const BREAK_LOOKBACK = 80;
30
+
31
+ export function chunkText(text: string, maxChars: number, overlapChars: number): Chunk[] {
32
+ if (maxChars <= overlapChars * 2) {
33
+ throw new Error(`chunkText: maxChars ${maxChars} must exceed twice the overlap ${overlapChars}`);
34
+ }
35
+ if (text.length <= maxChars) {
36
+ return [{ offset: 0, text, coreStart: 0, coreEnd: text.length }];
37
+ }
38
+
39
+ const chunks: Chunk[] = [];
40
+ let start = 0;
41
+ while (start < text.length) {
42
+ let end = Math.min(start + maxChars, text.length);
43
+ if (end < text.length) {
44
+ // Prefer to cut at whitespace so a word (and usually an entity) is
45
+ // not split at the hard boundary of BOTH neighbouring windows.
46
+ for (let i = end; i > end - BREAK_LOOKBACK && i > start + overlapChars; i--) {
47
+ if (/\s/.test(text[i - 1]!)) {
48
+ end = i;
49
+ break;
50
+ }
51
+ }
52
+ }
53
+ const isFirst = start === 0;
54
+ const isLast = end === text.length;
55
+ chunks.push({
56
+ offset: start,
57
+ text: text.slice(start, end),
58
+ coreStart: isFirst ? 0 : start + Math.floor(overlapChars / 2),
59
+ coreEnd: isLast ? text.length : end - Math.floor(overlapChars / 2),
60
+ });
61
+ if (isLast) break;
62
+ start = end - overlapChars;
63
+ }
64
+ return chunks;
65
+ }
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Per-session reuse of Stage 2 results for unchanged chunks.
3
+ *
4
+ * ─────────────────────────────────────────────────────────────────────────
5
+ * WHY THIS EXISTS, WHICH IS AN OMISSION BEING CLOSED RATHER THAN A FEATURE
6
+ *
7
+ * ARCHITECTURE.md D28 reasons about window size using "the content-hash cache
8
+ * keys on chunk text", and BENCHMARKS.md's incremental figures — the ones
9
+ * SPEC's "pressing send is instant" rests on — were measured against exactly
10
+ * that behaviour. It did not exist. The benchmark harness SIMULATED it, by
11
+ * computing which chunks an edit invalidated and re-inferring only those,
12
+ * while `NerEngine.recognize()` re-inferred every chunk on every call.
13
+ *
14
+ * So the published incremental number described a design, and the shipped
15
+ * behaviour was the cold number on every debounced keystroke. This closes the
16
+ * gap so that the two agree.
17
+ *
18
+ * ─────────────────────────────────────────────────────────────────────────
19
+ * IT IS PER SESSION, AND THAT IS A PRIVACY CONSTRAINT, NOT A SIZE ONE
20
+ *
21
+ * The keys ARE the user's text, and the values are the entities found in it.
22
+ * SPEC.md: "Originals live in memory only, per-tab-session, cleared on
23
+ * nav-away/close." The model lives in an offscreen document that outlives any
24
+ * one tab and is shared by all of them, so a cache owned by the ENGINE would
25
+ * quietly retain one tab's composer text after that tab was gone, and expose
26
+ * it to the next.
27
+ *
28
+ * Ownership therefore sits with the caller, one instance per connection, so
29
+ * its lifetime is the connection's: the content script's session opens it and
30
+ * closing that session destroys it. That is the same lifetime the unmask vault
31
+ * already has, so this adds no new retention — it just must not be allowed to
32
+ * add any.
33
+ *
34
+ * NOT KEYED BY HASH. A 64-bit digest would shorten the keys and remove the
35
+ * plaintext, and a collision would return one chunk's entities for a different
36
+ * chunk's text — silently attaching the wrong spans at the wrong offsets. The
37
+ * retention question is settled by the per-connection lifetime above; trading
38
+ * a correctness risk for a privacy property already held would be a bad deal.
39
+ *
40
+ * SPANS ARE STORED WITHOUT THEIR TEXT and it is re-sliced on read. Not for
41
+ * privacy — the key is the text anyway — but because a stored `text` could
42
+ * drift from the chunk it is served against, and re-slicing makes that
43
+ * impossible by construction.
44
+ * ─────────────────────────────────────────────────────────────────────────
45
+ */
46
+
47
+ import type { NerSpan } from './types.js';
48
+
49
+ /** A span with its text elided; re-derived from the chunk on read. */
50
+ type StoredSpan = Omit<NerSpan, 'text'>;
51
+
52
+ /**
53
+ * How many chunks one session may keep.
54
+ *
55
+ * A 2,000-character message is 7 chunks at the shipped 400-character window,
56
+ * so this holds a long message plus the history of edits that produced it.
57
+ * Bounded because a session lasts as long as a tab does, and an unbounded map
58
+ * keyed on everything a user has typed is exactly what SPEC's memory-only rule
59
+ * is trying to avoid.
60
+ */
61
+ const MAX_ENTRIES = 256;
62
+
63
+ export class ChunkCache {
64
+ /** Insertion order IS the LRU order: Map iterates oldest-first. */
65
+ private readonly entries = new Map<string, readonly StoredSpan[]>();
66
+ private hitCount = 0;
67
+ private missCount = 0;
68
+
69
+ get(chunkText: string): NerSpan[] | undefined {
70
+ const stored = this.entries.get(chunkText);
71
+ if (stored === undefined) {
72
+ this.missCount += 1;
73
+ return undefined;
74
+ }
75
+ // Re-inserted so a chunk that keeps being reused stays warm.
76
+ this.entries.delete(chunkText);
77
+ this.entries.set(chunkText, stored);
78
+ this.hitCount += 1;
79
+ return stored.map((span) => ({ ...span, text: chunkText.slice(span.start, span.end) }));
80
+ }
81
+
82
+ set(chunkText: string, spans: readonly NerSpan[]): void {
83
+ if (this.entries.has(chunkText)) this.entries.delete(chunkText);
84
+ this.entries.set(
85
+ chunkText,
86
+ spans.map((span) => ({
87
+ type: span.type,
88
+ start: span.start,
89
+ end: span.end,
90
+ score: span.score,
91
+ ...(span.gazetteer === undefined ? {} : { gazetteer: span.gazetteer }),
92
+ })),
93
+ );
94
+ while (this.entries.size > MAX_ENTRIES) {
95
+ const oldest = this.entries.keys().next();
96
+ if (oldest.done === true) break;
97
+ this.entries.delete(oldest.value);
98
+ }
99
+ }
100
+
101
+ /** Drops every original. Called when the session it belongs to ends. */
102
+ clear(): void {
103
+ this.entries.clear();
104
+ }
105
+
106
+ /** Counts only — never keys, never values. For the diagnostic. */
107
+ get stats(): { readonly size: number; readonly hits: number; readonly misses: number } {
108
+ return { size: this.entries.size, hits: this.hitCount, misses: this.missCount };
109
+ }
110
+ }