tutanus 0.13.2 → 0.13.4

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 (169) hide show
  1. package/dist/analysts/plugins/detector-markdown.js +2 -2
  2. package/dist/analysts/plugins/detector-markdown.js.map +1 -1
  3. package/dist/bin/cli-bootstrap.js +7 -7
  4. package/dist/bin/cli-bootstrap.js.map +1 -1
  5. package/dist/bin/index.js +7 -7
  6. package/dist/bin/index.js.map +1 -1
  7. package/dist/cli/commands/command-github-actions.d.ts.map +1 -1
  8. package/dist/cli/commands/command-github-actions.js +1 -3
  9. package/dist/cli/commands/command-github-actions.js.map +1 -1
  10. package/dist/cli/commands/command-guardian.js +1 -1
  11. package/dist/cli/commands/command-guardian.js.map +1 -1
  12. package/dist/cli/commands/command-marketplace.js +22 -22
  13. package/dist/cli/commands/command-marketplace.js.map +1 -1
  14. package/dist/cli/commands/command-prune.js +1 -1
  15. package/dist/cli/commands/command-prune.js.map +1 -1
  16. package/dist/cli/commands/command-reverter.js +6 -6
  17. package/dist/cli/commands/command-reverter.js.map +1 -1
  18. package/dist/core/messages/en/cli/cli-bin-messages.d.ts +7 -0
  19. package/dist/core/messages/en/cli/cli-bin-messages.d.ts.map +1 -1
  20. package/dist/core/messages/en/cli/cli-bin-messages.js +7 -0
  21. package/dist/core/messages/en/cli/cli-bin-messages.js.map +1 -1
  22. package/dist/core/messages/en/cli/cli-command-github-actions-messages.d.ts +1 -0
  23. package/dist/core/messages/en/cli/cli-command-github-actions-messages.d.ts.map +1 -1
  24. package/dist/core/messages/en/cli/cli-command-github-actions-messages.js +1 -0
  25. package/dist/core/messages/en/cli/cli-command-github-actions-messages.js.map +1 -1
  26. package/dist/core/messages/en/cli/cli-command-guardian-messages.d.ts +2 -1
  27. package/dist/core/messages/en/cli/cli-command-guardian-messages.d.ts.map +1 -1
  28. package/dist/core/messages/en/cli/cli-command-guardian-messages.js +2 -1
  29. package/dist/core/messages/en/cli/cli-command-guardian-messages.js.map +1 -1
  30. package/dist/core/messages/en/cli/cli-command-marketplace-messages.d.ts +19 -0
  31. package/dist/core/messages/en/cli/cli-command-marketplace-messages.d.ts.map +1 -1
  32. package/dist/core/messages/en/cli/cli-command-marketplace-messages.js +19 -0
  33. package/dist/core/messages/en/cli/cli-command-marketplace-messages.js.map +1 -1
  34. package/dist/core/messages/en/cli/cli-command-prune-messages.d.ts +1 -0
  35. package/dist/core/messages/en/cli/cli-command-prune-messages.d.ts.map +1 -1
  36. package/dist/core/messages/en/cli/cli-command-prune-messages.js +1 -0
  37. package/dist/core/messages/en/cli/cli-command-prune-messages.js.map +1 -1
  38. package/dist/core/messages/en/cli/cli-command-reverter-messages.d.ts +6 -0
  39. package/dist/core/messages/en/cli/cli-command-reverter-messages.d.ts.map +1 -1
  40. package/dist/core/messages/en/cli/cli-command-reverter-messages.js +6 -0
  41. package/dist/core/messages/en/cli/cli-command-reverter-messages.js.map +1 -1
  42. package/dist/core/messages/en/guardian/guardian-messages.d.ts +3 -0
  43. package/dist/core/messages/en/guardian/guardian-messages.d.ts.map +1 -1
  44. package/dist/core/messages/en/guardian/guardian-messages.js +3 -0
  45. package/dist/core/messages/en/guardian/guardian-messages.js.map +1 -1
  46. package/dist/core/messages/en/guardian/watcher-hidden-messages.d.ts +1 -0
  47. package/dist/core/messages/en/guardian/watcher-hidden-messages.d.ts.map +1 -1
  48. package/dist/core/messages/en/guardian/watcher-hidden-messages.js +1 -0
  49. package/dist/core/messages/en/guardian/watcher-hidden-messages.js.map +1 -1
  50. package/dist/core/messages/en/licenses/licenses-messages.d.ts +1 -0
  51. package/dist/core/messages/en/licenses/licenses-messages.d.ts.map +1 -1
  52. package/dist/core/messages/en/licenses/licenses-messages.js +1 -0
  53. package/dist/core/messages/en/licenses/licenses-messages.js.map +1 -1
  54. package/dist/core/messages/ja/cli/cli-bin-messages.d.ts +7 -0
  55. package/dist/core/messages/ja/cli/cli-bin-messages.d.ts.map +1 -1
  56. package/dist/core/messages/ja/cli/cli-bin-messages.js +7 -0
  57. package/dist/core/messages/ja/cli/cli-bin-messages.js.map +1 -1
  58. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.d.ts +1 -0
  59. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.d.ts.map +1 -1
  60. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.js +1 -0
  61. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.js.map +1 -1
  62. package/dist/core/messages/ja/cli/cli-command-guardian-messages.d.ts +1 -0
  63. package/dist/core/messages/ja/cli/cli-command-guardian-messages.d.ts.map +1 -1
  64. package/dist/core/messages/ja/cli/cli-command-guardian-messages.js +2 -1
  65. package/dist/core/messages/ja/cli/cli-command-guardian-messages.js.map +1 -1
  66. package/dist/core/messages/ja/cli/cli-command-marketplace-messages.d.ts +19 -0
  67. package/dist/core/messages/ja/cli/cli-command-marketplace-messages.d.ts.map +1 -1
  68. package/dist/core/messages/ja/cli/cli-command-marketplace-messages.js +19 -0
  69. package/dist/core/messages/ja/cli/cli-command-marketplace-messages.js.map +1 -1
  70. package/dist/core/messages/ja/cli/cli-command-prune-messages.d.ts +1 -0
  71. package/dist/core/messages/ja/cli/cli-command-prune-messages.d.ts.map +1 -1
  72. package/dist/core/messages/ja/cli/cli-command-prune-messages.js +1 -0
  73. package/dist/core/messages/ja/cli/cli-command-prune-messages.js.map +1 -1
  74. package/dist/core/messages/ja/cli/cli-command-reverter-messages.d.ts +6 -0
  75. package/dist/core/messages/ja/cli/cli-command-reverter-messages.d.ts.map +1 -1
  76. package/dist/core/messages/ja/cli/cli-command-reverter-messages.js +6 -0
  77. package/dist/core/messages/ja/cli/cli-command-reverter-messages.js.map +1 -1
  78. package/dist/core/messages/ja/guardian/guardian-messages.d.ts +3 -0
  79. package/dist/core/messages/ja/guardian/guardian-messages.d.ts.map +1 -1
  80. package/dist/core/messages/ja/guardian/guardian-messages.js +3 -0
  81. package/dist/core/messages/ja/guardian/guardian-messages.js.map +1 -1
  82. package/dist/core/messages/ja/guardian/watcher-hidden-messages.d.ts +1 -0
  83. package/dist/core/messages/ja/guardian/watcher-hidden-messages.d.ts.map +1 -1
  84. package/dist/core/messages/ja/guardian/watcher-hidden-messages.js +1 -0
  85. package/dist/core/messages/ja/guardian/watcher-hidden-messages.js.map +1 -1
  86. package/dist/core/messages/ja/licenses/licenses-messages.d.ts +1 -0
  87. package/dist/core/messages/ja/licenses/licenses-messages.d.ts.map +1 -1
  88. package/dist/core/messages/ja/licenses/licenses-messages.js +1 -0
  89. package/dist/core/messages/ja/licenses/licenses-messages.js.map +1 -1
  90. package/dist/core/messages/pt/cli/cli-bin-messages.d.ts +7 -0
  91. package/dist/core/messages/pt/cli/cli-bin-messages.d.ts.map +1 -1
  92. package/dist/core/messages/pt/cli/cli-bin-messages.js +7 -0
  93. package/dist/core/messages/pt/cli/cli-bin-messages.js.map +1 -1
  94. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.d.ts +1 -0
  95. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.d.ts.map +1 -1
  96. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.js +1 -0
  97. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.js.map +1 -1
  98. package/dist/core/messages/pt/cli/cli-command-guardian-messages.d.ts +1 -0
  99. package/dist/core/messages/pt/cli/cli-command-guardian-messages.d.ts.map +1 -1
  100. package/dist/core/messages/pt/cli/cli-command-guardian-messages.js +2 -1
  101. package/dist/core/messages/pt/cli/cli-command-guardian-messages.js.map +1 -1
  102. package/dist/core/messages/pt/cli/cli-command-marketplace-messages.d.ts +19 -0
  103. package/dist/core/messages/pt/cli/cli-command-marketplace-messages.d.ts.map +1 -1
  104. package/dist/core/messages/pt/cli/cli-command-marketplace-messages.js +19 -0
  105. package/dist/core/messages/pt/cli/cli-command-marketplace-messages.js.map +1 -1
  106. package/dist/core/messages/pt/cli/cli-command-prune-messages.d.ts +1 -0
  107. package/dist/core/messages/pt/cli/cli-command-prune-messages.d.ts.map +1 -1
  108. package/dist/core/messages/pt/cli/cli-command-prune-messages.js +1 -0
  109. package/dist/core/messages/pt/cli/cli-command-prune-messages.js.map +1 -1
  110. package/dist/core/messages/pt/cli/cli-command-reverter-messages.d.ts +6 -0
  111. package/dist/core/messages/pt/cli/cli-command-reverter-messages.d.ts.map +1 -1
  112. package/dist/core/messages/pt/cli/cli-command-reverter-messages.js +6 -0
  113. package/dist/core/messages/pt/cli/cli-command-reverter-messages.js.map +1 -1
  114. package/dist/core/messages/pt/guardian/guardian-messages.d.ts +3 -0
  115. package/dist/core/messages/pt/guardian/guardian-messages.d.ts.map +1 -1
  116. package/dist/core/messages/pt/guardian/guardian-messages.js +3 -0
  117. package/dist/core/messages/pt/guardian/guardian-messages.js.map +1 -1
  118. package/dist/core/messages/pt/guardian/watcher-hidden-messages.d.ts +1 -0
  119. package/dist/core/messages/pt/guardian/watcher-hidden-messages.d.ts.map +1 -1
  120. package/dist/core/messages/pt/guardian/watcher-hidden-messages.js +1 -0
  121. package/dist/core/messages/pt/guardian/watcher-hidden-messages.js.map +1 -1
  122. package/dist/core/messages/pt/licenses/licenses-messages.d.ts +1 -0
  123. package/dist/core/messages/pt/licenses/licenses-messages.d.ts.map +1 -1
  124. package/dist/core/messages/pt/licenses/licenses-messages.js +1 -0
  125. package/dist/core/messages/pt/licenses/licenses-messages.js.map +1 -1
  126. package/dist/core/messages/zh/cli/cli-bin-messages.d.ts +7 -0
  127. package/dist/core/messages/zh/cli/cli-bin-messages.d.ts.map +1 -1
  128. package/dist/core/messages/zh/cli/cli-bin-messages.js +7 -0
  129. package/dist/core/messages/zh/cli/cli-bin-messages.js.map +1 -1
  130. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.d.ts +1 -0
  131. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.d.ts.map +1 -1
  132. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.js +1 -0
  133. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.js.map +1 -1
  134. package/dist/core/messages/zh/cli/cli-command-guardian-messages.d.ts +2 -1
  135. package/dist/core/messages/zh/cli/cli-command-guardian-messages.d.ts.map +1 -1
  136. package/dist/core/messages/zh/cli/cli-command-guardian-messages.js +2 -1
  137. package/dist/core/messages/zh/cli/cli-command-guardian-messages.js.map +1 -1
  138. package/dist/core/messages/zh/cli/cli-command-marketplace-messages.d.ts +19 -0
  139. package/dist/core/messages/zh/cli/cli-command-marketplace-messages.d.ts.map +1 -1
  140. package/dist/core/messages/zh/cli/cli-command-marketplace-messages.js +19 -0
  141. package/dist/core/messages/zh/cli/cli-command-marketplace-messages.js.map +1 -1
  142. package/dist/core/messages/zh/cli/cli-command-prune-messages.d.ts +1 -0
  143. package/dist/core/messages/zh/cli/cli-command-prune-messages.d.ts.map +1 -1
  144. package/dist/core/messages/zh/cli/cli-command-prune-messages.js +1 -0
  145. package/dist/core/messages/zh/cli/cli-command-prune-messages.js.map +1 -1
  146. package/dist/core/messages/zh/cli/cli-command-reverter-messages.d.ts +6 -0
  147. package/dist/core/messages/zh/cli/cli-command-reverter-messages.d.ts.map +1 -1
  148. package/dist/core/messages/zh/cli/cli-command-reverter-messages.js +6 -0
  149. package/dist/core/messages/zh/cli/cli-command-reverter-messages.js.map +1 -1
  150. package/dist/core/messages/zh/guardian/guardian-messages.d.ts +3 -0
  151. package/dist/core/messages/zh/guardian/guardian-messages.d.ts.map +1 -1
  152. package/dist/core/messages/zh/guardian/guardian-messages.js +3 -0
  153. package/dist/core/messages/zh/guardian/guardian-messages.js.map +1 -1
  154. package/dist/core/messages/zh/guardian/watcher-hidden-messages.d.ts +1 -0
  155. package/dist/core/messages/zh/guardian/watcher-hidden-messages.d.ts.map +1 -1
  156. package/dist/core/messages/zh/guardian/watcher-hidden-messages.js +1 -0
  157. package/dist/core/messages/zh/guardian/watcher-hidden-messages.js.map +1 -1
  158. package/dist/core/messages/zh/licenses/licenses-messages.d.ts +1 -0
  159. package/dist/core/messages/zh/licenses/licenses-messages.d.ts.map +1 -1
  160. package/dist/core/messages/zh/licenses/licenses-messages.js +1 -0
  161. package/dist/core/messages/zh/licenses/licenses-messages.js.map +1 -1
  162. package/dist/guardian/records.d.ts.map +1 -1
  163. package/dist/guardian/records.js +3 -3
  164. package/dist/guardian/records.js.map +1 -1
  165. package/dist/guardian/sentinel.js +2 -2
  166. package/dist/guardian/sentinel.js.map +1 -1
  167. package/dist/guardian/watcher-hidden.js +1 -1
  168. package/dist/guardian/watcher-hidden.js.map +1 -1
  169. package/package.json +1 -2
