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