@silasfmartins/testhub 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/copilot-instructions.md +520 -0
- package/biome.json +37 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.js +169 -0
- package/dist/scripts/consumer-postinstall.d.ts +15 -0
- package/dist/scripts/consumer-postinstall.js +785 -0
- package/dist/scripts/generate-docs.d.ts +16 -0
- package/dist/scripts/generate-docs.js +1363 -0
- package/dist/scripts/generate-index.d.ts +2 -0
- package/dist/scripts/generate-index.js +314 -0
- package/dist/scripts/init-api.d.ts +2 -0
- package/dist/scripts/init-api.js +525 -0
- package/dist/scripts/init-banco.d.ts +2 -0
- package/dist/scripts/init-banco.js +347 -0
- package/dist/scripts/init-frontend.d.ts +2 -0
- package/dist/scripts/init-frontend.js +627 -0
- package/dist/scripts/init-mobile.d.ts +2 -0
- package/dist/scripts/init-mobile.js +481 -0
- package/dist/scripts/init-scenarios.d.ts +2 -0
- package/dist/scripts/init-scenarios.js +846 -0
- package/dist/scripts/init-ssh.d.ts +2 -0
- package/dist/scripts/init-ssh.js +639 -0
- package/dist/scripts/package-versions.d.ts +57 -0
- package/dist/scripts/package-versions.js +768 -0
- package/dist/scripts/postinstall.d.ts +1 -0
- package/dist/scripts/postinstall.js +527 -0
- package/dist/scripts/robust-build.d.ts +7 -0
- package/dist/scripts/robust-build.js +88 -0
- package/dist/scripts/setup-local-packages.d.ts +31 -0
- package/dist/scripts/setup-local-packages.js +237 -0
- package/dist/scripts/smart-override.d.ts +2 -0
- package/dist/scripts/smart-override.js +1360 -0
- package/dist/scripts/sync-configs.d.ts +27 -0
- package/dist/scripts/sync-configs.js +248 -0
- package/dist/scripts/test-biome-parse.d.ts +5 -0
- package/dist/scripts/test-biome-parse.js +84 -0
- package/dist/scripts/ultracite-setup.d.ts +4 -0
- package/dist/scripts/ultracite-setup.js +310 -0
- package/dist/scripts/update-all-init-scripts.d.ts +2 -0
- package/dist/scripts/update-all-init-scripts.js +52 -0
- package/dist/scripts/update-biome-schema.d.ts +15 -0
- package/dist/scripts/update-biome-schema.js +124 -0
- package/dist/src/AutoCoreFacade.d.ts +145 -0
- package/dist/src/AutoCoreFacade.js +217 -0
- package/dist/src/api/ApiActions.d.ts +297 -0
- package/dist/src/api/ApiActions.js +1905 -0
- package/dist/src/api/Certificate.d.ts +60 -0
- package/dist/src/api/Certificate.js +79 -0
- package/dist/src/api/JsonResponse.d.ts +116 -0
- package/dist/src/api/JsonResponse.js +206 -0
- package/dist/src/appium/DeviceFarmViewer.d.ts +79 -0
- package/dist/src/appium/DeviceFarmViewer.js +1083 -0
- package/dist/src/appium/MobileActions.d.ts +347 -0
- package/dist/src/appium/MobileActions.js +1632 -0
- package/dist/src/appium/MobileConnection.d.ts +160 -0
- package/dist/src/appium/MobileConnection.js +772 -0
- package/dist/src/config/envLoader.d.ts +123 -0
- package/dist/src/config/envLoader.js +361 -0
- package/dist/src/config/jest-safe-setup.d.ts +19 -0
- package/dist/src/config/jest-safe-setup.js +369 -0
- package/dist/src/config/timeouts.d.ts +32 -0
- package/dist/src/config/timeouts.js +38 -0
- package/dist/src/desktop/DesktopActions.d.ts +46 -0
- package/dist/src/desktop/DesktopActions.js +398 -0
- package/dist/src/desktop/DesktopConnection.d.ts +32 -0
- package/dist/src/desktop/DesktopConnection.js +84 -0
- package/dist/src/domain/entities/TestExecution.d.ts +117 -0
- package/dist/src/domain/entities/TestExecution.js +150 -0
- package/dist/src/domain/entities/TestReport.d.ts +114 -0
- package/dist/src/domain/entities/TestReport.js +179 -0
- package/dist/src/domain/repositories/ITestRepository.d.ts +196 -0
- package/dist/src/domain/repositories/ITestRepository.js +14 -0
- package/dist/src/domain/schemas/ValidationSchemas.d.ts +159 -0
- package/dist/src/domain/schemas/ValidationSchemas.js +181 -0
- package/dist/src/functions/errors/BaseError.d.ts +78 -0
- package/dist/src/functions/errors/BaseError.js +245 -0
- package/dist/src/functions/errors/ConfigurationError.d.ts +16 -0
- package/dist/src/functions/errors/ConfigurationError.js +48 -0
- package/dist/src/functions/errors/ErrorCatalog.d.ts +148 -0
- package/dist/src/functions/errors/ErrorCatalog.js +157 -0
- package/dist/src/functions/errors/GlobalErrorHandler.d.ts +101 -0
- package/dist/src/functions/errors/GlobalErrorHandler.js +281 -0
- package/dist/src/functions/errors/IntegrationError.d.ts +17 -0
- package/dist/src/functions/errors/IntegrationError.js +51 -0
- package/dist/src/functions/errors/SecurityError.d.ts +14 -0
- package/dist/src/functions/errors/SecurityError.js +42 -0
- package/dist/src/functions/errors/SystemError.d.ts +12 -0
- package/dist/src/functions/errors/SystemError.js +36 -0
- package/dist/src/functions/errors/ValidationError.d.ts +14 -0
- package/dist/src/functions/errors/ValidationError.js +61 -0
- package/dist/src/functions/errors/index.d.ts +12 -0
- package/dist/src/functions/errors/index.js +13 -0
- package/dist/src/global-setup.d.ts +1 -0
- package/dist/src/global-setup.js +1037 -0
- package/dist/src/helpers/BancoActions.d.ts +188 -0
- package/dist/src/helpers/BancoActions.js +581 -0
- package/dist/src/helpers/EnviromentHelper.d.ts +17 -0
- package/dist/src/helpers/EnviromentHelper.js +66 -0
- package/dist/src/helpers/ParallelExecutionHelper.d.ts +183 -0
- package/dist/src/helpers/ParallelExecutionHelper.js +375 -0
- package/dist/src/helpers/SyncSignal.d.ts +15 -0
- package/dist/src/helpers/SyncSignal.js +44 -0
- package/dist/src/hubdocs/CategoryDetector.d.ts +83 -0
- package/dist/src/hubdocs/CategoryDetector.js +401 -0
- package/dist/src/hubdocs/DirectStatementInterceptor.d.ts +54 -0
- package/dist/src/hubdocs/DirectStatementInterceptor.js +243 -0
- package/dist/src/hubdocs/ExecutionTracker.d.ts +107 -0
- package/dist/src/hubdocs/ExecutionTracker.js +702 -0
- package/dist/src/hubdocs/HubDocs.d.ts +395 -0
- package/dist/src/hubdocs/HubDocs.js +3586 -0
- package/dist/src/hubdocs/StatementMethodFilter.d.ts +71 -0
- package/dist/src/hubdocs/StatementMethodFilter.js +618 -0
- package/dist/src/hubdocs/StatementTracker.d.ts +417 -0
- package/dist/src/hubdocs/StatementTracker.js +2419 -0
- package/dist/src/hubdocs/SwaggerGenerator.d.ts +59 -0
- package/dist/src/hubdocs/SwaggerGenerator.js +405 -0
- package/dist/src/hubdocs/index.d.ts +9 -0
- package/dist/src/hubdocs/index.js +9 -0
- package/dist/src/hubdocs/types.d.ts +114 -0
- package/dist/src/hubdocs/types.js +5 -0
- package/dist/src/infrastructure/DependencyContainer.d.ts +142 -0
- package/dist/src/infrastructure/DependencyContainer.js +250 -0
- package/dist/src/infrastructure/adapters/AppiumAdapter.d.ts +168 -0
- package/dist/src/infrastructure/adapters/AppiumAdapter.js +468 -0
- package/dist/src/infrastructure/adapters/OracleAdapter.d.ts +150 -0
- package/dist/src/infrastructure/adapters/OracleAdapter.js +388 -0
- package/dist/src/infrastructure/adapters/PlaywrightAdapter.d.ts +192 -0
- package/dist/src/infrastructure/adapters/PlaywrightAdapter.js +382 -0
- package/dist/src/infrastructure/adapters/SSHAdapter.d.ts +141 -0
- package/dist/src/infrastructure/adapters/SSHAdapter.js +428 -0
- package/dist/src/interfaces.d.ts +501 -0
- package/dist/src/interfaces.js +25 -0
- package/dist/src/internal/fakes/__fake-actions__.d.ts +17 -0
- package/dist/src/internal/fakes/__fake-actions__.js +21 -0
- package/dist/src/internal/fakes/__forbidden__.d.ts +10 -0
- package/dist/src/internal/fakes/__forbidden__.js +18 -0
- package/dist/src/internal/fakes/__honeypot__.d.ts +15 -0
- package/dist/src/internal/fakes/__honeypot__.js +24 -0
- package/dist/src/octane/OctaneReporter.d.ts +13 -0
- package/dist/src/octane/OctaneReporter.js +61 -0
- package/dist/src/playwright/CryptoActions.d.ts +20 -0
- package/dist/src/playwright/CryptoActions.js +75 -0
- package/dist/src/playwright/EnhancedWebActions.d.ts +7 -0
- package/dist/src/playwright/EnhancedWebActions.js +65 -0
- package/dist/src/playwright/WebActions.d.ts +1599 -0
- package/dist/src/playwright/WebActions.js +11788 -0
- package/dist/src/playwright/actions/ActionTimeline.d.ts +36 -0
- package/dist/src/playwright/actions/ActionTimeline.js +101 -0
- package/dist/src/playwright/actions/RecoveryQueue.d.ts +82 -0
- package/dist/src/playwright/actions/RecoveryQueue.js +130 -0
- package/dist/src/playwright/actions/SelectorCache.d.ts +53 -0
- package/dist/src/playwright/actions/SelectorCache.js +96 -0
- package/dist/src/playwright/actions/index.d.ts +13 -0
- package/dist/src/playwright/actions/index.js +14 -0
- package/dist/src/playwright/actions/types.d.ts +147 -0
- package/dist/src/playwright/actions/types.js +5 -0
- package/dist/src/playwright/fixtures.d.ts +112 -0
- package/dist/src/playwright/fixtures.js +718 -0
- package/dist/src/playwright/network-logs-reporter.d.ts +7 -0
- package/dist/src/playwright/network-logs-reporter.js +66 -0
- package/dist/src/playwright/registerRecoveryWrappers.d.ts +1 -0
- package/dist/src/playwright/registerRecoveryWrappers.js +54 -0
- package/dist/src/security/BuildSecurity.d.ts +12 -0
- package/dist/src/security/BuildSecurity.js +138 -0
- package/dist/src/security/EulaProtection.d.ts +70 -0
- package/dist/src/security/EulaProtection.js +155 -0
- package/dist/src/security/HoneypotManager.d.ts +46 -0
- package/dist/src/security/HoneypotManager.js +234 -0
- package/dist/src/security/KeysManager.d.ts +36 -0
- package/dist/src/security/KeysManager.js +158 -0
- package/dist/src/security/ProofOfWorkIntegration.d.ts +64 -0
- package/dist/src/security/ProofOfWorkIntegration.js +206 -0
- package/dist/src/security/SecurityValidation.d.ts +21 -0
- package/dist/src/security/SecurityValidation.js +163 -0
- package/dist/src/security/SourceMapProtection.d.ts +55 -0
- package/dist/src/security/SourceMapProtection.js +220 -0
- package/dist/src/security/protector.d.ts +1 -0
- package/dist/src/security/protector.js +97 -0
- package/dist/src/ssh/SSHActions.d.ts +262 -0
- package/dist/src/ssh/SSHActions.js +790 -0
- package/dist/src/ssh/SSHClient.d.ts +99 -0
- package/dist/src/ssh/SSHClient.js +409 -0
- package/dist/src/statements/BaseStatement.d.ts +38 -0
- package/dist/src/statements/BaseStatement.js +78 -0
- package/dist/src/testContext/AuthStateManager.d.ts +93 -0
- package/dist/src/testContext/AuthStateManager.js +256 -0
- package/dist/src/testContext/CoverageManager.d.ts +198 -0
- package/dist/src/testContext/CoverageManager.js +917 -0
- package/dist/src/testContext/TestAnnotations.d.ts +476 -0
- package/dist/src/testContext/TestAnnotations.js +2647 -0
- package/dist/src/testContext/TestContext.d.ts +138 -0
- package/dist/src/testContext/TestContext.js +369 -0
- package/dist/src/testContext/UnifiedHtmlGenerator.d.ts +7 -0
- package/dist/src/testContext/UnifiedHtmlGenerator.js +264 -0
- package/dist/src/testContext/UnifiedReportManager.d.ts +211 -0
- package/dist/src/testContext/UnifiedReportManager.js +1206 -0
- package/dist/src/testhub/DynamicConfigManager.d.ts +121 -0
- package/dist/src/testhub/DynamicConfigManager.js +320 -0
- package/dist/src/testhub/SystemsManager.d.ts +119 -0
- package/dist/src/testhub/SystemsManager.js +365 -0
- package/dist/src/testhub/TestHubClient.d.ts +335 -0
- package/dist/src/testhub/TestHubClient.js +1215 -0
- package/dist/src/testhub/TestHubReporter.d.ts +62 -0
- package/dist/src/testhub/TestHubReporter.js +576 -0
- package/dist/src/testhub/TestHubVars.d.ts +116 -0
- package/dist/src/testhub/TestHubVars.js +273 -0
- package/dist/src/utils/ActionInterceptor.d.ts +59 -0
- package/dist/src/utils/ActionInterceptor.js +741 -0
- package/dist/src/utils/ArtifactsCompressor.d.ts +43 -0
- package/dist/src/utils/ArtifactsCompressor.js +181 -0
- package/dist/src/utils/AutoLogsFinal.d.ts +47 -0
- package/dist/src/utils/AutoLogsFinal.js +148 -0
- package/dist/src/utils/CodeGenSession.d.ts +114 -0
- package/dist/src/utils/CodeGenSession.js +264 -0
- package/dist/src/utils/ConfigLogger.d.ts +133 -0
- package/dist/src/utils/ConfigLogger.js +611 -0
- package/dist/src/utils/CustomReporter.d.ts +22 -0
- package/dist/src/utils/CustomReporter.js +352 -0
- package/dist/src/utils/DataStore.d.ts +171 -0
- package/dist/src/utils/DataStore.js +484 -0
- package/dist/src/utils/DatabaseInterceptor.d.ts +19 -0
- package/dist/src/utils/DatabaseInterceptor.js +295 -0
- package/dist/src/utils/DateHelper.d.ts +16 -0
- package/dist/src/utils/DateHelper.js +120 -0
- package/dist/src/utils/DateValidator.d.ts +4 -0
- package/dist/src/utils/DateValidator.js +51 -0
- package/dist/src/utils/DocumentGenerator.d.ts +35 -0
- package/dist/src/utils/DocumentGenerator.js +129 -0
- package/dist/src/utils/EvidenceCapture.d.ts +90 -0
- package/dist/src/utils/EvidenceCapture.js +600 -0
- package/dist/src/utils/EvidenceReportGenerator.d.ts +70 -0
- package/dist/src/utils/EvidenceReportGenerator.js +799 -0
- package/dist/src/utils/FrameManagementUtil.d.ts +42 -0
- package/dist/src/utils/FrameManagementUtil.js +75 -0
- package/dist/src/utils/GlobalStatementsInterceptor.d.ts +1 -0
- package/dist/src/utils/GlobalStatementsInterceptor.js +1 -0
- package/dist/src/utils/HTMLTemplate.d.ts +1 -0
- package/dist/src/utils/HTMLTemplate.js +1034 -0
- package/dist/src/utils/InterceptacaoMagica.d.ts +23 -0
- package/dist/src/utils/InterceptacaoMagica.js +365 -0
- package/dist/src/utils/LogSanitizer.d.ts +35 -0
- package/dist/src/utils/LogSanitizer.js +110 -0
- package/dist/src/utils/Logger.d.ts +65 -0
- package/dist/src/utils/Logger.js +284 -0
- package/dist/src/utils/McpLocalClient.d.ts +141 -0
- package/dist/src/utils/McpLocalClient.js +871 -0
- package/dist/src/utils/PDFEvidenceGenerator.d.ts +20 -0
- package/dist/src/utils/PDFEvidenceGenerator.js +156 -0
- package/dist/src/utils/SpecFileAnalyzer.d.ts +35 -0
- package/dist/src/utils/SpecFileAnalyzer.js +209 -0
- package/dist/src/utils/StatementInterceptor.d.ts +18 -0
- package/dist/src/utils/StatementInterceptor.js +87 -0
- package/dist/src/utils/StatementLogger.d.ts +33 -0
- package/dist/src/utils/StatementLogger.js +113 -0
- package/dist/src/utils/StatementsInterceptor.d.ts +1 -0
- package/dist/src/utils/StatementsInterceptor.js +1 -0
- package/dist/src/utils/TeamsFlushHook.d.ts +17 -0
- package/dist/src/utils/TeamsFlushHook.js +168 -0
- package/dist/src/utils/TerminalLogCapture.d.ts +158 -0
- package/dist/src/utils/TerminalLogCapture.js +531 -0
- package/dist/src/utils/TestMethodLogger.d.ts +70 -0
- package/dist/src/utils/TestMethodLogger.js +95 -0
- package/dist/src/utils/UnifiedTeardown.d.ts +4 -0
- package/dist/src/utils/UnifiedTeardown.js +400 -0
- package/dist/src/utils/XPathCatalog.d.ts +152 -0
- package/dist/src/utils/XPathCatalog.js +350 -0
- package/dist/src/utils/generators.d.ts +90 -0
- package/dist/src/utils/generators.js +167 -0
- package/dist/src/utils/testRecovery/ResilientPlaywright.d.ts +152 -0
- package/dist/src/utils/testRecovery/ResilientPlaywright.js +715 -0
- package/dist/src/utils/testRecovery/TestRecoveryClient.d.ts +801 -0
- package/dist/src/utils/testRecovery/TestRecoveryClient.js +1415 -0
- package/dist/src/utils/testRecovery/autoFixCode.d.ts +65 -0
- package/dist/src/utils/testRecovery/autoFixCode.js +32 -0
- package/dist/vitest.config.d.ts +2 -0
- package/dist/vitest.config.js +59 -0
- package/dist/wdio.conf.d.ts +1 -0
- package/dist/wdio.conf.js +420 -0
- package/package.json +137 -0
- package/protect-loader.mjs +643 -0
- package/scripts/consumer-postinstall.ts +975 -0
- package/scripts/generate-index.ts +343 -0
- package/scripts/init-api.ts +613 -0
- package/scripts/init-banco.ts +437 -0
- package/scripts/init-frontend.ts +727 -0
- package/scripts/init-mobile.ts +558 -0
- package/scripts/init-scenarios.ts +925 -0
- package/scripts/init-ssh.ts +734 -0
- package/scripts/package-versions.ts +978 -0
- package/scripts/postinstall.ts +605 -0
- package/scripts/smart-override.ts +1675 -0
- package/scripts/sync-configs.ts +302 -0
- package/scripts/ultracite-setup.ts +370 -0
- package/src/types/globals.d.ts +48 -0
- package/tsconfig.json +29 -0
- package/types/autocore-sync-signal.d.ts +10 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Teams Relay Flush Hook (v2.7.44 - item 13)
|
|
3
|
+
*
|
|
4
|
+
* Garante envio de notificações Teams pela rede da máquina que executou o framework.
|
|
5
|
+
* Deve ser chamado em `finally` (passou/falhou) ao final de cada execução.
|
|
6
|
+
* Não bloqueia o resultado do teste por falha de flush.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Tenta enviar flush de notificações Teams via MCP local.
|
|
10
|
+
*
|
|
11
|
+
* - Chama o backend para consumir fila pendente e envia via rede local.
|
|
12
|
+
* - Retry curto (3 tentativas com backoff).
|
|
13
|
+
* - Não bloqueia o resultado do teste.
|
|
14
|
+
*
|
|
15
|
+
* @param limit Número máximo de itens a processar (default: 50)
|
|
16
|
+
*/
|
|
17
|
+
export declare function teamsFlushAfterExecution(limit?: number): Promise<void>;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Teams Relay Flush Hook (v2.7.44 - item 13)
|
|
3
|
+
*
|
|
4
|
+
* Garante envio de notificações Teams pela rede da máquina que executou o framework.
|
|
5
|
+
* Deve ser chamado em `finally` (passou/falhou) ao final de cada execução.
|
|
6
|
+
* Não bloqueia o resultado do teste por falha de flush.
|
|
7
|
+
*/
|
|
8
|
+
import { Logger } from './Logger.js';
|
|
9
|
+
const FLUSH_MAX_RETRIES = 3;
|
|
10
|
+
const FLUSH_BACKOFF_BASE_MS = 1000;
|
|
11
|
+
/**
|
|
12
|
+
* Tenta enviar flush de notificações Teams via MCP local.
|
|
13
|
+
*
|
|
14
|
+
* - Chama o backend para consumir fila pendente e envia via rede local.
|
|
15
|
+
* - Retry curto (3 tentativas com backoff).
|
|
16
|
+
* - Não bloqueia o resultado do teste.
|
|
17
|
+
*
|
|
18
|
+
* @param limit Número máximo de itens a processar (default: 50)
|
|
19
|
+
*/
|
|
20
|
+
export async function teamsFlushAfterExecution(limit = 50) {
|
|
21
|
+
// Verificar se flush está habilitado
|
|
22
|
+
if (process.env.HUB_TEAMS_FLUSH_ENABLED === 'false') {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const backendUrl = process.env.HUB_BACKEND_URL || process.env.AUTOCORE_HUB_URL || '';
|
|
26
|
+
if (!backendUrl) {
|
|
27
|
+
Logger.warning('[TeamsFlush] HUB_BACKEND_URL não configurado, flush ignorado.');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const mcpKey = process.env.HUB_MCP_KEY || process.env.MCP_INTERNAL_KEY || process.env.TEAMS_RELAY_KEY || '';
|
|
31
|
+
const userHash = process.env.HUB_MCP_USER_HASH || '';
|
|
32
|
+
for (let attempt = 1; attempt <= FLUSH_MAX_RETRIES; attempt++) {
|
|
33
|
+
try {
|
|
34
|
+
const result = await executeFlush(backendUrl, limit, mcpKey, userHash);
|
|
35
|
+
if (result) {
|
|
36
|
+
const { fetched = 0, sent = 0, failed = 0, skipped = 0 } = result;
|
|
37
|
+
Logger.info(`[TeamsFlush] Flush concluído: fetched=${fetched}, sent=${sent}, failed=${failed}, skipped=${skipped}`);
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
43
|
+
if (attempt < FLUSH_MAX_RETRIES) {
|
|
44
|
+
const delay = FLUSH_BACKOFF_BASE_MS * attempt;
|
|
45
|
+
Logger.warning(`[TeamsFlush] Tentativa ${attempt}/${FLUSH_MAX_RETRIES} falhou: ${errorMsg}. Retentando em ${delay}ms...`);
|
|
46
|
+
await new Promise(r => setTimeout(r, delay));
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
Logger.warning(`[TeamsFlush] Todas as ${FLUSH_MAX_RETRIES} tentativas falharam: ${errorMsg}`);
|
|
50
|
+
// Fallback: tentar MCP local quando backend falhou (item 13 v2.7.44)
|
|
51
|
+
try {
|
|
52
|
+
const localResult = await executeFlushViaMcpLocal(limit);
|
|
53
|
+
if (localResult) {
|
|
54
|
+
const { fetched = 0, sent = 0, failed = 0, skipped = 0 } = localResult;
|
|
55
|
+
Logger.info(`[TeamsFlush] Fallback MCP local concluído: fetched=${fetched}, sent=${sent}, failed=${failed}, skipped=${skipped}`);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (localErr) {
|
|
60
|
+
Logger.warning(`[TeamsFlush] Fallback MCP local também falhou: ${localErr instanceof Error ? localErr.message : String(localErr)}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Fallback: flush via MCP local (item 13 v2.7.44).
|
|
68
|
+
* Ordem: STDIO direto → HTTP MCP local.
|
|
69
|
+
* Usado quando backend direto não está acessível (firewall/proxy).
|
|
70
|
+
*/
|
|
71
|
+
async function executeFlushViaMcpLocal(limit) {
|
|
72
|
+
// 1) Tentar via STDIO direto (McpLocalClient — item 13 + 27.1)
|
|
73
|
+
try {
|
|
74
|
+
const { callMcpToolLocalFirst } = await import('./McpLocalClient.js');
|
|
75
|
+
const result = await callMcpToolLocalFirst('teams_flush', { limit, dispatchMode: 'local' });
|
|
76
|
+
if (result?.result && typeof result.result === 'object') {
|
|
77
|
+
return result.result;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// STDIO indisponível, tentar HTTP
|
|
82
|
+
}
|
|
83
|
+
// 2) Fallback: HTTP MCP local
|
|
84
|
+
const mcpLocalUrl = process.env.HUB_MCP_LOCAL_URL || 'http://brtlvlty0559pl:3333';
|
|
85
|
+
const userHash = process.env.HUB_MCP_USER_HASH || process.env.MCP_USER_HASH || '';
|
|
86
|
+
const reqBody = {
|
|
87
|
+
jsonrpc: '2.0',
|
|
88
|
+
id: `teams-flush-${Date.now()}`,
|
|
89
|
+
method: 'tools/call',
|
|
90
|
+
params: {
|
|
91
|
+
name: 'teams_flush',
|
|
92
|
+
arguments: { limit, dispatchMode: 'local' },
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
const controller = new AbortController();
|
|
96
|
+
const timeoutId = setTimeout(() => controller.abort(), 30_000);
|
|
97
|
+
try {
|
|
98
|
+
// Construir URL com user_hash como query parameter (item 25.1)
|
|
99
|
+
let url = `${mcpLocalUrl}/mcp`;
|
|
100
|
+
if (userHash) {
|
|
101
|
+
url += `?user_hash=${encodeURIComponent(userHash)}`;
|
|
102
|
+
}
|
|
103
|
+
// Construir headers com user_hash
|
|
104
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
105
|
+
if (userHash) {
|
|
106
|
+
headers['x-user-hash'] = userHash;
|
|
107
|
+
}
|
|
108
|
+
const res = await fetch(url, {
|
|
109
|
+
method: 'POST',
|
|
110
|
+
headers,
|
|
111
|
+
body: JSON.stringify(reqBody),
|
|
112
|
+
signal: controller.signal,
|
|
113
|
+
});
|
|
114
|
+
if (!res.ok)
|
|
115
|
+
return null;
|
|
116
|
+
const data = (await res.json());
|
|
117
|
+
return data.result || null;
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
clearTimeout(timeoutId);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
async function executeFlush(backendUrl, limit, mcpKey, userHash) {
|
|
124
|
+
// Tentar via endpoint direto do backend (flush handler)
|
|
125
|
+
const url = `${backendUrl.replace(/\/$/, '')}/api/mcp/teams/flush`;
|
|
126
|
+
const headers = {
|
|
127
|
+
'Content-Type': 'application/json',
|
|
128
|
+
};
|
|
129
|
+
if (mcpKey)
|
|
130
|
+
headers['x-mcp-key'] = mcpKey;
|
|
131
|
+
if (userHash)
|
|
132
|
+
headers['x-mcp-user-hash'] = userHash;
|
|
133
|
+
const ignoreSSL = process.env.HUB_TEAMS_FLUSH_IGNORE_SSL === 'true';
|
|
134
|
+
const controller = new AbortController();
|
|
135
|
+
const timeoutId = setTimeout(() => controller.abort(), 30000);
|
|
136
|
+
try {
|
|
137
|
+
// Se precisa ignorar SSL e estiver em Node.js (não browser)
|
|
138
|
+
const fetchOptions = {
|
|
139
|
+
method: 'POST',
|
|
140
|
+
headers,
|
|
141
|
+
body: JSON.stringify({ limit }),
|
|
142
|
+
signal: controller.signal,
|
|
143
|
+
};
|
|
144
|
+
// Para ignorar SSL em Node 18+, usar agent com rejectUnauthorized
|
|
145
|
+
if (ignoreSSL) {
|
|
146
|
+
try {
|
|
147
|
+
const https = await import('node:https');
|
|
148
|
+
const http = await import('node:http');
|
|
149
|
+
const agent = url.startsWith('https')
|
|
150
|
+
? new https.Agent({ rejectUnauthorized: false })
|
|
151
|
+
: new http.Agent();
|
|
152
|
+
fetchOptions.agent = agent;
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Se não conseguir criar agent, prosseguir sem ele
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const res = await fetch(url, fetchOptions);
|
|
159
|
+
if (!res.ok) {
|
|
160
|
+
const text = await res.text().catch(() => '');
|
|
161
|
+
throw new Error(`HTTP ${res.status}: ${text}`);
|
|
162
|
+
}
|
|
163
|
+
return (await res.json());
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
clearTimeout(timeoutId);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 📋 Sistema de Captura Completa de Logs do Terminal
|
|
3
|
+
* @description Captura TODOS os logs (console.log, Logger, etc.) que aparecem no terminal
|
|
4
|
+
* @author AutoCore Team
|
|
5
|
+
* @version 1.1.0
|
|
6
|
+
* 🔧 ATUALIZAÇÃO: Logs são persistidos em arquivo para compartilhar entre workers do Playwright
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 📝 Estrutura de um log capturado
|
|
10
|
+
*/
|
|
11
|
+
export interface CapturedLog {
|
|
12
|
+
timestamp: string;
|
|
13
|
+
level: 'log' | 'info' | 'warn' | 'error' | 'debug';
|
|
14
|
+
message: string;
|
|
15
|
+
testName?: string;
|
|
16
|
+
stackTrace?: string;
|
|
17
|
+
index?: number;
|
|
18
|
+
workerId?: string;
|
|
19
|
+
ctName?: string;
|
|
20
|
+
}
|
|
21
|
+
type LogListener = (log: CapturedLog) => void;
|
|
22
|
+
/**
|
|
23
|
+
* 📊 Sistema de captura de logs do terminal
|
|
24
|
+
* 🔧 NOTA: Cada worker do Playwright tem sua própria instância em memória,
|
|
25
|
+
* mas os logs são persistidos em arquivo para compartilhamento.
|
|
26
|
+
*/
|
|
27
|
+
export declare class TerminalLogCapture {
|
|
28
|
+
private static isActive;
|
|
29
|
+
private static logs;
|
|
30
|
+
private static logsByTest;
|
|
31
|
+
private static currentTestName;
|
|
32
|
+
private static currentCTName;
|
|
33
|
+
private static workerId;
|
|
34
|
+
private static globalLogIndex;
|
|
35
|
+
private static logListeners;
|
|
36
|
+
private static originalConsole;
|
|
37
|
+
private static isCapturing;
|
|
38
|
+
/**
|
|
39
|
+
* 🆕 Gera um ID único para este worker
|
|
40
|
+
*/
|
|
41
|
+
private static generateWorkerId;
|
|
42
|
+
/**
|
|
43
|
+
* 🚀 Inicia captura de logs
|
|
44
|
+
*/
|
|
45
|
+
static start(): void;
|
|
46
|
+
/**
|
|
47
|
+
* 🔄 Sincroniza índice global com arquivo existente
|
|
48
|
+
*/
|
|
49
|
+
private static syncGlobalIndex;
|
|
50
|
+
/**
|
|
51
|
+
* 📝 Captura um log
|
|
52
|
+
* 🔧 ATUALIZADO: Persiste logs em arquivo JSON compartilhado entre workers
|
|
53
|
+
*/
|
|
54
|
+
private static captureLog;
|
|
55
|
+
/**
|
|
56
|
+
* 🆕 Persiste log no arquivo JSON compartilhado entre workers
|
|
57
|
+
*/
|
|
58
|
+
private static persistLogToSharedFile;
|
|
59
|
+
/**
|
|
60
|
+
* 🆕 Escreve arquivo com retry para evitar conflitos
|
|
61
|
+
*/
|
|
62
|
+
private static writeWithRetry;
|
|
63
|
+
/**
|
|
64
|
+
* 🆕 Obtém todos os logs do arquivo compartilhado (para uso cross-worker)
|
|
65
|
+
*/
|
|
66
|
+
static getSharedLogs(): CapturedLog[];
|
|
67
|
+
/**
|
|
68
|
+
* 🆕 Obtém índice global atual do arquivo compartilhado
|
|
69
|
+
*/
|
|
70
|
+
static getSharedGlobalIndex(): number;
|
|
71
|
+
/**
|
|
72
|
+
* 🆕 Obtém o índice global atual em memória (sem acessar arquivo)
|
|
73
|
+
*/
|
|
74
|
+
static getCurrentGlobalIndex(): number;
|
|
75
|
+
/**
|
|
76
|
+
* 🆕 Registra listener para receber logs em tempo real (usado pelos CTs)
|
|
77
|
+
*/
|
|
78
|
+
static addListener(id: string, listener: LogListener): void;
|
|
79
|
+
/**
|
|
80
|
+
* 🆕 Remove listener registrado
|
|
81
|
+
*/
|
|
82
|
+
static removeListener(id: string): void;
|
|
83
|
+
private static notifyListeners;
|
|
84
|
+
/**
|
|
85
|
+
* 🆕 Limpa arquivo de logs compartilhado (usar no início de nova execução)
|
|
86
|
+
*/
|
|
87
|
+
static clearSharedLogs(): void;
|
|
88
|
+
/**
|
|
89
|
+
* 🔄 Define o teste atual
|
|
90
|
+
*/
|
|
91
|
+
static setCurrentTest(testName: string): void;
|
|
92
|
+
/**
|
|
93
|
+
* 🏁 Limpa o teste atual
|
|
94
|
+
*/
|
|
95
|
+
static clearCurrentTest(): void;
|
|
96
|
+
/**
|
|
97
|
+
* 🆕 Define o CT atual (para filtros mais precisos)
|
|
98
|
+
*/
|
|
99
|
+
static setCurrentCT(ctName: string): void;
|
|
100
|
+
/**
|
|
101
|
+
* 🆕 Limpa o CT atual
|
|
102
|
+
*/
|
|
103
|
+
static clearCurrentCT(): void;
|
|
104
|
+
/**
|
|
105
|
+
* 🆕 Obtém o worker ID atual
|
|
106
|
+
*/
|
|
107
|
+
static getWorkerId(): string;
|
|
108
|
+
/**
|
|
109
|
+
* 🆕 Obtém logs filtrados por CT name (funciona em single e multi-worker)
|
|
110
|
+
*/
|
|
111
|
+
static getLogsForCT(ctName: string, testName?: string): CapturedLog[];
|
|
112
|
+
/**
|
|
113
|
+
* 🆕 Obtém todos os logs combinando memória e arquivo compartilhado (para multi-worker)
|
|
114
|
+
*/
|
|
115
|
+
static getAllLogsCombined(): CapturedLog[];
|
|
116
|
+
/**
|
|
117
|
+
* 🆕 Obtém logs por range de índice (funciona em single e multi-worker)
|
|
118
|
+
*/
|
|
119
|
+
static getLogsByIndexRange(startIndex: number, endIndex?: number): CapturedLog[];
|
|
120
|
+
/**
|
|
121
|
+
* 📊 Retorna todos os logs capturados
|
|
122
|
+
*/
|
|
123
|
+
static getAllLogs(): CapturedLog[];
|
|
124
|
+
/**
|
|
125
|
+
* 📋 Retorna logs de um teste específico
|
|
126
|
+
*/
|
|
127
|
+
static getLogsForTest(testName: string): CapturedLog[];
|
|
128
|
+
/**
|
|
129
|
+
* 📊 Retorna todos os logs organizados por teste
|
|
130
|
+
*/
|
|
131
|
+
static getLogsByTest(): Map<string, CapturedLog[]>;
|
|
132
|
+
/**
|
|
133
|
+
* 💾 Salva logs em arquivo JSON
|
|
134
|
+
*/
|
|
135
|
+
static saveToFile(outputPath?: string): void;
|
|
136
|
+
/**
|
|
137
|
+
* 📝 Adiciona log em arquivo em tempo real
|
|
138
|
+
*/
|
|
139
|
+
private static appendToLogFile;
|
|
140
|
+
/**
|
|
141
|
+
* 🛑 Para captura e restaura console original
|
|
142
|
+
*/
|
|
143
|
+
static stop(): void;
|
|
144
|
+
/**
|
|
145
|
+
* 🧹 Limpa todos os logs
|
|
146
|
+
*/
|
|
147
|
+
static clear(): void;
|
|
148
|
+
/**
|
|
149
|
+
* 📊 Estatísticas de logs
|
|
150
|
+
*/
|
|
151
|
+
static getStats(): {
|
|
152
|
+
totalLogs: number;
|
|
153
|
+
byLevel: Record<CapturedLog['level'], number>;
|
|
154
|
+
byTest: Record<string, number>;
|
|
155
|
+
testsWithLogs: number;
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
export {};
|