@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,611 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stage 3, STRUCTURAL CUES.
|
|
3
|
+
*
|
|
4
|
+
* SPEC.md: "STRUCTURAL CUES — key names in JSON/YAML, CSV column headers,
|
|
5
|
+
* form labels, markdown table headers, .env variable names. A value under a
|
|
6
|
+
* key named 'api_key' or 'ssn' is near-certain regardless of its shape."
|
|
7
|
+
*
|
|
8
|
+
* That last clause is the whole point of this module: shape-based detection
|
|
9
|
+
* cannot tell a random-looking API key from a random-looking order number,
|
|
10
|
+
* but the KEY the value sits under usually can. So this module answers one
|
|
11
|
+
* question for a candidate span — "what is this value labelled as?" — and
|
|
12
|
+
* leaves the interpretation of that label to the trigger lexicons.
|
|
13
|
+
*
|
|
14
|
+
* Everything here is line-oriented, which is safe because Stage 0 preserves
|
|
15
|
+
* line structure: `normalizeWhitespacePunct` maps exotic spaces 1:1 and
|
|
16
|
+
* explicitly does not collapse runs or trim (see its header). Offsets
|
|
17
|
+
* produced here are therefore offsets into the normalized text, the same
|
|
18
|
+
* space Stage 1 and Stage 2 candidates live in.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
22
|
+
// Types
|
|
23
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
24
|
+
|
|
25
|
+
/** How a key/value association was expressed in the source text. */
|
|
26
|
+
export type StructureKind =
|
|
27
|
+
| 'json'
|
|
28
|
+
| 'yaml'
|
|
29
|
+
| 'env'
|
|
30
|
+
| 'code-assignment'
|
|
31
|
+
| 'csv'
|
|
32
|
+
| 'markdown-table'
|
|
33
|
+
| 'form-label';
|
|
34
|
+
|
|
35
|
+
/** A value position in the document, together with the key that labels it. */
|
|
36
|
+
export interface StructuredSlot {
|
|
37
|
+
/** The key/label text exactly as written, minus quotes and surrounding space. */
|
|
38
|
+
readonly key: string;
|
|
39
|
+
readonly kind: StructureKind;
|
|
40
|
+
/** Start offset of the VALUE in the normalized text (inclusive). */
|
|
41
|
+
readonly valueStart: number;
|
|
42
|
+
/** End offset of the VALUE (exclusive). */
|
|
43
|
+
readonly valueEnd: number;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Slots for one document, with containment lookup. */
|
|
47
|
+
export interface StructureIndex {
|
|
48
|
+
readonly slots: readonly StructuredSlot[];
|
|
49
|
+
/** The innermost slot whose value range contains the given span, if any. */
|
|
50
|
+
slotAt(start: number, end: number): StructuredSlot | undefined;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
54
|
+
// Limits
|
|
55
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Longest accepted key. Keys are labels; anything longer is prose that happens
|
|
59
|
+
* to contain a colon, and admitting it would let a whole sentence act as a
|
|
60
|
+
* "key" and match a trigger by accident.
|
|
61
|
+
*/
|
|
62
|
+
const MAX_KEY_LENGTH = 48;
|
|
63
|
+
|
|
64
|
+
/** A CSV needs at least this many rows (header + data) to be believable. */
|
|
65
|
+
const MIN_CSV_ROWS = 2;
|
|
66
|
+
|
|
67
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
68
|
+
// Line iteration
|
|
69
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
70
|
+
|
|
71
|
+
interface Line {
|
|
72
|
+
readonly text: string;
|
|
73
|
+
/** Offset of the line's first character in the document. */
|
|
74
|
+
readonly offset: number;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Drop a diff's leading marker, keeping offsets honest by advancing the
|
|
79
|
+
* line's own offset rather than rewriting the document.
|
|
80
|
+
*/
|
|
81
|
+
function stripDiffMarker(line: Line): Line {
|
|
82
|
+
if (!DIFF_LINE.test(line.text)) return line;
|
|
83
|
+
return { text: line.text.slice(1), offset: line.offset + 1 };
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function splitLines(text: string): Line[] {
|
|
87
|
+
const lines: Line[] = [];
|
|
88
|
+
let offset = 0;
|
|
89
|
+
for (;;) {
|
|
90
|
+
const nl = text.indexOf('\n', offset);
|
|
91
|
+
if (nl === -1) {
|
|
92
|
+
lines.push({ text: text.slice(offset), offset });
|
|
93
|
+
return lines;
|
|
94
|
+
}
|
|
95
|
+
lines.push({ text: text.slice(offset, nl), offset });
|
|
96
|
+
offset = nl + 1;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
101
|
+
// Key/value line forms
|
|
102
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* `"key": value` — JSON, and object literals with quoted keys.
|
|
106
|
+
*
|
|
107
|
+
* All three quote styles are accepted, not just the double quote JSON itself
|
|
108
|
+
* uses: Python dictionaries and JavaScript object literals overwhelmingly use
|
|
109
|
+
* single quotes, and a Python `requests` snippet with an `'Authorization'`
|
|
110
|
+
* header is one of the most common things a developer pastes when asking for
|
|
111
|
+
* help. (M7 safety review — ARCHITECTURE.md D18.)
|
|
112
|
+
*/
|
|
113
|
+
const JSON_KEY = /^\s*(?:"([^"\\]{1,48})"|'([^'\\]{1,48})'|`([^`\\]{1,48})`)\s*:\s*/;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* A quoted `Header: value` pair anywhere on a line — `-H "Authorization: …"`.
|
|
117
|
+
*
|
|
118
|
+
* Scanned separately from the line-anchored colon form rather than by
|
|
119
|
+
* unanchoring it, because unanchoring would let arbitrary prose before a
|
|
120
|
+
* colon become a key.
|
|
121
|
+
*/
|
|
122
|
+
const QUOTED_HEADER = /['"]\s*([A-Za-z][A-Za-z0-9-]{0,47})\s*:\s+(?=\S)/g;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* `--api-token=…` — a credential passed as a command-line flag.
|
|
126
|
+
*
|
|
127
|
+
* The literal `--` is required, so this cannot match an ordinary expression.
|
|
128
|
+
*/
|
|
129
|
+
const CLI_FLAG = /(?:^|\s)--([A-Za-z][A-Za-z0-9-]{0,47})=(?!=)("[^"]*"|'[^']*'|\S+)/g;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* `setApiKey("…")` — a credential handed to an SDK setter.
|
|
133
|
+
*
|
|
134
|
+
* Restricted to a single string-literal argument so that ordinary calls with
|
|
135
|
+
* computed arguments are not read as assignments.
|
|
136
|
+
*/
|
|
137
|
+
const CALL_ARGUMENT =
|
|
138
|
+
/(?:^|[\s;{(,[.])([A-Za-z_$][A-Za-z0-9_$]{0,47})\s*\(\s*("[^"]{1,512}"|'[^']{1,512}')\s*[,)]/g;
|
|
139
|
+
|
|
140
|
+
/** Leading verb stripped so `setApiKey` and `withApiKey` both key on `ApiKey`. */
|
|
141
|
+
const SETTER_PREFIX = /^(?:set|with|put|add|update)(?=[A-Z_])/;
|
|
142
|
+
|
|
143
|
+
/** A YAML block scalar introducer: `key: |`, `key: >-`, `key: |2`. */
|
|
144
|
+
const BLOCK_SCALAR = /^[|>][+-]?\d*$/;
|
|
145
|
+
|
|
146
|
+
/** Unified-diff and patch line markers, stripped only in a diff document. */
|
|
147
|
+
const DIFF_LINE = /^[+\- ]/;
|
|
148
|
+
const DIFF_DOCUMENT = /^(?:@@ -\d+|--- a\/|\+\+\+ b\/|diff --git )/m;
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* `"key": value` anywhere on a line, for minified JSON.
|
|
152
|
+
*
|
|
153
|
+
* The line-anchored form finds only the first key of a single-line payload,
|
|
154
|
+
* and a one-line JSON body is what an API response or a log entry actually
|
|
155
|
+
* looks like — the review executed `{"name":…,"ssn":"123-45-6789",…}` and
|
|
156
|
+
* found the `ssn` label lost entirely.
|
|
157
|
+
*/
|
|
158
|
+
const JSON_KEY_INLINE = /(["'`])([^"'`\\]{1,48})\1\s*:\s*/g;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* A form label whose colon is followed immediately by its value.
|
|
162
|
+
*
|
|
163
|
+
* CJK forms write `個人番号:123456789012`; Stage 0 folds the full-width colon
|
|
164
|
+
* to ASCII but leaves no space, which the spaced colon form requires. The key
|
|
165
|
+
* must contain a non-ASCII letter, which is what keeps `09:30` and ordinary
|
|
166
|
+
* ASCII prose out of scope.
|
|
167
|
+
*/
|
|
168
|
+
const COLON_KEY_UNSPACED = /^[\s>-]*([\p{L}][\p{L}\p{M}\p{N} _.\\/-]{0,47}?)\s*:(?=\S)/u;
|
|
169
|
+
|
|
170
|
+
/** True when the key carries a non-ASCII letter, which gates the form above. */
|
|
171
|
+
const HAS_NON_ASCII = /\P{ASCII}/u;
|
|
172
|
+
|
|
173
|
+
/** `machine host` / `login user` / `password secret` — .netrc and friends. */
|
|
174
|
+
const NETRC_PAIR = /^\s*(machine|login|password|account|default)\s+(\S.*)$/;
|
|
175
|
+
const NETRC_DOCUMENT = /^\s*(?:machine\s+\S+|default)\s*$/m;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* `key: value` — YAML mappings, and form labels in prose ("Tel: +90…").
|
|
179
|
+
* The key accepts any script's letters so that a Hebrew or Japanese form
|
|
180
|
+
* label is recognized as readily as an English one; it forbids the digits-only
|
|
181
|
+
* case so that a bare time ("09:30") is not read as a key/value pair.
|
|
182
|
+
*/
|
|
183
|
+
const COLON_KEY = /^[\s>-]*([\p{L}][\p{L}\p{M}\p{N} _.\\/-]{0,47})\s*:\s+(?=\S)/u;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* `KEY=value`, `export KEY=value` — .env files and shell assignments.
|
|
187
|
+
*
|
|
188
|
+
* Three widenings, each from an executed M7 safety-review case:
|
|
189
|
+
* • hyphens in the CONTINUATION only, never the first character, so TOML
|
|
190
|
+
* and INI keys like `api-key` are covered without letting an arithmetic
|
|
191
|
+
* expression parse as an assignment;
|
|
192
|
+
* • any script's letters, matching the policy the colon form already
|
|
193
|
+
* states — a Turkish `şifre = …` labels a password just as well as
|
|
194
|
+
* `password = …` does;
|
|
195
|
+
* • an optional scope prefix ending in a colon, which is how `.npmrc`
|
|
196
|
+
* writes `//registry.npmjs.org/:_authToken=…`. The prefix may not contain
|
|
197
|
+
* `=` or whitespace, so it cannot swallow an ordinary line.
|
|
198
|
+
*/
|
|
199
|
+
const ENV_KEY =
|
|
200
|
+
/^\s*(?:export\s+)?(?:[^\s=]{1,80}:)?([\p{L}_][\p{L}\p{M}\p{N}_-]{0,47})\s*=\s*/u;
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* `const apiKey = "…"`, `apiKey = '…'`, `self.api_key = …` — assignments in
|
|
204
|
+
* source code, anywhere on the line rather than only at its start.
|
|
205
|
+
*
|
|
206
|
+
* The whole dotted path is captured because the LAST segment is the label
|
|
207
|
+
* that means something: in `user.ssn = …` the key is `ssn`, not `user`.
|
|
208
|
+
*/
|
|
209
|
+
const CODE_ASSIGNMENT =
|
|
210
|
+
/(?:^|[\s;{(,["'`])(?:const|let|var|val|final|public|private|static|readonly)?\s*([A-Za-z_$][A-Za-z0-9_$]{0,47}(?:\.[A-Za-z_$][A-Za-z0-9_$]{0,47})*)\s*=\s*(?!=)/g;
|
|
211
|
+
|
|
212
|
+
/** Characters that wrap a value and are not part of it. */
|
|
213
|
+
const VALUE_WRAPPERS = new Set(['"', "'", '`']);
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Narrow a raw value range to the value itself: drop surrounding quotes, a
|
|
217
|
+
* trailing comma or semicolon, and outer whitespace. Masking must never
|
|
218
|
+
* include the punctuation that delimits a value.
|
|
219
|
+
*/
|
|
220
|
+
function trimValue(text: string, start: number, end: number): { start: number; end: number } {
|
|
221
|
+
let s = start;
|
|
222
|
+
let e = end;
|
|
223
|
+
while (s < e && (text[s] === ' ' || text[s] === '\t')) s += 1;
|
|
224
|
+
while (e > s && (text[e - 1] === ' ' || text[e - 1] === '\t' || text[e - 1] === '\r')) e -= 1;
|
|
225
|
+
while (e > s && (text[e - 1] === ',' || text[e - 1] === ';')) {
|
|
226
|
+
e -= 1;
|
|
227
|
+
while (e > s && (text[e - 1] === ' ' || text[e - 1] === '\t')) e -= 1;
|
|
228
|
+
}
|
|
229
|
+
const first = text[s];
|
|
230
|
+
if (first !== undefined && VALUE_WRAPPERS.has(first)) {
|
|
231
|
+
const closing = text.lastIndexOf(first, e - 1);
|
|
232
|
+
if (closing > s) {
|
|
233
|
+
s += 1;
|
|
234
|
+
e = closing;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return { start: s, end: e };
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/** Classify a colon-form key: identifier-shaped keys are YAML, prose are labels. */
|
|
241
|
+
function colonKind(key: string): StructureKind {
|
|
242
|
+
return /^[A-Za-z_][A-Za-z0-9_.-]*$/.test(key) ? 'yaml' : 'form-label';
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
function keyValueSlot(line: Line): StructuredSlot | undefined {
|
|
246
|
+
const json = JSON_KEY.exec(line.text);
|
|
247
|
+
if (json !== null) {
|
|
248
|
+
const key = json[1] ?? json[2] ?? json[3];
|
|
249
|
+
if (key !== undefined) return buildSlot(line, key, json[0].length, 'json');
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
const env = ENV_KEY.exec(line.text);
|
|
253
|
+
if (env?.[1] !== undefined) {
|
|
254
|
+
return buildSlot(line, env[1], env[0].length, 'env');
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const colon = COLON_KEY.exec(line.text);
|
|
258
|
+
if (colon?.[1] !== undefined) {
|
|
259
|
+
const key = colon[1].trim();
|
|
260
|
+
if (key.length > 0 && key.length <= MAX_KEY_LENGTH) {
|
|
261
|
+
return buildSlot(line, key, colon[0].length, colonKind(key));
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
const unspaced = COLON_KEY_UNSPACED.exec(line.text);
|
|
266
|
+
if (unspaced?.[1] !== undefined) {
|
|
267
|
+
const key = unspaced[1].trim();
|
|
268
|
+
if (key.length > 0 && key.length <= MAX_KEY_LENGTH && HAS_NON_ASCII.test(key)) {
|
|
269
|
+
return buildSlot(line, key, unspaced[0].length, 'form-label');
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
return undefined;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/** Every `"key": value` pair on a line — the minified-JSON case. */
|
|
277
|
+
function jsonInlineSlots(line: Line): StructuredSlot[] {
|
|
278
|
+
const out: StructuredSlot[] = [];
|
|
279
|
+
const pattern = new RegExp(JSON_KEY_INLINE.source, JSON_KEY_INLINE.flags);
|
|
280
|
+
let match: RegExpExecArray | null;
|
|
281
|
+
while ((match = pattern.exec(line.text)) !== null) {
|
|
282
|
+
const key = match[2];
|
|
283
|
+
if (key === undefined) continue;
|
|
284
|
+
const valueStart = match.index + match[0].length;
|
|
285
|
+
const range = trimValue(line.text, valueStart, jsonValueEnd(line.text, valueStart));
|
|
286
|
+
if (range.end <= range.start) continue;
|
|
287
|
+
out.push({
|
|
288
|
+
key,
|
|
289
|
+
kind: 'json',
|
|
290
|
+
valueStart: line.offset + range.start,
|
|
291
|
+
valueEnd: line.offset + range.end,
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
return out;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/** End of a JSON value: the closing quote, or the next separator. */
|
|
298
|
+
function jsonValueEnd(text: string, from: number): number {
|
|
299
|
+
const opener = text[from];
|
|
300
|
+
if (opener !== undefined && VALUE_WRAPPERS.has(opener)) {
|
|
301
|
+
const closing = text.indexOf(opener, from + 1);
|
|
302
|
+
return closing === -1 ? text.length : closing + 1;
|
|
303
|
+
}
|
|
304
|
+
const separator = text.slice(from).search(/[,}\]]/);
|
|
305
|
+
return separator === -1 ? text.length : from + separator;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
function buildSlot(line: Line, rawKey: string, valueOffsetInLine: number, kind: StructureKind): StructuredSlot {
|
|
309
|
+
const key = rawKey.trim();
|
|
310
|
+
const range = trimValue(line.text, valueOffsetInLine, line.text.length);
|
|
311
|
+
return {
|
|
312
|
+
key,
|
|
313
|
+
kind,
|
|
314
|
+
valueStart: line.offset + range.start,
|
|
315
|
+
valueEnd: line.offset + range.end,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/** Assignments that sit mid-line, which the line-anchored forms above miss. */
|
|
320
|
+
function codeAssignmentSlots(line: Line): StructuredSlot[] {
|
|
321
|
+
const out: StructuredSlot[] = [];
|
|
322
|
+
const pattern = new RegExp(CODE_ASSIGNMENT.source, CODE_ASSIGNMENT.flags);
|
|
323
|
+
let match: RegExpExecArray | null;
|
|
324
|
+
while ((match = pattern.exec(line.text)) !== null) {
|
|
325
|
+
const path = match[1];
|
|
326
|
+
if (path === undefined) continue;
|
|
327
|
+
const key = path.slice(path.lastIndexOf('.') + 1);
|
|
328
|
+
const valueStart = match.index + match[0].length;
|
|
329
|
+
const range = trimValue(line.text, valueStart, line.text.length);
|
|
330
|
+
if (range.end <= range.start) continue;
|
|
331
|
+
out.push({
|
|
332
|
+
key,
|
|
333
|
+
kind: 'code-assignment',
|
|
334
|
+
valueStart: line.offset + range.start,
|
|
335
|
+
valueEnd: line.offset + range.end,
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
return out;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Mid-line forms a developer pastes constantly: quoted HTTP headers, CLI
|
|
343
|
+
* flags, and single-string setter calls. Each is a narrow, explicitly
|
|
344
|
+
* delimited pattern rather than a general relaxation of the key/value forms.
|
|
345
|
+
*/
|
|
346
|
+
function inlineSlots(line: Line): StructuredSlot[] {
|
|
347
|
+
const out: StructuredSlot[] = [];
|
|
348
|
+
|
|
349
|
+
scan(QUOTED_HEADER, (match, key) => {
|
|
350
|
+
const valueStart = match.index + match[0].length;
|
|
351
|
+
// A quoted header value ends at the closing quote, not the line end.
|
|
352
|
+
const quote = line.text[match.index] ?? '"';
|
|
353
|
+
const closing = line.text.indexOf(quote, valueStart);
|
|
354
|
+
const rawEnd = closing === -1 ? line.text.length : closing;
|
|
355
|
+
push(key, valueStart, rawEnd, 'form-label');
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
scan(CLI_FLAG, (match, key) => {
|
|
359
|
+
const valueStart = match.index + match[0].indexOf('=') + 1;
|
|
360
|
+
push(key, valueStart, match.index + match[0].length, 'code-assignment');
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
scan(CALL_ARGUMENT, (match, key) => {
|
|
364
|
+
const argAt = match[0].lastIndexOf(match[2] ?? '');
|
|
365
|
+
const valueStart = match.index + argAt;
|
|
366
|
+
push(key.replace(SETTER_PREFIX, ''), valueStart, valueStart + (match[2]?.length ?? 0), 'code-assignment');
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
return out;
|
|
370
|
+
|
|
371
|
+
function scan(pattern: RegExp, emit: (match: RegExpExecArray, key: string) => void): void {
|
|
372
|
+
const local = new RegExp(pattern.source, pattern.flags);
|
|
373
|
+
let match: RegExpExecArray | null;
|
|
374
|
+
while ((match = local.exec(line.text)) !== null) {
|
|
375
|
+
const key = match[1];
|
|
376
|
+
if (key !== undefined) emit(match, key);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
function push(key: string, from: number, to: number, kind: StructureKind): void {
|
|
381
|
+
const range = trimValue(line.text, from, to);
|
|
382
|
+
if (range.end <= range.start) return;
|
|
383
|
+
out.push({ key, kind, valueStart: line.offset + range.start, valueEnd: line.offset + range.end });
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* YAML block scalars: `key: |` followed by an indented block.
|
|
389
|
+
*
|
|
390
|
+
* Kubernetes Secrets and CI configuration embed whole credential files this
|
|
391
|
+
* way, and a line-bounded value reader sees only the `|` introducer.
|
|
392
|
+
*/
|
|
393
|
+
function blockScalarSlots(lines: readonly Line[]): StructuredSlot[] {
|
|
394
|
+
const out: StructuredSlot[] = [];
|
|
395
|
+
for (const [index, line] of lines.entries()) {
|
|
396
|
+
const colon = COLON_KEY.exec(line.text);
|
|
397
|
+
if (colon?.[1] === undefined) continue;
|
|
398
|
+
const remainder = line.text.slice(colon[0].length).trim();
|
|
399
|
+
if (!BLOCK_SCALAR.test(remainder)) continue;
|
|
400
|
+
|
|
401
|
+
const indent = line.text.length - line.text.trimStart().length;
|
|
402
|
+
let last: Line | undefined;
|
|
403
|
+
for (let i = index + 1; i < lines.length; i += 1) {
|
|
404
|
+
const next = lines[i];
|
|
405
|
+
if (next === undefined) break;
|
|
406
|
+
const blank = next.text.trim().length === 0;
|
|
407
|
+
const deeper = next.text.length - next.text.trimStart().length > indent;
|
|
408
|
+
if (!blank && !deeper) break;
|
|
409
|
+
if (!blank) last = next;
|
|
410
|
+
}
|
|
411
|
+
if (last === undefined) continue;
|
|
412
|
+
|
|
413
|
+
const first = lines[index + 1];
|
|
414
|
+
if (first === undefined) continue;
|
|
415
|
+
out.push({
|
|
416
|
+
key: colon[1].trim(),
|
|
417
|
+
kind: 'yaml',
|
|
418
|
+
valueStart: first.offset,
|
|
419
|
+
valueEnd: last.offset + last.text.length,
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
return out;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* Whitespace-delimited credential files (.netrc, .authinfo).
|
|
427
|
+
*
|
|
428
|
+
* Gated on the document actually looking like one: a general "first word is
|
|
429
|
+
* the key" rule would make every prose sentence's first word a key.
|
|
430
|
+
*/
|
|
431
|
+
function netrcSlots(text: string, lines: readonly Line[]): StructuredSlot[] {
|
|
432
|
+
if (!NETRC_DOCUMENT.test(text)) return [];
|
|
433
|
+
const out: StructuredSlot[] = [];
|
|
434
|
+
for (const line of lines) {
|
|
435
|
+
const match = NETRC_PAIR.exec(line.text);
|
|
436
|
+
if (match?.[1] === undefined || match[2] === undefined) continue;
|
|
437
|
+
const valueStart = line.text.length - match[2].length;
|
|
438
|
+
const range = trimValue(line.text, valueStart, line.text.length);
|
|
439
|
+
if (range.end <= range.start) continue;
|
|
440
|
+
out.push({
|
|
441
|
+
key: match[1],
|
|
442
|
+
kind: 'env',
|
|
443
|
+
valueStart: line.offset + range.start,
|
|
444
|
+
valueEnd: line.offset + range.end,
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
return out;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
451
|
+
// Delimited tables (CSV, markdown)
|
|
452
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
453
|
+
|
|
454
|
+
interface Cell {
|
|
455
|
+
readonly text: string;
|
|
456
|
+
readonly start: number;
|
|
457
|
+
readonly end: number;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* Split a delimited line into cells with offsets, honouring double quotes so
|
|
462
|
+
* that a comma inside a quoted CSV field does not create a phantom column and
|
|
463
|
+
* shift every header association after it.
|
|
464
|
+
*/
|
|
465
|
+
function splitCells(line: Line, delimiter: string): Cell[] {
|
|
466
|
+
const cells: Cell[] = [];
|
|
467
|
+
let cellStart = 0;
|
|
468
|
+
let quoted = false;
|
|
469
|
+
for (let i = 0; i < line.text.length; i += 1) {
|
|
470
|
+
const ch = line.text[i];
|
|
471
|
+
if (ch === '"') {
|
|
472
|
+
quoted = !quoted;
|
|
473
|
+
continue;
|
|
474
|
+
}
|
|
475
|
+
if (ch === delimiter && !quoted) {
|
|
476
|
+
cells.push(makeCell(line, cellStart, i));
|
|
477
|
+
cellStart = i + 1;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
cells.push(makeCell(line, cellStart, line.text.length));
|
|
481
|
+
return cells;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
function makeCell(line: Line, start: number, end: number): Cell {
|
|
485
|
+
const range = trimValue(line.text, start, end);
|
|
486
|
+
return {
|
|
487
|
+
text: line.text.slice(range.start, range.end),
|
|
488
|
+
start: line.offset + range.start,
|
|
489
|
+
end: line.offset + range.end,
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/** A markdown separator row: `| --- | :---: |`. */
|
|
494
|
+
function isTableSeparator(text: string): boolean {
|
|
495
|
+
return /^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/.test(text);
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
function markdownTableSlots(lines: readonly Line[]): StructuredSlot[] {
|
|
499
|
+
const out: StructuredSlot[] = [];
|
|
500
|
+
for (let i = 0; i + 1 < lines.length; i += 1) {
|
|
501
|
+
const header = lines[i];
|
|
502
|
+
const separator = lines[i + 1];
|
|
503
|
+
if (header === undefined || separator === undefined) continue;
|
|
504
|
+
if (!header.text.includes('|') || !isTableSeparator(separator.text)) continue;
|
|
505
|
+
|
|
506
|
+
const headers = splitCells(header, '|').map((c) => c.text);
|
|
507
|
+
let row = i + 2;
|
|
508
|
+
for (; row < lines.length; row += 1) {
|
|
509
|
+
const line = lines[row];
|
|
510
|
+
if (line === undefined || !line.text.includes('|')) break;
|
|
511
|
+
appendCellSlots(splitCells(line, '|'), headers, 'markdown-table', out);
|
|
512
|
+
}
|
|
513
|
+
i = row - 1;
|
|
514
|
+
}
|
|
515
|
+
return out;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* CSV column headers. Only applied when the document as a whole looks like a
|
|
520
|
+
* comma-delimited table, because a single prose line containing commas is not
|
|
521
|
+
* a CSV and must not lend its first words to every following line as "headers".
|
|
522
|
+
*/
|
|
523
|
+
function csvSlots(lines: readonly Line[]): StructuredSlot[] {
|
|
524
|
+
const dataLines = lines.filter((l) => l.text.trim().length > 0);
|
|
525
|
+
if (dataLines.length < MIN_CSV_ROWS) return [];
|
|
526
|
+
|
|
527
|
+
const header = dataLines[0];
|
|
528
|
+
if (header === undefined) return [];
|
|
529
|
+
const headerCells = splitCells(header, ',');
|
|
530
|
+
if (headerCells.length < 2) return [];
|
|
531
|
+
// Headers are labels, not data: they should not look like values.
|
|
532
|
+
if (headerCells.some((c) => c.text.length === 0 || c.text.length > MAX_KEY_LENGTH)) return [];
|
|
533
|
+
|
|
534
|
+
const expected = headerCells.length;
|
|
535
|
+
const consistent = dataLines
|
|
536
|
+
.slice(1)
|
|
537
|
+
.every((l) => splitCells(l, ',').length === expected);
|
|
538
|
+
if (!consistent) return [];
|
|
539
|
+
|
|
540
|
+
const headers = headerCells.map((c) => c.text);
|
|
541
|
+
const out: StructuredSlot[] = [];
|
|
542
|
+
for (const line of dataLines.slice(1)) {
|
|
543
|
+
appendCellSlots(splitCells(line, ','), headers, 'csv', out);
|
|
544
|
+
}
|
|
545
|
+
return out;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
function appendCellSlots(
|
|
549
|
+
cells: readonly Cell[],
|
|
550
|
+
headers: readonly string[],
|
|
551
|
+
kind: StructureKind,
|
|
552
|
+
out: StructuredSlot[],
|
|
553
|
+
): void {
|
|
554
|
+
for (const [index, cell] of cells.entries()) {
|
|
555
|
+
const key = headers[index];
|
|
556
|
+
if (key === undefined || key.length === 0) continue;
|
|
557
|
+
if (cell.end <= cell.start) continue;
|
|
558
|
+
out.push({ key, kind, valueStart: cell.start, valueEnd: cell.end });
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
563
|
+
// Index construction
|
|
564
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* Build the structural index for a document.
|
|
568
|
+
*
|
|
569
|
+
* Slots may overlap — a CSV cell and a colon-form label can both cover a span.
|
|
570
|
+
* `slotAt` resolves that by returning the SMALLEST containing slot, which is
|
|
571
|
+
* the most specific label for the value.
|
|
572
|
+
*/
|
|
573
|
+
export function buildStructureIndex(text: string): StructureIndex {
|
|
574
|
+
const rawLines = splitLines(text);
|
|
575
|
+
// In a diff, every line carries a +/-/space marker that would otherwise
|
|
576
|
+
// hide the key. Stripping is gated on the document actually being a diff,
|
|
577
|
+
// so an ordinary line beginning with '-' is untouched. A newly added
|
|
578
|
+
// `+API_KEY=…` line is exactly the shape of a leaked credential in a paste.
|
|
579
|
+
const isDiff = DIFF_DOCUMENT.test(text);
|
|
580
|
+
const lines = isDiff ? rawLines.map(stripDiffMarker) : rawLines;
|
|
581
|
+
|
|
582
|
+
const slots: StructuredSlot[] = [];
|
|
583
|
+
for (const line of lines) {
|
|
584
|
+
const kv = keyValueSlot(line);
|
|
585
|
+
if (kv !== undefined && kv.valueEnd > kv.valueStart) slots.push(kv);
|
|
586
|
+
slots.push(...codeAssignmentSlots(line));
|
|
587
|
+
slots.push(...inlineSlots(line));
|
|
588
|
+
slots.push(...jsonInlineSlots(line));
|
|
589
|
+
}
|
|
590
|
+
slots.push(...blockScalarSlots(lines));
|
|
591
|
+
slots.push(...netrcSlots(text, lines));
|
|
592
|
+
slots.push(...markdownTableSlots(lines));
|
|
593
|
+
slots.push(...csvSlots(lines));
|
|
594
|
+
|
|
595
|
+
slots.sort((a, b) => a.valueStart - b.valueStart || a.valueEnd - b.valueEnd);
|
|
596
|
+
|
|
597
|
+
return {
|
|
598
|
+
slots,
|
|
599
|
+
slotAt(start: number, end: number): StructuredSlot | undefined {
|
|
600
|
+
let best: StructuredSlot | undefined;
|
|
601
|
+
for (const slot of slots) {
|
|
602
|
+
if (slot.valueStart > start) break;
|
|
603
|
+
if (slot.valueEnd < end) continue;
|
|
604
|
+
if (best === undefined || slot.valueEnd - slot.valueStart < best.valueEnd - best.valueStart) {
|
|
605
|
+
best = slot;
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
return best;
|
|
609
|
+
},
|
|
610
|
+
};
|
|
611
|
+
}
|