UNPKG

n8n

Version:

n8n Workflow Automation Tool

272 lines 11.6 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.getCredentials = getCredentials; exports.getSharedCredentials = getSharedCredentials; exports.createCredential = createCredential; exports.saveCredential = saveCredential; exports.removeCredential = removeCredential; exports.encryptCredential = encryptCredential; exports.sanitizeCredentials = sanitizeCredentials; exports.toJsonSchema = toJsonSchema; const di_1 = require("@n8n/di"); const n8n_core_1 = require("n8n-core"); const credentials_entity_1 = require("../../../../databases/entities/credentials-entity"); const shared_credentials_1 = require("../../../../databases/entities/shared-credentials"); const credentials_repository_1 = require("../../../../databases/repositories/credentials.repository"); const project_repository_1 = require("../../../../databases/repositories/project.repository"); const shared_credentials_repository_1 = require("../../../../databases/repositories/shared-credentials.repository"); const Db = __importStar(require("../../../../db")); const event_service_1 = require("../../../../events/event.service"); const external_hooks_1 = require("../../../../external-hooks"); async function getCredentials(credentialId) { return await di_1.Container.get(credentials_repository_1.CredentialsRepository).findOneBy({ id: credentialId }); } async function getSharedCredentials(userId, credentialId) { return await di_1.Container.get(shared_credentials_repository_1.SharedCredentialsRepository).findOne({ where: { project: { projectRelations: { userId } }, credentialsId: credentialId, }, relations: ['credentials'], }); } async function createCredential(properties) { const newCredential = new credentials_entity_1.CredentialsEntity(); Object.assign(newCredential, properties); return newCredential; } async function saveCredential(credential, user, encryptedData) { const result = await Db.transaction(async (transactionManager) => { const savedCredential = await transactionManager.save(credential); savedCredential.data = credential.data; const newSharedCredential = new shared_credentials_1.SharedCredentials(); const personalProject = await di_1.Container.get(project_repository_1.ProjectRepository).getPersonalProjectForUserOrFail(user.id, transactionManager); Object.assign(newSharedCredential, { role: 'credential:owner', credentials: savedCredential, projectId: personalProject.id, }); await transactionManager.save(newSharedCredential); return savedCredential; }); await di_1.Container.get(external_hooks_1.ExternalHooks).run('credentials.create', [encryptedData]); const project = await di_1.Container.get(shared_credentials_repository_1.SharedCredentialsRepository).findCredentialOwningProject(credential.id); di_1.Container.get(event_service_1.EventService).emit('credentials-created', { user, credentialType: credential.type, credentialId: credential.id, projectId: project?.id, projectType: project?.type, publicApi: true, }); return result; } async function removeCredential(user, credentials) { await di_1.Container.get(external_hooks_1.ExternalHooks).run('credentials.delete', [credentials.id]); di_1.Container.get(event_service_1.EventService).emit('credentials-deleted', { user, credentialType: credentials.type, credentialId: credentials.id, }); return await di_1.Container.get(credentials_repository_1.CredentialsRepository).remove(credentials); } async function encryptCredential(credential) { const coreCredential = new n8n_core_1.Credentials({ id: null, name: credential.name }, credential.type); coreCredential.setData(credential.data); return coreCredential.getDataToSave(); } function sanitizeCredentials(credentials) { const argIsArray = Array.isArray(credentials); const credentialsList = argIsArray ? credentials : [credentials]; const sanitizedCredentials = credentialsList.map((credential) => { const { data, shared, ...rest } = credential; return rest; }); return argIsArray ? sanitizedCredentials : sanitizedCredentials[0]; } function toJsonSchema(properties) { const jsonSchema = { additionalProperties: false, type: 'object', properties: {}, allOf: [], required: [], }; const optionsValues = {}; const resolveProperties = []; properties .filter((property) => property.type === 'options') .forEach((property) => { Object.assign(optionsValues, { [property.name]: property.options?.map((option) => option.value), }); }); let requiredFields = []; const propertyRequiredDependencies = {}; properties.forEach((property) => { if (property.required) { requiredFields.push(property.name); } if (property.type === 'options') { Object.assign(jsonSchema.properties, { [property.name]: { type: 'string', enum: property.options?.map((data) => data.value), }, }); } else { Object.assign(jsonSchema.properties, { [property.name]: { type: property.type, }, }); } if (property.displayOptions?.show) { const dependantName = Object.keys(property.displayOptions?.show)[0] || ''; const displayOptionsValues = property.displayOptions.show[dependantName]; let dependantValue = ''; if (displayOptionsValues && Array.isArray(displayOptionsValues) && displayOptionsValues[0]) { dependantValue = displayOptionsValues[0]; } if (propertyRequiredDependencies[dependantName] === undefined) { propertyRequiredDependencies[dependantName] = {}; } if (!resolveProperties.includes(dependantName)) { let conditionalValue; if (typeof dependantValue === 'object' && dependantValue._cnd) { const [key, targetValue] = Object.entries(dependantValue._cnd)[0]; if (key === 'eq') { conditionalValue = { const: [targetValue], }; } else if (key === 'not') { conditionalValue = { not: { const: [targetValue], }, }; } else if (key === 'gt') { conditionalValue = { type: 'number', exclusiveMinimum: [targetValue], }; } else if (key === 'gte') { conditionalValue = { type: 'number', minimum: [targetValue], }; } else if (key === 'lt') { conditionalValue = { type: 'number', exclusiveMaximum: [targetValue], }; } else if (key === 'lte') { conditionalValue = { type: 'number', maximum: [targetValue], }; } else if (key === 'startsWith') { conditionalValue = { type: 'string', pattern: `^${targetValue}`, }; } else if (key === 'endsWith') { conditionalValue = { type: 'string', pattern: `${targetValue}$`, }; } else if (key === 'includes') { conditionalValue = { type: 'string', pattern: `${targetValue}`, }; } else if (key === 'regex') { conditionalValue = { type: 'string', pattern: `${targetValue}`, }; } else { conditionalValue = { enum: [dependantValue], }; } } else { conditionalValue = { enum: [dependantValue], }; } propertyRequiredDependencies[dependantName] = { if: { properties: { [dependantName]: conditionalValue, }, }, then: { allOf: [], }, else: { allOf: [], }, }; } propertyRequiredDependencies[dependantName].then?.allOf.push({ required: [property.name] }); propertyRequiredDependencies[dependantName].else?.allOf.push({ not: { required: [property.name] }, }); resolveProperties.push(dependantName); requiredFields = requiredFields.filter((field) => field !== property.name); } }); Object.assign(jsonSchema, { required: requiredFields }); jsonSchema.allOf = Object.values(propertyRequiredDependencies); if (!jsonSchema.allOf.length) { delete jsonSchema.allOf; } return jsonSchema; } //# sourceMappingURL=credentials.service.js.map