UNPKG

@n8n/n8n-nodes-langchain

Version:

![Banner image](https://user-images.githubusercontent.com/10284570/173569848-c624317f-42b1-45a6-ab09-f0ea3c247648.png)

195 lines 8.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createCustomRegexCheckFn = exports.createPiiCheckFn = exports.PII_NAME_MAP = exports.PIIEntity = void 0; const common_1 = require("../../helpers/common"); var PIIEntity; (function (PIIEntity) { PIIEntity["CREDIT_CARD"] = "CREDIT_CARD"; PIIEntity["CRYPTO"] = "CRYPTO"; PIIEntity["DATE_TIME"] = "DATE_TIME"; PIIEntity["EMAIL_ADDRESS"] = "EMAIL_ADDRESS"; PIIEntity["IBAN_CODE"] = "IBAN_CODE"; PIIEntity["IP_ADDRESS"] = "IP_ADDRESS"; PIIEntity["LOCATION"] = "LOCATION"; PIIEntity["PHONE_NUMBER"] = "PHONE_NUMBER"; PIIEntity["MEDICAL_LICENSE"] = "MEDICAL_LICENSE"; PIIEntity["US_BANK_NUMBER"] = "US_BANK_NUMBER"; PIIEntity["US_DRIVER_LICENSE"] = "US_DRIVER_LICENSE"; PIIEntity["US_ITIN"] = "US_ITIN"; PIIEntity["US_PASSPORT"] = "US_PASSPORT"; PIIEntity["US_SSN"] = "US_SSN"; PIIEntity["UK_NHS"] = "UK_NHS"; PIIEntity["UK_NINO"] = "UK_NINO"; PIIEntity["ES_NIF"] = "ES_NIF"; PIIEntity["ES_NIE"] = "ES_NIE"; PIIEntity["IT_FISCAL_CODE"] = "IT_FISCAL_CODE"; PIIEntity["IT_DRIVER_LICENSE"] = "IT_DRIVER_LICENSE"; PIIEntity["IT_VAT_CODE"] = "IT_VAT_CODE"; PIIEntity["IT_PASSPORT"] = "IT_PASSPORT"; PIIEntity["IT_IDENTITY_CARD"] = "IT_IDENTITY_CARD"; PIIEntity["PL_PESEL"] = "PL_PESEL"; PIIEntity["SG_NRIC_FIN"] = "SG_NRIC_FIN"; PIIEntity["SG_UEN"] = "SG_UEN"; PIIEntity["AU_ABN"] = "AU_ABN"; PIIEntity["AU_ACN"] = "AU_ACN"; PIIEntity["AU_TFN"] = "AU_TFN"; PIIEntity["AU_MEDICARE"] = "AU_MEDICARE"; PIIEntity["IN_PAN"] = "IN_PAN"; PIIEntity["IN_AADHAAR"] = "IN_AADHAAR"; PIIEntity["IN_VEHICLE_REGISTRATION"] = "IN_VEHICLE_REGISTRATION"; PIIEntity["IN_VOTER"] = "IN_VOTER"; PIIEntity["IN_PASSPORT"] = "IN_PASSPORT"; PIIEntity["FI_PERSONAL_IDENTITY_CODE"] = "FI_PERSONAL_IDENTITY_CODE"; })(PIIEntity || (exports.PIIEntity = PIIEntity = {})); const allEntities = Object.values(PIIEntity); exports.PII_NAME_MAP = { [PIIEntity.CREDIT_CARD]: 'Credit Card', [PIIEntity.CRYPTO]: 'Crypto', [PIIEntity.DATE_TIME]: 'Date Time', [PIIEntity.EMAIL_ADDRESS]: 'Email Address', [PIIEntity.IBAN_CODE]: 'IBAN Code', [PIIEntity.IP_ADDRESS]: 'IP Address', [PIIEntity.LOCATION]: 'Location', [PIIEntity.PHONE_NUMBER]: 'Phone Number', [PIIEntity.MEDICAL_LICENSE]: 'Medical License', [PIIEntity.US_BANK_NUMBER]: 'US Bank Number', [PIIEntity.US_DRIVER_LICENSE]: 'US Driver License', [PIIEntity.US_ITIN]: 'US ITIN', [PIIEntity.US_PASSPORT]: 'US Passport', [PIIEntity.US_SSN]: 'US SSN', [PIIEntity.UK_NHS]: 'UK NHS', [PIIEntity.UK_NINO]: 'UK NINO', [PIIEntity.ES_NIF]: 'ES NIF', [PIIEntity.ES_NIE]: 'ES NIE', [PIIEntity.IT_FISCAL_CODE]: 'IT Fiscal Code', [PIIEntity.IT_DRIVER_LICENSE]: 'IT Driver License', [PIIEntity.IT_VAT_CODE]: 'IT VAT Code', [PIIEntity.IT_PASSPORT]: 'IT Passport', [PIIEntity.IT_IDENTITY_CARD]: 'IT Identity Card', [PIIEntity.PL_PESEL]: 'PL PESEL', [PIIEntity.SG_NRIC_FIN]: 'SG NRIC FIN', [PIIEntity.SG_UEN]: 'SG UEN', [PIIEntity.AU_ABN]: 'AU ABN', [PIIEntity.AU_ACN]: 'AU ACN', [PIIEntity.AU_TFN]: 'AU TFN', [PIIEntity.AU_MEDICARE]: 'AU Medicare', [PIIEntity.IN_PAN]: 'IN PAN', [PIIEntity.IN_AADHAAR]: 'IN AADHAAR', [PIIEntity.IN_VEHICLE_REGISTRATION]: 'IN Vehicle Registration', [PIIEntity.IN_VOTER]: 'IN Voter', [PIIEntity.IN_PASSPORT]: 'IN Passport', [PIIEntity.FI_PERSONAL_IDENTITY_CODE]: 'FI Personal Identity Code', }; const DEFAULT_PII_PATTERNS = { [PIIEntity.CREDIT_CARD]: /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b/g, [PIIEntity.CRYPTO]: /\b[13][a-km-zA-HJ-NP-Z1-9]{25,34}\b/g, [PIIEntity.DATE_TIME]: /\b(0[1-9]|1[0-2])[\/\-](0[1-9]|[12]\d|3[01])[\/\-](19|20)\d{2}\b/g, [PIIEntity.EMAIL_ADDRESS]: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g, [PIIEntity.IBAN_CODE]: /\b[A-Z]{2}[0-9]{2}[A-Z0-9]{4}[0-9]{7}([A-Z0-9]?){0,16}\b/g, [PIIEntity.IP_ADDRESS]: /\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/g, [PIIEntity.LOCATION]: /\b[A-Za-z\s]+(?:Street|St|Avenue|Ave|Road|Rd|Boulevard|Blvd|Drive|Dr|Lane|Ln|Place|Pl|Court|Ct|Way|Highway|Hwy)\b/g, [PIIEntity.PHONE_NUMBER]: /\b[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}\b/g, [PIIEntity.MEDICAL_LICENSE]: /\b[A-Z]{2}\d{6}\b/g, [PIIEntity.US_BANK_NUMBER]: /\b\d{8,17}\b/g, [PIIEntity.US_DRIVER_LICENSE]: /\b[A-Z]\d{7}\b/g, [PIIEntity.US_ITIN]: /\b9\d{2}-\d{2}-\d{4}\b/g, [PIIEntity.US_PASSPORT]: /\b[A-Z]\d{8}\b/g, [PIIEntity.US_SSN]: /\b\d{3}-\d{2}-\d{4}\b|\b\d{9}\b/g, [PIIEntity.UK_NHS]: /\b\d{3} \d{3} \d{4}\b/g, [PIIEntity.UK_NINO]: /\b[A-Z]{2}\d{6}[A-Z]\b/g, [PIIEntity.ES_NIF]: /\b[A-Z]\d{8}\b/g, [PIIEntity.ES_NIE]: /\b[A-Z]\d{8}\b/g, [PIIEntity.IT_FISCAL_CODE]: /\b[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]\b/g, [PIIEntity.IT_DRIVER_LICENSE]: /\b[A-Z]{2}\d{7}\b/g, [PIIEntity.IT_VAT_CODE]: /\bIT\d{11}\b/g, [PIIEntity.IT_PASSPORT]: /\b[A-Z]{2}\d{7}\b/g, [PIIEntity.IT_IDENTITY_CARD]: /\b[A-Z]{2}\d{7}\b/g, [PIIEntity.PL_PESEL]: /\b\d{11}\b/g, [PIIEntity.SG_NRIC_FIN]: /\b[A-Z]\d{7}[A-Z]\b/g, [PIIEntity.SG_UEN]: /\b\d{8}[A-Z]\b|\b\d{9}[A-Z]\b/g, [PIIEntity.AU_ABN]: /\b\d{2} \d{3} \d{3} \d{3}\b/g, [PIIEntity.AU_ACN]: /\b\d{3} \d{3} \d{3}\b/g, [PIIEntity.AU_TFN]: /\b\d{9}\b/g, [PIIEntity.AU_MEDICARE]: /\b\d{4} \d{5} \d{1}\b/g, [PIIEntity.IN_PAN]: /\b[A-Z]{5}\d{4}[A-Z]\b/g, [PIIEntity.IN_AADHAAR]: /\b\d{4} \d{4} \d{4}\b/g, [PIIEntity.IN_VEHICLE_REGISTRATION]: /\b[A-Z]{2}\d{2}[A-Z]{2}\d{4}\b/g, [PIIEntity.IN_VOTER]: /\b[A-Z]{3}\d{7}\b/g, [PIIEntity.IN_PASSPORT]: /\b[A-Z]\d{7}\b/g, [PIIEntity.FI_PERSONAL_IDENTITY_CODE]: /\b\d{6}[+-A]\d{3}[A-Z0-9]\b/g, }; function detectPii(text, config) { if (!text) { return { mapping: {}, analyzerResults: [], }; } const grouped = {}; const analyzerResults = []; const matchAgainstPattern = (name, pattern) => { const flags = pattern.flags.includes('g') ? pattern.flags : pattern.flags + 'g'; const regex = new RegExp(pattern.source, flags); let match; while ((match = regex.exec(text)) !== null) { const entityType = name; const start = match.index; const end = match.index + match[0].length; if (!grouped[entityType]) { grouped[entityType] = []; } grouped[entityType].push(text.substring(start, end)); analyzerResults.push({ entityType, text: text.substring(start, end), }); } }; const entities = config.entities ?? allEntities; for (const entity of entities) { const pattern = DEFAULT_PII_PATTERNS[entity]; if (pattern) { matchAgainstPattern(entity, pattern); } } if (config.customRegex?.length) { for (const regex of config.customRegex) { matchAgainstPattern(regex.name, (0, common_1.parseRegex)(regex.value)); } } return { mapping: grouped, analyzerResults, }; } const createPiiCheckFn = (config) => { return (input) => { const detection = detectPii(input, config); const piiFound = detection.mapping && Object.keys(detection.mapping).length > 0; return { guardrailName: 'personalData', tripwireTriggered: piiFound, info: { maskEntities: detection.mapping, analyzerResults: detection.analyzerResults, }, }; }; }; exports.createPiiCheckFn = createPiiCheckFn; const createCustomRegexCheckFn = (config) => { return (input) => { const detection = detectPii(input, { customRegex: config.customRegex, entities: [] }); const customRegexFound = detection.mapping && Object.keys(detection.mapping).length > 0; return { guardrailName: 'customRegex', tripwireTriggered: customRegexFound, info: { maskEntities: detection.mapping, analyzerResults: detection.analyzerResults, }, }; }; }; exports.createCustomRegexCheckFn = createCustomRegexCheckFn; //# sourceMappingURL=pii.js.map