@@ -1 +1 @@
1
- {"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/guardian/records.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAI9D,MAAM,EAAE,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;AAE9B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAMvE,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAwB,EACxB,UAAkB,cAAc;IAEhC,MAAM,SAAS,GAA0B,EAAE,CAAC;IAE5C,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,SAAS;QACzE,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC1D,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACvC,GAAG,CAAC,OAAO,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAC;AAClE,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,cAAc;IAEhC,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAwB,OAAO,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\nimport path from 'node:path';\n\nimport { config } from '@core/config';\nimport { getMessages } from '@core/messages';\nimport { gerarSnapshotDoConteudo } from '@guardian';\nimport { ensureDir } from '@shared/helpers';\nimport { lerEstado, salvarEstado } from '@shared/persistence';\n\nimport type { FileEntry, RegistroIntegridade } from '@';\n\nconst { log } = getMessages();\n\nconst DESTINO_PADRAO = path.join(config.STATE_DIR, 'integridade.json');\n\n/**\n * Salva as assinaturas GPG dos arquivos fornecidos em um arquivo de integridade.\n */\n\nexport async function salvarRegistros(\n fileEntries: FileEntry[],\n destino: string = DESTINO_PADRAO,\n): Promise<void> {\n const registros: RegistroIntegridade[] = [];\n\n for (const { relPath, content } of fileEntries) {\n if (!relPath || typeof content !== 'string' || !content.trim()) continue;\n const assinatura = await gerarSnapshotDoConteudo(content);\n registros.push({ arquivo: relPath, assinatura });\n }\n\n await ensureDir(destino);\n await salvarEstado(destino, registros);\n log.sucesso(`??? Registro de integridade salvo em: ${destino}`);\n}\n\n/**\n * Carrega os registros de integridade persistidos. Retorna lista vazia se não existir.\n */\n\nexport async function carregarRegistros(\n caminho: string = DESTINO_PADRAO,\n): Promise<RegistroIntegridade[]> {\n try {\n return await lerEstado<RegistroIntegridade[]>(caminho);\n } catch {\n log.aviso(`?? Nenhum registro encontrado em ${caminho}`);\n return [];\n }\n}\n"]}
1
+ {"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/guardian/records.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAI9D,MAAM,EACJ,GAAG,EACH,iBAAiB,EAClB,GAAG,WAAW,EAAE,CAAC;AAElB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAMvE,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAwB,EACxB,UAAkB,cAAc;IAEhC,MAAM,SAAS,GAA0B,EAAE,CAAC;IAE5C,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,SAAS;QACzE,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC1D,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACvC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;AACnE,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,cAAc;IAEhC,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAwB,OAAO,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/D,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\nimport path from 'node:path';\n\nimport { config } from '@core/config';\nimport { getMessages } from '@core/messages';\nimport { gerarSnapshotDoConteudo } from '@guardian';\nimport { ensureDir } from '@shared/helpers';\nimport { lerEstado, salvarEstado } from '@shared/persistence';\n\nimport type { FileEntry, RegistroIntegridade } from '@';\n\nconst {\n log,\n GuardianMensagens\n} = getMessages();\n\nconst DESTINO_PADRAO = path.join(config.STATE_DIR, 'integridade.json');\n\n/**\n * Salva as assinaturas GPG dos arquivos fornecidos em um arquivo de integridade.\n */\n\nexport async function salvarRegistros(\n fileEntries: FileEntry[],\n destino: string = DESTINO_PADRAO,\n): Promise<void> {\n const registros: RegistroIntegridade[] = [];\n\n for (const { relPath, content } of fileEntries) {\n if (!relPath || typeof content !== 'string' || !content.trim()) continue;\n const assinatura = await gerarSnapshotDoConteudo(content);\n registros.push({ arquivo: relPath, assinatura });\n }\n\n await ensureDir(destino);\n await salvarEstado(destino, registros);\n log.sucesso(GuardianMensagens.registroIntegridadeSalvo(destino));\n}\n\n/**\n * Carrega os registros de integridade persistidos. Retorna lista vazia se não existir.\n */\n\nexport async function carregarRegistros(\n caminho: string = DESTINO_PADRAO,\n): Promise<RegistroIntegridade[]> {\n try {\n return await lerEstado<RegistroIntegridade[]>(caminho);\n } catch {\n log.aviso(GuardianMensagens.nenhumRegistroEncontrado(caminho));\n return [];\n }\n}\n"]}
@@ -17,7 +17,7 @@ async function construirSnapshot(fileEntries) {
17
17
  snapshot[relPath] = await gerarSnapshotDoConteudo(content);
18
18
  }
