n8n
Version:
n8n Workflow Automation Tool
87 lines • 3.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sanitizeUnknownAgentCredentials = sanitizeUnknownAgentCredentials;
const api_types_1 = require("@n8n/api-types");
function clearUnknownCredentialId(credentialId, accessibleCredentialIds, allowManagedCredentialToken = false) {
if (typeof credentialId !== 'string' || credentialId === '') {
return credentialId;
}
if (allowManagedCredentialToken && credentialId === api_types_1.MANAGED_CREDENTIAL_TOKEN) {
return credentialId;
}
return accessibleCredentialIds.has(credentialId) ? credentialId : '';
}
function isManagedEpisodicMemoryCredentialPath(path) {
return path.join('.') === 'memory.episodicMemory.credential';
}
function sanitizeUnknownCredentialsInValue(value, accessibleCredentialIds, path = []) {
if (Array.isArray(value)) {
return value.map((entry) => sanitizeUnknownCredentialsInValue(entry, accessibleCredentialIds, path));
}
if (typeof value !== 'object' || value === null) {
return value;
}
const record = value;
const sanitized = {};
for (const [key, entry] of Object.entries(record)) {
const nextPath = [...path, key];
if (key === 'credential' && typeof entry === 'string') {
sanitized[key] = clearUnknownCredentialId(entry, accessibleCredentialIds, isManagedEpisodicMemoryCredentialPath(nextPath));
continue;
}
if (key === 'credentialId' && typeof entry === 'string') {
sanitized[key] = clearUnknownCredentialId(entry, accessibleCredentialIds);
continue;
}
if (key === 'credentials' &&
typeof entry === 'object' &&
entry !== null &&
!Array.isArray(entry)) {
sanitized[key] = Object.fromEntries(Object.entries(entry).map(([credType, credRef]) => {
if (typeof credRef !== 'object' || credRef === null || Array.isArray(credRef)) {
return [credType, credRef];
}
const credentialRef = credRef;
if (!('id' in credentialRef) || typeof credentialRef.id !== 'string') {
return [
credType,
sanitizeUnknownCredentialsInValue(credentialRef, accessibleCredentialIds, [
...nextPath,
credType,
]),
];
}
return [
credType,
{
...credentialRef,
id: clearUnknownCredentialId(credentialRef.id, accessibleCredentialIds),
},
];
}));
continue;
}
sanitized[key] = sanitizeUnknownCredentialsInValue(entry, accessibleCredentialIds, nextPath);
}
return sanitized;
}
function sanitizeUnknownAgentCredentials(raw, accessibleCredentialIds) {
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
return raw;
}
const sanitized = sanitizeUnknownCredentialsInValue(raw, accessibleCredentialIds);
if (!isRecord(sanitized)) {
return sanitized;
}
const model = typeof sanitized.model === 'string' ? sanitized.model : undefined;
if ((0, api_types_1.isDraftAgentConfig)({ model }) &&
typeof sanitized.credential === 'string' &&
sanitized.credential !== '') {
sanitized.credential = '';
}
return sanitized;
}
function isRecord(value) {
return typeof value === 'object' && value !== null && !Array.isArray(value);
}
//# sourceMappingURL=sanitize-unknown-agent-credentials.js.map