@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,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transform 1: STRIP INVISIBLES.
|
|
3
|
+
*
|
|
4
|
+
* Removes zero-width and bidi control characters:
|
|
5
|
+
* U+200B–U+200F (ZWSP, ZWNJ, ZWJ, LRM, RLM)
|
|
6
|
+
* U+202A–U+202E (bidi embedding/override controls)
|
|
7
|
+
* U+2060–U+2064 (word joiner, invisible operators)
|
|
8
|
+
* U+FEFF (BOM / zero-width no-break space)
|
|
9
|
+
* U+00AD (soft hyphen)
|
|
10
|
+
*
|
|
11
|
+
* These are pure noise for detection and are the classic obfuscation vector
|
|
12
|
+
* (a ZWSP dropped into the middle of "john@example.com"), so they go first —
|
|
13
|
+
* they interfere with every transform downstream.
|
|
14
|
+
*
|
|
15
|
+
* TWO CHARACTERS IN THE SET ARE SOMETIMES STRUCTURAL, NOT NOISE:
|
|
16
|
+
*
|
|
17
|
+
* THE EMOJI EXCEPTION — ZWJ (U+200D) inside an emoji sequence joins the
|
|
18
|
+
* sequence together; stripping it would corrupt 👨👩👧 into 👨👩👧. Per UAX #29,
|
|
19
|
+
* ZWJ and ZWNJ are the only characters in the strip set that can sit INSIDE
|
|
20
|
+
* a grapheme cluster (all the others have Grapheme_Cluster_Break=Control and
|
|
21
|
+
* form their own clusters), so the rule is: leave any cluster containing an
|
|
22
|
+
* Extended_Pictographic code point completely untouched.
|
|
23
|
+
*
|
|
24
|
+
* THE JOINING-SCRIPT EXCEPTION — ZWNJ (U+200C) is linguistically MEANINGFUL
|
|
25
|
+
* in scripts with cursive joining or conjunct formation: in Persian/Urdu and
|
|
26
|
+
* other Arabic-script languages it controls letter shaping and word
|
|
27
|
+
* segmentation (میخواهم), and in Indic scripts it suppresses conjuncts
|
|
28
|
+
* (क्ष renders dead consonant + ssa instead of the kṣa ligature). Stripping
|
|
29
|
+
* it there CORRUPTS the text. Rule (mirroring the emoji reasoning): preserve
|
|
30
|
+
* ZWNJ when its nearest substantive neighbors on BOTH sides — skipping other
|
|
31
|
+
* invisibles and combining marks — belong to a ZWNJ-using script. Everywhere
|
|
32
|
+
* else (Latin ligature suppression, obfuscation, stray controls) it is noise
|
|
33
|
+
* and is stripped.
|
|
34
|
+
*/
|
|
35
|
+
import { MappedTextBuilder, type TransformStepResult, type StepChange } from '../offsetMap.js';
|
|
36
|
+
import { graphemeSegmenter } from './graphemes.js';
|
|
37
|
+
|
|
38
|
+
// The character class is assembled from code points rather than written as
|
|
39
|
+
// literals so no invisible characters hide in this source file.
|
|
40
|
+
const cc = (cp: number): string => String.fromCharCode(cp);
|
|
41
|
+
const INVISIBLE = new RegExp(
|
|
42
|
+
`[${cc(0x00ad)}${cc(0x200b)}-${cc(0x200f)}${cc(0x202a)}-${cc(0x202e)}` +
|
|
43
|
+
`${cc(0x2060)}-${cc(0x2064)}${cc(0xfeff)}]`,
|
|
44
|
+
);
|
|
45
|
+
const EXTENDED_PICTOGRAPHIC = /\p{Extended_Pictographic}/u;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Scripts in which ZWNJ carries meaning: the cursive-joining family (Arabic
|
|
49
|
+
* script as used by Persian, Urdu, Kurdish, …; Syriac; Mongolian) and the
|
|
50
|
+
* Brahmic/Indic family (conjunct and ligature control). Note these are
|
|
51
|
+
* Unicode Script properties, deliberately independent of the coarser
|
|
52
|
+
* ScriptName buckets used for dominance elsewhere.
|
|
53
|
+
*/
|
|
54
|
+
const ZWNJ_SCRIPT =
|
|
55
|
+
/[\p{Script=Arabic}\p{Script=Syriac}\p{Script=Mongolian}\p{Script=Devanagari}\p{Script=Bengali}\p{Script=Gurmukhi}\p{Script=Gujarati}\p{Script=Oriya}\p{Script=Tamil}\p{Script=Telugu}\p{Script=Kannada}\p{Script=Malayalam}\p{Script=Sinhala}\p{Script=Myanmar}\p{Script=Khmer}]/u;
|
|
56
|
+
const COMBINING_MARK = /\p{M}/u;
|
|
57
|
+
|
|
58
|
+
function isInvisible(cp: number): boolean {
|
|
59
|
+
return (
|
|
60
|
+
cp === 0x00ad ||
|
|
61
|
+
(cp >= 0x200b && cp <= 0x200f) ||
|
|
62
|
+
(cp >= 0x202a && cp <= 0x202e) ||
|
|
63
|
+
(cp >= 0x2060 && cp <= 0x2064) ||
|
|
64
|
+
cp === 0xfeff
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Walk from `from` in `step` direction to the nearest code point that is
|
|
70
|
+
* neither a strippable invisible nor a combining mark, and report whether it
|
|
71
|
+
* belongs to a ZWNJ-using script.
|
|
72
|
+
*
|
|
73
|
+
* Marks are skippable because ZWNJ legitimately follows them (the canonical
|
|
74
|
+
* Hindi use is ZWNJ directly after the virama; Arabic harakat may also sit
|
|
75
|
+
* between the letter and the ZWNJ) — but a mark that itself carries a
|
|
76
|
+
* ZWNJ-script Script property (like the virama, Script=Devanagari) already
|
|
77
|
+
* answers the question and short-circuits to true.
|
|
78
|
+
*/
|
|
79
|
+
function neighborSupportsZwnj(text: string, from: number, step: -1 | 1): boolean {
|
|
80
|
+
let i = from;
|
|
81
|
+
while (step === -1 ? i > 0 : i < text.length) {
|
|
82
|
+
let j: number;
|
|
83
|
+
let cp: number;
|
|
84
|
+
if (step === -1) {
|
|
85
|
+
// Move one code point left, respecting surrogate pairs.
|
|
86
|
+
j = i - 1;
|
|
87
|
+
cp = text.charCodeAt(j);
|
|
88
|
+
if (cp >= 0xdc00 && cp <= 0xdfff && j > 0) {
|
|
89
|
+
const high = text.charCodeAt(j - 1);
|
|
90
|
+
if (high >= 0xd800 && high <= 0xdbff) {
|
|
91
|
+
j -= 1;
|
|
92
|
+
cp = text.codePointAt(j)!;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
} else {
|
|
96
|
+
j = i;
|
|
97
|
+
cp = text.codePointAt(j)!;
|
|
98
|
+
}
|
|
99
|
+
const char = String.fromCodePoint(cp);
|
|
100
|
+
if (ZWNJ_SCRIPT.test(char)) return true;
|
|
101
|
+
if (!isInvisible(cp) && !COMBINING_MARK.test(char)) return false;
|
|
102
|
+
i = step === -1 ? j : j + char.length;
|
|
103
|
+
}
|
|
104
|
+
return false; // ran off the edge of the text
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** True when the ZWNJ at `zwnjIndex` sits between ZWNJ-using-script text. */
|
|
108
|
+
function shouldPreserveZwnj(text: string, zwnjIndex: number): boolean {
|
|
109
|
+
return neighborSupportsZwnj(text, zwnjIndex, -1) && neighborSupportsZwnj(text, zwnjIndex + 1, 1);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export function stripInvisibles(text: string): TransformStepResult | null {
|
|
113
|
+
if (!INVISIBLE.test(text)) return null; // fast path: nothing to strip
|
|
114
|
+
|
|
115
|
+
const builder = new MappedTextBuilder();
|
|
116
|
+
const changes: StepChange[] = [];
|
|
117
|
+
|
|
118
|
+
for (const { segment, index } of graphemeSegmenter.segment(text)) {
|
|
119
|
+
const segmentEnd = index + segment.length;
|
|
120
|
+
if (!INVISIBLE.test(segment)) {
|
|
121
|
+
builder.copyVerbatim(text, index, segmentEnd);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (EXTENDED_PICTOGRAPHIC.test(segment)) {
|
|
125
|
+
// Emoji cluster: its ZWJs (and any variation selectors) are structural.
|
|
126
|
+
builder.copyVerbatim(text, index, segmentEnd);
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
// Non-emoji cluster containing at least one invisible: strip code-point-wise.
|
|
130
|
+
let pos = index;
|
|
131
|
+
for (const char of segment) {
|
|
132
|
+
const charEnd = pos + char.length;
|
|
133
|
+
const cp = char.codePointAt(0)!;
|
|
134
|
+
if (cp === 0x200c && shouldPreserveZwnj(text, pos)) {
|
|
135
|
+
// Joining-script ZWNJ: structural, keep it (see header).
|
|
136
|
+
builder.copyVerbatim(text, pos, charEnd);
|
|
137
|
+
} else if (isInvisible(cp)) {
|
|
138
|
+
builder.deleteRange(pos, charEnd);
|
|
139
|
+
changes.push({
|
|
140
|
+
kind: 'strip-invisibles',
|
|
141
|
+
start: pos,
|
|
142
|
+
end: charEnd,
|
|
143
|
+
before: char,
|
|
144
|
+
after: '',
|
|
145
|
+
});
|
|
146
|
+
} else {
|
|
147
|
+
builder.copyVerbatim(text, pos, charEnd);
|
|
148
|
+
}
|
|
149
|
+
pos = charEnd;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Every invisible was structural (emoji ZWJ / joining-script ZWNJ).
|
|
154
|
+
if (changes.length === 0) return null;
|
|
155
|
+
|
|
156
|
+
const { text: out, map } = builder.finish(text.length);
|
|
157
|
+
return { text: out, map, changes };
|
|
158
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transform 4: WHITESPACE AND PUNCTUATION NORMALIZATION.
|
|
3
|
+
*
|
|
4
|
+
* • exotic space characters → U+0020 regular space
|
|
5
|
+
* • dash variants (hyphen, non-breaking hyphen, figure/en/em dash,
|
|
6
|
+
* horizontal bar, minus sign) → '-' hyphen-minus
|
|
7
|
+
* • curly and angle quotes → straight ' and "
|
|
8
|
+
*
|
|
9
|
+
* All replacements are strictly 1 code unit → 1 code unit, so this transform
|
|
10
|
+
* never changes offsets relative to its input. Runs of spaces are NOT
|
|
11
|
+
* collapsed and nothing is trimmed — that would change offsets in ways that
|
|
12
|
+
* damage code and formatted text.
|
|
13
|
+
*
|
|
14
|
+
* Most exotic spaces are already folded to U+0020 by NFKC; this transform
|
|
15
|
+
* exists so the guarantee holds even when the NFKC step is disabled, and for
|
|
16
|
+
* the few characters NFKC leaves alone (e.g. U+1680 OGHAM SPACE MARK and the
|
|
17
|
+
* dash/quote variants, which are not compatibility-decomposable).
|
|
18
|
+
*/
|
|
19
|
+
import { MappedTextBuilder, type TransformStepResult, type StepChange } from '../offsetMap.js';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* code unit → replacement. Every source is a BMP non-surrogate code point and
|
|
23
|
+
* every replacement is a single ASCII character, keeping the transform 1:1.
|
|
24
|
+
* Invisible-looking space characters are keyed by code point to keep literal
|
|
25
|
+
* invisibles out of this file; dashes and quotes are visible and literal.
|
|
26
|
+
*/
|
|
27
|
+
const REPLACEMENTS: ReadonlyMap<number, string> = new Map<number, string>([
|
|
28
|
+
// Spaces (the complete Zs category except U+0020 itself).
|
|
29
|
+
[0x00a0, ' '], // NO-BREAK SPACE
|
|
30
|
+
[0x1680, ' '], // OGHAM SPACE MARK
|
|
31
|
+
[0x2000, ' '], // EN QUAD
|
|
32
|
+
[0x2001, ' '], // EM QUAD
|
|
33
|
+
[0x2002, ' '], // EN SPACE
|
|
34
|
+
[0x2003, ' '], // EM SPACE
|
|
35
|
+
[0x2004, ' '], // THREE-PER-EM SPACE
|
|
36
|
+
[0x2005, ' '], // FOUR-PER-EM SPACE
|
|
37
|
+
[0x2006, ' '], // SIX-PER-EM SPACE
|
|
38
|
+
[0x2007, ' '], // FIGURE SPACE
|
|
39
|
+
[0x2008, ' '], // PUNCTUATION SPACE
|
|
40
|
+
[0x2009, ' '], // THIN SPACE
|
|
41
|
+
[0x200a, ' '], // HAIR SPACE
|
|
42
|
+
[0x202f, ' '], // NARROW NO-BREAK SPACE
|
|
43
|
+
[0x205f, ' '], // MEDIUM MATHEMATICAL SPACE
|
|
44
|
+
[0x3000, ' '], // IDEOGRAPHIC SPACE
|
|
45
|
+
// Dashes.
|
|
46
|
+
['‐'.charCodeAt(0), '-'], // U+2010 HYPHEN
|
|
47
|
+
['‑'.charCodeAt(0), '-'], // U+2011 NON-BREAKING HYPHEN
|
|
48
|
+
['‒'.charCodeAt(0), '-'], // U+2012 FIGURE DASH
|
|
49
|
+
['–'.charCodeAt(0), '-'], // U+2013 EN DASH
|
|
50
|
+
['—'.charCodeAt(0), '-'], // U+2014 EM DASH
|
|
51
|
+
['―'.charCodeAt(0), '-'], // U+2015 HORIZONTAL BAR
|
|
52
|
+
['−'.charCodeAt(0), '-'], // U+2212 MINUS SIGN
|
|
53
|
+
// Single quotes.
|
|
54
|
+
['‘'.charCodeAt(0), "'"], // U+2018
|
|
55
|
+
['’'.charCodeAt(0), "'"], // U+2019
|
|
56
|
+
['‚'.charCodeAt(0), "'"], // U+201A
|
|
57
|
+
['‛'.charCodeAt(0), "'"], // U+201B
|
|
58
|
+
['‹'.charCodeAt(0), "'"], // U+2039
|
|
59
|
+
['›'.charCodeAt(0), "'"], // U+203A
|
|
60
|
+
// Double quotes.
|
|
61
|
+
['“'.charCodeAt(0), '"'], // U+201C
|
|
62
|
+
['”'.charCodeAt(0), '"'], // U+201D
|
|
63
|
+
['„'.charCodeAt(0), '"'], // U+201E
|
|
64
|
+
['‟'.charCodeAt(0), '"'], // U+201F
|
|
65
|
+
['«'.charCodeAt(0), '"'], // U+00AB
|
|
66
|
+
['»'.charCodeAt(0), '"'], // U+00BB
|
|
67
|
+
]);
|
|
68
|
+
|
|
69
|
+
export function normalizeWhitespacePunct(text: string): TransformStepResult | null {
|
|
70
|
+
// Fast path: scan for the first replaceable unit; most text has none.
|
|
71
|
+
let first = -1;
|
|
72
|
+
for (let i = 0; i < text.length; i++) {
|
|
73
|
+
if (REPLACEMENTS.has(text.charCodeAt(i))) {
|
|
74
|
+
first = i;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (first === -1) return null;
|
|
79
|
+
|
|
80
|
+
const builder = new MappedTextBuilder();
|
|
81
|
+
const changes: StepChange[] = [];
|
|
82
|
+
let cursor = 0;
|
|
83
|
+
for (let i = first; i < text.length; i++) {
|
|
84
|
+
const replacement = REPLACEMENTS.get(text.charCodeAt(i));
|
|
85
|
+
if (replacement === undefined) continue;
|
|
86
|
+
builder.copyVerbatim(text, cursor, i);
|
|
87
|
+
builder.replaceRange(replacement, i, i + 1);
|
|
88
|
+
changes.push({
|
|
89
|
+
kind: 'whitespace-punct',
|
|
90
|
+
start: i,
|
|
91
|
+
end: i + 1,
|
|
92
|
+
before: text[i]!,
|
|
93
|
+
after: replacement,
|
|
94
|
+
});
|
|
95
|
+
cursor = i + 1;
|
|
96
|
+
}
|
|
97
|
+
builder.copyVerbatim(text, cursor, text.length);
|
|
98
|
+
const { text: out, map } = builder.finish(text.length);
|
|
99
|
+
return { text: out, map, changes };
|
|
100
|
+
}
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the whole Discretion project.
|
|
3
|
+
*
|
|
4
|
+
* These are contracts that later milestones (detectors, fusion, vault,
|
|
5
|
+
* substitution, egress guard, extension, playground) depend on. This file
|
|
6
|
+
* defines TYPES ONLY — no logic, no constants with behavior.
|
|
7
|
+
*
|
|
8
|
+
* EntityType membership comes directly from SPEC.md: the Stage 1 "Validated
|
|
9
|
+
* identifier detection" detector list and the Stage 2 NER types. Names use
|
|
10
|
+
* the spec's own SCREAMING_SNAKE_CASE spelling so a detector's declared
|
|
11
|
+
* entity type reads identically in the spec and in the code.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
15
|
+
// Entities
|
|
16
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Every entity type the pipeline can detect, grouped as SPEC.md groups them.
|
|
20
|
+
*
|
|
21
|
+
* Three deliberate design choices, each recorded in ARCHITECTURE.md:
|
|
22
|
+
*
|
|
23
|
+
* 1. National identifiers are FAMILIES, not one member per country. SPEC.md
|
|
24
|
+
* requires that "adding a new national identifier must require touching
|
|
25
|
+
* exactly one new file" — a per-country union member would force every
|
|
26
|
+
* new scheme to edit this file too, breaking that requirement. The
|
|
27
|
+
* concrete scheme (SSN, TCKN, PESEL, Aadhaar, …) and its country travel
|
|
28
|
+
* in Candidate.metadata. The substitution section's singular
|
|
29
|
+
* "NATIONAL_ID → a value passing that country's checksum" confirms the
|
|
30
|
+
* family reading.
|
|
31
|
+
* 2. Tax and VAT registrations are split out from NATIONAL_ID because their
|
|
32
|
+
* sensitivity genuinely differs — a company VAT number is often public
|
|
33
|
+
* registry data, a personal national ID never is — so the sensitivity
|
|
34
|
+
* profiles must be able to threshold them independently.
|
|
35
|
+
* 3. PEM private keys get their own member rather than sharing API_KEY.
|
|
36
|
+
* SPEC.md lists them in the same bullet, but a leaked private key and a
|
|
37
|
+
* leaked API key differ in blast radius and in how each is surrogated.
|
|
38
|
+
*/
|
|
39
|
+
export type EntityType =
|
|
40
|
+
// ── Contact and network ──
|
|
41
|
+
| 'EMAIL'
|
|
42
|
+
| 'PHONE'
|
|
43
|
+
| 'IP_ADDRESS'
|
|
44
|
+
| 'MAC_ADDRESS'
|
|
45
|
+
| 'URL_WITH_CREDENTIALS'
|
|
46
|
+
// ── Financial ──
|
|
47
|
+
| 'CREDIT_CARD'
|
|
48
|
+
| 'IBAN'
|
|
49
|
+
| 'SWIFT_BIC'
|
|
50
|
+
| 'US_ROUTING_NUMBER'
|
|
51
|
+
| 'UK_SORT_CODE'
|
|
52
|
+
| 'CA_TRANSIT_NUMBER'
|
|
53
|
+
| 'AU_BSB'
|
|
54
|
+
| 'IN_IFSC'
|
|
55
|
+
| 'BR_AGENCIA'
|
|
56
|
+
| 'CRYPTO_WALLET'
|
|
57
|
+
// ── National and tax identifiers (families — see note 1 above) ──
|
|
58
|
+
| 'NATIONAL_ID'
|
|
59
|
+
| 'TAX_ID'
|
|
60
|
+
| 'VAT_NUMBER'
|
|
61
|
+
// ── Documents ──
|
|
62
|
+
| 'PASSPORT_MRZ'
|
|
63
|
+
| 'DRIVERS_LICENSE'
|
|
64
|
+
| 'VIN'
|
|
65
|
+
| 'US_NPI'
|
|
66
|
+
// ── Health (ICD-10/ICD-11, SNOMED, lab results) ──
|
|
67
|
+
| 'HEALTH_DATA'
|
|
68
|
+
// ── Secrets and credentials ──
|
|
69
|
+
| 'API_KEY'
|
|
70
|
+
| 'PRIVATE_KEY'
|
|
71
|
+
| 'JWT'
|
|
72
|
+
| 'GENERIC_SECRET'
|
|
73
|
+
| 'CONNECTION_STRING'
|
|
74
|
+
// ── Location ──
|
|
75
|
+
| 'POSTAL_CODE'
|
|
76
|
+
| 'STREET_ADDRESS'
|
|
77
|
+
| 'COORDINATES'
|
|
78
|
+
// ── Stage 2: named-entity recognition ──
|
|
79
|
+
| 'PERSON'
|
|
80
|
+
| 'ORG'
|
|
81
|
+
| 'LOCATION'
|
|
82
|
+
// ── Dates ──
|
|
83
|
+
// Absent from the Stage 1 detector list, but required by two other SPEC.md
|
|
84
|
+
// sections: the Strict profile ("adds ... dates of birth") and the
|
|
85
|
+
// substitution table ("DATE → a shifted date preserving relative ordering
|
|
86
|
+
// across the document"). Carried here so both stay implementable.
|
|
87
|
+
| 'DATE_OF_BIRTH';
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Which pipeline stage produced a candidate, or contributed to an entity.
|
|
91
|
+
* One member per stage of SPEC.md's core detection pipeline.
|
|
92
|
+
*/
|
|
93
|
+
export type DetectionStage =
|
|
94
|
+
| 'stage0-normalization' // text canonicalization (M1)
|
|
95
|
+
| 'stage1-validated-identifier' // regex candidate generation + validator
|
|
96
|
+
| 'stage2-ner' // multilingual ONNX token classification
|
|
97
|
+
| 'stage2b-gazetteer' // bundled name / place / org lookup sets
|
|
98
|
+
| 'stage2c-verification' // second opinion over the ambiguous band
|
|
99
|
+
| 'stage3-context' // trigger proximity, structural and negative context
|
|
100
|
+
| 'stage4-fusion'; // calibration, overlap resolution, profile thresholds
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* A pre-fusion detection produced by a single detector.
|
|
104
|
+
* Offsets are indices into the NORMALIZED text (see NormalizationResult for
|
|
105
|
+
* how they map back to the original).
|
|
106
|
+
*/
|
|
107
|
+
export interface Candidate {
|
|
108
|
+
/** The matched substring of the normalized text. */
|
|
109
|
+
text: string;
|
|
110
|
+
type: EntityType;
|
|
111
|
+
/** Start offset (inclusive), UTF-16 code units into the normalized text. */
|
|
112
|
+
start: number;
|
|
113
|
+
/** End offset (exclusive). */
|
|
114
|
+
end: number;
|
|
115
|
+
/** Detector-local confidence in [0, 1]; NOT calibrated across detectors. */
|
|
116
|
+
rawConfidence: number;
|
|
117
|
+
stage: DetectionStage;
|
|
118
|
+
/** Stable identifier of the detector that produced this, e.g. "email-rfc5322". */
|
|
119
|
+
detectorId: string;
|
|
120
|
+
/** Detector-specific extras (e.g. { scheme: 'ssn', country: 'US' } for national_id). */
|
|
121
|
+
metadata?: Readonly<Record<string, unknown>>;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** Why an entity was reported — surfaced in the review UI and in eval output. */
|
|
125
|
+
export interface EntityExplanation {
|
|
126
|
+
/** Which stages fired for this entity. */
|
|
127
|
+
stages: readonly DetectionStage[];
|
|
128
|
+
/** Which triggers matched (detector ids, trigger names, context words). */
|
|
129
|
+
triggers: readonly string[];
|
|
130
|
+
/** Name of the validator that passed (checksum, format check), if any. */
|
|
131
|
+
validatorPassed?: string;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** A post-fusion entity: what the pipeline actually reports. */
|
|
135
|
+
export interface DetectedEntity {
|
|
136
|
+
/** The matched substring of the normalized text. */
|
|
137
|
+
text: string;
|
|
138
|
+
type: EntityType;
|
|
139
|
+
/** Start offset (inclusive), UTF-16 code units into the normalized text. */
|
|
140
|
+
start: number;
|
|
141
|
+
/** End offset (exclusive). */
|
|
142
|
+
end: number;
|
|
143
|
+
/** Calibrated confidence in [0, 1], comparable across types and stages. */
|
|
144
|
+
calibratedConfidence: number;
|
|
145
|
+
explanation: EntityExplanation;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// `StageTiming` and `DetectionResult` were declared here at M1 as shapes for
|
|
149
|
+
// "later milestones" and were never implemented: no function ever returned
|
|
150
|
+
// one, and nothing outside this file ever referenced them. M12 removed them
|
|
151
|
+
// rather than publish them.
|
|
152
|
+
//
|
|
153
|
+
// A type in a published API is a promise that something produces it. Shipping
|
|
154
|
+
// these would have put two entries in the generated reference that a reader
|
|
155
|
+
// could search the whole package for and never find - the documentation
|
|
156
|
+
// equivalent of a stub, which SPEC.md's fourth non-negotiable forbids.
|
|
157
|
+
//
|
|
158
|
+
// `protect()` is what M12 shipped for this job. Its result carries
|
|
159
|
+
// `stagesRun`, which is DERIVED from the options, in place of `timings`,
|
|
160
|
+
// which was merely declared.
|
|
161
|
+
|
|
162
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
163
|
+
// Policy / substitution
|
|
164
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
165
|
+
|
|
166
|
+
// `SensitivityProfile` used to be declared here as the string union
|
|
167
|
+
// 'minimal' | 'balanced' | 'strict' | 'custom'. It was DEAD and worse than
|
|
168
|
+
// dead: `index.ts` re-exports the same name from `fuse/profiles.ts`, where it
|
|
169
|
+
// is the profile OBJECT, so the union was unreachable through the package's
|
|
170
|
+
// public API while still being the first definition a reader finds by name.
|
|
171
|
+
// The union it described is `ProfileName`, which fuse/profiles.ts already
|
|
172
|
+
// exports. Removed rather than renamed - two names for one idea is what
|
|
173
|
+
// created the collision.
|
|
174
|
+
|
|
175
|
+
export type SubstitutionMode = 'surrogate' | 'token';
|
|
176
|
+
|
|
177
|
+
/** One masked value held locally so the original can be restored later. */
|
|
178
|
+
export interface VaultEntry {
|
|
179
|
+
/** Stable unique id of this entry. */
|
|
180
|
+
id: string;
|
|
181
|
+
type: EntityType;
|
|
182
|
+
/** The original text that was masked (first-seen writing). */
|
|
183
|
+
original: string;
|
|
184
|
+
/** What it was replaced with (a surrogate value or an opaque token). */
|
|
185
|
+
replacement: string;
|
|
186
|
+
/** Epoch milliseconds when the entry was created. */
|
|
187
|
+
createdAt: number;
|
|
188
|
+
/**
|
|
189
|
+
* Canonical form of the original (separators stripped, case-normalized by
|
|
190
|
+
* the detector) — the consistency key that makes "4111 1111…" and
|
|
191
|
+
* "4111-1111…" share one entry, and the egress guard's
|
|
192
|
+
* separator-insensitive search term. Added in M4; optional because token
|
|
193
|
+
* bracket entries for unknown shapes have no canonical beyond the text.
|
|
194
|
+
*/
|
|
195
|
+
canonical?: string;
|
|
196
|
+
/**
|
|
197
|
+
* True when no sensible surrogate could be produced and a bracket token
|
|
198
|
+
* was used instead — SPEC.md requires the fallback be recorded in the
|
|
199
|
+
* session record. Added in M4.
|
|
200
|
+
*/
|
|
201
|
+
fallback?: boolean;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** Result of masking a piece of text. */
|
|
205
|
+
export interface MaskResult {
|
|
206
|
+
maskedText: string;
|
|
207
|
+
/** The entities that were substituted. */
|
|
208
|
+
entities: readonly DetectedEntity[];
|
|
209
|
+
/** Vault entries created for this mask operation. */
|
|
210
|
+
vaultEntries: readonly VaultEntry[];
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/** Result of restoring masked values in a piece of text. */
|
|
214
|
+
export interface RestoreResult {
|
|
215
|
+
restoredText: string;
|
|
216
|
+
/** How many replacements were restored to their originals. */
|
|
217
|
+
restoredCount: number;
|
|
218
|
+
/** Replacements found in the text with no matching vault entry. */
|
|
219
|
+
unmatchedReplacements: readonly string[];
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
223
|
+
// Scripts
|
|
224
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
225
|
+
|
|
226
|
+
/** Writing systems the pipeline distinguishes. Everything else is 'other'. */
|
|
227
|
+
export type ScriptName =
|
|
228
|
+
| 'latin'
|
|
229
|
+
| 'cyrillic'
|
|
230
|
+
| 'arabic'
|
|
231
|
+
| 'hebrew'
|
|
232
|
+
| 'han'
|
|
233
|
+
| 'kana'
|
|
234
|
+
| 'hangul'
|
|
235
|
+
| 'devanagari'
|
|
236
|
+
| 'greek'
|
|
237
|
+
| 'thai'
|
|
238
|
+
| 'armenian'
|
|
239
|
+
| 'georgian'
|
|
240
|
+
| 'ethiopic'
|
|
241
|
+
| 'other';
|
|
242
|
+
|
|
243
|
+
/** Per-script breakdown of a piece of text. */
|
|
244
|
+
export interface ScriptInfo {
|
|
245
|
+
/**
|
|
246
|
+
* Letter counts per script. Script-neutral characters — whitespace, digits,
|
|
247
|
+
* punctuation, symbols, combining marks — are not counted at all; letters of
|
|
248
|
+
* scripts outside the supported list are counted under 'other'.
|
|
249
|
+
*/
|
|
250
|
+
counts: Readonly<Record<ScriptName, number>>;
|
|
251
|
+
/**
|
|
252
|
+
* The script with the strictly highest letter count among the supported
|
|
253
|
+
* (non-'other') scripts, or null when the text has no such letters or the
|
|
254
|
+
* top count is tied.
|
|
255
|
+
*/
|
|
256
|
+
dominant: ScriptName | null;
|
|
257
|
+
/** True when letters of two or more supported scripts are present. */
|
|
258
|
+
mixed: boolean;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
262
|
+
// Normalization (Stage 0)
|
|
263
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
264
|
+
|
|
265
|
+
/** The individual transforms of the Stage 0 pipeline, in execution order. */
|
|
266
|
+
export type TransformKind =
|
|
267
|
+
| 'strip-invisibles'
|
|
268
|
+
| 'nfkc'
|
|
269
|
+
| 'homoglyph-fold'
|
|
270
|
+
| 'whitespace-punct'
|
|
271
|
+
| 'fold-digits';
|
|
272
|
+
|
|
273
|
+
/** One transform application, recorded for debugging and for the review UI. */
|
|
274
|
+
export interface TransformationRecord {
|
|
275
|
+
kind: TransformKind;
|
|
276
|
+
/** Start of the affected range in the ORIGINAL text (inclusive). */
|
|
277
|
+
originalStart: number;
|
|
278
|
+
/** End of the affected range in the ORIGINAL text (exclusive). */
|
|
279
|
+
originalEnd: number;
|
|
280
|
+
/** The affected slice of the ORIGINAL text. */
|
|
281
|
+
original: string;
|
|
282
|
+
/** What this transform emitted for that range ('' for deletions). */
|
|
283
|
+
replacement: string;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/** Every transform can be disabled individually; all default to enabled. */
|
|
287
|
+
export interface NormalizationOptions {
|
|
288
|
+
stripInvisibles?: boolean;
|
|
289
|
+
nfkc?: boolean;
|
|
290
|
+
homoglyphFold?: boolean;
|
|
291
|
+
whitespacePunct?: boolean;
|
|
292
|
+
/** Fold non-ASCII decimal digits (Arabic-Indic, Devanagari, Thai, …) to ASCII. */
|
|
293
|
+
foldDigits?: boolean;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* The result of Stage 0 normalization.
|
|
298
|
+
*
|
|
299
|
+
* THE OFFSET MAP CONTRACT
|
|
300
|
+
* ───────────────────────
|
|
301
|
+
* Detection runs on `normalizedText`; substitution edits the ORIGINAL text.
|
|
302
|
+
* `offsetMap` connects the two:
|
|
303
|
+
*
|
|
304
|
+
* offsetMap[i] = index in the original string where the cluster that
|
|
305
|
+
* produced normalized index i begins.
|
|
306
|
+
* offsetMap[normalizedText.length] = originalText.length (sentinel)
|
|
307
|
+
*
|
|
308
|
+
* A normalized span [s, e) therefore maps to the original span
|
|
309
|
+
* [offsetMap[s], offsetMap[e]). Invariants (tested exhaustively):
|
|
310
|
+
* • offsetMap is monotonically non-decreasing
|
|
311
|
+
* • offsetMap[0] === 0 whenever normalizedText is non-empty
|
|
312
|
+
* • offsetMap[normalizedLength] === originalLength
|
|
313
|
+
* • every value is a valid index into the original string (0..length incl.)
|
|
314
|
+
* • identity inputs produce offsetMap[i] === i for every i
|
|
315
|
+
*
|
|
316
|
+
* Deleted characters (invisibles) do not appear in offsetMap; each deleted
|
|
317
|
+
* run is attributed to the cluster that FOLLOWS it (or to the sentinel when
|
|
318
|
+
* the run is at the very end), which is what makes offsetMap[0] === 0 hold.
|
|
319
|
+
*
|
|
320
|
+
* `reverseMap` goes the other way:
|
|
321
|
+
* reverseMap[j] = normalized index of the start of the cluster whose
|
|
322
|
+
* original extent contains original index j; for a deleted
|
|
323
|
+
* character this is the normalized position where it was
|
|
324
|
+
* removed.
|
|
325
|
+
* reverseMap[originalText.length] = normalizedText.length (sentinel)
|
|
326
|
+
*/
|
|
327
|
+
export interface NormalizationResult {
|
|
328
|
+
normalizedText: string;
|
|
329
|
+
/** normalized index → original index; length is normalizedText.length + 1. */
|
|
330
|
+
offsetMap: Int32Array;
|
|
331
|
+
/** original index → normalized index; length is originalText.length + 1. */
|
|
332
|
+
reverseMap: Int32Array;
|
|
333
|
+
/** Script breakdown of the NORMALIZED text. */
|
|
334
|
+
scripts: ScriptInfo;
|
|
335
|
+
/** Every transform that fired, with ranges in original-text coordinates. */
|
|
336
|
+
transformations: readonly TransformationRecord[];
|
|
337
|
+
originalLength: number;
|
|
338
|
+
normalizedLength: number;
|
|
339
|
+
}
|