@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,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Starter surrogate pools for the NER entity types (PERSON, ORG, LOCATION)
|
|
3
|
+
* and dates.
|
|
4
|
+
*
|
|
5
|
+
* These types are produced by Stage 2 (M6), which does not exist yet, so
|
|
6
|
+
* nothing in the M4 pipeline reaches them — but SPEC.md's substitution table
|
|
7
|
+
* requires them, and building the pools now lets the surrogate registry be
|
|
8
|
+
* complete and lets M6 plug in without touching this file's consumers.
|
|
9
|
+
*
|
|
10
|
+
* PERSON pools are grouped by SCRIPT and broad naming convention so that
|
|
11
|
+
* "Yuki Tanaka" is replaced by another East-Asian-convention name rather than
|
|
12
|
+
* "Bob Smith" (SPEC.md's explicit example). These are deliberately small,
|
|
13
|
+
* hand-picked, unmistakably-fictional pools; M7's gazetteers replace them
|
|
14
|
+
* with broad real-name coverage. Recorded in ARCHITECTURE.md D12.
|
|
15
|
+
*/
|
|
16
|
+
export const PERSON_POOLS = [
|
|
17
|
+
{
|
|
18
|
+
script: 'latin', order: 'given-first', sep: ' ',
|
|
19
|
+
given: ['Alex', 'Maria', 'Sofia', 'Lucas', 'Elena', 'Marco', 'Nadia', 'Oscar', 'Petra', 'Ravi'],
|
|
20
|
+
surnames: ['Fontaine', 'Delacroix', 'Marchetti', 'Ellison', 'Vandel', 'Rourke', 'Sandoval', 'Keller'],
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
script: 'cyrillic', order: 'given-first', sep: ' ',
|
|
24
|
+
given: ['Ирина', 'Дмитрий', 'Ольга', 'Сергей', 'Наталья', 'Павел'],
|
|
25
|
+
surnames: ['Соколова', 'Морозов', 'Волкова', 'Лебедев', 'Козлова', 'Новиков'],
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
script: 'greek', order: 'given-first', sep: ' ',
|
|
29
|
+
given: ['Γιώργος', 'Ελένη', 'Νίκος', 'Μαρία', 'Κώστας'],
|
|
30
|
+
surnames: ['Παπαδόπουλος', 'Νικολάου', 'Γεωργίου', 'Δημητρίου'],
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
script: 'arabic', order: 'given-first', sep: ' ',
|
|
34
|
+
given: ['ليلى', 'أحمد', 'فاطمة', 'يوسف', 'زينب'],
|
|
35
|
+
surnames: ['الحسن', 'المنصور', 'الصالح', 'الرشيد'],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
script: 'hebrew', order: 'given-first', sep: ' ',
|
|
39
|
+
given: ['נועה', 'איתי', 'תמר', 'יונתן'],
|
|
40
|
+
surnames: ['לוי', 'כהן', 'פרץ', 'ביטון'],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
script: 'devanagari', order: 'given-first', sep: ' ',
|
|
44
|
+
given: ['आरव', 'दिया', 'विवान', 'सान्या'],
|
|
45
|
+
surnames: ['शर्मा', 'वर्मा', 'गुप्ता', 'सिंह'],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
script: 'han', order: 'family-first', sep: '',
|
|
49
|
+
given: ['伟', '芳', '娜', '强', '敏', '静'],
|
|
50
|
+
surnames: ['王', '李', '张', '刘', '陈'],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
script: 'kana', order: 'family-first', sep: '',
|
|
54
|
+
given: ['ゆき', 'はると', 'さくら', 'れん'],
|
|
55
|
+
surnames: ['田中', '佐藤', '鈴木', '高橋'],
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
script: 'hangul', order: 'family-first', sep: '',
|
|
59
|
+
given: ['민준', '서연', '지호', '하은'],
|
|
60
|
+
surnames: ['김', '이', '박', '최'],
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
script: 'thai', order: 'given-first', sep: ' ',
|
|
64
|
+
given: ['สมชาย', 'สุดา', 'ประเสริฐ'],
|
|
65
|
+
surnames: ['แซ่ตั้ง', 'ศรีสุข', 'บุญมี'],
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
/** Fallback pool when a detected script has no dedicated one. */
|
|
69
|
+
export const DEFAULT_PERSON_POOL = PERSON_POOLS[0];
|
|
70
|
+
/** Plausible fictional organization names. */
|
|
71
|
+
export const ORG_POOL = [
|
|
72
|
+
'Northwind Systems', 'Brightpath Analytics', 'Cedar Grove Holdings', 'Meridian Labs',
|
|
73
|
+
'Quillfeather & Co.', 'Ashford Logistics', 'Blue Harbor Partners', 'Vireo Technologies',
|
|
74
|
+
'Sunspire Media', 'Gravel & Stone LLC',
|
|
75
|
+
];
|
|
76
|
+
/** Plausible fictional place names (cities). */
|
|
77
|
+
export const LOCATION_POOL = [
|
|
78
|
+
'Fairmont', 'Elderbrook', 'Port Haven', 'Westmere', 'Ashville Bay',
|
|
79
|
+
'Cranleigh', 'Thornbury', 'Riverton', 'Oakmoor', 'Silverdale',
|
|
80
|
+
];
|
|
81
|
+
//# sourceMappingURL=surrogatePools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surrogatePools.js","sourceRoot":"","sources":["../../../src/mask/surrogatePools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The surrogate registry: given a detected entity, produce a same-shape
|
|
3
|
+
* replacement value.
|
|
4
|
+
*
|
|
5
|
+
* SPEC.md, substitution: replace a value with "a realistic value of the same
|
|
6
|
+
* type and shape" so the model reasons over coherent text, and for
|
|
7
|
+
* identifiers "a value passing that country's checksum, so downstream
|
|
8
|
+
* validation in the model's reasoning still behaves". We reuse the M2/M3
|
|
9
|
+
* generators as the source — a surrogate IBAN needs exactly the checksum
|
|
10
|
+
* validity a real one has, and that generator already exists.
|
|
11
|
+
*
|
|
12
|
+
* Two SPEC judgement calls, recorded in ARCHITECTURE.md D12:
|
|
13
|
+
*
|
|
14
|
+
* • "Same country / same issuer." Honored where the detector's metadata
|
|
15
|
+
* carries it: IBAN → same country, CREDIT_CARD → same issuer, national
|
|
16
|
+
* identifiers → the SAME scheme's generator (a TCKN surrogate for a TCKN),
|
|
17
|
+
* VAT → same member state, crypto → same chain, IP → same version.
|
|
18
|
+
*
|
|
19
|
+
* • "SECRET → a same-shape dummy that is clearly non-functional." The reused
|
|
20
|
+
* generators produce syntactically valid but RANDOM values (a JWT with a
|
|
21
|
+
* random signature, a PEM with a random body, a provider token with a
|
|
22
|
+
* random body) — non-functional because random, not because marked. That
|
|
23
|
+
* satisfies "non-functional"; if a visibly-marked dummy is later wanted it
|
|
24
|
+
* is a pool swap, not a structural change. Flagged, not silently resolved.
|
|
25
|
+
*
|
|
26
|
+
* `chooseSurrogate` returns `null` when no sensible surrogate exists for the
|
|
27
|
+
* type — the masker then falls back to a bracket token and records it, per
|
|
28
|
+
* SPEC.md's FALLBACK rule.
|
|
29
|
+
*/
|
|
30
|
+
import type { EntityType } from '../types.js';
|
|
31
|
+
/** What the masker gives the registry about one detected value. */
|
|
32
|
+
export interface SurrogateRequest {
|
|
33
|
+
readonly type: EntityType;
|
|
34
|
+
/** The matched text (normalized). Used for shape and script inference. */
|
|
35
|
+
readonly text: string;
|
|
36
|
+
/** Detector metadata: scheme, country, issuer, chain, version, kind. */
|
|
37
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Choose a surrogate for a detected entity. Returns the surrogate string, or
|
|
41
|
+
* `null` when the type has no sensible surrogate (masker → bracket token).
|
|
42
|
+
* `seed` varies across collision retries so a fresh value is produced.
|
|
43
|
+
*/
|
|
44
|
+
export declare function chooseSurrogate(req: SurrogateRequest, seed: number): string | null;
|
|
45
|
+
//# sourceMappingURL=surrogates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surrogates.d.ts","sourceRoot":"","sources":["../../../src/mask/surrogates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,aAAa,CAAC;AAK1D,mEAAmE;AACnE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AA8FD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwGlF"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The surrogate registry: given a detected entity, produce a same-shape
|
|
3
|
+
* replacement value.
|
|
4
|
+
*
|
|
5
|
+
* SPEC.md, substitution: replace a value with "a realistic value of the same
|
|
6
|
+
* type and shape" so the model reasons over coherent text, and for
|
|
7
|
+
* identifiers "a value passing that country's checksum, so downstream
|
|
8
|
+
* validation in the model's reasoning still behaves". We reuse the M2/M3
|
|
9
|
+
* generators as the source — a surrogate IBAN needs exactly the checksum
|
|
10
|
+
* validity a real one has, and that generator already exists.
|
|
11
|
+
*
|
|
12
|
+
* Two SPEC judgement calls, recorded in ARCHITECTURE.md D12:
|
|
13
|
+
*
|
|
14
|
+
* • "Same country / same issuer." Honored where the detector's metadata
|
|
15
|
+
* carries it: IBAN → same country, CREDIT_CARD → same issuer, national
|
|
16
|
+
* identifiers → the SAME scheme's generator (a TCKN surrogate for a TCKN),
|
|
17
|
+
* VAT → same member state, crypto → same chain, IP → same version.
|
|
18
|
+
*
|
|
19
|
+
* • "SECRET → a same-shape dummy that is clearly non-functional." The reused
|
|
20
|
+
* generators produce syntactically valid but RANDOM values (a JWT with a
|
|
21
|
+
* random signature, a PEM with a random body, a provider token with a
|
|
22
|
+
* random body) — non-functional because random, not because marked. That
|
|
23
|
+
* satisfies "non-functional"; if a visibly-marked dummy is later wanted it
|
|
24
|
+
* is a pool swap, not a structural change. Flagged, not silently resolved.
|
|
25
|
+
*
|
|
26
|
+
* `chooseSurrogate` returns `null` when no sensible surrogate exists for the
|
|
27
|
+
* type — the masker then falls back to a bracket token and records it, per
|
|
28
|
+
* SPEC.md's FALLBACK rule.
|
|
29
|
+
*/
|
|
30
|
+
import * as generate from '../generate/index.js';
|
|
31
|
+
import { detectScripts } from '../scripts.js';
|
|
32
|
+
import { PERSON_POOLS, DEFAULT_PERSON_POOL, ORG_POOL, LOCATION_POOL } from './surrogatePools.js';
|
|
33
|
+
const g = generate;
|
|
34
|
+
const meta = (req, key) => {
|
|
35
|
+
const v = req.metadata?.[key];
|
|
36
|
+
return typeof v === 'string' ? v : undefined;
|
|
37
|
+
};
|
|
38
|
+
/** National/tax/vat scheme → the generator that produces a valid instance. */
|
|
39
|
+
const SCHEME_GENERATORS = {
|
|
40
|
+
ssn: g.generateValidSsn, sin: g.generateValidSin, nino: g.generateValidNino, nhs: g.generateValidNhs,
|
|
41
|
+
pps: g.generateValidPps, 'steuer-id': g.generateValidSteuerId, personalausweis: g.generateValidAusweis,
|
|
42
|
+
nir: g.generateValidNir, dni: g.generateValidDni, nie: g.generateValidNie,
|
|
43
|
+
'codice-fiscale': g.generateValidCodiceFiscale, bsn: g.generateValidBsn, rijksregister: g.generateValidBeRrn,
|
|
44
|
+
pesel: g.generateValidPesel, nip: g.generateValidNip, regon: g.generateValidRegon,
|
|
45
|
+
personnummer: g.generateValidPersonnummer, fodselsnummer: g.generateValidFodselsnummer, cpr: g.generateValidCpr,
|
|
46
|
+
hetu: g.generateValidHetu, kennitala: g.generateValidKennitala, nif: g.generateValidPtNif, afm: g.generateValidAfm,
|
|
47
|
+
'rodne-cislo': g.generateValidRodneCislo, 'szemelyi-szam': g.generateValidSzemelyi, cnp: g.generateValidCnp,
|
|
48
|
+
egn: g.generateValidEgn, oib: g.generateValidOib, emso: g.generateValidEmso, tckn: g.generateValidTckn,
|
|
49
|
+
vkn: g.generateValidVkn, inn: g.generateValidInn12, snils: g.generateValidSnils, rnokpp: g.generateValidRnokpp,
|
|
50
|
+
iin: g.generateValidIin, 'teudat-zehut': g.generateValidTeudatZehut, 'saudi-id': g.generateValidSaudiId,
|
|
51
|
+
'emirates-id': g.generateValidEmiratesId, qid: g.generateValidQid, 'civil-id': g.generateValidKwCivilId,
|
|
52
|
+
aadhaar: g.generateValidAadhaar, pan: g.generateValidPan, ric: g.generateValidRic, 'tw-id': g.generateValidTwId,
|
|
53
|
+
'my-number': g.generateValidMyNumber, rrn: g.generateValidKrRrn, nric: g.generateValidNric, hkid: g.generateValidHkid,
|
|
54
|
+
cnic: g.generateValidCnic, nid: g.generateValidBdNid, mykad: g.generateValidMykad, nik: g.generateValidNik,
|
|
55
|
+
'thai-id': g.generateValidThaiId, cccd: g.generateValidCccd, psn: g.generateValidPsn, tfn: g.generateValidTfn,
|
|
56
|
+
medicare: g.generateValidMedicare, abn: g.generateValidAbn, ird: g.generateValidIrd, cpf: g.generateValidCpf,
|
|
57
|
+
cnpj: g.generateValidCnpj, curp: g.generateValidCurp, rfc: g.generateValidRfc, cuit: g.generateValidCuit,
|
|
58
|
+
rut: g.generateValidRut, nit: g.generateValidNit, 'za-id': g.generateValidZaId,
|
|
59
|
+
};
|
|
60
|
+
/** Bare-number schemes whose detector span is value-only but whose generator
|
|
61
|
+
* emits a label — produce the bare value directly. */
|
|
62
|
+
const BARE_VALUE_SCHEMES = {
|
|
63
|
+
cnie: (s) => {
|
|
64
|
+
const rng = g.mulberry32(s);
|
|
65
|
+
const L = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
66
|
+
const prefix = rng() < 0.5 ? L[Math.floor(rng() * 26)] : L[Math.floor(rng() * 26)] + L[Math.floor(rng() * 26)];
|
|
67
|
+
let d = '';
|
|
68
|
+
for (let i = 0; i < 6; i++)
|
|
69
|
+
d += Math.floor(rng() * 10);
|
|
70
|
+
return `${prefix}${d}`;
|
|
71
|
+
},
|
|
72
|
+
nin: (s) => {
|
|
73
|
+
const rng = g.mulberry32(s);
|
|
74
|
+
let d = '';
|
|
75
|
+
for (let i = 0; i < 11; i++)
|
|
76
|
+
d += Math.floor(rng() * 10);
|
|
77
|
+
return d;
|
|
78
|
+
},
|
|
79
|
+
'ke-id': (s) => {
|
|
80
|
+
const rng = g.mulberry32(s);
|
|
81
|
+
let d = '';
|
|
82
|
+
for (let i = 0; i < 8; i++)
|
|
83
|
+
d += Math.floor(rng() * 10);
|
|
84
|
+
return d;
|
|
85
|
+
},
|
|
86
|
+
'ar-dni': (s) => {
|
|
87
|
+
const rng = g.mulberry32(s);
|
|
88
|
+
const n = 10_000_000 + Math.floor(rng() * 89_999_999);
|
|
89
|
+
return String(n).replace(/\B(?=(\d{3})+(?!\d))/g, '.');
|
|
90
|
+
},
|
|
91
|
+
'pe-dni': (s) => {
|
|
92
|
+
const rng = g.mulberry32(s);
|
|
93
|
+
let d = '';
|
|
94
|
+
for (let i = 0; i < 8; i++)
|
|
95
|
+
d += Math.floor(rng() * 10);
|
|
96
|
+
return d;
|
|
97
|
+
},
|
|
98
|
+
agencia: (s) => {
|
|
99
|
+
const rng = g.mulberry32(s);
|
|
100
|
+
let d = '';
|
|
101
|
+
for (let i = 0; i < 4; i++)
|
|
102
|
+
d += Math.floor(rng() * 10);
|
|
103
|
+
return rng() < 0.4 ? `${d}-${Math.floor(rng() * 10)}` : d;
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
/** Dominant script of the detected text, for PERSON surrogate matching. */
|
|
107
|
+
function scriptOf(text) {
|
|
108
|
+
return detectScripts(text).dominant ?? 'latin';
|
|
109
|
+
}
|
|
110
|
+
function personSurrogate(text, seed) {
|
|
111
|
+
const script = scriptOf(text);
|
|
112
|
+
const pool = PERSON_POOLS.find((p) => p.script === script) ?? DEFAULT_PERSON_POOL;
|
|
113
|
+
const rng = g.mulberry32(seed);
|
|
114
|
+
const given = pool.given[Math.floor(rng() * pool.given.length)];
|
|
115
|
+
const surname = pool.surnames[Math.floor(rng() * pool.surnames.length)];
|
|
116
|
+
return pool.order === 'given-first' ? `${given}${pool.sep}${surname}` : `${surname}${pool.sep}${given}`;
|
|
117
|
+
}
|
|
118
|
+
/** A plausible ICD-10 code (letter + 2 digits + optional .subcode). */
|
|
119
|
+
function icd10Surrogate(seed) {
|
|
120
|
+
const rng = g.mulberry32(seed);
|
|
121
|
+
const letters = 'ABCDEFGHIJKLMNOPRSTUVWXYZ';
|
|
122
|
+
const head = `${letters[Math.floor(rng() * letters.length)]}${Math.floor(rng() * 10)}${Math.floor(rng() * 10)}`;
|
|
123
|
+
return rng() < 0.6 ? `${head}.${Math.floor(rng() * 10)}` : head;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Choose a surrogate for a detected entity. Returns the surrogate string, or
|
|
127
|
+
* `null` when the type has no sensible surrogate (masker → bracket token).
|
|
128
|
+
* `seed` varies across collision retries so a fresh value is produced.
|
|
129
|
+
*/
|
|
130
|
+
export function chooseSurrogate(req, seed) {
|
|
131
|
+
switch (req.type) {
|
|
132
|
+
case 'EMAIL':
|
|
133
|
+
return g.generateValidEmail(seed);
|
|
134
|
+
case 'PHONE':
|
|
135
|
+
return g.generateValidPhone(seed);
|
|
136
|
+
case 'IP_ADDRESS':
|
|
137
|
+
return meta(req, 'version') === '6' || req.text.includes(':')
|
|
138
|
+
? g.generateValidIpv6(seed)
|
|
139
|
+
: g.generateValidIpv4(seed);
|
|
140
|
+
case 'MAC_ADDRESS':
|
|
141
|
+
return g.generateValidMac(seed);
|
|
142
|
+
case 'URL_WITH_CREDENTIALS':
|
|
143
|
+
return g.generateValidCredentialUrl(seed);
|
|
144
|
+
case 'CREDIT_CARD':
|
|
145
|
+
return g.generateValidCardForIssuer(meta(req, 'issuer') ?? 'visa', seed);
|
|
146
|
+
case 'IBAN': {
|
|
147
|
+
const country = meta(req, 'country') ?? req.text.slice(0, 2).toUpperCase();
|
|
148
|
+
return g.generateValidIbanForCountry(country, seed);
|
|
149
|
+
}
|
|
150
|
+
case 'SWIFT_BIC':
|
|
151
|
+
return g.generateValidBic(seed);
|
|
152
|
+
case 'US_ROUTING_NUMBER':
|
|
153
|
+
return g.generateValidRouting(seed);
|
|
154
|
+
case 'UK_SORT_CODE':
|
|
155
|
+
return g.generateValidSortCode(seed);
|
|
156
|
+
case 'CA_TRANSIT_NUMBER':
|
|
157
|
+
return g.generateValidTransit(seed);
|
|
158
|
+
case 'AU_BSB':
|
|
159
|
+
return g.generateValidBsb(seed);
|
|
160
|
+
case 'IN_IFSC':
|
|
161
|
+
return g.generateValidIfsc(seed);
|
|
162
|
+
case 'BR_AGENCIA':
|
|
163
|
+
return BARE_VALUE_SCHEMES['agencia'](seed);
|
|
164
|
+
case 'CRYPTO_WALLET': {
|
|
165
|
+
const chain = meta(req, 'chain');
|
|
166
|
+
const byChain = {
|
|
167
|
+
btc: g.generateValidBtc, eth: g.generateValidEth, ltc: g.generateValidLtc, trx: g.generateValidTrx,
|
|
168
|
+
xmr: g.generateValidXmr, sol: g.generateValidSol, ada: g.generateValidAda, dot: g.generateValidDot,
|
|
169
|
+
};
|
|
170
|
+
return (chain !== undefined ? byChain[chain] : undefined)?.(seed) ?? g.generateValidBtc(seed);
|
|
171
|
+
}
|
|
172
|
+
case 'API_KEY':
|
|
173
|
+
return g.generateValidProviderToken(seed);
|
|
174
|
+
case 'JWT':
|
|
175
|
+
return g.generateValidJwt(seed);
|
|
176
|
+
case 'PRIVATE_KEY':
|
|
177
|
+
return g.generateValidPem(seed);
|
|
178
|
+
case 'GENERIC_SECRET':
|
|
179
|
+
return g.generateHighEntropySecret(seed);
|
|
180
|
+
case 'CONNECTION_STRING':
|
|
181
|
+
return g.generateValidConnectionString(seed);
|
|
182
|
+
case 'PASSPORT_MRZ':
|
|
183
|
+
return g.generateValidTd3(seed);
|
|
184
|
+
case 'DRIVERS_LICENSE':
|
|
185
|
+
return g.generateValidDvla(seed);
|
|
186
|
+
case 'VIN':
|
|
187
|
+
return g.generateValidVin(seed);
|
|
188
|
+
case 'US_NPI':
|
|
189
|
+
return g.generateValidNpi(seed);
|
|
190
|
+
case 'HEALTH_DATA': {
|
|
191
|
+
const kind = meta(req, 'kind');
|
|
192
|
+
if (kind === 'snomed')
|
|
193
|
+
return g.generateValidSctid(seed);
|
|
194
|
+
if (kind === 'lab-result')
|
|
195
|
+
return g.generateValidLabResult(seed);
|
|
196
|
+
if (kind === 'icd10')
|
|
197
|
+
return icd10Surrogate(seed);
|
|
198
|
+
return null; // bare-number SNOMED without kind, or an unmodeled shape
|
|
199
|
+
}
|
|
200
|
+
case 'POSTAL_CODE':
|
|
201
|
+
return g.generateValidPostal(seed);
|
|
202
|
+
case 'STREET_ADDRESS':
|
|
203
|
+
return g.generateValidStreet(seed);
|
|
204
|
+
case 'COORDINATES':
|
|
205
|
+
return g.generateValidCoordinates(seed);
|
|
206
|
+
case 'NATIONAL_ID':
|
|
207
|
+
case 'TAX_ID': {
|
|
208
|
+
const scheme = meta(req, 'scheme');
|
|
209
|
+
if (scheme !== undefined) {
|
|
210
|
+
const bare = BARE_VALUE_SCHEMES[scheme];
|
|
211
|
+
if (bare !== undefined)
|
|
212
|
+
return bare(seed);
|
|
213
|
+
const gen = SCHEME_GENERATORS[scheme];
|
|
214
|
+
if (gen !== undefined)
|
|
215
|
+
return gen(seed);
|
|
216
|
+
}
|
|
217
|
+
return null; // unknown scheme → token
|
|
218
|
+
}
|
|
219
|
+
case 'VAT_NUMBER': {
|
|
220
|
+
const country = meta(req, 'country') ?? req.text.slice(0, 2).toUpperCase();
|
|
221
|
+
const c = country === 'GR' ? 'EL' : country;
|
|
222
|
+
if (g.VAT_COUNTRIES.includes(c))
|
|
223
|
+
return g.generateValidVatFor(c, seed);
|
|
224
|
+
return g.generateValidEuVat(seed);
|
|
225
|
+
}
|
|
226
|
+
case 'PERSON':
|
|
227
|
+
return personSurrogate(req.text, seed);
|
|
228
|
+
case 'ORG':
|
|
229
|
+
return ORG_POOL[seed % ORG_POOL.length];
|
|
230
|
+
case 'LOCATION':
|
|
231
|
+
return LOCATION_POOL[seed % LOCATION_POOL.length];
|
|
232
|
+
case 'DATE_OF_BIRTH':
|
|
233
|
+
// Ordering-preserving date shifting needs a date detector (absent until
|
|
234
|
+
// a later milestone) and a session offset; until then no surrogate,
|
|
235
|
+
// so the masker uses a token. Recorded in ARCHITECTURE.md D12.
|
|
236
|
+
return null;
|
|
237
|
+
default:
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=surrogates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surrogates.js","sourceRoot":"","sources":["../../../src/mask/surrogates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vault.ts — the in-memory bidirectional map between originals and their
|
|
3
|
+
* replacements.
|
|
4
|
+
*
|
|
5
|
+
* SPEC.md contract: deterministic and referentially consistent; normalized
|
|
6
|
+
* lookup so trivial variants (case, surrounding whitespace) resolve to one
|
|
7
|
+
* entry; clear() wipes it; and NO method exposes the full plaintext set
|
|
8
|
+
* except the egress guard, which needs it.
|
|
9
|
+
*
|
|
10
|
+
* That last rule is enforced by shape, not convention: the only bulk
|
|
11
|
+
* accessor is `createEgressAuditor()`, which returns a capability object
|
|
12
|
+
* whose sole consumer is `guardEgress`. Every other read requires already
|
|
13
|
+
* knowing the value being looked up (`getByOriginal`) or holds no plaintext
|
|
14
|
+
* (`getBySurrogate` returns the entry, whose `original` the restorer needs
|
|
15
|
+
* one at a time — that is restoration's whole job). There is deliberately
|
|
16
|
+
* no `entries()` / iteration API. (TypeScript cannot stop a caller from
|
|
17
|
+
* invoking the auditor factory, but the single, loudly-named door makes any
|
|
18
|
+
* misuse a visible code-review event rather than an accident. Recorded in
|
|
19
|
+
* ARCHITECTURE.md D11.)
|
|
20
|
+
*
|
|
21
|
+
* NORMALIZED LOOKUP is deliberately conservative. The lookup key folds
|
|
22
|
+
* case and trims/collapses whitespace, but a normalized key may be shared
|
|
23
|
+
* by DIFFERENT exact originals (two base58 values differing only in case
|
|
24
|
+
* are different values). The exact map always wins; the normalized index
|
|
25
|
+
* resolves a variant only when it maps to exactly one entry — an ambiguous
|
|
26
|
+
* normalized hit returns undefined rather than guessing.
|
|
27
|
+
*/
|
|
28
|
+
import type { EntityType, VaultEntry } from '../types.js';
|
|
29
|
+
/** Case-folded, trimmed, inner-whitespace-collapsed lookup key. */
|
|
30
|
+
export declare function normalizedKey(value: string): string;
|
|
31
|
+
/** What the egress guard receives: the one deliberate door to plaintext. */
|
|
32
|
+
export interface EgressAuditor {
|
|
33
|
+
/** Every entry: (exact original, canonical, id, type). Guard-only. */
|
|
34
|
+
auditEntries(): readonly {
|
|
35
|
+
original: string;
|
|
36
|
+
canonical: string;
|
|
37
|
+
id: string;
|
|
38
|
+
type: EntityType;
|
|
39
|
+
}[];
|
|
40
|
+
}
|
|
41
|
+
export declare class Vault {
|
|
42
|
+
private readonly byOriginal;
|
|
43
|
+
private readonly byCanonical;
|
|
44
|
+
private readonly byNormalized;
|
|
45
|
+
private readonly byReplacement;
|
|
46
|
+
private counter;
|
|
47
|
+
/**
|
|
48
|
+
* Register a new masked value. The caller (the masker) has already
|
|
49
|
+
* resolved consistency — `register` throws on a duplicate original or
|
|
50
|
+
* replacement rather than silently merging, because reaching that point
|
|
51
|
+
* means the masker's lookup logic is broken and restoration would be
|
|
52
|
+
* ambiguous.
|
|
53
|
+
*/
|
|
54
|
+
register(entry: Omit<VaultEntry, 'id' | 'createdAt'>): VaultEntry;
|
|
55
|
+
/**
|
|
56
|
+
* Find the entry for an original: exact writing first, then the
|
|
57
|
+
* detector's canonical form (separator variants of one identifier), then
|
|
58
|
+
* the case/whitespace-normalized index — which only resolves when
|
|
59
|
+
* unambiguous.
|
|
60
|
+
*/
|
|
61
|
+
getByOriginal(original: string, canonical?: string): VaultEntry | undefined;
|
|
62
|
+
/** Find the entry whose replacement is exactly `replacement`. */
|
|
63
|
+
getBySurrogate(replacement: string): VaultEntry | undefined;
|
|
64
|
+
/** True when `value` is already in use as a replacement or an original —
|
|
65
|
+
* the collision check surrogate selection runs before committing. */
|
|
66
|
+
wouldCollide(value: string): boolean;
|
|
67
|
+
/** All current replacements (surrogates/tokens) — contains no originals;
|
|
68
|
+
* the restorer builds its match tables from this. */
|
|
69
|
+
replacements(): readonly string[];
|
|
70
|
+
get size(): number;
|
|
71
|
+
/** Wipe everything. Called on navigation away and conversation switch. */
|
|
72
|
+
clear(): void;
|
|
73
|
+
/** THE one deliberate door to the plaintext set. Egress guard only. */
|
|
74
|
+
createEgressAuditor(): EgressAuditor;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=vault.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../../src/mask/vault.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1D,mEAAmE;AACnE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,YAAY,IAAI,SAAS;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC;CAClG;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsC;IACnE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;IAC/D,OAAO,CAAC,OAAO,CAAK;IAEpB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,UAAU;IA2BjE;;;;;OAKG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAc3E,iEAAiE;IACjE,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI3D;0EACsE;IACtE,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAapC;0DACsD;IACtD,YAAY,IAAI,SAAS,MAAM,EAAE;IAIjC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,0EAA0E;IAC1E,KAAK,IAAI,IAAI;IAOb,uEAAuE;IACvE,mBAAmB,IAAI,aAAa;CAWrC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vault.ts — the in-memory bidirectional map between originals and their
|
|
3
|
+
* replacements.
|
|
4
|
+
*
|
|
5
|
+
* SPEC.md contract: deterministic and referentially consistent; normalized
|
|
6
|
+
* lookup so trivial variants (case, surrounding whitespace) resolve to one
|
|
7
|
+
* entry; clear() wipes it; and NO method exposes the full plaintext set
|
|
8
|
+
* except the egress guard, which needs it.
|
|
9
|
+
*
|
|
10
|
+
* That last rule is enforced by shape, not convention: the only bulk
|
|
11
|
+
* accessor is `createEgressAuditor()`, which returns a capability object
|
|
12
|
+
* whose sole consumer is `guardEgress`. Every other read requires already
|
|
13
|
+
* knowing the value being looked up (`getByOriginal`) or holds no plaintext
|
|
14
|
+
* (`getBySurrogate` returns the entry, whose `original` the restorer needs
|
|
15
|
+
* one at a time — that is restoration's whole job). There is deliberately
|
|
16
|
+
* no `entries()` / iteration API. (TypeScript cannot stop a caller from
|
|
17
|
+
* invoking the auditor factory, but the single, loudly-named door makes any
|
|
18
|
+
* misuse a visible code-review event rather than an accident. Recorded in
|
|
19
|
+
* ARCHITECTURE.md D11.)
|
|
20
|
+
*
|
|
21
|
+
* NORMALIZED LOOKUP is deliberately conservative. The lookup key folds
|
|
22
|
+
* case and trims/collapses whitespace, but a normalized key may be shared
|
|
23
|
+
* by DIFFERENT exact originals (two base58 values differing only in case
|
|
24
|
+
* are different values). The exact map always wins; the normalized index
|
|
25
|
+
* resolves a variant only when it maps to exactly one entry — an ambiguous
|
|
26
|
+
* normalized hit returns undefined rather than guessing.
|
|
27
|
+
*/
|
|
28
|
+
/** Case-folded, trimmed, inner-whitespace-collapsed lookup key. */
|
|
29
|
+
export function normalizedKey(value) {
|
|
30
|
+
return value.trim().replace(/\s+/g, ' ').toLowerCase();
|
|
31
|
+
}
|
|
32
|
+
export class Vault {
|
|
33
|
+
byOriginal = new Map();
|
|
34
|
+
byCanonical = new Map();
|
|
35
|
+
byNormalized = new Map();
|
|
36
|
+
byReplacement = new Map();
|
|
37
|
+
counter = 0;
|
|
38
|
+
/**
|
|
39
|
+
* Register a new masked value. The caller (the masker) has already
|
|
40
|
+
* resolved consistency — `register` throws on a duplicate original or
|
|
41
|
+
* replacement rather than silently merging, because reaching that point
|
|
42
|
+
* means the masker's lookup logic is broken and restoration would be
|
|
43
|
+
* ambiguous.
|
|
44
|
+
*/
|
|
45
|
+
register(entry) {
|
|
46
|
+
if (this.byOriginal.has(entry.original)) {
|
|
47
|
+
throw new Error('vault: original already registered');
|
|
48
|
+
}
|
|
49
|
+
if (this.byReplacement.has(entry.replacement)) {
|
|
50
|
+
throw new Error('vault: replacement already in use');
|
|
51
|
+
}
|
|
52
|
+
const full = {
|
|
53
|
+
...entry,
|
|
54
|
+
id: `v${++this.counter}`,
|
|
55
|
+
createdAt: Date.now(),
|
|
56
|
+
};
|
|
57
|
+
this.byOriginal.set(full.original, full);
|
|
58
|
+
if (full.canonical !== undefined) {
|
|
59
|
+
if (!this.byCanonical.has(full.canonical))
|
|
60
|
+
this.byCanonical.set(full.canonical, full);
|
|
61
|
+
}
|
|
62
|
+
const key = normalizedKey(full.original);
|
|
63
|
+
let set = this.byNormalized.get(key);
|
|
64
|
+
if (set === undefined) {
|
|
65
|
+
set = new Set();
|
|
66
|
+
this.byNormalized.set(key, set);
|
|
67
|
+
}
|
|
68
|
+
set.add(full);
|
|
69
|
+
this.byReplacement.set(full.replacement, full);
|
|
70
|
+
return full;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Find the entry for an original: exact writing first, then the
|
|
74
|
+
* detector's canonical form (separator variants of one identifier), then
|
|
75
|
+
* the case/whitespace-normalized index — which only resolves when
|
|
76
|
+
* unambiguous.
|
|
77
|
+
*/
|
|
78
|
+
getByOriginal(original, canonical) {
|
|
79
|
+
const exact = this.byOriginal.get(original);
|
|
80
|
+
if (exact !== undefined)
|
|
81
|
+
return exact;
|
|
82
|
+
if (canonical !== undefined) {
|
|
83
|
+
const viaCanonical = this.byCanonical.get(canonical);
|
|
84
|
+
if (viaCanonical !== undefined)
|
|
85
|
+
return viaCanonical;
|
|
86
|
+
}
|
|
87
|
+
const set = this.byNormalized.get(normalizedKey(original));
|
|
88
|
+
if (set !== undefined && set.size === 1) {
|
|
89
|
+
return set.values().next().value;
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
/** Find the entry whose replacement is exactly `replacement`. */
|
|
94
|
+
getBySurrogate(replacement) {
|
|
95
|
+
return this.byReplacement.get(replacement);
|
|
96
|
+
}
|
|
97
|
+
/** True when `value` is already in use as a replacement or an original —
|
|
98
|
+
* the collision check surrogate selection runs before committing. */
|
|
99
|
+
wouldCollide(value) {
|
|
100
|
+
if (this.byReplacement.has(value))
|
|
101
|
+
return true;
|
|
102
|
+
if (this.byOriginal.has(value))
|
|
103
|
+
return true;
|
|
104
|
+
// Case-insensitive replacement uniqueness: the restorer's fuzzy pass
|
|
105
|
+
// (case-changed surrogates) is only sound when no two replacements
|
|
106
|
+
// collide case-insensitively.
|
|
107
|
+
const key = normalizedKey(value);
|
|
108
|
+
for (const replacement of this.byReplacement.keys()) {
|
|
109
|
+
if (normalizedKey(replacement) === key)
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
return this.byNormalized.has(key);
|
|
113
|
+
}
|
|
114
|
+
/** All current replacements (surrogates/tokens) — contains no originals;
|
|
115
|
+
* the restorer builds its match tables from this. */
|
|
116
|
+
replacements() {
|
|
117
|
+
return [...this.byReplacement.keys()];
|
|
118
|
+
}
|
|
119
|
+
get size() {
|
|
120
|
+
return this.byOriginal.size;
|
|
121
|
+
}
|
|
122
|
+
/** Wipe everything. Called on navigation away and conversation switch. */
|
|
123
|
+
clear() {
|
|
124
|
+
this.byOriginal.clear();
|
|
125
|
+
this.byCanonical.clear();
|
|
126
|
+
this.byNormalized.clear();
|
|
127
|
+
this.byReplacement.clear();
|
|
128
|
+
}
|
|
129
|
+
/** THE one deliberate door to the plaintext set. Egress guard only. */
|
|
130
|
+
createEgressAuditor() {
|
|
131
|
+
return {
|
|
132
|
+
auditEntries: () => [...this.byOriginal.values()].map((e) => ({
|
|
133
|
+
original: e.original,
|
|
134
|
+
canonical: e.canonical ?? e.original,
|
|
135
|
+
id: e.id,
|
|
136
|
+
type: e.type,
|
|
137
|
+
})),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=vault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.js","sourceRoot":"","sources":["../../../src/mask/vault.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,mEAAmE;AACnE,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACzD,CAAC;AAQD,MAAM,OAAO,KAAK;IACC,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC3C,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,YAAY,GAAG,IAAI,GAAG,EAA2B,CAAC;IAClD,aAAa,GAAG,IAAI,GAAG,EAAsB,CAAC;IACvD,OAAO,GAAG,CAAC,CAAC;IAEpB;;;;;;OAMG;IACH,QAAQ,CAAC,KAA2C;QAClD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,IAAI,GAAe;YACvB,GAAG,KAAK;YACR,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;YACxB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACd,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,QAAgB,EAAE,SAAkB;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACtC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,YAAY,KAAK,SAAS;gBAAE,OAAO,YAAY,CAAC;QACtD,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QACnC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,iEAAiE;IACjE,cAAc,CAAC,WAAmB;QAChC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED;0EACsE;IACtE,YAAY,CAAC,KAAa;QACxB,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,qEAAqE;QACrE,mEAAmE;QACnE,8BAA8B;QAC9B,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;YACpD,IAAI,aAAa,CAAC,WAAW,CAAC,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED;0DACsD;IACtD,YAAY;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9B,CAAC;IAED,0EAA0E;IAC1E,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,uEAAuE;IACvE,mBAAmB;QACjB,OAAO;YACL,YAAY,EAAE,GAAG,EAAE,CACjB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxC,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ;gBACpC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;aACb,CAAC,CAAC;SACN,CAAC;IACJ,CAAC;CACF"}
|