aidevops 2.52.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.
Files changed (329) hide show
  1. package/.agent/AGENTS.md +614 -0
  2. package/.agent/accounts.md +65 -0
  3. package/.agent/aidevops/add-new-mcp-to-aidevops.md +456 -0
  4. package/.agent/aidevops/api-integrations.md +335 -0
  5. package/.agent/aidevops/architecture.md +510 -0
  6. package/.agent/aidevops/configs.md +274 -0
  7. package/.agent/aidevops/docs.md +244 -0
  8. package/.agent/aidevops/extension.md +311 -0
  9. package/.agent/aidevops/mcp-integrations.md +340 -0
  10. package/.agent/aidevops/mcp-troubleshooting.md +162 -0
  11. package/.agent/aidevops/memory-patterns.md +172 -0
  12. package/.agent/aidevops/providers.md +217 -0
  13. package/.agent/aidevops/recommendations.md +321 -0
  14. package/.agent/aidevops/requirements.md +301 -0
  15. package/.agent/aidevops/resources.md +214 -0
  16. package/.agent/aidevops/security-requirements.md +174 -0
  17. package/.agent/aidevops/security.md +350 -0
  18. package/.agent/aidevops/service-links.md +400 -0
  19. package/.agent/aidevops/services.md +357 -0
  20. package/.agent/aidevops/setup.md +153 -0
  21. package/.agent/aidevops/troubleshooting.md +389 -0
  22. package/.agent/aidevops.md +124 -0
  23. package/.agent/build-plus.md +244 -0
  24. package/.agent/content/guidelines.md +109 -0
  25. package/.agent/content.md +87 -0
  26. package/.agent/health.md +59 -0
  27. package/.agent/legal.md +59 -0
  28. package/.agent/loop-state/full-loop.local.md +16 -0
  29. package/.agent/loop-state/ralph-loop.local.md +10 -0
  30. package/.agent/marketing.md +440 -0
  31. package/.agent/memory/README.md +260 -0
  32. package/.agent/onboarding.md +796 -0
  33. package/.agent/plan-plus.md +245 -0
  34. package/.agent/research.md +100 -0
  35. package/.agent/sales.md +333 -0
  36. package/.agent/scripts/101domains-helper.sh +701 -0
  37. package/.agent/scripts/add-missing-returns.sh +140 -0
  38. package/.agent/scripts/agent-browser-helper.sh +311 -0
  39. package/.agent/scripts/agno-setup.sh +712 -0
  40. package/.agent/scripts/ahrefs-mcp-wrapper.js +168 -0
  41. package/.agent/scripts/aidevops-update-check.sh +71 -0
  42. package/.agent/scripts/ampcode-cli.sh +522 -0
  43. package/.agent/scripts/auto-version-bump.sh +156 -0
  44. package/.agent/scripts/autogen-helper.sh +512 -0
  45. package/.agent/scripts/beads-sync-helper.sh +596 -0
  46. package/.agent/scripts/closte-helper.sh +5 -0
  47. package/.agent/scripts/cloudron-helper.sh +321 -0
  48. package/.agent/scripts/codacy-cli-chunked.sh +581 -0
  49. package/.agent/scripts/codacy-cli.sh +442 -0
  50. package/.agent/scripts/code-audit-helper.sh +5 -0
  51. package/.agent/scripts/coderabbit-cli.sh +417 -0
  52. package/.agent/scripts/coderabbit-pro-analysis.sh +238 -0
  53. package/.agent/scripts/commands/code-simplifier.md +86 -0
  54. package/.agent/scripts/commands/full-loop.md +246 -0
  55. package/.agent/scripts/commands/postflight-loop.md +103 -0
  56. package/.agent/scripts/commands/recall.md +182 -0
  57. package/.agent/scripts/commands/remember.md +132 -0
  58. package/.agent/scripts/commands/save-todo.md +175 -0
  59. package/.agent/scripts/commands/session-review.md +154 -0
  60. package/.agent/scripts/comprehensive-quality-fix.sh +106 -0
  61. package/.agent/scripts/context-builder-helper.sh +522 -0
  62. package/.agent/scripts/coolify-cli-helper.sh +674 -0
  63. package/.agent/scripts/coolify-helper.sh +380 -0
  64. package/.agent/scripts/crawl4ai-examples.sh +401 -0
  65. package/.agent/scripts/crawl4ai-helper.sh +1078 -0
  66. package/.agent/scripts/crewai-helper.sh +681 -0
  67. package/.agent/scripts/dev-browser-helper.sh +513 -0
  68. package/.agent/scripts/dns-helper.sh +396 -0
  69. package/.agent/scripts/domain-research-helper.sh +917 -0
  70. package/.agent/scripts/dspy-helper.sh +285 -0
  71. package/.agent/scripts/dspyground-helper.sh +291 -0
  72. package/.agent/scripts/eeat-score-helper.sh +1242 -0
  73. package/.agent/scripts/efficient-return-fix.sh +92 -0
  74. package/.agent/scripts/extract-opencode-prompts.sh +128 -0
  75. package/.agent/scripts/find-missing-returns.sh +113 -0
  76. package/.agent/scripts/fix-auth-headers.sh +104 -0
  77. package/.agent/scripts/fix-common-strings.sh +254 -0
  78. package/.agent/scripts/fix-content-type.sh +100 -0
  79. package/.agent/scripts/fix-error-messages.sh +130 -0
  80. package/.agent/scripts/fix-misplaced-returns.sh +74 -0
  81. package/.agent/scripts/fix-remaining-literals.sh +152 -0
  82. package/.agent/scripts/fix-return-statements.sh +41 -0
  83. package/.agent/scripts/fix-s131-default-cases.sh +249 -0
  84. package/.agent/scripts/fix-sc2155-simple.sh +102 -0
  85. package/.agent/scripts/fix-shellcheck-critical.sh +187 -0
  86. package/.agent/scripts/fix-string-literals.sh +273 -0
  87. package/.agent/scripts/full-loop-helper.sh +773 -0
  88. package/.agent/scripts/generate-opencode-agents.sh +497 -0
  89. package/.agent/scripts/generate-opencode-commands.sh +1629 -0
  90. package/.agent/scripts/generate-skills.sh +366 -0
  91. package/.agent/scripts/git-platforms-helper.sh +640 -0
  92. package/.agent/scripts/gitea-cli-helper.sh +743 -0
  93. package/.agent/scripts/github-cli-helper.sh +702 -0
  94. package/.agent/scripts/gitlab-cli-helper.sh +682 -0
  95. package/.agent/scripts/gsc-add-user-helper.sh +325 -0
  96. package/.agent/scripts/gsc-sitemap-helper.sh +678 -0
  97. package/.agent/scripts/hetzner-helper.sh +485 -0
  98. package/.agent/scripts/hostinger-helper.sh +229 -0
  99. package/.agent/scripts/keyword-research-helper.sh +1815 -0
  100. package/.agent/scripts/langflow-helper.sh +544 -0
  101. package/.agent/scripts/linkedin-automation.py +241 -0
  102. package/.agent/scripts/linter-manager.sh +599 -0
  103. package/.agent/scripts/linters-local.sh +434 -0
  104. package/.agent/scripts/list-keys-helper.sh +488 -0
  105. package/.agent/scripts/local-browser-automation.py +339 -0
  106. package/.agent/scripts/localhost-helper.sh +744 -0
  107. package/.agent/scripts/loop-common.sh +806 -0
  108. package/.agent/scripts/mainwp-helper.sh +728 -0
  109. package/.agent/scripts/markdown-formatter.sh +338 -0
  110. package/.agent/scripts/markdown-lint-fix.sh +311 -0
  111. package/.agent/scripts/mass-fix-returns.sh +58 -0
  112. package/.agent/scripts/mcp-diagnose.sh +167 -0
  113. package/.agent/scripts/mcp-inspector-helper.sh +449 -0
  114. package/.agent/scripts/memory-helper.sh +650 -0
  115. package/.agent/scripts/monitor-code-review.sh +255 -0
  116. package/.agent/scripts/onboarding-helper.sh +706 -0
  117. package/.agent/scripts/opencode-github-setup-helper.sh +797 -0
  118. package/.agent/scripts/opencode-test-helper.sh +213 -0
  119. package/.agent/scripts/pagespeed-helper.sh +464 -0
  120. package/.agent/scripts/pandoc-helper.sh +362 -0
  121. package/.agent/scripts/postflight-check.sh +555 -0
  122. package/.agent/scripts/pre-commit-hook.sh +259 -0
  123. package/.agent/scripts/pre-edit-check.sh +169 -0
  124. package/.agent/scripts/qlty-cli.sh +356 -0
  125. package/.agent/scripts/quality-cli-manager.sh +525 -0
  126. package/.agent/scripts/quality-feedback-helper.sh +462 -0
  127. package/.agent/scripts/quality-fix.sh +263 -0
  128. package/.agent/scripts/quality-loop-helper.sh +1108 -0
  129. package/.agent/scripts/ralph-loop-helper.sh +836 -0
  130. package/.agent/scripts/ralph-upstream-check.sh +341 -0
  131. package/.agent/scripts/secretlint-helper.sh +847 -0
  132. package/.agent/scripts/servers-helper.sh +241 -0
  133. package/.agent/scripts/ses-helper.sh +619 -0
  134. package/.agent/scripts/session-review-helper.sh +404 -0
  135. package/.agent/scripts/setup-linters-wizard.sh +379 -0
  136. package/.agent/scripts/setup-local-api-keys.sh +330 -0
  137. package/.agent/scripts/setup-mcp-integrations.sh +472 -0
  138. package/.agent/scripts/shared-constants.sh +246 -0
  139. package/.agent/scripts/site-crawler-helper.sh +1487 -0
  140. package/.agent/scripts/snyk-helper.sh +940 -0
  141. package/.agent/scripts/sonarcloud-autofix.sh +193 -0
  142. package/.agent/scripts/sonarcloud-cli.sh +191 -0
  143. package/.agent/scripts/sonarscanner-cli.sh +455 -0
  144. package/.agent/scripts/spaceship-helper.sh +747 -0
  145. package/.agent/scripts/stagehand-helper.sh +321 -0
  146. package/.agent/scripts/stagehand-python-helper.sh +321 -0
  147. package/.agent/scripts/stagehand-python-setup.sh +441 -0
  148. package/.agent/scripts/stagehand-setup.sh +439 -0
  149. package/.agent/scripts/system-cleanup.sh +340 -0
  150. package/.agent/scripts/terminal-title-helper.sh +388 -0
  151. package/.agent/scripts/terminal-title-setup.sh +549 -0
  152. package/.agent/scripts/test-stagehand-both-integration.sh +317 -0
  153. package/.agent/scripts/test-stagehand-integration.sh +309 -0
  154. package/.agent/scripts/test-stagehand-python-integration.sh +341 -0
  155. package/.agent/scripts/todo-ready.sh +263 -0
  156. package/.agent/scripts/tool-version-check.sh +362 -0
  157. package/.agent/scripts/toon-helper.sh +469 -0
  158. package/.agent/scripts/twilio-helper.sh +917 -0
  159. package/.agent/scripts/updown-helper.sh +279 -0
  160. package/.agent/scripts/validate-mcp-integrations.sh +250 -0
  161. package/.agent/scripts/validate-version-consistency.sh +131 -0
  162. package/.agent/scripts/vaultwarden-helper.sh +597 -0
  163. package/.agent/scripts/vercel-cli-helper.sh +816 -0
  164. package/.agent/scripts/verify-mirrors.sh +169 -0
  165. package/.agent/scripts/version-manager.sh +831 -0
  166. package/.agent/scripts/webhosting-helper.sh +471 -0
  167. package/.agent/scripts/webhosting-verify.sh +238 -0
  168. package/.agent/scripts/wordpress-mcp-helper.sh +508 -0
  169. package/.agent/scripts/worktree-helper.sh +595 -0
  170. package/.agent/scripts/worktree-sessions.sh +577 -0
  171. package/.agent/seo/dataforseo.md +215 -0
  172. package/.agent/seo/domain-research.md +532 -0
  173. package/.agent/seo/eeat-score.md +659 -0
  174. package/.agent/seo/google-search-console.md +366 -0
  175. package/.agent/seo/gsc-sitemaps.md +282 -0
  176. package/.agent/seo/keyword-research.md +521 -0
  177. package/.agent/seo/serper.md +278 -0
  178. package/.agent/seo/site-crawler.md +387 -0
  179. package/.agent/seo.md +236 -0
  180. package/.agent/services/accounting/quickfile.md +159 -0
  181. package/.agent/services/communications/telfon.md +470 -0
  182. package/.agent/services/communications/twilio.md +569 -0
  183. package/.agent/services/crm/fluentcrm.md +449 -0
  184. package/.agent/services/email/ses.md +399 -0
  185. package/.agent/services/hosting/101domains.md +378 -0
  186. package/.agent/services/hosting/closte.md +177 -0
  187. package/.agent/services/hosting/cloudflare.md +251 -0
  188. package/.agent/services/hosting/cloudron.md +478 -0
  189. package/.agent/services/hosting/dns-providers.md +335 -0
  190. package/.agent/services/hosting/domain-purchasing.md +344 -0
  191. package/.agent/services/hosting/hetzner.md +327 -0
  192. package/.agent/services/hosting/hostinger.md +287 -0
  193. package/.agent/services/hosting/localhost.md +419 -0
  194. package/.agent/services/hosting/spaceship.md +353 -0
  195. package/.agent/services/hosting/webhosting.md +330 -0
  196. package/.agent/social-media.md +69 -0
  197. package/.agent/templates/plans-template.md +114 -0
  198. package/.agent/templates/prd-template.md +129 -0
  199. package/.agent/templates/tasks-template.md +108 -0
  200. package/.agent/templates/todo-template.md +89 -0
  201. package/.agent/tools/ai-assistants/agno.md +471 -0
  202. package/.agent/tools/ai-assistants/capsolver.md +326 -0
  203. package/.agent/tools/ai-assistants/configuration.md +221 -0
  204. package/.agent/tools/ai-assistants/overview.md +209 -0
  205. package/.agent/tools/ai-assistants/status.md +171 -0
  206. package/.agent/tools/ai-assistants/windsurf.md +193 -0
  207. package/.agent/tools/ai-orchestration/autogen.md +406 -0
  208. package/.agent/tools/ai-orchestration/crewai.md +445 -0
  209. package/.agent/tools/ai-orchestration/langflow.md +405 -0
  210. package/.agent/tools/ai-orchestration/openprose.md +487 -0
  211. package/.agent/tools/ai-orchestration/overview.md +362 -0
  212. package/.agent/tools/ai-orchestration/packaging.md +647 -0
  213. package/.agent/tools/browser/agent-browser.md +464 -0
  214. package/.agent/tools/browser/browser-automation.md +400 -0
  215. package/.agent/tools/browser/chrome-devtools.md +282 -0
  216. package/.agent/tools/browser/crawl4ai-integration.md +422 -0
  217. package/.agent/tools/browser/crawl4ai-resources.md +277 -0
  218. package/.agent/tools/browser/crawl4ai-usage.md +416 -0
  219. package/.agent/tools/browser/crawl4ai.md +585 -0
  220. package/.agent/tools/browser/dev-browser.md +341 -0
  221. package/.agent/tools/browser/pagespeed.md +260 -0
  222. package/.agent/tools/browser/playwright.md +266 -0
  223. package/.agent/tools/browser/playwriter.md +310 -0
  224. package/.agent/tools/browser/stagehand-examples.md +456 -0
  225. package/.agent/tools/browser/stagehand-python.md +483 -0
  226. package/.agent/tools/browser/stagehand.md +421 -0
  227. package/.agent/tools/build-agent/agent-review.md +224 -0
  228. package/.agent/tools/build-agent/build-agent.md +784 -0
  229. package/.agent/tools/build-mcp/aidevops-plugin.md +476 -0
  230. package/.agent/tools/build-mcp/api-wrapper.md +445 -0
  231. package/.agent/tools/build-mcp/build-mcp.md +240 -0
  232. package/.agent/tools/build-mcp/deployment.md +401 -0
  233. package/.agent/tools/build-mcp/server-patterns.md +632 -0
  234. package/.agent/tools/build-mcp/transports.md +366 -0
  235. package/.agent/tools/code-review/auditing.md +383 -0
  236. package/.agent/tools/code-review/automation.md +219 -0
  237. package/.agent/tools/code-review/best-practices.md +203 -0
  238. package/.agent/tools/code-review/codacy.md +151 -0
  239. package/.agent/tools/code-review/code-simplifier.md +174 -0
  240. package/.agent/tools/code-review/code-standards.md +309 -0
  241. package/.agent/tools/code-review/coderabbit.md +101 -0
  242. package/.agent/tools/code-review/management.md +155 -0
  243. package/.agent/tools/code-review/qlty.md +248 -0
  244. package/.agent/tools/code-review/secretlint.md +565 -0
  245. package/.agent/tools/code-review/setup.md +250 -0
  246. package/.agent/tools/code-review/snyk.md +563 -0
  247. package/.agent/tools/code-review/tools.md +230 -0
  248. package/.agent/tools/content/summarize.md +353 -0
  249. package/.agent/tools/context/augment-context-engine.md +468 -0
  250. package/.agent/tools/context/context-builder-agent.md +76 -0
  251. package/.agent/tools/context/context-builder.md +375 -0
  252. package/.agent/tools/context/context7.md +371 -0
  253. package/.agent/tools/context/dspy.md +302 -0
  254. package/.agent/tools/context/dspyground.md +374 -0
  255. package/.agent/tools/context/llm-tldr.md +219 -0
  256. package/.agent/tools/context/osgrep.md +488 -0
  257. package/.agent/tools/context/prompt-optimization.md +338 -0
  258. package/.agent/tools/context/toon.md +292 -0
  259. package/.agent/tools/conversion/pandoc.md +304 -0
  260. package/.agent/tools/credentials/api-key-management.md +154 -0
  261. package/.agent/tools/credentials/api-key-setup.md +224 -0
  262. package/.agent/tools/credentials/environment-variables.md +180 -0
  263. package/.agent/tools/credentials/vaultwarden.md +382 -0
  264. package/.agent/tools/data-extraction/outscraper.md +974 -0
  265. package/.agent/tools/deployment/coolify-cli.md +388 -0
  266. package/.agent/tools/deployment/coolify-setup.md +353 -0
  267. package/.agent/tools/deployment/coolify.md +345 -0
  268. package/.agent/tools/deployment/vercel.md +390 -0
  269. package/.agent/tools/git/authentication.md +132 -0
  270. package/.agent/tools/git/gitea-cli.md +193 -0
  271. package/.agent/tools/git/github-actions.md +207 -0
  272. package/.agent/tools/git/github-cli.md +223 -0
  273. package/.agent/tools/git/gitlab-cli.md +190 -0
  274. package/.agent/tools/git/opencode-github-security.md +350 -0
  275. package/.agent/tools/git/opencode-github.md +328 -0
  276. package/.agent/tools/git/opencode-gitlab.md +252 -0
  277. package/.agent/tools/git/security.md +196 -0
  278. package/.agent/tools/git.md +207 -0
  279. package/.agent/tools/opencode/oh-my-opencode.md +375 -0
  280. package/.agent/tools/opencode/opencode-anthropic-auth.md +446 -0
  281. package/.agent/tools/opencode/opencode.md +651 -0
  282. package/.agent/tools/social-media/bird.md +437 -0
  283. package/.agent/tools/task-management/beads.md +336 -0
  284. package/.agent/tools/terminal/terminal-title.md +251 -0
  285. package/.agent/tools/ui/shadcn.md +196 -0
  286. package/.agent/tools/ui/ui-skills.md +115 -0
  287. package/.agent/tools/wordpress/localwp.md +311 -0
  288. package/.agent/tools/wordpress/mainwp.md +391 -0
  289. package/.agent/tools/wordpress/scf.md +527 -0
  290. package/.agent/tools/wordpress/wp-admin.md +729 -0
  291. package/.agent/tools/wordpress/wp-dev.md +940 -0
  292. package/.agent/tools/wordpress/wp-preferred.md +398 -0
  293. package/.agent/tools/wordpress.md +95 -0
  294. package/.agent/workflows/branch/bugfix.md +63 -0
  295. package/.agent/workflows/branch/chore.md +95 -0
  296. package/.agent/workflows/branch/experiment.md +115 -0
  297. package/.agent/workflows/branch/feature.md +59 -0
  298. package/.agent/workflows/branch/hotfix.md +98 -0
  299. package/.agent/workflows/branch/refactor.md +92 -0
  300. package/.agent/workflows/branch/release.md +96 -0
  301. package/.agent/workflows/branch.md +347 -0
  302. package/.agent/workflows/bug-fixing.md +267 -0
  303. package/.agent/workflows/changelog.md +129 -0
  304. package/.agent/workflows/code-audit-remote.md +279 -0
  305. package/.agent/workflows/conversation-starter.md +69 -0
  306. package/.agent/workflows/error-feedback.md +578 -0
  307. package/.agent/workflows/feature-development.md +355 -0
  308. package/.agent/workflows/git-workflow.md +702 -0
  309. package/.agent/workflows/multi-repo-workspace.md +268 -0
  310. package/.agent/workflows/plans.md +709 -0
  311. package/.agent/workflows/postflight.md +604 -0
  312. package/.agent/workflows/pr.md +571 -0
  313. package/.agent/workflows/preflight.md +278 -0
  314. package/.agent/workflows/ralph-loop.md +773 -0
  315. package/.agent/workflows/release.md +498 -0
  316. package/.agent/workflows/session-manager.md +254 -0
  317. package/.agent/workflows/session-review.md +311 -0
  318. package/.agent/workflows/sql-migrations.md +631 -0
  319. package/.agent/workflows/version-bump.md +283 -0
  320. package/.agent/workflows/wiki-update.md +333 -0
  321. package/.agent/workflows/worktree.md +477 -0
  322. package/LICENSE +21 -0
  323. package/README.md +1446 -0
  324. package/VERSION +1 -0
  325. package/aidevops.sh +1746 -0
  326. package/bin/aidevops +21 -0
  327. package/package.json +75 -0
  328. package/scripts/npm-postinstall.js +60 -0
  329. package/setup.sh +2366 -0
