create-raffles-it 1.0.1
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/LICENSE +21 -0
- package/README.md +214 -0
- package/agents/.agents +105 -0
- package/agents/backend-specialist/agent.yaml +21 -0
- package/agents/backend-specialist/prompt.md +255 -0
- package/agents/code-archaeologist/agent.yaml +13 -0
- package/agents/code-archaeologist/prompt.md +98 -0
- package/agents/database-architect/agent.yaml +13 -0
- package/agents/database-architect/prompt.md +218 -0
- package/agents/debugger/agent.yaml +7 -0
- package/agents/debugger/prompt.md +219 -0
- package/agents/devops-engineer/agent.yaml +16 -0
- package/agents/devops-engineer/prompt.md +234 -0
- package/agents/documentation-writer/agent.yaml +13 -0
- package/agents/documentation-writer/prompt.md +96 -0
- package/agents/explorer-agent/agent.yaml +16 -0
- package/agents/explorer-agent/prompt.md +65 -0
- package/agents/frontend-specialist/agent.yaml +17 -0
- package/agents/frontend-specialist/prompt.md +585 -0
- package/agents/orchestrator/agent.yaml +21 -0
- package/agents/orchestrator/prompt.md +408 -0
- package/agents/penetration-tester/agent.yaml +15 -0
- package/agents/penetration-tester/prompt.md +180 -0
- package/agents/performance-optimizer/agent.yaml +13 -0
- package/agents/performance-optimizer/prompt.md +179 -0
- package/agents/product-manager/agent.yaml +12 -0
- package/agents/product-manager/prompt.md +104 -0
- package/agents/product-owner/agent.yaml +12 -0
- package/agents/product-owner/prompt.md +87 -0
- package/agents/project-planner/agent.yaml +13 -0
- package/agents/project-planner/prompt.md +397 -0
- package/agents/qa-automation-engineer/agent.yaml +16 -0
- package/agents/qa-automation-engineer/prompt.md +95 -0
- package/agents/security-auditor/agent.yaml +15 -0
- package/agents/security-auditor/prompt.md +162 -0
- package/agents/seo-specialist/agent.yaml +13 -0
- package/agents/seo-specialist/prompt.md +103 -0
- package/agents/test-engineer/agent.yaml +17 -0
- package/agents/test-engineer/prompt.md +150 -0
- package/bin/commands/help.js +19 -0
- package/bin/commands/init.js +125 -0
- package/bin/commands/list.js +40 -0
- package/bin/index.js +44 -0
- package/bin/utils/logger.js +32 -0
- package/bin/utils/scaffold.js +114 -0
- package/configs/mcp_config.json +24 -0
- package/configs/model.yaml +20 -0
- package/configs/runtime.yaml +22 -0
- package/package.json +56 -0
- package/prompts/planning.md +31 -0
- package/prompts/reflection.md +21 -0
- package/prompts/system.md +24 -0
- package/rules/GEMINI.md +273 -0
- package/skills/api-patterns/SKILL.md +81 -0
- package/skills/api-patterns/api-style.md +42 -0
- package/skills/api-patterns/auth.md +24 -0
- package/skills/api-patterns/documentation.md +26 -0
- package/skills/api-patterns/graphql.md +41 -0
- package/skills/api-patterns/rate-limiting.md +31 -0
- package/skills/api-patterns/response.md +37 -0
- package/skills/api-patterns/rest.md +40 -0
- package/skills/api-patterns/scripts/api_validator.py +211 -0
- package/skills/api-patterns/security-testing.md +122 -0
- package/skills/api-patterns/skill.yaml +3 -0
- package/skills/api-patterns/trpc.md +41 -0
- package/skills/api-patterns/versioning.md +22 -0
- package/skills/architecture/SKILL.md +55 -0
- package/skills/architecture/context-discovery.md +43 -0
- package/skills/architecture/examples.md +94 -0
- package/skills/architecture/pattern-selection.md +68 -0
- package/skills/architecture/patterns-reference.md +50 -0
- package/skills/architecture/skill.yaml +3 -0
- package/skills/architecture/trade-off-analysis.md +77 -0
- package/skills/brainstorming/SKILL.md +163 -0
- package/skills/brainstorming/dynamic-questioning.md +350 -0
- package/skills/brainstorming/skill.yaml +3 -0
- package/skills/clean-code/SKILL.md +201 -0
- package/skills/clean-code/skill.yaml +3 -0
- package/skills/code-review-checklist/SKILL.md +109 -0
- package/skills/code-review-checklist/skill.yaml +3 -0
- package/skills/database-design/SKILL.md +52 -0
- package/skills/database-design/database-selection.md +43 -0
- package/skills/database-design/indexing.md +39 -0
- package/skills/database-design/migrations.md +48 -0
- package/skills/database-design/optimization.md +36 -0
- package/skills/database-design/orm-selection.md +30 -0
- package/skills/database-design/schema-design.md +56 -0
- package/skills/database-design/scripts/schema_validator.py +172 -0
- package/skills/database-design/skill.yaml +3 -0
- package/skills/frontend-design/SKILL.md +452 -0
- package/skills/frontend-design/animation-guide.md +331 -0
- package/skills/frontend-design/color-system.md +311 -0
- package/skills/frontend-design/decision-trees.md +418 -0
- package/skills/frontend-design/motion-graphics.md +306 -0
- package/skills/frontend-design/scripts/accessibility_checker.py +183 -0
- package/skills/frontend-design/scripts/ux_audit.py +722 -0
- package/skills/frontend-design/skill.yaml +3 -0
- package/skills/frontend-design/typography-system.md +345 -0
- package/skills/frontend-design/ux-psychology.md +1116 -0
- package/skills/frontend-design/visual-effects.md +383 -0
- package/skills/mcp-builder/SKILL.md +176 -0
- package/skills/mcp-builder/skill.yaml +3 -0
- package/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +351 -0
- package/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -0
- package/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -0
- package/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -0
- package/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
- package/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -0
- package/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -0
- package/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -0
- package/skills/nextjs-react-expert/9-cache-components.md +103 -0
- package/skills/nextjs-react-expert/SKILL.md +293 -0
- package/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
- package/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
- package/skills/nextjs-react-expert/skill.yaml +3 -0
- package/skills/nodejs-best-practices/SKILL.md +333 -0
- package/skills/nodejs-best-practices/skill.yaml +3 -0
- package/skills/parallel-agents/SKILL.md +175 -0
- package/skills/parallel-agents/skill.yaml +3 -0
- package/skills/powershell-windows/SKILL.md +167 -0
- package/skills/powershell-windows/skill.yaml +3 -0
- package/skills/python-patterns/SKILL.md +441 -0
- package/skills/python-patterns/skill.yaml +3 -0
- package/skills/seo-fundamentals/SKILL.md +129 -0
- package/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/skills/seo-fundamentals/skill.yaml +3 -0
- package/skills/systematic-debugging/SKILL.md +109 -0
- package/skills/systematic-debugging/skill.yaml +3 -0
- package/skills/tdd-workflow/SKILL.md +149 -0
- package/skills/tdd-workflow/skill.yaml +3 -0
- package/skills/vulnerability-scanner/SKILL.md +276 -0
- package/skills/vulnerability-scanner/checklists.md +121 -0
- package/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/skills/vulnerability-scanner/skill.yaml +3 -0
- package/skills/web-design-guidelines/SKILL.md +57 -0
- package/skills/web-design-guidelines/skill.yaml +3 -0
- package/skills/webapp-testing/SKILL.md +187 -0
- package/skills/webapp-testing/scripts/playwright_runner.py +173 -0
- package/skills/webapp-testing/skill.yaml +3 -0
- package/workflows/brainstorm.md +113 -0
- package/workflows/create.md +59 -0
- package/workflows/debug.md +103 -0
- package/workflows/deploy.md +176 -0
- package/workflows/enhance.md +63 -0
- package/workflows/orchestrate.md +237 -0
- package/workflows/plan.md +89 -0
- package/workflows/preview.md +81 -0
- package/workflows/status.md +86 -0
- package/workflows/test.md +144 -0
- package/workflows/ui-ux-pro-max.md +296 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Response Format Principles
|
|
2
|
+
|
|
3
|
+
> Consistency is key - choose a format and stick to it.
|
|
4
|
+
|
|
5
|
+
## Common Patterns
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Choose one:
|
|
9
|
+
├── Envelope pattern ({ success, data, error })
|
|
10
|
+
├── Direct data (just return the resource)
|
|
11
|
+
└── HAL/JSON:API (hypermedia)
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Error Response
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Include:
|
|
18
|
+
├── Error code (for programmatic handling)
|
|
19
|
+
├── User message (for display)
|
|
20
|
+
├── Details (for debugging, field-level errors)
|
|
21
|
+
├── Request ID (for support)
|
|
22
|
+
└── NOT internal details (security!)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Pagination Types
|
|
26
|
+
|
|
27
|
+
| Type | Best For | Trade-offs |
|
|
28
|
+
|------|----------|------------|
|
|
29
|
+
| **Offset** | Simple, jumpable | Performance on large datasets |
|
|
30
|
+
| **Cursor** | Large datasets | Can't jump to page |
|
|
31
|
+
| **Keyset** | Performance critical | Requires sortable key |
|
|
32
|
+
|
|
33
|
+
### Selection Questions
|
|
34
|
+
|
|
35
|
+
1. How large is the dataset?
|
|
36
|
+
2. Do users need to jump to specific pages?
|
|
37
|
+
3. Is data frequently changing?
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# REST Principles
|
|
2
|
+
|
|
3
|
+
> Resource-based API design - nouns not verbs.
|
|
4
|
+
|
|
5
|
+
## Resource Naming Rules
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Principles:
|
|
9
|
+
├── Use NOUNS, not verbs (resources, not actions)
|
|
10
|
+
├── Use PLURAL forms (/users not /user)
|
|
11
|
+
├── Use lowercase with hyphens (/user-profiles)
|
|
12
|
+
├── Nest for relationships (/users/123/posts)
|
|
13
|
+
└── Keep shallow (max 3 levels deep)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## HTTP Method Selection
|
|
17
|
+
|
|
18
|
+
| Method | Purpose | Idempotent? | Body? |
|
|
19
|
+
|--------|---------|-------------|-------|
|
|
20
|
+
| **GET** | Read resource(s) | Yes | No |
|
|
21
|
+
| **POST** | Create new resource | No | Yes |
|
|
22
|
+
| **PUT** | Replace entire resource | Yes | Yes |
|
|
23
|
+
| **PATCH** | Partial update | No | Yes |
|
|
24
|
+
| **DELETE** | Remove resource | Yes | No |
|
|
25
|
+
|
|
26
|
+
## Status Code Selection
|
|
27
|
+
|
|
28
|
+
| Situation | Code | Why |
|
|
29
|
+
|-----------|------|-----|
|
|
30
|
+
| Success (read) | 200 | Standard success |
|
|
31
|
+
| Created | 201 | New resource created |
|
|
32
|
+
| No content | 204 | Success, nothing to return |
|
|
33
|
+
| Bad request | 400 | Malformed request |
|
|
34
|
+
| Unauthorized | 401 | Missing/invalid auth |
|
|
35
|
+
| Forbidden | 403 | Valid auth, no permission |
|
|
36
|
+
| Not found | 404 | Resource doesn't exist |
|
|
37
|
+
| Conflict | 409 | State conflict (duplicate) |
|
|
38
|
+
| Validation error | 422 | Valid syntax, invalid data |
|
|
39
|
+
| Rate limited | 429 | Too many requests |
|
|
40
|
+
| Server error | 500 | Our fault |
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
API Validator - Checks API endpoints for best practices.
|
|
4
|
+
Validates OpenAPI specs, response formats, and common issues.
|
|
5
|
+
"""
|
|
6
|
+
import sys
|
|
7
|
+
import json
|
|
8
|
+
import re
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
# Fix Windows console encoding for Unicode output
|
|
12
|
+
try:
|
|
13
|
+
sys.stdout.reconfigure(encoding='utf-8', errors='replace')
|
|
14
|
+
sys.stderr.reconfigure(encoding='utf-8', errors='replace')
|
|
15
|
+
except AttributeError:
|
|
16
|
+
pass # Python < 3.7
|
|
17
|
+
|
|
18
|
+
def find_api_files(project_path: Path) -> list:
|
|
19
|
+
"""Find API-related files."""
|
|
20
|
+
patterns = [
|
|
21
|
+
"**/*api*.ts", "**/*api*.js", "**/*api*.py",
|
|
22
|
+
"**/routes/*.ts", "**/routes/*.js", "**/routes/*.py",
|
|
23
|
+
"**/controllers/*.ts", "**/controllers/*.js",
|
|
24
|
+
"**/endpoints/*.ts", "**/endpoints/*.py",
|
|
25
|
+
"**/*.openapi.json", "**/*.openapi.yaml",
|
|
26
|
+
"**/swagger.json", "**/swagger.yaml",
|
|
27
|
+
"**/openapi.json", "**/openapi.yaml"
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
files = []
|
|
31
|
+
for pattern in patterns:
|
|
32
|
+
files.extend(project_path.glob(pattern))
|
|
33
|
+
|
|
34
|
+
# Exclude node_modules, etc.
|
|
35
|
+
return [f for f in files if not any(x in str(f) for x in ['node_modules', '.git', 'dist', 'build', '__pycache__'])]
|
|
36
|
+
|
|
37
|
+
def check_openapi_spec(file_path: Path) -> dict:
|
|
38
|
+
"""Check OpenAPI/Swagger specification."""
|
|
39
|
+
issues = []
|
|
40
|
+
passed = []
|
|
41
|
+
|
|
42
|
+
try:
|
|
43
|
+
content = file_path.read_text(encoding='utf-8')
|
|
44
|
+
|
|
45
|
+
if file_path.suffix == '.json':
|
|
46
|
+
spec = json.loads(content)
|
|
47
|
+
else:
|
|
48
|
+
# Basic YAML check
|
|
49
|
+
if 'openapi:' in content or 'swagger:' in content:
|
|
50
|
+
passed.append("[OK] OpenAPI/Swagger version defined")
|
|
51
|
+
else:
|
|
52
|
+
issues.append("[X] No OpenAPI version found")
|
|
53
|
+
|
|
54
|
+
if 'paths:' in content:
|
|
55
|
+
passed.append("[OK] Paths section exists")
|
|
56
|
+
else:
|
|
57
|
+
issues.append("[X] No paths defined")
|
|
58
|
+
|
|
59
|
+
if 'components:' in content or 'definitions:' in content:
|
|
60
|
+
passed.append("[OK] Schema components defined")
|
|
61
|
+
|
|
62
|
+
return {'file': str(file_path), 'passed': passed, 'issues': issues, 'type': 'openapi'}
|
|
63
|
+
|
|
64
|
+
# JSON OpenAPI checks
|
|
65
|
+
if 'openapi' in spec or 'swagger' in spec:
|
|
66
|
+
passed.append("[OK] OpenAPI version defined")
|
|
67
|
+
|
|
68
|
+
if 'info' in spec:
|
|
69
|
+
if 'title' in spec['info']:
|
|
70
|
+
passed.append("[OK] API title defined")
|
|
71
|
+
if 'version' in spec['info']:
|
|
72
|
+
passed.append("[OK] API version defined")
|
|
73
|
+
if 'description' not in spec['info']:
|
|
74
|
+
issues.append("[!] API description missing")
|
|
75
|
+
|
|
76
|
+
if 'paths' in spec:
|
|
77
|
+
path_count = len(spec['paths'])
|
|
78
|
+
passed.append(f"[OK] {path_count} endpoints defined")
|
|
79
|
+
|
|
80
|
+
# Check each path
|
|
81
|
+
for path, methods in spec['paths'].items():
|
|
82
|
+
for method, details in methods.items():
|
|
83
|
+
if method in ['get', 'post', 'put', 'patch', 'delete']:
|
|
84
|
+
if 'responses' not in details:
|
|
85
|
+
issues.append(f"[X] {method.upper()} {path}: No responses defined")
|
|
86
|
+
if 'summary' not in details and 'description' not in details:
|
|
87
|
+
issues.append(f"[!] {method.upper()} {path}: No description")
|
|
88
|
+
|
|
89
|
+
except Exception as e:
|
|
90
|
+
issues.append(f"[X] Parse error: {e}")
|
|
91
|
+
|
|
92
|
+
return {'file': str(file_path), 'passed': passed, 'issues': issues, 'type': 'openapi'}
|
|
93
|
+
|
|
94
|
+
def check_api_code(file_path: Path) -> dict:
|
|
95
|
+
"""Check API code for common issues."""
|
|
96
|
+
issues = []
|
|
97
|
+
passed = []
|
|
98
|
+
|
|
99
|
+
try:
|
|
100
|
+
content = file_path.read_text(encoding='utf-8')
|
|
101
|
+
|
|
102
|
+
# Check for error handling
|
|
103
|
+
error_patterns = [
|
|
104
|
+
r'try\s*{', r'try:', r'\.catch\(',
|
|
105
|
+
r'except\s+', r'catch\s*\('
|
|
106
|
+
]
|
|
107
|
+
has_error_handling = any(re.search(p, content) for p in error_patterns)
|
|
108
|
+
if has_error_handling:
|
|
109
|
+
passed.append("[OK] Error handling present")
|
|
110
|
+
else:
|
|
111
|
+
issues.append("[X] No error handling found")
|
|
112
|
+
|
|
113
|
+
# Check for status codes
|
|
114
|
+
status_patterns = [
|
|
115
|
+
r'status\s*\(\s*\d{3}\s*\)', r'statusCode\s*[=:]\s*\d{3}',
|
|
116
|
+
r'HttpStatus\.', r'status_code\s*=\s*\d{3}',
|
|
117
|
+
r'\.status\(\d{3}\)', r'res\.status\('
|
|
118
|
+
]
|
|
119
|
+
has_status = any(re.search(p, content) for p in status_patterns)
|
|
120
|
+
if has_status:
|
|
121
|
+
passed.append("[OK] HTTP status codes used")
|
|
122
|
+
else:
|
|
123
|
+
issues.append("[!] No explicit HTTP status codes")
|
|
124
|
+
|
|
125
|
+
# Check for validation
|
|
126
|
+
validation_patterns = [
|
|
127
|
+
r'validate', r'schema', r'zod', r'joi', r'yup',
|
|
128
|
+
r'pydantic', r'@Body\(', r'@Query\('
|
|
129
|
+
]
|
|
130
|
+
has_validation = any(re.search(p, content, re.I) for p in validation_patterns)
|
|
131
|
+
if has_validation:
|
|
132
|
+
passed.append("[OK] Input validation present")
|
|
133
|
+
else:
|
|
134
|
+
issues.append("[!] No input validation detected")
|
|
135
|
+
|
|
136
|
+
# Check for auth middleware
|
|
137
|
+
auth_patterns = [
|
|
138
|
+
r'auth', r'jwt', r'bearer', r'token',
|
|
139
|
+
r'middleware', r'guard', r'@Authenticated'
|
|
140
|
+
]
|
|
141
|
+
has_auth = any(re.search(p, content, re.I) for p in auth_patterns)
|
|
142
|
+
if has_auth:
|
|
143
|
+
passed.append("[OK] Authentication/authorization detected")
|
|
144
|
+
|
|
145
|
+
# Check for rate limiting
|
|
146
|
+
rate_patterns = [r'rateLimit', r'throttle', r'rate.?limit']
|
|
147
|
+
has_rate = any(re.search(p, content, re.I) for p in rate_patterns)
|
|
148
|
+
if has_rate:
|
|
149
|
+
passed.append("[OK] Rate limiting present")
|
|
150
|
+
|
|
151
|
+
# Check for logging
|
|
152
|
+
log_patterns = [r'console\.log', r'logger\.', r'logging\.', r'log\.']
|
|
153
|
+
has_logging = any(re.search(p, content) for p in log_patterns)
|
|
154
|
+
if has_logging:
|
|
155
|
+
passed.append("[OK] Logging present")
|
|
156
|
+
|
|
157
|
+
except Exception as e:
|
|
158
|
+
issues.append(f"[X] Read error: {e}")
|
|
159
|
+
|
|
160
|
+
return {'file': str(file_path), 'passed': passed, 'issues': issues, 'type': 'code'}
|
|
161
|
+
|
|
162
|
+
def main():
|
|
163
|
+
target = sys.argv[1] if len(sys.argv) > 1 else "."
|
|
164
|
+
project_path = Path(target)
|
|
165
|
+
|
|
166
|
+
print("\n" + "=" * 60)
|
|
167
|
+
print(" API VALIDATOR - Endpoint Best Practices Check")
|
|
168
|
+
print("=" * 60 + "\n")
|
|
169
|
+
|
|
170
|
+
api_files = find_api_files(project_path)
|
|
171
|
+
|
|
172
|
+
if not api_files:
|
|
173
|
+
print("[!] No API files found.")
|
|
174
|
+
print(" Looking for: routes/, controllers/, api/, openapi.json/yaml")
|
|
175
|
+
sys.exit(0)
|
|
176
|
+
|
|
177
|
+
results = []
|
|
178
|
+
for file_path in api_files[:15]: # Limit
|
|
179
|
+
if 'openapi' in file_path.name.lower() or 'swagger' in file_path.name.lower():
|
|
180
|
+
result = check_openapi_spec(file_path)
|
|
181
|
+
else:
|
|
182
|
+
result = check_api_code(file_path)
|
|
183
|
+
results.append(result)
|
|
184
|
+
|
|
185
|
+
# Print results
|
|
186
|
+
total_issues = 0
|
|
187
|
+
total_passed = 0
|
|
188
|
+
|
|
189
|
+
for result in results:
|
|
190
|
+
print(f"\n[FILE] {result['file']} [{result['type']}]")
|
|
191
|
+
for item in result['passed']:
|
|
192
|
+
print(f" {item}")
|
|
193
|
+
total_passed += 1
|
|
194
|
+
for item in result['issues']:
|
|
195
|
+
print(f" {item}")
|
|
196
|
+
if item.startswith("[X]"):
|
|
197
|
+
total_issues += 1
|
|
198
|
+
|
|
199
|
+
print("\n" + "=" * 60)
|
|
200
|
+
print(f"[RESULTS] {total_passed} passed, {total_issues} critical issues")
|
|
201
|
+
print("=" * 60)
|
|
202
|
+
|
|
203
|
+
if total_issues == 0:
|
|
204
|
+
print("[OK] API validation passed")
|
|
205
|
+
sys.exit(0)
|
|
206
|
+
else:
|
|
207
|
+
print("[X] Fix critical issues before deployment")
|
|
208
|
+
sys.exit(1)
|
|
209
|
+
|
|
210
|
+
if __name__ == "__main__":
|
|
211
|
+
main()
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# API Security Testing
|
|
2
|
+
|
|
3
|
+
> Principles for testing API security. OWASP API Top 10, authentication, authorization testing.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## OWASP API Security Top 10
|
|
8
|
+
|
|
9
|
+
| Vulnerability | Test Focus |
|
|
10
|
+
|---------------|------------|
|
|
11
|
+
| **API1: BOLA** | Access other users' resources |
|
|
12
|
+
| **API2: Broken Auth** | JWT, session, credentials |
|
|
13
|
+
| **API3: Property Auth** | Mass assignment, data exposure |
|
|
14
|
+
| **API4: Resource Consumption** | Rate limiting, DoS |
|
|
15
|
+
| **API5: Function Auth** | Admin endpoints, role bypass |
|
|
16
|
+
| **API6: Business Flow** | Logic abuse, automation |
|
|
17
|
+
| **API7: SSRF** | Internal network access |
|
|
18
|
+
| **API8: Misconfiguration** | Debug endpoints, CORS |
|
|
19
|
+
| **API9: Inventory** | Shadow APIs, old versions |
|
|
20
|
+
| **API10: Unsafe Consumption** | Third-party API trust |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Authentication Testing
|
|
25
|
+
|
|
26
|
+
### JWT Testing
|
|
27
|
+
|
|
28
|
+
| Check | What to Test |
|
|
29
|
+
|-------|--------------|
|
|
30
|
+
| Algorithm | None, algorithm confusion |
|
|
31
|
+
| Secret | Weak secrets, brute force |
|
|
32
|
+
| Claims | Expiration, issuer, audience |
|
|
33
|
+
| Signature | Manipulation, key injection |
|
|
34
|
+
|
|
35
|
+
### Session Testing
|
|
36
|
+
|
|
37
|
+
| Check | What to Test |
|
|
38
|
+
|-------|--------------|
|
|
39
|
+
| Generation | Predictability |
|
|
40
|
+
| Storage | Client-side security |
|
|
41
|
+
| Expiration | Timeout enforcement |
|
|
42
|
+
| Invalidation | Logout effectiveness |
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Authorization Testing
|
|
47
|
+
|
|
48
|
+
| Test Type | Approach |
|
|
49
|
+
|-----------|----------|
|
|
50
|
+
| **Horizontal** | Access peer users' data |
|
|
51
|
+
| **Vertical** | Access higher privilege functions |
|
|
52
|
+
| **Context** | Access outside allowed scope |
|
|
53
|
+
|
|
54
|
+
### BOLA/IDOR Testing
|
|
55
|
+
|
|
56
|
+
1. Identify resource IDs in requests
|
|
57
|
+
2. Capture request with user A's session
|
|
58
|
+
3. Replay with user B's session
|
|
59
|
+
4. Check for unauthorized access
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Input Validation Testing
|
|
64
|
+
|
|
65
|
+
| Injection Type | Test Focus |
|
|
66
|
+
|----------------|------------|
|
|
67
|
+
| SQL | Query manipulation |
|
|
68
|
+
| NoSQL | Document queries |
|
|
69
|
+
| Command | System commands |
|
|
70
|
+
| LDAP | Directory queries |
|
|
71
|
+
|
|
72
|
+
**Approach:** Test all parameters, try type coercion, test boundaries, check error messages.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Rate Limiting Testing
|
|
77
|
+
|
|
78
|
+
| Aspect | Check |
|
|
79
|
+
|--------|-------|
|
|
80
|
+
| Existence | Is there any limit? |
|
|
81
|
+
| Bypass | Headers, IP rotation |
|
|
82
|
+
| Scope | Per-user, per-IP, global |
|
|
83
|
+
|
|
84
|
+
**Bypass techniques:** X-Forwarded-For, different HTTP methods, case variations, API versioning.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## GraphQL Security
|
|
89
|
+
|
|
90
|
+
| Test | Focus |
|
|
91
|
+
|------|-------|
|
|
92
|
+
| Introspection | Schema disclosure |
|
|
93
|
+
| Batching | Query DoS |
|
|
94
|
+
| Nesting | Depth-based DoS |
|
|
95
|
+
| Authorization | Field-level access |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Security Testing Checklist
|
|
100
|
+
|
|
101
|
+
**Authentication:**
|
|
102
|
+
- [ ] Test for bypass
|
|
103
|
+
- [ ] Check credential strength
|
|
104
|
+
- [ ] Verify token security
|
|
105
|
+
|
|
106
|
+
**Authorization:**
|
|
107
|
+
- [ ] Test BOLA/IDOR
|
|
108
|
+
- [ ] Check privilege escalation
|
|
109
|
+
- [ ] Verify function access
|
|
110
|
+
|
|
111
|
+
**Input:**
|
|
112
|
+
- [ ] Test all parameters
|
|
113
|
+
- [ ] Check for injection
|
|
114
|
+
|
|
115
|
+
**Config:**
|
|
116
|
+
- [ ] Check CORS
|
|
117
|
+
- [ ] Verify headers
|
|
118
|
+
- [ ] Test error handling
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
> **Remember:** APIs are the backbone of modern apps. Test them like attackers will.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# tRPC Principles
|
|
2
|
+
|
|
3
|
+
> End-to-end type safety for TypeScript monorepos.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
✅ Perfect fit:
|
|
9
|
+
├── TypeScript on both ends
|
|
10
|
+
├── Monorepo structure
|
|
11
|
+
├── Internal tools
|
|
12
|
+
├── Rapid development
|
|
13
|
+
└── Type safety critical
|
|
14
|
+
|
|
15
|
+
❌ Poor fit:
|
|
16
|
+
├── Non-TypeScript clients
|
|
17
|
+
├── Public API
|
|
18
|
+
├── Need REST conventions
|
|
19
|
+
└── Multiple language backends
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Key Benefits
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Why tRPC:
|
|
26
|
+
├── Zero schema maintenance
|
|
27
|
+
├── End-to-end type inference
|
|
28
|
+
├── IDE autocomplete across stack
|
|
29
|
+
├── Instant API changes reflected
|
|
30
|
+
└── No code generation step
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Integration Patterns
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
Common setups:
|
|
37
|
+
├── Next.js + tRPC (most common)
|
|
38
|
+
├── Monorepo with shared types
|
|
39
|
+
├── Remix + tRPC
|
|
40
|
+
└── Any TS frontend + backend
|
|
41
|
+
```
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Versioning Strategies
|
|
2
|
+
|
|
3
|
+
> Plan for API evolution from day one.
|
|
4
|
+
|
|
5
|
+
## Decision Factors
|
|
6
|
+
|
|
7
|
+
| Strategy | Implementation | Trade-offs |
|
|
8
|
+
|----------|---------------|------------|
|
|
9
|
+
| **URI** | /v1/users | Clear, easy caching |
|
|
10
|
+
| **Header** | Accept-Version: 1 | Cleaner URLs, harder discovery |
|
|
11
|
+
| **Query** | ?version=1 | Easy to add, messy |
|
|
12
|
+
| **None** | Evolve carefully | Best for internal, risky for public |
|
|
13
|
+
|
|
14
|
+
## Versioning Philosophy
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Consider:
|
|
18
|
+
├── Public API? → Version in URI
|
|
19
|
+
├── Internal only? → May not need versioning
|
|
20
|
+
├── GraphQL? → Typically no versions (evolve schema)
|
|
21
|
+
├── tRPC? → Types enforce compatibility
|
|
22
|
+
```
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architecture
|
|
3
|
+
description: Architectural decision-making framework. Requirements analysis, trade-off evaluation, ADR documentation. Use when making architecture decisions or analyzing system design.
|
|
4
|
+
allowed-tools: Read, Glob, Grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Architecture Decision Framework
|
|
8
|
+
|
|
9
|
+
> "Requirements drive architecture. Trade-offs inform decisions. ADRs capture rationale."
|
|
10
|
+
|
|
11
|
+
## 🎯 Selective Reading Rule
|
|
12
|
+
|
|
13
|
+
**Read ONLY files relevant to the request!** Check the content map, find what you need.
|
|
14
|
+
|
|
15
|
+
| File | Description | When to Read |
|
|
16
|
+
|------|-------------|--------------|
|
|
17
|
+
| `context-discovery.md` | Questions to ask, project classification | Starting architecture design |
|
|
18
|
+
| `trade-off-analysis.md` | ADR templates, trade-off framework | Documenting decisions |
|
|
19
|
+
| `pattern-selection.md` | Decision trees, anti-patterns | Choosing patterns |
|
|
20
|
+
| `examples.md` | MVP, SaaS, Enterprise examples | Reference implementations |
|
|
21
|
+
| `patterns-reference.md` | Quick lookup for patterns | Pattern comparison |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 🔗 Related Skills
|
|
26
|
+
|
|
27
|
+
| Skill | Use For |
|
|
28
|
+
|-------|---------|
|
|
29
|
+
| `@[skills/database-design]` | Database schema design |
|
|
30
|
+
| `@[skills/api-patterns]` | API design patterns |
|
|
31
|
+
| `@[skills/deployment-procedures]` | Deployment architecture |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Core Principle
|
|
36
|
+
|
|
37
|
+
**"Simplicity is the ultimate sophistication."**
|
|
38
|
+
|
|
39
|
+
- Start simple
|
|
40
|
+
- Add complexity ONLY when proven necessary
|
|
41
|
+
- You can always add patterns later
|
|
42
|
+
- Removing complexity is MUCH harder than adding it
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Validation Checklist
|
|
47
|
+
|
|
48
|
+
Before finalizing architecture:
|
|
49
|
+
|
|
50
|
+
- [ ] Requirements clearly understood
|
|
51
|
+
- [ ] Constraints identified
|
|
52
|
+
- [ ] Each decision has trade-off analysis
|
|
53
|
+
- [ ] Simpler alternatives considered
|
|
54
|
+
- [ ] ADRs written for significant decisions
|
|
55
|
+
- [ ] Team expertise matches chosen patterns
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Context Discovery
|
|
2
|
+
|
|
3
|
+
> Before suggesting any architecture, gather context.
|
|
4
|
+
|
|
5
|
+
## Question Hierarchy (Ask User FIRST)
|
|
6
|
+
|
|
7
|
+
1. **Scale**
|
|
8
|
+
- How many users? (10, 1K, 100K, 1M+)
|
|
9
|
+
- Data volume? (MB, GB, TB)
|
|
10
|
+
- Transaction rate? (per second/minute)
|
|
11
|
+
|
|
12
|
+
2. **Team**
|
|
13
|
+
- Solo developer or team?
|
|
14
|
+
- Team size and expertise?
|
|
15
|
+
- Distributed or co-located?
|
|
16
|
+
|
|
17
|
+
3. **Timeline**
|
|
18
|
+
- MVP/Prototype or long-term product?
|
|
19
|
+
- Time to market pressure?
|
|
20
|
+
|
|
21
|
+
4. **Domain**
|
|
22
|
+
- CRUD-heavy or business logic complex?
|
|
23
|
+
- Real-time requirements?
|
|
24
|
+
- Compliance/regulations?
|
|
25
|
+
|
|
26
|
+
5. **Constraints**
|
|
27
|
+
- Budget limitations?
|
|
28
|
+
- Legacy systems to integrate?
|
|
29
|
+
- Technology stack preferences?
|
|
30
|
+
|
|
31
|
+
## Project Classification Matrix
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
MVP SaaS Enterprise
|
|
35
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
36
|
+
│ Scale │ <1K │ 1K-100K │ 100K+ │
|
|
37
|
+
│ Team │ Solo │ 2-10 │ 10+ │
|
|
38
|
+
│ Timeline │ Fast (weeks) │ Medium (months)│ Long (years)│
|
|
39
|
+
│ Architecture │ Simple │ Modular │ Distributed │
|
|
40
|
+
│ Patterns │ Minimal │ Selective │ Comprehensive│
|
|
41
|
+
│ Example │ Next.js API │ NestJS │ Microservices│
|
|
42
|
+
└─────────────────────────────────────────────────────────────┘
|
|
43
|
+
```
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Architecture Examples
|
|
2
|
+
|
|
3
|
+
> Real-world architecture decisions by project type.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Example 1: MVP E-commerce (Solo Developer)
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
Requirements:
|
|
11
|
+
- <1000 users initially
|
|
12
|
+
- Solo developer
|
|
13
|
+
- Fast to market (8 weeks)
|
|
14
|
+
- Budget-conscious
|
|
15
|
+
|
|
16
|
+
Architecture Decisions:
|
|
17
|
+
App Structure: Monolith (simpler for solo)
|
|
18
|
+
Framework: Next.js (full-stack, fast)
|
|
19
|
+
Data Layer: Prisma direct (no over-abstraction)
|
|
20
|
+
Authentication: JWT (simpler than OAuth)
|
|
21
|
+
Payment: Stripe (hosted solution)
|
|
22
|
+
Database: PostgreSQL (ACID for orders)
|
|
23
|
+
|
|
24
|
+
Trade-offs Accepted:
|
|
25
|
+
- Monolith → Can't scale independently (team doesn't justify it)
|
|
26
|
+
- No Repository → Less testable (simple CRUD doesn't need it)
|
|
27
|
+
- JWT → No social login initially (can add later)
|
|
28
|
+
|
|
29
|
+
Future Migration Path:
|
|
30
|
+
- Users > 10K → Extract payment service
|
|
31
|
+
- Team > 3 → Add Repository pattern
|
|
32
|
+
- Social login requested → Add OAuth
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Example 2: SaaS Product (5-10 Developers)
|
|
38
|
+
|
|
39
|
+
```yaml
|
|
40
|
+
Requirements:
|
|
41
|
+
- 1K-100K users
|
|
42
|
+
- 5-10 developers
|
|
43
|
+
- Long-term (12+ months)
|
|
44
|
+
- Multiple domains (billing, users, core)
|
|
45
|
+
|
|
46
|
+
Architecture Decisions:
|
|
47
|
+
App Structure: Modular Monolith (team size optimal)
|
|
48
|
+
Framework: NestJS (modular by design)
|
|
49
|
+
Data Layer: Repository pattern (testing, flexibility)
|
|
50
|
+
Domain Model: Partial DDD (rich entities)
|
|
51
|
+
Authentication: OAuth + JWT
|
|
52
|
+
Caching: Redis
|
|
53
|
+
Database: PostgreSQL
|
|
54
|
+
|
|
55
|
+
Trade-offs Accepted:
|
|
56
|
+
- Modular Monolith → Some module coupling (microservices not justified)
|
|
57
|
+
- Partial DDD → No full aggregates (no domain experts)
|
|
58
|
+
- RabbitMQ later → Initial synchronous (add when proven needed)
|
|
59
|
+
|
|
60
|
+
Migration Path:
|
|
61
|
+
- Team > 10 → Consider microservices
|
|
62
|
+
- Domains conflict → Extract bounded contexts
|
|
63
|
+
- Read performance issues → Add CQRS
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Example 3: Enterprise (100K+ Users)
|
|
69
|
+
|
|
70
|
+
```yaml
|
|
71
|
+
Requirements:
|
|
72
|
+
- 100K+ users
|
|
73
|
+
- 10+ developers
|
|
74
|
+
- Multiple business domains
|
|
75
|
+
- Different scaling needs
|
|
76
|
+
- 24/7 availability
|
|
77
|
+
|
|
78
|
+
Architecture Decisions:
|
|
79
|
+
App Structure: Microservices (independent scale)
|
|
80
|
+
API Gateway: Kong/AWS API GW
|
|
81
|
+
Domain Model: Full DDD
|
|
82
|
+
Consistency: Event-driven (eventual OK)
|
|
83
|
+
Message Bus: Kafka
|
|
84
|
+
Authentication: OAuth + SAML (enterprise SSO)
|
|
85
|
+
Database: Polyglot (right tool per job)
|
|
86
|
+
CQRS: Selected services
|
|
87
|
+
|
|
88
|
+
Operational Requirements:
|
|
89
|
+
- Service mesh (Istio/Linkerd)
|
|
90
|
+
- Distributed tracing (Jaeger/Tempo)
|
|
91
|
+
- Centralized logging (ELK/Loki)
|
|
92
|
+
- Circuit breakers (Resilience4j)
|
|
93
|
+
- Kubernetes/Helm
|
|
94
|
+
```
|