19
19
  catch (err) {
20
- log.aviso(`\u001Fx Falha ao gerar assinatura GPG de ${relPath}: ${getErrMsg(err)}`);
20
+ log.aviso(GuardianMensagens.falhaGerarAssinaturaGpg(relPath, getErrMsg(err)));
21
21
  }
22
22
  }
23
23
  return snapshot;
@@ -50,7 +50,7 @@ export async function scanSystemIntegrity(fileEntries, options) {
50
50
  snapshotAtual[relPath] = await gerar(content);
51
51
  }
52
52
  catch (err) {
53
- log.aviso(`\u001Fx Falha ao gerar assinatura GPG de ${relPath}: ${getErrMsg(err)}`);
53
+ log.aviso(GuardianMensagens.falhaGerarAssinaturaGpg(relPath, getErrMsg(err)));
54
54
  }
55
55
  }
56
56
  if (!baselineAnterior) {
@@ -1 +1 @@
1
- {"version":3,"file":"sentinel.js","sourceRoot":"","sources":["../../src/guardian/sentinel.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n// @tutanus-disable tipo-inseguro-unknown\n// Justificativa: getErrMsg recebe unknown de catch blocks intencionalmente.\n\nimport { config } from '@core/config';\nimport { getMessages } from '@core/messages';\nimport { carregarBaseline, diffSnapshots, gerarSnapshotDoConteudo, LINHA_BASE_CAMINHO, salvarBaseline, verificarErros } from '@guardian';\nimport { ensureDir, normalizePath } from '@shared/helpers';\nimport micromatch from 'micromatch';\n\nimport type { FileEntry } from '@';\nimport { GuardianError, IntegridadeStatus } from '@';\n\nconst {\n log,\n GuardianMensagens\n} = getMessages();\n\nfunction getErrMsg(err: unknown): string {\n return typeof err === 'object' && err && 'message' in err ? (err as { message: string }).message : String(err);\n}\n\ntype Snapshot = Record<string, string>;\nasync function construirSnapshot(fileEntries: FileEntry[]): Promise<Snapshot> {\n const snapshot: Snapshot = {};\n for (const {\n relPath,\n content\n } of fileEntries) {\n if (typeof content !== 'string' || !content.trim()) continue;\n try {\n snapshot[relPath] = await gerarSnapshotDoConteudo(content);\n } catch (err) {\n log.aviso(`\\u001Fx Falha ao gerar assinatura GPG de ${relPath}: ${getErrMsg(err)}`);\n }\n }\n return snapshot;\n}\nexport async function scanSystemIntegrity(fileEntries: FileEntry[], options?: {\n justDiff?: boolean;\n suppressLogs?: boolean;\n}): Promise<{\n status: IntegridadeStatus;\n timestamp: string;\n detalhes?: string[];\n baselineModificado?: boolean;\n}> {\n const agora = new Date().toISOString();\n await ensureDir(LINHA_BASE_CAMINHO);\n let baselineAnterior: Snapshot | null = null;\n try {\n baselineAnterior = await carregarBaseline();\n } catch (err) {\n log.aviso(GuardianMensagens.baselineInvalido(getErrMsg(err)));\n }\n\n // Filtra entradas conforme padrões ignorados específicos do Guardian\n const ignorados = config.INCLUDE_EXCLUDE_RULES && config.INCLUDE_EXCLUDE_RULES.globalExcludeGlob || [];\n const filtrados = fileEntries.filter(arquivo => {\n const rel = normalizePath(arquivo.relPath);\n return !micromatch.isMatch(rel, ignorados);\n });\n if (config.DEV_MODE) {\n const removidos = fileEntries.length - filtrados.length;\n log.info(GuardianMensagens.filtroAplicado(filtrados.length, removidos));\n }\n // Usa import dinâmico para alinhar com mocks de teste (vi.mock/vi.doMock)\n const {\n gerarSnapshotDoConteudo: gerar\n } = await import('./hash.js');\n const snapshotAtual: Snapshot = {};\n for (const {\n relPath,\n content\n } of filtrados) {\n if (typeof content !== 'string' || !content.trim()) continue;\n try {\n snapshotAtual[relPath] = await gerar(content);\n } catch (err) {\n log.aviso(`\\u001Fx Falha ao gerar assinatura GPG de ${relPath}: ${getErrMsg(err)}`);\n }\n }\n if (!baselineAnterior) {\n if (options?.justDiff) {\n // Em modo justDiff, ausência de baseline implica sem alterações reportáveis\n return {\n status: IntegridadeStatus.Ok,\n timestamp: agora,\n detalhes: []\n };\n }\n if (!options?.suppressLogs) {\n log.info(GuardianMensagens.baselineInicialCriado);\n }\n await salvarBaseline(snapshotAtual);\n return {\n status: IntegridadeStatus.Criado,\n timestamp: agora\n };\n }\n if (process.argv.includes('--aceitar')) {\n if (!options?.suppressLogs) {\n log.info(GuardianMensagens.baselineAceitoManualmente);\n }\n await salvarBaseline(snapshotAtual);\n return {\n status: IntegridadeStatus.Aceito,\n timestamp: agora\n };\n }\n const diffs = diffSnapshots(baselineAnterior, snapshotAtual);\n const erros = verificarErros(diffs);\n if (options?.justDiff) {\n return {\n status: erros.length ? IntegridadeStatus.AlteracoesDetectadas : IntegridadeStatus.Ok,\n timestamp: agora,\n detalhes: erros\n };\n }\n if (erros.length) {\n throw new GuardianError(erros.map(erro => ({\n tipo: 'integridade' as const,\n mensagem: erro\n })));\n }\n return {\n status: IntegridadeStatus.Ok,\n timestamp: agora\n };\n}\nexport async function acceptNewBaseline(fileEntries: FileEntry[]): Promise<void> {\n const ignorados: string[] = [];\n // Preferir configuração dinâmica quando disponível\n const ignoradosDyn = config.INCLUDE_EXCLUDE_RULES && config.INCLUDE_EXCLUDE_RULES.globalExcludeGlob || ignorados;\n const filtrados = fileEntries.filter(arquivo => {\n const rel = normalizePath(arquivo.relPath);\n return !micromatch.isMatch(rel, ignoradosDyn);\n });\n const snapshotAtual = await construirSnapshot(filtrados);\n await ensureDir(LINHA_BASE_CAMINHO);\n await salvarBaseline(snapshotAtual);\n}"]}
1
+ {"version":3,"file":"sentinel.js","sourceRoot":"","sources":["../../src/guardian/sentinel.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n// @tutanus-disable tipo-inseguro-unknown\n// Justificativa: getErrMsg recebe unknown de catch blocks intencionalmente.\n\nimport { config } from '@core/config';\nimport { getMessages } from '@core/messages';\nimport { carregarBaseline, diffSnapshots, gerarSnapshotDoConteudo, LINHA_BASE_CAMINHO, salvarBaseline, verificarErros } from '@guardian';\nimport { ensureDir, normalizePath } from '@shared/helpers';\nimport micromatch from 'micromatch';\n\nimport type { FileEntry } from '@';\nimport { GuardianError, IntegridadeStatus } from '@';\n\nconst {\n log,\n GuardianMensagens\n} = getMessages();\n\nfunction getErrMsg(err: unknown): string {\n return typeof err === 'object' && err && 'message' in err ? (err as { message: string }).message : String(err);\n}\n\ntype Snapshot = Record<string, string>;\nasync function construirSnapshot(fileEntries: FileEntry[]): Promise<Snapshot> {\n const snapshot: Snapshot = {};\n for (const {\n relPath,\n content\n } of fileEntries) {\n if (typeof content !== 'string' || !content.trim()) continue;\n try {\n snapshot[relPath] = await gerarSnapshotDoConteudo(content);\n } catch (err) {\n log.aviso(GuardianMensagens.falhaGerarAssinaturaGpg(relPath, getErrMsg(err)));\n }\n }\n return snapshot;\n}\nexport async function scanSystemIntegrity(fileEntries: FileEntry[], options?: {\n justDiff?: boolean;\n suppressLogs?: boolean;\n}): Promise<{\n status: IntegridadeStatus;\n timestamp: string;\n detalhes?: string[];\n baselineModificado?: boolean;\n}> {\n const agora = new Date().toISOString();\n await ensureDir(LINHA_BASE_CAMINHO);\n let baselineAnterior: Snapshot | null = null;\n try {\n baselineAnterior = await carregarBaseline();\n } catch (err) {\n log.aviso(GuardianMensagens.baselineInvalido(getErrMsg(err)));\n }\n\n // Filtra entradas conforme padrões ignorados específicos do Guardian\n const ignorados = config.INCLUDE_EXCLUDE_RULES && config.INCLUDE_EXCLUDE_RULES.globalExcludeGlob || [];\n const filtrados = fileEntries.filter(arquivo => {\n const rel = normalizePath(arquivo.relPath);\n return !micromatch.isMatch(rel, ignorados);\n });\n if (config.DEV_MODE) {\n const removidos = fileEntries.length - filtrados.length;\n log.info(GuardianMensagens.filtroAplicado(filtrados.length, removidos));\n }\n // Usa import dinâmico para alinhar com mocks de teste (vi.mock/vi.doMock)\n const {\n gerarSnapshotDoConteudo: gerar\n } = await import('./hash.js');\n const snapshotAtual: Snapshot = {};\n for (const {\n relPath,\n content\n } of filtrados) {\n if (typeof content !== 'string' || !content.trim()) continue;\n try {\n snapshotAtual[relPath] = await gerar(content);\n } catch (err) {\n log.aviso(GuardianMensagens.falhaGerarAssinaturaGpg(relPath, getErrMsg(err)));\n }\n }\n if (!baselineAnterior) {\n if (options?.justDiff) {\n // Em modo justDiff, ausência de baseline implica sem alterações reportáveis\n return {\n status: IntegridadeStatus.Ok,\n timestamp: agora,\n detalhes: []\n };\n }\n if (!options?.suppressLogs) {\n log.info(GuardianMensagens.baselineInicialCriado);\n }\n await salvarBaseline(snapshotAtual);\n return {\n status: IntegridadeStatus.Criado,\n timestamp: agora\n };\n }\n if (process.argv.includes('--aceitar')) {\n if (!options?.suppressLogs) {\n log.info(GuardianMensagens.baselineAceitoManualmente);\n }\n await salvarBaseline(snapshotAtual);\n return {\n status: IntegridadeStatus.Aceito,\n timestamp: agora\n };\n }\n const diffs = diffSnapshots(baselineAnterior, snapshotAtual);\n const erros = verificarErros(diffs);\n if (options?.justDiff) {\n return {\n status: erros.length ? IntegridadeStatus.AlteracoesDetectadas : IntegridadeStatus.Ok,\n timestamp: agora,\n detalhes: erros\n };\n }\n if (erros.length) {\n throw new GuardianError(erros.map(erro => ({\n tipo: 'integridade' as const,\n mensagem: erro\n })));\n }\n return {\n status: IntegridadeStatus.Ok,\n timestamp: agora\n };\n}\nexport async function acceptNewBaseline(fileEntries: FileEntry[]): Promise<void> {\n const ignorados: string[] = [];\n // Preferir configuração dinâmica quando disponível\n const ignoradosDyn = config.INCLUDE_EXCLUDE_RULES && config.INCLUDE_EXCLUDE_RULES.globalExcludeGlob || ignorados;\n const filtrados = fileEntries.filter(arquivo => {\n const rel = normalizePath(arquivo.relPath);\n return !micromatch.isMatch(rel, ignoradosDyn);\n });\n const snapshotAtual = await construirSnapshot(filtrados);\n await ensureDir(LINHA_BASE_CAMINHO);\n await salvarBaseline(snapshotAtual);\n}"]}
@@ -20,7 +20,7 @@ export async function vigiaOculta(arquivos, caminhoRegistro = REGISTRO_VIGIA_CAM
20
20
  if (corrompidos.length > 0) {
21
21
  log.aviso(VigiaOcultaMensagens.alteracoesDetectadas.replace('{total}', String(corrompidos.length)));
22
22
  for (const arq of corrompidos) {
23
- log.info(` - ${arq}`);
23
+ log.info(VigiaOcultaMensagens.itemArquivoCorrompido.replace('{arquivo}', arq));
24
24
  }
25
25
  if (autoReset) {
26
26
  await salvarRegistros(arquivos, caminhoRegistro);
@@ -1 +1 @@
1
- {"version":3,"file":"watcher-hidden.js","sourceRoot":"","sources":["../../src/guardian/watcher-hidden.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAItI,MAAM,EACJ,GAAG,EACH,oBAAoB,EACrB,GAAG,WAAW,EAAE,CAAC;AAClB,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAqB,EAAE,kBAA0B,6BAA6B,EAAE,SAAS,GAAG,IAAI;IAChI,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAiB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,MAAM,iBAAiB,EAAE,CAAC;IAE1B,KAAK,MAAM,EACT,OAAO,EACP,OAAO,EACR,IAAI,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,SAAS;QACzE,MAAM,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACpG,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;YACjD,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { getMessages } from '@core/messages';\nimport { carregarRegistros, inicializarChaves, REGISTRO_VIGIA_CAMINHO_PADRAO, salvarRegistros, verificarAssinatura } from '@guardian';\n\nimport type { FileEntry } from '@';\n\nconst {\n log,\n VigiaOcultaMensagens\n} = getMessages();\nexport async function vigiaOculta(arquivos: FileEntry[], caminhoRegistro: string = REGISTRO_VIGIA_CAMINHO_PADRAO, autoReset = true): Promise<void> {\n const registros = await carregarRegistros(caminhoRegistro);\n const mapaAnterior = new Map<string, string>(registros.map(raiz => [raiz.arquivo, raiz.assinatura]));\n const corrompidos: string[] = [];\n\n await inicializarChaves();\n\n for (const {\n relPath,\n content\n } of arquivos) {\n if (!relPath || typeof content !== 'string' || !content.trim()) continue;\n const assinaturaEsperada = mapaAnterior.get(relPath);\n if (assinaturaEsperada) {\n const valido = await verificarAssinatura(content, assinaturaEsperada);\n if (!valido) {\n corrompidos.push(relPath);\n }\n }\n }\n if (corrompidos.length > 0) {\n log.aviso(VigiaOcultaMensagens.alteracoesDetectadas.replace('{total}', String(corrompidos.length)));\n for (const arq of corrompidos) {\n log.info(` - ${arq}`);\n }\n if (autoReset) {\n await salvarRegistros(arquivos, caminhoRegistro);\n log.sucesso(VigiaOcultaMensagens.registrosRecalibrados);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"watcher-hidden.js","sourceRoot":"","sources":["../../src/guardian/watcher-hidden.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAItI,MAAM,EACJ,GAAG,EACH,oBAAoB,EACrB,GAAG,WAAW,EAAE,CAAC;AAClB,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAqB,EAAE,kBAA0B,6BAA6B,EAAE,SAAS,GAAG,IAAI;IAChI,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAiB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,MAAM,iBAAiB,EAAE,CAAC;IAE1B,KAAK,MAAM,EACT,OAAO,EACP,OAAO,EACR,IAAI,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,SAAS;QACzE,MAAM,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACpG,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;YACjD,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { getMessages } from '@core/messages';\nimport { carregarRegistros, inicializarChaves, REGISTRO_VIGIA_CAMINHO_PADRAO, salvarRegistros, verificarAssinatura } from '@guardian';\n\nimport type { FileEntry } from '@';\n\nconst {\n log,\n VigiaOcultaMensagens\n} = getMessages();\nexport async function vigiaOculta(arquivos: FileEntry[], caminhoRegistro: string = REGISTRO_VIGIA_CAMINHO_PADRAO, autoReset = true): Promise<void> {\n const registros = await carregarRegistros(caminhoRegistro);\n const mapaAnterior = new Map<string, string>(registros.map(raiz => [raiz.arquivo, raiz.assinatura]));\n const corrompidos: string[] = [];\n\n await inicializarChaves();\n\n for (const {\n relPath,\n content\n } of arquivos) {\n if (!relPath || typeof content !== 'string' || !content.trim()) continue;\n const assinaturaEsperada = mapaAnterior.get(relPath);\n if (assinaturaEsperada) {\n const valido = await verificarAssinatura(content, assinaturaEsperada);\n if (!valido) {\n corrompidos.push(relPath);\n }\n }\n }\n if (corrompidos.length > 0) {\n log.aviso(VigiaOcultaMensagens.alteracoesDetectadas.replace('{total}', String(corrompidos.length)));\n for (const arq of corrompidos) {\n log.info(VigiaOcultaMensagens.itemArquivoCorrompido.replace('{arquivo}', arq));\n }\n if (autoReset) {\n await salvarRegistros(arquivos, caminhoRegistro);\n log.sucesso(VigiaOcultaMensagens.registrosRecalibrados);\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tutanus",
3
- "version": "0.13.2",
3
+ "version": "0.13.4",
4
4
  "type": "module",
5
5
  "description": "C.L.I modular para análise, diagnóstico e manutenção de projetos JavaScript/TypeScript e multi-stack leve",
6
6
  "author": "Black Diaz",
@@ -135,7 +135,6 @@
135
135
  "postcss-sass": "0.5.0",
136
136
  "postcss-scss": "4.0.9",
137
137
  "react": "19.2.7",
138
- "tutanus": "^0.12.9",
139
138
  "xxhashjs": "0.2.2",
140
139
  "yaml": "2.9.0"
141
140
  },