@@ -0,0 +1,619 @@
1
+ #!/bin/bash
2
+ # shellcheck disable=SC2034,SC2155,SC2317,SC2329,SC2016,SC2181,SC1091,SC2154,SC2015,SC2086,SC2129,SC2030,SC2031,SC2119,SC2120,SC2001,SC2162,SC2088,SC2089,SC2090,SC2029,SC2006,SC2153
3
+
4
+ # Amazon SES Helper Script
5
+ # Comprehensive SES management for AI assistants
6
+
7
+ # Colors for output
8
+
9
+ GREEN='\033[0;32m'
10
+ BLUE='\033[0;34m'
11
+ YELLOW='\033[1;33m'
12
+ RED='\033[0;31m'
13
+ NC='\033[0m' # No Color
14
+
15
+ # Common message constants
16
+ readonly HELP_SHOW_MESSAGE="Show this help"
17
+ readonly USAGE_COMMAND_OPTIONS="Usage: $0 <command> [options]"
18
+
19
+ print_info() {
20
+ local msg="$1"
21
+ echo -e "${BLUE}[INFO]${NC} $msg"
22
+ return 0
23
+ }
24
+
25
+ print_success() {
26
+ local msg="$1"
27
+ echo -e "${GREEN}[SUCCESS]${NC} $msg"
28
+ return 0
29
+ }
30
+
31
+ print_warning() {
32
+ local msg="$1"
33
+ echo -e "${YELLOW}[WARNING]${NC} $msg"
34
+ return 0
35
+ }
36
+
37
+ print_error() {
38
+ local msg="$1"
39
+ echo -e "${RED}[ERROR]${NC} $msg" >&2
40
+ return 0
41
+ }
42
+
43
+ CONFIG_FILE="../configs/ses-config.json"
44
+
45
+ # Constants for repeated strings
46
+ readonly ERROR_IDENTITY_REQUIRED="Identity (email or domain) is required"
47
+
48
+ # Check if AWS CLI is installed
49
+ check_aws_cli() {
50
+ if ! command -v aws &> /dev/null; then
51
+ print_error "AWS CLI is not installed. Please install it first:"
52
+ echo " macOS: brew install awscli" >&2
53
+ echo " Ubuntu: sudo apt-get install awscli" >&2
54
+ echo " Or: pip install awscli" >&2
55
+ exit 1
56
+ fi
57
+
58
+ return 0
59
+ }
60
+
61
+ # Load SES configuration
62
+ load_config() {
63
+ if [[ ! -f "$CONFIG_FILE" ]]; then
64
+ print_error "Configuration file not found: $CONFIG_FILE"
65
+ print_info "Copy and customize: cp ../configs/ses-config.json.txt $CONFIG_FILE"
66
+ exit 1
67
+ fi
68
+
69
+ if ! command -v jq &> /dev/null; then
70
+ print_error "jq is required but not installed"
71
+ print_info "Install on macOS: brew install jq"
72
+ print_info "Install on Ubuntu: sudo apt-get install jq"
73
+ exit 1
74
+ fi
75
+ return 0
76
+ }
77
+
78
+ # Get account configuration
79
+ get_account_config() {
80
+ local account_name="$command"
81
+
82
+ if [[ -z "$account_name" ]]; then
83
+ print_error "Account name is required"
84
+ list_accounts
85
+ exit 1
86
+ fi
87
+
88
+ local account_config
89
+ account_config=$(jq -r ".accounts.\"$account_name\"" "$CONFIG_FILE")
90
+ if [[ "$account_config" == "null" ]]; then
91
+ print_error "Account '$account_name' not found in configuration"
92
+ list_accounts
93
+ exit 1
94
+ fi
95
+
96
+ echo "$account_config"
97
+ return 0
98
+ }
99
+
100
+ # Set AWS credentials for account
101
+ set_aws_credentials() {
102
+ local account_name="$command"
103
+ local config
104
+ config=$(get_account_config "$account_name")
105
+
106
+ export AWS_ACCESS_KEY_ID=$(echo "$config" | jq -r '.aws_access_key_id')
107
+ export AWS_SECRET_ACCESS_KEY=$(echo "$config" | jq -r '.aws_secret_access_key')
108
+
109
+ if [[ "$AWS_ACCESS_KEY_ID" == "null" || "$AWS_SECRET_ACCESS_KEY" == "null" ]]; then
110
+ print_error "Invalid AWS credentials for account '$account_name'"
111
+ exit 1
112
+ fi
113
+ return 0
114
+ }
115
+
116
+ # List all configured accounts
117
+ list_accounts() {
118
+ load_config
119
+ print_info "Available SES accounts:"
120
+ jq -r '.accounts | keys[]' "$CONFIG_FILE" | while read account; do
121
+ local description
122
+ description=$(jq -r ".accounts.\"$account\".description" "$CONFIG_FILE")
123
+ local region
124
+ region=$(jq -r ".accounts.\"$account\".region" "$CONFIG_FILE")
125
+ echo " - $account ($region) - $description"
126
+ done
127
+ return 0
128
+ }
129
+
130
+ # Get sending quota
131
+ get_sending_quota() {
132
+ local account_name="$command"
133
+ set_aws_credentials "$account_name"
134
+
135
+ print_info "Getting sending quota for account: $account_name"
136
+ aws ses get-send-quota --output table
137
+ return 0
138
+ }
139
+
140
+ # Get sending statistics
141
+ get_sending_statistics() {
142
+ local account_name="$command"
143
+ set_aws_credentials "$account_name"
144
+
145
+ print_info "Getting sending statistics for account: $account_name"
146
+ aws ses get-send-statistics --output table
147
+ return 0
148
+ }
149
+
150
+ # List verified email addresses
151
+ list_verified_emails() {
152
+ local account_name="$command"
153
+ set_aws_credentials "$account_name"
154
+
155
+ print_info "Verified email addresses for account: $account_name"
156
+ aws ses list-verified-email-addresses --output table
157
+ return 0
158
+ }
159
+
160
+ # List verified domains
161
+ list_verified_domains() {
162
+ local account_name="$command"
163
+ set_aws_credentials "$account_name"
164
+
165
+ print_info "Verified domains for account: $account_name"
166
+ aws ses list-identities --identity-type Domain --output table
167
+ return 0
168
+ }
169
+
170
+ # Get identity verification attributes
171
+ get_identity_verification() {
172
+ local account_name="$command"
173
+ local identity="$account_name"
174
+ set_aws_credentials "$account_name"
175
+
176
+ if [[ -z "$identity" ]]; then
177
+ print_error "$ERROR_IDENTITY_REQUIRED"
178
+ exit 1
179
+ fi
180
+
181
+ print_info "Getting verification attributes for: $identity"
182
+ aws ses get-identity-verification-attributes --identities "$identity" --output table
183
+ return 0
184
+ }
185
+
186
+ # Get reputation
187
+ get_reputation() {
188
+ local account_name="$command"
189
+ set_aws_credentials "$account_name"
190
+
191
+ print_info "Getting account reputation for: $account_name"
192
+ aws ses get-account-sending-enabled --output table
193
+ echo ""
194
+ print_info "Reputation tracking:"
195
+ aws ses describe-reputation-tracking --output table
196
+ return 0
197
+ }
198
+
199
+ # List suppressed destinations (bounces/complaints)
200
+ list_suppressed_destinations() {
201
+ local account_name="$command"
202
+ set_aws_credentials "$account_name"
203
+
204
+ print_info "Suppressed destinations (bounces/complaints) for account: $account_name"
205
+ aws sesv2 list-suppressed-destinations --output table
206
+ return 0
207
+ }
208
+
209
+ # Get suppression list details
210
+ get_suppression_details() {
211
+ local account_name="$command"
212
+ local email="$account_name"
213
+ set_aws_credentials "$account_name"
214
+
215
+ if [[ -z "$email" ]]; then
216
+ print_error "Email address is required"
217
+ exit 1
218
+ fi
219
+
220
+ print_info "Getting suppression details for: $email"
221
+ aws sesv2 get-suppressed-destination --email-address "$email" --output table
222
+ return 0
223
+ }
224
+
225
+ # Remove from suppression list
226
+ remove_from_suppression() {
227
+ local account_name="$command"
228
+ local email="$account_name"
229
+ set_aws_credentials "$account_name"
230
+
231
+ if [[ -z "$email" ]]; then
232
+ print_error "Email address is required"
233
+ exit 1
234
+ fi
235
+
236
+ print_warning "Removing $email from suppression list..."
237
+ aws sesv2 delete-suppressed-destination --email-address "$email"
238
+ if [[ $? -eq 0 ]]; then
239
+ print_success "Successfully removed $email from suppression list"
240
+ return 0
241
+ else
242
+ print_error "Failed to remove $email from suppression list"
243
+ return 1
244
+ fi
245
+ return 0
246
+ }
247
+
248
+ # Send test email
249
+ send_test_email() {
250
+ local account_name="$command"
251
+ local from_email="$account_name"
252
+ local to_email="$target"
253
+ local subject="$options"
254
+ local body="$param5"
255
+ set_aws_credentials "$account_name"
256
+
257
+ if [[ -z "$from_email" || -z "$to_email" ]]; then
258
+ print_error "From and to email addresses are required"
259
+ exit 1
260
+ fi
261
+
262
+ subject="${subject:-SES Test Email}"
263
+ body="${body:-This is a test email sent via AWS SES.}"
264
+
265
+ print_info "Sending test email from $from_email to $to_email"
266
+
267
+ local message_id=$(aws ses send-email \
268
+ --source "$from_email" \
269
+ --destination "ToAddresses=$to_email" \
270
+ --message "Subject={Data='$subject'},Body={Text={Data='$body'}}" \
271
+ --query 'MessageId' --output text)
272
+
273
+ if [[ $? -eq 0 ]]; then
274
+ print_success "Test email sent successfully. Message ID: $message_id"
275
+ return 0
276
+ else
277
+ print_error "Failed to send test email"
278
+ return 1
279
+ fi
280
+ return 0
281
+ }
282
+
283
+ # Get configuration sets
284
+ list_configuration_sets() {
285
+ local account_name="$command"
286
+ set_aws_credentials "$account_name"
287
+
288
+ print_info "Configuration sets for account: $account_name"
289
+ aws ses list-configuration-sets --output table
290
+ return 0
291
+ }
292
+
293
+ # Get bounce and complaint notifications
294
+ get_bounce_complaint_notifications() {
295
+ local account_name="$command"
296
+ local identity="$account_name"
297
+ set_aws_credentials "$account_name"
298
+
299
+ if [[ -z "$identity" ]]; then
300
+ print_error "$ERROR_IDENTITY_REQUIRED"
301
+ exit 1
302
+ fi
303
+
304
+ print_info "Bounce and complaint notifications for: $identity"
305
+ aws ses get-identity-notification-attributes --identities "$identity" --output table
306
+ return 0
307
+ }
308
+
309
+ # Verify email address
310
+ verify_email() {
311
+ local account_name="$command"
312
+ local email="$account_name"
313
+ set_aws_credentials "$account_name"
314
+
315
+ if [[ -z "$email" ]]; then
316
+ print_error "Email address is required"
317
+ exit 1
318
+ fi
319
+
320
+ print_info "Sending verification email to: $email"
321
+ aws ses verify-email-identity --email-address "$email"
322
+ if [[ $? -eq 0 ]]; then
323
+ print_success "Verification email sent to $email"
324
+ print_info "Check the inbox and click the verification link"
325
+ else
326
+ print_error "Failed to send verification email"
327
+ fi
328
+ return 0
329
+ }
330
+
331
+ # Verify domain
332
+ verify_domain() {
333
+ local account_name="$command"
334
+ local domain="$account_name"
335
+ set_aws_credentials "$account_name"
336
+
337
+ if [[ -z "$domain" ]]; then
338
+ print_error "Domain is required"
339
+ exit 1
340
+ fi
341
+
342
+ print_info "Starting domain verification for: $domain"
343
+ local verification_token
344
+ verification_token=$(aws ses verify-domain-identity --domain "$domain" --query 'VerificationToken' --output text)
345
+
346
+ if [[ $? -eq 0 ]]; then
347
+ print_success "Domain verification initiated for $domain"
348
+ print_info "Add this TXT record to your DNS:"
349
+ echo " Name: _amazonses.$domain"
350
+ echo " Value: $verification_token"
351
+ else
352
+ print_error "Failed to initiate domain verification"
353
+ fi
354
+ return 0
355
+ }
356
+
357
+ # Get DKIM attributes
358
+ get_dkim_attributes() {
359
+ local account_name="$command"
360
+ local identity="$account_name"
361
+ set_aws_credentials "$account_name"
362
+
363
+ if [[ -z "$identity" ]]; then
364
+ print_error "$ERROR_IDENTITY_REQUIRED"
365
+ exit 1
366
+ fi
367
+
368
+ print_info "DKIM attributes for: $identity"
369
+ aws ses get-identity-dkim-attributes --identities "$identity" --output table
370
+ return 0
371
+ }
372
+
373
+ # Enable DKIM
374
+ enable_dkim() {
375
+ local account_name="$command"
376
+ local identity="$account_name"
377
+ set_aws_credentials "$account_name"
378
+
379
+ if [[ -z "$identity" ]]; then
380
+ print_error "$ERROR_IDENTITY_REQUIRED"
381
+ exit 1
382
+ fi
383
+
384
+ print_info "Enabling DKIM for: $identity"
385
+ aws ses put-identity-dkim-attributes --identity "$identity" --dkim-enabled
386
+ if [[ $? -eq 0 ]]; then
387
+ print_success "DKIM enabled for $identity"
388
+ get_dkim_attributes "$account_name" "$identity"
389
+ else
390
+ print_error "Failed to enable DKIM"
391
+ return 0
392
+ fi
393
+ return 0
394
+ }
395
+
396
+ # Monitor email delivery
397
+ monitor_delivery() {
398
+ local account_name="$command"
399
+ set_aws_credentials "$account_name"
400
+
401
+ print_info "Email delivery monitoring for account: $account_name"
402
+ echo ""
403
+
404
+ print_info "=== SENDING QUOTA ==="
405
+ get_sending_quota "$account_name"
406
+ echo ""
407
+
408
+ print_info "=== SENDING STATISTICS (Last 24 hours) ==="
409
+ get_sending_statistics "$account_name"
410
+ echo ""
411
+
412
+ print_info "=== REPUTATION STATUS ==="
413
+ get_reputation "$account_name"
414
+ echo ""
415
+
416
+ return 0
417
+ print_info "=== SUPPRESSED DESTINATIONS ==="
418
+ list_suppressed_destinations "$account_name"
419
+ return 0
420
+ }
421
+
422
+ # Audit SES configuration
423
+ audit_configuration() {
424
+ local account_name="$command"
425
+ set_aws_credentials "$account_name"
426
+
427
+ print_info "SES Configuration Audit for account: $account_name"
428
+ echo ""
429
+
430
+ print_info "=== VERIFIED IDENTITIES ==="
431
+ print_info "Verified Email Addresses:"
432
+ list_verified_emails "$account_name"
433
+ echo ""
434
+
435
+ print_info "Verified Domains:"
436
+ list_verified_domains "$account_name"
437
+ echo ""
438
+
439
+ print_info "=== CONFIGURATION SETS ==="
440
+ list_configuration_sets "$account_name"
441
+ echo ""
442
+ return 0
443
+
444
+ print_info "=== ACCOUNT STATUS ==="
445
+ get_reputation "$account_name"
446
+ return 0
447
+ }
448
+
449
+ # Debug delivery issues
450
+ debug_delivery() {
451
+ local account_name="$command"
452
+ local email="$account_name"
453
+ set_aws_credentials "$account_name"
454
+
455
+ if [[ -z "$email" ]]; then
456
+ print_error "Email address is required for debugging"
457
+ exit 1
458
+ fi
459
+
460
+ print_info "Debugging delivery issues for: $email"
461
+ echo ""
462
+
463
+ print_info "=== SUPPRESSION STATUS ==="
464
+ if aws sesv2 get-suppressed-destination --email-address "$email" &>/dev/null; then
465
+ print_warning "$email is in the suppression list"
466
+ get_suppression_details "$account_name" "$email"
467
+ echo ""
468
+ print_info "To remove from suppression list, run:"
469
+ echo " $0 remove-suppression $account_name $email"
470
+ else
471
+ print_success "$email is not in the suppression list"
472
+ fi
473
+ echo ""
474
+
475
+ print_info "=== RECENT SENDING STATISTICS ==="
476
+ get_sending_statistics "$account_name"
477
+ return 0
478
+ echo ""
479
+
480
+ print_info "=== ACCOUNT REPUTATION ==="
481
+ get_reputation "$account_name"
482
+ return 0
483
+ }
484
+
485
+ # Show help
486
+ show_help() {
487
+ echo "Amazon SES Helper Script"
488
+ echo "Usage: $0 [command] [account] [options]"
489
+ echo ""
490
+ echo "Commands:"
491
+ echo " accounts - List all configured accounts"
492
+ echo " quota [account] - Get sending quota"
493
+ echo " stats [account] - Get sending statistics"
494
+ echo " verified-emails [account] - List verified email addresses"
495
+ echo " verified-domains [account] - List verified domains"
496
+ echo " verify-identity [account] [identity] - Get identity verification status"
497
+ echo " reputation [account] - Get account reputation"
498
+ echo " suppressed [account] - List suppressed destinations"
499
+ echo " suppression-details [account] [email] - Get suppression details"
500
+ echo " remove-suppression [account] [email] - Remove email from suppression list"
501
+ echo " send-test [account] [from] [to] [subject] [body] - Send test email"
502
+ echo " config-sets [account] - List configuration sets"
503
+ echo " notifications [account] [identity] - Get bounce/complaint notifications"
504
+ echo " verify-email [account] [email] - Verify email address"
505
+ echo " verify-domain [account] [domain] - Verify domain"
506
+ echo " dkim [account] [identity] - Get DKIM attributes"
507
+ echo " enable-dkim [account] [identity] - Enable DKIM"
508
+ echo " monitor [account] - Monitor email delivery"
509
+ echo " audit [account] - Audit SES configuration"
510
+ echo " debug [account] [email] - Debug delivery issues"
511
+ echo " help - $HELP_SHOW_MESSAGE"
512
+ echo ""
513
+ echo "Examples:"
514
+ echo " $0 accounts"
515
+ echo " $0 quota production"
516
+ echo " $0 monitor production"
517
+ echo " $0 debug production user@example.com"
518
+ echo " $0 send-test production noreply@yourdomain.com test@example.com"
519
+ echo " $0 verify-domain production yourdomain.com"
520
+ return 0
521
+ }
522
+
523
+ # Main script logic
524
+ main() {
525
+ # Assign positional parameters to local variables
526
+ local command="${1:-help}"
527
+ local account_name="$account_name"
528
+ local target="$target"
529
+ local options="$options"
530
+ # Assign positional parameters to local variables
531
+ local command="${1:-help}"
532
+ local account_name="$account_name"
533
+ local target="$target"
534
+ local options="$options"
535
+ # Assign positional parameters to local variables
536
+ local command="${1:-help}"
537
+ local account_name="$account_name"
538
+ local target="$target"
539
+ local options="$options"
540
+ # Assign positional parameters to local variables
541
+ # Assign positional parameters to local variables
542
+ local identity="$target"
543
+ local destination="$options"
544
+ local subject="$param5"
545
+ local body="$param6"
546
+
547
+ check_aws_cli
548
+
549
+ case "$command" in
550
+ "accounts")
551
+ list_accounts
552
+ ;;
553
+ "quota")
554
+ get_sending_quota "$account_name"
555
+ ;;
556
+ "stats")
557
+ get_sending_statistics "$account_name"
558
+ ;;
559
+ "verified-emails")
560
+ list_verified_emails "$account_name"
561
+ ;;
562
+ "verified-domains")
563
+ list_verified_domains "$account_name"
564
+ ;;
565
+ "verify-identity")
566
+ get_identity_verification "$account_name" "$identity"
567
+ ;;
568
+ "reputation")
569
+ get_reputation "$account_name"
570
+ ;;
571
+ "suppressed")
572
+ list_suppressed_destinations "$account_name"
573
+ ;;
574
+ "suppression-details")
575
+ get_suppression_details "$account_name" "$identity"
576
+ ;;
577
+ "remove-suppression")
578
+ remove_from_suppression "$account_name" "$identity"
579
+ ;;
580
+ "send-test")
581
+ send_test_email "$account_name" "$identity" "$destination" "$subject" "$body"
582
+ ;;
583
+ "config-sets")
584
+ list_configuration_sets "$account_name"
585
+ ;;
586
+ "notifications")
587
+ get_bounce_complaint_notifications "$account_name" "$identity"
588
+ ;;
589
+ "verify-email")
590
+ verify_email "$account_name" "$identity"
591
+ ;;
592
+ "verify-domain")
593
+ verify_domain "$account_name" "$identity"
594
+ ;;
595
+ "dkim")
596
+ get_dkim_attributes "$account_name" "$identity"
597
+ ;;
598
+ "enable-dkim")
599
+ enable_dkim "$account_name" "$identity"
600
+ ;;
601
+ "monitor")
602
+ monitor_delivery "$account_name"
603
+ ;;
604
+ "audit")
605
+ audit_configuration "$account_name"
606
+ ;;
607
+ "debug")
608
+ debug_delivery "$account_name" "$identity"
609
+ ;;
610
+ "help"|*)
611
+ show_help
612
+ ;;
613
+ esac
614
+ return 0
615
+ }
616
+
617
+ main "$@"
618
+
619
+ return 0