@maestro-ai/mcp-server 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +266 -227
- package/dist/content/design-system/README.md +231 -231
- package/dist/content/design-system/indexes/README.md +211 -211
- package/dist/content/design-system/indexes/colors-index.md +156 -156
- package/dist/content/design-system/indexes/quick-search.md +111 -111
- package/dist/content/design-system/indexes/stacks-index.md +341 -341
- package/dist/content/examples/Exemplo de Fluxo Completo com Java e Spring Boot.md +249 -249
- package/dist/content/examples/Exemplo de Fluxo Completo com Laravel e Filament.md +277 -277
- package/dist/content/examples/Exemplo de Fluxo Completo com Laravel e Livewire.md +260 -260
- package/dist/content/examples/Exemplo de Fluxo Completo com Node e NestJS.md +257 -257
- package/dist/content/guides/Cat/303/241logo de Stacks para Cloud Moderna.md" +119 -119
- package/dist/content/guides/Cat/303/241logo de Stacks para Hospedagem Compartilhada.md" +147 -147
- package/dist/content/guides/Checklist Mestre de Entrega.md +68 -68
- package/dist/content/guides/Gates de Qualidade.md +209 -209
- package/dist/content/guides/Guia de Adi/303/247/303/243o de Novas Funcionalidades.md" +355 -355
- package/dist/content/guides/Guia de Chaos Engineering.md +267 -267
- package/dist/content/guides/Guia de Debugging com IA.md +135 -135
- package/dist/content/guides/Guia de Estrat/303/251gias de Cache.md" +352 -352
- package/dist/content/guides/Guia de Migrations Zero-Downtime.md +311 -311
- package/dist/content/guides/Guia de Multi-tenancy.md +368 -368
- package/dist/content/guides/Guia de Otimiza/303/247/303/243o de Custos Cloud.md" +195 -195
- package/dist/content/guides/Guia de Refatora/303/247/303/243o de C/303/263digo Legado com IA.md" +162 -162
- package/dist/content/guides/Guia de SLOs e Error Budgets.md +315 -315
- package/dist/content/guides/M/303/251tricas de Efici/303/252ncia do Desenvolvimento com IA.md" +93 -93
- package/dist/content/guides/Rules base.md +90 -90
- package/dist/content/playbook/Playbook de Desenvolvimento com IA.md +364 -364
- package/dist/content/prompts/README.md +203 -203
- package/dist/content/prompts/acessibilidade/analise-acessibilidade.md +257 -257
- package/dist/content/prompts/apis/design-api-rest.md +303 -303
- package/dist/content/prompts/apis/idempotencia.md +254 -254
- package/dist/content/prompts/apis/versionamento.md +313 -313
- package/dist/content/prompts/arquitetura/arquitetura-c4-completo.md +190 -190
- package/dist/content/prompts/arquitetura/clean-architecture.md +151 -151
- package/dist/content/prompts/arquitetura/ddd-bounded-contexts.md +183 -183
- package/dist/content/prompts/arquitetura/ddd-cqrs.md +176 -176
- package/dist/content/prompts/arquitetura/modelo-dominio.md +207 -207
- package/dist/content/prompts/arquitetura/multi-tenancy.md +235 -235
- package/dist/content/prompts/database/migrations-zero-downtime.md +192 -192
- package/dist/content/prompts/database/otimizacao-queries.md +296 -296
- package/dist/content/prompts/desenvolvimento/code-review.md +301 -301
- package/dist/content/prompts/desenvolvimento/gerar-servico.md +271 -271
- package/dist/content/prompts/devops/docker-compose.md +336 -336
- package/dist/content/prompts/devops/feature-flags.md +374 -374
- package/dist/content/prompts/devops/kubernetes-deploy.md +460 -460
- package/dist/content/prompts/devops/pipeline-cicd.md +358 -358
- package/dist/content/prompts/devops/terraform-iac.md +502 -502
- package/dist/content/prompts/escalabilidade/analise-performance.md +240 -240
- package/dist/content/prompts/escalabilidade/analise-performance.txt +94 -94
- package/dist/content/prompts/escalabilidade/caching.md +255 -255
- package/dist/content/prompts/observabilidade/chaos-testing.md +237 -237
- package/dist/content/prompts/observabilidade/estrategia-observabilidade.md +263 -263
- package/dist/content/prompts/observabilidade/estrategia-observabilidade.txt +134 -134
- package/dist/content/prompts/observabilidade/slos.md +215 -215
- package/dist/content/prompts/produto/discovery-inicial.md +203 -203
- package/dist/content/prompts/produto/discovery-inicial.txt +33 -33
- package/dist/content/prompts/requisitos/refinar-requisitos.md +232 -232
- package/dist/content/prompts/requisitos/refinar-requisitos.txt +40 -40
- package/dist/content/prompts/seguranca/analise-seguranca.md +243 -243
- package/dist/content/prompts/seguranca/pentest-checklist.md +333 -333
- package/dist/content/prompts/seguranca/rate-limiting.md +356 -356
- package/dist/content/prompts/seguranca/revisao-lgpd.md +227 -227
- package/dist/content/prompts/seguranca/threat-modeling.md +224 -224
- package/dist/content/prompts/testes/contract-testing.md +340 -340
- package/dist/content/prompts/testes/gerar-testes-unitarios.md +474 -474
- package/dist/content/prompts/testes/testes-e2e.md +460 -460
- package/dist/content/prompts/testes/testes-integracao.md +418 -418
- package/dist/content/prompts/testes/testes-performance.md +458 -458
- package/dist/content/prompts/ux/gerar-ui-stitch.md +151 -151
- package/dist/content/rules/RULES.md +835 -835
- package/dist/content/rules/adapters/copilot.md +10 -10
- package/dist/content/rules/adapters/cursor.md +10 -10
- package/dist/content/rules/adapters/gemini.md +13 -13
- package/dist/content/rules/adapters/windsurf.md +10 -10
- package/dist/content/specialists/Especialista em Acessibilidade.md +266 -266
- package/dist/content/specialists/Especialista em An/303/241lise de Testes.md" +434 -434
- package/dist/content/specialists/Especialista em Arquitetura Avan/303/247ada.md" +358 -358
- package/dist/content/specialists/Especialista em Arquitetura de Software.md +177 -177
- package/dist/content/specialists/Especialista em Banco de Dados.md +260 -260
- package/dist/content/specialists/Especialista em Contrato de API.md +172 -172
- package/dist/content/specialists/Especialista em Dados e Analytics com IA.md +246 -246
- package/dist/content/specialists/Especialista em Debugging e Troubleshooting.md +191 -191
- package/dist/content/specialists/Especialista em Desenvolvimento Frontend.md +477 -477
- package/dist/content/specialists/Especialista em Desenvolvimento Mobile.md +241 -241
- package/dist/content/specialists/Especialista em Desenvolvimento e Vibe Coding Estruturado.md +417 -417
- package/dist/content/specialists/Especialista em DevOps e Infraestrutura.md +294 -294
- package/dist/content/specialists/Especialista em Documenta/303/247/303/243o T/303/251cnica.md" +227 -227
- package/dist/content/specialists/Especialista em Engenharia de Requisitos com IA.md +299 -299
- package/dist/content/specialists/Especialista em Explora/303/247/303/243o de Codebase.md" +179 -179
- package/dist/content/specialists/Especialista em Gest/303/243o de Produto.md" +179 -179
- package/dist/content/specialists/Especialista em Migra/303/247/303/243o e Moderniza/303/247/303/243o.md" +410 -410
- package/dist/content/specialists/Especialista em Modelagem e Arquitetura de Dom/303/255nio com IA.md" +248 -248
- package/dist/content/specialists/Especialista em Observabilidade.md +415 -415
- package/dist/content/specialists/Especialista em Performance e Escalabilidade.md +373 -373
- package/dist/content/specialists/Especialista em Plano de Execu/303/247/303/243o com IA.md" +341 -341
- package/dist/content/specialists/Especialista em Prototipagem R/303/241pida com Google Stitch.md" +419 -419
- package/dist/content/specialists/Especialista em Seguran/303/247a da Informa/303/247/303/243o.md" +508 -508
- package/dist/content/specialists/Especialista em UX Design.md +453 -453
- package/dist/content/specialists/INDEX.md +43 -43
- package/dist/content/templates/PRD.md +165 -165
- package/dist/content/templates/README.md +65 -65
- package/dist/content/templates/adr.md +103 -103
- package/dist/content/templates/arquitetura.md +279 -279
- package/dist/content/templates/backlog.md +185 -185
- package/dist/content/templates/checklist-seguranca.md +180 -180
- package/dist/content/templates/contexto.md +120 -120
- package/dist/content/templates/criterios-aceite.md +99 -99
- package/dist/content/templates/design-banco.md +270 -270
- package/dist/content/templates/design-doc.md +240 -240
- package/dist/content/templates/feature.md +88 -88
- package/dist/content/templates/historia-backend.md +84 -84
- package/dist/content/templates/historia-frontend.md +75 -75
- package/dist/content/templates/historia-usuario.md +125 -125
- package/dist/content/templates/mapa-navegacao.md +133 -133
- package/dist/content/templates/matriz-rastreabilidade.md +121 -121
- package/dist/content/templates/modelo-dominio.md +219 -219
- package/dist/content/templates/plano-testes.md +199 -199
- package/dist/content/templates/prototipo-stitch.md +138 -138
- package/dist/content/templates/requisitos.md +162 -162
- package/dist/content/templates/slo-sli.md +197 -197
- package/dist/content/workflows/README-MCP.md +363 -363
- package/dist/content/workflows/mcp-debug.md +506 -506
- package/dist/content/workflows/mcp-feature.md +385 -385
- package/dist/content/workflows/mcp-gate.md +413 -413
- package/dist/content/workflows/mcp-next.md +388 -388
- package/dist/content/workflows/mcp-refactor.md +600 -600
- package/dist/content/workflows/mcp-start.md +304 -304
- package/dist/content/workflows/mcp-status.md +400 -400
- package/dist/gates/tiers.test.js +14 -14
- package/dist/index.js +133 -133
- package/dist/resources/index.js +61 -61
- package/dist/stdio.js +39 -32
- package/dist/stdio.js.map +1 -1
- package/dist/tools/analise/performance.js +23 -23
- package/dist/tools/analise/qualidade.js +23 -23
- package/dist/tools/analise/relatorio.js +24 -24
- package/dist/tools/analise/seguranca.js +28 -28
- package/dist/tools/aprovar-gate.js +81 -81
- package/dist/tools/atualizar-codebase.js +18 -18
- package/dist/tools/avaliar-entregavel.js +18 -18
- package/dist/tools/carregar-projeto.d.ts.map +1 -1
- package/dist/tools/carregar-projeto.js +91 -116
- package/dist/tools/carregar-projeto.js.map +1 -1
- package/dist/tools/classificar.js +36 -36
- package/dist/tools/confirmar-classificacao.js +36 -36
- package/dist/tools/confirmar-stitch.js +75 -75
- package/dist/tools/contexto.js +56 -56
- package/dist/tools/fluxos-alternativos.js +98 -98
- package/dist/tools/implementar-historia.js +63 -63
- package/dist/tools/iniciar-projeto.d.ts.map +1 -1
- package/dist/tools/iniciar-projeto.js +139 -224
- package/dist/tools/iniciar-projeto.js.map +1 -1
- package/dist/tools/proximo.d.ts.map +1 -1
- package/dist/tools/proximo.js +224 -252
- package/dist/tools/proximo.js.map +1 -1
- package/dist/tools/salvar.js +59 -59
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +64 -93
- package/dist/tools/status.js.map +1 -1
- package/dist/tools/validar-gate.js +35 -35
- package/dist/types/response.js +11 -11
- package/dist/utils/instructions.js +48 -48
- package/dist/utils/prompt-mapper.js +16 -16
- package/dist/utils/system-md.js +33 -33
- package/package.json +67 -67
- package/dist/content/content/design-system/README.md +0 -231
- package/dist/content/content/design-system/data/charts.csv +0 -26
- package/dist/content/content/design-system/data/colors.csv +0 -97
- package/dist/content/content/design-system/data/icons.csv +0 -101
- package/dist/content/content/design-system/data/landing.csv +0 -31
- package/dist/content/content/design-system/data/products.csv +0 -97
- package/dist/content/content/design-system/data/prompts.csv +0 -24
- package/dist/content/content/design-system/data/react-performance.csv +0 -45
- package/dist/content/content/design-system/data/styles.csv +0 -59
- package/dist/content/content/design-system/data/typography.csv +0 -58
- package/dist/content/content/design-system/data/ui-reasoning.csv +0 -101
- package/dist/content/content/design-system/data/ux-guidelines.csv +0 -100
- package/dist/content/content/design-system/data/web-interface.csv +0 -31
- package/dist/content/content/design-system/indexes/README.md +0 -211
- package/dist/content/content/design-system/indexes/colors-index.md +0 -156
- package/dist/content/content/design-system/indexes/quick-search.md +0 -111
- package/dist/content/content/design-system/indexes/stacks-index.md +0 -341
- package/dist/content/content/design-system/stacks/flutter.csv +0 -53
- package/dist/content/content/design-system/stacks/html-tailwind.csv +0 -56
- package/dist/content/content/design-system/stacks/jetpack-compose.csv +0 -53
- package/dist/content/content/design-system/stacks/nextjs.csv +0 -53
- package/dist/content/content/design-system/stacks/nuxt-ui.csv +0 -51
- package/dist/content/content/design-system/stacks/nuxtjs.csv +0 -59
- package/dist/content/content/design-system/stacks/react-native.csv +0 -52
- package/dist/content/content/design-system/stacks/react.csv +0 -54
- package/dist/content/content/design-system/stacks/shadcn.csv +0 -61
- package/dist/content/content/design-system/stacks/svelte.csv +0 -54
- package/dist/content/content/design-system/stacks/swiftui.csv +0 -51
- package/dist/content/content/design-system/stacks/vue.csv +0 -50
- package/dist/content/content/examples/Exemplo de Fluxo Completo com Java e Spring Boot.md +0 -250
- package/dist/content/content/examples/Exemplo de Fluxo Completo com Laravel e Filament.md +0 -278
- package/dist/content/content/examples/Exemplo de Fluxo Completo com Laravel e Livewire.md +0 -261
- package/dist/content/content/examples/Exemplo de Fluxo Completo com Node e NestJS.md +0 -258
- package/dist/content/content/guides/Cat/303/241logo de Stacks para Cloud Moderna.md" +0 -119
- package/dist/content/content/guides/Cat/303/241logo de Stacks para Hospedagem Compartilhada.md" +0 -147
- package/dist/content/content/guides/Checklist Mestre de Entrega.md +0 -68
- package/dist/content/content/guides/Gates de Qualidade.md +0 -209
- package/dist/content/content/guides/Guia de Adi/303/247/303/243o de Novas Funcionalidades.md" +0 -355
- package/dist/content/content/guides/Guia de Chaos Engineering.md +0 -267
- package/dist/content/content/guides/Guia de Debugging com IA.md +0 -135
- package/dist/content/content/guides/Guia de Estrat/303/251gias de Cache.md" +0 -352
- package/dist/content/content/guides/Guia de Migrations Zero-Downtime.md +0 -311
- package/dist/content/content/guides/Guia de Multi-tenancy.md +0 -368
- package/dist/content/content/guides/Guia de Otimiza/303/247/303/243o de Custos Cloud.md" +0 -195
- package/dist/content/content/guides/Guia de Refatora/303/247/303/243o de C/303/263digo Legado com IA.md" +0 -162
- package/dist/content/content/guides/Guia de SLOs e Error Budgets.md +0 -315
- package/dist/content/content/guides/M/303/251tricas de Efici/303/252ncia do Desenvolvimento com IA.md" +0 -93
- package/dist/content/content/guides/Rules base.md +0 -90
- package/dist/content/content/playbook/Playbook de Desenvolvimento com IA.md +0 -364
- package/dist/content/content/prompts/README.md +0 -203
- package/dist/content/content/prompts/acessibilidade/analise-acessibilidade.md +0 -257
- package/dist/content/content/prompts/apis/design-api-rest.md +0 -303
- package/dist/content/content/prompts/apis/idempotencia.md +0 -254
- package/dist/content/content/prompts/apis/versionamento.md +0 -313
- package/dist/content/content/prompts/arquitetura/arquitetura-c4-completo.md +0 -190
- package/dist/content/content/prompts/arquitetura/clean-architecture.md +0 -151
- package/dist/content/content/prompts/arquitetura/ddd-bounded-contexts.md +0 -183
- package/dist/content/content/prompts/arquitetura/ddd-cqrs.md +0 -176
- package/dist/content/content/prompts/arquitetura/modelo-dominio.md +0 -207
- package/dist/content/content/prompts/arquitetura/multi-tenancy.md +0 -235
- package/dist/content/content/prompts/database/migrations-zero-downtime.md +0 -192
- package/dist/content/content/prompts/database/otimizacao-queries.md +0 -296
- package/dist/content/content/prompts/desenvolvimento/code-review.md +0 -301
- package/dist/content/content/prompts/desenvolvimento/gerar-servico.md +0 -271
- package/dist/content/content/prompts/devops/docker-compose.md +0 -336
- package/dist/content/content/prompts/devops/feature-flags.md +0 -374
- package/dist/content/content/prompts/devops/kubernetes-deploy.md +0 -460
- package/dist/content/content/prompts/devops/pipeline-cicd.md +0 -358
- package/dist/content/content/prompts/devops/terraform-iac.md +0 -502
- package/dist/content/content/prompts/escalabilidade/analise-performance.md +0 -240
- package/dist/content/content/prompts/escalabilidade/analise-performance.txt +0 -94
- package/dist/content/content/prompts/escalabilidade/caching.md +0 -255
- package/dist/content/content/prompts/observabilidade/chaos-testing.md +0 -237
- package/dist/content/content/prompts/observabilidade/estrategia-observabilidade.md +0 -263
- package/dist/content/content/prompts/observabilidade/estrategia-observabilidade.txt +0 -134
- package/dist/content/content/prompts/observabilidade/slos.md +0 -215
- package/dist/content/content/prompts/produto/discovery-inicial.md +0 -203
- package/dist/content/content/prompts/produto/discovery-inicial.txt +0 -33
- package/dist/content/content/prompts/requisitos/refinar-requisitos.md +0 -232
- package/dist/content/content/prompts/requisitos/refinar-requisitos.txt +0 -40
- package/dist/content/content/prompts/seguranca/analise-seguranca.md +0 -243
- package/dist/content/content/prompts/seguranca/pentest-checklist.md +0 -333
- package/dist/content/content/prompts/seguranca/rate-limiting.md +0 -356
- package/dist/content/content/prompts/seguranca/revisao-lgpd.md +0 -227
- package/dist/content/content/prompts/seguranca/threat-modeling.md +0 -224
- package/dist/content/content/prompts/testes/contract-testing.md +0 -340
- package/dist/content/content/prompts/testes/gerar-testes-unitarios.md +0 -474
- package/dist/content/content/prompts/testes/testes-e2e.md +0 -460
- package/dist/content/content/prompts/testes/testes-integracao.md +0 -418
- package/dist/content/content/prompts/testes/testes-performance.md +0 -458
- package/dist/content/content/prompts/ux/gerar-ui-stitch.md +0 -151
- package/dist/content/content/rules/GEMINI.md +0 -841
- package/dist/content/content/rules/RULES.md +0 -835
- package/dist/content/content/rules/adapters/copilot.md +0 -10
- package/dist/content/content/rules/adapters/cursor.md +0 -10
- package/dist/content/content/rules/adapters/gemini.md +0 -13
- package/dist/content/content/rules/adapters/windsurf.md +0 -10
- package/dist/content/content/skills/api-patterns/SKILL.md +0 -81
- package/dist/content/content/skills/api-patterns/api-style.md +0 -42
- package/dist/content/content/skills/api-patterns/auth.md +0 -24
- package/dist/content/content/skills/api-patterns/documentation.md +0 -26
- package/dist/content/content/skills/api-patterns/graphql.md +0 -41
- package/dist/content/content/skills/api-patterns/rate-limiting.md +0 -31
- package/dist/content/content/skills/api-patterns/response.md +0 -37
- package/dist/content/content/skills/api-patterns/rest.md +0 -40
- package/dist/content/content/skills/api-patterns/scripts/api_validator.py +0 -211
- package/dist/content/content/skills/api-patterns/security-testing.md +0 -122
- package/dist/content/content/skills/api-patterns/trpc.md +0 -41
- package/dist/content/content/skills/api-patterns/versioning.md +0 -22
- package/dist/content/content/skills/app-builder/SKILL.md +0 -75
- package/dist/content/content/skills/app-builder/agent-coordination.md +0 -71
- package/dist/content/content/skills/app-builder/feature-building.md +0 -53
- package/dist/content/content/skills/app-builder/project-detection.md +0 -34
- package/dist/content/content/skills/app-builder/scaffolding.md +0 -118
- package/dist/content/content/skills/app-builder/tech-stack.md +0 -40
- package/dist/content/content/skills/app-builder/templates/SKILL.md +0 -39
- package/dist/content/content/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
- package/dist/content/content/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
- package/dist/content/content/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
- package/dist/content/content/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
- package/dist/content/content/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
- package/dist/content/content/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
- package/dist/content/content/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
- package/dist/content/content/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -82
- package/dist/content/content/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -100
- package/dist/content/content/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -106
- package/dist/content/content/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -101
- package/dist/content/content/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
- package/dist/content/content/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -93
- package/dist/content/content/skills/architecture/SKILL.md +0 -55
- package/dist/content/content/skills/architecture/context-discovery.md +0 -43
- package/dist/content/content/skills/architecture/examples.md +0 -94
- package/dist/content/content/skills/architecture/pattern-selection.md +0 -68
- package/dist/content/content/skills/architecture/patterns-reference.md +0 -50
- package/dist/content/content/skills/architecture/trade-off-analysis.md +0 -77
- package/dist/content/content/skills/bash-linux/SKILL.md +0 -199
- package/dist/content/content/skills/behavioral-modes/SKILL.md +0 -242
- package/dist/content/content/skills/brainstorming/SKILL.md +0 -163
- package/dist/content/content/skills/brainstorming/dynamic-questioning.md +0 -350
- package/dist/content/content/skills/clean-code/SKILL.md +0 -201
- package/dist/content/content/skills/code-review-checklist/SKILL.md +0 -109
- package/dist/content/content/skills/database-design/SKILL.md +0 -52
- package/dist/content/content/skills/database-design/database-selection.md +0 -43
- package/dist/content/content/skills/database-design/indexing.md +0 -39
- package/dist/content/content/skills/database-design/migrations.md +0 -48
- package/dist/content/content/skills/database-design/optimization.md +0 -36
- package/dist/content/content/skills/database-design/orm-selection.md +0 -30
- package/dist/content/content/skills/database-design/schema-design.md +0 -56
- package/dist/content/content/skills/database-design/scripts/schema_validator.py +0 -172
- package/dist/content/content/skills/deployment-procedures/SKILL.md +0 -241
- package/dist/content/content/skills/doc.md +0 -177
- package/dist/content/content/skills/documentation-templates/SKILL.md +0 -194
- package/dist/content/content/skills/frontend-design/SKILL.md +0 -396
- package/dist/content/content/skills/frontend-design/animation-guide.md +0 -331
- package/dist/content/content/skills/frontend-design/color-system.md +0 -311
- package/dist/content/content/skills/frontend-design/decision-trees.md +0 -418
- package/dist/content/content/skills/frontend-design/motion-graphics.md +0 -306
- package/dist/content/content/skills/frontend-design/scripts/accessibility_checker.py +0 -183
- package/dist/content/content/skills/frontend-design/scripts/ux_audit.py +0 -722
- package/dist/content/content/skills/frontend-design/typography-system.md +0 -345
- package/dist/content/content/skills/frontend-design/ux-psychology.md +0 -541
- package/dist/content/content/skills/frontend-design/visual-effects.md +0 -383
- package/dist/content/content/skills/game-development/2d-games/SKILL.md +0 -119
- package/dist/content/content/skills/game-development/3d-games/SKILL.md +0 -135
- package/dist/content/content/skills/game-development/SKILL.md +0 -167
- package/dist/content/content/skills/game-development/game-art/SKILL.md +0 -185
- package/dist/content/content/skills/game-development/game-audio/SKILL.md +0 -190
- package/dist/content/content/skills/game-development/game-design/SKILL.md +0 -129
- package/dist/content/content/skills/game-development/mobile-games/SKILL.md +0 -108
- package/dist/content/content/skills/game-development/multiplayer/SKILL.md +0 -132
- package/dist/content/content/skills/game-development/pc-games/SKILL.md +0 -144
- package/dist/content/content/skills/game-development/vr-ar/SKILL.md +0 -123
- package/dist/content/content/skills/game-development/web-games/SKILL.md +0 -150
- package/dist/content/content/skills/geo-fundamentals/SKILL.md +0 -156
- package/dist/content/content/skills/geo-fundamentals/scripts/geo_checker.py +0 -289
- package/dist/content/content/skills/i18n-localization/SKILL.md +0 -154
- package/dist/content/content/skills/i18n-localization/scripts/i18n_checker.py +0 -241
- package/dist/content/content/skills/intelligent-routing/SKILL.md +0 -334
- package/dist/content/content/skills/lint-and-validate/SKILL.md +0 -45
- package/dist/content/content/skills/lint-and-validate/scripts/lint_runner.py +0 -172
- package/dist/content/content/skills/lint-and-validate/scripts/type_coverage.py +0 -173
- package/dist/content/content/skills/mcp-builder/SKILL.md +0 -176
- package/dist/content/content/skills/mobile-design/SKILL.md +0 -394
- package/dist/content/content/skills/mobile-design/decision-trees.md +0 -516
- package/dist/content/content/skills/mobile-design/mobile-backend.md +0 -491
- package/dist/content/content/skills/mobile-design/mobile-color-system.md +0 -420
- package/dist/content/content/skills/mobile-design/mobile-debugging.md +0 -122
- package/dist/content/content/skills/mobile-design/mobile-design-thinking.md +0 -357
- package/dist/content/content/skills/mobile-design/mobile-navigation.md +0 -458
- package/dist/content/content/skills/mobile-design/mobile-performance.md +0 -767
- package/dist/content/content/skills/mobile-design/mobile-testing.md +0 -356
- package/dist/content/content/skills/mobile-design/mobile-typography.md +0 -433
- package/dist/content/content/skills/mobile-design/platform-android.md +0 -666
- package/dist/content/content/skills/mobile-design/platform-ios.md +0 -561
- package/dist/content/content/skills/mobile-design/scripts/mobile_audit.py +0 -670
- package/dist/content/content/skills/mobile-design/touch-psychology.md +0 -537
- package/dist/content/content/skills/nextjs-best-practices/SKILL.md +0 -203
- package/dist/content/content/skills/nodejs-best-practices/SKILL.md +0 -333
- package/dist/content/content/skills/parallel-agents/SKILL.md +0 -175
- package/dist/content/content/skills/performance-profiling/SKILL.md +0 -143
- package/dist/content/content/skills/performance-profiling/scripts/lighthouse_audit.py +0 -76
- package/dist/content/content/skills/plan-writing/SKILL.md +0 -152
- package/dist/content/content/skills/powershell-windows/SKILL.md +0 -167
- package/dist/content/content/skills/python-patterns/SKILL.md +0 -441
- package/dist/content/content/skills/react-patterns/SKILL.md +0 -198
- package/dist/content/content/skills/red-team-tactics/SKILL.md +0 -199
- package/dist/content/content/skills/seo-fundamentals/SKILL.md +0 -129
- package/dist/content/content/skills/seo-fundamentals/scripts/seo_checker.py +0 -219
- package/dist/content/content/skills/server-management/SKILL.md +0 -161
- package/dist/content/content/skills/systematic-debugging/SKILL.md +0 -109
- package/dist/content/content/skills/tailwind-patterns/SKILL.md +0 -269
- package/dist/content/content/skills/tdd-workflow/SKILL.md +0 -149
- package/dist/content/content/skills/testing-patterns/SKILL.md +0 -178
- package/dist/content/content/skills/testing-patterns/scripts/test_runner.py +0 -219
- package/dist/content/content/skills/vulnerability-scanner/SKILL.md +0 -276
- package/dist/content/content/skills/vulnerability-scanner/checklists.md +0 -121
- package/dist/content/content/skills/vulnerability-scanner/scripts/security_scan.py +0 -458
- package/dist/content/content/skills/webapp-testing/SKILL.md +0 -187
- package/dist/content/content/skills/webapp-testing/scripts/playwright_runner.py +0 -173
- package/dist/content/content/specialists/Especialista em Acessibilidade.md +0 -266
- package/dist/content/content/specialists/Especialista em An/303/241lise de Testes.md" +0 -434
- package/dist/content/content/specialists/Especialista em Arquitetura Avan/303/247ada.md" +0 -358
- package/dist/content/content/specialists/Especialista em Arquitetura de Software.md +0 -177
- package/dist/content/content/specialists/Especialista em Banco de Dados.md +0 -260
- package/dist/content/content/specialists/Especialista em Contrato de API.md +0 -172
- package/dist/content/content/specialists/Especialista em Dados e Analytics com IA.md +0 -246
- package/dist/content/content/specialists/Especialista em Debugging e Troubleshooting.md +0 -191
- package/dist/content/content/specialists/Especialista em Desenvolvimento Frontend.md +0 -477
- package/dist/content/content/specialists/Especialista em Desenvolvimento Mobile.md +0 -241
- package/dist/content/content/specialists/Especialista em Desenvolvimento e Vibe Coding Estruturado.md +0 -417
- package/dist/content/content/specialists/Especialista em DevOps e Infraestrutura.md +0 -294
- package/dist/content/content/specialists/Especialista em Documenta/303/247/303/243o T/303/251cnica.md" +0 -227
- package/dist/content/content/specialists/Especialista em Engenharia de Requisitos com IA.md +0 -299
- package/dist/content/content/specialists/Especialista em Explora/303/247/303/243o de Codebase.md" +0 -179
- package/dist/content/content/specialists/Especialista em Gest/303/243o de Produto.md" +0 -179
- package/dist/content/content/specialists/Especialista em Migra/303/247/303/243o e Moderniza/303/247/303/243o.md" +0 -410
- package/dist/content/content/specialists/Especialista em Modelagem e Arquitetura de Dom/303/255nio com IA.md" +0 -248
- package/dist/content/content/specialists/Especialista em Observabilidade.md +0 -415
- package/dist/content/content/specialists/Especialista em Performance e Escalabilidade.md +0 -373
- package/dist/content/content/specialists/Especialista em Plano de Execu/303/247/303/243o com IA.md" +0 -341
- package/dist/content/content/specialists/Especialista em Prototipagem R/303/241pida com Google Stitch.md" +0 -419
- package/dist/content/content/specialists/Especialista em Seguran/303/247a da Informa/303/247/303/243o.md" +0 -508
- package/dist/content/content/specialists/Especialista em UX Design.md +0 -453
- package/dist/content/content/specialists/INDEX.md +0 -43
- package/dist/content/content/templates/PRD.md +0 -165
- package/dist/content/content/templates/README.md +0 -65
- package/dist/content/content/templates/adr.md +0 -103
- package/dist/content/content/templates/arquitetura.md +0 -279
- package/dist/content/content/templates/backlog.md +0 -185
- package/dist/content/content/templates/checklist-seguranca.md +0 -180
- package/dist/content/content/templates/contexto.md +0 -120
- package/dist/content/content/templates/criterios-aceite.md +0 -99
- package/dist/content/content/templates/design-banco.md +0 -270
- package/dist/content/content/templates/design-doc.md +0 -240
- package/dist/content/content/templates/feature.md +0 -88
- package/dist/content/content/templates/historia-backend.md +0 -84
- package/dist/content/content/templates/historia-frontend.md +0 -75
- package/dist/content/content/templates/historia-usuario.md +0 -125
- package/dist/content/content/templates/mapa-navegacao.md +0 -133
- package/dist/content/content/templates/matriz-rastreabilidade.md +0 -121
- package/dist/content/content/templates/modelo-dominio.md +0 -219
- package/dist/content/content/templates/plano-testes.md +0 -199
- package/dist/content/content/templates/prototipo-stitch.md +0 -138
- package/dist/content/content/templates/requisitos.md +0 -162
- package/dist/content/content/templates/slo-sli.md +0 -197
- package/dist/content/content/workflows/README-MCP.md +0 -363
- package/dist/content/content/workflows/brainstorm.md +0 -113
- package/dist/content/content/workflows/create.md +0 -59
- package/dist/content/content/workflows/debug.md +0 -103
- package/dist/content/content/workflows/deploy.md +0 -176
- package/dist/content/content/workflows/enhance.md +0 -63
- package/dist/content/content/workflows/mcp-debug.md +0 -506
- package/dist/content/content/workflows/mcp-feature.md +0 -385
- package/dist/content/content/workflows/mcp-gate.md +0 -413
- package/dist/content/content/workflows/mcp-next.md +0 -388
- package/dist/content/content/workflows/mcp-refactor.md +0 -600
- package/dist/content/content/workflows/mcp-start.md +0 -304
- package/dist/content/content/workflows/mcp-status.md +0 -400
- package/dist/content/content/workflows/orchestrate.md +0 -237
- package/dist/content/content/workflows/plan.md +0 -89
- package/dist/content/content/workflows/preview.md +0 -81
- package/dist/content/content/workflows/status.md +0 -86
- package/dist/content/content/workflows/test.md +0 -144
- package/dist/content/content/workflows/ui-ux-pro-max.md +0 -296
|
@@ -1,254 +1,254 @@
|
|
|
1
|
-
# Prompt: Idempotência em APIs
|
|
2
|
-
|
|
3
|
-
> **Prioridade**: 🔴 CRÍTICA
|
|
4
|
-
> **Aplicável a**: Projetos Nível 2 (Médio) e Nível 3 (Complexo)
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Por que é Crítico?
|
|
9
|
-
|
|
10
|
-
Sem idempotência, operações podem ser duplicadas em caso de:
|
|
11
|
-
- Retry automático de clientes
|
|
12
|
-
- Timeout de rede seguido de retry manual
|
|
13
|
-
- Falha de conexão após processamento
|
|
14
|
-
|
|
15
|
-
**Consequências em produção:**
|
|
16
|
-
- Cobranças duplicadas em pagamentos
|
|
17
|
-
- Pedidos duplicados em e-commerce
|
|
18
|
-
- Criação de recursos duplicados
|
|
19
|
-
- Inconsistência de dados
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Conceito
|
|
24
|
-
|
|
25
|
-
> **Idempotência**: Uma operação que pode ser executada múltiplas vezes produzindo o mesmo resultado.
|
|
26
|
-
|
|
27
|
-
| Método HTTP | Naturalmente Idempotente? |
|
|
28
|
-
|-------------|---------------------------|
|
|
29
|
-
| GET | ✅ Sim |
|
|
30
|
-
| PUT | ✅ Sim (substitui recurso) |
|
|
31
|
-
| DELETE | ✅ Sim (recurso já deletado = ok) |
|
|
32
|
-
| POST | ❌ **Não** - Requer implementação |
|
|
33
|
-
| PATCH | ⚠️ Depende da implementação |
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## Prompt Base
|
|
38
|
-
|
|
39
|
-
```text
|
|
40
|
-
Atue como arquiteto de APIs com foco em resiliência.
|
|
41
|
-
|
|
42
|
-
Preciso implementar idempotência no seguinte endpoint:
|
|
43
|
-
- Método: [POST/PATCH]
|
|
44
|
-
- Rota: [ex: /api/v1/payments]
|
|
45
|
-
- Operação: [ex: criar pagamento, processar pedido]
|
|
46
|
-
|
|
47
|
-
Stack: [ex: Node.js + Express + Redis / Java + Spring + PostgreSQL]
|
|
48
|
-
|
|
49
|
-
Gere uma implementação completa com:
|
|
50
|
-
|
|
51
|
-
1. **Estratégia de Idempotency Key**
|
|
52
|
-
- Via header `Idempotency-Key`
|
|
53
|
-
- Formato: UUID v4
|
|
54
|
-
- Validação de formato
|
|
55
|
-
|
|
56
|
-
2. **Armazenamento de Estado**
|
|
57
|
-
- Schema para Redis ou tabela em banco
|
|
58
|
-
- Estados: PROCESSING, COMPLETED, FAILED
|
|
59
|
-
- TTL apropriado (mínimo 24h)
|
|
60
|
-
|
|
61
|
-
3. **Fluxo de Processamento**
|
|
62
|
-
- Verificar se key já existe
|
|
63
|
-
- Se PROCESSING: retornar 409 Conflict
|
|
64
|
-
- Se COMPLETED: retornar resposta cacheada
|
|
65
|
-
- Se nova: processar e armazenar resultado
|
|
66
|
-
|
|
67
|
-
4. **Middleware/Interceptor**
|
|
68
|
-
- Código reutilizável para decorar endpoints
|
|
69
|
-
|
|
70
|
-
5. **Testes**
|
|
71
|
-
- Request normal (200)
|
|
72
|
-
- Request duplicada (resposta cached)
|
|
73
|
-
- Request durante processamento (409)
|
|
74
|
-
- Request com key inválida (400)
|
|
75
|
-
|
|
76
|
-
Inclua:
|
|
77
|
-
- Código completo e comentado
|
|
78
|
-
- Schema de armazenamento
|
|
79
|
-
- Exemplos de uso
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## Padrões Obrigatórios
|
|
85
|
-
|
|
86
|
-
### Header Padrão
|
|
87
|
-
|
|
88
|
-
```http
|
|
89
|
-
POST /api/v1/orders HTTP/1.1
|
|
90
|
-
Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000
|
|
91
|
-
Content-Type: application/json
|
|
92
|
-
|
|
93
|
-
{
|
|
94
|
-
"product_id": "123",
|
|
95
|
-
"quantity": 1
|
|
96
|
-
}
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### Respostas
|
|
100
|
-
|
|
101
|
-
| Cenário | Status Code | Body |
|
|
102
|
-
|---------|-------------|------|
|
|
103
|
-
| Primeira execução com sucesso | 200/201 | Recurso criado |
|
|
104
|
-
| Key já processada com sucesso | 200/201 | Resposta cacheada (idêntica) |
|
|
105
|
-
| Key em processamento | 409 Conflict | `{"error": "Request already in progress"}` |
|
|
106
|
-
| Key inválida/ausente | 400 Bad Request | `{"error": "Invalid Idempotency-Key"}` |
|
|
107
|
-
| Primeira execução com erro | 4xx/5xx | Erro original (cachear também) |
|
|
108
|
-
|
|
109
|
-
### Schema Redis
|
|
110
|
-
|
|
111
|
-
```plaintext
|
|
112
|
-
Key: idempotency:{idempotency_key}
|
|
113
|
-
TTL: 86400 (24 horas)
|
|
114
|
-
Value: {
|
|
115
|
-
"status": "PROCESSING" | "COMPLETED" | "FAILED",
|
|
116
|
-
"response_code": 201,
|
|
117
|
-
"response_body": {...},
|
|
118
|
-
"created_at": "2024-01-01T00:00:00Z"
|
|
119
|
-
}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Schema SQL (Alternativa)
|
|
123
|
-
|
|
124
|
-
```sql
|
|
125
|
-
CREATE TABLE idempotency_keys (
|
|
126
|
-
key VARCHAR(36) PRIMARY KEY,
|
|
127
|
-
status VARCHAR(20) NOT NULL DEFAULT 'PROCESSING',
|
|
128
|
-
response_code INT,
|
|
129
|
-
response_body JSONB,
|
|
130
|
-
created_at TIMESTAMP DEFAULT NOW(),
|
|
131
|
-
updated_at TIMESTAMP DEFAULT NOW()
|
|
132
|
-
);
|
|
133
|
-
|
|
134
|
-
CREATE INDEX idx_idempotency_created ON idempotency_keys(created_at);
|
|
135
|
-
|
|
136
|
-
-- Job para limpar keys antigas (> 24h)
|
|
137
|
-
DELETE FROM idempotency_keys WHERE created_at < NOW() - INTERVAL '24 hours';
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
---
|
|
141
|
-
|
|
142
|
-
## Exemplo de Implementação (Node.js + Express + Redis)
|
|
143
|
-
|
|
144
|
-
```typescript
|
|
145
|
-
import { Redis } from 'ioredis';
|
|
146
|
-
import { Request, Response, NextFunction } from 'express';
|
|
147
|
-
|
|
148
|
-
const redis = new Redis();
|
|
149
|
-
const TTL_SECONDS = 86400; // 24 horas
|
|
150
|
-
|
|
151
|
-
interface IdempotencyRecord {
|
|
152
|
-
status: 'PROCESSING' | 'COMPLETED' | 'FAILED';
|
|
153
|
-
responseCode?: number;
|
|
154
|
-
responseBody?: any;
|
|
155
|
-
createdAt: string;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
export function idempotent() {
|
|
159
|
-
return async (req: Request, res: Response, next: NextFunction) => {
|
|
160
|
-
const idempotencyKey = req.headers['idempotency-key'] as string;
|
|
161
|
-
|
|
162
|
-
// Validar presença e formato
|
|
163
|
-
if (!idempotencyKey) {
|
|
164
|
-
return res.status(400).json({ error: 'Idempotency-Key header required' });
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
168
|
-
if (!uuidRegex.test(idempotencyKey)) {
|
|
169
|
-
return res.status(400).json({ error: 'Invalid Idempotency-Key format' });
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const redisKey = `idempotency:${idempotencyKey}`;
|
|
173
|
-
|
|
174
|
-
// Verificar se já existe
|
|
175
|
-
const existing = await redis.get(redisKey);
|
|
176
|
-
|
|
177
|
-
if (existing) {
|
|
178
|
-
const record: IdempotencyRecord = JSON.parse(existing);
|
|
179
|
-
|
|
180
|
-
if (record.status === 'PROCESSING') {
|
|
181
|
-
return res.status(409).json({
|
|
182
|
-
error: 'Request already in progress',
|
|
183
|
-
idempotency_key: idempotencyKey
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// Retornar resposta cacheada
|
|
188
|
-
return res.status(record.responseCode!).json(record.responseBody);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// Marcar como em processamento
|
|
192
|
-
const processingRecord: IdempotencyRecord = {
|
|
193
|
-
status: 'PROCESSING',
|
|
194
|
-
createdAt: new Date().toISOString()
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
await redis.setex(redisKey, TTL_SECONDS, JSON.stringify(processingRecord));
|
|
198
|
-
|
|
199
|
-
// Interceptar a resposta para cachear
|
|
200
|
-
const originalJson = res.json.bind(res);
|
|
201
|
-
res.json = (body: any) => {
|
|
202
|
-
const completedRecord: IdempotencyRecord = {
|
|
203
|
-
status: res.statusCode >= 400 ? 'FAILED' : 'COMPLETED',
|
|
204
|
-
responseCode: res.statusCode,
|
|
205
|
-
responseBody: body,
|
|
206
|
-
createdAt: processingRecord.createdAt
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
redis.setex(redisKey, TTL_SECONDS, JSON.stringify(completedRecord));
|
|
210
|
-
|
|
211
|
-
return originalJson(body);
|
|
212
|
-
};
|
|
213
|
-
|
|
214
|
-
next();
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
// Uso no router
|
|
219
|
-
app.post('/api/v1/orders', idempotent(), createOrderHandler);
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
|
-
## Prompt para Revisar Idempotência Existente
|
|
225
|
-
|
|
226
|
-
```text
|
|
227
|
-
Tenho este endpoint que realiza operações que não podem ser duplicadas:
|
|
228
|
-
[COLE O CÓDIGO DO ENDPOINT]
|
|
229
|
-
|
|
230
|
-
Analise:
|
|
231
|
-
1. O endpoint é idempotente? Se não, por quê?
|
|
232
|
-
2. Quais operações podem causar problemas se duplicadas?
|
|
233
|
-
3. Sugira como adicionar idempotência mantendo compatibilidade.
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
---
|
|
237
|
-
|
|
238
|
-
## Checklist de Implementação
|
|
239
|
-
|
|
240
|
-
- [ ] Header `Idempotency-Key` definido
|
|
241
|
-
- [ ] Validação de formato (UUID v4)
|
|
242
|
-
- [ ] Armazenamento de estado configurado (Redis/DB)
|
|
243
|
-
- [ ] TTL mínimo de 24 horas
|
|
244
|
-
- [ ] Tratamento de requisição em andamento (409)
|
|
245
|
-
- [ ] Cache de resposta para requests duplicadas
|
|
246
|
-
- [ ] Testes automatizados cobrindo todos os cenários
|
|
247
|
-
- [ ] Documentação na OpenAPI/Swagger
|
|
248
|
-
|
|
249
|
-
---
|
|
250
|
-
|
|
251
|
-
## Referências
|
|
252
|
-
|
|
253
|
-
- [Stripe - Idempotent Requests](https://stripe.com/docs/api/idempotent_requests)
|
|
254
|
-
- [Idempotency Patterns](https://blog.bitsrc.io/design-patterns-for-microservices-idempotency/)
|
|
1
|
+
# Prompt: Idempotência em APIs
|
|
2
|
+
|
|
3
|
+
> **Prioridade**: 🔴 CRÍTICA
|
|
4
|
+
> **Aplicável a**: Projetos Nível 2 (Médio) e Nível 3 (Complexo)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Por que é Crítico?
|
|
9
|
+
|
|
10
|
+
Sem idempotência, operações podem ser duplicadas em caso de:
|
|
11
|
+
- Retry automático de clientes
|
|
12
|
+
- Timeout de rede seguido de retry manual
|
|
13
|
+
- Falha de conexão após processamento
|
|
14
|
+
|
|
15
|
+
**Consequências em produção:**
|
|
16
|
+
- Cobranças duplicadas em pagamentos
|
|
17
|
+
- Pedidos duplicados em e-commerce
|
|
18
|
+
- Criação de recursos duplicados
|
|
19
|
+
- Inconsistência de dados
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Conceito
|
|
24
|
+
|
|
25
|
+
> **Idempotência**: Uma operação que pode ser executada múltiplas vezes produzindo o mesmo resultado.
|
|
26
|
+
|
|
27
|
+
| Método HTTP | Naturalmente Idempotente? |
|
|
28
|
+
|-------------|---------------------------|
|
|
29
|
+
| GET | ✅ Sim |
|
|
30
|
+
| PUT | ✅ Sim (substitui recurso) |
|
|
31
|
+
| DELETE | ✅ Sim (recurso já deletado = ok) |
|
|
32
|
+
| POST | ❌ **Não** - Requer implementação |
|
|
33
|
+
| PATCH | ⚠️ Depende da implementação |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Prompt Base
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
Atue como arquiteto de APIs com foco em resiliência.
|
|
41
|
+
|
|
42
|
+
Preciso implementar idempotência no seguinte endpoint:
|
|
43
|
+
- Método: [POST/PATCH]
|
|
44
|
+
- Rota: [ex: /api/v1/payments]
|
|
45
|
+
- Operação: [ex: criar pagamento, processar pedido]
|
|
46
|
+
|
|
47
|
+
Stack: [ex: Node.js + Express + Redis / Java + Spring + PostgreSQL]
|
|
48
|
+
|
|
49
|
+
Gere uma implementação completa com:
|
|
50
|
+
|
|
51
|
+
1. **Estratégia de Idempotency Key**
|
|
52
|
+
- Via header `Idempotency-Key`
|
|
53
|
+
- Formato: UUID v4
|
|
54
|
+
- Validação de formato
|
|
55
|
+
|
|
56
|
+
2. **Armazenamento de Estado**
|
|
57
|
+
- Schema para Redis ou tabela em banco
|
|
58
|
+
- Estados: PROCESSING, COMPLETED, FAILED
|
|
59
|
+
- TTL apropriado (mínimo 24h)
|
|
60
|
+
|
|
61
|
+
3. **Fluxo de Processamento**
|
|
62
|
+
- Verificar se key já existe
|
|
63
|
+
- Se PROCESSING: retornar 409 Conflict
|
|
64
|
+
- Se COMPLETED: retornar resposta cacheada
|
|
65
|
+
- Se nova: processar e armazenar resultado
|
|
66
|
+
|
|
67
|
+
4. **Middleware/Interceptor**
|
|
68
|
+
- Código reutilizável para decorar endpoints
|
|
69
|
+
|
|
70
|
+
5. **Testes**
|
|
71
|
+
- Request normal (200)
|
|
72
|
+
- Request duplicada (resposta cached)
|
|
73
|
+
- Request durante processamento (409)
|
|
74
|
+
- Request com key inválida (400)
|
|
75
|
+
|
|
76
|
+
Inclua:
|
|
77
|
+
- Código completo e comentado
|
|
78
|
+
- Schema de armazenamento
|
|
79
|
+
- Exemplos de uso
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Padrões Obrigatórios
|
|
85
|
+
|
|
86
|
+
### Header Padrão
|
|
87
|
+
|
|
88
|
+
```http
|
|
89
|
+
POST /api/v1/orders HTTP/1.1
|
|
90
|
+
Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000
|
|
91
|
+
Content-Type: application/json
|
|
92
|
+
|
|
93
|
+
{
|
|
94
|
+
"product_id": "123",
|
|
95
|
+
"quantity": 1
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Respostas
|
|
100
|
+
|
|
101
|
+
| Cenário | Status Code | Body |
|
|
102
|
+
|---------|-------------|------|
|
|
103
|
+
| Primeira execução com sucesso | 200/201 | Recurso criado |
|
|
104
|
+
| Key já processada com sucesso | 200/201 | Resposta cacheada (idêntica) |
|
|
105
|
+
| Key em processamento | 409 Conflict | `{"error": "Request already in progress"}` |
|
|
106
|
+
| Key inválida/ausente | 400 Bad Request | `{"error": "Invalid Idempotency-Key"}` |
|
|
107
|
+
| Primeira execução com erro | 4xx/5xx | Erro original (cachear também) |
|
|
108
|
+
|
|
109
|
+
### Schema Redis
|
|
110
|
+
|
|
111
|
+
```plaintext
|
|
112
|
+
Key: idempotency:{idempotency_key}
|
|
113
|
+
TTL: 86400 (24 horas)
|
|
114
|
+
Value: {
|
|
115
|
+
"status": "PROCESSING" | "COMPLETED" | "FAILED",
|
|
116
|
+
"response_code": 201,
|
|
117
|
+
"response_body": {...},
|
|
118
|
+
"created_at": "2024-01-01T00:00:00Z"
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Schema SQL (Alternativa)
|
|
123
|
+
|
|
124
|
+
```sql
|
|
125
|
+
CREATE TABLE idempotency_keys (
|
|
126
|
+
key VARCHAR(36) PRIMARY KEY,
|
|
127
|
+
status VARCHAR(20) NOT NULL DEFAULT 'PROCESSING',
|
|
128
|
+
response_code INT,
|
|
129
|
+
response_body JSONB,
|
|
130
|
+
created_at TIMESTAMP DEFAULT NOW(),
|
|
131
|
+
updated_at TIMESTAMP DEFAULT NOW()
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
CREATE INDEX idx_idempotency_created ON idempotency_keys(created_at);
|
|
135
|
+
|
|
136
|
+
-- Job para limpar keys antigas (> 24h)
|
|
137
|
+
DELETE FROM idempotency_keys WHERE created_at < NOW() - INTERVAL '24 hours';
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Exemplo de Implementação (Node.js + Express + Redis)
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
import { Redis } from 'ioredis';
|
|
146
|
+
import { Request, Response, NextFunction } from 'express';
|
|
147
|
+
|
|
148
|
+
const redis = new Redis();
|
|
149
|
+
const TTL_SECONDS = 86400; // 24 horas
|
|
150
|
+
|
|
151
|
+
interface IdempotencyRecord {
|
|
152
|
+
status: 'PROCESSING' | 'COMPLETED' | 'FAILED';
|
|
153
|
+
responseCode?: number;
|
|
154
|
+
responseBody?: any;
|
|
155
|
+
createdAt: string;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export function idempotent() {
|
|
159
|
+
return async (req: Request, res: Response, next: NextFunction) => {
|
|
160
|
+
const idempotencyKey = req.headers['idempotency-key'] as string;
|
|
161
|
+
|
|
162
|
+
// Validar presença e formato
|
|
163
|
+
if (!idempotencyKey) {
|
|
164
|
+
return res.status(400).json({ error: 'Idempotency-Key header required' });
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
168
|
+
if (!uuidRegex.test(idempotencyKey)) {
|
|
169
|
+
return res.status(400).json({ error: 'Invalid Idempotency-Key format' });
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const redisKey = `idempotency:${idempotencyKey}`;
|
|
173
|
+
|
|
174
|
+
// Verificar se já existe
|
|
175
|
+
const existing = await redis.get(redisKey);
|
|
176
|
+
|
|
177
|
+
if (existing) {
|
|
178
|
+
const record: IdempotencyRecord = JSON.parse(existing);
|
|
179
|
+
|
|
180
|
+
if (record.status === 'PROCESSING') {
|
|
181
|
+
return res.status(409).json({
|
|
182
|
+
error: 'Request already in progress',
|
|
183
|
+
idempotency_key: idempotencyKey
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Retornar resposta cacheada
|
|
188
|
+
return res.status(record.responseCode!).json(record.responseBody);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Marcar como em processamento
|
|
192
|
+
const processingRecord: IdempotencyRecord = {
|
|
193
|
+
status: 'PROCESSING',
|
|
194
|
+
createdAt: new Date().toISOString()
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
await redis.setex(redisKey, TTL_SECONDS, JSON.stringify(processingRecord));
|
|
198
|
+
|
|
199
|
+
// Interceptar a resposta para cachear
|
|
200
|
+
const originalJson = res.json.bind(res);
|
|
201
|
+
res.json = (body: any) => {
|
|
202
|
+
const completedRecord: IdempotencyRecord = {
|
|
203
|
+
status: res.statusCode >= 400 ? 'FAILED' : 'COMPLETED',
|
|
204
|
+
responseCode: res.statusCode,
|
|
205
|
+
responseBody: body,
|
|
206
|
+
createdAt: processingRecord.createdAt
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
redis.setex(redisKey, TTL_SECONDS, JSON.stringify(completedRecord));
|
|
210
|
+
|
|
211
|
+
return originalJson(body);
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
next();
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Uso no router
|
|
219
|
+
app.post('/api/v1/orders', idempotent(), createOrderHandler);
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Prompt para Revisar Idempotência Existente
|
|
225
|
+
|
|
226
|
+
```text
|
|
227
|
+
Tenho este endpoint que realiza operações que não podem ser duplicadas:
|
|
228
|
+
[COLE O CÓDIGO DO ENDPOINT]
|
|
229
|
+
|
|
230
|
+
Analise:
|
|
231
|
+
1. O endpoint é idempotente? Se não, por quê?
|
|
232
|
+
2. Quais operações podem causar problemas se duplicadas?
|
|
233
|
+
3. Sugira como adicionar idempotência mantendo compatibilidade.
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Checklist de Implementação
|
|
239
|
+
|
|
240
|
+
- [ ] Header `Idempotency-Key` definido
|
|
241
|
+
- [ ] Validação de formato (UUID v4)
|
|
242
|
+
- [ ] Armazenamento de estado configurado (Redis/DB)
|
|
243
|
+
- [ ] TTL mínimo de 24 horas
|
|
244
|
+
- [ ] Tratamento de requisição em andamento (409)
|
|
245
|
+
- [ ] Cache de resposta para requests duplicadas
|
|
246
|
+
- [ ] Testes automatizados cobrindo todos os cenários
|
|
247
|
+
- [ ] Documentação na OpenAPI/Swagger
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Referências
|
|
252
|
+
|
|
253
|
+
- [Stripe - Idempotent Requests](https://stripe.com/docs/api/idempotent_requests)
|
|
254
|
+
- [Idempotency Patterns](https://blog.bitsrc.io/design-patterns-for-microservices-idempotency/)
|