agent-skill-kit 3.9.135
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/.agent/global.d.ts +80 -0
- package/.agent/rules/GEMINI.md +210 -0
- package/.agent/rules/autopilot.md +287 -0
- package/.agent/rules/code-rules.md +227 -0
- package/.agent/scripts/audit_workflows.ts +23 -0
- package/.agent/scripts/auto_preview.ts +170 -0
- package/.agent/scripts/checklist.ts +180 -0
- package/.agent/scripts/compile-agents.ts +237 -0
- package/.agent/scripts/fix_skills.ts +49 -0
- package/.agent/scripts/session_manager.ts +222 -0
- package/.agent/scripts/skill-audit.ts +255 -0
- package/.agent/scripts/sync_workflows.ts +54 -0
- package/.agent/scripts/utils/colors.ts +58 -0
- package/.agent/scripts/utils/process-manager.ts +131 -0
- package/.agent/scripts/utils/reporter.ts +192 -0
- package/.agent/scripts/utils/runner.ts +128 -0
- package/.agent/scripts/verify_all.ts +243 -0
- package/.agent/scripts/version-sync.ts +256 -0
- package/.agent/skills/SKILL_INDEX.md +129 -0
- package/.agent/skills/agent-browser/AGENTS.md +728 -0
- package/.agent/skills/agent-browser/SKILL.md +193 -0
- package/.agent/skills/agent-browser/rules/_sections.md +15 -0
- package/.agent/skills/agent-browser/rules/_template.md +32 -0
- package/.agent/skills/agent-browser/rules/engineering-spec.md +528 -0
- package/.agent/skills/agent-browser/scripts/browser_cli.ts +52 -0
- package/.agent/skills/agent-browser/scripts/session_manager.ts +166 -0
- package/.agent/skills/ai-artist/AGENTS.md +1082 -0
- package/.agent/skills/ai-artist/SKILL.md +186 -0
- package/.agent/skills/ai-artist/rules/_sections.md +30 -0
- package/.agent/skills/ai-artist/rules/_template.md +32 -0
- package/.agent/skills/ai-artist/rules/domain-code.md +118 -0
- package/.agent/skills/ai-artist/rules/domain-marketing.md +105 -0
- package/.agent/skills/ai-artist/rules/engineering-spec.md +519 -0
- package/.agent/skills/ai-artist/rules/image-prompts.md +195 -0
- package/.agent/skills/ai-artist/rules/model-syntax.md +115 -0
- package/.agent/skills/ai-artist/scripts/prompt_compiler.ts +72 -0
- package/.agent/skills/ai-artist/templates/image-core.txt +1 -0
- package/.agent/skills/ai-artist/templates/llm-core.txt +6 -0
- package/.agent/skills/api-architect/AGENTS.md +1896 -0
- package/.agent/skills/api-architect/SKILL.md +173 -0
- package/.agent/skills/api-architect/rules/_sections.md +35 -0
- package/.agent/skills/api-architect/rules/_template.md +32 -0
- package/.agent/skills/api-architect/rules/api-style.md +115 -0
- package/.agent/skills/api-architect/rules/auth.md +134 -0
- package/.agent/skills/api-architect/rules/documentation.md +131 -0
- package/.agent/skills/api-architect/rules/engineering-spec.md +505 -0
- package/.agent/skills/api-architect/rules/graphql.md +154 -0
- package/.agent/skills/api-architect/rules/rate-limiting.md +76 -0
- package/.agent/skills/api-architect/rules/response.md +138 -0
- package/.agent/skills/api-architect/rules/rest.md +113 -0
- package/.agent/skills/api-architect/rules/security-testing.md +146 -0
- package/.agent/skills/api-architect/rules/trpc.md +129 -0
- package/.agent/skills/api-architect/rules/versioning.md +100 -0
- package/.agent/skills/api-architect/scripts/api_validator.ts +413 -0
- package/.agent/skills/auth-patterns/AGENTS.md +1830 -0
- package/.agent/skills/auth-patterns/SKILL.md +163 -0
- package/.agent/skills/auth-patterns/rules/_sections.md +30 -0
- package/.agent/skills/auth-patterns/rules/_template.md +32 -0
- package/.agent/skills/auth-patterns/rules/engineering-spec.md +515 -0
- package/.agent/skills/auth-patterns/rules/jwt-deep.md +196 -0
- package/.agent/skills/auth-patterns/rules/mfa.md +174 -0
- package/.agent/skills/auth-patterns/rules/oauth2.md +134 -0
- package/.agent/skills/auth-patterns/rules/passkey.md +243 -0
- package/.agent/skills/auth-patterns/rules/rbac-abac.md +206 -0
- package/.agent/skills/auth-patterns/rules/session.md +183 -0
- package/.agent/skills/auth-patterns/scripts/auth_validator.ts +121 -0
- package/.agent/skills/chrome-devtools/AGENTS.md +952 -0
- package/.agent/skills/chrome-devtools/SKILL.md +160 -0
- package/.agent/skills/chrome-devtools/rules/_sections.md +25 -0
- package/.agent/skills/chrome-devtools/rules/_template.md +32 -0
- package/.agent/skills/chrome-devtools/rules/aria-snapshot.md +95 -0
- package/.agent/skills/chrome-devtools/rules/engineering-spec.md +510 -0
- package/.agent/skills/chrome-devtools/rules/scripts-guide.md +174 -0
- package/.agent/skills/chrome-devtools/scripts/aria-snapshot.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/click.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/console.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/core_cli.ts +79 -0
- package/.agent/skills/chrome-devtools/scripts/evaluate.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/fill.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/navigate.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/network.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/performance.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/screenshot.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/select-ref.ts +3 -0
- package/.agent/skills/cicd-pipeline/AGENTS.md +809 -0
- package/.agent/skills/cicd-pipeline/SKILL.md +164 -0
- package/.agent/skills/cicd-pipeline/rules/_sections.md +15 -0
- package/.agent/skills/cicd-pipeline/rules/_template.md +32 -0
- package/.agent/skills/cicd-pipeline/rules/engineering-spec.md +477 -0
- package/.agent/skills/cicd-pipeline/scripts/flag-manager.ts +253 -0
- package/.agent/skills/cicd-pipeline/scripts/pipeline_validator.ts +133 -0
- package/.agent/skills/code-constitution/AGENTS.md +597 -0
- package/.agent/skills/code-constitution/CHANGELOG.md +216 -0
- package/.agent/skills/code-constitution/SKILL.md +191 -0
- package/.agent/skills/code-constitution/VERSION +3 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/after.tsx +59 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/before.tsx +42 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/explanation.md +91 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/after.tsx +99 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/before.tsx +57 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/explanation.md +120 -0
- package/.agent/skills/code-constitution/knowledge/lessons-learned.yaml +3 -0
- package/.agent/skills/code-constitution/metadata/precedence.yaml +117 -0
- package/.agent/skills/code-constitution/metadata/scope-map.yaml +156 -0
- package/.agent/skills/code-constitution/proposals/v1.1-change-proposal-template.md +201 -0
- package/.agent/skills/code-constitution/resources/AUTHORITY_MODEL.md +115 -0
- package/.agent/skills/code-constitution/resources/ENFORCEMENT_GUIDE.md +246 -0
- package/.agent/skills/code-constitution/resources/LOAD_ORDER.md +86 -0
- package/.agent/skills/code-constitution/rules/_sections.md +15 -0
- package/.agent/skills/code-constitution/rules/_template.md +32 -0
- package/.agent/skills/code-constitution/rules/constitution/master-constitution.md +210 -0
- package/.agent/skills/code-constitution/rules/doctrines/architecture/architecture-doctrine.md +188 -0
- package/.agent/skills/code-constitution/rules/doctrines/backend/backend-data-engine-doctrine.md +218 -0
- package/.agent/skills/code-constitution/rules/doctrines/commercial/commercial-guardrails-doctrine.md +196 -0
- package/.agent/skills/code-constitution/rules/doctrines/data/data-integrity-doctrine.md +202 -0
- package/.agent/skills/code-constitution/rules/doctrines/frontend/frontend-mobile-doctrine.md +169 -0
- package/.agent/skills/code-constitution/rules/doctrines/frontend/interaction-patterns-doctrine.md +176 -0
- package/.agent/skills/code-constitution/rules/doctrines/learning/learning-engine-doctrine.md +192 -0
- package/.agent/skills/code-constitution/rules/doctrines/performance/performance-doctrine.md +180 -0
- package/.agent/skills/code-constitution/rules/doctrines/review/code-review-doctrine.md +174 -0
- package/.agent/skills/code-constitution/rules/enforcement/agents/agent-enforcement-protocol.md +218 -0
- package/.agent/skills/code-constitution/rules/enforcement/agents/agent-system-prompt.md +196 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/backend-api-review-checklist.md +131 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/chart-component-review-checklist.md +147 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/frontend-review-checklist.md +194 -0
- package/.agent/skills/code-constitution/rules/enforcement/playbooks/doctrine-violation-playbook.md +236 -0
- package/.agent/skills/code-constitution/rules/engineering-spec.md +561 -0
- package/.agent/skills/code-constitution/scripts/audit_pr.ts +219 -0
- package/.agent/skills/code-constitution/scripts/check_boundaries.ts +134 -0
- package/.agent/skills/code-constitution/scripts/learn.ts +202 -0
- package/.agent/skills/code-constitution/scripts/validate_doctrine.ts +287 -0
- package/.agent/skills/code-craft/AGENTS.md +803 -0
- package/.agent/skills/code-craft/SKILL.md +170 -0
- package/.agent/skills/code-craft/rules/_sections.md +20 -0
- package/.agent/skills/code-craft/rules/_template.md +32 -0
- package/.agent/skills/code-craft/rules/engineering-spec.md +447 -0
- package/.agent/skills/code-craft/rules/verification-scripts.md +83 -0
- package/.agent/skills/code-craft/scripts/code_quality_checker.ts +193 -0
- package/.agent/skills/code-review/AGENTS.md +1664 -0
- package/.agent/skills/code-review/SKILL.md +152 -0
- package/.agent/skills/code-review/rules/_sections.md +15 -0
- package/.agent/skills/code-review/rules/_template.md +32 -0
- package/.agent/skills/code-review/rules/engineering-spec.md +466 -0
- package/.agent/skills/code-review/scripts/lint_runner.ts +213 -0
- package/.agent/skills/code-review/scripts/type_coverage.ts +118 -0
- package/.agent/skills/context-engineering/AGENTS.md +499 -0
- package/.agent/skills/context-engineering/SKILL.md +147 -0
- package/.agent/skills/context-engineering/rules/_sections.md +15 -0
- package/.agent/skills/context-engineering/rules/_template.md +32 -0
- package/.agent/skills/context-engineering/rules/engineering-spec.md +463 -0
- package/.agent/skills/context-engineering/scripts/context_analyzer.ts +127 -0
- package/.agent/skills/copywriting/AGENTS.md +501 -0
- package/.agent/skills/copywriting/SKILL.md +188 -0
- package/.agent/skills/copywriting/rules/_sections.md +15 -0
- package/.agent/skills/copywriting/rules/_template.md +32 -0
- package/.agent/skills/copywriting/rules/engineering-spec.md +465 -0
- package/.agent/skills/copywriting/scripts/copy_validator.ts +185 -0
- package/.agent/skills/data-modeler/AGENTS.md +814 -0
- package/.agent/skills/data-modeler/SKILL.md +195 -0
- package/.agent/skills/data-modeler/rules/_sections.md +15 -0
- package/.agent/skills/data-modeler/rules/_template.md +32 -0
- package/.agent/skills/data-modeler/rules/database-selection.md +124 -0
- package/.agent/skills/data-modeler/rules/engineering-spec.md +479 -0
- package/.agent/skills/data-modeler/rules/indexing.md +166 -0
- package/.agent/skills/data-modeler/rules/migrations.md +176 -0
- package/.agent/skills/data-modeler/rules/optimization.md +161 -0
- package/.agent/skills/data-modeler/rules/orm-selection.md +155 -0
- package/.agent/skills/data-modeler/rules/schema-design.md +162 -0
- package/.agent/skills/data-modeler/scripts/schema_validator.ts +357 -0
- package/.agent/skills/debug-pro/AGENTS.md +798 -0
- package/.agent/skills/debug-pro/SKILL.md +193 -0
- package/.agent/skills/debug-pro/defense-in-depth/SKILL.md +148 -0
- package/.agent/skills/debug-pro/root-cause-tracing/SKILL.md +196 -0
- package/.agent/skills/debug-pro/root-cause-tracing/find-polluter.sh +63 -0
- package/.agent/skills/debug-pro/rules/_sections.md +15 -0
- package/.agent/skills/debug-pro/rules/_template.md +32 -0
- package/.agent/skills/debug-pro/rules/engineering-spec.md +491 -0
- package/.agent/skills/debug-pro/scripts/debug_verifier.ts +148 -0
- package/.agent/skills/debug-pro/verification-before-completion/SKILL.md +160 -0
- package/.agent/skills/design-system/AGENTS.md +4216 -0
- package/.agent/skills/design-system/SKILL.md +186 -0
- package/.agent/skills/design-system/rules/_sections.md +65 -0
- package/.agent/skills/design-system/rules/_template.md +32 -0
- package/.agent/skills/design-system/rules/animation-guide.md +355 -0
- package/.agent/skills/design-system/rules/color-system.md +335 -0
- package/.agent/skills/design-system/rules/color-systems.md +133 -0
- package/.agent/skills/design-system/rules/decision-trees.md +442 -0
- package/.agent/skills/design-system/rules/design-extraction.md +152 -0
- package/.agent/skills/design-system/rules/engineering-spec.md +484 -0
- package/.agent/skills/design-system/rules/motion-design.md +161 -0
- package/.agent/skills/design-system/rules/motion-graphics.md +330 -0
- package/.agent/skills/design-system/rules/spatial-composition.md +184 -0
- package/.agent/skills/design-system/rules/typography-system.md +369 -0
- package/.agent/skills/design-system/rules/typography.md +124 -0
- package/.agent/skills/design-system/rules/ux-psychology.md +565 -0
- package/.agent/skills/design-system/rules/visual-effects.md +407 -0
- package/.agent/skills/design-system/scripts/accessibility_checker.ts +292 -0
- package/.agent/skills/design-system/scripts/ux_audit.ts +356 -0
- package/.agent/skills/doc-templates/AGENTS.md +820 -0
- package/.agent/skills/doc-templates/SKILL.md +260 -0
- package/.agent/skills/doc-templates/rules/_sections.md +20 -0
- package/.agent/skills/doc-templates/rules/_template.md +32 -0
- package/.agent/skills/doc-templates/rules/doc.md +355 -0
- package/.agent/skills/doc-templates/rules/engineering-spec.md +422 -0
- package/.agent/skills/doc-templates/scripts/editor-server.ts +162 -0
- package/.agent/skills/doc-templates/scripts/inject_otel.ts +22 -0
- package/.agent/skills/doc-templates/scripts/kanban-server.ts +171 -0
- package/.agent/skills/doc-templates/scripts/markdown-server.ts +185 -0
- package/.agent/skills/e2e-automation/AGENTS.md +882 -0
- package/.agent/skills/e2e-automation/SKILL.md +175 -0
- package/.agent/skills/e2e-automation/rules/_sections.md +20 -0
- package/.agent/skills/e2e-automation/rules/_template.md +32 -0
- package/.agent/skills/e2e-automation/rules/aria-snapshot.md +185 -0
- package/.agent/skills/e2e-automation/rules/engineering-spec.md +501 -0
- package/.agent/skills/e2e-automation/scripts/playwright_runner.ts +208 -0
- package/.agent/skills/execution-reporter/AGENTS.md +419 -0
- package/.agent/skills/execution-reporter/SKILL.md +152 -0
- package/.agent/skills/execution-reporter/rules/_sections.md +15 -0
- package/.agent/skills/execution-reporter/rules/_template.md +32 -0
- package/.agent/skills/execution-reporter/rules/engineering-spec.md +389 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +140 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +156 -0
- package/.agent/skills/game-development/AGENTS.md +783 -0
- package/.agent/skills/game-development/SKILL.md +178 -0
- package/.agent/skills/game-development/game-art/SKILL.md +207 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +211 -0
- package/.agent/skills/game-development/game-design/SKILL.md +151 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +130 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +154 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +167 -0
- package/.agent/skills/game-development/rules/_sections.md +15 -0
- package/.agent/skills/game-development/rules/_template.md +32 -0
- package/.agent/skills/game-development/rules/engineering-spec.md +480 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +144 -0
- package/.agent/skills/game-development/web-games/SKILL.md +173 -0
- package/.agent/skills/git-workflow/AGENTS.md +554 -0
- package/.agent/skills/git-workflow/SKILL.md +181 -0
- package/.agent/skills/git-workflow/rules/_sections.md +15 -0
- package/.agent/skills/git-workflow/rules/_template.md +32 -0
- package/.agent/skills/git-workflow/rules/engineering-spec.md +518 -0
- package/.agent/skills/gitops/AGENTS.md +921 -0
- package/.agent/skills/gitops/SKILL.md +163 -0
- package/.agent/skills/gitops/rules/_sections.md +25 -0
- package/.agent/skills/gitops/rules/_template.md +32 -0
- package/.agent/skills/gitops/rules/argocd-setup.md +148 -0
- package/.agent/skills/gitops/rules/engineering-spec.md +450 -0
- package/.agent/skills/gitops/rules/sync-policies.md +145 -0
- package/.agent/skills/google-adk-python/AGENTS.md +1054 -0
- package/.agent/skills/google-adk-python/SKILL.md +168 -0
- package/.agent/skills/google-adk-python/rules/_sections.md +25 -0
- package/.agent/skills/google-adk-python/rules/_template.md +32 -0
- package/.agent/skills/google-adk-python/rules/deployment.md +138 -0
- package/.agent/skills/google-adk-python/rules/engineering-spec.md +451 -0
- package/.agent/skills/google-adk-python/rules/multi-agent.md +146 -0
- package/.agent/skills/google-adk-python/rules/tools.md +131 -0
- package/.agent/skills/idea-storm/AGENTS.md +995 -0
- package/.agent/skills/idea-storm/SKILL.md +160 -0
- package/.agent/skills/idea-storm/rules/_sections.md +25 -0
- package/.agent/skills/idea-storm/rules/_template.md +32 -0
- package/.agent/skills/idea-storm/rules/architecture-debate.md +122 -0
- package/.agent/skills/idea-storm/rules/dynamic-questioning.md +374 -0
- package/.agent/skills/idea-storm/rules/engineering-spec.md +466 -0
- package/.agent/skills/knowledge-compiler/SKILL.md +320 -0
- package/.agent/skills/knowledge-graph/AGENTS.md +762 -0
- package/.agent/skills/knowledge-graph/SKILL.md +157 -0
- package/.agent/skills/knowledge-graph/rules/_sections.md +15 -0
- package/.agent/skills/knowledge-graph/rules/_template.md +32 -0
- package/.agent/skills/knowledge-graph/rules/engineering-spec.md +439 -0
- package/.agent/skills/knowledge-linter/SKILL.md +217 -0
- package/.agent/skills/lifecycle-orchestrator/AGENTS.md +989 -0
- package/.agent/skills/lifecycle-orchestrator/SKILL.md +169 -0
- package/.agent/skills/lifecycle-orchestrator/rules/_sections.md +15 -0
- package/.agent/skills/lifecycle-orchestrator/rules/_template.md +32 -0
- package/.agent/skills/lifecycle-orchestrator/rules/engineering-spec.md +525 -0
- package/.agent/skills/lifecycle-orchestrator/scripts/state_manager.ts +189 -0
- package/.agent/skills/mcp-builder/AGENTS.md +1653 -0
- package/.agent/skills/mcp-builder/SKILL.md +166 -0
- package/.agent/skills/mcp-builder/rules/_sections.md +40 -0
- package/.agent/skills/mcp-builder/rules/_template.md +32 -0
- package/.agent/skills/mcp-builder/rules/best-practices.md +157 -0
- package/.agent/skills/mcp-builder/rules/design-principles.md +105 -0
- package/.agent/skills/mcp-builder/rules/engineering-spec.md +473 -0
- package/.agent/skills/mcp-builder/rules/evaluation.md +103 -0
- package/.agent/skills/mcp-builder/rules/python-implementation.md +249 -0
- package/.agent/skills/mcp-builder/rules/quickstart.md +111 -0
- package/.agent/skills/mcp-builder/rules/typescript-implementation.md +280 -0
- package/.agent/skills/mcp-management/AGENTS.md +837 -0
- package/.agent/skills/mcp-management/SKILL.md +164 -0
- package/.agent/skills/mcp-management/rules/_sections.md +25 -0
- package/.agent/skills/mcp-management/rules/_template.md +32 -0
- package/.agent/skills/mcp-management/rules/cli-usage.md +146 -0
- package/.agent/skills/mcp-management/rules/engineering-spec.md +501 -0
- package/.agent/skills/mcp-management/rules/protocol.md +159 -0
- package/.agent/skills/media-processing/AGENTS.md +479 -0
- package/.agent/skills/media-processing/SKILL.md +176 -0
- package/.agent/skills/media-processing/rules/_sections.md +15 -0
- package/.agent/skills/media-processing/rules/_template.md +32 -0
- package/.agent/skills/media-processing/rules/engineering-spec.md +452 -0
- package/.agent/skills/media-processing/scripts/convert-video.ts +155 -0
- package/.agent/skills/media-processing/scripts/optimize-image.ts +127 -0
- package/.agent/skills/mobile-design/AGENTS.md +6531 -0
- package/.agent/skills/mobile-design/SKILL.md +165 -0
- package/.agent/skills/mobile-design/rules/_sections.md +45 -0
- package/.agent/skills/mobile-design/rules/_template.md +32 -0
- package/.agent/skills/mobile-design/rules/decision-trees.md +540 -0
- package/.agent/skills/mobile-design/rules/engineering-spec.md +467 -0
- package/.agent/skills/mobile-design/rules/mobile-backend.md +516 -0
- package/.agent/skills/mobile-design/rules/mobile-color-system.md +436 -0
- package/.agent/skills/mobile-design/rules/mobile-debugging.md +146 -0
- package/.agent/skills/mobile-design/rules/mobile-design-thinking.md +381 -0
- package/.agent/skills/mobile-design/rules/mobile-navigation.md +474 -0
- package/.agent/skills/mobile-design/rules/mobile-performance.md +783 -0
- package/.agent/skills/mobile-design/rules/mobile-testing.md +380 -0
- package/.agent/skills/mobile-design/rules/mobile-typography.md +449 -0
- package/.agent/skills/mobile-design/rules/platform-android.md +682 -0
- package/.agent/skills/mobile-design/rules/platform-ios.md +577 -0
- package/.agent/skills/mobile-design/rules/touch-psychology.md +553 -0
- package/.agent/skills/mobile-design/scripts/mobile_audit.ts +309 -0
- package/.agent/skills/mobile-developer/AGENTS.md +904 -0
- package/.agent/skills/mobile-developer/SKILL.md +194 -0
- package/.agent/skills/mobile-developer/rules/_sections.md +75 -0
- package/.agent/skills/mobile-developer/rules/_template.md +32 -0
- package/.agent/skills/mobile-developer/rules/anti-patterns.md +70 -0
- package/.agent/skills/mobile-developer/rules/app-store-optimization.md +319 -0
- package/.agent/skills/mobile-developer/rules/decision-trees.md +545 -0
- package/.agent/skills/mobile-developer/rules/deep-linking.md +441 -0
- package/.agent/skills/mobile-developer/rules/engineering-spec.md +477 -0
- package/.agent/skills/mobile-developer/rules/flutter.md +475 -0
- package/.agent/skills/mobile-developer/rules/mobile-backend.md +516 -0
- package/.agent/skills/mobile-developer/rules/mobile-color-system.md +444 -0
- package/.agent/skills/mobile-developer/rules/mobile-debugging.md +428 -0
- package/.agent/skills/mobile-developer/rules/mobile-design-thinking.md +367 -0
- package/.agent/skills/mobile-developer/rules/mobile-navigation.md +483 -0
- package/.agent/skills/mobile-developer/rules/mobile-performance.md +778 -0
- package/.agent/skills/mobile-developer/rules/mobile-testing.md +382 -0
- package/.agent/skills/mobile-developer/rules/mobile-typography.md +457 -0
- package/.agent/skills/mobile-developer/rules/native.md +572 -0
- package/.agent/skills/mobile-developer/rules/platform-android.md +676 -0
- package/.agent/skills/mobile-developer/rules/platform-ios.md +571 -0
- package/.agent/skills/mobile-developer/rules/push-notifications.md +599 -0
- package/.agent/skills/mobile-developer/rules/react-native.md +422 -0
- package/.agent/skills/mobile-developer/rules/touch-psychology.md +547 -0
- package/.agent/skills/mobile-developer/scripts/mobile_audit.ts +701 -0
- package/.agent/skills/nextjs-pro/AGENTS.md +3932 -0
- package/.agent/skills/nextjs-pro/SKILL.md +171 -0
- package/.agent/skills/nextjs-pro/rules/_sections.md +50 -0
- package/.agent/skills/nextjs-pro/rules/_template.md +32 -0
- package/.agent/skills/nextjs-pro/rules/advanced-event-handler-refs.md +59 -0
- package/.agent/skills/nextjs-pro/rules/advanced-init-once.md +46 -0
- package/.agent/skills/nextjs-pro/rules/advanced-use-latest.md +43 -0
- package/.agent/skills/nextjs-pro/rules/async-api-routes.md +42 -0
- package/.agent/skills/nextjs-pro/rules/async-defer-await.md +84 -0
- package/.agent/skills/nextjs-pro/rules/async-dependencies.md +55 -0
- package/.agent/skills/nextjs-pro/rules/async-parallel.md +32 -0
- package/.agent/skills/nextjs-pro/rules/async-suspense-boundaries.md +103 -0
- package/.agent/skills/nextjs-pro/rules/bundle-barrel-imports.md +63 -0
- package/.agent/skills/nextjs-pro/rules/bundle-conditional.md +35 -0
- package/.agent/skills/nextjs-pro/rules/bundle-defer-third-party.md +53 -0
- package/.agent/skills/nextjs-pro/rules/bundle-dynamic-imports.md +39 -0
- package/.agent/skills/nextjs-pro/rules/bundle-preload.md +54 -0
- package/.agent/skills/nextjs-pro/rules/client-event-listeners.md +78 -0
- package/.agent/skills/nextjs-pro/rules/client-localstorage-schema.md +75 -0
- package/.agent/skills/nextjs-pro/rules/client-passive-event-listeners.md +52 -0
- package/.agent/skills/nextjs-pro/rules/client-swr-dedup.md +60 -0
- package/.agent/skills/nextjs-pro/rules/engineering-spec.md +440 -0
- package/.agent/skills/nextjs-pro/rules/js-batch-dom-css.md +111 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-function-results.md +84 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-property-access.md +32 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-storage.md +74 -0
- package/.agent/skills/nextjs-pro/rules/js-combine-iterations.md +36 -0
- package/.agent/skills/nextjs-pro/rules/js-early-exit.md +54 -0
- package/.agent/skills/nextjs-pro/rules/js-hoist-regexp.md +49 -0
- package/.agent/skills/nextjs-pro/rules/js-index-maps.md +41 -0
- package/.agent/skills/nextjs-pro/rules/js-length-check-first.md +53 -0
- package/.agent/skills/nextjs-pro/rules/js-min-max-loop.md +86 -0
- package/.agent/skills/nextjs-pro/rules/js-set-map-lookups.md +28 -0
- package/.agent/skills/nextjs-pro/rules/js-tosorted-immutable.md +61 -0
- package/.agent/skills/nextjs-pro/rules/rendering-activity.md +30 -0
- package/.agent/skills/nextjs-pro/rules/rendering-animate-svg-wrapper.md +51 -0
- package/.agent/skills/nextjs-pro/rules/rendering-conditional-render.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rendering-content-visibility.md +42 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hoist-jsx.md +50 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hydration-no-flicker.md +86 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hydration-suppress-warning.md +34 -0
- package/.agent/skills/nextjs-pro/rules/rendering-svg-precision.md +32 -0
- package/.agent/skills/nextjs-pro/rules/rendering-usetransition-loading.md +79 -0
- package/.agent/skills/nextjs-pro/rules/rerender-defer-reads.md +43 -0
- package/.agent/skills/nextjs-pro/rules/rerender-dependencies.md +49 -0
- package/.agent/skills/nextjs-pro/rules/rerender-derived-state-no-effect.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rerender-derived-state.md +33 -0
- package/.agent/skills/nextjs-pro/rules/rerender-functional-setstate.md +78 -0
- package/.agent/skills/nextjs-pro/rules/rerender-lazy-state-init.md +62 -0
- package/.agent/skills/nextjs-pro/rules/rerender-memo-with-default-value.md +42 -0
- package/.agent/skills/nextjs-pro/rules/rerender-memo.md +48 -0
- package/.agent/skills/nextjs-pro/rules/rerender-move-effect-to-event.md +49 -0
- package/.agent/skills/nextjs-pro/rules/rerender-simple-expression-in-memo.md +39 -0
- package/.agent/skills/nextjs-pro/rules/rerender-transitions.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rerender-use-ref-transient-values.md +77 -0
- package/.agent/skills/nextjs-pro/rules/schema.json +34 -0
- package/.agent/skills/nextjs-pro/rules/server-after-nonblocking.md +77 -0
- package/.agent/skills/nextjs-pro/rules/server-auth-actions.md +100 -0
- package/.agent/skills/nextjs-pro/rules/server-cache-lru.md +45 -0
- package/.agent/skills/nextjs-pro/rules/server-cache-react.md +80 -0
- package/.agent/skills/nextjs-pro/rules/server-dedup-props.md +69 -0
- package/.agent/skills/nextjs-pro/rules/server-parallel-fetching.md +87 -0
- package/.agent/skills/nextjs-pro/rules/server-serialization.md +42 -0
- package/.agent/skills/nodejs-pro/AGENTS.md +866 -0
- package/.agent/skills/nodejs-pro/SKILL.md +172 -0
- package/.agent/skills/nodejs-pro/rules/_sections.md +50 -0
- package/.agent/skills/nodejs-pro/rules/_template.md +32 -0
- package/.agent/skills/nodejs-pro/rules/architecture-patterns.md +229 -0
- package/.agent/skills/nodejs-pro/rules/async-patterns.md +246 -0
- package/.agent/skills/nodejs-pro/rules/engineering-spec.md +438 -0
- package/.agent/skills/nodejs-pro/rules/error-handling.md +257 -0
- package/.agent/skills/nodejs-pro/rules/framework-selection.md +220 -0
- package/.agent/skills/nodejs-pro/rules/runtime-modules.md +176 -0
- package/.agent/skills/nodejs-pro/rules/testing-strategy.md +266 -0
- package/.agent/skills/nodejs-pro/rules/validation-security.md +205 -0
- package/.agent/skills/observability/AGENTS.md +607 -0
- package/.agent/skills/observability/SKILL.md +178 -0
- package/.agent/skills/observability/rules/_sections.md +15 -0
- package/.agent/skills/observability/rules/_template.md +32 -0
- package/.agent/skills/observability/rules/engineering-spec.md +440 -0
- package/.agent/skills/offensive-sec/AGENTS.md +849 -0
- package/.agent/skills/offensive-sec/SKILL.md +191 -0
- package/.agent/skills/offensive-sec/rules/_sections.md +15 -0
- package/.agent/skills/offensive-sec/rules/_template.md +32 -0
- package/.agent/skills/offensive-sec/rules/engineering-spec.md +470 -0
- package/.agent/skills/perf-optimizer/AGENTS.md +870 -0
- package/.agent/skills/perf-optimizer/SKILL.md +189 -0
- package/.agent/skills/perf-optimizer/rules/_sections.md +15 -0
- package/.agent/skills/perf-optimizer/rules/_template.md +32 -0
- package/.agent/skills/perf-optimizer/rules/backend-patterns.md +312 -0
- package/.agent/skills/perf-optimizer/rules/engineering-spec.md +428 -0
- package/.agent/skills/perf-optimizer/scripts/lighthouse_audit.ts +201 -0
- package/.agent/skills/problem-checker/AGENTS.md +519 -0
- package/.agent/skills/problem-checker/SKILL.md +189 -0
- package/.agent/skills/problem-checker/rules/_sections.md +15 -0
- package/.agent/skills/problem-checker/rules/_template.md +32 -0
- package/.agent/skills/problem-checker/rules/engineering-spec.md +483 -0
- package/.agent/skills/problem-checker/scripts/check_problems.ts +396 -0
- package/.agent/skills/project-planner/AGENTS.md +2698 -0
- package/.agent/skills/project-planner/SKILL.md +166 -0
- package/.agent/skills/project-planner/rules/_sections.md +15 -0
- package/.agent/skills/project-planner/rules/_template.md +32 -0
- package/.agent/skills/project-planner/rules/engineering-spec.md +420 -0
- package/.agent/skills/python-pro/AGENTS.md +1871 -0
- package/.agent/skills/python-pro/SKILL.md +182 -0
- package/.agent/skills/python-pro/rules/_sections.md +50 -0
- package/.agent/skills/python-pro/rules/_template.md +32 -0
- package/.agent/skills/python-pro/rules/async-patterns.md +168 -0
- package/.agent/skills/python-pro/rules/django-patterns.md +194 -0
- package/.agent/skills/python-pro/rules/engineering-spec.md +442 -0
- package/.agent/skills/python-pro/rules/fastapi-patterns.md +179 -0
- package/.agent/skills/python-pro/rules/framework-selection.md +167 -0
- package/.agent/skills/python-pro/rules/project-structure.md +181 -0
- package/.agent/skills/python-pro/rules/testing-patterns.md +212 -0
- package/.agent/skills/python-pro/rules/type-hints.md +159 -0
- package/.agent/skills/react-pro/AGENTS.md +963 -0
- package/.agent/skills/react-pro/SKILL.md +232 -0
- package/.agent/skills/react-pro/rules/_sections.md +40 -0
- package/.agent/skills/react-pro/rules/_template.md +32 -0
- package/.agent/skills/react-pro/rules/component-patterns.md +145 -0
- package/.agent/skills/react-pro/rules/composition-compound.md +82 -0
- package/.agent/skills/react-pro/rules/data-fetching.md +133 -0
- package/.agent/skills/react-pro/rules/engineering-spec.md +453 -0
- package/.agent/skills/react-pro/rules/error-boundary.md +61 -0
- package/.agent/skills/react-pro/rules/file-organization.md +158 -0
- package/.agent/skills/react-pro/rules/hooks-custom.md +61 -0
- package/.agent/skills/react-pro/rules/mui-styling.md +138 -0
- package/.agent/skills/react-pro/rules/patterns.md +24 -0
- package/.agent/skills/react-pro/rules/performance-optimization.md +65 -0
- package/.agent/skills/react-pro/rules/performance.md +137 -0
- package/.agent/skills/react-pro/rules/react19-hooks.md +85 -0
- package/.agent/skills/react-pro/rules/state-management.md +90 -0
- package/.agent/skills/react-pro/rules/testing-patterns.md +52 -0
- package/.agent/skills/registry.json +1251 -0
- package/.agent/skills/security-scanner/AGENTS.md +851 -0
- package/.agent/skills/security-scanner/SKILL.md +182 -0
- package/.agent/skills/security-scanner/rules/_sections.md +15 -0
- package/.agent/skills/security-scanner/rules/_template.md +32 -0
- package/.agent/skills/security-scanner/rules/auth-patterns.md +281 -0
- package/.agent/skills/security-scanner/rules/checklists.md +186 -0
- package/.agent/skills/security-scanner/rules/engineering-spec.md +440 -0
- package/.agent/skills/security-scanner/scripts/security_scan.ts +513 -0
- package/.agent/skills/seo-optimizer/AGENTS.md +839 -0
- package/.agent/skills/seo-optimizer/SKILL.md +180 -0
- package/.agent/skills/seo-optimizer/rules/_sections.md +15 -0
- package/.agent/skills/seo-optimizer/rules/_template.md +32 -0
- package/.agent/skills/seo-optimizer/rules/engineering-spec.md +433 -0
- package/.agent/skills/seo-optimizer/scripts/geo_checker.ts +109 -0
- package/.agent/skills/seo-optimizer/scripts/seo_checker.ts +308 -0
- package/.agent/skills/server-ops/AGENTS.md +643 -0
- package/.agent/skills/server-ops/SKILL.md +194 -0
- package/.agent/skills/server-ops/rules/_sections.md +15 -0
- package/.agent/skills/server-ops/rules/_template.md +32 -0
- package/.agent/skills/server-ops/rules/engineering-spec.md +450 -0
- package/.agent/skills/shell-script/AGENTS.md +499 -0
- package/.agent/skills/shell-script/SKILL.md +205 -0
- package/.agent/skills/shell-script/rules/_sections.md +15 -0
- package/.agent/skills/shell-script/rules/_template.md +32 -0
- package/.agent/skills/shell-script/rules/engineering-spec.md +463 -0
- package/.agent/skills/skill-generator/SKILL.md +147 -0
- package/.agent/skills/smart-router/SKILL.md +95 -0
- package/.agent/skills/studio/AGENTS.md +636 -0
- package/.agent/skills/studio/SKILL.md +178 -0
- package/.agent/skills/studio/data/charts.csv +26 -0
- package/.agent/skills/studio/data/colors.csv +97 -0
- package/.agent/skills/studio/data/icons.csv +101 -0
- package/.agent/skills/studio/data/landing.csv +31 -0
- package/.agent/skills/studio/data/products.csv +97 -0
- package/.agent/skills/studio/data/prompts.csv +24 -0
- package/.agent/skills/studio/data/react-performance.csv +45 -0
- package/.agent/skills/studio/data/stacks/flutter.csv +52 -0
- package/.agent/skills/studio/data/stacks/html-tailwind.csv +56 -0
- package/.agent/skills/studio/data/stacks/jetpack-compose.csv +53 -0
- package/.agent/skills/studio/data/stacks/nextjs.csv +53 -0
- package/.agent/skills/studio/data/stacks/nuxt-ui.csv +51 -0
- package/.agent/skills/studio/data/stacks/nuxtjs.csv +59 -0
- package/.agent/skills/studio/data/stacks/react-native.csv +52 -0
- package/.agent/skills/studio/data/stacks/react.csv +54 -0
- package/.agent/skills/studio/data/stacks/shadcn.csv +61 -0
- package/.agent/skills/studio/data/stacks/svelte.csv +54 -0
- package/.agent/skills/studio/data/stacks/swiftui.csv +51 -0
- package/.agent/skills/studio/data/stacks/vue.csv +50 -0
- package/.agent/skills/studio/data/styles.csv +59 -0
- package/.agent/skills/studio/data/typography.csv +58 -0
- package/.agent/skills/studio/data/ui-reasoning.csv +101 -0
- package/.agent/skills/studio/data/ux-guidelines.csv +100 -0
- package/.agent/skills/studio/data/web-interface.csv +31 -0
- package/.agent/skills/studio/rules/_sections.md +15 -0
- package/.agent/skills/studio/rules/_template.md +32 -0
- package/.agent/skills/studio/rules/engineering-spec.md +455 -0
- package/.agent/skills/studio/scripts/core.ts +345 -0
- package/.agent/skills/studio/scripts/design_system.ts +953 -0
- package/.agent/skills/studio/scripts/search.ts +197 -0
- package/.agent/skills/studio/scripts/types.ts +147 -0
- package/.agent/skills/studio/scripts/utils/component-specs.ts +154 -0
- package/.agent/skills/studio/scripts/utils/config-loader.ts +165 -0
- package/.agent/skills/studio/scripts/utils/css-templates.ts +169 -0
- package/.agent/skills/studio/scripts/utils/css-validator.ts +95 -0
- package/.agent/skills/studio/scripts/utils/csv-loader.ts +52 -0
- package/.agent/skills/studio/scripts/utils/intelligent-overrides.ts +129 -0
- package/.agent/skills/studio/scripts/utils/page-override-formatter.ts +143 -0
- package/.agent/skills/studio/scripts/utils/page-type-detector.ts +124 -0
- package/.agent/skills/studio/scripts/utils/search-cache.ts +165 -0
- package/.agent/skills/studio/scripts/utils/text-utils.ts +44 -0
- package/.agent/skills/system-design/AGENTS.md +597 -0
- package/.agent/skills/system-design/SKILL.md +153 -0
- package/.agent/skills/system-design/rules/_sections.md +15 -0
- package/.agent/skills/system-design/rules/_template.md +32 -0
- package/.agent/skills/system-design/rules/context-discovery.md +117 -0
- package/.agent/skills/system-design/rules/engineering-spec.md +437 -0
- package/.agent/skills/system-design/rules/examples.md +180 -0
- package/.agent/skills/system-design/rules/pattern-selection.md +130 -0
- package/.agent/skills/system-design/rules/patterns-reference.md +110 -0
- package/.agent/skills/system-design/rules/trade-off-analysis.md +169 -0
- package/.agent/skills/tailwind-kit/AGENTS.md +1135 -0
- package/.agent/skills/tailwind-kit/SKILL.md +171 -0
- package/.agent/skills/tailwind-kit/rules/_sections.md +20 -0
- package/.agent/skills/tailwind-kit/rules/_template.md +32 -0
- package/.agent/skills/tailwind-kit/rules/components.md +232 -0
- package/.agent/skills/tailwind-kit/rules/engineering-spec.md +435 -0
- package/.agent/skills/tailwind-kit/rules/responsive.md +221 -0
- package/.agent/skills/tailwind-kit/rules/v4-config.md +72 -0
- package/.agent/skills/test-architect/AGENTS.md +851 -0
- package/.agent/skills/test-architect/SKILL.md +176 -0
- package/.agent/skills/test-architect/rules/_sections.md +15 -0
- package/.agent/skills/test-architect/rules/_template.md +32 -0
- package/.agent/skills/test-architect/rules/engineering-spec.md +434 -0
- package/.agent/skills/test-architect/scripts/test_runner.ts +265 -0
- package/.agent/skills/typescript-expert/AGENTS.md +1045 -0
- package/.agent/skills/typescript-expert/SKILL.md +200 -0
- package/.agent/skills/typescript-expert/rules/_sections.md +20 -0
- package/.agent/skills/typescript-expert/rules/_template.md +32 -0
- package/.agent/skills/typescript-expert/rules/engineering-spec.md +433 -0
- package/.agent/skills/typescript-expert/rules/tsconfig-strict.json +92 -0
- package/.agent/skills/typescript-expert/rules/typescript-cheatsheet.md +407 -0
- package/.agent/skills/typescript-expert/rules/utility-types.ts +264 -0
- package/.agent/skills/typescript-expert/scripts/ts_diagnostic.ts +321 -0
- package/.agent/skills/vercel-deploy/AGENTS.md +490 -0
- package/.agent/skills/vercel-deploy/SKILL.md +175 -0
- package/.agent/skills/vercel-deploy/rules/_sections.md +15 -0
- package/.agent/skills/vercel-deploy/rules/_template.md +32 -0
- package/.agent/skills/vercel-deploy/rules/engineering-spec.md +463 -0
- package/.agent/skills/vercel-deploy/scripts/deploy.sh +310 -0
- package/.agent/workflows/api.md +377 -0
- package/.agent/workflows/autopilot.md +344 -0
- package/.agent/workflows/build.md +338 -0
- package/.agent/workflows/chronicle.md +279 -0
- package/.agent/workflows/cook.md +217 -0
- package/.agent/workflows/diagnose.md +302 -0
- package/.agent/workflows/fix.md +253 -0
- package/.agent/workflows/game.md +329 -0
- package/.agent/workflows/inspect.md +276 -0
- package/.agent/workflows/knowledge.md +212 -0
- package/.agent/workflows/launch.md +345 -0
- package/.agent/workflows/mobile.md +354 -0
- package/.agent/workflows/monitor.md +239 -0
- package/.agent/workflows/optimize.md +269 -0
- package/.agent/workflows/plan.md +278 -0
- package/.agent/workflows/stage.md +286 -0
- package/.agent/workflows/studio.md +276 -0
- package/.agent/workflows/think.md +262 -0
- package/.agent/workflows/validate.md +289 -0
- package/.agentignore +161 -0
- package/.gitattributes +16 -0
- package/CHANGELOG.md +198 -0
- package/LICENSE +40 -0
- package/README.md +173 -0
- package/docs/SKILL_DESIGN_GUIDE.md +561 -0
- package/docs/The-Complete-Guide-to-Building-Skills-for-Claude.md +1207 -0
- package/docs/WORKFLOW_DESIGN_GUIDE.md +325 -0
- package/package.json +33 -0
- package/tsconfig.json +28 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rate-limiting
|
|
3
|
+
description: Rate limiting strategies — token bucket, sliding window, Redis implementation, recommended limits
|
|
4
|
+
title: "Rate Limiting Principles"
|
|
5
|
+
impact: MEDIUM
|
|
6
|
+
impactDescription: "Moderate improvement to quality or maintainability"
|
|
7
|
+
tags: rate, limiting
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Rate Limiting Principles
|
|
11
|
+
|
|
12
|
+
> Protect your API from abuse and overload.
|
|
13
|
+
|
|
14
|
+
## Why Rate Limit
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Protect against:
|
|
18
|
+
├── Brute force attacks
|
|
19
|
+
├── Resource exhaustion
|
|
20
|
+
├── Cost overruns (if pay-per-use)
|
|
21
|
+
└── Unfair usage
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Strategy Selection
|
|
25
|
+
|
|
26
|
+
| Type | How | When |
|
|
27
|
+
|------|-----|------|
|
|
28
|
+
| **Token bucket** | Burst allowed, refills over time | Most APIs |
|
|
29
|
+
| **Sliding window** | Smooth distribution | Strict limits |
|
|
30
|
+
| **Fixed window** | Simple counters per window | Basic needs |
|
|
31
|
+
|
|
32
|
+
## Response Headers
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Include in headers:
|
|
36
|
+
├── X-RateLimit-Limit (max requests)
|
|
37
|
+
├── X-RateLimit-Remaining (requests left)
|
|
38
|
+
├── X-RateLimit-Reset (when limit resets)
|
|
39
|
+
└── Return 429 when exceeded
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Redis Implementation Pattern
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
// Sliding window with Redis
|
|
46
|
+
const key = `ratelimit:${userId}:${endpoint}`;
|
|
47
|
+
const current = await redis.incr(key);
|
|
48
|
+
if (current === 1) {
|
|
49
|
+
await redis.expire(key, windowSeconds);
|
|
50
|
+
}
|
|
51
|
+
if (current > maxRequests) {
|
|
52
|
+
throw new RateLimitError();
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Recommended Limits:**
|
|
57
|
+
| Endpoint Type | Limit | Window |
|
|
58
|
+
|---------------|-------|--------|
|
|
59
|
+
| Public API | 100 | 1 min |
|
|
60
|
+
| Authenticated | 1000 | 1 min |
|
|
61
|
+
| Auth endpoints | 5 | 15 min |
|
|
62
|
+
| File uploads | 10 | 1 hour |
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 🔗 Related
|
|
67
|
+
|
|
68
|
+
| File | When to Read |
|
|
69
|
+
|------|-------------|
|
|
70
|
+
| [security-testing.md](security-testing.md) | Rate limit bypass testing |
|
|
71
|
+
| [auth.md](auth.md) | Auth endpoint limits |
|
|
72
|
+
| [SKILL.md](../SKILL.md) | Full decision framework |
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: response
|
|
3
|
+
description: API response envelope pattern, error format, pagination, TypeScript types
|
|
4
|
+
title: "Response Format Principles"
|
|
5
|
+
impact: MEDIUM
|
|
6
|
+
impactDescription: "Moderate improvement to quality or maintainability"
|
|
7
|
+
tags: response
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Response Format Principles
|
|
11
|
+
|
|
12
|
+
> One envelope pattern for ALL endpoints — consistency is key.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Envelope Pattern (Recommended)
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
// Success response
|
|
20
|
+
interface ApiResponse<T> {
|
|
21
|
+
success: true;
|
|
22
|
+
data: T;
|
|
23
|
+
meta?: PaginationMeta;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Error response
|
|
27
|
+
interface ApiError {
|
|
28
|
+
success: false;
|
|
29
|
+
error: {
|
|
30
|
+
code: string; // Machine-readable: "VALIDATION_ERROR"
|
|
31
|
+
message: string; // Human-readable: "Email is invalid"
|
|
32
|
+
details?: Record<string, string[]>; // Field-level errors
|
|
33
|
+
requestId: string; // For support: "req_abc123"
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
type ApiResult<T> = ApiResponse<T> | ApiError;
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Usage Example
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
// Express middleware helper
|
|
44
|
+
function ok<T>(res: Response, data: T, meta?: PaginationMeta) {
|
|
45
|
+
res.json({ success: true, data, meta });
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function fail(res: Response, status: number, code: string, message: string) {
|
|
49
|
+
res.status(status).json({
|
|
50
|
+
success: false,
|
|
51
|
+
error: { code, message, requestId: res.locals.requestId },
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// In route handler
|
|
56
|
+
app.get('/users/:id', async (req, res) => {
|
|
57
|
+
const user = await db.user.findUnique({ where: { id: req.params.id } });
|
|
58
|
+
if (!user) return fail(res, 404, 'NOT_FOUND', 'User not found');
|
|
59
|
+
ok(res, user);
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Error Response Standards
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"success": false,
|
|
68
|
+
"error": {
|
|
69
|
+
"code": "VALIDATION_ERROR",
|
|
70
|
+
"message": "Invalid input data",
|
|
71
|
+
"details": {
|
|
72
|
+
"email": ["Must be a valid email"],
|
|
73
|
+
"age": ["Must be at least 18"]
|
|
74
|
+
},
|
|
75
|
+
"requestId": "req_abc123"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Never expose:** stack traces, SQL queries, internal paths, dependency versions.
|
|
81
|
+
|
|
82
|
+
## Pagination
|
|
83
|
+
|
|
84
|
+
| Type | Best For | Trade-offs |
|
|
85
|
+
|------|----------|------------|
|
|
86
|
+
| **Offset** | Simple, jumpable pages | Slow on large datasets, skip drift |
|
|
87
|
+
| **Cursor** | Large datasets, infinite scroll | Can't jump to page N |
|
|
88
|
+
| **Keyset** | Performance critical, sorted data | Requires sortable unique key |
|
|
89
|
+
|
|
90
|
+
### Pagination Response
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
interface PaginationMeta {
|
|
94
|
+
page: number;
|
|
95
|
+
limit: number;
|
|
96
|
+
total: number;
|
|
97
|
+
totalPages: number;
|
|
98
|
+
hasNext: boolean;
|
|
99
|
+
hasPrev: boolean;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Cursor-based alternative
|
|
103
|
+
interface CursorMeta {
|
|
104
|
+
cursor: string | null; // null = no more pages
|
|
105
|
+
hasMore: boolean;
|
|
106
|
+
limit: number;
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Selection Guide
|
|
111
|
+
|
|
112
|
+
1. Dataset < 10K rows → Offset pagination
|
|
113
|
+
2. Dataset > 10K, infinite scroll → Cursor pagination
|
|
114
|
+
3. Performance critical → Keyset pagination
|
|
115
|
+
4. Data frequently changing → Cursor (avoids skip drift)
|
|
116
|
+
|
|
117
|
+
## Anti-Patterns
|
|
118
|
+
|
|
119
|
+
| ❌ Don't | ✅ Do |
|
|
120
|
+
|---------|-------|
|
|
121
|
+
| Different formats per endpoint | One envelope for all endpoints |
|
|
122
|
+
| Expose stack traces in errors | Map to safe client-facing codes |
|
|
123
|
+
| Return `200 OK` with error body | Use proper HTTP status codes |
|
|
124
|
+
| No request ID in errors | Always include for debugging/support |
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 🔗 Related
|
|
129
|
+
|
|
130
|
+
| File | When to Read |
|
|
131
|
+
|------|-------------|
|
|
132
|
+
| [rest.md](rest.md) | HTTP methods + status codes |
|
|
133
|
+
| [rate-limiting.md](rate-limiting.md) | 429 response format |
|
|
134
|
+
| [SKILL.md](../SKILL.md) | Full decision framework |
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rest
|
|
3
|
+
description: REST API design — resource naming, HTTP methods, status codes, filtering, sorting
|
|
4
|
+
title: "REST Principles"
|
|
5
|
+
impact: MEDIUM
|
|
6
|
+
impactDescription: "Moderate improvement to quality or maintainability"
|
|
7
|
+
tags: rest
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# REST Principles
|
|
11
|
+
|
|
12
|
+
> Resource-based API design — nouns not verbs.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Resource Naming Rules
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
Principles:
|
|
20
|
+
├── Use NOUNS, not verbs (resources, not actions)
|
|
21
|
+
├── Use PLURAL forms (/users not /user)
|
|
22
|
+
├── Use lowercase with hyphens (/user-profiles)
|
|
23
|
+
├── Nest for relationships (/users/123/posts)
|
|
24
|
+
└── Keep shallow (max 3 levels deep)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Endpoint Examples
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
✅ Good:
|
|
31
|
+
GET /users → List users
|
|
32
|
+
GET /users/123 → Get user 123
|
|
33
|
+
POST /users → Create user
|
|
34
|
+
PUT /users/123 → Replace user 123
|
|
35
|
+
PATCH /users/123 → Partial update user 123
|
|
36
|
+
DELETE /users/123 → Delete user 123
|
|
37
|
+
GET /users/123/posts → User 123's posts
|
|
38
|
+
|
|
39
|
+
❌ Bad:
|
|
40
|
+
GET /getUsers → Verb in URL
|
|
41
|
+
POST /createUser → Verb in URL
|
|
42
|
+
GET /user → Singular
|
|
43
|
+
GET /users/123/posts/456/comments/789/likes → Too deep (>3 levels)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## HTTP Method Selection
|
|
47
|
+
|
|
48
|
+
| Method | Purpose | Idempotent? | Body? |
|
|
49
|
+
|--------|---------|-------------|-------|
|
|
50
|
+
| **GET** | Read resource(s) | Yes | No |
|
|
51
|
+
| **POST** | Create new resource | No | Yes |
|
|
52
|
+
| **PUT** | Replace entire resource | Yes | Yes |
|
|
53
|
+
| **PATCH** | Partial update | No | Yes |
|
|
54
|
+
| **DELETE** | Remove resource | Yes | No |
|
|
55
|
+
|
|
56
|
+
## Status Code Selection
|
|
57
|
+
|
|
58
|
+
| Situation | Code | When |
|
|
59
|
+
|-----------|------|------|
|
|
60
|
+
| Success (read) | 200 | GET returning data |
|
|
61
|
+
| Created | 201 | POST success, include Location header |
|
|
62
|
+
| No content | 204 | DELETE success, PUT with no response body |
|
|
63
|
+
| Bad request | 400 | Malformed JSON, missing required field |
|
|
64
|
+
| Unauthorized | 401 | Missing or invalid auth token |
|
|
65
|
+
| Forbidden | 403 | Valid auth, insufficient permissions |
|
|
66
|
+
| Not found | 404 | Resource doesn't exist |
|
|
67
|
+
| Conflict | 409 | Duplicate key, state conflict |
|
|
68
|
+
| Validation error | 422 | Valid syntax, invalid semantics |
|
|
69
|
+
| Rate limited | 429 | Too many requests, include Retry-After |
|
|
70
|
+
| Server error | 500 | Unhandled exception |
|
|
71
|
+
|
|
72
|
+
## Filtering, Sorting & Search
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
// Filtering — use query params
|
|
76
|
+
GET /users?role=admin&status=active
|
|
77
|
+
|
|
78
|
+
// Sorting — prefix with - for descending
|
|
79
|
+
GET /users?sort=-created_at,name
|
|
80
|
+
|
|
81
|
+
// Search — use q parameter
|
|
82
|
+
GET /users?q=john
|
|
83
|
+
|
|
84
|
+
// Fields projection (sparse fieldsets)
|
|
85
|
+
GET /users?fields=id,name,email
|
|
86
|
+
|
|
87
|
+
// Combined
|
|
88
|
+
GET /users?role=admin&sort=-created_at&fields=id,name&page=2&limit=20
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Anti-Patterns
|
|
92
|
+
|
|
93
|
+
| ❌ Don't | ✅ Do |
|
|
94
|
+
|---------|-------|
|
|
95
|
+
| `/getUsers`, `/deleteUser/123` | `GET /users`, `DELETE /users/123` |
|
|
96
|
+
| `/user` (singular) | `/users` (plural) |
|
|
97
|
+
| Return 200 for errors | Use semantic HTTP status codes |
|
|
98
|
+
| Nest beyond 3 levels | Use flat endpoints with filters |
|
|
99
|
+
| Ignore idempotency | Design PUT/DELETE as idempotent |
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 🔗 Related
|
|
104
|
+
|
|
105
|
+
| File | When to Read |
|
|
106
|
+
|------|-------------|
|
|
107
|
+
| [response.md](response.md) | Response envelope + pagination |
|
|
108
|
+
| [versioning.md](versioning.md) | API versioning strategy |
|
|
109
|
+
| [api-style.md](api-style.md) | REST vs GraphQL vs tRPC decision |
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security-testing
|
|
3
|
+
description: OWASP API Top 10, JWT testing, BOLA/IDOR, authorization and input validation testing
|
|
4
|
+
title: "API Security Testing"
|
|
5
|
+
impact: HIGH
|
|
6
|
+
impactDescription: "Important architectural or correctness impact"
|
|
7
|
+
tags: security, testing
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# API Security Testing
|
|
11
|
+
|
|
12
|
+
> Principles for testing API security. OWASP API Top 10, authentication, authorization testing.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## OWASP API Security Top 10
|
|
17
|
+
|
|
18
|
+
| Vulnerability | Test Focus |
|
|
19
|
+
|---------------|------------|
|
|
20
|
+
| **API1: BOLA** | Access other users' resources |
|
|
21
|
+
| **API2: Broken Auth** | JWT, session, credentials |
|
|
22
|
+
| **API3: Property Auth** | Mass assignment, data exposure |
|
|
23
|
+
| **API4: Resource Consumption** | Rate limiting, DoS |
|
|
24
|
+
| **API5: Function Auth** | Admin endpoints, role bypass |
|
|
25
|
+
| **API6: Business Flow** | Logic abuse, automation |
|
|
26
|
+
| **API7: SSRF** | Internal network access |
|
|
27
|
+
| **API8: Misconfiguration** | Debug endpoints, CORS |
|
|
28
|
+
| **API9: Inventory** | Shadow APIs, old versions |
|
|
29
|
+
| **API10: Unsafe Consumption** | Third-party API trust |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Authentication Testing
|
|
34
|
+
|
|
35
|
+
### JWT Testing
|
|
36
|
+
|
|
37
|
+
| Check | What to Test |
|
|
38
|
+
|-------|--------------|
|
|
39
|
+
| Algorithm | None, algorithm confusion |
|
|
40
|
+
| Secret | Weak secrets, brute force |
|
|
41
|
+
| Claims | Expiration, issuer, audience |
|
|
42
|
+
| Signature | Manipulation, key injection |
|
|
43
|
+
|
|
44
|
+
### Session Testing
|
|
45
|
+
|
|
46
|
+
| Check | What to Test |
|
|
47
|
+
|-------|--------------|
|
|
48
|
+
| Generation | Predictability |
|
|
49
|
+
| Storage | Client-side security |
|
|
50
|
+
| Expiration | Timeout enforcement |
|
|
51
|
+
| Invalidation | Logout effectiveness |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Authorization Testing
|
|
56
|
+
|
|
57
|
+
| Test Type | Approach |
|
|
58
|
+
|-----------|----------|
|
|
59
|
+
| **Horizontal** | Access peer users' data |
|
|
60
|
+
| **Vertical** | Access higher privilege functions |
|
|
61
|
+
| **Context** | Access outside allowed scope |
|
|
62
|
+
|
|
63
|
+
### BOLA/IDOR Testing
|
|
64
|
+
|
|
65
|
+
1. Identify resource IDs in requests
|
|
66
|
+
2. Capture request with user A's session
|
|
67
|
+
3. Replay with user B's session
|
|
68
|
+
4. Check for unauthorized access
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Input Validation Testing
|
|
73
|
+
|
|
74
|
+
| Injection Type | Test Focus |
|
|
75
|
+
|----------------|------------|
|
|
76
|
+
| SQL | Query manipulation |
|
|
77
|
+
| NoSQL | Document queries |
|
|
78
|
+
| Command | System commands |
|
|
79
|
+
| LDAP | Directory queries |
|
|
80
|
+
|
|
81
|
+
**Approach:** Test all parameters, try type coercion, test boundaries, check error messages.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Rate Limiting Testing
|
|
86
|
+
|
|
87
|
+
| Aspect | Check |
|
|
88
|
+
|--------|-------|
|
|
89
|
+
| Existence | Is there any limit? |
|
|
90
|
+
| Bypass | Headers, IP rotation |
|
|
91
|
+
| Scope | Per-user, per-IP, global |
|
|
92
|
+
|
|
93
|
+
**Bypass techniques:** X-Forwarded-For, different HTTP methods, case variations, API versioning.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## GraphQL Security
|
|
98
|
+
|
|
99
|
+
| Test | Focus |
|
|
100
|
+
|------|-------|
|
|
101
|
+
| Introspection | Schema disclosure |
|
|
102
|
+
| Batching | Query DoS |
|
|
103
|
+
| Nesting | Depth-based DoS |
|
|
104
|
+
| Authorization | Field-level access |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Security Testing Checklist
|
|
109
|
+
|
|
110
|
+
**Authentication:**
|
|
111
|
+
- [ ] Test for bypass
|
|
112
|
+
- [ ] Check credential strength
|
|
113
|
+
- [ ] Verify token security
|
|
114
|
+
|
|
115
|
+
**Authorization:**
|
|
116
|
+
- [ ] Test BOLA/IDOR
|
|
117
|
+
- [ ] Check privilege escalation
|
|
118
|
+
- [ ] Verify function access
|
|
119
|
+
|
|
120
|
+
**Input:**
|
|
121
|
+
- [ ] Test all parameters
|
|
122
|
+
- [ ] Check for injection
|
|
123
|
+
|
|
124
|
+
**Config:**
|
|
125
|
+
- [ ] Check CORS
|
|
126
|
+
- [ ] Verify headers
|
|
127
|
+
- [ ] Test error handling
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
> **Remember:** APIs are the backbone of modern apps. Test them like attackers will.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 🔗 Related
|
|
136
|
+
|
|
137
|
+
| File | When to Read |
|
|
138
|
+
|------|-------------|
|
|
139
|
+
| [auth.md](auth.md) | Auth patterns to test |
|
|
140
|
+
| [rate-limiting.md](rate-limiting.md) | Rate limit bypass testing |
|
|
141
|
+
| [graphql.md](graphql.md) | GraphQL-specific security |
|
|
142
|
+
| [SKILL.md](../SKILL.md) | Full decision framework |
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: trpc
|
|
3
|
+
description: tRPC router patterns, Zod validation, React Query client for TypeScript monorepos
|
|
4
|
+
title: "tRPC Principles"
|
|
5
|
+
impact: MEDIUM
|
|
6
|
+
impactDescription: "Moderate improvement to quality or maintainability"
|
|
7
|
+
tags: trpc
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# tRPC Principles
|
|
11
|
+
|
|
12
|
+
> End-to-end type safety for TypeScript monorepos — zero code generation.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
✅ Perfect fit:
|
|
20
|
+
├── TypeScript on both ends
|
|
21
|
+
├── Monorepo structure
|
|
22
|
+
├── Internal tools / dashboards
|
|
23
|
+
├── Rapid development
|
|
24
|
+
└── Type safety is critical
|
|
25
|
+
|
|
26
|
+
❌ Poor fit:
|
|
27
|
+
├── Non-TypeScript clients
|
|
28
|
+
├── Public API (need OpenAPI docs)
|
|
29
|
+
├── Need REST conventions (caching)
|
|
30
|
+
└── Multiple language backends
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Router Definition
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
// server/trpc.ts — Base setup
|
|
37
|
+
import { initTRPC, TRPCError } from '@trpc/server';
|
|
38
|
+
import { z } from 'zod';
|
|
39
|
+
|
|
40
|
+
const t = initTRPC.context<Context>().create();
|
|
41
|
+
|
|
42
|
+
export const router = t.router;
|
|
43
|
+
export const publicProcedure = t.procedure;
|
|
44
|
+
export const protectedProcedure = t.procedure.use(isAuthed);
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
// server/routers/user.ts — Router with Zod validation
|
|
49
|
+
export const userRouter = router({
|
|
50
|
+
getById: publicProcedure
|
|
51
|
+
.input(z.string().uuid())
|
|
52
|
+
.query(async ({ input, ctx }) => {
|
|
53
|
+
const user = await ctx.db.user.findUnique({ where: { id: input } });
|
|
54
|
+
if (!user) throw new TRPCError({ code: 'NOT_FOUND' });
|
|
55
|
+
return user;
|
|
56
|
+
}),
|
|
57
|
+
|
|
58
|
+
create: protectedProcedure
|
|
59
|
+
.input(z.object({
|
|
60
|
+
name: z.string().min(1).max(100),
|
|
61
|
+
email: z.string().email(),
|
|
62
|
+
role: z.enum(['user', 'admin']).default('user'),
|
|
63
|
+
}))
|
|
64
|
+
.mutation(async ({ input, ctx }) => {
|
|
65
|
+
return ctx.db.user.create({ data: input });
|
|
66
|
+
}),
|
|
67
|
+
|
|
68
|
+
list: publicProcedure
|
|
69
|
+
.input(z.object({
|
|
70
|
+
page: z.number().int().min(1).default(1),
|
|
71
|
+
limit: z.number().int().min(1).max(100).default(20),
|
|
72
|
+
}))
|
|
73
|
+
.query(async ({ input, ctx }) => {
|
|
74
|
+
const { page, limit } = input;
|
|
75
|
+
const [data, total] = await Promise.all([
|
|
76
|
+
ctx.db.user.findMany({ skip: (page - 1) * limit, take: limit }),
|
|
77
|
+
ctx.db.user.count(),
|
|
78
|
+
]);
|
|
79
|
+
return { data, total, totalPages: Math.ceil(total / limit) };
|
|
80
|
+
}),
|
|
81
|
+
});
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Client Usage (React Query)
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
// Client — fully typed, zero codegen
|
|
88
|
+
import { trpc } from '~/utils/trpc';
|
|
89
|
+
|
|
90
|
+
function UserProfile({ id }: { id: string }) {
|
|
91
|
+
const { data: user } = trpc.user.getById.useQuery(id);
|
|
92
|
+
const createUser = trpc.user.create.useMutation();
|
|
93
|
+
|
|
94
|
+
// Autocomplete works across the full stack
|
|
95
|
+
return <div>{user?.name}</div>;
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Integration Patterns
|
|
100
|
+
|
|
101
|
+
| Setup | Framework | Notes |
|
|
102
|
+
|-------|-----------|-------|
|
|
103
|
+
| Next.js + tRPC | `@trpc/next` | App Router + RSC support |
|
|
104
|
+
| Remix + tRPC | Custom adapter | Less common |
|
|
105
|
+
| Monorepo | Shared `@repo/trpc` package | Most scalable |
|
|
106
|
+
| Standalone | Express adapter | `@trpc/server/adapters/express` |
|
|
107
|
+
|
|
108
|
+
## Anti-Patterns
|
|
109
|
+
|
|
110
|
+
| ❌ Don't | ✅ Do |
|
|
111
|
+
|---------|-------|
|
|
112
|
+
| Use tRPC for public APIs | Use REST + OpenAPI for public |
|
|
113
|
+
| Skip Zod validation | Always validate with `.input(z.object(...))` |
|
|
114
|
+
| Put all routes in one file | Split into domain routers (`userRouter`, `postRouter`) |
|
|
115
|
+
| Catch errors silently | Throw `TRPCError` with proper codes |
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 🔗 Related
|
|
120
|
+
|
|
121
|
+
| File | When to Read |
|
|
122
|
+
|------|-------------|
|
|
123
|
+
| [api-style.md](api-style.md) | REST vs GraphQL vs tRPC decision |
|
|
124
|
+
| [auth.md](auth.md) | Auth middleware patterns |
|
|
125
|
+
| [SKILL.md](../SKILL.md) | Full decision framework |
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: versioning
|
|
3
|
+
description: API versioning strategies — URI, header, query; deprecation and sunset policies
|
|
4
|
+
title: "Versioning Strategies"
|
|
5
|
+
impact: MEDIUM
|
|
6
|
+
impactDescription: "Moderate improvement to quality or maintainability"
|
|
7
|
+
tags: versioning
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Versioning Strategies
|
|
11
|
+
|
|
12
|
+
> Plan for API evolution from day one.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Strategy Selection
|
|
17
|
+
|
|
18
|
+
| Strategy | Implementation | Best For | Trade-offs |
|
|
19
|
+
|----------|---------------|----------|------------|
|
|
20
|
+
| **URI** | `/v1/users` | Public APIs | Clear, easy caching; URL pollution |
|
|
21
|
+
| **Header** | `Accept-Version: 1` | Internal APIs | Clean URLs; harder discovery |
|
|
22
|
+
| **Query** | `?version=1` | Quick prototypes | Easy to add; messy, cache-unfriendly |
|
|
23
|
+
| **None** | Evolve carefully | GraphQL, tRPC | Simplest; risky for REST public APIs |
|
|
24
|
+
|
|
25
|
+
## Decision Guide
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Is it a public REST API?
|
|
29
|
+
├── Yes → URI versioning (/v1/users)
|
|
30
|
+
│ Most discoverable, best tooling support
|
|
31
|
+
│
|
|
32
|
+
├── Internal REST only? → Header versioning
|
|
33
|
+
│ Cleaner URLs, version-aware clients
|
|
34
|
+
│
|
|
35
|
+
├── GraphQL? → No versioning (evolve schema)
|
|
36
|
+
│ Add fields, deprecate old ones
|
|
37
|
+
│
|
|
38
|
+
└── tRPC? → No versioning (types enforce compat)
|
|
39
|
+
Breaking changes caught at compile time
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## URI Versioning Example
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
// Express — version in path
|
|
46
|
+
import { Router } from 'express';
|
|
47
|
+
|
|
48
|
+
const v1 = Router();
|
|
49
|
+
v1.get('/users', getUsersV1);
|
|
50
|
+
v1.get('/users/:id', getUserByIdV1);
|
|
51
|
+
|
|
52
|
+
const v2 = Router();
|
|
53
|
+
v2.get('/users', getUsersV2); // Changed response format
|
|
54
|
+
v2.get('/users/:id', getUserByIdV2);
|
|
55
|
+
|
|
56
|
+
app.use('/api/v1', v1);
|
|
57
|
+
app.use('/api/v2', v2);
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Deprecation & Sunset
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
// Deprecation headers (RFC 8594)
|
|
64
|
+
app.use('/api/v1', (req, res, next) => {
|
|
65
|
+
res.set('Deprecation', 'true');
|
|
66
|
+
res.set('Sunset', 'Sat, 01 Jun 2026 00:00:00 GMT');
|
|
67
|
+
res.set('Link', '</api/v2>; rel="successor-version"');
|
|
68
|
+
next();
|
|
69
|
+
});
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Sunset Policy:**
|
|
73
|
+
1. Announce deprecation with `Deprecation: true` header
|
|
74
|
+
2. Set `Sunset` date (minimum 6 months for public APIs)
|
|
75
|
+
3. Include `Link` header pointing to successor
|
|
76
|
+
4. Monitor usage — notify active consumers
|
|
77
|
+
5. Remove after sunset date
|
|
78
|
+
|
|
79
|
+
## Anti-Patterns
|
|
80
|
+
|
|
81
|
+
| ❌ Don't | ✅ Do |
|
|
82
|
+
|---------|-------|
|
|
83
|
+
| Version after breaking changes | Define strategy before first endpoint |
|
|
84
|
+
| Remove old version without notice | Sunset with 6+ months warning |
|
|
85
|
+
| Mix versioning strategies | Pick one approach |
|
|
86
|
+
| Version internal tRPC APIs | Let TypeScript catch breaking changes |
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 🔗 Related
|
|
91
|
+
|
|
92
|
+
| File | When to Read |
|
|
93
|
+
|------|-------------|
|
|
94
|
+
| [rest.md](rest.md) | REST endpoint design |
|
|
95
|
+
| [documentation.md](documentation.md) | Documenting versions |
|
|
96
|
+
| [api-style.md](api-style.md) | API style decision |
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
⚡ PikaKit v3.9.134
|