fix(plugins): use conditional require for production Docker compatibility

Replace static require('backend/src/...') with NODE_ENV-conditional
requires in compiled plugin JS and TypeScript sources.
In production Docker /app/backend/src/ does not exist — only /app/dist/.
Fixes MODULE_NOT_FOUND errors on UnifiedStorageProvider, ext-api,
leads, nanobana, and uploads plugins.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
VPS 4 Deploy Agent
2026-05-11 08:34:34 +02:00
parent 55d0ddb698
commit 45b7b91b04
14 changed files with 72 additions and 32 deletions
@@ -5,8 +5,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", { value: true });
const client_s3_1 = require("@aws-sdk/client-s3");
const lib_storage_1 = require("@aws-sdk/lib-storage");
const StorageProvider_1 = require("../../backend/src/core/StorageProvider");
const plugin_config_1 = require("../../backend/src/core/plugin-config");
let storageProvider;
if (process.env.NODE_ENV === 'production') {
storageProvider = require('../../dist/core/StorageProvider').storageProvider;
}
else {
storageProvider = require('../../backend/src/core/StorageProvider').storageProvider;
}
const sharp_1 = __importDefault(require("sharp"));
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
@@ -31,7 +36,7 @@ class UnifiedStorageProviderPlugin {
}
async activate(ctx) {
this.ctx = ctx;
const cfg = plugin_config_1.pluginConfig.get('UnifiedStorageProvider') || {};
const cfg = ctx.config.get('UnifiedStorageProvider') || {};
if (!fs_1.default.existsSync(this.localFallbackDir)) {
fs_1.default.mkdirSync(this.localFallbackDir, { recursive: true });
}
@@ -52,7 +57,7 @@ class UnifiedStorageProviderPlugin {
credentials: { accessKeyId: accessKey, secretAccessKey: secretKey },
forcePathStyle: true,
});
StorageProvider_1.storageProvider.register(this);
storageProvider.register(this);
ctx.logger.info(`UnifiedStorageProvider ativo — bucket: ${this.bucket} endpoint: ${endpoint}`);
this.startSyncWorker();
}
@@ -152,7 +157,7 @@ class UnifiedStorageProviderPlugin {
});
this.routesRegistered = true;
}
setInterval(() => { StorageProvider_1.storageProvider.updateHealth(); }, 30000);
setInterval(() => { storageProvider.updateHealth(); }, 30000);
}
async deactivate(ctx) {
this.s3 = null;
@@ -184,6 +189,7 @@ class UnifiedStorageProviderPlugin {
};
}
if (httpStatus === 403 || code === 'AccessDenied') {
// 403 pode ser pagamento atrasado ou permissão negada
return {
healthy: false, configured: true, reason: 'billing_error',
message: 'Acesso negado ao Wasabi (HTTP 403). Verifique se a conta está ativa e o pagamento em dia.',
File diff suppressed because one or more lines are too long