@n8n/n8n-nodes-langchain
Version:

232 lines • 9.62 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var pii_exports = {};
__export(pii_exports, {
PIIEntity: () => PIIEntity,
PII_NAME_MAP: () => PII_NAME_MAP,
createCustomRegexCheckFn: () => createCustomRegexCheckFn,
createPiiCheckFn: () => createPiiCheckFn
});
module.exports = __toCommonJS(pii_exports);
var import_common = require("../../helpers/common");
var PIIEntity = /* @__PURE__ */ ((PIIEntity2) => {
PIIEntity2["CREDIT_CARD"] = "CREDIT_CARD";
PIIEntity2["CRYPTO"] = "CRYPTO";
PIIEntity2["DATE_TIME"] = "DATE_TIME";
PIIEntity2["EMAIL_ADDRESS"] = "EMAIL_ADDRESS";
PIIEntity2["IBAN_CODE"] = "IBAN_CODE";
PIIEntity2["IP_ADDRESS"] = "IP_ADDRESS";
PIIEntity2["LOCATION"] = "LOCATION";
PIIEntity2["PHONE_NUMBER"] = "PHONE_NUMBER";
PIIEntity2["MEDICAL_LICENSE"] = "MEDICAL_LICENSE";
PIIEntity2["US_BANK_NUMBER"] = "US_BANK_NUMBER";
PIIEntity2["US_DRIVER_LICENSE"] = "US_DRIVER_LICENSE";
PIIEntity2["US_ITIN"] = "US_ITIN";
PIIEntity2["US_PASSPORT"] = "US_PASSPORT";
PIIEntity2["US_SSN"] = "US_SSN";
PIIEntity2["UK_NHS"] = "UK_NHS";
PIIEntity2["UK_NINO"] = "UK_NINO";
PIIEntity2["ES_NIF"] = "ES_NIF";
PIIEntity2["ES_NIE"] = "ES_NIE";
PIIEntity2["IT_FISCAL_CODE"] = "IT_FISCAL_CODE";
PIIEntity2["IT_DRIVER_LICENSE"] = "IT_DRIVER_LICENSE";
PIIEntity2["IT_VAT_CODE"] = "IT_VAT_CODE";
PIIEntity2["IT_PASSPORT"] = "IT_PASSPORT";
PIIEntity2["IT_IDENTITY_CARD"] = "IT_IDENTITY_CARD";
PIIEntity2["PL_PESEL"] = "PL_PESEL";
PIIEntity2["SG_NRIC_FIN"] = "SG_NRIC_FIN";
PIIEntity2["SG_UEN"] = "SG_UEN";
PIIEntity2["AU_ABN"] = "AU_ABN";
PIIEntity2["AU_ACN"] = "AU_ACN";
PIIEntity2["AU_TFN"] = "AU_TFN";
PIIEntity2["AU_MEDICARE"] = "AU_MEDICARE";
PIIEntity2["IN_PAN"] = "IN_PAN";
PIIEntity2["IN_AADHAAR"] = "IN_AADHAAR";
PIIEntity2["IN_VEHICLE_REGISTRATION"] = "IN_VEHICLE_REGISTRATION";
PIIEntity2["IN_VOTER"] = "IN_VOTER";
PIIEntity2["IN_PASSPORT"] = "IN_PASSPORT";
PIIEntity2["FI_PERSONAL_IDENTITY_CODE"] = "FI_PERSONAL_IDENTITY_CODE";
return PIIEntity2;
})(PIIEntity || {});
const allEntities = Object.values(PIIEntity);
const PII_NAME_MAP = {
["CREDIT_CARD" /* CREDIT_CARD */]: "Credit Card",
["CRYPTO" /* CRYPTO */]: "Crypto",
["DATE_TIME" /* DATE_TIME */]: "Date Time",
["EMAIL_ADDRESS" /* EMAIL_ADDRESS */]: "Email Address",
["IBAN_CODE" /* IBAN_CODE */]: "IBAN Code",
["IP_ADDRESS" /* IP_ADDRESS */]: "IP Address",
["LOCATION" /* LOCATION */]: "Location",
["PHONE_NUMBER" /* PHONE_NUMBER */]: "Phone Number",
["MEDICAL_LICENSE" /* MEDICAL_LICENSE */]: "Medical License",
["US_BANK_NUMBER" /* US_BANK_NUMBER */]: "US Bank Number",
["US_DRIVER_LICENSE" /* US_DRIVER_LICENSE */]: "US Driver License",
["US_ITIN" /* US_ITIN */]: "US ITIN",
["US_PASSPORT" /* US_PASSPORT */]: "US Passport",
["US_SSN" /* US_SSN */]: "US SSN",
["UK_NHS" /* UK_NHS */]: "UK NHS",
["UK_NINO" /* UK_NINO */]: "UK NINO",
["ES_NIF" /* ES_NIF */]: "ES NIF",
["ES_NIE" /* ES_NIE */]: "ES NIE",
["IT_FISCAL_CODE" /* IT_FISCAL_CODE */]: "IT Fiscal Code",
["IT_DRIVER_LICENSE" /* IT_DRIVER_LICENSE */]: "IT Driver License",
["IT_VAT_CODE" /* IT_VAT_CODE */]: "IT VAT Code",
["IT_PASSPORT" /* IT_PASSPORT */]: "IT Passport",
["IT_IDENTITY_CARD" /* IT_IDENTITY_CARD */]: "IT Identity Card",
["PL_PESEL" /* PL_PESEL */]: "PL PESEL",
["SG_NRIC_FIN" /* SG_NRIC_FIN */]: "SG NRIC FIN",
["SG_UEN" /* SG_UEN */]: "SG UEN",
["AU_ABN" /* AU_ABN */]: "AU ABN",
["AU_ACN" /* AU_ACN */]: "AU ACN",
["AU_TFN" /* AU_TFN */]: "AU TFN",
["AU_MEDICARE" /* AU_MEDICARE */]: "AU Medicare",
["IN_PAN" /* IN_PAN */]: "IN PAN",
["IN_AADHAAR" /* IN_AADHAAR */]: "IN AADHAAR",
["IN_VEHICLE_REGISTRATION" /* IN_VEHICLE_REGISTRATION */]: "IN Vehicle Registration",
["IN_VOTER" /* IN_VOTER */]: "IN Voter",
["IN_PASSPORT" /* IN_PASSPORT */]: "IN Passport",
["FI_PERSONAL_IDENTITY_CODE" /* FI_PERSONAL_IDENTITY_CODE */]: "FI Personal Identity Code"
};
const DEFAULT_PII_PATTERNS = {
["CREDIT_CARD" /* CREDIT_CARD */]: /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b/g,
["CRYPTO" /* CRYPTO */]: /\b[13][a-km-zA-HJ-NP-Z1-9]{25,34}\b/g,
["DATE_TIME" /* DATE_TIME */]: /\b(0[1-9]|1[0-2])[\/\-](0[1-9]|[12]\d|3[01])[\/\-](19|20)\d{2}\b/g,
["EMAIL_ADDRESS" /* EMAIL_ADDRESS */]: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,
["IBAN_CODE" /* IBAN_CODE */]: /\b[A-Z]{2}[0-9]{2}[A-Z0-9]{4}[0-9]{7}([A-Z0-9]?){0,16}\b/g,
["IP_ADDRESS" /* IP_ADDRESS */]: /\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/g,
["LOCATION" /* 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,
["PHONE_NUMBER" /* PHONE_NUMBER */]: /\b[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}\b/g,
["MEDICAL_LICENSE" /* MEDICAL_LICENSE */]: /\b[A-Z]{2}\d{6}\b/g,
// USA
["US_BANK_NUMBER" /* US_BANK_NUMBER */]: /\b\d{8,17}\b/g,
["US_DRIVER_LICENSE" /* US_DRIVER_LICENSE */]: /\b[A-Z]\d{7}\b/g,
["US_ITIN" /* US_ITIN */]: /\b9\d{2}-\d{2}-\d{4}\b/g,
["US_PASSPORT" /* US_PASSPORT */]: /\b[A-Z]\d{8}\b/g,
["US_SSN" /* US_SSN */]: /\b\d{3}-\d{2}-\d{4}\b|\b\d{9}\b/g,
// UK
["UK_NHS" /* UK_NHS */]: /\b\d{3} \d{3} \d{4}\b/g,
["UK_NINO" /* UK_NINO */]: /\b[A-Z]{2}\d{6}[A-Z]\b/g,
// Spain
["ES_NIF" /* ES_NIF */]: /\b[A-Z]\d{8}\b/g,
["ES_NIE" /* ES_NIE */]: /\b[A-Z]\d{8}\b/g,
// Italy
["IT_FISCAL_CODE" /* IT_FISCAL_CODE */]: /\b[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]\b/g,
["IT_DRIVER_LICENSE" /* IT_DRIVER_LICENSE */]: /\b[A-Z]{2}\d{7}\b/g,
["IT_VAT_CODE" /* IT_VAT_CODE */]: /\bIT\d{11}\b/g,
["IT_PASSPORT" /* IT_PASSPORT */]: /\b[A-Z]{2}\d{7}\b/g,
["IT_IDENTITY_CARD" /* IT_IDENTITY_CARD */]: /\b[A-Z]{2}\d{7}\b/g,
// Poland
["PL_PESEL" /* PL_PESEL */]: /\b\d{11}\b/g,
// Singapore
["SG_NRIC_FIN" /* SG_NRIC_FIN */]: /\b[A-Z]\d{7}[A-Z]\b/g,
["SG_UEN" /* SG_UEN */]: /\b\d{8}[A-Z]\b|\b\d{9}[A-Z]\b/g,
// Australia
["AU_ABN" /* AU_ABN */]: /\b\d{2} \d{3} \d{3} \d{3}\b/g,
["AU_ACN" /* AU_ACN */]: /\b\d{3} \d{3} \d{3}\b/g,
["AU_TFN" /* AU_TFN */]: /\b\d{9}\b/g,
["AU_MEDICARE" /* AU_MEDICARE */]: /\b\d{4} \d{5} \d{1}\b/g,
// India
["IN_PAN" /* IN_PAN */]: /\b[A-Z]{5}\d{4}[A-Z]\b/g,
["IN_AADHAAR" /* IN_AADHAAR */]: /\b\d{4} \d{4} \d{4}\b/g,
["IN_VEHICLE_REGISTRATION" /* IN_VEHICLE_REGISTRATION */]: /\b[A-Z]{2}\d{2}[A-Z]{2}\d{4}\b/g,
["IN_VOTER" /* IN_VOTER */]: /\b[A-Z]{3}\d{7}\b/g,
["IN_PASSPORT" /* IN_PASSPORT */]: /\b[A-Z]\d{7}\b/g,
// Finland
["FI_PERSONAL_IDENTITY_CODE" /* 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, import_common.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
}
};
};
};
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
}
};
};
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
PIIEntity,
PII_NAME_MAP,
createCustomRegexCheckFn,
createPiiCheckFn
});
//# sourceMappingURL=pii.js.map