@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.
Files changed (296) hide show
  1. package/.github/copilot-instructions.md +520 -0
  2. package/biome.json +37 -0
  3. package/dist/index.d.ts +45 -0
  4. package/dist/index.js +169 -0
  5. package/dist/scripts/consumer-postinstall.d.ts +15 -0
  6. package/dist/scripts/consumer-postinstall.js +785 -0
  7. package/dist/scripts/generate-docs.d.ts +16 -0
  8. package/dist/scripts/generate-docs.js +1363 -0
  9. package/dist/scripts/generate-index.d.ts +2 -0
  10. package/dist/scripts/generate-index.js +314 -0
  11. package/dist/scripts/init-api.d.ts +2 -0
  12. package/dist/scripts/init-api.js +525 -0
  13. package/dist/scripts/init-banco.d.ts +2 -0
  14. package/dist/scripts/init-banco.js +347 -0
  15. package/dist/scripts/init-frontend.d.ts +2 -0
  16. package/dist/scripts/init-frontend.js +627 -0
  17. package/dist/scripts/init-mobile.d.ts +2 -0
  18. package/dist/scripts/init-mobile.js +481 -0
  19. package/dist/scripts/init-scenarios.d.ts +2 -0
  20. package/dist/scripts/init-scenarios.js +846 -0
  21. package/dist/scripts/init-ssh.d.ts +2 -0
  22. package/dist/scripts/init-ssh.js +639 -0
  23. package/dist/scripts/package-versions.d.ts +57 -0
  24. package/dist/scripts/package-versions.js +768 -0
  25. package/dist/scripts/postinstall.d.ts +1 -0
  26. package/dist/scripts/postinstall.js +527 -0
  27. package/dist/scripts/robust-build.d.ts +7 -0
  28. package/dist/scripts/robust-build.js +88 -0
  29. package/dist/scripts/setup-local-packages.d.ts +31 -0
  30. package/dist/scripts/setup-local-packages.js +237 -0
  31. package/dist/scripts/smart-override.d.ts +2 -0
  32. package/dist/scripts/smart-override.js +1360 -0
  33. package/dist/scripts/sync-configs.d.ts +27 -0
  34. package/dist/scripts/sync-configs.js +248 -0
  35. package/dist/scripts/test-biome-parse.d.ts +5 -0
  36. package/dist/scripts/test-biome-parse.js +84 -0
  37. package/dist/scripts/ultracite-setup.d.ts +4 -0
  38. package/dist/scripts/ultracite-setup.js +310 -0
  39. package/dist/scripts/update-all-init-scripts.d.ts +2 -0
  40. package/dist/scripts/update-all-init-scripts.js +52 -0
  41. package/dist/scripts/update-biome-schema.d.ts +15 -0
  42. package/dist/scripts/update-biome-schema.js +124 -0
  43. package/dist/src/AutoCoreFacade.d.ts +145 -0
  44. package/dist/src/AutoCoreFacade.js +217 -0
  45. package/dist/src/api/ApiActions.d.ts +297 -0
  46. package/dist/src/api/ApiActions.js +1905 -0
  47. package/dist/src/api/Certificate.d.ts +60 -0
  48. package/dist/src/api/Certificate.js +79 -0
  49. package/dist/src/api/JsonResponse.d.ts +116 -0
  50. package/dist/src/api/JsonResponse.js +206 -0
  51. package/dist/src/appium/DeviceFarmViewer.d.ts +79 -0
  52. package/dist/src/appium/DeviceFarmViewer.js +1083 -0
  53. package/dist/src/appium/MobileActions.d.ts +347 -0
  54. package/dist/src/appium/MobileActions.js +1632 -0
  55. package/dist/src/appium/MobileConnection.d.ts +160 -0
  56. package/dist/src/appium/MobileConnection.js +772 -0
  57. package/dist/src/config/envLoader.d.ts +123 -0
  58. package/dist/src/config/envLoader.js +361 -0
  59. package/dist/src/config/jest-safe-setup.d.ts +19 -0
  60. package/dist/src/config/jest-safe-setup.js +369 -0
  61. package/dist/src/config/timeouts.d.ts +32 -0
  62. package/dist/src/config/timeouts.js +38 -0
  63. package/dist/src/desktop/DesktopActions.d.ts +46 -0
  64. package/dist/src/desktop/DesktopActions.js +398 -0
  65. package/dist/src/desktop/DesktopConnection.d.ts +32 -0
  66. package/dist/src/desktop/DesktopConnection.js +84 -0
  67. package/dist/src/domain/entities/TestExecution.d.ts +117 -0
  68. package/dist/src/domain/entities/TestExecution.js +150 -0
  69. package/dist/src/domain/entities/TestReport.d.ts +114 -0
  70. package/dist/src/domain/entities/TestReport.js +179 -0
  71. package/dist/src/domain/repositories/ITestRepository.d.ts +196 -0
  72. package/dist/src/domain/repositories/ITestRepository.js +14 -0
  73. package/dist/src/domain/schemas/ValidationSchemas.d.ts +159 -0
  74. package/dist/src/domain/schemas/ValidationSchemas.js +181 -0
  75. package/dist/src/functions/errors/BaseError.d.ts +78 -0
  76. package/dist/src/functions/errors/BaseError.js +245 -0
  77. package/dist/src/functions/errors/ConfigurationError.d.ts +16 -0
  78. package/dist/src/functions/errors/ConfigurationError.js +48 -0
  79. package/dist/src/functions/errors/ErrorCatalog.d.ts +148 -0
  80. package/dist/src/functions/errors/ErrorCatalog.js +157 -0
  81. package/dist/src/functions/errors/GlobalErrorHandler.d.ts +101 -0
  82. package/dist/src/functions/errors/GlobalErrorHandler.js +281 -0
  83. package/dist/src/functions/errors/IntegrationError.d.ts +17 -0
  84. package/dist/src/functions/errors/IntegrationError.js +51 -0
  85. package/dist/src/functions/errors/SecurityError.d.ts +14 -0
  86. package/dist/src/functions/errors/SecurityError.js +42 -0
  87. package/dist/src/functions/errors/SystemError.d.ts +12 -0
  88. package/dist/src/functions/errors/SystemError.js +36 -0
  89. package/dist/src/functions/errors/ValidationError.d.ts +14 -0
  90. package/dist/src/functions/errors/ValidationError.js +61 -0
  91. package/dist/src/functions/errors/index.d.ts +12 -0
  92. package/dist/src/functions/errors/index.js +13 -0
  93. package/dist/src/global-setup.d.ts +1 -0
  94. package/dist/src/global-setup.js +1037 -0
  95. package/dist/src/helpers/BancoActions.d.ts +188 -0
  96. package/dist/src/helpers/BancoActions.js +581 -0
  97. package/dist/src/helpers/EnviromentHelper.d.ts +17 -0
  98. package/dist/src/helpers/EnviromentHelper.js +66 -0
  99. package/dist/src/helpers/ParallelExecutionHelper.d.ts +183 -0
  100. package/dist/src/helpers/ParallelExecutionHelper.js +375 -0
  101. package/dist/src/helpers/SyncSignal.d.ts +15 -0
  102. package/dist/src/helpers/SyncSignal.js +44 -0
  103. package/dist/src/hubdocs/CategoryDetector.d.ts +83 -0
  104. package/dist/src/hubdocs/CategoryDetector.js +401 -0
  105. package/dist/src/hubdocs/DirectStatementInterceptor.d.ts +54 -0
  106. package/dist/src/hubdocs/DirectStatementInterceptor.js +243 -0
  107. package/dist/src/hubdocs/ExecutionTracker.d.ts +107 -0
  108. package/dist/src/hubdocs/ExecutionTracker.js +702 -0
  109. package/dist/src/hubdocs/HubDocs.d.ts +395 -0
  110. package/dist/src/hubdocs/HubDocs.js +3586 -0
  111. package/dist/src/hubdocs/StatementMethodFilter.d.ts +71 -0
  112. package/dist/src/hubdocs/StatementMethodFilter.js +618 -0
  113. package/dist/src/hubdocs/StatementTracker.d.ts +417 -0
  114. package/dist/src/hubdocs/StatementTracker.js +2419 -0
  115. package/dist/src/hubdocs/SwaggerGenerator.d.ts +59 -0
  116. package/dist/src/hubdocs/SwaggerGenerator.js +405 -0
  117. package/dist/src/hubdocs/index.d.ts +9 -0
  118. package/dist/src/hubdocs/index.js +9 -0
  119. package/dist/src/hubdocs/types.d.ts +114 -0
  120. package/dist/src/hubdocs/types.js +5 -0
  121. package/dist/src/infrastructure/DependencyContainer.d.ts +142 -0
  122. package/dist/src/infrastructure/DependencyContainer.js +250 -0
  123. package/dist/src/infrastructure/adapters/AppiumAdapter.d.ts +168 -0
  124. package/dist/src/infrastructure/adapters/AppiumAdapter.js +468 -0
  125. package/dist/src/infrastructure/adapters/OracleAdapter.d.ts +150 -0
  126. package/dist/src/infrastructure/adapters/OracleAdapter.js +388 -0
  127. package/dist/src/infrastructure/adapters/PlaywrightAdapter.d.ts +192 -0
  128. package/dist/src/infrastructure/adapters/PlaywrightAdapter.js +382 -0
  129. package/dist/src/infrastructure/adapters/SSHAdapter.d.ts +141 -0
  130. package/dist/src/infrastructure/adapters/SSHAdapter.js +428 -0
  131. package/dist/src/interfaces.d.ts +501 -0
  132. package/dist/src/interfaces.js +25 -0
  133. package/dist/src/internal/fakes/__fake-actions__.d.ts +17 -0
  134. package/dist/src/internal/fakes/__fake-actions__.js +21 -0
  135. package/dist/src/internal/fakes/__forbidden__.d.ts +10 -0
  136. package/dist/src/internal/fakes/__forbidden__.js +18 -0
  137. package/dist/src/internal/fakes/__honeypot__.d.ts +15 -0
  138. package/dist/src/internal/fakes/__honeypot__.js +24 -0
  139. package/dist/src/octane/OctaneReporter.d.ts +13 -0
  140. package/dist/src/octane/OctaneReporter.js +61 -0
  141. package/dist/src/playwright/CryptoActions.d.ts +20 -0
  142. package/dist/src/playwright/CryptoActions.js +75 -0
  143. package/dist/src/playwright/EnhancedWebActions.d.ts +7 -0
  144. package/dist/src/playwright/EnhancedWebActions.js +65 -0
  145. package/dist/src/playwright/WebActions.d.ts +1599 -0
  146. package/dist/src/playwright/WebActions.js +11788 -0
  147. package/dist/src/playwright/actions/ActionTimeline.d.ts +36 -0
  148. package/dist/src/playwright/actions/ActionTimeline.js +101 -0
  149. package/dist/src/playwright/actions/RecoveryQueue.d.ts +82 -0
  150. package/dist/src/playwright/actions/RecoveryQueue.js +130 -0
  151. package/dist/src/playwright/actions/SelectorCache.d.ts +53 -0
  152. package/dist/src/playwright/actions/SelectorCache.js +96 -0
  153. package/dist/src/playwright/actions/index.d.ts +13 -0
  154. package/dist/src/playwright/actions/index.js +14 -0
  155. package/dist/src/playwright/actions/types.d.ts +147 -0
  156. package/dist/src/playwright/actions/types.js +5 -0
  157. package/dist/src/playwright/fixtures.d.ts +112 -0
  158. package/dist/src/playwright/fixtures.js +718 -0
  159. package/dist/src/playwright/network-logs-reporter.d.ts +7 -0
  160. package/dist/src/playwright/network-logs-reporter.js +66 -0
  161. package/dist/src/playwright/registerRecoveryWrappers.d.ts +1 -0
  162. package/dist/src/playwright/registerRecoveryWrappers.js +54 -0
  163. package/dist/src/security/BuildSecurity.d.ts +12 -0
  164. package/dist/src/security/BuildSecurity.js +138 -0
  165. package/dist/src/security/EulaProtection.d.ts +70 -0
  166. package/dist/src/security/EulaProtection.js +155 -0
  167. package/dist/src/security/HoneypotManager.d.ts +46 -0
  168. package/dist/src/security/HoneypotManager.js +234 -0
  169. package/dist/src/security/KeysManager.d.ts +36 -0
  170. package/dist/src/security/KeysManager.js +158 -0
  171. package/dist/src/security/ProofOfWorkIntegration.d.ts +64 -0
  172. package/dist/src/security/ProofOfWorkIntegration.js +206 -0
  173. package/dist/src/security/SecurityValidation.d.ts +21 -0
  174. package/dist/src/security/SecurityValidation.js +163 -0
  175. package/dist/src/security/SourceMapProtection.d.ts +55 -0
  176. package/dist/src/security/SourceMapProtection.js +220 -0
  177. package/dist/src/security/protector.d.ts +1 -0
  178. package/dist/src/security/protector.js +97 -0
  179. package/dist/src/ssh/SSHActions.d.ts +262 -0
  180. package/dist/src/ssh/SSHActions.js +790 -0
  181. package/dist/src/ssh/SSHClient.d.ts +99 -0
  182. package/dist/src/ssh/SSHClient.js +409 -0
  183. package/dist/src/statements/BaseStatement.d.ts +38 -0
  184. package/dist/src/statements/BaseStatement.js +78 -0
  185. package/dist/src/testContext/AuthStateManager.d.ts +93 -0
  186. package/dist/src/testContext/AuthStateManager.js +256 -0
  187. package/dist/src/testContext/CoverageManager.d.ts +198 -0
  188. package/dist/src/testContext/CoverageManager.js +917 -0
  189. package/dist/src/testContext/TestAnnotations.d.ts +476 -0
  190. package/dist/src/testContext/TestAnnotations.js +2647 -0
  191. package/dist/src/testContext/TestContext.d.ts +138 -0
  192. package/dist/src/testContext/TestContext.js +369 -0
  193. package/dist/src/testContext/UnifiedHtmlGenerator.d.ts +7 -0
  194. package/dist/src/testContext/UnifiedHtmlGenerator.js +264 -0
  195. package/dist/src/testContext/UnifiedReportManager.d.ts +211 -0
  196. package/dist/src/testContext/UnifiedReportManager.js +1206 -0
  197. package/dist/src/testhub/DynamicConfigManager.d.ts +121 -0
  198. package/dist/src/testhub/DynamicConfigManager.js +320 -0
  199. package/dist/src/testhub/SystemsManager.d.ts +119 -0
  200. package/dist/src/testhub/SystemsManager.js +365 -0
  201. package/dist/src/testhub/TestHubClient.d.ts +335 -0
  202. package/dist/src/testhub/TestHubClient.js +1215 -0
  203. package/dist/src/testhub/TestHubReporter.d.ts +62 -0
  204. package/dist/src/testhub/TestHubReporter.js +576 -0
  205. package/dist/src/testhub/TestHubVars.d.ts +116 -0
  206. package/dist/src/testhub/TestHubVars.js +273 -0
  207. package/dist/src/utils/ActionInterceptor.d.ts +59 -0
  208. package/dist/src/utils/ActionInterceptor.js +741 -0
  209. package/dist/src/utils/ArtifactsCompressor.d.ts +43 -0
  210. package/dist/src/utils/ArtifactsCompressor.js +181 -0
  211. package/dist/src/utils/AutoLogsFinal.d.ts +47 -0
  212. package/dist/src/utils/AutoLogsFinal.js +148 -0
  213. package/dist/src/utils/CodeGenSession.d.ts +114 -0
  214. package/dist/src/utils/CodeGenSession.js +264 -0
  215. package/dist/src/utils/ConfigLogger.d.ts +133 -0
  216. package/dist/src/utils/ConfigLogger.js +611 -0
  217. package/dist/src/utils/CustomReporter.d.ts +22 -0
  218. package/dist/src/utils/CustomReporter.js +352 -0
  219. package/dist/src/utils/DataStore.d.ts +171 -0
  220. package/dist/src/utils/DataStore.js +484 -0
  221. package/dist/src/utils/DatabaseInterceptor.d.ts +19 -0
  222. package/dist/src/utils/DatabaseInterceptor.js +295 -0
  223. package/dist/src/utils/DateHelper.d.ts +16 -0
  224. package/dist/src/utils/DateHelper.js +120 -0
  225. package/dist/src/utils/DateValidator.d.ts +4 -0
  226. package/dist/src/utils/DateValidator.js +51 -0
  227. package/dist/src/utils/DocumentGenerator.d.ts +35 -0
  228. package/dist/src/utils/DocumentGenerator.js +129 -0
  229. package/dist/src/utils/EvidenceCapture.d.ts +90 -0
  230. package/dist/src/utils/EvidenceCapture.js +600 -0
  231. package/dist/src/utils/EvidenceReportGenerator.d.ts +70 -0
  232. package/dist/src/utils/EvidenceReportGenerator.js +799 -0
  233. package/dist/src/utils/FrameManagementUtil.d.ts +42 -0
  234. package/dist/src/utils/FrameManagementUtil.js +75 -0
  235. package/dist/src/utils/GlobalStatementsInterceptor.d.ts +1 -0
  236. package/dist/src/utils/GlobalStatementsInterceptor.js +1 -0
  237. package/dist/src/utils/HTMLTemplate.d.ts +1 -0
  238. package/dist/src/utils/HTMLTemplate.js +1034 -0
  239. package/dist/src/utils/InterceptacaoMagica.d.ts +23 -0
  240. package/dist/src/utils/InterceptacaoMagica.js +365 -0
  241. package/dist/src/utils/LogSanitizer.d.ts +35 -0
  242. package/dist/src/utils/LogSanitizer.js +110 -0
  243. package/dist/src/utils/Logger.d.ts +65 -0
  244. package/dist/src/utils/Logger.js +284 -0
  245. package/dist/src/utils/McpLocalClient.d.ts +141 -0
  246. package/dist/src/utils/McpLocalClient.js +871 -0
  247. package/dist/src/utils/PDFEvidenceGenerator.d.ts +20 -0
  248. package/dist/src/utils/PDFEvidenceGenerator.js +156 -0
  249. package/dist/src/utils/SpecFileAnalyzer.d.ts +35 -0
  250. package/dist/src/utils/SpecFileAnalyzer.js +209 -0
  251. package/dist/src/utils/StatementInterceptor.d.ts +18 -0
  252. package/dist/src/utils/StatementInterceptor.js +87 -0
  253. package/dist/src/utils/StatementLogger.d.ts +33 -0
  254. package/dist/src/utils/StatementLogger.js +113 -0
  255. package/dist/src/utils/StatementsInterceptor.d.ts +1 -0
  256. package/dist/src/utils/StatementsInterceptor.js +1 -0
  257. package/dist/src/utils/TeamsFlushHook.d.ts +17 -0
  258. package/dist/src/utils/TeamsFlushHook.js +168 -0
  259. package/dist/src/utils/TerminalLogCapture.d.ts +158 -0
  260. package/dist/src/utils/TerminalLogCapture.js +531 -0
  261. package/dist/src/utils/TestMethodLogger.d.ts +70 -0
  262. package/dist/src/utils/TestMethodLogger.js +95 -0
  263. package/dist/src/utils/UnifiedTeardown.d.ts +4 -0
  264. package/dist/src/utils/UnifiedTeardown.js +400 -0
  265. package/dist/src/utils/XPathCatalog.d.ts +152 -0
  266. package/dist/src/utils/XPathCatalog.js +350 -0
  267. package/dist/src/utils/generators.d.ts +90 -0
  268. package/dist/src/utils/generators.js +167 -0
  269. package/dist/src/utils/testRecovery/ResilientPlaywright.d.ts +152 -0
  270. package/dist/src/utils/testRecovery/ResilientPlaywright.js +715 -0
  271. package/dist/src/utils/testRecovery/TestRecoveryClient.d.ts +801 -0
  272. package/dist/src/utils/testRecovery/TestRecoveryClient.js +1415 -0
  273. package/dist/src/utils/testRecovery/autoFixCode.d.ts +65 -0
  274. package/dist/src/utils/testRecovery/autoFixCode.js +32 -0
  275. package/dist/vitest.config.d.ts +2 -0
  276. package/dist/vitest.config.js +59 -0
  277. package/dist/wdio.conf.d.ts +1 -0
  278. package/dist/wdio.conf.js +420 -0
  279. package/package.json +137 -0
  280. package/protect-loader.mjs +643 -0
  281. package/scripts/consumer-postinstall.ts +975 -0
  282. package/scripts/generate-index.ts +343 -0
  283. package/scripts/init-api.ts +613 -0
  284. package/scripts/init-banco.ts +437 -0
  285. package/scripts/init-frontend.ts +727 -0
  286. package/scripts/init-mobile.ts +558 -0
  287. package/scripts/init-scenarios.ts +925 -0
  288. package/scripts/init-ssh.ts +734 -0
  289. package/scripts/package-versions.ts +978 -0
  290. package/scripts/postinstall.ts +605 -0
  291. package/scripts/smart-override.ts +1675 -0
  292. package/scripts/sync-configs.ts +302 -0
  293. package/scripts/ultracite-setup.ts +370 -0
  294. package/src/types/globals.d.ts +48 -0
  295. package/tsconfig.json +29 -0
  296. 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 {};