@discretion/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (885) hide show
  1. package/CHANGELOG.md +117 -0
  2. package/LICENSE +21 -0
  3. package/README.md +319 -0
  4. package/dist/src/checksums/aba.d.ts +25 -0
  5. package/dist/src/checksums/aba.d.ts.map +1 -0
  6. package/dist/src/checksums/aba.js +47 -0
  7. package/dist/src/checksums/aba.js.map +1 -0
  8. package/dist/src/checksums/digits.d.ts +55 -0
  9. package/dist/src/checksums/digits.d.ts.map +1 -0
  10. package/dist/src/checksums/digits.js +114 -0
  11. package/dist/src/checksums/digits.js.map +1 -0
  12. package/dist/src/checksums/icao9303.d.ts +29 -0
  13. package/dist/src/checksums/icao9303.d.ts.map +1 -0
  14. package/dist/src/checksums/icao9303.js +56 -0
  15. package/dist/src/checksums/icao9303.js.map +1 -0
  16. package/dist/src/checksums/index.d.ts +21 -0
  17. package/dist/src/checksums/index.d.ts.map +1 -0
  18. package/dist/src/checksums/index.js +21 -0
  19. package/dist/src/checksums/index.js.map +1 -0
  20. package/dist/src/checksums/iso7064.d.ts +67 -0
  21. package/dist/src/checksums/iso7064.d.ts.map +1 -0
  22. package/dist/src/checksums/iso7064.js +159 -0
  23. package/dist/src/checksums/iso7064.js.map +1 -0
  24. package/dist/src/checksums/luhn.d.ts +32 -0
  25. package/dist/src/checksums/luhn.d.ts.map +1 -0
  26. package/dist/src/checksums/luhn.js +66 -0
  27. package/dist/src/checksums/luhn.js.map +1 -0
  28. package/dist/src/checksums/mod97.d.ts +55 -0
  29. package/dist/src/checksums/mod97.d.ts.map +1 -0
  30. package/dist/src/checksums/mod97.js +94 -0
  31. package/dist/src/checksums/mod97.js.map +1 -0
  32. package/dist/src/checksums/verhoeff.d.ts +28 -0
  33. package/dist/src/checksums/verhoeff.d.ts.map +1 -0
  34. package/dist/src/checksums/verhoeff.js +80 -0
  35. package/dist/src/checksums/verhoeff.js.map +1 -0
  36. package/dist/src/checksums/weighted.d.ts +64 -0
  37. package/dist/src/checksums/weighted.d.ts.map +1 -0
  38. package/dist/src/checksums/weighted.js +97 -0
  39. package/dist/src/checksums/weighted.js.map +1 -0
  40. package/dist/src/context/documentProfile.d.ts +34 -0
  41. package/dist/src/context/documentProfile.d.ts.map +1 -0
  42. package/dist/src/context/documentProfile.js +253 -0
  43. package/dist/src/context/documentProfile.js.map +1 -0
  44. package/dist/src/context/negativeRules.d.ts +60 -0
  45. package/dist/src/context/negativeRules.d.ts.map +1 -0
  46. package/dist/src/context/negativeRules.js +696 -0
  47. package/dist/src/context/negativeRules.js.map +1 -0
  48. package/dist/src/context/score.d.ts +52 -0
  49. package/dist/src/context/score.d.ts.map +1 -0
  50. package/dist/src/context/score.js +346 -0
  51. package/dist/src/context/score.js.map +1 -0
  52. package/dist/src/context/structure.d.ts +46 -0
  53. package/dist/src/context/structure.d.ts.map +1 -0
  54. package/dist/src/context/structure.js +528 -0
  55. package/dist/src/context/structure.js.map +1 -0
  56. package/dist/src/context/triggers.d.ts +73 -0
  57. package/dist/src/context/triggers.d.ts.map +1 -0
  58. package/dist/src/context/triggers.js +172 -0
  59. package/dist/src/context/triggers.js.map +1 -0
  60. package/dist/src/context/types.d.ts +137 -0
  61. package/dist/src/context/types.d.ts.map +1 -0
  62. package/dist/src/context/types.js +25 -0
  63. package/dist/src/context/types.js.map +1 -0
  64. package/dist/src/crypto/keccak256.d.ts +15 -0
  65. package/dist/src/crypto/keccak256.d.ts.map +1 -0
  66. package/dist/src/crypto/keccak256.js +89 -0
  67. package/dist/src/crypto/keccak256.js.map +1 -0
  68. package/dist/src/crypto/sha256.d.ts +16 -0
  69. package/dist/src/crypto/sha256.d.ts.map +1 -0
  70. package/dist/src/crypto/sha256.js +81 -0
  71. package/dist/src/crypto/sha256.js.map +1 -0
  72. package/dist/src/detect/detectors/bankcodes/auBsb.d.ts +11 -0
  73. package/dist/src/detect/detectors/bankcodes/auBsb.d.ts.map +1 -0
  74. package/dist/src/detect/detectors/bankcodes/auBsb.js +34 -0
  75. package/dist/src/detect/detectors/bankcodes/auBsb.js.map +1 -0
  76. package/dist/src/detect/detectors/bankcodes/brAgencia.d.ts +15 -0
  77. package/dist/src/detect/detectors/bankcodes/brAgencia.d.ts.map +1 -0
  78. package/dist/src/detect/detectors/bankcodes/brAgencia.js +43 -0
  79. package/dist/src/detect/detectors/bankcodes/brAgencia.js.map +1 -0
  80. package/dist/src/detect/detectors/bankcodes/caTransit.d.ts +13 -0
  81. package/dist/src/detect/detectors/bankcodes/caTransit.d.ts.map +1 -0
  82. package/dist/src/detect/detectors/bankcodes/caTransit.js +86 -0
  83. package/dist/src/detect/detectors/bankcodes/caTransit.js.map +1 -0
  84. package/dist/src/detect/detectors/bankcodes/inIfsc.d.ts +13 -0
  85. package/dist/src/detect/detectors/bankcodes/inIfsc.d.ts.map +1 -0
  86. package/dist/src/detect/detectors/bankcodes/inIfsc.js +37 -0
  87. package/dist/src/detect/detectors/bankcodes/inIfsc.js.map +1 -0
  88. package/dist/src/detect/detectors/bankcodes/index.d.ts +10 -0
  89. package/dist/src/detect/detectors/bankcodes/index.d.ts.map +1 -0
  90. package/dist/src/detect/detectors/bankcodes/index.js +10 -0
  91. package/dist/src/detect/detectors/bankcodes/index.js.map +1 -0
  92. package/dist/src/detect/detectors/bankcodes/ukSortCode.d.ts +13 -0
  93. package/dist/src/detect/detectors/bankcodes/ukSortCode.d.ts.map +1 -0
  94. package/dist/src/detect/detectors/bankcodes/ukSortCode.js +36 -0
  95. package/dist/src/detect/detectors/bankcodes/ukSortCode.js.map +1 -0
  96. package/dist/src/detect/detectors/bankcodes/usRouting.d.ts +12 -0
  97. package/dist/src/detect/detectors/bankcodes/usRouting.d.ts.map +1 -0
  98. package/dist/src/detect/detectors/bankcodes/usRouting.js +45 -0
  99. package/dist/src/detect/detectors/bankcodes/usRouting.js.map +1 -0
  100. package/dist/src/detect/detectors/contact/email.d.ts +16 -0
  101. package/dist/src/detect/detectors/contact/email.d.ts.map +1 -0
  102. package/dist/src/detect/detectors/contact/email.js +111 -0
  103. package/dist/src/detect/detectors/contact/email.js.map +1 -0
  104. package/dist/src/detect/detectors/contact/index.d.ts +11 -0
  105. package/dist/src/detect/detectors/contact/index.d.ts.map +1 -0
  106. package/dist/src/detect/detectors/contact/index.js +11 -0
  107. package/dist/src/detect/detectors/contact/index.js.map +1 -0
  108. package/dist/src/detect/detectors/contact/ipv4.d.ts +12 -0
  109. package/dist/src/detect/detectors/contact/ipv4.d.ts.map +1 -0
  110. package/dist/src/detect/detectors/contact/ipv4.js +109 -0
  111. package/dist/src/detect/detectors/contact/ipv4.js.map +1 -0
  112. package/dist/src/detect/detectors/contact/ipv6.d.ts +16 -0
  113. package/dist/src/detect/detectors/contact/ipv6.d.ts.map +1 -0
  114. package/dist/src/detect/detectors/contact/ipv6.js +187 -0
  115. package/dist/src/detect/detectors/contact/ipv6.js.map +1 -0
  116. package/dist/src/detect/detectors/contact/mac.d.ts +14 -0
  117. package/dist/src/detect/detectors/contact/mac.d.ts.map +1 -0
  118. package/dist/src/detect/detectors/contact/mac.js +64 -0
  119. package/dist/src/detect/detectors/contact/mac.js.map +1 -0
  120. package/dist/src/detect/detectors/contact/phone.d.ts +21 -0
  121. package/dist/src/detect/detectors/contact/phone.d.ts.map +1 -0
  122. package/dist/src/detect/detectors/contact/phone.js +76 -0
  123. package/dist/src/detect/detectors/contact/phone.js.map +1 -0
  124. package/dist/src/detect/detectors/contact/urlCredentials.d.ts +23 -0
  125. package/dist/src/detect/detectors/contact/urlCredentials.d.ts.map +1 -0
  126. package/dist/src/detect/detectors/contact/urlCredentials.js +123 -0
  127. package/dist/src/detect/detectors/contact/urlCredentials.js.map +1 -0
  128. package/dist/src/detect/detectors/crypto/ada.d.ts +13 -0
  129. package/dist/src/detect/detectors/crypto/ada.d.ts.map +1 -0
  130. package/dist/src/detect/detectors/crypto/ada.js +51 -0
  131. package/dist/src/detect/detectors/crypto/ada.js.map +1 -0
  132. package/dist/src/detect/detectors/crypto/btc.d.ts +15 -0
  133. package/dist/src/detect/detectors/crypto/btc.d.ts.map +1 -0
  134. package/dist/src/detect/detectors/crypto/btc.js +78 -0
  135. package/dist/src/detect/detectors/crypto/btc.js.map +1 -0
  136. package/dist/src/detect/detectors/crypto/dot.d.ts +13 -0
  137. package/dist/src/detect/detectors/crypto/dot.d.ts.map +1 -0
  138. package/dist/src/detect/detectors/crypto/dot.js +41 -0
  139. package/dist/src/detect/detectors/crypto/dot.js.map +1 -0
  140. package/dist/src/detect/detectors/crypto/eth.d.ts +15 -0
  141. package/dist/src/detect/detectors/crypto/eth.d.ts.map +1 -0
  142. package/dist/src/detect/detectors/crypto/eth.js +63 -0
  143. package/dist/src/detect/detectors/crypto/eth.js.map +1 -0
  144. package/dist/src/detect/detectors/crypto/index.d.ts +12 -0
  145. package/dist/src/detect/detectors/crypto/index.d.ts.map +1 -0
  146. package/dist/src/detect/detectors/crypto/index.js +12 -0
  147. package/dist/src/detect/detectors/crypto/index.js.map +1 -0
  148. package/dist/src/detect/detectors/crypto/ltc.d.ts +12 -0
  149. package/dist/src/detect/detectors/crypto/ltc.d.ts.map +1 -0
  150. package/dist/src/detect/detectors/crypto/ltc.js +71 -0
  151. package/dist/src/detect/detectors/crypto/ltc.js.map +1 -0
  152. package/dist/src/detect/detectors/crypto/sol.d.ts +13 -0
  153. package/dist/src/detect/detectors/crypto/sol.d.ts.map +1 -0
  154. package/dist/src/detect/detectors/crypto/sol.js +39 -0
  155. package/dist/src/detect/detectors/crypto/sol.js.map +1 -0
  156. package/dist/src/detect/detectors/crypto/trx.d.ts +8 -0
  157. package/dist/src/detect/detectors/crypto/trx.d.ts.map +1 -0
  158. package/dist/src/detect/detectors/crypto/trx.js +34 -0
  159. package/dist/src/detect/detectors/crypto/trx.js.map +1 -0
  160. package/dist/src/detect/detectors/crypto/xmr.d.ts +10 -0
  161. package/dist/src/detect/detectors/crypto/xmr.d.ts.map +1 -0
  162. package/dist/src/detect/detectors/crypto/xmr.js +51 -0
  163. package/dist/src/detect/detectors/crypto/xmr.js.map +1 -0
  164. package/dist/src/detect/detectors/documents/driversLicense.d.ts +24 -0
  165. package/dist/src/detect/detectors/documents/driversLicense.d.ts.map +1 -0
  166. package/dist/src/detect/detectors/documents/driversLicense.js +79 -0
  167. package/dist/src/detect/detectors/documents/driversLicense.js.map +1 -0
  168. package/dist/src/detect/detectors/documents/healthData.d.ts +23 -0
  169. package/dist/src/detect/detectors/documents/healthData.d.ts.map +1 -0
  170. package/dist/src/detect/detectors/documents/healthData.js +78 -0
  171. package/dist/src/detect/detectors/documents/healthData.js.map +1 -0
  172. package/dist/src/detect/detectors/documents/index.d.ts +9 -0
  173. package/dist/src/detect/detectors/documents/index.d.ts.map +1 -0
  174. package/dist/src/detect/detectors/documents/index.js +9 -0
  175. package/dist/src/detect/detectors/documents/index.js.map +1 -0
  176. package/dist/src/detect/detectors/documents/passportMrz.d.ts +20 -0
  177. package/dist/src/detect/detectors/documents/passportMrz.d.ts.map +1 -0
  178. package/dist/src/detect/detectors/documents/passportMrz.js +194 -0
  179. package/dist/src/detect/detectors/documents/passportMrz.js.map +1 -0
  180. package/dist/src/detect/detectors/documents/usNpi.d.ts +16 -0
  181. package/dist/src/detect/detectors/documents/usNpi.d.ts.map +1 -0
  182. package/dist/src/detect/detectors/documents/usNpi.js +48 -0
  183. package/dist/src/detect/detectors/documents/usNpi.js.map +1 -0
  184. package/dist/src/detect/detectors/documents/vin.d.ts +15 -0
  185. package/dist/src/detect/detectors/documents/vin.d.ts.map +1 -0
  186. package/dist/src/detect/detectors/documents/vin.js +64 -0
  187. package/dist/src/detect/detectors/documents/vin.js.map +1 -0
  188. package/dist/src/detect/detectors/financial/creditCard.d.ts +23 -0
  189. package/dist/src/detect/detectors/financial/creditCard.d.ts.map +1 -0
  190. package/dist/src/detect/detectors/financial/creditCard.js +157 -0
  191. package/dist/src/detect/detectors/financial/creditCard.js.map +1 -0
  192. package/dist/src/detect/detectors/financial/iban.d.ts +18 -0
  193. package/dist/src/detect/detectors/financial/iban.d.ts.map +1 -0
  194. package/dist/src/detect/detectors/financial/iban.js +80 -0
  195. package/dist/src/detect/detectors/financial/iban.js.map +1 -0
  196. package/dist/src/detect/detectors/financial/ibanRegistry.d.ts +35 -0
  197. package/dist/src/detect/detectors/financial/ibanRegistry.d.ts.map +1 -0
  198. package/dist/src/detect/detectors/financial/ibanRegistry.js +92 -0
  199. package/dist/src/detect/detectors/financial/ibanRegistry.js.map +1 -0
  200. package/dist/src/detect/detectors/financial/index.d.ts +7 -0
  201. package/dist/src/detect/detectors/financial/index.d.ts.map +1 -0
  202. package/dist/src/detect/detectors/financial/index.js +7 -0
  203. package/dist/src/detect/detectors/financial/index.js.map +1 -0
  204. package/dist/src/detect/detectors/financial/swiftBic.d.ts +17 -0
  205. package/dist/src/detect/detectors/financial/swiftBic.d.ts.map +1 -0
  206. package/dist/src/detect/detectors/financial/swiftBic.js +55 -0
  207. package/dist/src/detect/detectors/financial/swiftBic.js.map +1 -0
  208. package/dist/src/detect/detectors/index.d.ts +15 -0
  209. package/dist/src/detect/detectors/index.d.ts.map +1 -0
  210. package/dist/src/detect/detectors/index.js +15 -0
  211. package/dist/src/detect/detectors/index.js.map +1 -0
  212. package/dist/src/detect/detectors/location/coordinates.d.ts +14 -0
  213. package/dist/src/detect/detectors/location/coordinates.d.ts.map +1 -0
  214. package/dist/src/detect/detectors/location/coordinates.js +79 -0
  215. package/dist/src/detect/detectors/location/coordinates.js.map +1 -0
  216. package/dist/src/detect/detectors/location/index.d.ts +7 -0
  217. package/dist/src/detect/detectors/location/index.d.ts.map +1 -0
  218. package/dist/src/detect/detectors/location/index.js +7 -0
  219. package/dist/src/detect/detectors/location/index.js.map +1 -0
  220. package/dist/src/detect/detectors/location/postalCode.d.ts +13 -0
  221. package/dist/src/detect/detectors/location/postalCode.d.ts.map +1 -0
  222. package/dist/src/detect/detectors/location/postalCode.js +53 -0
  223. package/dist/src/detect/detectors/location/postalCode.js.map +1 -0
  224. package/dist/src/detect/detectors/location/postalRegistry.d.ts +19 -0
  225. package/dist/src/detect/detectors/location/postalRegistry.d.ts.map +1 -0
  226. package/dist/src/detect/detectors/location/postalRegistry.js +73 -0
  227. package/dist/src/detect/detectors/location/postalRegistry.js.map +1 -0
  228. package/dist/src/detect/detectors/location/streetAddress.d.ts +21 -0
  229. package/dist/src/detect/detectors/location/streetAddress.d.ts.map +1 -0
  230. package/dist/src/detect/detectors/location/streetAddress.js +70 -0
  231. package/dist/src/detect/detectors/location/streetAddress.js.map +1 -0
  232. package/dist/src/detect/detectors/natid/africa.d.ts +17 -0
  233. package/dist/src/detect/detectors/natid/africa.d.ts.map +1 -0
  234. package/dist/src/detect/detectors/natid/africa.js +106 -0
  235. package/dist/src/detect/detectors/natid/africa.js.map +1 -0
  236. package/dist/src/detect/detectors/natid/ar.d.ts +14 -0
  237. package/dist/src/detect/detectors/natid/ar.d.ts.map +1 -0
  238. package/dist/src/detect/detectors/natid/ar.js +62 -0
  239. package/dist/src/detect/detectors/natid/ar.js.map +1 -0
  240. package/dist/src/detect/detectors/natid/au.d.ts +13 -0
  241. package/dist/src/detect/detectors/natid/au.d.ts.map +1 -0
  242. package/dist/src/detect/detectors/natid/au.js +100 -0
  243. package/dist/src/detect/detectors/natid/au.js.map +1 -0
  244. package/dist/src/detect/detectors/natid/be.d.ts +8 -0
  245. package/dist/src/detect/detectors/natid/be.d.ts.map +1 -0
  246. package/dist/src/detect/detectors/natid/be.js +44 -0
  247. package/dist/src/detect/detectors/natid/be.js.map +1 -0
  248. package/dist/src/detect/detectors/natid/bg.d.ts +7 -0
  249. package/dist/src/detect/detectors/natid/bg.d.ts.map +1 -0
  250. package/dist/src/detect/detectors/natid/bg.js +44 -0
  251. package/dist/src/detect/detectors/natid/bg.js.map +1 -0
  252. package/dist/src/detect/detectors/natid/br.d.ts +8 -0
  253. package/dist/src/detect/detectors/natid/br.d.ts.map +1 -0
  254. package/dist/src/detect/detectors/natid/br.js +85 -0
  255. package/dist/src/detect/detectors/natid/br.js.map +1 -0
  256. package/dist/src/detect/detectors/natid/ca.d.ts +8 -0
  257. package/dist/src/detect/detectors/natid/ca.d.ts.map +1 -0
  258. package/dist/src/detect/detectors/natid/ca.js +41 -0
  259. package/dist/src/detect/detectors/natid/ca.js.map +1 -0
  260. package/dist/src/detect/detectors/natid/cl.d.ts +9 -0
  261. package/dist/src/detect/detectors/natid/cl.d.ts.map +1 -0
  262. package/dist/src/detect/detectors/natid/cl.js +47 -0
  263. package/dist/src/detect/detectors/natid/cl.js.map +1 -0
  264. package/dist/src/detect/detectors/natid/cn.d.ts +9 -0
  265. package/dist/src/detect/detectors/natid/cn.d.ts.map +1 -0
  266. package/dist/src/detect/detectors/natid/cn.js +49 -0
  267. package/dist/src/detect/detectors/natid/cn.js.map +1 -0
  268. package/dist/src/detect/detectors/natid/co.d.ts +10 -0
  269. package/dist/src/detect/detectors/natid/co.d.ts.map +1 -0
  270. package/dist/src/detect/detectors/natid/co.js +43 -0
  271. package/dist/src/detect/detectors/natid/co.js.map +1 -0
  272. package/dist/src/detect/detectors/natid/cz.d.ts +11 -0
  273. package/dist/src/detect/detectors/natid/cz.d.ts.map +1 -0
  274. package/dist/src/detect/detectors/natid/cz.js +44 -0
  275. package/dist/src/detect/detectors/natid/cz.js.map +1 -0
  276. package/dist/src/detect/detectors/natid/de.d.ts +16 -0
  277. package/dist/src/detect/detectors/natid/de.d.ts.map +1 -0
  278. package/dist/src/detect/detectors/natid/de.js +77 -0
  279. package/dist/src/detect/detectors/natid/de.js.map +1 -0
  280. package/dist/src/detect/detectors/natid/dk.d.ts +9 -0
  281. package/dist/src/detect/detectors/natid/dk.d.ts.map +1 -0
  282. package/dist/src/detect/detectors/natid/dk.js +31 -0
  283. package/dist/src/detect/detectors/natid/dk.js.map +1 -0
  284. package/dist/src/detect/detectors/natid/es.d.ts +12 -0
  285. package/dist/src/detect/detectors/natid/es.d.ts.map +1 -0
  286. package/dist/src/detect/detectors/natid/es.js +96 -0
  287. package/dist/src/detect/detectors/natid/es.js.map +1 -0
  288. package/dist/src/detect/detectors/natid/fi.d.ts +10 -0
  289. package/dist/src/detect/detectors/natid/fi.d.ts.map +1 -0
  290. package/dist/src/detect/detectors/natid/fi.js +40 -0
  291. package/dist/src/detect/detectors/natid/fi.js.map +1 -0
  292. package/dist/src/detect/detectors/natid/fr.d.ts +12 -0
  293. package/dist/src/detect/detectors/natid/fr.d.ts.map +1 -0
  294. package/dist/src/detect/detectors/natid/fr.js +61 -0
  295. package/dist/src/detect/detectors/natid/fr.js.map +1 -0
  296. package/dist/src/detect/detectors/natid/gb.d.ts +10 -0
  297. package/dist/src/detect/detectors/natid/gb.d.ts.map +1 -0
  298. package/dist/src/detect/detectors/natid/gb.js +72 -0
  299. package/dist/src/detect/detectors/natid/gb.js.map +1 -0
  300. package/dist/src/detect/detectors/natid/gr.d.ts +7 -0
  301. package/dist/src/detect/detectors/natid/gr.d.ts.map +1 -0
  302. package/dist/src/detect/detectors/natid/gr.js +36 -0
  303. package/dist/src/detect/detectors/natid/gr.js.map +1 -0
  304. package/dist/src/detect/detectors/natid/gulf.d.ts +16 -0
  305. package/dist/src/detect/detectors/natid/gulf.d.ts.map +1 -0
  306. package/dist/src/detect/detectors/natid/gulf.js +121 -0
  307. package/dist/src/detect/detectors/natid/gulf.js.map +1 -0
  308. package/dist/src/detect/detectors/natid/hk.d.ts +9 -0
  309. package/dist/src/detect/detectors/natid/hk.d.ts.map +1 -0
  310. package/dist/src/detect/detectors/natid/hk.js +41 -0
  311. package/dist/src/detect/detectors/natid/hk.js.map +1 -0
  312. package/dist/src/detect/detectors/natid/hr.d.ts +6 -0
  313. package/dist/src/detect/detectors/natid/hr.d.ts.map +1 -0
  314. package/dist/src/detect/detectors/natid/hr.js +32 -0
  315. package/dist/src/detect/detectors/natid/hr.js.map +1 -0
  316. package/dist/src/detect/detectors/natid/hu.d.ts +7 -0
  317. package/dist/src/detect/detectors/natid/hu.d.ts.map +1 -0
  318. package/dist/src/detect/detectors/natid/hu.js +37 -0
  319. package/dist/src/detect/detectors/natid/hu.js.map +1 -0
  320. package/dist/src/detect/detectors/natid/ie.d.ts +9 -0
  321. package/dist/src/detect/detectors/natid/ie.d.ts.map +1 -0
  322. package/dist/src/detect/detectors/natid/ie.js +36 -0
  323. package/dist/src/detect/detectors/natid/ie.js.map +1 -0
  324. package/dist/src/detect/detectors/natid/il.d.ts +10 -0
  325. package/dist/src/detect/detectors/natid/il.d.ts.map +1 -0
  326. package/dist/src/detect/detectors/natid/il.js +38 -0
  327. package/dist/src/detect/detectors/natid/il.js.map +1 -0
  328. package/dist/src/detect/detectors/natid/in.d.ts +17 -0
  329. package/dist/src/detect/detectors/natid/in.d.ts.map +1 -0
  330. package/dist/src/detect/detectors/natid/in.js +67 -0
  331. package/dist/src/detect/detectors/natid/in.js.map +1 -0
  332. package/dist/src/detect/detectors/natid/index.d.ts +55 -0
  333. package/dist/src/detect/detectors/natid/index.d.ts.map +1 -0
  334. package/dist/src/detect/detectors/natid/index.js +55 -0
  335. package/dist/src/detect/detectors/natid/index.js.map +1 -0
  336. package/dist/src/detect/detectors/natid/is.d.ts +8 -0
  337. package/dist/src/detect/detectors/natid/is.d.ts.map +1 -0
  338. package/dist/src/detect/detectors/natid/is.js +42 -0
  339. package/dist/src/detect/detectors/natid/is.js.map +1 -0
  340. package/dist/src/detect/detectors/natid/it.d.ts +12 -0
  341. package/dist/src/detect/detectors/natid/it.d.ts.map +1 -0
  342. package/dist/src/detect/detectors/natid/it.js +62 -0
  343. package/dist/src/detect/detectors/natid/it.js.map +1 -0
  344. package/dist/src/detect/detectors/natid/jp.d.ts +9 -0
  345. package/dist/src/detect/detectors/natid/jp.d.ts.map +1 -0
  346. package/dist/src/detect/detectors/natid/jp.js +46 -0
  347. package/dist/src/detect/detectors/natid/jp.js.map +1 -0
  348. package/dist/src/detect/detectors/natid/kr.d.ts +11 -0
  349. package/dist/src/detect/detectors/natid/kr.d.ts.map +1 -0
  350. package/dist/src/detect/detectors/natid/kr.js +40 -0
  351. package/dist/src/detect/detectors/natid/kr.js.map +1 -0
  352. package/dist/src/detect/detectors/natid/kz.d.ts +8 -0
  353. package/dist/src/detect/detectors/natid/kz.d.ts.map +1 -0
  354. package/dist/src/detect/detectors/natid/kz.js +46 -0
  355. package/dist/src/detect/detectors/natid/kz.js.map +1 -0
  356. package/dist/src/detect/detectors/natid/mx.d.ts +16 -0
  357. package/dist/src/detect/detectors/natid/mx.d.ts.map +1 -0
  358. package/dist/src/detect/detectors/natid/mx.js +82 -0
  359. package/dist/src/detect/detectors/natid/mx.js.map +1 -0
  360. package/dist/src/detect/detectors/natid/nl.d.ts +8 -0
  361. package/dist/src/detect/detectors/natid/nl.d.ts.map +1 -0
  362. package/dist/src/detect/detectors/natid/nl.js +40 -0
  363. package/dist/src/detect/detectors/natid/nl.js.map +1 -0
  364. package/dist/src/detect/detectors/natid/no.d.ts +9 -0
  365. package/dist/src/detect/detectors/natid/no.d.ts.map +1 -0
  366. package/dist/src/detect/detectors/natid/no.js +52 -0
  367. package/dist/src/detect/detectors/natid/no.js.map +1 -0
  368. package/dist/src/detect/detectors/natid/nz.d.ts +9 -0
  369. package/dist/src/detect/detectors/natid/nz.d.ts.map +1 -0
  370. package/dist/src/detect/detectors/natid/nz.js +52 -0
  371. package/dist/src/detect/detectors/natid/nz.js.map +1 -0
  372. package/dist/src/detect/detectors/natid/pe.d.ts +7 -0
  373. package/dist/src/detect/detectors/natid/pe.d.ts.map +1 -0
  374. package/dist/src/detect/detectors/natid/pe.js +26 -0
  375. package/dist/src/detect/detectors/natid/pe.js.map +1 -0
  376. package/dist/src/detect/detectors/natid/pl.d.ts +11 -0
  377. package/dist/src/detect/detectors/natid/pl.d.ts.map +1 -0
  378. package/dist/src/detect/detectors/natid/pl.js +105 -0
  379. package/dist/src/detect/detectors/natid/pl.js.map +1 -0
  380. package/dist/src/detect/detectors/natid/pt.d.ts +6 -0
  381. package/dist/src/detect/detectors/natid/pt.d.ts.map +1 -0
  382. package/dist/src/detect/detectors/natid/pt.js +35 -0
  383. package/dist/src/detect/detectors/natid/pt.js.map +1 -0
  384. package/dist/src/detect/detectors/natid/ro.d.ts +8 -0
  385. package/dist/src/detect/detectors/natid/ro.d.ts.map +1 -0
  386. package/dist/src/detect/detectors/natid/ro.js +48 -0
  387. package/dist/src/detect/detectors/natid/ro.js.map +1 -0
  388. package/dist/src/detect/detectors/natid/ru.d.ts +11 -0
  389. package/dist/src/detect/detectors/natid/ru.d.ts.map +1 -0
  390. package/dist/src/detect/detectors/natid/ru.js +86 -0
  391. package/dist/src/detect/detectors/natid/ru.js.map +1 -0
  392. package/dist/src/detect/detectors/natid/se.d.ts +9 -0
  393. package/dist/src/detect/detectors/natid/se.d.ts.map +1 -0
  394. package/dist/src/detect/detectors/natid/se.js +43 -0
  395. package/dist/src/detect/detectors/natid/se.js.map +1 -0
  396. package/dist/src/detect/detectors/natid/seasia.d.ts +19 -0
  397. package/dist/src/detect/detectors/natid/seasia.d.ts.map +1 -0
  398. package/dist/src/detect/detectors/natid/seasia.js +182 -0
  399. package/dist/src/detect/detectors/natid/seasia.js.map +1 -0
  400. package/dist/src/detect/detectors/natid/sg.d.ts +8 -0
  401. package/dist/src/detect/detectors/natid/sg.d.ts.map +1 -0
  402. package/dist/src/detect/detectors/natid/sg.js +39 -0
  403. package/dist/src/detect/detectors/natid/sg.js.map +1 -0
  404. package/dist/src/detect/detectors/natid/si.d.ts +8 -0
  405. package/dist/src/detect/detectors/natid/si.d.ts.map +1 -0
  406. package/dist/src/detect/detectors/natid/si.js +44 -0
  407. package/dist/src/detect/detectors/natid/si.js.map +1 -0
  408. package/dist/src/detect/detectors/natid/tr.d.ts +14 -0
  409. package/dist/src/detect/detectors/natid/tr.d.ts.map +1 -0
  410. package/dist/src/detect/detectors/natid/tr.js +79 -0
  411. package/dist/src/detect/detectors/natid/tr.js.map +1 -0
  412. package/dist/src/detect/detectors/natid/tw.d.ts +9 -0
  413. package/dist/src/detect/detectors/natid/tw.d.ts.map +1 -0
  414. package/dist/src/detect/detectors/natid/tw.js +40 -0
  415. package/dist/src/detect/detectors/natid/tw.js.map +1 -0
  416. package/dist/src/detect/detectors/natid/ua.d.ts +7 -0
  417. package/dist/src/detect/detectors/natid/ua.d.ts.map +1 -0
  418. package/dist/src/detect/detectors/natid/ua.js +38 -0
  419. package/dist/src/detect/detectors/natid/ua.js.map +1 -0
  420. package/dist/src/detect/detectors/natid/us.d.ts +15 -0
  421. package/dist/src/detect/detectors/natid/us.d.ts.map +1 -0
  422. package/dist/src/detect/detectors/natid/us.js +119 -0
  423. package/dist/src/detect/detectors/natid/us.js.map +1 -0
  424. package/dist/src/detect/detectors/natid/za.d.ts +9 -0
  425. package/dist/src/detect/detectors/natid/za.d.ts.map +1 -0
  426. package/dist/src/detect/detectors/natid/za.js +44 -0
  427. package/dist/src/detect/detectors/natid/za.js.map +1 -0
  428. package/dist/src/detect/detectors/secrets/apiKey.d.ts +14 -0
  429. package/dist/src/detect/detectors/secrets/apiKey.d.ts.map +1 -0
  430. package/dist/src/detect/detectors/secrets/apiKey.js +103 -0
  431. package/dist/src/detect/detectors/secrets/apiKey.js.map +1 -0
  432. package/dist/src/detect/detectors/secrets/connectionString.d.ts +12 -0
  433. package/dist/src/detect/detectors/secrets/connectionString.d.ts.map +1 -0
  434. package/dist/src/detect/detectors/secrets/connectionString.js +70 -0
  435. package/dist/src/detect/detectors/secrets/connectionString.js.map +1 -0
  436. package/dist/src/detect/detectors/secrets/genericSecret.d.ts +22 -0
  437. package/dist/src/detect/detectors/secrets/genericSecret.d.ts.map +1 -0
  438. package/dist/src/detect/detectors/secrets/genericSecret.js +77 -0
  439. package/dist/src/detect/detectors/secrets/genericSecret.js.map +1 -0
  440. package/dist/src/detect/detectors/secrets/index.d.ts +9 -0
  441. package/dist/src/detect/detectors/secrets/index.d.ts.map +1 -0
  442. package/dist/src/detect/detectors/secrets/index.js +9 -0
  443. package/dist/src/detect/detectors/secrets/index.js.map +1 -0
  444. package/dist/src/detect/detectors/secrets/jwt.d.ts +11 -0
  445. package/dist/src/detect/detectors/secrets/jwt.d.ts.map +1 -0
  446. package/dist/src/detect/detectors/secrets/jwt.js +111 -0
  447. package/dist/src/detect/detectors/secrets/jwt.js.map +1 -0
  448. package/dist/src/detect/detectors/secrets/pemPrivateKey.d.ts +16 -0
  449. package/dist/src/detect/detectors/secrets/pemPrivateKey.d.ts.map +1 -0
  450. package/dist/src/detect/detectors/secrets/pemPrivateKey.js +56 -0
  451. package/dist/src/detect/detectors/secrets/pemPrivateKey.js.map +1 -0
  452. package/dist/src/detect/detectors/vat/euVat.d.ts +17 -0
  453. package/dist/src/detect/detectors/vat/euVat.d.ts.map +1 -0
  454. package/dist/src/detect/detectors/vat/euVat.js +293 -0
  455. package/dist/src/detect/detectors/vat/euVat.js.map +1 -0
  456. package/dist/src/detect/detectors/vat/index.d.ts +5 -0
  457. package/dist/src/detect/detectors/vat/index.d.ts.map +1 -0
  458. package/dist/src/detect/detectors/vat/index.js +5 -0
  459. package/dist/src/detect/detectors/vat/index.js.map +1 -0
  460. package/dist/src/detect/entropy.d.ts +28 -0
  461. package/dist/src/detect/entropy.d.ts.map +1 -0
  462. package/dist/src/detect/entropy.js +64 -0
  463. package/dist/src/detect/entropy.js.map +1 -0
  464. package/dist/src/detect/isoCountries.d.ts +10 -0
  465. package/dist/src/detect/isoCountries.d.ts.map +1 -0
  466. package/dist/src/detect/isoCountries.js +25 -0
  467. package/dist/src/detect/isoCountries.js.map +1 -0
  468. package/dist/src/detect/registry.d.ts +50 -0
  469. package/dist/src/detect/registry.d.ts.map +1 -0
  470. package/dist/src/detect/registry.js +110 -0
  471. package/dist/src/detect/registry.js.map +1 -0
  472. package/dist/src/detect/runner.d.ts +64 -0
  473. package/dist/src/detect/runner.d.ts.map +1 -0
  474. package/dist/src/detect/runner.js +142 -0
  475. package/dist/src/detect/runner.js.map +1 -0
  476. package/dist/src/detect/types.d.ts +251 -0
  477. package/dist/src/detect/types.d.ts.map +1 -0
  478. package/dist/src/detect/types.js +59 -0
  479. package/dist/src/detect/types.js.map +1 -0
  480. package/dist/src/encoding/base58.d.ts +26 -0
  481. package/dist/src/encoding/base58.d.ts.map +1 -0
  482. package/dist/src/encoding/base58.js +77 -0
  483. package/dist/src/encoding/base58.js.map +1 -0
  484. package/dist/src/encoding/base58monero.d.ts +15 -0
  485. package/dist/src/encoding/base58monero.d.ts.map +1 -0
  486. package/dist/src/encoding/base58monero.js +87 -0
  487. package/dist/src/encoding/base58monero.js.map +1 -0
  488. package/dist/src/encoding/bech32.d.ts +28 -0
  489. package/dist/src/encoding/bech32.d.ts.map +1 -0
  490. package/dist/src/encoding/bech32.js +108 -0
  491. package/dist/src/encoding/bech32.js.map +1 -0
  492. package/dist/src/encoding/bytes.d.ts +15 -0
  493. package/dist/src/encoding/bytes.d.ts.map +1 -0
  494. package/dist/src/encoding/bytes.js +46 -0
  495. package/dist/src/encoding/bytes.js.map +1 -0
  496. package/dist/src/entityFamily.d.ts +18 -0
  497. package/dist/src/entityFamily.d.ts.map +1 -0
  498. package/dist/src/entityFamily.js +54 -0
  499. package/dist/src/entityFamily.js.map +1 -0
  500. package/dist/src/entityLabel.d.ts +18 -0
  501. package/dist/src/entityLabel.d.ts.map +1 -0
  502. package/dist/src/entityLabel.js +53 -0
  503. package/dist/src/entityLabel.js.map +1 -0
  504. package/dist/src/entityTypes.d.ts +64 -0
  505. package/dist/src/entityTypes.d.ts.map +1 -0
  506. package/dist/src/entityTypes.js +94 -0
  507. package/dist/src/entityTypes.js.map +1 -0
  508. package/dist/src/exposure/index.d.ts +86 -0
  509. package/dist/src/exposure/index.d.ts.map +1 -0
  510. package/dist/src/exposure/index.js +134 -0
  511. package/dist/src/exposure/index.js.map +1 -0
  512. package/dist/src/fuse/calibrate.d.ts +95 -0
  513. package/dist/src/fuse/calibrate.d.ts.map +1 -0
  514. package/dist/src/fuse/calibrate.js +165 -0
  515. package/dist/src/fuse/calibrate.js.map +1 -0
  516. package/dist/src/fuse/defaultCalibration.d.ts +52 -0
  517. package/dist/src/fuse/defaultCalibration.d.ts.map +1 -0
  518. package/dist/src/fuse/defaultCalibration.js +41 -0
  519. package/dist/src/fuse/defaultCalibration.js.map +1 -0
  520. package/dist/src/fuse/explain.d.ts +55 -0
  521. package/dist/src/fuse/explain.d.ts.map +1 -0
  522. package/dist/src/fuse/explain.js +91 -0
  523. package/dist/src/fuse/explain.js.map +1 -0
  524. package/dist/src/fuse/profiles.d.ts +80 -0
  525. package/dist/src/fuse/profiles.d.ts.map +1 -0
  526. package/dist/src/fuse/profiles.js +126 -0
  527. package/dist/src/fuse/profiles.js.map +1 -0
  528. package/dist/src/fuse/resolve.d.ts +73 -0
  529. package/dist/src/fuse/resolve.d.ts.map +1 -0
  530. package/dist/src/fuse/resolve.js +206 -0
  531. package/dist/src/fuse/resolve.js.map +1 -0
  532. package/dist/src/gazetteer/index.d.ts +41 -0
  533. package/dist/src/gazetteer/index.d.ts.map +1 -0
  534. package/dist/src/gazetteer/index.js +117 -0
  535. package/dist/src/gazetteer/index.js.map +1 -0
  536. package/dist/src/generate/bankcodes.d.ts +20 -0
  537. package/dist/src/generate/bankcodes.d.ts.map +1 -0
  538. package/dist/src/generate/bankcodes.js +71 -0
  539. package/dist/src/generate/bankcodes.js.map +1 -0
  540. package/dist/src/generate/contact.d.ts +31 -0
  541. package/dist/src/generate/contact.d.ts.map +1 -0
  542. package/dist/src/generate/contact.js +139 -0
  543. package/dist/src/generate/contact.js.map +1 -0
  544. package/dist/src/generate/crypto.d.ts +27 -0
  545. package/dist/src/generate/crypto.d.ts.map +1 -0
  546. package/dist/src/generate/crypto.js +88 -0
  547. package/dist/src/generate/crypto.js.map +1 -0
  548. package/dist/src/generate/documents.d.ts +24 -0
  549. package/dist/src/generate/documents.d.ts.map +1 -0
  550. package/dist/src/generate/documents.js +124 -0
  551. package/dist/src/generate/documents.js.map +1 -0
  552. package/dist/src/generate/financial.d.ts +26 -0
  553. package/dist/src/generate/financial.d.ts.map +1 -0
  554. package/dist/src/generate/financial.js +136 -0
  555. package/dist/src/generate/financial.js.map +1 -0
  556. package/dist/src/generate/index.d.ts +23 -0
  557. package/dist/src/generate/index.d.ts.map +1 -0
  558. package/dist/src/generate/index.js +23 -0
  559. package/dist/src/generate/index.js.map +1 -0
  560. package/dist/src/generate/location.d.ts +12 -0
  561. package/dist/src/generate/location.d.ts.map +1 -0
  562. package/dist/src/generate/location.js +75 -0
  563. package/dist/src/generate/location.js.map +1 -0
  564. package/dist/src/generate/natidAmOc.d.ts +22 -0
  565. package/dist/src/generate/natidAmOc.d.ts.map +1 -0
  566. package/dist/src/generate/natidAmOc.js +181 -0
  567. package/dist/src/generate/natidAmOc.js.map +1 -0
  568. package/dist/src/generate/natidAsia.d.ts +20 -0
  569. package/dist/src/generate/natidAsia.d.ts.map +1 -0
  570. package/dist/src/generate/natidAsia.js +147 -0
  571. package/dist/src/generate/natidAsia.js.map +1 -0
  572. package/dist/src/generate/natidCee.d.ts +21 -0
  573. package/dist/src/generate/natidCee.d.ts.map +1 -0
  574. package/dist/src/generate/natidCee.js +181 -0
  575. package/dist/src/generate/natidCee.js.map +1 -0
  576. package/dist/src/generate/natidMeCis.d.ts +17 -0
  577. package/dist/src/generate/natidMeCis.d.ts.map +1 -0
  578. package/dist/src/generate/natidMeCis.js +121 -0
  579. package/dist/src/generate/natidMeCis.js.map +1 -0
  580. package/dist/src/generate/natidWest.d.ts +32 -0
  581. package/dist/src/generate/natidWest.d.ts.map +1 -0
  582. package/dist/src/generate/natidWest.js +187 -0
  583. package/dist/src/generate/natidWest.js.map +1 -0
  584. package/dist/src/generate/prng.d.ts +10 -0
  585. package/dist/src/generate/prng.d.ts.map +1 -0
  586. package/dist/src/generate/prng.js +18 -0
  587. package/dist/src/generate/prng.js.map +1 -0
  588. package/dist/src/generate/secrets.d.ts +23 -0
  589. package/dist/src/generate/secrets.d.ts.map +1 -0
  590. package/dist/src/generate/secrets.js +126 -0
  591. package/dist/src/generate/secrets.js.map +1 -0
  592. package/dist/src/generate/vat.d.ts +11 -0
  593. package/dist/src/generate/vat.d.ts.map +1 -0
  594. package/dist/src/generate/vat.js +233 -0
  595. package/dist/src/generate/vat.js.map +1 -0
  596. package/dist/src/index.d.ts +81 -0
  597. package/dist/src/index.d.ts.map +1 -0
  598. package/dist/src/index.js +76 -0
  599. package/dist/src/index.js.map +1 -0
  600. package/dist/src/mask/egressGuard.d.ts +54 -0
  601. package/dist/src/mask/egressGuard.d.ts.map +1 -0
  602. package/dist/src/mask/egressGuard.js +67 -0
  603. package/dist/src/mask/egressGuard.js.map +1 -0
  604. package/dist/src/mask/masker.d.ts +76 -0
  605. package/dist/src/mask/masker.d.ts.map +1 -0
  606. package/dist/src/mask/masker.js +201 -0
  607. package/dist/src/mask/masker.js.map +1 -0
  608. package/dist/src/mask/restorer.d.ts +96 -0
  609. package/dist/src/mask/restorer.d.ts.map +1 -0
  610. package/dist/src/mask/restorer.js +263 -0
  611. package/dist/src/mask/restorer.js.map +1 -0
  612. package/dist/src/mask/surrogatePools.d.ts +33 -0
  613. package/dist/src/mask/surrogatePools.d.ts.map +1 -0
  614. package/dist/src/mask/surrogatePools.js +81 -0
  615. package/dist/src/mask/surrogatePools.js.map +1 -0
  616. package/dist/src/mask/surrogates.d.ts +45 -0
  617. package/dist/src/mask/surrogates.d.ts.map +1 -0
  618. package/dist/src/mask/surrogates.js +241 -0
  619. package/dist/src/mask/surrogates.js.map +1 -0
  620. package/dist/src/mask/vault.d.ts +76 -0
  621. package/dist/src/mask/vault.d.ts.map +1 -0
  622. package/dist/src/mask/vault.js +141 -0
  623. package/dist/src/mask/vault.js.map +1 -0
  624. package/dist/src/ner/align.d.ts +36 -0
  625. package/dist/src/ner/align.d.ts.map +1 -0
  626. package/dist/src/ner/align.js +73 -0
  627. package/dist/src/ner/align.js.map +1 -0
  628. package/dist/src/ner/chunk.d.ts +27 -0
  629. package/dist/src/ner/chunk.d.ts.map +1 -0
  630. package/dist/src/ner/chunk.js +55 -0
  631. package/dist/src/ner/chunk.js.map +1 -0
  632. package/dist/src/ner/chunkCache.d.ts +63 -0
  633. package/dist/src/ner/chunkCache.d.ts.map +1 -0
  634. package/dist/src/ner/chunkCache.js +99 -0
  635. package/dist/src/ner/chunkCache.js.map +1 -0
  636. package/dist/src/ner/engine.d.ts +53 -0
  637. package/dist/src/ner/engine.d.ts.map +1 -0
  638. package/dist/src/ner/engine.js +113 -0
  639. package/dist/src/ner/engine.js.map +1 -0
  640. package/dist/src/ner/merge.d.ts +26 -0
  641. package/dist/src/ner/merge.d.ts.map +1 -0
  642. package/dist/src/ner/merge.js +108 -0
  643. package/dist/src/ner/merge.js.map +1 -0
  644. package/dist/src/ner/runStage2.d.ts +17 -0
  645. package/dist/src/ner/runStage2.d.ts.map +1 -0
  646. package/dist/src/ner/runStage2.js +43 -0
  647. package/dist/src/ner/runStage2.js.map +1 -0
  648. package/dist/src/ner/stage2b.d.ts +59 -0
  649. package/dist/src/ner/stage2b.d.ts.map +1 -0
  650. package/dist/src/ner/stage2b.js +51 -0
  651. package/dist/src/ner/stage2b.js.map +1 -0
  652. package/dist/src/ner/transformersClassifier.d.ts +45 -0
  653. package/dist/src/ner/transformersClassifier.d.ts.map +1 -0
  654. package/dist/src/ner/transformersClassifier.js +40 -0
  655. package/dist/src/ner/transformersClassifier.js.map +1 -0
  656. package/dist/src/ner/types.d.ts +93 -0
  657. package/dist/src/ner/types.d.ts.map +1 -0
  658. package/dist/src/ner/types.js +12 -0
  659. package/dist/src/ner/types.js.map +1 -0
  660. package/dist/src/normalization.d.ts +24 -0
  661. package/dist/src/normalization.d.ts.map +1 -0
  662. package/dist/src/normalization.js +92 -0
  663. package/dist/src/normalization.js.map +1 -0
  664. package/dist/src/offsetMap.d.ts +165 -0
  665. package/dist/src/offsetMap.d.ts.map +1 -0
  666. package/dist/src/offsetMap.js +225 -0
  667. package/dist/src/offsetMap.js.map +1 -0
  668. package/dist/src/pipeline.d.ts +58 -0
  669. package/dist/src/pipeline.d.ts.map +1 -0
  670. package/dist/src/pipeline.js +57 -0
  671. package/dist/src/pipeline.js.map +1 -0
  672. package/dist/src/protect.d.ts +146 -0
  673. package/dist/src/protect.d.ts.map +1 -0
  674. package/dist/src/protect.js +161 -0
  675. package/dist/src/protect.js.map +1 -0
  676. package/dist/src/scripts.d.ts +37 -0
  677. package/dist/src/scripts.d.ts.map +1 -0
  678. package/dist/src/scripts.js +145 -0
  679. package/dist/src/scripts.js.map +1 -0
  680. package/dist/src/transforms/foldDigits.d.ts +49 -0
  681. package/dist/src/transforms/foldDigits.d.ts.map +1 -0
  682. package/dist/src/transforms/foldDigits.js +135 -0
  683. package/dist/src/transforms/foldDigits.js.map +1 -0
  684. package/dist/src/transforms/graphemes.d.ts +6 -0
  685. package/dist/src/transforms/graphemes.d.ts.map +1 -0
  686. package/dist/src/transforms/graphemes.js +6 -0
  687. package/dist/src/transforms/graphemes.js.map +1 -0
  688. package/dist/src/transforms/homoglyphFold.d.ts +5 -0
  689. package/dist/src/transforms/homoglyphFold.d.ts.map +1 -0
  690. package/dist/src/transforms/homoglyphFold.js +214 -0
  691. package/dist/src/transforms/homoglyphFold.js.map +1 -0
  692. package/dist/src/transforms/nfkc.d.ts +20 -0
  693. package/dist/src/transforms/nfkc.d.ts.map +1 -0
  694. package/dist/src/transforms/nfkc.js +48 -0
  695. package/dist/src/transforms/nfkc.js.map +1 -0
  696. package/dist/src/transforms/stripInvisibles.d.ts +37 -0
  697. package/dist/src/transforms/stripInvisibles.d.ts.map +1 -0
  698. package/dist/src/transforms/stripInvisibles.js +151 -0
  699. package/dist/src/transforms/stripInvisibles.js.map +1 -0
  700. package/dist/src/transforms/whitespacePunct.d.ts +21 -0
  701. package/dist/src/transforms/whitespacePunct.d.ts.map +1 -0
  702. package/dist/src/transforms/whitespacePunct.js +100 -0
  703. package/dist/src/transforms/whitespacePunct.js.map +1 -0
  704. package/dist/src/types.d.ts +212 -0
  705. package/dist/src/types.d.ts.map +1 -0
  706. package/dist/src/types.js +14 -0
  707. package/dist/src/types.js.map +1 -0
  708. package/package.json +67 -0
  709. package/src/checksums/aba.ts +45 -0
  710. package/src/checksums/digits.ts +108 -0
  711. package/src/checksums/icao9303.ts +53 -0
  712. package/src/checksums/index.ts +36 -0
  713. package/src/checksums/iso7064.ts +168 -0
  714. package/src/checksums/luhn.ts +66 -0
  715. package/src/checksums/mod97.ts +91 -0
  716. package/src/checksums/verhoeff.ts +84 -0
  717. package/src/checksums/weighted.ts +108 -0
  718. package/src/context/documentProfile.ts +293 -0
  719. package/src/context/negativeRules.ts +765 -0
  720. package/src/context/score.ts +430 -0
  721. package/src/context/structure.ts +611 -0
  722. package/src/context/triggers.ts +266 -0
  723. package/src/context/types.ts +150 -0
  724. package/src/crypto/keccak256.ts +98 -0
  725. package/src/crypto/sha256.ts +76 -0
  726. package/src/detect/AUTHORING.md +50 -0
  727. package/src/detect/detectors/bankcodes/auBsb.ts +36 -0
  728. package/src/detect/detectors/bankcodes/brAgencia.ts +46 -0
  729. package/src/detect/detectors/bankcodes/caTransit.ts +89 -0
  730. package/src/detect/detectors/bankcodes/inIfsc.ts +40 -0
  731. package/src/detect/detectors/bankcodes/index.ts +9 -0
  732. package/src/detect/detectors/bankcodes/ukSortCode.ts +38 -0
  733. package/src/detect/detectors/bankcodes/usRouting.ts +47 -0
  734. package/src/detect/detectors/contact/email.ts +113 -0
  735. package/src/detect/detectors/contact/index.ts +10 -0
  736. package/src/detect/detectors/contact/ipv4.ts +112 -0
  737. package/src/detect/detectors/contact/ipv6.ts +188 -0
  738. package/src/detect/detectors/contact/mac.ts +68 -0
  739. package/src/detect/detectors/contact/phone.ts +81 -0
  740. package/src/detect/detectors/contact/urlCredentials.ts +124 -0
  741. package/src/detect/detectors/crypto/ada.ts +52 -0
  742. package/src/detect/detectors/crypto/btc.ts +77 -0
  743. package/src/detect/detectors/crypto/dot.ts +42 -0
  744. package/src/detect/detectors/crypto/eth.ts +70 -0
  745. package/src/detect/detectors/crypto/index.ts +11 -0
  746. package/src/detect/detectors/crypto/ltc.ts +69 -0
  747. package/src/detect/detectors/crypto/sol.ts +41 -0
  748. package/src/detect/detectors/crypto/trx.ts +35 -0
  749. package/src/detect/detectors/crypto/xmr.ts +54 -0
  750. package/src/detect/detectors/documents/driversLicense.ts +83 -0
  751. package/src/detect/detectors/documents/healthData.ts +88 -0
  752. package/src/detect/detectors/documents/index.ts +8 -0
  753. package/src/detect/detectors/documents/passportMrz.ts +203 -0
  754. package/src/detect/detectors/documents/usNpi.ts +50 -0
  755. package/src/detect/detectors/documents/vin.ts +67 -0
  756. package/src/detect/detectors/financial/creditCard.ts +167 -0
  757. package/src/detect/detectors/financial/iban.ts +82 -0
  758. package/src/detect/detectors/financial/ibanRegistry.ts +112 -0
  759. package/src/detect/detectors/financial/index.ts +6 -0
  760. package/src/detect/detectors/financial/swiftBic.ts +61 -0
  761. package/src/detect/detectors/index.ts +14 -0
  762. package/src/detect/detectors/location/coordinates.ts +84 -0
  763. package/src/detect/detectors/location/index.ts +6 -0
  764. package/src/detect/detectors/location/postalCode.ts +56 -0
  765. package/src/detect/detectors/location/postalRegistry.ts +74 -0
  766. package/src/detect/detectors/location/streetAddress.ts +84 -0
  767. package/src/detect/detectors/natid/africa.ts +108 -0
  768. package/src/detect/detectors/natid/ar.ts +62 -0
  769. package/src/detect/detectors/natid/au.ts +99 -0
  770. package/src/detect/detectors/natid/be.ts +45 -0
  771. package/src/detect/detectors/natid/bg.ts +44 -0
  772. package/src/detect/detectors/natid/br.ts +81 -0
  773. package/src/detect/detectors/natid/ca.ts +40 -0
  774. package/src/detect/detectors/natid/cl.ts +47 -0
  775. package/src/detect/detectors/natid/cn.ts +48 -0
  776. package/src/detect/detectors/natid/co.ts +46 -0
  777. package/src/detect/detectors/natid/cz.ts +44 -0
  778. package/src/detect/detectors/natid/de.ts +75 -0
  779. package/src/detect/detectors/natid/dk.ts +31 -0
  780. package/src/detect/detectors/natid/es.ts +95 -0
  781. package/src/detect/detectors/natid/fi.ts +41 -0
  782. package/src/detect/detectors/natid/fr.ts +63 -0
  783. package/src/detect/detectors/natid/gb.ts +70 -0
  784. package/src/detect/detectors/natid/gr.ts +35 -0
  785. package/src/detect/detectors/natid/gulf.ts +116 -0
  786. package/src/detect/detectors/natid/hk.ts +42 -0
  787. package/src/detect/detectors/natid/hr.ts +32 -0
  788. package/src/detect/detectors/natid/hu.ts +36 -0
  789. package/src/detect/detectors/natid/ie.ts +37 -0
  790. package/src/detect/detectors/natid/il.ts +37 -0
  791. package/src/detect/detectors/natid/in.ts +67 -0
  792. package/src/detect/detectors/natid/index.ts +54 -0
  793. package/src/detect/detectors/natid/is.ts +42 -0
  794. package/src/detect/detectors/natid/it.ts +65 -0
  795. package/src/detect/detectors/natid/jp.ts +48 -0
  796. package/src/detect/detectors/natid/kr.ts +41 -0
  797. package/src/detect/detectors/natid/kz.ts +44 -0
  798. package/src/detect/detectors/natid/mx.ts +83 -0
  799. package/src/detect/detectors/natid/nl.ts +38 -0
  800. package/src/detect/detectors/natid/no.ts +50 -0
  801. package/src/detect/detectors/natid/nz.ts +53 -0
  802. package/src/detect/detectors/natid/pe.ts +28 -0
  803. package/src/detect/detectors/natid/pl.ts +100 -0
  804. package/src/detect/detectors/natid/pt.ts +36 -0
  805. package/src/detect/detectors/natid/ro.ts +47 -0
  806. package/src/detect/detectors/natid/ru.ts +82 -0
  807. package/src/detect/detectors/natid/se.ts +42 -0
  808. package/src/detect/detectors/natid/seasia.ts +174 -0
  809. package/src/detect/detectors/natid/sg.ts +39 -0
  810. package/src/detect/detectors/natid/si.ts +42 -0
  811. package/src/detect/detectors/natid/tr.ts +76 -0
  812. package/src/detect/detectors/natid/tw.ts +41 -0
  813. package/src/detect/detectors/natid/ua.ts +38 -0
  814. package/src/detect/detectors/natid/us.ts +118 -0
  815. package/src/detect/detectors/natid/za.ts +42 -0
  816. package/src/detect/detectors/secrets/apiKey.ts +115 -0
  817. package/src/detect/detectors/secrets/connectionString.ts +71 -0
  818. package/src/detect/detectors/secrets/genericSecret.ts +81 -0
  819. package/src/detect/detectors/secrets/index.ts +8 -0
  820. package/src/detect/detectors/secrets/jwt.ts +101 -0
  821. package/src/detect/detectors/secrets/pemPrivateKey.ts +59 -0
  822. package/src/detect/detectors/vat/euVat.ts +280 -0
  823. package/src/detect/detectors/vat/index.ts +4 -0
  824. package/src/detect/entropy.ts +60 -0
  825. package/src/detect/isoCountries.ts +30 -0
  826. package/src/detect/registry.ts +134 -0
  827. package/src/detect/runner.ts +187 -0
  828. package/src/detect/types.ts +296 -0
  829. package/src/encoding/base58.ts +85 -0
  830. package/src/encoding/base58monero.ts +90 -0
  831. package/src/encoding/bech32.ts +125 -0
  832. package/src/encoding/bytes.ts +48 -0
  833. package/src/entityFamily.ts +70 -0
  834. package/src/entityLabel.ts +56 -0
  835. package/src/entityTypes.ts +107 -0
  836. package/src/exposure/index.ts +189 -0
  837. package/src/fuse/calibrate.ts +224 -0
  838. package/src/fuse/defaultCalibration.ts +71 -0
  839. package/src/fuse/explain.ts +114 -0
  840. package/src/fuse/profiles.ts +187 -0
  841. package/src/fuse/resolve.ts +237 -0
  842. package/src/gazetteer/index.ts +139 -0
  843. package/src/generate/bankcodes.ts +82 -0
  844. package/src/generate/contact.ts +147 -0
  845. package/src/generate/crypto.ts +91 -0
  846. package/src/generate/documents.ts +142 -0
  847. package/src/generate/financial.ts +149 -0
  848. package/src/generate/index.ts +22 -0
  849. package/src/generate/location.ts +80 -0
  850. package/src/generate/natidAmOc.ts +198 -0
  851. package/src/generate/natidAsia.ts +162 -0
  852. package/src/generate/natidCee.ts +196 -0
  853. package/src/generate/natidMeCis.ts +131 -0
  854. package/src/generate/natidWest.ts +208 -0
  855. package/src/generate/prng.ts +17 -0
  856. package/src/generate/secrets.ts +141 -0
  857. package/src/generate/vat.ts +239 -0
  858. package/src/index.ts +186 -0
  859. package/src/mask/egressGuard.ts +88 -0
  860. package/src/mask/masker.ts +276 -0
  861. package/src/mask/restorer.ts +284 -0
  862. package/src/mask/surrogatePools.ts +96 -0
  863. package/src/mask/surrogates.ts +248 -0
  864. package/src/mask/vault.ts +153 -0
  865. package/src/ner/align.ts +86 -0
  866. package/src/ner/chunk.ts +65 -0
  867. package/src/ner/chunkCache.ts +110 -0
  868. package/src/ner/engine.ts +141 -0
  869. package/src/ner/merge.ts +123 -0
  870. package/src/ner/runStage2.ts +51 -0
  871. package/src/ner/stage2b.ts +73 -0
  872. package/src/ner/transformersClassifier.ts +79 -0
  873. package/src/ner/types.ts +99 -0
  874. package/src/normalization.ts +119 -0
  875. package/src/offsetMap.ts +271 -0
  876. package/src/pipeline.ts +96 -0
  877. package/src/protect.ts +284 -0
  878. package/src/scripts.ts +164 -0
  879. package/src/transforms/foldDigits.ts +138 -0
  880. package/src/transforms/graphemes.ts +5 -0
  881. package/src/transforms/homoglyphFold.ts +221 -0
  882. package/src/transforms/nfkc.ts +48 -0
  883. package/src/transforms/stripInvisibles.ts +158 -0
  884. package/src/transforms/whitespacePunct.ts +100 -0
  885. package/src/types.ts +339 -0
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Valid-value generators for the crypto wallet family.
3
+ *
4
+ * Built from the SAME primitives the validators verify with — the
5
+ * primitives are pinned to published vectors in crypto-primitives.test.ts,
6
+ * so this is synthesis, not circularity. Chains with real checksums (BTC,
7
+ * ETH mixed-case, LTC, TRX, XMR) get the mutation half of the property
8
+ * standard; SOL and DOT are structural formats and skip it (stated in the
9
+ * tests).
10
+ */
11
+
12
+ import { keccak256 } from '../crypto/keccak256.js';
13
+ import { base58CheckEncode, base58Encode } from '../encoding/base58.js';
14
+ import { bech32Encode, convertBits } from '../encoding/bech32.js';
15
+ import { moneroBase58Encode } from '../encoding/base58monero.js';
16
+ import { toEip55 } from '../detect/detectors/crypto/eth.js';
17
+ import { mulberry32 } from './prng.js';
18
+
19
+ function randomBytes(rng: () => number, count: number): Uint8Array {
20
+ const out = new Uint8Array(count);
21
+ for (let i = 0; i < count; i++) out[i] = Math.floor(rng() * 256);
22
+ return out;
23
+ }
24
+
25
+ /** A checksummed Bitcoin address: P2PKH, P2SH, segwit v0, or taproot. */
26
+ export function generateValidBtc(seed: number): string {
27
+ const rng = mulberry32(seed);
28
+ const kind = Math.floor(rng() * 4);
29
+ if (kind === 0) return base58CheckEncode(0x00, randomBytes(rng, 20));
30
+ if (kind === 1) return base58CheckEncode(0x05, randomBytes(rng, 20));
31
+ if (kind === 2) {
32
+ const program = randomBytes(rng, rng() < 0.5 ? 20 : 32);
33
+ return bech32Encode('bc', [0, ...convertBits([...program], 8, 5, true)!], 'bech32');
34
+ }
35
+ const program = randomBytes(rng, 32);
36
+ return bech32Encode('bc', [1, ...convertBits([...program], 8, 5, true)!], 'bech32m');
37
+ }
38
+
39
+ /** An EIP-55 checksummed Ethereum address. */
40
+ export function generateValidEth(seed: number): string {
41
+ const rng = mulberry32(seed);
42
+ const hexLower = [...randomBytes(rng, 20)].map((b) => b.toString(16).padStart(2, '0')).join('');
43
+ return `0x${toEip55(hexLower)}`;
44
+ }
45
+
46
+ /** A checksummed Litecoin address (L/M base58check or ltc1 segwit v0). */
47
+ export function generateValidLtc(seed: number): string {
48
+ const rng = mulberry32(seed);
49
+ const kind = Math.floor(rng() * 3);
50
+ if (kind === 0) return base58CheckEncode(0x30, randomBytes(rng, 20));
51
+ if (kind === 1) return base58CheckEncode(0x32, randomBytes(rng, 20));
52
+ const program = randomBytes(rng, rng() < 0.5 ? 20 : 32);
53
+ return bech32Encode('ltc', [0, ...convertBits([...program], 8, 5, true)!], 'bech32');
54
+ }
55
+
56
+ /** A checksummed Tron address. */
57
+ export function generateValidTrx(seed: number): string {
58
+ const rng = mulberry32(seed);
59
+ return base58CheckEncode(0x41, randomBytes(rng, 20));
60
+ }
61
+
62
+ /** A checksummed Monero address (standard or subaddress). */
63
+ export function generateValidXmr(seed: number): string {
64
+ const rng = mulberry32(seed);
65
+ const network = rng() < 0.5 ? 0x12 : 0x2a;
66
+ const body = Uint8Array.from([network, ...randomBytes(rng, 64)]);
67
+ const checksum = keccak256(body).slice(0, 4);
68
+ return moneroBase58Encode(Uint8Array.from([...body, ...checksum]));
69
+ }
70
+
71
+ /** A structurally valid Solana address (32-byte key; no checksum exists). */
72
+ export function generateValidSol(seed: number): string {
73
+ const rng = mulberry32(seed);
74
+ const bytes = randomBytes(rng, 32);
75
+ if (bytes.every((b) => b === 0)) bytes[0] = 1; // avoid the system program
76
+ return base58Encode(bytes);
77
+ }
78
+
79
+ /** A checksummed Cardano Shelley address. */
80
+ export function generateValidAda(seed: number): string {
81
+ const rng = mulberry32(seed);
82
+ // 57 payload bytes ≈ a real Shelley base address envelope.
83
+ const data = convertBits([...randomBytes(rng, 57)], 8, 5, true)!;
84
+ return bech32Encode('addr', data, 'bech32');
85
+ }
86
+
87
+ /** A structurally valid Polkadot SS58 envelope (checksum bytes arbitrary). */
88
+ export function generateValidDot(seed: number): string {
89
+ const rng = mulberry32(seed);
90
+ return base58Encode(Uint8Array.from([0x00, ...randomBytes(rng, 34)]));
91
+ }
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Valid-value generators for the documents & health family.
3
+ *
4
+ * The MRZ generator is the important one: it assembles a TD3 (or TD1) zone
5
+ * and computes every ICAO check digit with the shared library, exactly the
6
+ * way M3's corpus generator will synthesize labeled passports. MRZ, VIN,
7
+ * NPI and SNOMED carry real checksums → full mutation properties. UK DVLA
8
+ * and lab results are structural.
9
+ */
10
+
11
+ import { mrzCheckDigit } from '../checksums/index.js';
12
+ import { luhnCheckDigit, verhoeffCheckDigit } from '../checksums/index.js';
13
+ import { vinCheckChar } from '../detect/detectors/documents/vin.js';
14
+ import { mulberry32 } from './prng.js';
15
+
16
+ function pick<T>(rng: () => number, items: readonly T[]): T {
17
+ return items[Math.floor(rng() * items.length)]!;
18
+ }
19
+
20
+ function int(rng: () => number, min: number, max: number): number {
21
+ return min + Math.floor(rng() * (max - min + 1));
22
+ }
23
+
24
+ const AZ = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
25
+ const DIGITS = '0123456789';
26
+
27
+ function chars(rng: () => number, alphabet: string, n: number): string {
28
+ let out = '';
29
+ for (let i = 0; i < n; i++) out += alphabet[Math.floor(rng() * alphabet.length)]!;
30
+ return out;
31
+ }
32
+
33
+ const STATES = ['UTO', 'DEU', 'FRA', 'TUR', 'JPN', 'BRA', 'IND', 'USA', 'GBR', 'NLD'];
34
+ const SURNAMES = ['ERIKSSON', 'YILMAZ', 'TANAKA', 'SILVA', 'MUELLER', 'GARCIA', 'KOWALSKI'];
35
+ const GIVEN = ['ANNA', 'MEHMET', 'YUKI', 'LUCIA', 'HANS', 'PRIYA', 'JAN'];
36
+
37
+ function mrzDate(rng: () => number, startYear: number, endYear: number): string {
38
+ const y = int(rng, startYear, endYear) % 100;
39
+ const m = int(rng, 1, 12);
40
+ const d = int(rng, 1, 28);
41
+ return `${String(y).padStart(2, '0')}${String(m).padStart(2, '0')}${String(d).padStart(2, '0')}`;
42
+ }
43
+
44
+ const pad = (s: string, n: number): string => (s + '<'.repeat(n)).slice(0, n);
45
+
46
+ /** A TD3 passport MRZ (two 44-char lines) with every check digit correct. */
47
+ export function generateValidTd3(seed: number): string {
48
+ const rng = mulberry32(seed);
49
+ const state = pick(rng, STATES);
50
+ const name = pad(`${pick(rng, SURNAMES)}<<${pick(rng, GIVEN)}`, 39);
51
+ const line1 = `P<${state}${name}`;
52
+
53
+ const docNumber = pad(chars(rng, AZ, 2) + chars(rng, DIGITS, 7), 9);
54
+ const docCheck = mrzCheckDigit(docNumber)!;
55
+ const nationality = state;
56
+ const birth = mrzDate(rng, 1950, 2005);
57
+ const birthCheck = mrzCheckDigit(birth)!;
58
+ const sex = pick(rng, ['M', 'F', '<']);
59
+ const expiry = mrzDate(rng, 2025, 2035);
60
+ const expiryCheck = mrzCheckDigit(expiry)!;
61
+ const optional = pad('', 14);
62
+ const optionalCheck = mrzCheckDigit(optional)!;
63
+ const composite = `${docNumber}${docCheck}${birth}${birthCheck}${expiry}${expiryCheck}${optional}${optionalCheck}`;
64
+ const compositeCheck = mrzCheckDigit(composite)!;
65
+
66
+ const line2 = `${docNumber}${docCheck}${nationality}${birth}${birthCheck}${sex}${expiry}${expiryCheck}${optional}${optionalCheck}${compositeCheck}`;
67
+ return `${line1}\n${line2}`;
68
+ }
69
+
70
+ /** A TD1 identity-card MRZ (three 30-char lines), all check digits correct. */
71
+ export function generateValidTd1(seed: number): string {
72
+ const rng = mulberry32(seed);
73
+ const state = pick(rng, STATES);
74
+
75
+ const docNumber = pad(chars(rng, AZ, 1) + chars(rng, DIGITS, 8), 9);
76
+ const docCheck = mrzCheckDigit(docNumber)!;
77
+ const optional1 = pad('', 15);
78
+ const line1 = `I<${state}${docNumber}${docCheck}${optional1}`;
79
+
80
+ const birth = mrzDate(rng, 1950, 2005);
81
+ const birthCheck = mrzCheckDigit(birth)!;
82
+ const sex = pick(rng, ['M', 'F']);
83
+ const expiry = mrzDate(rng, 2025, 2035);
84
+ const expiryCheck = mrzCheckDigit(expiry)!;
85
+ const nationality = state;
86
+ const optional2 = pad('', 11);
87
+ const composite = `${docNumber}${docCheck}${optional1}${birth}${birthCheck}${expiry}${expiryCheck}${optional2}`;
88
+ const compositeCheck = mrzCheckDigit(composite)!;
89
+ const line2 = `${birth}${birthCheck}${sex}${expiry}${expiryCheck}${nationality}${optional2}${compositeCheck}`;
90
+
91
+ const name = pad(`${pick(rng, SURNAMES)}<<${pick(rng, GIVEN)}`, 30);
92
+ return `${line1}\n${line2}\n${name}`;
93
+ }
94
+
95
+ /** A VIN whose ISO 3779 check digit is correct. */
96
+ export function generateValidVin(seed: number): string {
97
+ const rng = mulberry32(seed);
98
+ const alphabet = 'ABCDEFGHJKLMNPRSTUVWXYZ0123456789';
99
+ let vin = chars(rng, alphabet, 8) + '0' + chars(rng, alphabet, 8);
100
+ const check = vinCheckChar(vin)!;
101
+ vin = vin.slice(0, 8) + check + vin.slice(9);
102
+ return vin;
103
+ }
104
+
105
+ /** An NPI with the 80840-prefixed Luhn check digit correct. */
106
+ export function generateValidNpi(seed: number): string {
107
+ const rng = mulberry32(seed);
108
+ const payload = pick(rng, ['1', '2']) + chars(rng, DIGITS, 8);
109
+ const check = luhnCheckDigit(`80840${payload}`)!;
110
+ return `${payload}${check}`;
111
+ }
112
+
113
+ /** A UK DVLA licence number obeying the date rules. */
114
+ export function generateValidDvla(seed: number): string {
115
+ const rng = mulberry32(seed);
116
+ const surname = pad(pick(rng, SURNAMES).slice(0, 5), 5).replace(/</g, '9');
117
+ const decade = String(int(rng, 5, 9));
118
+ const month = int(rng, 1, 12) + (rng() < 0.5 ? 50 : 0);
119
+ const day = int(rng, 1, 28);
120
+ const year = String(int(rng, 0, 9));
121
+ const initials = chars(rng, AZ, 2);
122
+ return `${surname}${decade}${String(month).padStart(2, '0')}${String(day).padStart(2, '0')}${year}${initials}${int(rng, 0, 9)}${chars(rng, AZ, 2)}`;
123
+ }
124
+
125
+ /** A SNOMED SCTID: defined partition pair, closed with Verhoeff. */
126
+ export function generateValidSctid(seed: number): string {
127
+ const rng = mulberry32(seed);
128
+ const body = chars(rng, DIGITS, int(rng, 5, 12));
129
+ const partition = pick(rng, ['00', '01', '10']);
130
+ const payload = `${body}${partition}`;
131
+ return `${payload}${verhoeffCheckDigit(payload)!}`;
132
+ }
133
+
134
+ /** A lab-result phrase: value, unit, bracketed reference range. */
135
+ export function generateValidLabResult(seed: number): string {
136
+ const rng = mulberry32(seed);
137
+ const units = ['mg/dL', 'mmol/L', 'g/dL', 'IU/L', 'ng/mL', '%'];
138
+ const value = (int(rng, 40, 400) / (rng() < 0.5 ? 1 : 10)).toFixed(1);
139
+ const lo = int(rng, 1, 80);
140
+ const hi = lo + int(rng, 5, 120);
141
+ return `${value} ${pick(rng, units)} [${lo}-${hi}]`;
142
+ }
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Valid-value generators for the financial core family.
3
+ *
4
+ * These synthesize values with the SAME checksum library the validators
5
+ * verify with (`luhnCheckDigit`, `ibanCheckDigits`) — which is not circular:
6
+ * the library is tested independently against published vectors, and this is
7
+ * exactly how M3's corpus generator and M4's surrogate substitution will
8
+ * create valid identifiers.
9
+ *
10
+ * IBAN and credit cards carry real checksums, so their property tests run
11
+ * the full standard including the single-character-mutation half. BIC has no
12
+ * checksum; its property omits mutation (see the BIC section).
13
+ */
14
+
15
+ import { ibanCheckDigits, luhnCheckDigit } from '../checksums/index.js';
16
+ import { IBAN_REGISTRY } from '../detect/detectors/financial/ibanRegistry.js';
17
+ import { ISO_COUNTRY_CODES } from '../detect/isoCountries.js';
18
+ import { mulberry32 } from './prng.js';
19
+
20
+ function pick<T>(rng: () => number, items: readonly T[]): T {
21
+ return items[Math.floor(rng() * items.length)]!;
22
+ }
23
+
24
+ const DIGITS = '0123456789';
25
+ const LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
26
+ const ALNUM = DIGITS + LETTERS;
27
+
28
+ function chars(rng: () => number, alphabet: string, count: number): string {
29
+ let out = '';
30
+ for (let i = 0; i < count; i++) out += alphabet[Math.floor(rng() * alphabet.length)]!;
31
+ return out;
32
+ }
33
+
34
+ // ─────────────────────────────────────────────────────────────────────────────
35
+ // IBAN
36
+ // ─────────────────────────────────────────────────────────────────────────────
37
+
38
+ const IBAN_COUNTRIES = [...IBAN_REGISTRY.keys()];
39
+
40
+ /** A structurally valid, mod-97-closed IBAN for a random registry country. */
41
+ export function generateValidIban(seed: number): string {
42
+ const rng = mulberry32(seed);
43
+ const country = pick(rng, IBAN_COUNTRIES);
44
+ const spec = IBAN_REGISTRY.get(country)!;
45
+ let bban = '';
46
+ for (const seg of spec.segments) {
47
+ const alphabet = seg.type === 'n' ? DIGITS : seg.type === 'a' ? LETTERS : ALNUM;
48
+ bban += chars(rng, alphabet, seg.length);
49
+ }
50
+ const check = ibanCheckDigits(country, bban)!;
51
+ return `${country}${check}${bban}`;
52
+ }
53
+
54
+ /** A valid IBAN for a SPECIFIC country (SPEC.md: substitute same-country). */
55
+ export function generateValidIbanForCountry(country: string, seed: number): string {
56
+ const spec = IBAN_REGISTRY.get(country);
57
+ if (spec === undefined) return generateValidIban(seed);
58
+ const rng = mulberry32(seed);
59
+ let bban = '';
60
+ for (const seg of spec.segments) {
61
+ const alphabet = seg.type === 'n' ? DIGITS : seg.type === 'a' ? LETTERS : ALNUM;
62
+ bban += chars(rng, alphabet, seg.length);
63
+ }
64
+ const check = ibanCheckDigits(country, bban)!;
65
+ return `${country}${check}${bban}`;
66
+ }
67
+
68
+ /** The same IBAN in conventional four-character display groups. */
69
+ export function groupIban(iban: string): string {
70
+ return iban.replace(/(.{4})/g, '$1 ').trim();
71
+ }
72
+
73
+ // ─────────────────────────────────────────────────────────────────────────────
74
+ // Credit cards
75
+ // ─────────────────────────────────────────────────────────────────────────────
76
+
77
+ /** Issuer prefix + PAN length pairs; every entry resolves to that issuer. */
78
+ const CARD_SHAPES: readonly (readonly [string, number])[] = [
79
+ ['4539', 16], // visa (avoids the 4xxxxx Elo overlaps)
80
+ ['4716', 13], // visa short form
81
+ ['5274', 16], // mastercard
82
+ ['2223', 16], // mastercard 2-series
83
+ ['371', 15], // amex
84
+ ['6011', 16], // discover
85
+ ['3540', 16], // jcb
86
+ ['36', 14], // diners
87
+ ['9792', 16], // troy
88
+ ['2201', 16], // mir
89
+ ['6250', 16], // unionpay
90
+ ['6521', 16], // rupay
91
+ ['509001', 16], // elo
92
+ ['506110', 16], // verve
93
+ ['6759', 12], // maestro
94
+ ];
95
+
96
+ /** A Luhn-closed PAN with a recognized issuer prefix. */
97
+ export function generateValidCard(seed: number): string {
98
+ const rng = mulberry32(seed);
99
+ const [prefix, length] = pick(rng, CARD_SHAPES);
100
+ const payload = prefix + chars(rng, DIGITS, length - prefix.length - 1);
101
+ return `${payload}${luhnCheckDigit(payload)!}`;
102
+ }
103
+
104
+ /** Prefix + length per issuer, for same-issuer credit-card surrogates. */
105
+ const ISSUER_SHAPES: Readonly<Record<string, readonly [string, number]>> = {
106
+ visa: ['4539', 16],
107
+ mastercard: ['5274', 16],
108
+ amex: ['371', 15],
109
+ discover: ['6011', 16],
110
+ jcb: ['3540', 16],
111
+ diners: ['36', 14],
112
+ unionpay: ['6250', 16],
113
+ maestro: ['6759', 16],
114
+ troy: ['9792', 16],
115
+ mir: ['2201', 16],
116
+ rupay: ['6521', 16],
117
+ elo: ['509001', 16],
118
+ verve: ['506110', 16],
119
+ };
120
+
121
+ /** A Luhn-valid PAN for a SPECIFIC issuer (SPEC.md: substitute same issuer). */
122
+ export function generateValidCardForIssuer(issuer: string, seed: number): string {
123
+ const shape = ISSUER_SHAPES[issuer];
124
+ if (shape === undefined) return generateValidCard(seed);
125
+ const rng = mulberry32(seed);
126
+ const [prefix, length] = shape;
127
+ const payload = prefix + chars(rng, DIGITS, length - prefix.length - 1);
128
+ return `${payload}${luhnCheckDigit(payload)!}`;
129
+ }
130
+
131
+ // ─────────────────────────────────────────────────────────────────────────────
132
+ // SWIFT BIC
133
+ // ─────────────────────────────────────────────────────────────────────────────
134
+
135
+ const BIC_COUNTRIES = [...ISO_COUNTRY_CODES].filter((c) => c !== 'EU');
136
+ /** Location alphabet obeying ISO 9362: first char never 0/1, second never 0
137
+ * (0 designates a test BIC, generated separately). */
138
+ const LOC_FIRST = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
139
+ const LOC_SECOND = 'ABCDEFGHJKLMNPQRSTUVWXYZ123456789';
140
+
141
+ /** A structurally valid production (non-test) BIC. */
142
+ export function generateValidBic(seed: number): string {
143
+ const rng = mulberry32(seed);
144
+ const bank = chars(rng, LETTERS, 4);
145
+ const country = pick(rng, BIC_COUNTRIES);
146
+ const location = chars(rng, LOC_FIRST, 1) + chars(rng, LOC_SECOND, 1);
147
+ const branch = rng() < 0.5 ? chars(rng, ALNUM, 3) : '';
148
+ return `${bank}${country}${location}${branch}`;
149
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Deterministic valid-value generators — one per Stage 1 detector scheme.
3
+ *
4
+ * Public API: the eval package builds its labeled corpus from these, and
5
+ * M4's format-preserving substitution synthesizes checksum-valid surrogates
6
+ * with them. Each generator is seeded (mulberry32) and never calls the
7
+ * validator it feeds.
8
+ */
9
+ export { mulberry32 } from './prng.js';
10
+ export * from './bankcodes.js';
11
+ export * from './contact.js';
12
+ export * from './crypto.js';
13
+ export * from './documents.js';
14
+ export * from './financial.js';
15
+ export * from './location.js';
16
+ export * from './natidAmOc.js';
17
+ export * from './natidAsia.js';
18
+ export * from './natidCee.js';
19
+ export * from './natidMeCis.js';
20
+ export * from './natidWest.js';
21
+ export * from './secrets.js';
22
+ export * from './vat.js';
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Valid-value generators for the location family. All three formats are
3
+ * structural (no checksums), so the properties assert validation without
4
+ * the mutation half — stated in the tests.
5
+ */
6
+
7
+ import { mulberry32 } from './prng.js';
8
+
9
+ function pick<T>(rng: () => number, items: readonly T[]): T {
10
+ return items[Math.floor(rng() * items.length)]!;
11
+ }
12
+
13
+ function int(rng: () => number, min: number, max: number): number {
14
+ return min + Math.floor(rng() * (max - min + 1));
15
+ }
16
+
17
+ function digits(rng: () => number, n: number): string {
18
+ let out = '';
19
+ for (let i = 0; i < n; i++) out += String(int(rng, 0, 9));
20
+ return out;
21
+ }
22
+
23
+ /** A postal code satisfying at least one country's format. */
24
+ export function generateValidPostal(seed: number): string {
25
+ const rng = mulberry32(seed);
26
+ const CA_FIRST = 'ABCEGHJKLMNPRSTVXY';
27
+ const CA_REST = 'ABCEGHJKLMNPRSTVWXYZ';
28
+ const shapes: readonly (() => string)[] = [
29
+ () => `${digits(rng, 5)}`, // DE/FR/US/TR…
30
+ () => `${digits(rng, 5)}-${digits(rng, 4)}`, // US ZIP+4
31
+ () => `${digits(rng, 2)}-${digits(rng, 3)}`, // PL
32
+ () => `${digits(rng, 4)}-${digits(rng, 3)}`, // PT
33
+ () => `${digits(rng, 5)}-${digits(rng, 3)}`, // BR
34
+ () => `${digits(rng, 3)}-${digits(rng, 4)}`, // JP
35
+ () => `${digits(rng, 4)} ${pick(rng, ['AB', 'CD', 'XZ', 'JK'])}`, // NL
36
+ () => `SW1A 1AA`, // GB, fixed shape
37
+ () => `${pick(rng, [...CA_FIRST])}${int(rng, 0, 9)}${pick(rng, [...CA_REST])} ${int(rng, 0, 9)}${pick(rng, [...CA_REST])}${int(rng, 0, 9)}`, // CA
38
+ () => `${digits(rng, 6)}`, // CN/IN/SG/RU
39
+ ];
40
+ const value = pick(rng, shapes)();
41
+ // The 4-digit shape can collide with the year guard; regenerate as 5-digit.
42
+ if (/^\d{4}$/.test(value)) return `${value}0`;
43
+ return value;
44
+ }
45
+
46
+ const WESTERN = ['Baker Street', 'Pennsylvania Avenue', 'Abbey Road', 'Elm Drive'];
47
+ const GERMANIC = ['Hauptstraße', 'Bahnhofstraße', 'Prinsengracht', 'Ringallee'];
48
+ const ROMANCE_T = ['rue', 'avenida', 'via', 'calle'];
49
+ const ROMANCE_N = ['de la Paix', 'Mayor', 'Roma', 'del Sol'];
50
+ const TURKISH_N = ['Atatürk', 'Cumhuriyet', 'İstiklal'];
51
+ const TURKISH_T = ['Caddesi', 'Sokak', 'Bulvarı'];
52
+
53
+ /** A street address in one of the six conventions. */
54
+ export function generateValidStreet(seed: number): string {
55
+ const rng = mulberry32(seed);
56
+ const shapes: readonly (() => string)[] = [
57
+ () => `${int(rng, 1, 9999)} ${pick(rng, WESTERN)}`,
58
+ () => `${int(rng, 1, 999)} ${pick(rng, ROMANCE_T)} ${pick(rng, ROMANCE_N)}`,
59
+ () => `${pick(rng, GERMANIC)} ${int(rng, 1, 200)}`,
60
+ () => `${pick(rng, TURKISH_N)} ${pick(rng, TURKISH_T)} No: ${int(rng, 1, 200)}`,
61
+ () => `中山路${int(rng, 1, 999)}号`,
62
+ () => `銀座${int(rng, 1, 9)}丁目${int(rng, 1, 20)}番${int(rng, 1, 20)}号`,
63
+ () => `세종대로 ${int(rng, 1, 500)}`,
64
+ () => `شارع الملك فهد ${int(rng, 1, 200)}`,
65
+ ];
66
+ return pick(rng, shapes)();
67
+ }
68
+
69
+ /** An in-range coordinate pair, decimal or DMS. */
70
+ export function generateValidCoordinates(seed: number): string {
71
+ const rng = mulberry32(seed);
72
+ const lat = (rng() * 178 - 89).toFixed(int(rng, 3, 6));
73
+ const lon = (rng() * 358 - 179).toFixed(int(rng, 3, 6));
74
+ if (rng() < 0.6) {
75
+ return `${lat}, ${lon}`;
76
+ }
77
+ const latD = int(rng, 0, 89);
78
+ const lonD = int(rng, 0, 179);
79
+ return `${latD}°${int(rng, 0, 59)}′${int(rng, 0, 59)}″${pick(rng, ['N', 'S'])} ${lonD}°${int(rng, 0, 59)}′${int(rng, 0, 59)}″${pick(rng, ['E', 'W'])}`;
80
+ }
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Valid-value generators for W2e national identifiers (Oceania, Americas,
3
+ * Africa).
4
+ */
5
+
6
+ import { luhnCheckDigit, toDigits, weightedSum, weightedMod, weightedModBy } from '../checksums/index.js';
7
+ import { curpCheckDigit } from '../detect/detectors/natid/mx.js';
8
+ import { rutCheckChar } from '../detect/detectors/natid/cl.js';
9
+ import { nitCheckDigit } from '../detect/detectors/natid/co.js';
10
+ import { mulberry32 } from './prng.js';
11
+
12
+ function pick<T>(rng: () => number, items: readonly T[]): T {
13
+ return items[Math.floor(rng() * items.length)]!;
14
+ }
15
+
16
+ function int(rng: () => number, min: number, max: number): number {
17
+ return min + Math.floor(rng() * (max - min + 1));
18
+ }
19
+
20
+ function digits(rng: () => number, n: number): string {
21
+ let out = '';
22
+ for (let i = 0; i < n; i++) out += String(int(rng, 0, 9));
23
+ return out;
24
+ }
25
+
26
+ const pad2 = (n: number): string => String(n).padStart(2, '0');
27
+
28
+ export function generateValidTfn(seed: number): string {
29
+ const rng = mulberry32(seed);
30
+ for (;;) {
31
+ // Solve the last digit so the weighted sum is divisible by 11.
32
+ const eight = digits(rng, 8);
33
+ const partial = weightedSum(toDigits(eight)!, [1, 4, 3, 7, 5, 8, 6, 9])!;
34
+ // Last weight is 10: need (partial + 10·d) ≡ 0 (mod 11) → d ≡ partial·(10⁻¹≡10)… iterate.
35
+ for (let d = 0; d <= 9; d++) {
36
+ if ((partial + 10 * d) % 11 === 0) return `${eight}${d}`;
37
+ }
38
+ // No digit closes it (happens when partial ≡ 1 mod 11 needs d=10): redraw.
39
+ }
40
+ }
41
+
42
+ export function generateValidMedicare(seed: number): string {
43
+ const rng = mulberry32(seed);
44
+ const eight = String(int(rng, 2, 6)) + digits(rng, 7);
45
+ const check = weightedMod(toDigits(eight)!, [1, 3, 7, 9, 1, 3, 7, 9], 10)!;
46
+ return `${eight}${check}${int(rng, 1, 9)}`;
47
+ }
48
+
49
+ export function generateValidAbn(seed: number): string {
50
+ const rng = mulberry32(seed);
51
+ for (;;) {
52
+ const body = String(int(rng, 1, 9)) + digits(rng, 9);
53
+ const adjusted = [Number(body[0]) - 1, ...toDigits(body.slice(1))!];
54
+ const partial = weightedSum(adjusted, [10, 1, 3, 5, 7, 9, 11, 13, 15, 17])!;
55
+ for (let d = 0; d <= 9; d++) {
56
+ if ((partial + 19 * d) % 89 === 0) return `${body}${d}`;
57
+ }
58
+ }
59
+ }
60
+
61
+ export function generateValidIrd(seed: number): string {
62
+ const rng = mulberry32(seed);
63
+ for (;;) {
64
+ const value = int(rng, 10_000_000, 150_000_000);
65
+ const padded = String(value).padStart(9, '0');
66
+ const payload = toDigits(padded.slice(0, 8))!;
67
+ const r = weightedMod(payload, [3, 2, 7, 6, 5, 4, 3, 2], 11)!;
68
+ let check = r === 0 ? 0 : 11 - r;
69
+ if (check === 10) {
70
+ const r2 = weightedMod(payload, [7, 4, 3, 2, 5, 2, 7, 6], 11)!;
71
+ check = r2 === 0 ? 0 : 11 - r2;
72
+ if (check === 10) continue;
73
+ }
74
+ if (check !== Number(padded[8])) continue; // draw a value whose real check matches
75
+ return String(value);
76
+ }
77
+ }
78
+
79
+ function brCheck(ds: readonly number[], start: number): number {
80
+ const remainder = weightedModBy(ds, (i) => start - i, 11)!;
81
+ return remainder < 2 ? 0 : 11 - remainder;
82
+ }
83
+
84
+ export function generateValidCpf(seed: number): string {
85
+ const rng = mulberry32(seed);
86
+ for (;;) {
87
+ const nine = digits(rng, 9);
88
+ if (/^(.)\1+$/.test(nine)) continue;
89
+ const d = toDigits(nine)!;
90
+ const c1 = brCheck(d, 10);
91
+ const c2 = brCheck([...d, c1], 11);
92
+ return `${nine}${c1}${c2}`;
93
+ }
94
+ }
95
+
96
+ export function generateValidCnpj(seed: number): string {
97
+ const rng = mulberry32(seed);
98
+ const twelve = digits(rng, 8) + '0001'; // conventional head-office suffix
99
+ const d = toDigits(twelve)!;
100
+ const w1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
101
+ const w2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
102
+ const sum1 = d.reduce((acc, digit, i) => acc + digit * w1[i]!, 0);
103
+ const c1 = sum1 % 11 < 2 ? 0 : 11 - (sum1 % 11);
104
+ const with13 = [...d, c1];
105
+ const sum2 = with13.reduce((acc, digit, i) => acc + digit * w2[i]!, 0);
106
+ const c2 = sum2 % 11 < 2 ? 0 : 11 - (sum2 % 11);
107
+ return `${twelve}${c1}${c2}`;
108
+ }
109
+
110
+ const CURP_CONSONANTS = 'BCDFGHJKLMNPQRSTVWXYZ';
111
+ const MX_STATE_POOL = ['DF', 'JC', 'NL', 'MC', 'VZ', 'GT', 'PL', 'SR', 'NE'];
112
+
113
+ export function generateValidCurp(seed: number): string {
114
+ const rng = mulberry32(seed);
115
+ const vowels = 'AEIOU';
116
+ const seventeen =
117
+ pick(rng, [...CURP_CONSONANTS]) + pick(rng, [...vowels]) + pick(rng, [...CURP_CONSONANTS]) + pick(rng, [...CURP_CONSONANTS]) +
118
+ pad2(int(rng, 0, 99)) + pad2(int(rng, 1, 12)) + pad2(int(rng, 1, 28)) +
119
+ pick(rng, ['H', 'M']) + pick(rng, MX_STATE_POOL) +
120
+ pick(rng, [...CURP_CONSONANTS]) + pick(rng, [...CURP_CONSONANTS]) + pick(rng, [...CURP_CONSONANTS]) +
121
+ pick(rng, [...'0123456789A']);
122
+ return `${seventeen}${curpCheckDigit(seventeen)!}`;
123
+ }
124
+
125
+ export function generateValidRfc(seed: number): string {
126
+ const rng = mulberry32(seed);
127
+ const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
128
+ let s = '';
129
+ for (let i = 0; i < 4; i++) s += letters[int(rng, 0, 25)];
130
+ s += pad2(int(rng, 0, 99)) + pad2(int(rng, 1, 12)) + pad2(int(rng, 1, 28));
131
+ for (let i = 0; i < 3; i++) s += pick(rng, [...'ABCDEFGHIJKLMNPQRSTUVWXYZ123456789']);
132
+ return s;
133
+ }
134
+
135
+ const CUIT_PREFIX_POOL = ['20', '23', '24', '27', '30', '33'];
136
+
137
+ export function generateValidCuit(seed: number): string {
138
+ const rng = mulberry32(seed);
139
+ for (;;) {
140
+ const ten = pick(rng, CUIT_PREFIX_POOL) + digits(rng, 8);
141
+ const remainder = weightedMod(toDigits(ten)!, [5, 4, 3, 2, 7, 6, 5, 4, 3, 2], 11)!;
142
+ let check = 11 - remainder;
143
+ if (check === 11) check = 0;
144
+ if (check === 10) continue;
145
+ return `${ten.slice(0, 2)}-${ten.slice(2)}-${check}`;
146
+ }
147
+ }
148
+
149
+ export function generateValidRut(seed: number): string {
150
+ const rng = mulberry32(seed);
151
+ const body = String(int(rng, 1_000_000, 25_999_999));
152
+ const check = rutCheckChar(body)!;
153
+ const dotted = body.replace(/\B(?=(\d{3})+(?!\d))/g, '.');
154
+ return `${dotted}-${check}`;
155
+ }
156
+
157
+ export function generateValidNit(seed: number): string {
158
+ const rng = mulberry32(seed);
159
+ const body = String(int(rng, 10_000_000, 999_999_999));
160
+ return `${body}-${nitCheckDigit(body)!}`;
161
+ }
162
+
163
+ export function generateValidPeDni(seed: number): string {
164
+ const rng = mulberry32(seed);
165
+ return `DNI ${digits(rng, 8)}`;
166
+ }
167
+
168
+ export function generateValidZaId(seed: number): string {
169
+ const rng = mulberry32(seed);
170
+ const payload =
171
+ pad2(int(rng, 0, 99)) + pad2(int(rng, 1, 12)) + pad2(int(rng, 1, 28)) +
172
+ String(int(rng, 0, 9999)).padStart(4, '0') + String(int(rng, 0, 2)) + String(int(rng, 0, 9));
173
+ return `${payload}${luhnCheckDigit(payload)!}`;
174
+ }
175
+
176
+ export function generateValidNin(seed: number): string {
177
+ const rng = mulberry32(seed);
178
+ return `NIN: ${digits(rng, 11)}`;
179
+ }
180
+
181
+ export function generateValidKeId(seed: number): string {
182
+ const rng = mulberry32(seed);
183
+ return `ID No. ${digits(rng, 8)}`;
184
+ }
185
+
186
+ const EG_GOV_POOL = ['01', '02', '12', '21', '31', '88'];
187
+
188
+ export function generateValidEgId(seed: number): string {
189
+ const rng = mulberry32(seed);
190
+ return `${pick(rng, ['2', '3'])}${pad2(int(rng, 0, 99))}${pad2(int(rng, 1, 12))}${pad2(int(rng, 1, 28))}${pick(rng, EG_GOV_POOL)}${digits(rng, 4)}${int(rng, 0, 9)}`;
191
+ }
192
+
193
+ export function generateValidCnie(seed: number): string {
194
+ const rng = mulberry32(seed);
195
+ const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
196
+ const prefix = rng() < 0.5 ? letters[int(rng, 0, 25)]! : letters[int(rng, 0, 25)]! + letters[int(rng, 0, 25)]!;
197
+ return `CNIE: ${prefix}${digits(rng, 6)}`;
198
+ }