39628-vm/backend/src/db/migrations/1776128248468.js
2026-04-14 00:58:20 +00:00

2890 lines
91 KiB
JavaScript

module.exports = {
/**
* @param {QueryInterface} queryInterface
* @param {Sequelize} Sequelize
* @returns {Promise<void>}
*/
async up(queryInterface, Sequelize) {
/**
* @type {Transaction}
*/
const transaction = await queryInterface.sequelize.transaction();
try {
await queryInterface.createTable('users', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('roles', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('permissions', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('platform_ai_configs', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('env_var_snapshots', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('connectivity_tests', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('models', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('api_keys', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('proxy_requests', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('tool_schemas', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.createTable('gateway_settings', {
id: {
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.DataTypes.UUIDV4,
primaryKey: true,
},
createdById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
updatedById: {
type: Sequelize.DataTypes.UUID,
references: {
key: 'id',
model: 'users',
},
},
createdAt: { type: Sequelize.DataTypes.DATE },
updatedAt: { type: Sequelize.DataTypes.DATE },
deletedAt: { type: Sequelize.DataTypes.DATE },
importHash: {
type: Sequelize.DataTypes.STRING(255),
allowNull: true,
unique: true,
},
}, { transaction });
await queryInterface.addColumn(
'users',
'firstName',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'lastName',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'phoneNumber',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'email',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'disabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'password',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'emailVerified',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'emailVerificationToken',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'emailVerificationTokenExpiresAt',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'passwordResetToken',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'passwordResetTokenExpiresAt',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'provider',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'users',
'app_roleId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'roles',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'roles',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'roles',
'role_customization',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'permissions',
'name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'platform_ai_configs',
'platform_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'platform_ai_configs',
'capability_level',
{
type: Sequelize.DataTypes.ENUM,
values: ['native_sdk','integration_toggle','managed_credentials','none','unknown'],
},
{ transaction }
);
await queryInterface.addColumn(
'platform_ai_configs',
'status',
{
type: Sequelize.DataTypes.ENUM,
values: ['pending_probe','probe_failed','probe_succeeded','disabled'],
},
{ transaction }
);
await queryInterface.addColumn(
'platform_ai_configs',
'runtime_type',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'platform_ai_configs',
'base_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'platform_ai_configs',
'is_public_endpoint',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'platform_ai_configs',
'auth_scheme',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'platform_ai_configs',
'requires_proxying',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'platform_ai_configs',
'notes',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'platform_ai_configs',
'owner_userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'env_var_snapshots',
'snapshot_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'env_var_snapshots',
'captured_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'env_var_snapshots',
'visibility',
{
type: Sequelize.DataTypes.ENUM,
values: ['dev_only','internal','redacted'],
},
{ transaction }
);
await queryInterface.addColumn(
'env_var_snapshots',
'filter_regex',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'env_var_snapshots',
'raw_output',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'env_var_snapshots',
'platform_ai_configId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'platform_ai_configs',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'test_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'started_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'finished_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'test_type',
{
type: Sequelize.DataTypes.ENUM,
values: ['models_list','chat_hi','messages_hi','healthcheck','custom'],
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'request_command',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'request_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'request_method',
{
type: Sequelize.DataTypes.ENUM,
values: ['GET','POST'],
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'request_headers',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'request_body',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'response_status',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'response_headers',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'response_body',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'succeeded',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'error_message',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'connectivity_tests',
'platform_ai_configId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'platform_ai_configs',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'models',
'model_key',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'models',
'display_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'models',
'provider_family',
{
type: Sequelize.DataTypes.ENUM,
values: ['openai_style','anthropic_style','platform_native'],
},
{ transaction }
);
await queryInterface.addColumn(
'models',
'api_compatibility',
{
type: Sequelize.DataTypes.ENUM,
values: ['openai','anthropic','both'],
},
{ transaction }
);
await queryInterface.addColumn(
'models',
'supports_tools',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'models',
'supports_streaming',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'models',
'context_window_tokens',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'models',
'input_cost_per_million',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'models',
'output_cost_per_million',
{
type: Sequelize.DataTypes.DECIMAL,
},
{ transaction }
);
await queryInterface.addColumn(
'models',
'is_enabled',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'models',
'platform_ai_configId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'platform_ai_configs',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'key_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'token_value',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'token_type',
{
type: Sequelize.DataTypes.ENUM,
values: ['static','rotating'],
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'is_active',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'activated_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'expires_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'api_keys',
'owner_userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'request_uid',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'received_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'completed_at',
{
type: Sequelize.DataTypes.DATE,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'endpoint',
{
type: Sequelize.DataTypes.ENUM,
values: ['v1_models','v1_chat_completions','v1_messages'],
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'request_mode',
{
type: Sequelize.DataTypes.ENUM,
values: ['stream','non_stream'],
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'compat_route',
{
type: Sequelize.DataTypes.ENUM,
values: ['openai_to_openai','openai_to_anthropic','anthropic_to_anthropic','anthropic_to_openai'],
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'client_ip',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'user_agent',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'auth_subject',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'requested_model',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'resolved_model',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'http_status',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'latency_ms',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'succeeded',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'error_code',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'error_message',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'prompt_tokens',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'completion_tokens',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'total_tokens',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'api_keyId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'api_keys',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'proxy_requests',
'platform_ai_configId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'platform_ai_configs',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'tool_schemas',
'tool_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'tool_schemas',
'description',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'tool_schemas',
'schema_format',
{
type: Sequelize.DataTypes.ENUM,
values: ['openai_function','anthropic_tool'],
},
{ transaction }
);
await queryInterface.addColumn(
'tool_schemas',
'schema_json',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'tool_schemas',
'is_active',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'tool_schemas',
'owner_userId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
{ transaction }
);
await queryInterface.addColumn(
'gateway_settings',
'settings_name',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'gateway_settings',
'public_base_url',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'gateway_settings',
'auth_header_example',
{
type: Sequelize.DataTypes.TEXT,
},
{ transaction }
);
await queryInterface.addColumn(
'gateway_settings',
'keepalive_seconds',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await queryInterface.addColumn(
'gateway_settings',
'log_env_in_dev',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'gateway_settings',
'enable_request_logging',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'gateway_settings',
'enable_response_logging',
{
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
{ transaction }
);
await queryInterface.addColumn(
'gateway_settings',
'log_redaction_mode',
{
type: Sequelize.DataTypes.ENUM,
values: ['none','partial','full'],
},
{ transaction }
);
await queryInterface.addColumn(
'gateway_settings',
'active_platform_ai_configId',
{
type: Sequelize.DataTypes.UUID,
references: {
model: 'platform_ai_configs',
key: 'id',
},
},
{ transaction }
);
await transaction.commit();
} catch (err) {
await transaction.rollback();
throw err;
}
},
/**
* @param {QueryInterface} queryInterface
* @param {Sequelize} Sequelize
* @returns {Promise<void>}
*/
async down(queryInterface, Sequelize) {
/**
* @type {Transaction}
*/
const transaction = await queryInterface.sequelize.transaction();
try {
await queryInterface.removeColumn(
'gateway_settings',
'active_platform_ai_configId',
{ transaction }
);
await queryInterface.removeColumn(
'gateway_settings',
'log_redaction_mode',
{ transaction }
);
await queryInterface.removeColumn(
'gateway_settings',
'enable_response_logging',
{ transaction }
);
await queryInterface.removeColumn(
'gateway_settings',
'enable_request_logging',
{ transaction }
);
await queryInterface.removeColumn(
'gateway_settings',
'log_env_in_dev',
{ transaction }
);
await queryInterface.removeColumn(
'gateway_settings',
'keepalive_seconds',
{ transaction }
);
await queryInterface.removeColumn(
'gateway_settings',
'auth_header_example',
{ transaction }
);
await queryInterface.removeColumn(
'gateway_settings',
'public_base_url',
{ transaction }
);
await queryInterface.removeColumn(
'gateway_settings',
'settings_name',
{ transaction }
);
await queryInterface.removeColumn(
'tool_schemas',
'owner_userId',
{ transaction }
);
await queryInterface.removeColumn(
'tool_schemas',
'is_active',
{ transaction }
);
await queryInterface.removeColumn(
'tool_schemas',
'schema_json',
{ transaction }
);
await queryInterface.removeColumn(
'tool_schemas',
'schema_format',
{ transaction }
);
await queryInterface.removeColumn(
'tool_schemas',
'description',
{ transaction }
);
await queryInterface.removeColumn(
'tool_schemas',
'tool_name',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'platform_ai_configId',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'api_keyId',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'total_tokens',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'completion_tokens',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'prompt_tokens',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'error_message',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'error_code',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'succeeded',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'latency_ms',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'http_status',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'resolved_model',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'requested_model',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'auth_subject',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'user_agent',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'client_ip',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'compat_route',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'request_mode',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'endpoint',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'completed_at',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'received_at',
{ transaction }
);
await queryInterface.removeColumn(
'proxy_requests',
'request_uid',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'owner_userId',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'expires_at',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'activated_at',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'is_active',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'token_type',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'token_value',
{ transaction }
);
await queryInterface.removeColumn(
'api_keys',
'key_name',
{ transaction }
);
await queryInterface.removeColumn(
'models',
'platform_ai_configId',
{ transaction }
);
await queryInterface.removeColumn(
'models',
'is_enabled',
{ transaction }
);
await queryInterface.removeColumn(
'models',
'output_cost_per_million',
{ transaction }
);
await queryInterface.removeColumn(
'models',
'input_cost_per_million',
{ transaction }
);
await queryInterface.removeColumn(
'models',
'context_window_tokens',
{ transaction }
);
await queryInterface.removeColumn(
'models',
'supports_streaming',
{ transaction }
);
await queryInterface.removeColumn(
'models',
'supports_tools',
{ transaction }
);
await queryInterface.removeColumn(
'models',
'api_compatibility',
{ transaction }
);
await queryInterface.removeColumn(
'models',
'provider_family',
{ transaction }
);
await queryInterface.removeColumn(
'models',
'display_name',
{ transaction }
);
await queryInterface.removeColumn(
'models',
'model_key',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'platform_ai_configId',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'error_message',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'succeeded',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'response_body',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'response_headers',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'response_status',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'request_body',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'request_headers',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'request_method',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'request_url',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'request_command',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'test_type',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'finished_at',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'started_at',
{ transaction }
);
await queryInterface.removeColumn(
'connectivity_tests',
'test_name',
{ transaction }
);
await queryInterface.removeColumn(
'env_var_snapshots',
'platform_ai_configId',
{ transaction }
);
await queryInterface.removeColumn(
'env_var_snapshots',
'raw_output',
{ transaction }
);
await queryInterface.removeColumn(
'env_var_snapshots',
'filter_regex',
{ transaction }
);
await queryInterface.removeColumn(
'env_var_snapshots',
'visibility',
{ transaction }
);
await queryInterface.removeColumn(
'env_var_snapshots',
'captured_at',
{ transaction }
);
await queryInterface.removeColumn(
'env_var_snapshots',
'snapshot_name',
{ transaction }
);
await queryInterface.removeColumn(
'platform_ai_configs',
'owner_userId',
{ transaction }
);
await queryInterface.removeColumn(
'platform_ai_configs',
'notes',
{ transaction }
);
await queryInterface.removeColumn(
'platform_ai_configs',
'requires_proxying',
{ transaction }
);
await queryInterface.removeColumn(
'platform_ai_configs',
'auth_scheme',
{ transaction }
);
await queryInterface.removeColumn(
'platform_ai_configs',
'is_public_endpoint',
{ transaction }
);
await queryInterface.removeColumn(
'platform_ai_configs',
'base_url',
{ transaction }
);
await queryInterface.removeColumn(
'platform_ai_configs',
'runtime_type',
{ transaction }
);
await queryInterface.removeColumn(
'platform_ai_configs',
'status',
{ transaction }
);
await queryInterface.removeColumn(
'platform_ai_configs',
'capability_level',
{ transaction }
);
await queryInterface.removeColumn(
'platform_ai_configs',
'platform_name',
{ transaction }
);
await queryInterface.removeColumn(
'permissions',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'roles',
'role_customization',
{ transaction }
);
await queryInterface.removeColumn(
'roles',
'name',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'app_roleId',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'provider',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'passwordResetTokenExpiresAt',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'passwordResetToken',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'emailVerificationTokenExpiresAt',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'emailVerificationToken',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'emailVerified',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'password',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'disabled',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'email',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'phoneNumber',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'lastName',
{ transaction }
);
await queryInterface.removeColumn(
'users',
'firstName',
{ transaction }
);
await queryInterface.dropTable('gateway_settings', { transaction });
await queryInterface.dropTable('tool_schemas', { transaction });
await queryInterface.dropTable('proxy_requests', { transaction });
await queryInterface.dropTable('api_keys', { transaction });
await queryInterface.dropTable('models', { transaction });
await queryInterface.dropTable('connectivity_tests', { transaction });
await queryInterface.dropTable('env_var_snapshots', { transaction });
await queryInterface.dropTable('platform_ai_configs', { transaction });
await queryInterface.dropTable('permissions', { transaction });
await queryInterface.dropTable('roles', { transaction });
await queryInterface.dropTable('users', { transaction });
await transaction.commit();
} catch (err) {
await transaction.rollback();
throw err;
}
}
};