@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.
- package/CHANGELOG.md +117 -0
- package/LICENSE +21 -0
- package/README.md +319 -0
- package/dist/src/checksums/aba.d.ts +25 -0
- package/dist/src/checksums/aba.d.ts.map +1 -0
- package/dist/src/checksums/aba.js +47 -0
- package/dist/src/checksums/aba.js.map +1 -0
- package/dist/src/checksums/digits.d.ts +55 -0
- package/dist/src/checksums/digits.d.ts.map +1 -0
- package/dist/src/checksums/digits.js +114 -0
- package/dist/src/checksums/digits.js.map +1 -0
- package/dist/src/checksums/icao9303.d.ts +29 -0
- package/dist/src/checksums/icao9303.d.ts.map +1 -0
- package/dist/src/checksums/icao9303.js +56 -0
- package/dist/src/checksums/icao9303.js.map +1 -0
- package/dist/src/checksums/index.d.ts +21 -0
- package/dist/src/checksums/index.d.ts.map +1 -0
- package/dist/src/checksums/index.js +21 -0
- package/dist/src/checksums/index.js.map +1 -0
- package/dist/src/checksums/iso7064.d.ts +67 -0
- package/dist/src/checksums/iso7064.d.ts.map +1 -0
- package/dist/src/checksums/iso7064.js +159 -0
- package/dist/src/checksums/iso7064.js.map +1 -0
- package/dist/src/checksums/luhn.d.ts +32 -0
- package/dist/src/checksums/luhn.d.ts.map +1 -0
- package/dist/src/checksums/luhn.js +66 -0
- package/dist/src/checksums/luhn.js.map +1 -0
- package/dist/src/checksums/mod97.d.ts +55 -0
- package/dist/src/checksums/mod97.d.ts.map +1 -0
- package/dist/src/checksums/mod97.js +94 -0
- package/dist/src/checksums/mod97.js.map +1 -0
- package/dist/src/checksums/verhoeff.d.ts +28 -0
- package/dist/src/checksums/verhoeff.d.ts.map +1 -0
- package/dist/src/checksums/verhoeff.js +80 -0
- package/dist/src/checksums/verhoeff.js.map +1 -0
- package/dist/src/checksums/weighted.d.ts +64 -0
- package/dist/src/checksums/weighted.d.ts.map +1 -0
- package/dist/src/checksums/weighted.js +97 -0
- package/dist/src/checksums/weighted.js.map +1 -0
- package/dist/src/context/documentProfile.d.ts +34 -0
- package/dist/src/context/documentProfile.d.ts.map +1 -0
- package/dist/src/context/documentProfile.js +253 -0
- package/dist/src/context/documentProfile.js.map +1 -0
- package/dist/src/context/negativeRules.d.ts +60 -0
- package/dist/src/context/negativeRules.d.ts.map +1 -0
- package/dist/src/context/negativeRules.js +696 -0
- package/dist/src/context/negativeRules.js.map +1 -0
- package/dist/src/context/score.d.ts +52 -0
- package/dist/src/context/score.d.ts.map +1 -0
- package/dist/src/context/score.js +346 -0
- package/dist/src/context/score.js.map +1 -0
- package/dist/src/context/structure.d.ts +46 -0
- package/dist/src/context/structure.d.ts.map +1 -0
- package/dist/src/context/structure.js +528 -0
- package/dist/src/context/structure.js.map +1 -0
- package/dist/src/context/triggers.d.ts +73 -0
- package/dist/src/context/triggers.d.ts.map +1 -0
- package/dist/src/context/triggers.js +172 -0
- package/dist/src/context/triggers.js.map +1 -0
- package/dist/src/context/types.d.ts +137 -0
- package/dist/src/context/types.d.ts.map +1 -0
- package/dist/src/context/types.js +25 -0
- package/dist/src/context/types.js.map +1 -0
- package/dist/src/crypto/keccak256.d.ts +15 -0
- package/dist/src/crypto/keccak256.d.ts.map +1 -0
- package/dist/src/crypto/keccak256.js +89 -0
- package/dist/src/crypto/keccak256.js.map +1 -0
- package/dist/src/crypto/sha256.d.ts +16 -0
- package/dist/src/crypto/sha256.d.ts.map +1 -0
- package/dist/src/crypto/sha256.js +81 -0
- package/dist/src/crypto/sha256.js.map +1 -0
- package/dist/src/detect/detectors/bankcodes/auBsb.d.ts +11 -0
- package/dist/src/detect/detectors/bankcodes/auBsb.d.ts.map +1 -0
- package/dist/src/detect/detectors/bankcodes/auBsb.js +34 -0
- package/dist/src/detect/detectors/bankcodes/auBsb.js.map +1 -0
- package/dist/src/detect/detectors/bankcodes/brAgencia.d.ts +15 -0
- package/dist/src/detect/detectors/bankcodes/brAgencia.d.ts.map +1 -0
- package/dist/src/detect/detectors/bankcodes/brAgencia.js +43 -0
- package/dist/src/detect/detectors/bankcodes/brAgencia.js.map +1 -0
- package/dist/src/detect/detectors/bankcodes/caTransit.d.ts +13 -0
- package/dist/src/detect/detectors/bankcodes/caTransit.d.ts.map +1 -0
- package/dist/src/detect/detectors/bankcodes/caTransit.js +86 -0
- package/dist/src/detect/detectors/bankcodes/caTransit.js.map +1 -0
- package/dist/src/detect/detectors/bankcodes/inIfsc.d.ts +13 -0
- package/dist/src/detect/detectors/bankcodes/inIfsc.d.ts.map +1 -0
- package/dist/src/detect/detectors/bankcodes/inIfsc.js +37 -0
- package/dist/src/detect/detectors/bankcodes/inIfsc.js.map +1 -0
- package/dist/src/detect/detectors/bankcodes/index.d.ts +10 -0
- package/dist/src/detect/detectors/bankcodes/index.d.ts.map +1 -0
- package/dist/src/detect/detectors/bankcodes/index.js +10 -0
- package/dist/src/detect/detectors/bankcodes/index.js.map +1 -0
- package/dist/src/detect/detectors/bankcodes/ukSortCode.d.ts +13 -0
- package/dist/src/detect/detectors/bankcodes/ukSortCode.d.ts.map +1 -0
- package/dist/src/detect/detectors/bankcodes/ukSortCode.js +36 -0
- package/dist/src/detect/detectors/bankcodes/ukSortCode.js.map +1 -0
- package/dist/src/detect/detectors/bankcodes/usRouting.d.ts +12 -0
- package/dist/src/detect/detectors/bankcodes/usRouting.d.ts.map +1 -0
- package/dist/src/detect/detectors/bankcodes/usRouting.js +45 -0
- package/dist/src/detect/detectors/bankcodes/usRouting.js.map +1 -0
- package/dist/src/detect/detectors/contact/email.d.ts +16 -0
- package/dist/src/detect/detectors/contact/email.d.ts.map +1 -0
- package/dist/src/detect/detectors/contact/email.js +111 -0
- package/dist/src/detect/detectors/contact/email.js.map +1 -0
- package/dist/src/detect/detectors/contact/index.d.ts +11 -0
- package/dist/src/detect/detectors/contact/index.d.ts.map +1 -0
- package/dist/src/detect/detectors/contact/index.js +11 -0
- package/dist/src/detect/detectors/contact/index.js.map +1 -0
- package/dist/src/detect/detectors/contact/ipv4.d.ts +12 -0
- package/dist/src/detect/detectors/contact/ipv4.d.ts.map +1 -0
- package/dist/src/detect/detectors/contact/ipv4.js +109 -0
- package/dist/src/detect/detectors/contact/ipv4.js.map +1 -0
- package/dist/src/detect/detectors/contact/ipv6.d.ts +16 -0
- package/dist/src/detect/detectors/contact/ipv6.d.ts.map +1 -0
- package/dist/src/detect/detectors/contact/ipv6.js +187 -0
- package/dist/src/detect/detectors/contact/ipv6.js.map +1 -0
- package/dist/src/detect/detectors/contact/mac.d.ts +14 -0
- package/dist/src/detect/detectors/contact/mac.d.ts.map +1 -0
- package/dist/src/detect/detectors/contact/mac.js +64 -0
- package/dist/src/detect/detectors/contact/mac.js.map +1 -0
- package/dist/src/detect/detectors/contact/phone.d.ts +21 -0
- package/dist/src/detect/detectors/contact/phone.d.ts.map +1 -0
- package/dist/src/detect/detectors/contact/phone.js +76 -0
- package/dist/src/detect/detectors/contact/phone.js.map +1 -0
- package/dist/src/detect/detectors/contact/urlCredentials.d.ts +23 -0
- package/dist/src/detect/detectors/contact/urlCredentials.d.ts.map +1 -0
- package/dist/src/detect/detectors/contact/urlCredentials.js +123 -0
- package/dist/src/detect/detectors/contact/urlCredentials.js.map +1 -0
- package/dist/src/detect/detectors/crypto/ada.d.ts +13 -0
- package/dist/src/detect/detectors/crypto/ada.d.ts.map +1 -0
- package/dist/src/detect/detectors/crypto/ada.js +51 -0
- package/dist/src/detect/detectors/crypto/ada.js.map +1 -0
- package/dist/src/detect/detectors/crypto/btc.d.ts +15 -0
- package/dist/src/detect/detectors/crypto/btc.d.ts.map +1 -0
- package/dist/src/detect/detectors/crypto/btc.js +78 -0
- package/dist/src/detect/detectors/crypto/btc.js.map +1 -0
- package/dist/src/detect/detectors/crypto/dot.d.ts +13 -0
- package/dist/src/detect/detectors/crypto/dot.d.ts.map +1 -0
- package/dist/src/detect/detectors/crypto/dot.js +41 -0
- package/dist/src/detect/detectors/crypto/dot.js.map +1 -0
- package/dist/src/detect/detectors/crypto/eth.d.ts +15 -0
- package/dist/src/detect/detectors/crypto/eth.d.ts.map +1 -0
- package/dist/src/detect/detectors/crypto/eth.js +63 -0
- package/dist/src/detect/detectors/crypto/eth.js.map +1 -0
- package/dist/src/detect/detectors/crypto/index.d.ts +12 -0
- package/dist/src/detect/detectors/crypto/index.d.ts.map +1 -0
- package/dist/src/detect/detectors/crypto/index.js +12 -0
- package/dist/src/detect/detectors/crypto/index.js.map +1 -0
- package/dist/src/detect/detectors/crypto/ltc.d.ts +12 -0
- package/dist/src/detect/detectors/crypto/ltc.d.ts.map +1 -0
- package/dist/src/detect/detectors/crypto/ltc.js +71 -0
- package/dist/src/detect/detectors/crypto/ltc.js.map +1 -0
- package/dist/src/detect/detectors/crypto/sol.d.ts +13 -0
- package/dist/src/detect/detectors/crypto/sol.d.ts.map +1 -0
- package/dist/src/detect/detectors/crypto/sol.js +39 -0
- package/dist/src/detect/detectors/crypto/sol.js.map +1 -0
- package/dist/src/detect/detectors/crypto/trx.d.ts +8 -0
- package/dist/src/detect/detectors/crypto/trx.d.ts.map +1 -0
- package/dist/src/detect/detectors/crypto/trx.js +34 -0
- package/dist/src/detect/detectors/crypto/trx.js.map +1 -0
- package/dist/src/detect/detectors/crypto/xmr.d.ts +10 -0
- package/dist/src/detect/detectors/crypto/xmr.d.ts.map +1 -0
- package/dist/src/detect/detectors/crypto/xmr.js +51 -0
- package/dist/src/detect/detectors/crypto/xmr.js.map +1 -0
- package/dist/src/detect/detectors/documents/driversLicense.d.ts +24 -0
- package/dist/src/detect/detectors/documents/driversLicense.d.ts.map +1 -0
- package/dist/src/detect/detectors/documents/driversLicense.js +79 -0
- package/dist/src/detect/detectors/documents/driversLicense.js.map +1 -0
- package/dist/src/detect/detectors/documents/healthData.d.ts +23 -0
- package/dist/src/detect/detectors/documents/healthData.d.ts.map +1 -0
- package/dist/src/detect/detectors/documents/healthData.js +78 -0
- package/dist/src/detect/detectors/documents/healthData.js.map +1 -0
- package/dist/src/detect/detectors/documents/index.d.ts +9 -0
- package/dist/src/detect/detectors/documents/index.d.ts.map +1 -0
- package/dist/src/detect/detectors/documents/index.js +9 -0
- package/dist/src/detect/detectors/documents/index.js.map +1 -0
- package/dist/src/detect/detectors/documents/passportMrz.d.ts +20 -0
- package/dist/src/detect/detectors/documents/passportMrz.d.ts.map +1 -0
- package/dist/src/detect/detectors/documents/passportMrz.js +194 -0
- package/dist/src/detect/detectors/documents/passportMrz.js.map +1 -0
- package/dist/src/detect/detectors/documents/usNpi.d.ts +16 -0
- package/dist/src/detect/detectors/documents/usNpi.d.ts.map +1 -0
- package/dist/src/detect/detectors/documents/usNpi.js +48 -0
- package/dist/src/detect/detectors/documents/usNpi.js.map +1 -0
- package/dist/src/detect/detectors/documents/vin.d.ts +15 -0
- package/dist/src/detect/detectors/documents/vin.d.ts.map +1 -0
- package/dist/src/detect/detectors/documents/vin.js +64 -0
- package/dist/src/detect/detectors/documents/vin.js.map +1 -0
- package/dist/src/detect/detectors/financial/creditCard.d.ts +23 -0
- package/dist/src/detect/detectors/financial/creditCard.d.ts.map +1 -0
- package/dist/src/detect/detectors/financial/creditCard.js +157 -0
- package/dist/src/detect/detectors/financial/creditCard.js.map +1 -0
- package/dist/src/detect/detectors/financial/iban.d.ts +18 -0
- package/dist/src/detect/detectors/financial/iban.d.ts.map +1 -0
- package/dist/src/detect/detectors/financial/iban.js +80 -0
- package/dist/src/detect/detectors/financial/iban.js.map +1 -0
- package/dist/src/detect/detectors/financial/ibanRegistry.d.ts +35 -0
- package/dist/src/detect/detectors/financial/ibanRegistry.d.ts.map +1 -0
- package/dist/src/detect/detectors/financial/ibanRegistry.js +92 -0
- package/dist/src/detect/detectors/financial/ibanRegistry.js.map +1 -0
- package/dist/src/detect/detectors/financial/index.d.ts +7 -0
- package/dist/src/detect/detectors/financial/index.d.ts.map +1 -0
- package/dist/src/detect/detectors/financial/index.js +7 -0
- package/dist/src/detect/detectors/financial/index.js.map +1 -0
- package/dist/src/detect/detectors/financial/swiftBic.d.ts +17 -0
- package/dist/src/detect/detectors/financial/swiftBic.d.ts.map +1 -0
- package/dist/src/detect/detectors/financial/swiftBic.js +55 -0
- package/dist/src/detect/detectors/financial/swiftBic.js.map +1 -0
- package/dist/src/detect/detectors/index.d.ts +15 -0
- package/dist/src/detect/detectors/index.d.ts.map +1 -0
- package/dist/src/detect/detectors/index.js +15 -0
- package/dist/src/detect/detectors/index.js.map +1 -0
- package/dist/src/detect/detectors/location/coordinates.d.ts +14 -0
- package/dist/src/detect/detectors/location/coordinates.d.ts.map +1 -0
- package/dist/src/detect/detectors/location/coordinates.js +79 -0
- package/dist/src/detect/detectors/location/coordinates.js.map +1 -0
- package/dist/src/detect/detectors/location/index.d.ts +7 -0
- package/dist/src/detect/detectors/location/index.d.ts.map +1 -0
- package/dist/src/detect/detectors/location/index.js +7 -0
- package/dist/src/detect/detectors/location/index.js.map +1 -0
- package/dist/src/detect/detectors/location/postalCode.d.ts +13 -0
- package/dist/src/detect/detectors/location/postalCode.d.ts.map +1 -0
- package/dist/src/detect/detectors/location/postalCode.js +53 -0
- package/dist/src/detect/detectors/location/postalCode.js.map +1 -0
- package/dist/src/detect/detectors/location/postalRegistry.d.ts +19 -0
- package/dist/src/detect/detectors/location/postalRegistry.d.ts.map +1 -0
- package/dist/src/detect/detectors/location/postalRegistry.js +73 -0
- package/dist/src/detect/detectors/location/postalRegistry.js.map +1 -0
- package/dist/src/detect/detectors/location/streetAddress.d.ts +21 -0
- package/dist/src/detect/detectors/location/streetAddress.d.ts.map +1 -0
- package/dist/src/detect/detectors/location/streetAddress.js +70 -0
- package/dist/src/detect/detectors/location/streetAddress.js.map +1 -0
- package/dist/src/detect/detectors/natid/africa.d.ts +17 -0
- package/dist/src/detect/detectors/natid/africa.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/africa.js +106 -0
- package/dist/src/detect/detectors/natid/africa.js.map +1 -0
- package/dist/src/detect/detectors/natid/ar.d.ts +14 -0
- package/dist/src/detect/detectors/natid/ar.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/ar.js +62 -0
- package/dist/src/detect/detectors/natid/ar.js.map +1 -0
- package/dist/src/detect/detectors/natid/au.d.ts +13 -0
- package/dist/src/detect/detectors/natid/au.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/au.js +100 -0
- package/dist/src/detect/detectors/natid/au.js.map +1 -0
- package/dist/src/detect/detectors/natid/be.d.ts +8 -0
- package/dist/src/detect/detectors/natid/be.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/be.js +44 -0
- package/dist/src/detect/detectors/natid/be.js.map +1 -0
- package/dist/src/detect/detectors/natid/bg.d.ts +7 -0
- package/dist/src/detect/detectors/natid/bg.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/bg.js +44 -0
- package/dist/src/detect/detectors/natid/bg.js.map +1 -0
- package/dist/src/detect/detectors/natid/br.d.ts +8 -0
- package/dist/src/detect/detectors/natid/br.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/br.js +85 -0
- package/dist/src/detect/detectors/natid/br.js.map +1 -0
- package/dist/src/detect/detectors/natid/ca.d.ts +8 -0
- package/dist/src/detect/detectors/natid/ca.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/ca.js +41 -0
- package/dist/src/detect/detectors/natid/ca.js.map +1 -0
- package/dist/src/detect/detectors/natid/cl.d.ts +9 -0
- package/dist/src/detect/detectors/natid/cl.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/cl.js +47 -0
- package/dist/src/detect/detectors/natid/cl.js.map +1 -0
- package/dist/src/detect/detectors/natid/cn.d.ts +9 -0
- package/dist/src/detect/detectors/natid/cn.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/cn.js +49 -0
- package/dist/src/detect/detectors/natid/cn.js.map +1 -0
- package/dist/src/detect/detectors/natid/co.d.ts +10 -0
- package/dist/src/detect/detectors/natid/co.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/co.js +43 -0
- package/dist/src/detect/detectors/natid/co.js.map +1 -0
- package/dist/src/detect/detectors/natid/cz.d.ts +11 -0
- package/dist/src/detect/detectors/natid/cz.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/cz.js +44 -0
- package/dist/src/detect/detectors/natid/cz.js.map +1 -0
- package/dist/src/detect/detectors/natid/de.d.ts +16 -0
- package/dist/src/detect/detectors/natid/de.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/de.js +77 -0
- package/dist/src/detect/detectors/natid/de.js.map +1 -0
- package/dist/src/detect/detectors/natid/dk.d.ts +9 -0
- package/dist/src/detect/detectors/natid/dk.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/dk.js +31 -0
- package/dist/src/detect/detectors/natid/dk.js.map +1 -0
- package/dist/src/detect/detectors/natid/es.d.ts +12 -0
- package/dist/src/detect/detectors/natid/es.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/es.js +96 -0
- package/dist/src/detect/detectors/natid/es.js.map +1 -0
- package/dist/src/detect/detectors/natid/fi.d.ts +10 -0
- package/dist/src/detect/detectors/natid/fi.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/fi.js +40 -0
- package/dist/src/detect/detectors/natid/fi.js.map +1 -0
- package/dist/src/detect/detectors/natid/fr.d.ts +12 -0
- package/dist/src/detect/detectors/natid/fr.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/fr.js +61 -0
- package/dist/src/detect/detectors/natid/fr.js.map +1 -0
- package/dist/src/detect/detectors/natid/gb.d.ts +10 -0
- package/dist/src/detect/detectors/natid/gb.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/gb.js +72 -0
- package/dist/src/detect/detectors/natid/gb.js.map +1 -0
- package/dist/src/detect/detectors/natid/gr.d.ts +7 -0
- package/dist/src/detect/detectors/natid/gr.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/gr.js +36 -0
- package/dist/src/detect/detectors/natid/gr.js.map +1 -0
- package/dist/src/detect/detectors/natid/gulf.d.ts +16 -0
- package/dist/src/detect/detectors/natid/gulf.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/gulf.js +121 -0
- package/dist/src/detect/detectors/natid/gulf.js.map +1 -0
- package/dist/src/detect/detectors/natid/hk.d.ts +9 -0
- package/dist/src/detect/detectors/natid/hk.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/hk.js +41 -0
- package/dist/src/detect/detectors/natid/hk.js.map +1 -0
- package/dist/src/detect/detectors/natid/hr.d.ts +6 -0
- package/dist/src/detect/detectors/natid/hr.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/hr.js +32 -0
- package/dist/src/detect/detectors/natid/hr.js.map +1 -0
- package/dist/src/detect/detectors/natid/hu.d.ts +7 -0
- package/dist/src/detect/detectors/natid/hu.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/hu.js +37 -0
- package/dist/src/detect/detectors/natid/hu.js.map +1 -0
- package/dist/src/detect/detectors/natid/ie.d.ts +9 -0
- package/dist/src/detect/detectors/natid/ie.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/ie.js +36 -0
- package/dist/src/detect/detectors/natid/ie.js.map +1 -0
- package/dist/src/detect/detectors/natid/il.d.ts +10 -0
- package/dist/src/detect/detectors/natid/il.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/il.js +38 -0
- package/dist/src/detect/detectors/natid/il.js.map +1 -0
- package/dist/src/detect/detectors/natid/in.d.ts +17 -0
- package/dist/src/detect/detectors/natid/in.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/in.js +67 -0
- package/dist/src/detect/detectors/natid/in.js.map +1 -0
- package/dist/src/detect/detectors/natid/index.d.ts +55 -0
- package/dist/src/detect/detectors/natid/index.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/index.js +55 -0
- package/dist/src/detect/detectors/natid/index.js.map +1 -0
- package/dist/src/detect/detectors/natid/is.d.ts +8 -0
- package/dist/src/detect/detectors/natid/is.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/is.js +42 -0
- package/dist/src/detect/detectors/natid/is.js.map +1 -0
- package/dist/src/detect/detectors/natid/it.d.ts +12 -0
- package/dist/src/detect/detectors/natid/it.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/it.js +62 -0
- package/dist/src/detect/detectors/natid/it.js.map +1 -0
- package/dist/src/detect/detectors/natid/jp.d.ts +9 -0
- package/dist/src/detect/detectors/natid/jp.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/jp.js +46 -0
- package/dist/src/detect/detectors/natid/jp.js.map +1 -0
- package/dist/src/detect/detectors/natid/kr.d.ts +11 -0
- package/dist/src/detect/detectors/natid/kr.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/kr.js +40 -0
- package/dist/src/detect/detectors/natid/kr.js.map +1 -0
- package/dist/src/detect/detectors/natid/kz.d.ts +8 -0
- package/dist/src/detect/detectors/natid/kz.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/kz.js +46 -0
- package/dist/src/detect/detectors/natid/kz.js.map +1 -0
- package/dist/src/detect/detectors/natid/mx.d.ts +16 -0
- package/dist/src/detect/detectors/natid/mx.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/mx.js +82 -0
- package/dist/src/detect/detectors/natid/mx.js.map +1 -0
- package/dist/src/detect/detectors/natid/nl.d.ts +8 -0
- package/dist/src/detect/detectors/natid/nl.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/nl.js +40 -0
- package/dist/src/detect/detectors/natid/nl.js.map +1 -0
- package/dist/src/detect/detectors/natid/no.d.ts +9 -0
- package/dist/src/detect/detectors/natid/no.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/no.js +52 -0
- package/dist/src/detect/detectors/natid/no.js.map +1 -0
- package/dist/src/detect/detectors/natid/nz.d.ts +9 -0
- package/dist/src/detect/detectors/natid/nz.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/nz.js +52 -0
- package/dist/src/detect/detectors/natid/nz.js.map +1 -0
- package/dist/src/detect/detectors/natid/pe.d.ts +7 -0
- package/dist/src/detect/detectors/natid/pe.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/pe.js +26 -0
- package/dist/src/detect/detectors/natid/pe.js.map +1 -0
- package/dist/src/detect/detectors/natid/pl.d.ts +11 -0
- package/dist/src/detect/detectors/natid/pl.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/pl.js +105 -0
- package/dist/src/detect/detectors/natid/pl.js.map +1 -0
- package/dist/src/detect/detectors/natid/pt.d.ts +6 -0
- package/dist/src/detect/detectors/natid/pt.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/pt.js +35 -0
- package/dist/src/detect/detectors/natid/pt.js.map +1 -0
- package/dist/src/detect/detectors/natid/ro.d.ts +8 -0
- package/dist/src/detect/detectors/natid/ro.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/ro.js +48 -0
- package/dist/src/detect/detectors/natid/ro.js.map +1 -0
- package/dist/src/detect/detectors/natid/ru.d.ts +11 -0
- package/dist/src/detect/detectors/natid/ru.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/ru.js +86 -0
- package/dist/src/detect/detectors/natid/ru.js.map +1 -0
- package/dist/src/detect/detectors/natid/se.d.ts +9 -0
- package/dist/src/detect/detectors/natid/se.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/se.js +43 -0
- package/dist/src/detect/detectors/natid/se.js.map +1 -0
- package/dist/src/detect/detectors/natid/seasia.d.ts +19 -0
- package/dist/src/detect/detectors/natid/seasia.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/seasia.js +182 -0
- package/dist/src/detect/detectors/natid/seasia.js.map +1 -0
- package/dist/src/detect/detectors/natid/sg.d.ts +8 -0
- package/dist/src/detect/detectors/natid/sg.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/sg.js +39 -0
- package/dist/src/detect/detectors/natid/sg.js.map +1 -0
- package/dist/src/detect/detectors/natid/si.d.ts +8 -0
- package/dist/src/detect/detectors/natid/si.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/si.js +44 -0
- package/dist/src/detect/detectors/natid/si.js.map +1 -0
- package/dist/src/detect/detectors/natid/tr.d.ts +14 -0
- package/dist/src/detect/detectors/natid/tr.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/tr.js +79 -0
- package/dist/src/detect/detectors/natid/tr.js.map +1 -0
- package/dist/src/detect/detectors/natid/tw.d.ts +9 -0
- package/dist/src/detect/detectors/natid/tw.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/tw.js +40 -0
- package/dist/src/detect/detectors/natid/tw.js.map +1 -0
- package/dist/src/detect/detectors/natid/ua.d.ts +7 -0
- package/dist/src/detect/detectors/natid/ua.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/ua.js +38 -0
- package/dist/src/detect/detectors/natid/ua.js.map +1 -0
- package/dist/src/detect/detectors/natid/us.d.ts +15 -0
- package/dist/src/detect/detectors/natid/us.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/us.js +119 -0
- package/dist/src/detect/detectors/natid/us.js.map +1 -0
- package/dist/src/detect/detectors/natid/za.d.ts +9 -0
- package/dist/src/detect/detectors/natid/za.d.ts.map +1 -0
- package/dist/src/detect/detectors/natid/za.js +44 -0
- package/dist/src/detect/detectors/natid/za.js.map +1 -0
- package/dist/src/detect/detectors/secrets/apiKey.d.ts +14 -0
- package/dist/src/detect/detectors/secrets/apiKey.d.ts.map +1 -0
- package/dist/src/detect/detectors/secrets/apiKey.js +103 -0
- package/dist/src/detect/detectors/secrets/apiKey.js.map +1 -0
- package/dist/src/detect/detectors/secrets/connectionString.d.ts +12 -0
- package/dist/src/detect/detectors/secrets/connectionString.d.ts.map +1 -0
- package/dist/src/detect/detectors/secrets/connectionString.js +70 -0
- package/dist/src/detect/detectors/secrets/connectionString.js.map +1 -0
- package/dist/src/detect/detectors/secrets/genericSecret.d.ts +22 -0
- package/dist/src/detect/detectors/secrets/genericSecret.d.ts.map +1 -0
- package/dist/src/detect/detectors/secrets/genericSecret.js +77 -0
- package/dist/src/detect/detectors/secrets/genericSecret.js.map +1 -0
- package/dist/src/detect/detectors/secrets/index.d.ts +9 -0
- package/dist/src/detect/detectors/secrets/index.d.ts.map +1 -0
- package/dist/src/detect/detectors/secrets/index.js +9 -0
- package/dist/src/detect/detectors/secrets/index.js.map +1 -0
- package/dist/src/detect/detectors/secrets/jwt.d.ts +11 -0
- package/dist/src/detect/detectors/secrets/jwt.d.ts.map +1 -0
- package/dist/src/detect/detectors/secrets/jwt.js +111 -0
- package/dist/src/detect/detectors/secrets/jwt.js.map +1 -0
- package/dist/src/detect/detectors/secrets/pemPrivateKey.d.ts +16 -0
- package/dist/src/detect/detectors/secrets/pemPrivateKey.d.ts.map +1 -0
- package/dist/src/detect/detectors/secrets/pemPrivateKey.js +56 -0
- package/dist/src/detect/detectors/secrets/pemPrivateKey.js.map +1 -0
- package/dist/src/detect/detectors/vat/euVat.d.ts +17 -0
- package/dist/src/detect/detectors/vat/euVat.d.ts.map +1 -0
- package/dist/src/detect/detectors/vat/euVat.js +293 -0
- package/dist/src/detect/detectors/vat/euVat.js.map +1 -0
- package/dist/src/detect/detectors/vat/index.d.ts +5 -0
- package/dist/src/detect/detectors/vat/index.d.ts.map +1 -0
- package/dist/src/detect/detectors/vat/index.js +5 -0
- package/dist/src/detect/detectors/vat/index.js.map +1 -0
- package/dist/src/detect/entropy.d.ts +28 -0
- package/dist/src/detect/entropy.d.ts.map +1 -0
- package/dist/src/detect/entropy.js +64 -0
- package/dist/src/detect/entropy.js.map +1 -0
- package/dist/src/detect/isoCountries.d.ts +10 -0
- package/dist/src/detect/isoCountries.d.ts.map +1 -0
- package/dist/src/detect/isoCountries.js +25 -0
- package/dist/src/detect/isoCountries.js.map +1 -0
- package/dist/src/detect/registry.d.ts +50 -0
- package/dist/src/detect/registry.d.ts.map +1 -0
- package/dist/src/detect/registry.js +110 -0
- package/dist/src/detect/registry.js.map +1 -0
- package/dist/src/detect/runner.d.ts +64 -0
- package/dist/src/detect/runner.d.ts.map +1 -0
- package/dist/src/detect/runner.js +142 -0
- package/dist/src/detect/runner.js.map +1 -0
- package/dist/src/detect/types.d.ts +251 -0
- package/dist/src/detect/types.d.ts.map +1 -0
- package/dist/src/detect/types.js +59 -0
- package/dist/src/detect/types.js.map +1 -0
- package/dist/src/encoding/base58.d.ts +26 -0
- package/dist/src/encoding/base58.d.ts.map +1 -0
- package/dist/src/encoding/base58.js +77 -0
- package/dist/src/encoding/base58.js.map +1 -0
- package/dist/src/encoding/base58monero.d.ts +15 -0
- package/dist/src/encoding/base58monero.d.ts.map +1 -0
- package/dist/src/encoding/base58monero.js +87 -0
- package/dist/src/encoding/base58monero.js.map +1 -0
- package/dist/src/encoding/bech32.d.ts +28 -0
- package/dist/src/encoding/bech32.d.ts.map +1 -0
- package/dist/src/encoding/bech32.js +108 -0
- package/dist/src/encoding/bech32.js.map +1 -0
- package/dist/src/encoding/bytes.d.ts +15 -0
- package/dist/src/encoding/bytes.d.ts.map +1 -0
- package/dist/src/encoding/bytes.js +46 -0
- package/dist/src/encoding/bytes.js.map +1 -0
- package/dist/src/entityFamily.d.ts +18 -0
- package/dist/src/entityFamily.d.ts.map +1 -0
- package/dist/src/entityFamily.js +54 -0
- package/dist/src/entityFamily.js.map +1 -0
- package/dist/src/entityLabel.d.ts +18 -0
- package/dist/src/entityLabel.d.ts.map +1 -0
- package/dist/src/entityLabel.js +53 -0
- package/dist/src/entityLabel.js.map +1 -0
- package/dist/src/entityTypes.d.ts +64 -0
- package/dist/src/entityTypes.d.ts.map +1 -0
- package/dist/src/entityTypes.js +94 -0
- package/dist/src/entityTypes.js.map +1 -0
- package/dist/src/exposure/index.d.ts +86 -0
- package/dist/src/exposure/index.d.ts.map +1 -0
- package/dist/src/exposure/index.js +134 -0
- package/dist/src/exposure/index.js.map +1 -0
- package/dist/src/fuse/calibrate.d.ts +95 -0
- package/dist/src/fuse/calibrate.d.ts.map +1 -0
- package/dist/src/fuse/calibrate.js +165 -0
- package/dist/src/fuse/calibrate.js.map +1 -0
- package/dist/src/fuse/defaultCalibration.d.ts +52 -0
- package/dist/src/fuse/defaultCalibration.d.ts.map +1 -0
- package/dist/src/fuse/defaultCalibration.js +41 -0
- package/dist/src/fuse/defaultCalibration.js.map +1 -0
- package/dist/src/fuse/explain.d.ts +55 -0
- package/dist/src/fuse/explain.d.ts.map +1 -0
- package/dist/src/fuse/explain.js +91 -0
- package/dist/src/fuse/explain.js.map +1 -0
- package/dist/src/fuse/profiles.d.ts +80 -0
- package/dist/src/fuse/profiles.d.ts.map +1 -0
- package/dist/src/fuse/profiles.js +126 -0
- package/dist/src/fuse/profiles.js.map +1 -0
- package/dist/src/fuse/resolve.d.ts +73 -0
- package/dist/src/fuse/resolve.d.ts.map +1 -0
- package/dist/src/fuse/resolve.js +206 -0
- package/dist/src/fuse/resolve.js.map +1 -0
- package/dist/src/gazetteer/index.d.ts +41 -0
- package/dist/src/gazetteer/index.d.ts.map +1 -0
- package/dist/src/gazetteer/index.js +117 -0
- package/dist/src/gazetteer/index.js.map +1 -0
- package/dist/src/generate/bankcodes.d.ts +20 -0
- package/dist/src/generate/bankcodes.d.ts.map +1 -0
- package/dist/src/generate/bankcodes.js +71 -0
- package/dist/src/generate/bankcodes.js.map +1 -0
- package/dist/src/generate/contact.d.ts +31 -0
- package/dist/src/generate/contact.d.ts.map +1 -0
- package/dist/src/generate/contact.js +139 -0
- package/dist/src/generate/contact.js.map +1 -0
- package/dist/src/generate/crypto.d.ts +27 -0
- package/dist/src/generate/crypto.d.ts.map +1 -0
- package/dist/src/generate/crypto.js +88 -0
- package/dist/src/generate/crypto.js.map +1 -0
- package/dist/src/generate/documents.d.ts +24 -0
- package/dist/src/generate/documents.d.ts.map +1 -0
- package/dist/src/generate/documents.js +124 -0
- package/dist/src/generate/documents.js.map +1 -0
- package/dist/src/generate/financial.d.ts +26 -0
- package/dist/src/generate/financial.d.ts.map +1 -0
- package/dist/src/generate/financial.js +136 -0
- package/dist/src/generate/financial.js.map +1 -0
- package/dist/src/generate/index.d.ts +23 -0
- package/dist/src/generate/index.d.ts.map +1 -0
- package/dist/src/generate/index.js +23 -0
- package/dist/src/generate/index.js.map +1 -0
- package/dist/src/generate/location.d.ts +12 -0
- package/dist/src/generate/location.d.ts.map +1 -0
- package/dist/src/generate/location.js +75 -0
- package/dist/src/generate/location.js.map +1 -0
- package/dist/src/generate/natidAmOc.d.ts +22 -0
- package/dist/src/generate/natidAmOc.d.ts.map +1 -0
- package/dist/src/generate/natidAmOc.js +181 -0
- package/dist/src/generate/natidAmOc.js.map +1 -0
- package/dist/src/generate/natidAsia.d.ts +20 -0
- package/dist/src/generate/natidAsia.d.ts.map +1 -0
- package/dist/src/generate/natidAsia.js +147 -0
- package/dist/src/generate/natidAsia.js.map +1 -0
- package/dist/src/generate/natidCee.d.ts +21 -0
- package/dist/src/generate/natidCee.d.ts.map +1 -0
- package/dist/src/generate/natidCee.js +181 -0
- package/dist/src/generate/natidCee.js.map +1 -0
- package/dist/src/generate/natidMeCis.d.ts +17 -0
- package/dist/src/generate/natidMeCis.d.ts.map +1 -0
- package/dist/src/generate/natidMeCis.js +121 -0
- package/dist/src/generate/natidMeCis.js.map +1 -0
- package/dist/src/generate/natidWest.d.ts +32 -0
- package/dist/src/generate/natidWest.d.ts.map +1 -0
- package/dist/src/generate/natidWest.js +187 -0
- package/dist/src/generate/natidWest.js.map +1 -0
- package/dist/src/generate/prng.d.ts +10 -0
- package/dist/src/generate/prng.d.ts.map +1 -0
- package/dist/src/generate/prng.js +18 -0
- package/dist/src/generate/prng.js.map +1 -0
- package/dist/src/generate/secrets.d.ts +23 -0
- package/dist/src/generate/secrets.d.ts.map +1 -0
- package/dist/src/generate/secrets.js +126 -0
- package/dist/src/generate/secrets.js.map +1 -0
- package/dist/src/generate/vat.d.ts +11 -0
- package/dist/src/generate/vat.d.ts.map +1 -0
- package/dist/src/generate/vat.js +233 -0
- package/dist/src/generate/vat.js.map +1 -0
- package/dist/src/index.d.ts +81 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +76 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mask/egressGuard.d.ts +54 -0
- package/dist/src/mask/egressGuard.d.ts.map +1 -0
- package/dist/src/mask/egressGuard.js +67 -0
- package/dist/src/mask/egressGuard.js.map +1 -0
- package/dist/src/mask/masker.d.ts +76 -0
- package/dist/src/mask/masker.d.ts.map +1 -0
- package/dist/src/mask/masker.js +201 -0
- package/dist/src/mask/masker.js.map +1 -0
- package/dist/src/mask/restorer.d.ts +96 -0
- package/dist/src/mask/restorer.d.ts.map +1 -0
- package/dist/src/mask/restorer.js +263 -0
- package/dist/src/mask/restorer.js.map +1 -0
- package/dist/src/mask/surrogatePools.d.ts +33 -0
- package/dist/src/mask/surrogatePools.d.ts.map +1 -0
- package/dist/src/mask/surrogatePools.js +81 -0
- package/dist/src/mask/surrogatePools.js.map +1 -0
- package/dist/src/mask/surrogates.d.ts +45 -0
- package/dist/src/mask/surrogates.d.ts.map +1 -0
- package/dist/src/mask/surrogates.js +241 -0
- package/dist/src/mask/surrogates.js.map +1 -0
- package/dist/src/mask/vault.d.ts +76 -0
- package/dist/src/mask/vault.d.ts.map +1 -0
- package/dist/src/mask/vault.js +141 -0
- package/dist/src/mask/vault.js.map +1 -0
- package/dist/src/ner/align.d.ts +36 -0
- package/dist/src/ner/align.d.ts.map +1 -0
- package/dist/src/ner/align.js +73 -0
- package/dist/src/ner/align.js.map +1 -0
- package/dist/src/ner/chunk.d.ts +27 -0
- package/dist/src/ner/chunk.d.ts.map +1 -0
- package/dist/src/ner/chunk.js +55 -0
- package/dist/src/ner/chunk.js.map +1 -0
- package/dist/src/ner/chunkCache.d.ts +63 -0
- package/dist/src/ner/chunkCache.d.ts.map +1 -0
- package/dist/src/ner/chunkCache.js +99 -0
- package/dist/src/ner/chunkCache.js.map +1 -0
- package/dist/src/ner/engine.d.ts +53 -0
- package/dist/src/ner/engine.d.ts.map +1 -0
- package/dist/src/ner/engine.js +113 -0
- package/dist/src/ner/engine.js.map +1 -0
- package/dist/src/ner/merge.d.ts +26 -0
- package/dist/src/ner/merge.d.ts.map +1 -0
- package/dist/src/ner/merge.js +108 -0
- package/dist/src/ner/merge.js.map +1 -0
- package/dist/src/ner/runStage2.d.ts +17 -0
- package/dist/src/ner/runStage2.d.ts.map +1 -0
- package/dist/src/ner/runStage2.js +43 -0
- package/dist/src/ner/runStage2.js.map +1 -0
- package/dist/src/ner/stage2b.d.ts +59 -0
- package/dist/src/ner/stage2b.d.ts.map +1 -0
- package/dist/src/ner/stage2b.js +51 -0
- package/dist/src/ner/stage2b.js.map +1 -0
- package/dist/src/ner/transformersClassifier.d.ts +45 -0
- package/dist/src/ner/transformersClassifier.d.ts.map +1 -0
- package/dist/src/ner/transformersClassifier.js +40 -0
- package/dist/src/ner/transformersClassifier.js.map +1 -0
- package/dist/src/ner/types.d.ts +93 -0
- package/dist/src/ner/types.d.ts.map +1 -0
- package/dist/src/ner/types.js +12 -0
- package/dist/src/ner/types.js.map +1 -0
- package/dist/src/normalization.d.ts +24 -0
- package/dist/src/normalization.d.ts.map +1 -0
- package/dist/src/normalization.js +92 -0
- package/dist/src/normalization.js.map +1 -0
- package/dist/src/offsetMap.d.ts +165 -0
- package/dist/src/offsetMap.d.ts.map +1 -0
- package/dist/src/offsetMap.js +225 -0
- package/dist/src/offsetMap.js.map +1 -0
- package/dist/src/pipeline.d.ts +58 -0
- package/dist/src/pipeline.d.ts.map +1 -0
- package/dist/src/pipeline.js +57 -0
- package/dist/src/pipeline.js.map +1 -0
- package/dist/src/protect.d.ts +146 -0
- package/dist/src/protect.d.ts.map +1 -0
- package/dist/src/protect.js +161 -0
- package/dist/src/protect.js.map +1 -0
- package/dist/src/scripts.d.ts +37 -0
- package/dist/src/scripts.d.ts.map +1 -0
- package/dist/src/scripts.js +145 -0
- package/dist/src/scripts.js.map +1 -0
- package/dist/src/transforms/foldDigits.d.ts +49 -0
- package/dist/src/transforms/foldDigits.d.ts.map +1 -0
- package/dist/src/transforms/foldDigits.js +135 -0
- package/dist/src/transforms/foldDigits.js.map +1 -0
- package/dist/src/transforms/graphemes.d.ts +6 -0
- package/dist/src/transforms/graphemes.d.ts.map +1 -0
- package/dist/src/transforms/graphemes.js +6 -0
- package/dist/src/transforms/graphemes.js.map +1 -0
- package/dist/src/transforms/homoglyphFold.d.ts +5 -0
- package/dist/src/transforms/homoglyphFold.d.ts.map +1 -0
- package/dist/src/transforms/homoglyphFold.js +214 -0
- package/dist/src/transforms/homoglyphFold.js.map +1 -0
- package/dist/src/transforms/nfkc.d.ts +20 -0
- package/dist/src/transforms/nfkc.d.ts.map +1 -0
- package/dist/src/transforms/nfkc.js +48 -0
- package/dist/src/transforms/nfkc.js.map +1 -0
- package/dist/src/transforms/stripInvisibles.d.ts +37 -0
- package/dist/src/transforms/stripInvisibles.d.ts.map +1 -0
- package/dist/src/transforms/stripInvisibles.js +151 -0
- package/dist/src/transforms/stripInvisibles.js.map +1 -0
- package/dist/src/transforms/whitespacePunct.d.ts +21 -0
- package/dist/src/transforms/whitespacePunct.d.ts.map +1 -0
- package/dist/src/transforms/whitespacePunct.js +100 -0
- package/dist/src/transforms/whitespacePunct.js.map +1 -0
- package/dist/src/types.d.ts +212 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +14 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +67 -0
- package/src/checksums/aba.ts +45 -0
- package/src/checksums/digits.ts +108 -0
- package/src/checksums/icao9303.ts +53 -0
- package/src/checksums/index.ts +36 -0
- package/src/checksums/iso7064.ts +168 -0
- package/src/checksums/luhn.ts +66 -0
- package/src/checksums/mod97.ts +91 -0
- package/src/checksums/verhoeff.ts +84 -0
- package/src/checksums/weighted.ts +108 -0
- package/src/context/documentProfile.ts +293 -0
- package/src/context/negativeRules.ts +765 -0
- package/src/context/score.ts +430 -0
- package/src/context/structure.ts +611 -0
- package/src/context/triggers.ts +266 -0
- package/src/context/types.ts +150 -0
- package/src/crypto/keccak256.ts +98 -0
- package/src/crypto/sha256.ts +76 -0
- package/src/detect/AUTHORING.md +50 -0
- package/src/detect/detectors/bankcodes/auBsb.ts +36 -0
- package/src/detect/detectors/bankcodes/brAgencia.ts +46 -0
- package/src/detect/detectors/bankcodes/caTransit.ts +89 -0
- package/src/detect/detectors/bankcodes/inIfsc.ts +40 -0
- package/src/detect/detectors/bankcodes/index.ts +9 -0
- package/src/detect/detectors/bankcodes/ukSortCode.ts +38 -0
- package/src/detect/detectors/bankcodes/usRouting.ts +47 -0
- package/src/detect/detectors/contact/email.ts +113 -0
- package/src/detect/detectors/contact/index.ts +10 -0
- package/src/detect/detectors/contact/ipv4.ts +112 -0
- package/src/detect/detectors/contact/ipv6.ts +188 -0
- package/src/detect/detectors/contact/mac.ts +68 -0
- package/src/detect/detectors/contact/phone.ts +81 -0
- package/src/detect/detectors/contact/urlCredentials.ts +124 -0
- package/src/detect/detectors/crypto/ada.ts +52 -0
- package/src/detect/detectors/crypto/btc.ts +77 -0
- package/src/detect/detectors/crypto/dot.ts +42 -0
- package/src/detect/detectors/crypto/eth.ts +70 -0
- package/src/detect/detectors/crypto/index.ts +11 -0
- package/src/detect/detectors/crypto/ltc.ts +69 -0
- package/src/detect/detectors/crypto/sol.ts +41 -0
- package/src/detect/detectors/crypto/trx.ts +35 -0
- package/src/detect/detectors/crypto/xmr.ts +54 -0
- package/src/detect/detectors/documents/driversLicense.ts +83 -0
- package/src/detect/detectors/documents/healthData.ts +88 -0
- package/src/detect/detectors/documents/index.ts +8 -0
- package/src/detect/detectors/documents/passportMrz.ts +203 -0
- package/src/detect/detectors/documents/usNpi.ts +50 -0
- package/src/detect/detectors/documents/vin.ts +67 -0
- package/src/detect/detectors/financial/creditCard.ts +167 -0
- package/src/detect/detectors/financial/iban.ts +82 -0
- package/src/detect/detectors/financial/ibanRegistry.ts +112 -0
- package/src/detect/detectors/financial/index.ts +6 -0
- package/src/detect/detectors/financial/swiftBic.ts +61 -0
- package/src/detect/detectors/index.ts +14 -0
- package/src/detect/detectors/location/coordinates.ts +84 -0
- package/src/detect/detectors/location/index.ts +6 -0
- package/src/detect/detectors/location/postalCode.ts +56 -0
- package/src/detect/detectors/location/postalRegistry.ts +74 -0
- package/src/detect/detectors/location/streetAddress.ts +84 -0
- package/src/detect/detectors/natid/africa.ts +108 -0
- package/src/detect/detectors/natid/ar.ts +62 -0
- package/src/detect/detectors/natid/au.ts +99 -0
- package/src/detect/detectors/natid/be.ts +45 -0
- package/src/detect/detectors/natid/bg.ts +44 -0
- package/src/detect/detectors/natid/br.ts +81 -0
- package/src/detect/detectors/natid/ca.ts +40 -0
- package/src/detect/detectors/natid/cl.ts +47 -0
- package/src/detect/detectors/natid/cn.ts +48 -0
- package/src/detect/detectors/natid/co.ts +46 -0
- package/src/detect/detectors/natid/cz.ts +44 -0
- package/src/detect/detectors/natid/de.ts +75 -0
- package/src/detect/detectors/natid/dk.ts +31 -0
- package/src/detect/detectors/natid/es.ts +95 -0
- package/src/detect/detectors/natid/fi.ts +41 -0
- package/src/detect/detectors/natid/fr.ts +63 -0
- package/src/detect/detectors/natid/gb.ts +70 -0
- package/src/detect/detectors/natid/gr.ts +35 -0
- package/src/detect/detectors/natid/gulf.ts +116 -0
- package/src/detect/detectors/natid/hk.ts +42 -0
- package/src/detect/detectors/natid/hr.ts +32 -0
- package/src/detect/detectors/natid/hu.ts +36 -0
- package/src/detect/detectors/natid/ie.ts +37 -0
- package/src/detect/detectors/natid/il.ts +37 -0
- package/src/detect/detectors/natid/in.ts +67 -0
- package/src/detect/detectors/natid/index.ts +54 -0
- package/src/detect/detectors/natid/is.ts +42 -0
- package/src/detect/detectors/natid/it.ts +65 -0
- package/src/detect/detectors/natid/jp.ts +48 -0
- package/src/detect/detectors/natid/kr.ts +41 -0
- package/src/detect/detectors/natid/kz.ts +44 -0
- package/src/detect/detectors/natid/mx.ts +83 -0
- package/src/detect/detectors/natid/nl.ts +38 -0
- package/src/detect/detectors/natid/no.ts +50 -0
- package/src/detect/detectors/natid/nz.ts +53 -0
- package/src/detect/detectors/natid/pe.ts +28 -0
- package/src/detect/detectors/natid/pl.ts +100 -0
- package/src/detect/detectors/natid/pt.ts +36 -0
- package/src/detect/detectors/natid/ro.ts +47 -0
- package/src/detect/detectors/natid/ru.ts +82 -0
- package/src/detect/detectors/natid/se.ts +42 -0
- package/src/detect/detectors/natid/seasia.ts +174 -0
- package/src/detect/detectors/natid/sg.ts +39 -0
- package/src/detect/detectors/natid/si.ts +42 -0
- package/src/detect/detectors/natid/tr.ts +76 -0
- package/src/detect/detectors/natid/tw.ts +41 -0
- package/src/detect/detectors/natid/ua.ts +38 -0
- package/src/detect/detectors/natid/us.ts +118 -0
- package/src/detect/detectors/natid/za.ts +42 -0
- package/src/detect/detectors/secrets/apiKey.ts +115 -0
- package/src/detect/detectors/secrets/connectionString.ts +71 -0
- package/src/detect/detectors/secrets/genericSecret.ts +81 -0
- package/src/detect/detectors/secrets/index.ts +8 -0
- package/src/detect/detectors/secrets/jwt.ts +101 -0
- package/src/detect/detectors/secrets/pemPrivateKey.ts +59 -0
- package/src/detect/detectors/vat/euVat.ts +280 -0
- package/src/detect/detectors/vat/index.ts +4 -0
- package/src/detect/entropy.ts +60 -0
- package/src/detect/isoCountries.ts +30 -0
- package/src/detect/registry.ts +134 -0
- package/src/detect/runner.ts +187 -0
- package/src/detect/types.ts +296 -0
- package/src/encoding/base58.ts +85 -0
- package/src/encoding/base58monero.ts +90 -0
- package/src/encoding/bech32.ts +125 -0
- package/src/encoding/bytes.ts +48 -0
- package/src/entityFamily.ts +70 -0
- package/src/entityLabel.ts +56 -0
- package/src/entityTypes.ts +107 -0
- package/src/exposure/index.ts +189 -0
- package/src/fuse/calibrate.ts +224 -0
- package/src/fuse/defaultCalibration.ts +71 -0
- package/src/fuse/explain.ts +114 -0
- package/src/fuse/profiles.ts +187 -0
- package/src/fuse/resolve.ts +237 -0
- package/src/gazetteer/index.ts +139 -0
- package/src/generate/bankcodes.ts +82 -0
- package/src/generate/contact.ts +147 -0
- package/src/generate/crypto.ts +91 -0
- package/src/generate/documents.ts +142 -0
- package/src/generate/financial.ts +149 -0
- package/src/generate/index.ts +22 -0
- package/src/generate/location.ts +80 -0
- package/src/generate/natidAmOc.ts +198 -0
- package/src/generate/natidAsia.ts +162 -0
- package/src/generate/natidCee.ts +196 -0
- package/src/generate/natidMeCis.ts +131 -0
- package/src/generate/natidWest.ts +208 -0
- package/src/generate/prng.ts +17 -0
- package/src/generate/secrets.ts +141 -0
- package/src/generate/vat.ts +239 -0
- package/src/index.ts +186 -0
- package/src/mask/egressGuard.ts +88 -0
- package/src/mask/masker.ts +276 -0
- package/src/mask/restorer.ts +284 -0
- package/src/mask/surrogatePools.ts +96 -0
- package/src/mask/surrogates.ts +248 -0
- package/src/mask/vault.ts +153 -0
- package/src/ner/align.ts +86 -0
- package/src/ner/chunk.ts +65 -0
- package/src/ner/chunkCache.ts +110 -0
- package/src/ner/engine.ts +141 -0
- package/src/ner/merge.ts +123 -0
- package/src/ner/runStage2.ts +51 -0
- package/src/ner/stage2b.ts +73 -0
- package/src/ner/transformersClassifier.ts +79 -0
- package/src/ner/types.ts +99 -0
- package/src/normalization.ts +119 -0
- package/src/offsetMap.ts +271 -0
- package/src/pipeline.ts +96 -0
- package/src/protect.ts +284 -0
- package/src/scripts.ts +164 -0
- package/src/transforms/foldDigits.ts +138 -0
- package/src/transforms/graphemes.ts +5 -0
- package/src/transforms/homoglyphFold.ts +221 -0
- package/src/transforms/nfkc.ts +48 -0
- package/src/transforms/stripInvisibles.ts +158 -0
- package/src/transforms/whitespacePunct.ts +100 -0
- package/src/types.ts +339 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CRYPTO_WALLET: Solana.
|
|
3
|
+
*
|
|
4
|
+
* A Solana address is a bare ed25519 public key in Bitcoin-alphabet base58 —
|
|
5
|
+
* there is NO checksum, so this is structural validation: the string must
|
|
6
|
+
* decode to EXACTLY 32 bytes, which rejects most base58-looking words (a
|
|
7
|
+
* 40-character run decodes to ~29 bytes, a Bitcoin address to 25). MEDIUM
|
|
8
|
+
* by the no-checksum rule.
|
|
9
|
+
*
|
|
10
|
+
* The system program (32 '1's, the all-zero key) is a well-known constant.
|
|
11
|
+
*/
|
|
12
|
+
import { base58Decode } from '../../../encoding/base58.js';
|
|
13
|
+
import { registerDetector } from '../../registry.js';
|
|
14
|
+
import { CONFIDENCE, GLOBAL_REGION, invalid, valid } from '../../types.js';
|
|
15
|
+
function validateSol(ctx) {
|
|
16
|
+
const raw = ctx.match[0];
|
|
17
|
+
const bytes = base58Decode(raw);
|
|
18
|
+
if (bytes === null)
|
|
19
|
+
return invalid('not base58');
|
|
20
|
+
if (bytes.length !== 32)
|
|
21
|
+
return invalid('not a 32-byte key');
|
|
22
|
+
const allZero = bytes.every((b) => b === 0);
|
|
23
|
+
return valid({
|
|
24
|
+
canonical: raw,
|
|
25
|
+
sensitive: !allZero,
|
|
26
|
+
metadata: { chain: 'sol', ...(allZero ? { wellKnown: 'system-program' } : {}) },
|
|
27
|
+
validator: 'sol-structural',
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
registerDetector({
|
|
31
|
+
id: 'crypto-sol',
|
|
32
|
+
entityType: 'CRYPTO_WALLET',
|
|
33
|
+
regions: [GLOBAL_REGION],
|
|
34
|
+
pattern: /\b[1-9A-HJ-NP-Za-km-z]{32,44}\b/g,
|
|
35
|
+
baseConfidence: CONFIDENCE.MEDIUM,
|
|
36
|
+
description: 'Solana addresses: base58 decoding to exactly 32 bytes. No checksum exists; MEDIUM.',
|
|
37
|
+
validate: validateSol,
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=sol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sol.js","sourceRoot":"","sources":["../../../../../src/detect/detectors/crypto/sol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG3E,SAAS,WAAW,CAAC,GAAsB;IACzC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC;QACX,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,CAAC,OAAO;QACnB,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QAC/E,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,gBAAgB,CAAC;IACf,EAAE,EAAE,YAAY;IAChB,UAAU,EAAE,eAAe;IAC3B,OAAO,EAAE,CAAC,aAAa,CAAC;IACxB,OAAO,EAAE,kCAAkC;IAC3C,cAAc,EAAE,UAAU,CAAC,MAAM;IACjC,WAAW,EAAE,oFAAoF;IACjG,QAAQ,EAAE,WAAW;CACtB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trx.d.ts","sourceRoot":"","sources":["../../../../../src/detect/detectors/crypto/trx.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CRYPTO_WALLET: Tron.
|
|
3
|
+
*
|
|
4
|
+
* base58check with version byte 0x41 and a 20-byte payload; always written
|
|
5
|
+
* starting with 'T' and 34 characters long. Fully checksum-verified.
|
|
6
|
+
*/
|
|
7
|
+
import { base58CheckDecode } from '../../../encoding/base58.js';
|
|
8
|
+
import { registerDetector } from '../../registry.js';
|
|
9
|
+
import { CONFIDENCE, GLOBAL_REGION, invalid, valid } from '../../types.js';
|
|
10
|
+
function validateTrx(ctx) {
|
|
11
|
+
const raw = ctx.match[0];
|
|
12
|
+
const decoded = base58CheckDecode(raw);
|
|
13
|
+
if (decoded === null)
|
|
14
|
+
return invalid('base58check checksum failed');
|
|
15
|
+
if (decoded.version !== 0x41)
|
|
16
|
+
return invalid('not the Tron version byte');
|
|
17
|
+
if (decoded.payload.length !== 20)
|
|
18
|
+
return invalid('payload is not 20 bytes');
|
|
19
|
+
return valid({
|
|
20
|
+
canonical: raw,
|
|
21
|
+
metadata: { chain: 'trx' },
|
|
22
|
+
validator: 'base58check',
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
registerDetector({
|
|
26
|
+
id: 'crypto-trx',
|
|
27
|
+
entityType: 'CRYPTO_WALLET',
|
|
28
|
+
regions: [GLOBAL_REGION],
|
|
29
|
+
pattern: /\bT[1-9A-HJ-NP-Za-km-z]{33}\b/g,
|
|
30
|
+
baseConfidence: CONFIDENCE.HIGH,
|
|
31
|
+
description: 'Tron addresses: base58check, version 0x41, checksummed.',
|
|
32
|
+
validate: validateTrx,
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=trx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trx.js","sourceRoot":"","sources":["../../../../../src/detect/detectors/crypto/trx.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG3E,SAAS,WAAW,CAAC,GAAsB;IACzC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC1E,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAE7E,OAAO,KAAK,CAAC;QACX,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;QAC1B,SAAS,EAAE,aAAa;KACzB,CAAC,CAAC;AACL,CAAC;AAED,gBAAgB,CAAC;IACf,EAAE,EAAE,YAAY;IAChB,UAAU,EAAE,eAAe;IAC3B,OAAO,EAAE,CAAC,aAAa,CAAC;IACxB,OAAO,EAAE,gCAAgC;IACzC,cAAc,EAAE,UAAU,CAAC,IAAI;IAC/B,WAAW,EAAE,yDAAyD;IACtE,QAAQ,EAAE,WAAW;CACtB,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CRYPTO_WALLET: Monero.
|
|
3
|
+
*
|
|
4
|
+
* Block-wise base58 (Monero's own variant), then the real checksum: the
|
|
5
|
+
* last four payload bytes must equal the first four of Keccak-256 over the
|
|
6
|
+
* rest. Standard (95 chars, network 0x12) and subaddress (95 chars, 0x2a)
|
|
7
|
+
* decode to 69 bytes; integrated addresses (106 chars, 0x13) to 77.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=xmr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xmr.d.ts","sourceRoot":"","sources":["../../../../../src/detect/detectors/crypto/xmr.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CRYPTO_WALLET: Monero.
|
|
3
|
+
*
|
|
4
|
+
* Block-wise base58 (Monero's own variant), then the real checksum: the
|
|
5
|
+
* last four payload bytes must equal the first four of Keccak-256 over the
|
|
6
|
+
* rest. Standard (95 chars, network 0x12) and subaddress (95 chars, 0x2a)
|
|
7
|
+
* decode to 69 bytes; integrated addresses (106 chars, 0x13) to 77.
|
|
8
|
+
*/
|
|
9
|
+
import { keccak256 } from '../../../crypto/keccak256.js';
|
|
10
|
+
import { moneroBase58Decode } from '../../../encoding/base58monero.js';
|
|
11
|
+
import { registerDetector } from '../../registry.js';
|
|
12
|
+
import { CONFIDENCE, GLOBAL_REGION, invalid, valid } from '../../types.js';
|
|
13
|
+
const NETWORK_KINDS = {
|
|
14
|
+
0x12: 'standard',
|
|
15
|
+
0x2a: 'subaddress',
|
|
16
|
+
0x13: 'integrated',
|
|
17
|
+
};
|
|
18
|
+
function validateXmr(ctx) {
|
|
19
|
+
const raw = ctx.match[0];
|
|
20
|
+
const bytes = moneroBase58Decode(raw);
|
|
21
|
+
if (bytes === null)
|
|
22
|
+
return invalid('not Monero base58');
|
|
23
|
+
if (bytes.length !== 69 && bytes.length !== 77)
|
|
24
|
+
return invalid('unexpected payload size');
|
|
25
|
+
const kind = NETWORK_KINDS[bytes[0]];
|
|
26
|
+
if (kind === undefined)
|
|
27
|
+
return invalid('unknown network byte');
|
|
28
|
+
const body = bytes.slice(0, bytes.length - 4);
|
|
29
|
+
const checksum = bytes.slice(bytes.length - 4);
|
|
30
|
+
const expected = keccak256(body).slice(0, 4);
|
|
31
|
+
for (let i = 0; i < 4; i++) {
|
|
32
|
+
if (checksum[i] !== expected[i])
|
|
33
|
+
return invalid('keccak checksum failed');
|
|
34
|
+
}
|
|
35
|
+
return valid({
|
|
36
|
+
canonical: raw,
|
|
37
|
+
metadata: { chain: 'xmr', kind },
|
|
38
|
+
validator: 'monero-keccak',
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
registerDetector({
|
|
42
|
+
id: 'crypto-xmr',
|
|
43
|
+
entityType: 'CRYPTO_WALLET',
|
|
44
|
+
regions: [GLOBAL_REGION],
|
|
45
|
+
// 95-char standard/subaddress or 106-char integrated, first char 4 or 8.
|
|
46
|
+
pattern: /\b[48][1-9A-HJ-NP-Za-km-z]{94}(?:[1-9A-HJ-NP-Za-km-z]{11})?\b/g,
|
|
47
|
+
baseConfidence: CONFIDENCE.HIGH,
|
|
48
|
+
description: 'Monero addresses: block-wise base58 with the Keccak-256 checksum verified.',
|
|
49
|
+
validate: validateXmr,
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=xmr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xmr.js","sourceRoot":"","sources":["../../../../../src/detect/detectors/crypto/xmr.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG3E,MAAM,aAAa,GAAqC;IACtD,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,YAAY;CACnB,CAAC;AAEF,SAAS,WAAW,CAAC,GAAsB;IACzC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACxD,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAE1F,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,KAAK,CAAC;QACX,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;QAChC,SAAS,EAAE,eAAe;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,gBAAgB,CAAC;IACf,EAAE,EAAE,YAAY;IAChB,UAAU,EAAE,eAAe;IAC3B,OAAO,EAAE,CAAC,aAAa,CAAC;IACxB,yEAAyE;IACzE,OAAO,EAAE,gEAAgE;IACzE,cAAc,EAAE,UAAU,CAAC,IAAI;IAC/B,WAAW,EAAE,4EAA4E;IACzF,QAAQ,EAAE,WAAW;CACtB,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRIVERS_LICENSE — per-jurisdiction formats where a real rule exists.
|
|
3
|
+
*
|
|
4
|
+
* SPEC.md: "per-jurisdiction formats where a validator exists, low
|
|
5
|
+
* confidence otherwise." Two tiers, explicit about which is which:
|
|
6
|
+
*
|
|
7
|
+
* VERIFIABLE STRUCTURE (MEDIUM — a distinctive multi-part shape, but no
|
|
8
|
+
* checksum a third party can compute):
|
|
9
|
+
* • UK DVLA: 5 surname chars + decade digit + month pair (with the +50
|
|
10
|
+
* female offset) + day pair + year digit + 2 initials + 1 digit +
|
|
11
|
+
* 2 letters. The embedded date rules are genuinely checkable.
|
|
12
|
+
* • US states with a strongly-typed shape: CA (1 letter + 7 digits),
|
|
13
|
+
* NY (1 letter + 18 digits or 9 digits), IL (1 letter + 11 digits),
|
|
14
|
+
* FL/MI/MN/MD (1 letter + 12 digits), NJ (1 letter + 14 digits),
|
|
15
|
+
* WA (12 chars incl. letters), TX/OH-style plain digit runs are NOT
|
|
16
|
+
* claimed — a bare 8-digit run is any number.
|
|
17
|
+
*
|
|
18
|
+
* No public checksum exists for any of these, so MEDIUM is the ceiling and
|
|
19
|
+
* a labeled Stage 3 trigger ("DL#", "driver's license") is what will raise
|
|
20
|
+
* them later. Shapes that are just digit runs are deliberately excluded —
|
|
21
|
+
* emitting them would be the false-positive machine SPEC.md forbids.
|
|
22
|
+
*/
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=driversLicense.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driversLicense.d.ts","sourceRoot":"","sources":["../../../../../src/detect/detectors/documents/driversLicense.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRIVERS_LICENSE — per-jurisdiction formats where a real rule exists.
|
|
3
|
+
*
|
|
4
|
+
* SPEC.md: "per-jurisdiction formats where a validator exists, low
|
|
5
|
+
* confidence otherwise." Two tiers, explicit about which is which:
|
|
6
|
+
*
|
|
7
|
+
* VERIFIABLE STRUCTURE (MEDIUM — a distinctive multi-part shape, but no
|
|
8
|
+
* checksum a third party can compute):
|
|
9
|
+
* • UK DVLA: 5 surname chars + decade digit + month pair (with the +50
|
|
10
|
+
* female offset) + day pair + year digit + 2 initials + 1 digit +
|
|
11
|
+
* 2 letters. The embedded date rules are genuinely checkable.
|
|
12
|
+
* • US states with a strongly-typed shape: CA (1 letter + 7 digits),
|
|
13
|
+
* NY (1 letter + 18 digits or 9 digits), IL (1 letter + 11 digits),
|
|
14
|
+
* FL/MI/MN/MD (1 letter + 12 digits), NJ (1 letter + 14 digits),
|
|
15
|
+
* WA (12 chars incl. letters), TX/OH-style plain digit runs are NOT
|
|
16
|
+
* claimed — a bare 8-digit run is any number.
|
|
17
|
+
*
|
|
18
|
+
* No public checksum exists for any of these, so MEDIUM is the ceiling and
|
|
19
|
+
* a labeled Stage 3 trigger ("DL#", "driver's license") is what will raise
|
|
20
|
+
* them later. Shapes that are just digit runs are deliberately excluded —
|
|
21
|
+
* emitting them would be the false-positive machine SPEC.md forbids.
|
|
22
|
+
*/
|
|
23
|
+
import { registerDetector } from '../../registry.js';
|
|
24
|
+
import { CONFIDENCE, invalid, valid } from '../../types.js';
|
|
25
|
+
/** UK DVLA licence number: the date rules make it checkable. */
|
|
26
|
+
function validateUkDvla(value) {
|
|
27
|
+
const m = /^([A-Z9]{5})(\d)(\d\d)(\d\d)(\d)([A-Z9]{2})(\d)([A-Z]{2})$/.exec(value);
|
|
28
|
+
if (m === null)
|
|
29
|
+
return null;
|
|
30
|
+
const monthPair = Number(m[3]);
|
|
31
|
+
// Month 01–12 for male, 51–62 for female drivers.
|
|
32
|
+
const month = monthPair > 50 ? monthPair - 50 : monthPair;
|
|
33
|
+
if (month < 1 || month > 12)
|
|
34
|
+
return invalid('DVLA month field out of range');
|
|
35
|
+
const day = Number(m[4]);
|
|
36
|
+
if (day < 1 || day > 31)
|
|
37
|
+
return invalid('DVLA day field out of range');
|
|
38
|
+
return valid({
|
|
39
|
+
canonical: value,
|
|
40
|
+
metadata: { jurisdiction: 'GB', scheme: 'dvla' },
|
|
41
|
+
validator: 'dvla-structure',
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/** US state shapes with a letter anchor (never bare digit runs). */
|
|
45
|
+
const US_SHAPES = [
|
|
46
|
+
[/^[A-Z]\d{7}$/, 'CA'],
|
|
47
|
+
[/^[A-Z]\d{11}$/, 'IL'],
|
|
48
|
+
[/^[A-Z]\d{12}$/, 'FL'],
|
|
49
|
+
[/^[A-Z]\d{14}$/, 'NJ'],
|
|
50
|
+
[/^[A-Z]\d{18}$/, 'NY'],
|
|
51
|
+
];
|
|
52
|
+
function validateDl(ctx) {
|
|
53
|
+
const value = ctx.match[0].toUpperCase();
|
|
54
|
+
const dvla = validateUkDvla(value);
|
|
55
|
+
if (dvla !== null)
|
|
56
|
+
return dvla;
|
|
57
|
+
for (const [shape, state] of US_SHAPES) {
|
|
58
|
+
if (shape.test(value)) {
|
|
59
|
+
return valid({
|
|
60
|
+
canonical: value,
|
|
61
|
+
confidence: CONFIDENCE.LOW,
|
|
62
|
+
metadata: { jurisdiction: 'US', state },
|
|
63
|
+
validator: 'state-shape',
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return invalid('no jurisdiction shape matched');
|
|
68
|
+
}
|
|
69
|
+
registerDetector({
|
|
70
|
+
id: 'drivers-license',
|
|
71
|
+
entityType: 'DRIVERS_LICENSE',
|
|
72
|
+
regions: ['GB', 'US'],
|
|
73
|
+
// DVLA 16-char format or letter-anchored US state formats.
|
|
74
|
+
pattern: /\b(?:[A-Z9]{5}\d{6}[A-Z9]{2}\d[A-Z]{2}|[A-Za-z]\d{7}(?:\d{4,11})?)\b/g,
|
|
75
|
+
baseConfidence: CONFIDENCE.MEDIUM,
|
|
76
|
+
description: "Driver's licences: UK DVLA date-rule structure at MEDIUM, letter-anchored US shapes at LOW.",
|
|
77
|
+
validate: validateDl,
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=driversLicense.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driversLicense.js","sourceRoot":"","sources":["../../../../../src/detect/detectors/documents/driversLicense.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5D,gEAAgE;AAChE,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,CAAC,GAAG,4DAA4D,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnF,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,kDAAkD;IAClD,MAAM,KAAK,GAAG,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE;QAAE,OAAO,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC;QACX,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;QAChD,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,oEAAoE;AACpE,MAAM,SAAS,GAA2C;IACxD,CAAC,cAAc,EAAE,IAAI,CAAC;IACtB,CAAC,eAAe,EAAE,IAAI,CAAC;IACvB,CAAC,eAAe,EAAE,IAAI,CAAC;IACvB,CAAC,eAAe,EAAE,IAAI,CAAC;IACvB,CAAC,eAAe,EAAE,IAAI,CAAC;CACxB,CAAC;AAEF,SAAS,UAAU,CAAC,GAAsB;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAEzC,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE/B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;gBACX,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,UAAU,CAAC,GAAG;gBAC1B,QAAQ,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE;gBACvC,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,+BAA+B,CAAC,CAAC;AAClD,CAAC;AAED,gBAAgB,CAAC;IACf,EAAE,EAAE,iBAAiB;IACrB,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACrB,2DAA2D;IAC3D,OAAO,EAAE,uEAAuE;IAChF,cAAc,EAAE,UAAU,CAAC,MAAM;IACjC,WAAW,EAAE,6FAA6F;IAC1G,QAAQ,EAAE,UAAU;CACrB,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HEALTH_DATA — ICD-10/ICD-11 codes, SNOMED CT identifiers, and lab-result
|
|
3
|
+
* patterns.
|
|
4
|
+
*
|
|
5
|
+
* SPEC.md: "classify as HEALTH_DATA, off by default, on in Strict profile."
|
|
6
|
+
* The profile switch is Stage 4's job; here the candidates are emitted with
|
|
7
|
+
* correct confidence and rich metadata so the profile can gate them.
|
|
8
|
+
*
|
|
9
|
+
* Three sub-shapes, one detector:
|
|
10
|
+
* • ICD-10: letter + 2 digits + optional '.' + 1–4 alphanumerics
|
|
11
|
+
* ("E11.9", "S72.001A"). Distinctive only with the dot or in a labeled
|
|
12
|
+
* context, so undotted 3-char codes ("E11") are NOT matched — "B12" is
|
|
13
|
+
* a vitamin far more often than a diagnosis.
|
|
14
|
+
* • SNOMED CT: 6–18 digit SCTID whose structure is checkable — the LAST
|
|
15
|
+
* digit is a Verhoeff check digit over the preceding digits (that is
|
|
16
|
+
* what SNOMED actually uses: Verhoeff, not Luhn), and the two digits
|
|
17
|
+
* before it (the partition identifier) must be a defined pair.
|
|
18
|
+
* • Lab results: value + unit + reference range ("HbA1c 9.1 % (4.0–5.6)",
|
|
19
|
+
* "Glucose 182 mg/dL [70-99]"). The unit and range together are the
|
|
20
|
+
* signal; a bare number is nothing.
|
|
21
|
+
*/
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=healthData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"healthData.d.ts","sourceRoot":"","sources":["../../../../../src/detect/detectors/documents/healthData.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HEALTH_DATA — ICD-10/ICD-11 codes, SNOMED CT identifiers, and lab-result
|
|
3
|
+
* patterns.
|
|
4
|
+
*
|
|
5
|
+
* SPEC.md: "classify as HEALTH_DATA, off by default, on in Strict profile."
|
|
6
|
+
* The profile switch is Stage 4's job; here the candidates are emitted with
|
|
7
|
+
* correct confidence and rich metadata so the profile can gate them.
|
|
8
|
+
*
|
|
9
|
+
* Three sub-shapes, one detector:
|
|
10
|
+
* • ICD-10: letter + 2 digits + optional '.' + 1–4 alphanumerics
|
|
11
|
+
* ("E11.9", "S72.001A"). Distinctive only with the dot or in a labeled
|
|
12
|
+
* context, so undotted 3-char codes ("E11") are NOT matched — "B12" is
|
|
13
|
+
* a vitamin far more often than a diagnosis.
|
|
14
|
+
* • SNOMED CT: 6–18 digit SCTID whose structure is checkable — the LAST
|
|
15
|
+
* digit is a Verhoeff check digit over the preceding digits (that is
|
|
16
|
+
* what SNOMED actually uses: Verhoeff, not Luhn), and the two digits
|
|
17
|
+
* before it (the partition identifier) must be a defined pair.
|
|
18
|
+
* • Lab results: value + unit + reference range ("HbA1c 9.1 % (4.0–5.6)",
|
|
19
|
+
* "Glucose 182 mg/dL [70-99]"). The unit and range together are the
|
|
20
|
+
* signal; a bare number is nothing.
|
|
21
|
+
*/
|
|
22
|
+
import { verhoeffValid } from '../../../checksums/index.js';
|
|
23
|
+
import { registerDetector } from '../../registry.js';
|
|
24
|
+
import { CONFIDENCE, GLOBAL_REGION, invalid, valid } from '../../types.js';
|
|
25
|
+
/** Defined SNOMED CT partition identifiers (digits n-2..n-1 of an SCTID). */
|
|
26
|
+
const SNOMED_PARTITIONS = new Set(['00', '01', '02', '03', '04', '05', '10', '11', '12', '13', '14', '15']);
|
|
27
|
+
const ICD10 = /^[A-TV-Z]\d{2}\.[A-Z0-9]{1,4}$/;
|
|
28
|
+
const LAB_UNITS = /(?:mg\/dL|mmol\/L|g\/dL|IU\/L|U\/L|ng\/mL|pg\/mL|µg\/L|ug\/L|mIU\/L|µIU\/mL|uIU\/mL|%|mEq\/L|k\/µL|K\/uL|x10[³3]\/µL|fL|pg)/;
|
|
29
|
+
function validateHealth(ctx) {
|
|
30
|
+
const value = ctx.match[0];
|
|
31
|
+
// ICD-10 with the dot: structure alone is distinctive.
|
|
32
|
+
if (ICD10.test(value)) {
|
|
33
|
+
return valid({
|
|
34
|
+
canonical: value,
|
|
35
|
+
confidence: CONFIDENCE.MEDIUM,
|
|
36
|
+
metadata: { kind: 'icd10' },
|
|
37
|
+
validator: 'icd10-structure',
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
// SNOMED SCTID: partition pair defined AND Verhoeff closes.
|
|
41
|
+
if (/^\d{6,18}$/.test(value)) {
|
|
42
|
+
const partition = value.slice(-3, -1);
|
|
43
|
+
if (!SNOMED_PARTITIONS.has(partition))
|
|
44
|
+
return invalid('undefined SCTID partition');
|
|
45
|
+
if (!verhoeffValid(value))
|
|
46
|
+
return invalid('SCTID Verhoeff check failed');
|
|
47
|
+
return valid({
|
|
48
|
+
canonical: value,
|
|
49
|
+
confidence: CONFIDENCE.MEDIUM,
|
|
50
|
+
metadata: { kind: 'snomed', partition },
|
|
51
|
+
validator: 'sctid-verhoeff',
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
// Lab result: value + unit (+ optional bracketed/parenthesised range).
|
|
55
|
+
if (LAB_UNITS.test(value) && /\d/.test(value)) {
|
|
56
|
+
const hasRange = /[[(].*\d.*[-–].*\d.*[\])]/.test(value);
|
|
57
|
+
return valid({
|
|
58
|
+
confidence: hasRange ? CONFIDENCE.MEDIUM : CONFIDENCE.LOW,
|
|
59
|
+
metadata: { kind: 'lab-result', hasRange },
|
|
60
|
+
validator: 'lab-pattern',
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return invalid('no health-data shape matched');
|
|
64
|
+
}
|
|
65
|
+
registerDetector({
|
|
66
|
+
id: 'health-data',
|
|
67
|
+
entityType: 'HEALTH_DATA',
|
|
68
|
+
regions: [GLOBAL_REGION],
|
|
69
|
+
// ICD-10 dotted codes; SCTID digit runs (validated hard); measurement +
|
|
70
|
+
// unit with optional reference range. Ends with (?!\w), not \b: a match
|
|
71
|
+
// ending in '%' or ']' has no word boundary before a following space, so
|
|
72
|
+
// \b would silently kill every percent-unit lab value.
|
|
73
|
+
pattern: /\b(?:[A-TV-Z]\d{2}\.[A-Z0-9]{1,4}|\d{6,18}|\d+(?:\.\d+)?\s?(?:mg\/dL|mmol\/L|g\/dL|IU\/L|U\/L|ng\/mL|pg\/mL|µg\/L|ug\/L|mIU\/L|µIU\/mL|uIU\/mL|%|mEq\/L|k\/µL|K\/uL|fL)\s?(?:[[(]\s?\d+(?:\.\d+)?\s?[-–]\s?\d+(?:\.\d+)?\s?[\])])?)(?!\w)/g,
|
|
74
|
+
baseConfidence: CONFIDENCE.MEDIUM,
|
|
75
|
+
description: 'Health data: dotted ICD-10 codes, Verhoeff-checked SNOMED ids, lab values with units/ranges.',
|
|
76
|
+
validate: validateHealth,
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=healthData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"healthData.js","sourceRoot":"","sources":["../../../../../src/detect/detectors/documents/healthData.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG3E,6EAA6E;AAC7E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAE5G,MAAM,KAAK,GAAG,gCAAgC,CAAC;AAE/C,MAAM,SAAS,GACb,6HAA6H,CAAC;AAEhI,SAAS,cAAc,CAAC,GAAsB;IAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3B,uDAAuD;IACvD,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;YACX,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,UAAU,CAAC,MAAM;YAC7B,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3B,SAAS,EAAE,iBAAiB;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,4DAA4D;IAC5D,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,OAAO,CAAC,2BAA2B,CAAC,CAAC;QACnF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC,6BAA6B,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;YACX,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,UAAU,CAAC,MAAM;YAC7B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE;YACvC,SAAS,EAAE,gBAAgB;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,OAAO,KAAK,CAAC;YACX,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG;YACzD,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE;YAC1C,SAAS,EAAE,aAAa;SACzB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,8BAA8B,CAAC,CAAC;AACjD,CAAC;AAED,gBAAgB,CAAC;IACf,EAAE,EAAE,aAAa;IACjB,UAAU,EAAE,aAAa;IACzB,OAAO,EAAE,CAAC,aAAa,CAAC;IACxB,wEAAwE;IACxE,wEAAwE;IACxE,yEAAyE;IACzE,uDAAuD;IACvD,OAAO,EACL,4OAA4O;IAC9O,cAAc,EAAE,UAAU,CAAC,MAAM;IACjC,WAAW,EAAE,8FAA8F;IAC3G,QAAQ,EAAE,cAAc;CACzB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/detect/detectors/documents/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,UAAU,CAAC;AAClB,OAAO,YAAY,CAAC;AACpB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/detect/detectors/documents/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,UAAU,CAAC;AAClB,OAAO,YAAY,CAAC;AACpB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PASSPORT_MRZ — TD1, TD2 and TD3 machine-readable zones.
|
|
3
|
+
*
|
|
4
|
+
* SPEC.md: "machine-readable zone lines (TD1, TD2, TD3) with their check
|
|
5
|
+
* digits. MRZ is highly reliable to detect because every field is
|
|
6
|
+
* checksummed; treat a valid MRZ as maximum confidence."
|
|
7
|
+
*
|
|
8
|
+
* So every check digit is verified — document number, date of birth, expiry,
|
|
9
|
+
* and, on TD1/TD3, the COMPOSITE check over the concatenated fields. Only
|
|
10
|
+
* when all of them close does the detector emit, and then at MAXIMUM.
|
|
11
|
+
* A partially-checksummed MRZ is not emitted at reduced confidence: an MRZ
|
|
12
|
+
* with a broken check digit is a transcription artifact, not a passport.
|
|
13
|
+
*
|
|
14
|
+
* Layouts (fixed-width, '<' filler):
|
|
15
|
+
* TD1 3 lines × 30 — ID cards
|
|
16
|
+
* TD2 2 lines × 36 — older travel documents
|
|
17
|
+
* TD3 2 lines × 44 — passports
|
|
18
|
+
*/
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=passportMrz.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passportMrz.d.ts","sourceRoot":"","sources":["../../../../../src/detect/detectors/documents/passportMrz.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PASSPORT_MRZ — TD1, TD2 and TD3 machine-readable zones.
|
|
3
|
+
*
|
|
4
|
+
* SPEC.md: "machine-readable zone lines (TD1, TD2, TD3) with their check
|
|
5
|
+
* digits. MRZ is highly reliable to detect because every field is
|
|
6
|
+
* checksummed; treat a valid MRZ as maximum confidence."
|
|
7
|
+
*
|
|
8
|
+
* So every check digit is verified — document number, date of birth, expiry,
|
|
9
|
+
* and, on TD1/TD3, the COMPOSITE check over the concatenated fields. Only
|
|
10
|
+
* when all of them close does the detector emit, and then at MAXIMUM.
|
|
11
|
+
* A partially-checksummed MRZ is not emitted at reduced confidence: an MRZ
|
|
12
|
+
* with a broken check digit is a transcription artifact, not a passport.
|
|
13
|
+
*
|
|
14
|
+
* Layouts (fixed-width, '<' filler):
|
|
15
|
+
* TD1 3 lines × 30 — ID cards
|
|
16
|
+
* TD2 2 lines × 36 — older travel documents
|
|
17
|
+
* TD3 2 lines × 44 — passports
|
|
18
|
+
*/
|
|
19
|
+
import { mrzCheckValid } from '../../../checksums/index.js';
|
|
20
|
+
import { registerDetector } from '../../registry.js';
|
|
21
|
+
import { CONFIDENCE, GLOBAL_REGION, invalid, valid } from '../../types.js';
|
|
22
|
+
/** Strip the filler from a fixed-width field. */
|
|
23
|
+
const trim = (s) => s.replace(/<+$/, '').replace(/</g, ' ').trim();
|
|
24
|
+
/** YYMMDD sanity — a real date, not merely six digits. */
|
|
25
|
+
function plausibleDate(yymmdd) {
|
|
26
|
+
if (!/^\d{6}$/.test(yymmdd))
|
|
27
|
+
return false;
|
|
28
|
+
const month = Number(yymmdd.slice(2, 4));
|
|
29
|
+
const day = Number(yymmdd.slice(4, 6));
|
|
30
|
+
return month >= 1 && month <= 12 && day >= 1 && day <= 31;
|
|
31
|
+
}
|
|
32
|
+
/** TD3: two 44-character lines (passport). */
|
|
33
|
+
function validateTd3(l1, l2) {
|
|
34
|
+
if (!/^P[A-Z<]/.test(l1))
|
|
35
|
+
return 'TD3 line 1 is not a passport document code';
|
|
36
|
+
const documentNumber = l2.slice(0, 9);
|
|
37
|
+
const docCheck = l2[9];
|
|
38
|
+
const nationality = l2.slice(10, 13);
|
|
39
|
+
const birthDate = l2.slice(13, 19);
|
|
40
|
+
const birthCheck = l2[19];
|
|
41
|
+
const sex = l2[20];
|
|
42
|
+
const expiryDate = l2.slice(21, 27);
|
|
43
|
+
const expiryCheck = l2[27];
|
|
44
|
+
const optional = l2.slice(28, 42);
|
|
45
|
+
const optionalCheck = l2[42];
|
|
46
|
+
const compositeCheck = l2[43];
|
|
47
|
+
if (!mrzCheckValid(documentNumber, docCheck))
|
|
48
|
+
return 'document-number check digit failed';
|
|
49
|
+
if (!plausibleDate(birthDate))
|
|
50
|
+
return 'implausible birth date';
|
|
51
|
+
if (!mrzCheckValid(birthDate, birthCheck))
|
|
52
|
+
return 'birth-date check digit failed';
|
|
53
|
+
if (!plausibleDate(expiryDate))
|
|
54
|
+
return 'implausible expiry date';
|
|
55
|
+
if (!mrzCheckValid(expiryDate, expiryCheck))
|
|
56
|
+
return 'expiry-date check digit failed';
|
|
57
|
+
if (!mrzCheckValid(optional, optionalCheck))
|
|
58
|
+
return 'optional-data check digit failed';
|
|
59
|
+
const composite = `${documentNumber}${docCheck}${birthDate}${birthCheck}${expiryDate}${expiryCheck}${optional}${optionalCheck}`;
|
|
60
|
+
if (!mrzCheckValid(composite, compositeCheck))
|
|
61
|
+
return 'composite check digit failed';
|
|
62
|
+
return {
|
|
63
|
+
format: 'TD3',
|
|
64
|
+
issuingState: l1.slice(2, 5).replace(/</g, ''),
|
|
65
|
+
documentNumber: trim(documentNumber),
|
|
66
|
+
nationality: nationality.replace(/</g, ''),
|
|
67
|
+
birthDate,
|
|
68
|
+
sex,
|
|
69
|
+
expiryDate,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/** TD2: two 36-character lines. */
|
|
73
|
+
function validateTd2(l1, l2) {
|
|
74
|
+
const documentNumber = l2.slice(0, 9);
|
|
75
|
+
const docCheck = l2[9];
|
|
76
|
+
const nationality = l2.slice(10, 13);
|
|
77
|
+
const birthDate = l2.slice(13, 19);
|
|
78
|
+
const birthCheck = l2[19];
|
|
79
|
+
const sex = l2[20];
|
|
80
|
+
const expiryDate = l2.slice(21, 27);
|
|
81
|
+
const expiryCheck = l2[27];
|
|
82
|
+
const optional = l2.slice(28, 35);
|
|
83
|
+
const compositeCheck = l2[35];
|
|
84
|
+
if (!mrzCheckValid(documentNumber, docCheck))
|
|
85
|
+
return 'document-number check digit failed';
|
|
86
|
+
if (!plausibleDate(birthDate))
|
|
87
|
+
return 'implausible birth date';
|
|
88
|
+
if (!mrzCheckValid(birthDate, birthCheck))
|
|
89
|
+
return 'birth-date check digit failed';
|
|
90
|
+
if (!plausibleDate(expiryDate))
|
|
91
|
+
return 'implausible expiry date';
|
|
92
|
+
if (!mrzCheckValid(expiryDate, expiryCheck))
|
|
93
|
+
return 'expiry-date check digit failed';
|
|
94
|
+
const composite = `${documentNumber}${docCheck}${birthDate}${birthCheck}${expiryDate}${expiryCheck}${optional}`;
|
|
95
|
+
if (!mrzCheckValid(composite, compositeCheck))
|
|
96
|
+
return 'composite check digit failed';
|
|
97
|
+
return {
|
|
98
|
+
format: 'TD2',
|
|
99
|
+
issuingState: l1.slice(2, 5).replace(/</g, ''),
|
|
100
|
+
documentNumber: trim(documentNumber),
|
|
101
|
+
nationality: nationality.replace(/</g, ''),
|
|
102
|
+
birthDate,
|
|
103
|
+
sex,
|
|
104
|
+
expiryDate,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/** TD1: three 30-character lines (ID cards). */
|
|
108
|
+
function validateTd1(l1, l2) {
|
|
109
|
+
const documentNumber = l1.slice(5, 14);
|
|
110
|
+
const docCheck = l1[14];
|
|
111
|
+
const optional1 = l1.slice(15, 30);
|
|
112
|
+
const birthDate = l2.slice(0, 6);
|
|
113
|
+
const birthCheck = l2[6];
|
|
114
|
+
const sex = l2[7];
|
|
115
|
+
const expiryDate = l2.slice(8, 14);
|
|
116
|
+
const expiryCheck = l2[14];
|
|
117
|
+
const nationality = l2.slice(15, 18);
|
|
118
|
+
const optional2 = l2.slice(18, 29);
|
|
119
|
+
const compositeCheck = l2[29];
|
|
120
|
+
if (!mrzCheckValid(documentNumber, docCheck))
|
|
121
|
+
return 'document-number check digit failed';
|
|
122
|
+
if (!plausibleDate(birthDate))
|
|
123
|
+
return 'implausible birth date';
|
|
124
|
+
if (!mrzCheckValid(birthDate, birthCheck))
|
|
125
|
+
return 'birth-date check digit failed';
|
|
126
|
+
if (!plausibleDate(expiryDate))
|
|
127
|
+
return 'implausible expiry date';
|
|
128
|
+
if (!mrzCheckValid(expiryDate, expiryCheck))
|
|
129
|
+
return 'expiry-date check digit failed';
|
|
130
|
+
const composite = `${documentNumber}${docCheck}${optional1}${birthDate}${birthCheck}${expiryDate}${expiryCheck}${optional2}`;
|
|
131
|
+
if (!mrzCheckValid(composite, compositeCheck))
|
|
132
|
+
return 'composite check digit failed';
|
|
133
|
+
return {
|
|
134
|
+
format: 'TD1',
|
|
135
|
+
issuingState: l1.slice(2, 5).replace(/</g, ''),
|
|
136
|
+
documentNumber: trim(documentNumber),
|
|
137
|
+
nationality: nationality.replace(/</g, ''),
|
|
138
|
+
birthDate,
|
|
139
|
+
sex,
|
|
140
|
+
expiryDate,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function validateMrz(ctx) {
|
|
144
|
+
const lines = ctx.match[0].split(/\r?\n/).map((l) => l.trim()).filter((l) => l.length > 0);
|
|
145
|
+
let result;
|
|
146
|
+
if (lines.length >= 3 && lines[0].length === 30 && lines[1].length === 30 && lines[2].length === 30) {
|
|
147
|
+
result = validateTd1(lines[0], lines[1]);
|
|
148
|
+
}
|
|
149
|
+
else if (lines.length >= 2 && lines[0].length === 44 && lines[1].length === 44) {
|
|
150
|
+
result = validateTd3(lines[0], lines[1]);
|
|
151
|
+
}
|
|
152
|
+
else if (lines.length >= 2 && lines[0].length === 36 && lines[1].length === 36) {
|
|
153
|
+
result = validateTd2(lines[0], lines[1]);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
return invalid('no recognized MRZ line geometry');
|
|
157
|
+
}
|
|
158
|
+
if (typeof result === 'string')
|
|
159
|
+
return invalid(result);
|
|
160
|
+
// The pattern anchors on `(?:^|\n)` and therefore CONSUMES the preceding
|
|
161
|
+
// newline, which belongs to the line before the MRZ rather than to the MRZ
|
|
162
|
+
// itself. Left in the span it would be masked along with the identifier,
|
|
163
|
+
// splicing the zone onto whatever came before it. Narrow past it — this is
|
|
164
|
+
// what `span` exists for: anchoring context the pattern needed but which
|
|
165
|
+
// must not be masked.
|
|
166
|
+
const leading = /^\s+/.exec(ctx.match[0])?.[0].length ?? 0;
|
|
167
|
+
return valid({
|
|
168
|
+
...(leading > 0 ? { span: { start: ctx.start + leading, end: ctx.end } } : {}),
|
|
169
|
+
confidence: CONFIDENCE.MAXIMUM,
|
|
170
|
+
metadata: {
|
|
171
|
+
format: result.format,
|
|
172
|
+
issuingState: result.issuingState,
|
|
173
|
+
nationality: result.nationality,
|
|
174
|
+
// The document number is the identifier; dates and sex are carried for
|
|
175
|
+
// the review UI and for M4's format-preserving substitution.
|
|
176
|
+
birthDate: result.birthDate,
|
|
177
|
+
expiryDate: result.expiryDate,
|
|
178
|
+
sex: result.sex,
|
|
179
|
+
},
|
|
180
|
+
validator: 'icao9303-all-check-digits',
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
registerDetector({
|
|
184
|
+
id: 'passport-mrz',
|
|
185
|
+
entityType: 'PASSPORT_MRZ',
|
|
186
|
+
regions: [GLOBAL_REGION],
|
|
187
|
+
// Two or three consecutive fixed-width MRZ lines. The alternation pins the
|
|
188
|
+
// exact widths so ordinary uppercase text cannot match.
|
|
189
|
+
pattern: /(?:^|\n)(?:[A-Z0-9<]{30}\r?\n[A-Z0-9<]{30}\r?\n[A-Z0-9<]{30}|[A-Z0-9<]{44}\r?\n[A-Z0-9<]{44}|[A-Z0-9<]{36}\r?\n[A-Z0-9<]{36})/g,
|
|
190
|
+
baseConfidence: CONFIDENCE.MAXIMUM,
|
|
191
|
+
description: 'Passport and ID machine-readable zones (TD1/TD2/TD3) with every check digit verified.',
|
|
192
|
+
validate: validateMrz,
|
|
193
|
+
});
|
|
194
|
+
//# sourceMappingURL=passportMrz.js.map
|