feat(api): módulo del API Gateway (reportes Crystal): sesión y cola propias, matrícula de reportes y ejecución con PDF
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
74743503f0
commit
2a29c63e7d
13 files changed
+774
-2
No files matched your search
@@ -50,6 +50,21 @@ export const envSchema = z
|
||||
// CA adicional de confianza (PEM): certificado autofirmado del Service
|
||||
// Layer o CA de un firewall que inspecciona SSL. Opcional.
|
||||
SAPB1_SL_CA_FILE: z.preprocess(emptyToUndefined, z.string().optional()),
|
||||
// --- SAP Business One API Gateway (reportes Crystal): opcional; sin URL el módulo queda sin configurar ---
|
||||
APIGATEWAY_URL: z.preprocess(emptyToUndefined, z.url().optional()).transform((v) => v?.replace(/\/+$/, '')),
|
||||
APIGATEWAY_USER: z.preprocess(emptyToUndefined, z.string().optional()),
|
||||
APIGATEWAY_PASSWORD: z.preprocess(emptyToUndefined, z.string().optional()),
|
||||
APIGATEWAY_COMPANYDB: z.preprocess(emptyToUndefined, z.string().optional()),
|
||||
APIGATEWAY_DBINSTANCE: z.preprocess(emptyToUndefined, z.string().optional()),
|
||||
// Espera máxima (segundos) de cada llamada: generar un reporte puede tardar.
|
||||
APIGATEWAY_TIMEOUT: z.coerce.number().positive().default(60),
|
||||
// Reportes que se generan a la vez; el resto espera su turno.
|
||||
APIGATEWAY_MAX_CONCURRENCY: z.coerce.number().int().positive().default(2),
|
||||
APIGATEWAY_CA_FILE: z.preprocess(emptyToUndefined, z.string().optional()),
|
||||
APIGATEWAY_VERIFY_SSL: z
|
||||
.enum(['true', 'false'])
|
||||
.default('true')
|
||||
.transform((v) => v === 'true'),
|
||||
SAPB1_SL_VERIFY_SSL: z
|
||||
.enum(['true', 'false'])
|
||||
.default('true')
|
||||
@@ -63,6 +78,15 @@ export const envSchema = z
|
||||
message: `no existe el archivo ${resolve(env.SAPB1_SL_CA_FILE)}`,
|
||||
});
|
||||
}
|
||||
if (env.APIGATEWAY_CA_FILE && !existsSync(resolve(env.APIGATEWAY_CA_FILE))) {
|
||||
ctx.addIssue({ code: 'custom', path: ['APIGATEWAY_CA_FILE'], message: `no existe el archivo ${resolve(env.APIGATEWAY_CA_FILE)}` });
|
||||
}
|
||||
if (env.APIGATEWAY_URL && !(env.APIGATEWAY_USER && env.APIGATEWAY_PASSWORD && env.APIGATEWAY_COMPANYDB)) {
|
||||
ctx.addIssue({ code: 'custom', path: ['APIGATEWAY_URL'], message: 'con APIGATEWAY_URL hacen falta APIGATEWAY_USER, APIGATEWAY_PASSWORD y APIGATEWAY_COMPANYDB' });
|
||||
}
|
||||
if (env.NODE_ENV === 'production' && !env.APIGATEWAY_VERIFY_SSL) {
|
||||
ctx.addIssue({ code: 'custom', path: ['APIGATEWAY_VERIFY_SSL'], message: 'no se permite desactivar la validación SSL en producción; use APIGATEWAY_CA_FILE' });
|
||||
}
|
||||
if (env.NODE_ENV === 'production' && !env.SAPB1_SL_VERIFY_SSL) {
|
||||
ctx.addIssue({
|
||||
code: 'custom',
|
||||
|
||||
Reference in new issue
Block a user