@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,528 @@
|
|
|
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
|
+
// Limits
|
|
22
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
23
|
+
/**
|
|
24
|
+
* Longest accepted key. Keys are labels; anything longer is prose that happens
|
|
25
|
+
* to contain a colon, and admitting it would let a whole sentence act as a
|
|
26
|
+
* "key" and match a trigger by accident.
|
|
27
|
+
*/
|
|
28
|
+
const MAX_KEY_LENGTH = 48;
|
|
29
|
+
/** A CSV needs at least this many rows (header + data) to be believable. */
|
|
30
|
+
const MIN_CSV_ROWS = 2;
|
|
31
|
+
/**
|
|
32
|
+
* Drop a diff's leading marker, keeping offsets honest by advancing the
|
|
33
|
+
* line's own offset rather than rewriting the document.
|
|
34
|
+
*/
|
|
35
|
+
function stripDiffMarker(line) {
|
|
36
|
+
if (!DIFF_LINE.test(line.text))
|
|
37
|
+
return line;
|
|
38
|
+
return { text: line.text.slice(1), offset: line.offset + 1 };
|
|
39
|
+
}
|
|
40
|
+
function splitLines(text) {
|
|
41
|
+
const lines = [];
|
|
42
|
+
let offset = 0;
|
|
43
|
+
for (;;) {
|
|
44
|
+
const nl = text.indexOf('\n', offset);
|
|
45
|
+
if (nl === -1) {
|
|
46
|
+
lines.push({ text: text.slice(offset), offset });
|
|
47
|
+
return lines;
|
|
48
|
+
}
|
|
49
|
+
lines.push({ text: text.slice(offset, nl), offset });
|
|
50
|
+
offset = nl + 1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
54
|
+
// Key/value line forms
|
|
55
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
56
|
+
/**
|
|
57
|
+
* `"key": value` — JSON, and object literals with quoted keys.
|
|
58
|
+
*
|
|
59
|
+
* All three quote styles are accepted, not just the double quote JSON itself
|
|
60
|
+
* uses: Python dictionaries and JavaScript object literals overwhelmingly use
|
|
61
|
+
* single quotes, and a Python `requests` snippet with an `'Authorization'`
|
|
62
|
+
* header is one of the most common things a developer pastes when asking for
|
|
63
|
+
* help. (M7 safety review — ARCHITECTURE.md D18.)
|
|
64
|
+
*/
|
|
65
|
+
const JSON_KEY = /^\s*(?:"([^"\\]{1,48})"|'([^'\\]{1,48})'|`([^`\\]{1,48})`)\s*:\s*/;
|
|
66
|
+
/**
|
|
67
|
+
* A quoted `Header: value` pair anywhere on a line — `-H "Authorization: …"`.
|
|
68
|
+
*
|
|
69
|
+
* Scanned separately from the line-anchored colon form rather than by
|
|
70
|
+
* unanchoring it, because unanchoring would let arbitrary prose before a
|
|
71
|
+
* colon become a key.
|
|
72
|
+
*/
|
|
73
|
+
const QUOTED_HEADER = /['"]\s*([A-Za-z][A-Za-z0-9-]{0,47})\s*:\s+(?=\S)/g;
|
|
74
|
+
/**
|
|
75
|
+
* `--api-token=…` — a credential passed as a command-line flag.
|
|
76
|
+
*
|
|
77
|
+
* The literal `--` is required, so this cannot match an ordinary expression.
|
|
78
|
+
*/
|
|
79
|
+
const CLI_FLAG = /(?:^|\s)--([A-Za-z][A-Za-z0-9-]{0,47})=(?!=)("[^"]*"|'[^']*'|\S+)/g;
|
|
80
|
+
/**
|
|
81
|
+
* `setApiKey("…")` — a credential handed to an SDK setter.
|
|
82
|
+
*
|
|
83
|
+
* Restricted to a single string-literal argument so that ordinary calls with
|
|
84
|
+
* computed arguments are not read as assignments.
|
|
85
|
+
*/
|
|
86
|
+
const CALL_ARGUMENT = /(?:^|[\s;{(,[.])([A-Za-z_$][A-Za-z0-9_$]{0,47})\s*\(\s*("[^"]{1,512}"|'[^']{1,512}')\s*[,)]/g;
|
|
87
|
+
/** Leading verb stripped so `setApiKey` and `withApiKey` both key on `ApiKey`. */
|
|
88
|
+
const SETTER_PREFIX = /^(?:set|with|put|add|update)(?=[A-Z_])/;
|
|
89
|
+
/** A YAML block scalar introducer: `key: |`, `key: >-`, `key: |2`. */
|
|
90
|
+
const BLOCK_SCALAR = /^[|>][+-]?\d*$/;
|
|
91
|
+
/** Unified-diff and patch line markers, stripped only in a diff document. */
|
|
92
|
+
const DIFF_LINE = /^[+\- ]/;
|
|
93
|
+
const DIFF_DOCUMENT = /^(?:@@ -\d+|--- a\/|\+\+\+ b\/|diff --git )/m;
|
|
94
|
+
/**
|
|
95
|
+
* `"key": value` anywhere on a line, for minified JSON.
|
|
96
|
+
*
|
|
97
|
+
* The line-anchored form finds only the first key of a single-line payload,
|
|
98
|
+
* and a one-line JSON body is what an API response or a log entry actually
|
|
99
|
+
* looks like — the review executed `{"name":…,"ssn":"123-45-6789",…}` and
|
|
100
|
+
* found the `ssn` label lost entirely.
|
|
101
|
+
*/
|
|
102
|
+
const JSON_KEY_INLINE = /(["'`])([^"'`\\]{1,48})\1\s*:\s*/g;
|
|
103
|
+
/**
|
|
104
|
+
* A form label whose colon is followed immediately by its value.
|
|
105
|
+
*
|
|
106
|
+
* CJK forms write `個人番号:123456789012`; Stage 0 folds the full-width colon
|
|
107
|
+
* to ASCII but leaves no space, which the spaced colon form requires. The key
|
|
108
|
+
* must contain a non-ASCII letter, which is what keeps `09:30` and ordinary
|
|
109
|
+
* ASCII prose out of scope.
|
|
110
|
+
*/
|
|
111
|
+
const COLON_KEY_UNSPACED = /^[\s>-]*([\p{L}][\p{L}\p{M}\p{N} _.\\/-]{0,47}?)\s*:(?=\S)/u;
|
|
112
|
+
/** True when the key carries a non-ASCII letter, which gates the form above. */
|
|
113
|
+
const HAS_NON_ASCII = /\P{ASCII}/u;
|
|
114
|
+
/** `machine host` / `login user` / `password secret` — .netrc and friends. */
|
|
115
|
+
const NETRC_PAIR = /^\s*(machine|login|password|account|default)\s+(\S.*)$/;
|
|
116
|
+
const NETRC_DOCUMENT = /^\s*(?:machine\s+\S+|default)\s*$/m;
|
|
117
|
+
/**
|
|
118
|
+
* `key: value` — YAML mappings, and form labels in prose ("Tel: +90…").
|
|
119
|
+
* The key accepts any script's letters so that a Hebrew or Japanese form
|
|
120
|
+
* label is recognized as readily as an English one; it forbids the digits-only
|
|
121
|
+
* case so that a bare time ("09:30") is not read as a key/value pair.
|
|
122
|
+
*/
|
|
123
|
+
const COLON_KEY = /^[\s>-]*([\p{L}][\p{L}\p{M}\p{N} _.\\/-]{0,47})\s*:\s+(?=\S)/u;
|
|
124
|
+
/**
|
|
125
|
+
* `KEY=value`, `export KEY=value` — .env files and shell assignments.
|
|
126
|
+
*
|
|
127
|
+
* Three widenings, each from an executed M7 safety-review case:
|
|
128
|
+
* • hyphens in the CONTINUATION only, never the first character, so TOML
|
|
129
|
+
* and INI keys like `api-key` are covered without letting an arithmetic
|
|
130
|
+
* expression parse as an assignment;
|
|
131
|
+
* • any script's letters, matching the policy the colon form already
|
|
132
|
+
* states — a Turkish `şifre = …` labels a password just as well as
|
|
133
|
+
* `password = …` does;
|
|
134
|
+
* • an optional scope prefix ending in a colon, which is how `.npmrc`
|
|
135
|
+
* writes `//registry.npmjs.org/:_authToken=…`. The prefix may not contain
|
|
136
|
+
* `=` or whitespace, so it cannot swallow an ordinary line.
|
|
137
|
+
*/
|
|
138
|
+
const ENV_KEY = /^\s*(?:export\s+)?(?:[^\s=]{1,80}:)?([\p{L}_][\p{L}\p{M}\p{N}_-]{0,47})\s*=\s*/u;
|
|
139
|
+
/**
|
|
140
|
+
* `const apiKey = "…"`, `apiKey = '…'`, `self.api_key = …` — assignments in
|
|
141
|
+
* source code, anywhere on the line rather than only at its start.
|
|
142
|
+
*
|
|
143
|
+
* The whole dotted path is captured because the LAST segment is the label
|
|
144
|
+
* that means something: in `user.ssn = …` the key is `ssn`, not `user`.
|
|
145
|
+
*/
|
|
146
|
+
const CODE_ASSIGNMENT = /(?:^|[\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;
|
|
147
|
+
/** Characters that wrap a value and are not part of it. */
|
|
148
|
+
const VALUE_WRAPPERS = new Set(['"', "'", '`']);
|
|
149
|
+
/**
|
|
150
|
+
* Narrow a raw value range to the value itself: drop surrounding quotes, a
|
|
151
|
+
* trailing comma or semicolon, and outer whitespace. Masking must never
|
|
152
|
+
* include the punctuation that delimits a value.
|
|
153
|
+
*/
|
|
154
|
+
function trimValue(text, start, end) {
|
|
155
|
+
let s = start;
|
|
156
|
+
let e = end;
|
|
157
|
+
while (s < e && (text[s] === ' ' || text[s] === '\t'))
|
|
158
|
+
s += 1;
|
|
159
|
+
while (e > s && (text[e - 1] === ' ' || text[e - 1] === '\t' || text[e - 1] === '\r'))
|
|
160
|
+
e -= 1;
|
|
161
|
+
while (e > s && (text[e - 1] === ',' || text[e - 1] === ';')) {
|
|
162
|
+
e -= 1;
|
|
163
|
+
while (e > s && (text[e - 1] === ' ' || text[e - 1] === '\t'))
|
|
164
|
+
e -= 1;
|
|
165
|
+
}
|
|
166
|
+
const first = text[s];
|
|
167
|
+
if (first !== undefined && VALUE_WRAPPERS.has(first)) {
|
|
168
|
+
const closing = text.lastIndexOf(first, e - 1);
|
|
169
|
+
if (closing > s) {
|
|
170
|
+
s += 1;
|
|
171
|
+
e = closing;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return { start: s, end: e };
|
|
175
|
+
}
|
|
176
|
+
/** Classify a colon-form key: identifier-shaped keys are YAML, prose are labels. */
|
|
177
|
+
function colonKind(key) {
|
|
178
|
+
return /^[A-Za-z_][A-Za-z0-9_.-]*$/.test(key) ? 'yaml' : 'form-label';
|
|
179
|
+
}
|
|
180
|
+
function keyValueSlot(line) {
|
|
181
|
+
const json = JSON_KEY.exec(line.text);
|
|
182
|
+
if (json !== null) {
|
|
183
|
+
const key = json[1] ?? json[2] ?? json[3];
|
|
184
|
+
if (key !== undefined)
|
|
185
|
+
return buildSlot(line, key, json[0].length, 'json');
|
|
186
|
+
}
|
|
187
|
+
const env = ENV_KEY.exec(line.text);
|
|
188
|
+
if (env?.[1] !== undefined) {
|
|
189
|
+
return buildSlot(line, env[1], env[0].length, 'env');
|
|
190
|
+
}
|
|
191
|
+
const colon = COLON_KEY.exec(line.text);
|
|
192
|
+
if (colon?.[1] !== undefined) {
|
|
193
|
+
const key = colon[1].trim();
|
|
194
|
+
if (key.length > 0 && key.length <= MAX_KEY_LENGTH) {
|
|
195
|
+
return buildSlot(line, key, colon[0].length, colonKind(key));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const unspaced = COLON_KEY_UNSPACED.exec(line.text);
|
|
199
|
+
if (unspaced?.[1] !== undefined) {
|
|
200
|
+
const key = unspaced[1].trim();
|
|
201
|
+
if (key.length > 0 && key.length <= MAX_KEY_LENGTH && HAS_NON_ASCII.test(key)) {
|
|
202
|
+
return buildSlot(line, key, unspaced[0].length, 'form-label');
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
/** Every `"key": value` pair on a line — the minified-JSON case. */
|
|
208
|
+
function jsonInlineSlots(line) {
|
|
209
|
+
const out = [];
|
|
210
|
+
const pattern = new RegExp(JSON_KEY_INLINE.source, JSON_KEY_INLINE.flags);
|
|
211
|
+
let match;
|
|
212
|
+
while ((match = pattern.exec(line.text)) !== null) {
|
|
213
|
+
const key = match[2];
|
|
214
|
+
if (key === undefined)
|
|
215
|
+
continue;
|
|
216
|
+
const valueStart = match.index + match[0].length;
|
|
217
|
+
const range = trimValue(line.text, valueStart, jsonValueEnd(line.text, valueStart));
|
|
218
|
+
if (range.end <= range.start)
|
|
219
|
+
continue;
|
|
220
|
+
out.push({
|
|
221
|
+
key,
|
|
222
|
+
kind: 'json',
|
|
223
|
+
valueStart: line.offset + range.start,
|
|
224
|
+
valueEnd: line.offset + range.end,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
return out;
|
|
228
|
+
}
|
|
229
|
+
/** End of a JSON value: the closing quote, or the next separator. */
|
|
230
|
+
function jsonValueEnd(text, from) {
|
|
231
|
+
const opener = text[from];
|
|
232
|
+
if (opener !== undefined && VALUE_WRAPPERS.has(opener)) {
|
|
233
|
+
const closing = text.indexOf(opener, from + 1);
|
|
234
|
+
return closing === -1 ? text.length : closing + 1;
|
|
235
|
+
}
|
|
236
|
+
const separator = text.slice(from).search(/[,}\]]/);
|
|
237
|
+
return separator === -1 ? text.length : from + separator;
|
|
238
|
+
}
|
|
239
|
+
function buildSlot(line, rawKey, valueOffsetInLine, kind) {
|
|
240
|
+
const key = rawKey.trim();
|
|
241
|
+
const range = trimValue(line.text, valueOffsetInLine, line.text.length);
|
|
242
|
+
return {
|
|
243
|
+
key,
|
|
244
|
+
kind,
|
|
245
|
+
valueStart: line.offset + range.start,
|
|
246
|
+
valueEnd: line.offset + range.end,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/** Assignments that sit mid-line, which the line-anchored forms above miss. */
|
|
250
|
+
function codeAssignmentSlots(line) {
|
|
251
|
+
const out = [];
|
|
252
|
+
const pattern = new RegExp(CODE_ASSIGNMENT.source, CODE_ASSIGNMENT.flags);
|
|
253
|
+
let match;
|
|
254
|
+
while ((match = pattern.exec(line.text)) !== null) {
|
|
255
|
+
const path = match[1];
|
|
256
|
+
if (path === undefined)
|
|
257
|
+
continue;
|
|
258
|
+
const key = path.slice(path.lastIndexOf('.') + 1);
|
|
259
|
+
const valueStart = match.index + match[0].length;
|
|
260
|
+
const range = trimValue(line.text, valueStart, line.text.length);
|
|
261
|
+
if (range.end <= range.start)
|
|
262
|
+
continue;
|
|
263
|
+
out.push({
|
|
264
|
+
key,
|
|
265
|
+
kind: 'code-assignment',
|
|
266
|
+
valueStart: line.offset + range.start,
|
|
267
|
+
valueEnd: line.offset + range.end,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
return out;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Mid-line forms a developer pastes constantly: quoted HTTP headers, CLI
|
|
274
|
+
* flags, and single-string setter calls. Each is a narrow, explicitly
|
|
275
|
+
* delimited pattern rather than a general relaxation of the key/value forms.
|
|
276
|
+
*/
|
|
277
|
+
function inlineSlots(line) {
|
|
278
|
+
const out = [];
|
|
279
|
+
scan(QUOTED_HEADER, (match, key) => {
|
|
280
|
+
const valueStart = match.index + match[0].length;
|
|
281
|
+
// A quoted header value ends at the closing quote, not the line end.
|
|
282
|
+
const quote = line.text[match.index] ?? '"';
|
|
283
|
+
const closing = line.text.indexOf(quote, valueStart);
|
|
284
|
+
const rawEnd = closing === -1 ? line.text.length : closing;
|
|
285
|
+
push(key, valueStart, rawEnd, 'form-label');
|
|
286
|
+
});
|
|
287
|
+
scan(CLI_FLAG, (match, key) => {
|
|
288
|
+
const valueStart = match.index + match[0].indexOf('=') + 1;
|
|
289
|
+
push(key, valueStart, match.index + match[0].length, 'code-assignment');
|
|
290
|
+
});
|
|
291
|
+
scan(CALL_ARGUMENT, (match, key) => {
|
|
292
|
+
const argAt = match[0].lastIndexOf(match[2] ?? '');
|
|
293
|
+
const valueStart = match.index + argAt;
|
|
294
|
+
push(key.replace(SETTER_PREFIX, ''), valueStart, valueStart + (match[2]?.length ?? 0), 'code-assignment');
|
|
295
|
+
});
|
|
296
|
+
return out;
|
|
297
|
+
function scan(pattern, emit) {
|
|
298
|
+
const local = new RegExp(pattern.source, pattern.flags);
|
|
299
|
+
let match;
|
|
300
|
+
while ((match = local.exec(line.text)) !== null) {
|
|
301
|
+
const key = match[1];
|
|
302
|
+
if (key !== undefined)
|
|
303
|
+
emit(match, key);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
function push(key, from, to, kind) {
|
|
307
|
+
const range = trimValue(line.text, from, to);
|
|
308
|
+
if (range.end <= range.start)
|
|
309
|
+
return;
|
|
310
|
+
out.push({ key, kind, valueStart: line.offset + range.start, valueEnd: line.offset + range.end });
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* YAML block scalars: `key: |` followed by an indented block.
|
|
315
|
+
*
|
|
316
|
+
* Kubernetes Secrets and CI configuration embed whole credential files this
|
|
317
|
+
* way, and a line-bounded value reader sees only the `|` introducer.
|
|
318
|
+
*/
|
|
319
|
+
function blockScalarSlots(lines) {
|
|
320
|
+
const out = [];
|
|
321
|
+
for (const [index, line] of lines.entries()) {
|
|
322
|
+
const colon = COLON_KEY.exec(line.text);
|
|
323
|
+
if (colon?.[1] === undefined)
|
|
324
|
+
continue;
|
|
325
|
+
const remainder = line.text.slice(colon[0].length).trim();
|
|
326
|
+
if (!BLOCK_SCALAR.test(remainder))
|
|
327
|
+
continue;
|
|
328
|
+
const indent = line.text.length - line.text.trimStart().length;
|
|
329
|
+
let last;
|
|
330
|
+
for (let i = index + 1; i < lines.length; i += 1) {
|
|
331
|
+
const next = lines[i];
|
|
332
|
+
if (next === undefined)
|
|
333
|
+
break;
|
|
334
|
+
const blank = next.text.trim().length === 0;
|
|
335
|
+
const deeper = next.text.length - next.text.trimStart().length > indent;
|
|
336
|
+
if (!blank && !deeper)
|
|
337
|
+
break;
|
|
338
|
+
if (!blank)
|
|
339
|
+
last = next;
|
|
340
|
+
}
|
|
341
|
+
if (last === undefined)
|
|
342
|
+
continue;
|
|
343
|
+
const first = lines[index + 1];
|
|
344
|
+
if (first === undefined)
|
|
345
|
+
continue;
|
|
346
|
+
out.push({
|
|
347
|
+
key: colon[1].trim(),
|
|
348
|
+
kind: 'yaml',
|
|
349
|
+
valueStart: first.offset,
|
|
350
|
+
valueEnd: last.offset + last.text.length,
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
return out;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Whitespace-delimited credential files (.netrc, .authinfo).
|
|
357
|
+
*
|
|
358
|
+
* Gated on the document actually looking like one: a general "first word is
|
|
359
|
+
* the key" rule would make every prose sentence's first word a key.
|
|
360
|
+
*/
|
|
361
|
+
function netrcSlots(text, lines) {
|
|
362
|
+
if (!NETRC_DOCUMENT.test(text))
|
|
363
|
+
return [];
|
|
364
|
+
const out = [];
|
|
365
|
+
for (const line of lines) {
|
|
366
|
+
const match = NETRC_PAIR.exec(line.text);
|
|
367
|
+
if (match?.[1] === undefined || match[2] === undefined)
|
|
368
|
+
continue;
|
|
369
|
+
const valueStart = line.text.length - match[2].length;
|
|
370
|
+
const range = trimValue(line.text, valueStart, line.text.length);
|
|
371
|
+
if (range.end <= range.start)
|
|
372
|
+
continue;
|
|
373
|
+
out.push({
|
|
374
|
+
key: match[1],
|
|
375
|
+
kind: 'env',
|
|
376
|
+
valueStart: line.offset + range.start,
|
|
377
|
+
valueEnd: line.offset + range.end,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
return out;
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Split a delimited line into cells with offsets, honouring double quotes so
|
|
384
|
+
* that a comma inside a quoted CSV field does not create a phantom column and
|
|
385
|
+
* shift every header association after it.
|
|
386
|
+
*/
|
|
387
|
+
function splitCells(line, delimiter) {
|
|
388
|
+
const cells = [];
|
|
389
|
+
let cellStart = 0;
|
|
390
|
+
let quoted = false;
|
|
391
|
+
for (let i = 0; i < line.text.length; i += 1) {
|
|
392
|
+
const ch = line.text[i];
|
|
393
|
+
if (ch === '"') {
|
|
394
|
+
quoted = !quoted;
|
|
395
|
+
continue;
|
|
396
|
+
}
|
|
397
|
+
if (ch === delimiter && !quoted) {
|
|
398
|
+
cells.push(makeCell(line, cellStart, i));
|
|
399
|
+
cellStart = i + 1;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
cells.push(makeCell(line, cellStart, line.text.length));
|
|
403
|
+
return cells;
|
|
404
|
+
}
|
|
405
|
+
function makeCell(line, start, end) {
|
|
406
|
+
const range = trimValue(line.text, start, end);
|
|
407
|
+
return {
|
|
408
|
+
text: line.text.slice(range.start, range.end),
|
|
409
|
+
start: line.offset + range.start,
|
|
410
|
+
end: line.offset + range.end,
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
/** A markdown separator row: `| --- | :---: |`. */
|
|
414
|
+
function isTableSeparator(text) {
|
|
415
|
+
return /^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/.test(text);
|
|
416
|
+
}
|
|
417
|
+
function markdownTableSlots(lines) {
|
|
418
|
+
const out = [];
|
|
419
|
+
for (let i = 0; i + 1 < lines.length; i += 1) {
|
|
420
|
+
const header = lines[i];
|
|
421
|
+
const separator = lines[i + 1];
|
|
422
|
+
if (header === undefined || separator === undefined)
|
|
423
|
+
continue;
|
|
424
|
+
if (!header.text.includes('|') || !isTableSeparator(separator.text))
|
|
425
|
+
continue;
|
|
426
|
+
const headers = splitCells(header, '|').map((c) => c.text);
|
|
427
|
+
let row = i + 2;
|
|
428
|
+
for (; row < lines.length; row += 1) {
|
|
429
|
+
const line = lines[row];
|
|
430
|
+
if (line === undefined || !line.text.includes('|'))
|
|
431
|
+
break;
|
|
432
|
+
appendCellSlots(splitCells(line, '|'), headers, 'markdown-table', out);
|
|
433
|
+
}
|
|
434
|
+
i = row - 1;
|
|
435
|
+
}
|
|
436
|
+
return out;
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* CSV column headers. Only applied when the document as a whole looks like a
|
|
440
|
+
* comma-delimited table, because a single prose line containing commas is not
|
|
441
|
+
* a CSV and must not lend its first words to every following line as "headers".
|
|
442
|
+
*/
|
|
443
|
+
function csvSlots(lines) {
|
|
444
|
+
const dataLines = lines.filter((l) => l.text.trim().length > 0);
|
|
445
|
+
if (dataLines.length < MIN_CSV_ROWS)
|
|
446
|
+
return [];
|
|
447
|
+
const header = dataLines[0];
|
|
448
|
+
if (header === undefined)
|
|
449
|
+
return [];
|
|
450
|
+
const headerCells = splitCells(header, ',');
|
|
451
|
+
if (headerCells.length < 2)
|
|
452
|
+
return [];
|
|
453
|
+
// Headers are labels, not data: they should not look like values.
|
|
454
|
+
if (headerCells.some((c) => c.text.length === 0 || c.text.length > MAX_KEY_LENGTH))
|
|
455
|
+
return [];
|
|
456
|
+
const expected = headerCells.length;
|
|
457
|
+
const consistent = dataLines
|
|
458
|
+
.slice(1)
|
|
459
|
+
.every((l) => splitCells(l, ',').length === expected);
|
|
460
|
+
if (!consistent)
|
|
461
|
+
return [];
|
|
462
|
+
const headers = headerCells.map((c) => c.text);
|
|
463
|
+
const out = [];
|
|
464
|
+
for (const line of dataLines.slice(1)) {
|
|
465
|
+
appendCellSlots(splitCells(line, ','), headers, 'csv', out);
|
|
466
|
+
}
|
|
467
|
+
return out;
|
|
468
|
+
}
|
|
469
|
+
function appendCellSlots(cells, headers, kind, out) {
|
|
470
|
+
for (const [index, cell] of cells.entries()) {
|
|
471
|
+
const key = headers[index];
|
|
472
|
+
if (key === undefined || key.length === 0)
|
|
473
|
+
continue;
|
|
474
|
+
if (cell.end <= cell.start)
|
|
475
|
+
continue;
|
|
476
|
+
out.push({ key, kind, valueStart: cell.start, valueEnd: cell.end });
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
480
|
+
// Index construction
|
|
481
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
482
|
+
/**
|
|
483
|
+
* Build the structural index for a document.
|
|
484
|
+
*
|
|
485
|
+
* Slots may overlap — a CSV cell and a colon-form label can both cover a span.
|
|
486
|
+
* `slotAt` resolves that by returning the SMALLEST containing slot, which is
|
|
487
|
+
* the most specific label for the value.
|
|
488
|
+
*/
|
|
489
|
+
export function buildStructureIndex(text) {
|
|
490
|
+
const rawLines = splitLines(text);
|
|
491
|
+
// In a diff, every line carries a +/-/space marker that would otherwise
|
|
492
|
+
// hide the key. Stripping is gated on the document actually being a diff,
|
|
493
|
+
// so an ordinary line beginning with '-' is untouched. A newly added
|
|
494
|
+
// `+API_KEY=…` line is exactly the shape of a leaked credential in a paste.
|
|
495
|
+
const isDiff = DIFF_DOCUMENT.test(text);
|
|
496
|
+
const lines = isDiff ? rawLines.map(stripDiffMarker) : rawLines;
|
|
497
|
+
const slots = [];
|
|
498
|
+
for (const line of lines) {
|
|
499
|
+
const kv = keyValueSlot(line);
|
|
500
|
+
if (kv !== undefined && kv.valueEnd > kv.valueStart)
|
|
501
|
+
slots.push(kv);
|
|
502
|
+
slots.push(...codeAssignmentSlots(line));
|
|
503
|
+
slots.push(...inlineSlots(line));
|
|
504
|
+
slots.push(...jsonInlineSlots(line));
|
|
505
|
+
}
|
|
506
|
+
slots.push(...blockScalarSlots(lines));
|
|
507
|
+
slots.push(...netrcSlots(text, lines));
|
|
508
|
+
slots.push(...markdownTableSlots(lines));
|
|
509
|
+
slots.push(...csvSlots(lines));
|
|
510
|
+
slots.sort((a, b) => a.valueStart - b.valueStart || a.valueEnd - b.valueEnd);
|
|
511
|
+
return {
|
|
512
|
+
slots,
|
|
513
|
+
slotAt(start, end) {
|
|
514
|
+
let best;
|
|
515
|
+
for (const slot of slots) {
|
|
516
|
+
if (slot.valueStart > start)
|
|
517
|
+
break;
|
|
518
|
+
if (slot.valueEnd < end)
|
|
519
|
+
continue;
|
|
520
|
+
if (best === undefined || slot.valueEnd - slot.valueStart < best.valueEnd - best.valueStart) {
|
|
521
|
+
best = slot;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
return best;
|
|
525
|
+
},
|
|
526
|
+
};
|
|
527
|
+
}
|
|
528
|
+
//# sourceMappingURL=structure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../../../src/context/structure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stage 3, TRIGGER PROXIMITY.
|
|
3
|
+
*
|
|
4
|
+
* SPEC.md: "TRIGGER PROXIMITY — labels near the candidate, across many
|
|
5
|
+
* languages ('SSN', 'passport no', 'diagnosis', 'my name is', 'IBAN',
|
|
6
|
+
* 'kimlik', 'Personalausweis', '护照', 'паспорт', 'पासपोर्ट', and so on).
|
|
7
|
+
* Maintain the trigger lexicon as per-language data files, not inline code,
|
|
8
|
+
* so contributors can extend it. Cover at minimum the twenty most-spoken
|
|
9
|
+
* languages."
|
|
10
|
+
*
|
|
11
|
+
* This module is the MATCHER; the lexicons themselves live in
|
|
12
|
+
* `@discretion/data` as required. Two matching strategies run together
|
|
13
|
+
* because one alone cannot cover the world's scripts:
|
|
14
|
+
*
|
|
15
|
+
* • Space-delimited scripts tokenize, then look up 1..4-word n-grams in a
|
|
16
|
+
* hash map. Exact, and O(window) rather than O(window × terms).
|
|
17
|
+
* • Scripts that do not space their words (Han, Kana, Hangul-adjacent
|
|
18
|
+
* compounds, Thai, Khmer, Lao) cannot be tokenized that way, so their
|
|
19
|
+
* terms are substring-searched instead. Keeping them in a separate,
|
|
20
|
+
* much smaller list is what makes the substring pass affordable.
|
|
21
|
+
*
|
|
22
|
+
* Matching is case- and diacritic-insensitive: a form label reading "TCKN",
|
|
23
|
+
* "tckn" or "Tckn" is the same signal, and a user typing "numero" instead of
|
|
24
|
+
* "número" should not lose protection.
|
|
25
|
+
*/
|
|
26
|
+
import type { EntityType } from '../types.js';
|
|
27
|
+
/** One language's triggers, keyed by the entity type each vouches for. */
|
|
28
|
+
export interface LanguageTriggers {
|
|
29
|
+
/** BCP-47 primary subtag, e.g. 'tr', 'zh', 'he'. */
|
|
30
|
+
readonly code: string;
|
|
31
|
+
readonly triggers: Readonly<Partial<Record<EntityType, readonly string[]>>>;
|
|
32
|
+
}
|
|
33
|
+
/** A trigger found near a candidate. */
|
|
34
|
+
export interface TriggerMatch {
|
|
35
|
+
/** The lexicon term that matched, in its lexicon (folded) form. */
|
|
36
|
+
readonly term: string;
|
|
37
|
+
/** Entity types this term vouches for. */
|
|
38
|
+
readonly types: readonly EntityType[];
|
|
39
|
+
/** Characters between the trigger and the candidate. 0 when adjacent. */
|
|
40
|
+
readonly distance: number;
|
|
41
|
+
/** Language codes that contributed this term. */
|
|
42
|
+
readonly languages: readonly string[];
|
|
43
|
+
}
|
|
44
|
+
export interface TriggerIndex {
|
|
45
|
+
/** Number of distinct terms indexed, for reporting. */
|
|
46
|
+
readonly termCount: number;
|
|
47
|
+
/**
|
|
48
|
+
* Triggers found within `window` characters of the span, nearest first.
|
|
49
|
+
* Searching both sides matters: most languages label before the value
|
|
50
|
+
* ("SSN: …") but several place it after ("… کد ملی").
|
|
51
|
+
*/
|
|
52
|
+
near(text: string, start: number, end: number, window?: number): readonly TriggerMatch[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Fold a string for comparison: lowercase, then strip combining marks via NFD.
|
|
56
|
+
*
|
|
57
|
+
* Order matters. Turkish 'İ' lowercases to 'i' + U+0307 COMBINING DOT ABOVE,
|
|
58
|
+
* so the mark strip has to come after the case fold to remove it.
|
|
59
|
+
*/
|
|
60
|
+
export declare function foldForMatch(value: string): string;
|
|
61
|
+
/**
|
|
62
|
+
* Compile per-language lexicons into one index.
|
|
63
|
+
*
|
|
64
|
+
* All languages are matched at once rather than gated on a detected document
|
|
65
|
+
* language. That is deliberate: real messages mix languages (an English
|
|
66
|
+
* sentence quoting a German form label), language detection on a short chat
|
|
67
|
+
* message is unreliable, and a missed trigger costs recall on a privacy tool.
|
|
68
|
+
* The cost is that a term which is a common word in another language can
|
|
69
|
+
* mis-fire, which is why `near` reports what matched — Stage 3 weighs it,
|
|
70
|
+
* and the explanation records it.
|
|
71
|
+
*/
|
|
72
|
+
export declare function buildTriggerIndex(lexicons: readonly LanguageTriggers[]): TriggerIndex;
|
|
73
|
+
//# sourceMappingURL=triggers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../../../src/context/triggers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAM9C,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;CAC7E;AAED,wCAAwC;AACxC,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CAAC;CAC1F;AAQD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GAAG,YAAY,CAuBrF"}
|