UNPKG

plugin-postgresql-connector

Version:

NocoBase plugin for connecting to external PostgreSQL databases

132 lines 4.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Connection = void 0; const sequelize_1 = require("sequelize"); class Connection extends sequelize_1.Model { static init(database) { super.init({ id: { type: sequelize_1.DataTypes.UUID, defaultValue: sequelize_1.DataTypes.UUIDV4, primaryKey: true, }, name: { type: sequelize_1.DataTypes.STRING, allowNull: false, unique: true, validate: { notEmpty: true, len: [1, 100], }, }, host: { type: sequelize_1.DataTypes.STRING, allowNull: false, validate: { notEmpty: true, }, }, port: { type: sequelize_1.DataTypes.INTEGER, defaultValue: 5432, validate: { min: 1, max: 65535, }, }, database: { type: sequelize_1.DataTypes.STRING, allowNull: false, validate: { notEmpty: true, len: [1, 63], }, }, username: { type: sequelize_1.DataTypes.STRING, allowNull: false, validate: { notEmpty: true, len: [1, 63], }, }, password: { type: sequelize_1.DataTypes.TEXT, // Encrypted password allowNull: false, validate: { notEmpty: true, }, }, ssl: { type: sequelize_1.DataTypes.BOOLEAN, defaultValue: false, }, isActive: { type: sequelize_1.DataTypes.BOOLEAN, defaultValue: true, }, connectionOptions: { type: sequelize_1.DataTypes.JSON, defaultValue: {}, }, createdAt: { type: sequelize_1.DataTypes.DATE, defaultValue: sequelize_1.DataTypes.NOW, }, updatedAt: { type: sequelize_1.DataTypes.DATE, defaultValue: sequelize_1.DataTypes.NOW, }, }, { sequelize: database.sequelize, modelName: 'Connection', tableName: 'postgresql_connections', timestamps: true, paranoid: true, // Soft delete indexes: [ { unique: true, fields: ['name'], where: { deletedAt: null, }, }, { fields: ['isActive'], }, ], }); } static associate(models) { this.hasMany(models.SavedQuery, { foreignKey: 'connectionId', as: 'savedQueries', onDelete: 'CASCADE', }); } // Instance methods async testConnection() { // This will be implemented in service layer return true; } getConnectionConfig() { return { host: this.getDataValue('host'), port: this.getDataValue('port'), database: this.getDataValue('database'), username: this.getDataValue('username'), password: this.getDataValue('password'), // Will be decrypted in service ssl: this.getDataValue('ssl'), connectionOptions: this.getDataValue('connectionOptions'), }; } // Hide sensitive data in JSON toJSON() { const values = { ...this.get() }; delete values.password; return values; } } exports.Connection = Connection; exports.default = Connection; //# sourceMappingURL=Connection.js.map