@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,59 @@
1
+ /**
2
+ * 📖 SwaggerGenerator - Gerador de Documentação OpenAPI
3
+ * @silasfmartins/testhub - Auto Documentation System
4
+ */
5
+ import type { ExecutionData } from './types.js';
6
+ export declare class SwaggerGenerator {
7
+ private static readonly SWAGGER_VERSION;
8
+ /**
9
+ * 🔄 Gerar especificação OpenAPI completa
10
+ */
11
+ static generateSwagger(data: ExecutionData): any;
12
+ /**
13
+ * 🌐 Extrair servidores únicos
14
+ */
15
+ private static extractServers;
16
+ /**
17
+ * 🛣️ Gerar paths da API
18
+ */
19
+ private static generatePaths;
20
+ /**
21
+ * 🎯 Gerar operação individual
22
+ */
23
+ private static generateOperation;
24
+ /**
25
+ * 📝 Gerar resumo da operação
26
+ */
27
+ private static generateSummary;
28
+ /**
29
+ * 📋 Gerar descrição detalhada
30
+ */
31
+ private static generateDescription;
32
+ /**
33
+ * 🏷️ Extrair tags
34
+ */
35
+ private static extractTags;
36
+ /**
37
+ * 📊 Gerar parâmetros
38
+ */
39
+ private static generateParameters;
40
+ /**
41
+ * 📤 Gerar request body
42
+ */
43
+ private static generateRequestBody;
44
+ /**
45
+ * 📥 Gerar responses
46
+ */
47
+ private static generateResponses;
48
+ /**
49
+ * 🔧 Métodos auxiliares
50
+ */
51
+ private static groupApisByEndpoint;
52
+ private static groupByMethod;
53
+ private static generateSchemas;
54
+ private static generateSecuritySchemes;
55
+ private static generateTags;
56
+ private static generateSchemaFromObject;
57
+ private static calculateAvgResponseTime;
58
+ private static getStatusDescription;
59
+ }
@@ -0,0 +1,405 @@
1
+ /**
2
+ * 📖 SwaggerGenerator - Gerador de Documentação OpenAPI
3
+ * @silasfmartins/testhub - Auto Documentation System
4
+ */
5
+ export class SwaggerGenerator {
6
+ static SWAGGER_VERSION = '3.0.3';
7
+ /**
8
+ * 🔄 Gerar especificação OpenAPI completa
9
+ */
10
+ static generateSwagger(data) {
11
+ const swagger = {
12
+ openapi: SwaggerGenerator.SWAGGER_VERSION,
13
+ info: {
14
+ title: `${data.metadata.projectName} - API Documentation`,
15
+ version: data.metadata.version,
16
+ description: `Documentação automática gerada pelo @silasfmartins/testhub\n\nGerada em: ${new Date().toLocaleString()}\nTipo do projeto: ${data.metadata.projectType}\nAmbiente: ${data.metadata.environment}`,
17
+ contact: {
18
+ name: 'AutoCore Website System',
19
+ url: 'http://brtlvlty0559pl:3002/',
20
+ },
21
+ },
22
+ servers: SwaggerGenerator.extractServers(data.apis),
23
+ paths: SwaggerGenerator.generatePaths(data.apis),
24
+ components: {
25
+ schemas: SwaggerGenerator.generateSchemas(data.apis),
26
+ securitySchemes: SwaggerGenerator.generateSecuritySchemes(data.apis),
27
+ },
28
+ tags: SwaggerGenerator.generateTags(data.apis),
29
+ };
30
+ return swagger;
31
+ }
32
+ /**
33
+ * 🌐 Extrair servidores únicos
34
+ */
35
+ static extractServers(apis) {
36
+ const serverSet = new Set();
37
+ apis.forEach((api) => {
38
+ try {
39
+ const url = new URL(api.url);
40
+ const baseUrl = `${url.protocol}//${url.host}`;
41
+ serverSet.add(baseUrl);
42
+ }
43
+ catch (error) {
44
+ // Ignorar URLs inválidas
45
+ }
46
+ });
47
+ return Array.from(serverSet).map((url) => ({
48
+ url,
49
+ description: 'Servidor extraído automaticamente',
50
+ }));
51
+ }
52
+ /**
53
+ * 🛣️ Gerar paths da API
54
+ */
55
+ static generatePaths(apis) {
56
+ const paths = {};
57
+ // Agrupar APIs por endpoint
58
+ const groupedApis = SwaggerGenerator.groupApisByEndpoint(apis);
59
+ Object.entries(groupedApis).forEach(([endpoint, calls]) => {
60
+ paths[endpoint] = {};
61
+ // Agrupar por método HTTP
62
+ const methodGroups = SwaggerGenerator.groupByMethod(calls);
63
+ Object.entries(methodGroups).forEach(([method, methodCalls]) => {
64
+ paths[endpoint][method.toLowerCase()] =
65
+ SwaggerGenerator.generateOperation(methodCalls);
66
+ });
67
+ });
68
+ return paths;
69
+ }
70
+ /**
71
+ * 🎯 Gerar operação individual
72
+ */
73
+ static generateOperation(calls) {
74
+ const firstCall = calls[0];
75
+ const successfulCalls = calls.filter((c) => c.success);
76
+ const failedCalls = calls.filter((c) => !c.success);
77
+ return {
78
+ summary: SwaggerGenerator.generateSummary(firstCall),
79
+ description: SwaggerGenerator.generateDescription(calls),
80
+ tags: SwaggerGenerator.extractTags(firstCall),
81
+ parameters: SwaggerGenerator.generateParameters(calls),
82
+ requestBody: SwaggerGenerator.generateRequestBody(calls),
83
+ responses: SwaggerGenerator.generateResponses(successfulCalls, failedCalls),
84
+ 'x-autocore-stats': {
85
+ totalCalls: calls.length,
86
+ successRate: `${((successfulCalls.length / calls.length) * 100).toFixed(1)}%`,
87
+ avgResponseTime: SwaggerGenerator.calculateAvgResponseTime(calls),
88
+ lastExecuted: Math.max(...calls.map((c) => new Date(c.timestamp).getTime())),
89
+ },
90
+ };
91
+ }
92
+ /**
93
+ * 📝 Gerar resumo da operação
94
+ */
95
+ static generateSummary(call) {
96
+ const pathParts = new URL(call.url).pathname.split('/').filter(Boolean);
97
+ const lastPart = pathParts[pathParts.length - 1] || 'root';
98
+ const actionVerbs = {
99
+ GET: 'Obter',
100
+ POST: 'Criar',
101
+ PUT: 'Atualizar',
102
+ DELETE: 'Remover',
103
+ PATCH: 'Modificar',
104
+ };
105
+ return `${actionVerbs[call.method] || call.method} ${lastPart}`;
106
+ }
107
+ /**
108
+ * 📋 Gerar descrição detalhada
109
+ */
110
+ static generateDescription(calls) {
111
+ const contexts = [
112
+ ...new Set(calls.map((c) => c.testContext).filter(Boolean)),
113
+ ];
114
+ const files = [...new Set(calls.map((c) => c.testFile).filter(Boolean))];
115
+ let description = 'Esta operação foi capturada automaticamente durante a execução dos testes.\n\n';
116
+ if (contexts.length > 0) {
117
+ description += `**Contextos de teste:** ${contexts.join(', ')}\n\n`;
118
+ }
119
+ if (files.length > 0) {
120
+ description += `**Arquivos de teste:** ${files.join(', ')}\n\n`;
121
+ }
122
+ description += `**Execuções registradas:** ${calls.length}`;
123
+ return description;
124
+ }
125
+ /**
126
+ * 🏷️ Extrair tags
127
+ */
128
+ static extractTags(call) {
129
+ const tags = [];
130
+ // Tag baseada no caminho
131
+ try {
132
+ const pathParts = new URL(call.url).pathname.split('/').filter(Boolean);
133
+ if (pathParts.length > 0) {
134
+ tags.push(pathParts[0]);
135
+ }
136
+ }
137
+ catch (error) {
138
+ // Ignorar
139
+ }
140
+ // Tag baseada no arquivo de teste
141
+ if (call.testFile) {
142
+ const fileName = call.testFile
143
+ .split('/')
144
+ .pop()
145
+ ?.replace('.test.ts', '')
146
+ .replace('.spec.ts', '');
147
+ if (fileName) {
148
+ tags.push(fileName);
149
+ }
150
+ }
151
+ return tags.length > 0 ? tags : ['default'];
152
+ }
153
+ /**
154
+ * 📊 Gerar parâmetros
155
+ */
156
+ static generateParameters(calls) {
157
+ const parameters = [];
158
+ // Extrair parâmetros de query únicos
159
+ const queryParams = new Set();
160
+ calls.forEach((call) => {
161
+ try {
162
+ const url = new URL(call.url);
163
+ url.searchParams.forEach((value, key) => {
164
+ queryParams.add(key);
165
+ });
166
+ }
167
+ catch (error) {
168
+ // Ignorar
169
+ }
170
+ });
171
+ queryParams.forEach((param) => {
172
+ parameters.push({
173
+ name: param,
174
+ in: 'query',
175
+ description: 'Parâmetro extraído automaticamente',
176
+ required: false,
177
+ schema: { type: 'string' },
178
+ });
179
+ });
180
+ // Extrair parâmetros de path
181
+ const firstCall = calls[0];
182
+ try {
183
+ const pathParams = new URL(firstCall.url).pathname.match(/{([^}]+)}/g);
184
+ if (pathParams) {
185
+ pathParams.forEach((param) => {
186
+ const paramName = param.slice(1, -1);
187
+ parameters.push({
188
+ name: paramName,
189
+ in: 'path',
190
+ description: 'Parâmetro de caminho',
191
+ required: true,
192
+ schema: { type: 'string' },
193
+ });
194
+ });
195
+ }
196
+ }
197
+ catch (error) {
198
+ // Ignorar
199
+ }
200
+ return parameters;
201
+ }
202
+ /**
203
+ * 📤 Gerar request body
204
+ */
205
+ static generateRequestBody(calls) {
206
+ const callsWithPayload = calls.filter((c) => c.payload);
207
+ if (callsWithPayload.length === 0)
208
+ return;
209
+ const firstPayload = callsWithPayload[0].payload;
210
+ return {
211
+ description: 'Request body extraído automaticamente',
212
+ required: true,
213
+ content: {
214
+ 'application/json': {
215
+ schema: SwaggerGenerator.generateSchemaFromObject(firstPayload),
216
+ example: firstPayload,
217
+ },
218
+ },
219
+ };
220
+ }
221
+ /**
222
+ * 📥 Gerar responses
223
+ */
224
+ static generateResponses(successCalls, failedCalls) {
225
+ const responses = {};
226
+ // Responses de sucesso
227
+ if (successCalls.length > 0) {
228
+ const statusCodes = [
229
+ ...new Set(successCalls
230
+ .map((c) => c.statusCode)
231
+ .filter((code) => code !== undefined)),
232
+ ];
233
+ statusCodes.forEach((statusCode) => {
234
+ const callsWithStatus = successCalls.filter((c) => c.statusCode === statusCode);
235
+ const firstResponse = callsWithStatus.find((c) => c.response)?.response;
236
+ responses[statusCode.toString()] = {
237
+ description: SwaggerGenerator.getStatusDescription(statusCode),
238
+ content: firstResponse
239
+ ? {
240
+ 'application/json': {
241
+ schema: SwaggerGenerator.generateSchemaFromObject(firstResponse),
242
+ example: firstResponse,
243
+ },
244
+ }
245
+ : undefined,
246
+ };
247
+ });
248
+ }
249
+ // Responses de erro
250
+ if (failedCalls.length > 0) {
251
+ const errorCodes = [
252
+ ...new Set(failedCalls
253
+ .map((c) => c.statusCode)
254
+ .filter((code) => code !== undefined)),
255
+ ];
256
+ errorCodes.forEach((statusCode) => {
257
+ const callsWithStatus = failedCalls.filter((c) => c.statusCode === statusCode);
258
+ const firstError = callsWithStatus.find((c) => c.error)?.error;
259
+ responses[statusCode.toString()] = {
260
+ description: SwaggerGenerator.getStatusDescription(statusCode),
261
+ content: firstError
262
+ ? {
263
+ 'application/json': {
264
+ schema: SwaggerGenerator.generateSchemaFromObject(firstError),
265
+ example: firstError,
266
+ },
267
+ }
268
+ : undefined,
269
+ };
270
+ });
271
+ }
272
+ // Response padrão se não houver nenhum
273
+ if (Object.keys(responses).length === 0) {
274
+ responses['200'] = {
275
+ description: 'Resposta bem-sucedida',
276
+ };
277
+ }
278
+ return responses;
279
+ }
280
+ /**
281
+ * 🔧 Métodos auxiliares
282
+ */
283
+ static groupApisByEndpoint(apis) {
284
+ const groups = {};
285
+ apis.forEach((api) => {
286
+ try {
287
+ let path = new URL(api.url).pathname;
288
+ // Garantir que o path sempre comece com "/"
289
+ if (!path || path === '') {
290
+ path = '/root';
291
+ }
292
+ else if (!path.startsWith('/')) {
293
+ path = '/' + path;
294
+ }
295
+ // Limpar caracteres inválidos e normalizar
296
+ path = path.replace(/[^a-zA-Z0-9\-._~:/?#[\]@!$&'()*+,;=%]/g, '_');
297
+ if (!groups[path])
298
+ groups[path] = [];
299
+ groups[path].push(api);
300
+ }
301
+ catch (error) {
302
+ // Gerar um path válido baseado na URL
303
+ const safePath = '/generated_' +
304
+ Buffer.from(api.url)
305
+ .toString('base64')
306
+ .substring(0, 20)
307
+ .replace(/[^a-zA-Z0-9]/g, '_');
308
+ if (!groups[safePath])
309
+ groups[safePath] = [];
310
+ groups[safePath].push(api);
311
+ }
312
+ });
313
+ return groups;
314
+ }
315
+ static groupByMethod(calls) {
316
+ const groups = {};
317
+ calls.forEach((call) => {
318
+ if (!groups[call.method])
319
+ groups[call.method] = [];
320
+ groups[call.method].push(call);
321
+ });
322
+ return groups;
323
+ }
324
+ static generateSchemas(apis) {
325
+ // Por simplicidade, retornamos um schema básico
326
+ // Em implementação futura, podemos analisar todos os payloads/responses
327
+ return {
328
+ Error: {
329
+ type: 'object',
330
+ properties: {
331
+ message: { type: 'string' },
332
+ code: { type: 'string' },
333
+ details: { type: 'object' },
334
+ },
335
+ },
336
+ };
337
+ }
338
+ static generateSecuritySchemes(apis) {
339
+ // Detectar esquemas de segurança comuns
340
+ const hasBearer = apis.some((api) => api.headers &&
341
+ Object.keys(api.headers).some((h) => h.toLowerCase() === 'authorization' &&
342
+ typeof api.headers[h] === 'string' &&
343
+ api.headers[h].startsWith('Bearer ')));
344
+ const schemes = {};
345
+ if (hasBearer) {
346
+ schemes.bearerAuth = {
347
+ type: 'http',
348
+ scheme: 'bearer',
349
+ bearerFormat: 'JWT',
350
+ };
351
+ }
352
+ return schemes;
353
+ }
354
+ static generateTags(apis) {
355
+ const tagSet = new Set();
356
+ apis.forEach((api) => {
357
+ SwaggerGenerator.extractTags(api).forEach((tag) => tagSet.add(tag));
358
+ });
359
+ return Array.from(tagSet).map((name) => ({
360
+ name,
361
+ description: `Operações relacionadas a ${name}`,
362
+ }));
363
+ }
364
+ static generateSchemaFromObject(obj) {
365
+ if (!obj || typeof obj !== 'object') {
366
+ return { type: 'string' };
367
+ }
368
+ if (Array.isArray(obj)) {
369
+ return {
370
+ type: 'array',
371
+ items: obj.length > 0
372
+ ? SwaggerGenerator.generateSchemaFromObject(obj[0])
373
+ : { type: 'string' },
374
+ };
375
+ }
376
+ const properties = {};
377
+ Object.keys(obj).forEach((key) => {
378
+ const value = obj[key];
379
+ properties[key] = SwaggerGenerator.generateSchemaFromObject(value);
380
+ });
381
+ return {
382
+ type: 'object',
383
+ properties,
384
+ };
385
+ }
386
+ static calculateAvgResponseTime(calls) {
387
+ const timesWithDuration = calls.filter((c) => c.duration !== undefined);
388
+ if (timesWithDuration.length === 0)
389
+ return 0;
390
+ const total = timesWithDuration.reduce((sum, call) => sum + (call.duration || 0), 0);
391
+ return Math.round(total / timesWithDuration.length);
392
+ }
393
+ static getStatusDescription(statusCode) {
394
+ const descriptions = {
395
+ 200: 'Sucesso',
396
+ 201: 'Criado com sucesso',
397
+ 400: 'Requisição inválida',
398
+ 401: 'Não autorizado',
399
+ 403: 'Acesso negado',
400
+ 404: 'Não encontrado',
401
+ 500: 'Erro interno do servidor',
402
+ };
403
+ return descriptions[statusCode] || `Status ${statusCode}`;
404
+ }
405
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 📚 Auto Documentation System - Main Export
3
+ * @silasfmartins/testhub - Comprehensive Documentation Generation
4
+ */
5
+ export { CategoryDetector } from './CategoryDetector.js';
6
+ export { ExecutionTracker, ExecutionTracker as Tracker, } from './ExecutionTracker.js';
7
+ export { AutoDocs, AutoDocs as Docs } from './HubDocs.js';
8
+ export { SwaggerGenerator } from './SwaggerGenerator.js';
9
+ export type { APICall, DBQuery, DocsConfig, ExecutionData, ExecutionMetadata, MobileAction, SSHCommand, TestCategory, UIAction, } from './types.js';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 📚 Auto Documentation System - Main Export
3
+ * @silasfmartins/testhub - Comprehensive Documentation Generation
4
+ */
5
+ export { CategoryDetector } from './CategoryDetector.js';
6
+ export { ExecutionTracker, ExecutionTracker as Tracker, } from './ExecutionTracker.js';
7
+ // Convenience re-exports for common usage
8
+ export { AutoDocs, AutoDocs as Docs } from './HubDocs.js';
9
+ export { SwaggerGenerator } from './SwaggerGenerator.js';
@@ -0,0 +1,114 @@
1
+ /**
2
+ * 📚 Types para o sistema de documentação automática
3
+ * @silasfmartins/testhub - Auto Documentation System
4
+ */
5
+ export interface ExecutionData {
6
+ apis: APICall[];
7
+ ssh: SSHCommand[];
8
+ db: DBQuery[];
9
+ ui: UIAction[];
10
+ mobile: MobileAction[];
11
+ metadata: ExecutionMetadata;
12
+ }
13
+ export interface APICall {
14
+ id: string;
15
+ method: string;
16
+ url: string;
17
+ payload?: any;
18
+ response?: any;
19
+ statusCode?: number;
20
+ timestamp: string;
21
+ testName: string;
22
+ environment: string;
23
+ headers?: Record<string, string | string[]>;
24
+ duration?: number;
25
+ success: boolean;
26
+ error?: any;
27
+ testFile?: string;
28
+ testContext?: string;
29
+ }
30
+ export interface SSHCommand {
31
+ command: string;
32
+ output: string;
33
+ host: string;
34
+ timestamp: string;
35
+ testName: string;
36
+ exitCode?: number;
37
+ duration: number;
38
+ user?: string;
39
+ success?: boolean;
40
+ error?: string;
41
+ }
42
+ export interface DBQuery {
43
+ query: string;
44
+ params: any[];
45
+ result?: any;
46
+ duration: number;
47
+ timestamp: string;
48
+ testName: string;
49
+ database: string;
50
+ type: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'DDL' | 'OTHER';
51
+ rowCount?: number;
52
+ description?: string;
53
+ serviceName?: string;
54
+ success?: boolean;
55
+ error?: string;
56
+ }
57
+ export interface UIAction {
58
+ action: string;
59
+ element: string;
60
+ value?: string;
61
+ page: string;
62
+ timestamp: string;
63
+ testName: string;
64
+ screenshot?: string;
65
+ selector: string;
66
+ success?: boolean;
67
+ duration?: number;
68
+ error?: string;
69
+ }
70
+ export interface MobileAction {
71
+ action: string;
72
+ element?: string;
73
+ device: string;
74
+ platform: 'iOS' | 'Android' | 'Web';
75
+ timestamp: string;
76
+ testName: string;
77
+ value?: string;
78
+ coordinates?: {
79
+ x: number;
80
+ y: number;
81
+ };
82
+ screenshot?: string;
83
+ }
84
+ export interface ExecutionMetadata {
85
+ startTime: string;
86
+ endTime: string;
87
+ environment: string;
88
+ totalTests: number;
89
+ passedTests: number;
90
+ failedTests: number;
91
+ framework: string;
92
+ version: string;
93
+ projectName: string;
94
+ projectType: string;
95
+ duration: number;
96
+ }
97
+ export interface TestCategory {
98
+ name: string;
99
+ icon: string;
100
+ count: number;
101
+ description: string;
102
+ hasData: boolean;
103
+ }
104
+ export interface DocsConfig {
105
+ enabled: boolean;
106
+ categories: string[];
107
+ outputDir: string;
108
+ includeRequestBody: boolean;
109
+ includeResponseBody: boolean;
110
+ generateSwagger: boolean;
111
+ includeScreenshots: boolean;
112
+ maxRequestSize: number;
113
+ maxResponseSize: number;
114
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 📚 Types para o sistema de documentação automática
3
+ * @silasfmartins/testhub - Auto Documentation System
4
+ */
5
+ export {};