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,701 @@
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
+ # 101domains Registrar Helper Script
5
+ # Comprehensive domain and DNS management for AI assistants
6
+
7
+ # Colors for output
8
+ # String literal constants
9
+ readonly ERROR_DOMAIN_NAME_REQUIRED="Domain name is required"
10
+
11
+ GREEN='\033[0;32m'
12
+ BLUE='\033[0;34m'
13
+ YELLOW='\033[1;33m'
14
+ RED='\033[0;31m'
15
+ NC='\033[0m' # No Color
16
+
17
+ # Common message constants
18
+ readonly HELP_SHOW_MESSAGE="Show this help"
19
+ readonly USAGE_COMMAND_OPTIONS="Usage: $0 <command> [options]"
20
+
21
+ # Common constants
22
+ readonly CONTENT_TYPE_JSON="$CONTENT_TYPE_JSON"
23
+
24
+ print_info() {
25
+ local msg="$1"
26
+ echo -e "${BLUE}[INFO]${NC} $msg"
27
+ return 0
28
+ }
29
+
30
+ print_success() {
31
+ local msg="$1"
32
+ echo -e "${GREEN}[SUCCESS]${NC} $msg"
33
+ return 0
34
+ }
35
+
36
+ print_warning() {
37
+ local msg="$1"
38
+ echo -e "${YELLOW}[WARNING]${NC} $msg"
39
+ return 0
40
+ }
41
+
42
+ print_error() {
43
+ local msg="$1"
44
+ echo -e "${RED}[ERROR]${NC} $msg" >&2
45
+ return 0
46
+ }
47
+
48
+ CONFIG_FILE="../configs/101domains-config.json"
49
+ API_BASE_URL="https://api.101domain.com/v4"
50
+
51
+ # Check dependencies
52
+ check_dependencies() {
53
+ if ! command -v curl &> /dev/null; then
54
+ print_error "$ERROR_CURL_REQUIRED"
55
+ exit 1
56
+ fi
57
+
58
+ if ! command -v jq &> /dev/null; then
59
+ print_error "$ERROR_JQ_REQUIRED"
60
+ echo "$INFO_JQ_INSTALL_MACOS" >&2
61
+ echo "$INFO_JQ_INSTALL_UBUNTU" >&2
62
+ exit 1
63
+ fi
64
+
65
+ return 0
66
+ }
67
+
68
+ # Load configuration
69
+ load_config() {
70
+ if [[ ! -f "$CONFIG_FILE" ]]; then
71
+ print_error "$ERROR_CONFIG_NOT_FOUND"
72
+ print_info "Copy and customize: cp ../configs/101domains-config.json.txt $CONFIG_FILE"
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 "$ERROR_ACCOUNT_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
+ # Make API request
101
+ api_request() {
102
+ local account_name="$command"
103
+ local method="$account_name"
104
+ local endpoint="$target"
105
+ local data="$options"
106
+
107
+ local config
108
+ config=$(get_account_config "$account_name")
109
+ local api_key
110
+ local username
111
+ api_key=$(echo "$config" | jq -r '.api_key')
112
+ username=$(echo "$config" | jq -r '.username')
113
+
114
+ if [[ "$api_key" == "null" || "$username" == "null" ]]; then
115
+ print_error "Invalid API credentials for account '$account_name'"
116
+ exit 1
117
+ fi
118
+
119
+ local auth_header
120
+ auth_header="Authorization: Basic $(echo -n "$username:$api_key" | base64)"
121
+ local url="$API_BASE_URL/$endpoint"
122
+
123
+ if [[ "$method" == "GET" ]]; then
124
+ curl -s -H "$auth_header" -H "$CONTENT_TYPE_JSON" "$url"
125
+ elif [[ "$method" == "POST" ]]; then
126
+ curl -s -X POST -H "$auth_header" -H "$CONTENT_TYPE_JSON" -d "$data" "$url"
127
+ elif [[ "$method" == "PUT" ]]; then
128
+ curl -s -X PUT -H "$auth_header" -H "$CONTENT_TYPE_JSON" -d "$data" "$url"
129
+ elif [[ "$method" == "DELETE" ]]; then
130
+ curl -s -X DELETE -H "$auth_header" -H "$CONTENT_TYPE_JSON" "$url"
131
+ fi
132
+
133
+ return 0
134
+ }
135
+
136
+ # List all configured accounts
137
+ list_accounts() {
138
+ load_config
139
+ print_info "Available 101domains accounts:"
140
+ jq -r '.accounts | keys[]' "$CONFIG_FILE" | while read -r account; do
141
+ local description
142
+ description=$(jq -r ".accounts.\"$account\".description" "$CONFIG_FILE")
143
+ local username
144
+ username=$(jq -r ".accounts.\"$account\".username" "$CONFIG_FILE")
145
+ echo " - $account ($username) - $description"
146
+ done
147
+ return 0
148
+ }
149
+
150
+ # List domains
151
+ list_domains() {
152
+ local account_name="$command"
153
+
154
+ print_info "Listing domains for account: $account_name"
155
+ local response
156
+ if response=$(api_request "$account_name" "GET" "domain/list"); then
157
+ echo "$response" | jq -r '.result.domains[]? | "\(.domain) - Status: \(.status) - Expires: \(.expiry_date)"'
158
+ else
159
+ print_error "Failed to retrieve domains"
160
+ echo "$response"
161
+ fi
162
+ return 0
163
+ }
164
+
165
+ # Get domain details
166
+ get_domain_details() {
167
+ local account_name="$command"
168
+ local domain="$account_name"
169
+
170
+ if [[ -z "$domain" ]]; then
171
+ print_error "$ERROR_DOMAIN_NAME_REQUIRED"
172
+ exit 1
173
+ fi
174
+
175
+ print_info "Getting details for domain: $domain"
176
+ local response
177
+ if response=$(api_request "$account_name" "GET" "domain/info?domain=$domain"); then
178
+ echo "$response" | jq '.'
179
+ else
180
+ print_error "Failed to get domain details"
181
+ echo "$response"
182
+ fi
183
+ return 0
184
+ }
185
+
186
+ # List DNS records
187
+ list_dns_records() {
188
+ local account_name="$command"
189
+ local domain="$account_name"
190
+
191
+ if [[ -z "$domain" ]]; then
192
+ print_error "$ERROR_DOMAIN_NAME_REQUIRED"
193
+ exit 1
194
+ fi
195
+
196
+ print_info "Listing DNS records for domain: $domain"
197
+ local response
198
+ if response=$(api_request "$account_name" "GET" "dns/list?domain=$domain"); then
199
+ echo "$response" | jq -r '.result.records[]? | "\(.name) \(.type) \(.content) (TTL: \(.ttl))"'
200
+ else
201
+ print_error "Failed to retrieve DNS records"
202
+ echo "$response"
203
+ fi
204
+ return 0
205
+ }
206
+
207
+ # Add DNS record
208
+ add_dns_record() {
209
+ local account_name="$command"
210
+ local domain="$account_name"
211
+ local name="$target"
212
+ local type="$options"
213
+ local content="$5"
214
+ local ttl="${6:-3600}"
215
+
216
+ if [[ -z "$domain" || -z "$name" || -z "$type" || -z "$content" ]]; then
217
+ print_error "Domain, name, type, and content are required"
218
+ exit 1
219
+ fi
220
+
221
+ local data
222
+ data=$(jq -n \
223
+ --arg domain "$domain" \
224
+ --arg name "$name" \
225
+ --arg type "$type" \
226
+ --arg content "$content" \
227
+ --arg ttl "$ttl" \
228
+ '{domain: $domain, name: $name, type: $type, content: $content, ttl: ($ttl | tonumber)}')
229
+
230
+ print_info "Adding DNS record: $name $type $content"
231
+ local response
232
+ if response=$(api_request "$account_name" "POST" "dns/add" "$data"); then
233
+ print_success "DNS record added successfully"
234
+ echo "$response" | jq '.'
235
+ else
236
+ print_error "Failed to add DNS record"
237
+ echo "$response"
238
+ fi
239
+ return 0
240
+ }
241
+
242
+ # Update DNS record
243
+ update_dns_record() {
244
+ local account_name="$command"
245
+ local domain="$account_name"
246
+ local record_id="$target"
247
+ local name="$options"
248
+ local type="$5"
249
+ local content="$6"
250
+ local ttl="${7:-3600}"
251
+
252
+ if [[ -z "$domain" || -z "$record_id" || -z "$name" || -z "$type" || -z "$content" ]]; then
253
+ print_error "Domain, record ID, name, type, and content are required"
254
+ exit 1
255
+ fi
256
+
257
+ local data=$(jq -n \
258
+ --arg domain "$domain" \
259
+ --arg record_id "$record_id" \
260
+ --arg name "$name" \
261
+ --arg type "$type" \
262
+ --arg content "$content" \
263
+ --arg ttl "$ttl" \
264
+ '{domain: $domain, record_id: $record_id, name: $name, type: $type, content: $content, ttl: ($ttl | tonumber)}')
265
+
266
+ print_info "Updating DNS record: $record_id"
267
+ local response
268
+ if response=$(api_request "$account_name" "POST" "dns/update" "$data"); then
269
+ print_success "DNS record updated successfully"
270
+ echo "$response" | jq '.'
271
+ else
272
+ print_error "Failed to update DNS record"
273
+ echo "$response"
274
+ fi
275
+ return 0
276
+ }
277
+
278
+ # Delete DNS record
279
+ delete_dns_record() {
280
+ local account_name="$command"
281
+ local domain="$account_name"
282
+ local record_id="$target"
283
+
284
+ if [[ -z "$domain" || -z "$record_id" ]]; then
285
+ print_error "Domain and record ID are required"
286
+ exit 1
287
+ fi
288
+
289
+ local data=$(jq -n \
290
+ --arg domain "$domain" \
291
+ --arg record_id "$record_id" \
292
+ '{domain: $domain, record_id: $record_id}')
293
+
294
+ print_warning "Deleting DNS record: $record_id"
295
+ local response
296
+ if response=$(api_request "$account_name" "POST" "dns/delete" "$data"); then
297
+ print_success "DNS record deleted successfully"
298
+ echo "$response" | jq '.'
299
+ else
300
+ print_error "Failed to delete DNS record"
301
+ echo "$response"
302
+ fi
303
+ return 0
304
+ }
305
+
306
+ # Get domain nameservers
307
+ get_nameservers() {
308
+ local account_name="$command"
309
+ local domain="$account_name"
310
+
311
+ if [[ -z "$domain" ]]; then
312
+ print_error "$ERROR_DOMAIN_NAME_REQUIRED"
313
+ exit 1
314
+ fi
315
+
316
+ print_info "Getting nameservers for domain: $domain"
317
+ local response
318
+ if response=$(api_request "$account_name" "GET" "domain/nameservers?domain=$domain"); then
319
+ echo "$response" | jq -r '.result.nameservers[]?'
320
+ else
321
+ print_error "Failed to get nameservers"
322
+ echo "$response"
323
+ fi
324
+ return 0
325
+ }
326
+
327
+ # Update nameservers
328
+ update_nameservers() {
329
+ local account_name="$command"
330
+ local domain="$account_name"
331
+ shift 2
332
+ local nameservers=("$@")
333
+
334
+ if [[ -z "$domain" || ${#nameservers[@]} -eq 0 ]]; then
335
+ print_error "Domain and at least one nameserver are required"
336
+ exit 1
337
+ fi
338
+
339
+ local ns_json
340
+ ns_json=$(printf '%s\n' "${nameservers[@]}" | jq -R . | jq -s .)
341
+ local data
342
+ data=$(jq -n --arg domain "$domain" --argjson nameservers "$ns_json" '{domain: $domain, nameservers: $nameservers}')
343
+
344
+ print_info "Updating nameservers for domain: $domain"
345
+ local response
346
+ if response=$(api_request "$account_name" "POST" "domain/nameservers" "$data"); then
347
+ print_success "Nameservers updated successfully"
348
+ echo "$response" | jq '.'
349
+ else
350
+ print_error "Failed to update nameservers"
351
+ echo "$response"
352
+ fi
353
+ return 0
354
+ }
355
+
356
+ # Check domain availability
357
+ check_availability() {
358
+ local account_name="$command"
359
+ local domain="$account_name"
360
+
361
+ if [[ -z "$domain" ]]; then
362
+ print_error "$ERROR_DOMAIN_NAME_REQUIRED"
363
+ exit 1
364
+ fi
365
+
366
+ print_info "Checking availability for domain: $domain"
367
+ local response
368
+ if response=$(api_request "$account_name" "GET" "domain/check?domain=$domain"); then
369
+ local available
370
+ available=$(echo "$response" | jq -r '.result.available')
371
+ local price
372
+ price=$(echo "$response" | jq -r '.result.price // "N/A"')
373
+
374
+ if [[ "$available" == "true" ]]; then
375
+ print_success "Domain $domain is available for $price"
376
+ else
377
+ print_warning "Domain $domain is not available"
378
+ fi
379
+ echo "$response" | jq '.'
380
+ else
381
+ print_error "Failed to check domain availability"
382
+ echo "$response"
383
+ fi
384
+ return 0
385
+ }
386
+
387
+ # Get domain contacts
388
+ get_domain_contacts() {
389
+ local account_name="$command"
390
+ local domain="$account_name"
391
+
392
+ if [[ -z "$domain" ]]; then
393
+ print_error "$ERROR_DOMAIN_NAME_REQUIRED"
394
+ exit 1
395
+ fi
396
+
397
+ print_info "Getting contacts for domain: $domain"
398
+ local response
399
+ if response=$(api_request "$account_name" "GET" "domain/contacts?domain=$domain"); then
400
+ echo "$response" | jq '.'
401
+ else
402
+ print_error "Failed to get domain contacts"
403
+ echo "$response"
404
+ fi
405
+ return 0
406
+ }
407
+
408
+ # Enable/disable domain lock
409
+ toggle_domain_lock() {
410
+ local account_name="$command"
411
+ local domain="$account_name"
412
+ local action="$target" # "lock" or "unlock"
413
+
414
+ if [[ -z "$domain" || -z "$action" ]]; then
415
+ print_error "Domain and action (lock/unlock) are required"
416
+ exit 1
417
+ fi
418
+
419
+ local lock_status="1"
420
+ if [[ "$action" == "unlock" ]]; then
421
+ lock_status="0"
422
+ fi
423
+
424
+ local data
425
+ data=$(jq -n --arg domain "$domain" --arg lock "$lock_status" '{domain: $domain, lock: $lock}')
426
+
427
+ print_info "${action^}ing domain: $domain"
428
+ local response
429
+ if response=$(api_request "$account_name" "POST" "domain/lock" "$data"); then
430
+ print_success "Domain ${action}ed successfully"
431
+ echo "$response" | jq '.'
432
+ else
433
+ print_error "Failed to $action domain"
434
+ echo "$response"
435
+ fi
436
+ return 0
437
+ }
438
+
439
+ # Get domain transfer status
440
+ get_transfer_status() {
441
+ local account_name="$command"
442
+ local domain="$account_name"
443
+
444
+ if [[ -z "$domain" ]]; then
445
+ print_error "$ERROR_DOMAIN_NAME_REQUIRED"
446
+ exit 1
447
+ fi
448
+
449
+ print_info "Getting transfer status for domain: $domain"
450
+ local response
451
+ if response=$(api_request "$account_name" "GET" "domain/transfer/status?domain=$domain"); then
452
+ echo "$response" | jq '.'
453
+ else
454
+ print_error "Failed to get transfer status"
455
+ echo "$response"
456
+ fi
457
+ return 0
458
+ }
459
+
460
+ # Get domain privacy status
461
+ get_privacy_status() {
462
+ local account_name="$command"
463
+ local domain="$account_name"
464
+
465
+ if [[ -z "$domain" ]]; then
466
+ print_error "$ERROR_DOMAIN_NAME_REQUIRED"
467
+ exit 1
468
+ fi
469
+
470
+ print_info "Getting privacy status for domain: $domain"
471
+ local response
472
+ if response=$(api_request "$account_name" "GET" "domain/privacy?domain=$domain"); then
473
+ echo "$response" | jq '.'
474
+ else
475
+ print_error "Failed to get privacy status"
476
+ echo "$response"
477
+ fi
478
+ return 0
479
+ }
480
+
481
+ # Toggle domain privacy
482
+ toggle_domain_privacy() {
483
+ local account_name="$command"
484
+ local domain="$account_name"
485
+ local action="$target" # "enable" or "disable"
486
+
487
+ if [[ -z "$domain" || -z "$action" ]]; then
488
+ print_error "Domain and action (enable/disable) are required"
489
+ exit 1
490
+ fi
491
+
492
+ local privacy_status="1"
493
+ if [[ "$action" == "disable" ]]; then
494
+ privacy_status="0"
495
+ fi
496
+
497
+ local data
498
+ data=$(jq -n --arg domain "$domain" --arg privacy "$privacy_status" '{domain: $domain, privacy: $privacy}')
499
+
500
+ print_info "${action^}ing privacy for domain: $domain"
501
+ local response
502
+ if response=$(api_request "$account_name" "POST" "domain/privacy" "$data"); then
503
+ print_success "Domain privacy ${action}d successfully"
504
+ echo "$response" | jq '.'
505
+ else
506
+ print_error "Failed to $action domain privacy"
507
+ echo "$response"
508
+ fi
509
+ return 0
510
+ }
511
+
512
+ # Audit domain configuration
513
+ audit_domain() {
514
+ local account_name="$command"
515
+ local domain="$account_name"
516
+
517
+ if [[ -z "$domain" ]]; then
518
+ print_error "$ERROR_DOMAIN_NAME_REQUIRED"
519
+ exit 1
520
+ fi
521
+
522
+ print_info "Auditing domain configuration: $domain"
523
+ echo ""
524
+
525
+ print_info "=== DOMAIN DETAILS ==="
526
+ get_domain_details "$account_name" "$domain"
527
+ echo ""
528
+
529
+ print_info "=== NAMESERVERS ==="
530
+ get_nameservers "$account_name" "$domain"
531
+ echo ""
532
+
533
+ print_info "=== DNS RECORDS ==="
534
+ list_dns_records "$account_name" "$domain"
535
+ echo ""
536
+
537
+ print_info "=== DOMAIN CONTACTS ==="
538
+ get_domain_contacts "$account_name" "$domain"
539
+ echo ""
540
+
541
+ print_info "=== PRIVACY STATUS ==="
542
+ get_privacy_status "$account_name" "$domain"
543
+ return 0
544
+ }
545
+
546
+ # Monitor domain expiration
547
+ monitor_expiration() {
548
+ local account_name="$command"
549
+ local days_threshold="${2:-30}"
550
+
551
+ print_info "Monitoring domain expiration (threshold: $days_threshold days)"
552
+ local response
553
+ if response=$(api_request "$account_name" "GET" "domain/list"); then
554
+ echo "$response" | jq -r --arg threshold "$days_threshold" '
555
+ .result.domains[]? |
556
+ select(.expiry_date != null) |
557
+ select(((.expiry_date | strptime("%Y-%m-%d") | mktime) - now) / 86400 < ($threshold | tonumber)) |
558
+ "\(.domain) expires on \(.expiry_date) (\((((.expiry_date | strptime("%Y-%m-%d") | mktime) - now) / 86400 | floor)) days)"
559
+ '
560
+ else
561
+ print_error "Failed to retrieve domain expiration data"
562
+ echo "$response"
563
+ fi
564
+ return 0
565
+ }
566
+
567
+ # Show help
568
+ show_help() {
569
+ echo "101domains Registrar Helper Script"
570
+ echo "Usage: $0 [command] [account] [options]"
571
+ echo ""
572
+ echo "Commands:"
573
+ echo " accounts - List all configured accounts"
574
+ echo " domains [account] - List all domains"
575
+ echo " domain-details [account] [domain] - Get domain details"
576
+ echo " dns-records [account] [domain] - List DNS records"
577
+ echo " add-dns [account] [domain] [name] [type] [content] [ttl] - Add DNS record"
578
+ echo " update-dns [account] [domain] [id] [name] [type] [content] [ttl] - Update DNS record"
579
+ echo " delete-dns [account] [domain] [id] - Delete DNS record"
580
+ echo " nameservers [account] [domain] - Get nameservers"
581
+ echo " update-ns [account] [domain] [ns1] [ns2...] - Update nameservers"
582
+ echo " check-availability [account] [domain] - Check domain availability"
583
+ echo " contacts [account] [domain] - Get domain contacts"
584
+ echo " lock [account] [domain] - Lock domain"
585
+ echo " unlock [account] [domain] - Unlock domain"
586
+ echo " transfer-status [account] [domain] - Get transfer status"
587
+ echo " privacy-status [account] [domain] - Get privacy status"
588
+ echo " enable-privacy [account] [domain] - Enable domain privacy"
589
+ echo " disable-privacy [account] [domain] - Disable domain privacy"
590
+ echo " audit [account] [domain] - Audit domain configuration"
591
+ echo " monitor-expiration [account] [days] - Monitor domain expiration"
592
+ echo " help - $HELP_SHOW_MESSAGE"
593
+ echo ""
594
+ echo "Examples:"
595
+ echo " $0 accounts"
596
+ echo " $0 domains personal"
597
+ echo " $0 dns-records personal example.com"
598
+ echo " $0 add-dns personal example.com www A 192.168.1.100"
599
+ echo " $0 audit personal example.com"
600
+ echo " $0 monitor-expiration personal 30"
601
+ echo " $0 enable-privacy personal example.com"
602
+ return 0
603
+ }
604
+
605
+ # Main script logic
606
+ main() {
607
+ # Assign positional parameters to local variables
608
+ local command="${1:-help}"
609
+ local account_name="$account_name"
610
+ local target="$target"
611
+ local options="$options"
612
+ # Assign positional parameters to local variables
613
+ local command="${1:-help}"
614
+ local account_name="$account_name"
615
+ local target="$target"
616
+ local options="$options"
617
+ # Assign positional parameters to local variables
618
+ local command="${1:-help}"
619
+ local account_name="$account_name"
620
+ local target="$target"
621
+ local options="$options"
622
+ # Assign positional parameters to local variables
623
+ # Assign positional parameters to local variables for better maintainability
624
+ local domain="$target"
625
+ local record_name="$options"
626
+ local record_type="$5"
627
+ local record_content="$6"
628
+ local record_ttl="$7"
629
+ local record_id="$8"
630
+
631
+ check_dependencies
632
+
633
+ case "$command" in
634
+ "accounts")
635
+ list_accounts
636
+ ;;
637
+ "domains")
638
+ list_domains "$account_name"
639
+ ;;
640
+ "domain-details")
641
+ get_domain_details "$account_name" "$domain"
642
+ ;;
643
+ "dns-records")
644
+ list_dns_records "$account_name" "$domain"
645
+ ;;
646
+ "add-dns")
647
+ add_dns_record "$account_name" "$domain" "$record_name" "$record_type" "$record_content" "$record_ttl"
648
+ ;;
649
+ "update-dns")
650
+ update_dns_record "$account_name" "$domain" "$record_name" "$record_type" "$record_content" "$record_ttl" "$record_id"
651
+ ;;
652
+ "delete-dns")
653
+ delete_dns_record "$account_name" "$domain" "$record_name"
654
+ ;;
655
+ "nameservers")
656
+ get_nameservers "$account_name" "$domain"
657
+ ;;
658
+ "update-ns")
659
+ shift 3
660
+ update_nameservers "$account_name" "$domain" "$@"
661
+ ;;
662
+ "check-availability")
663
+ check_availability "$account_name" "$domain"
664
+ ;;
665
+ "contacts")
666
+ get_domain_contacts "$account_name" "$domain"
667
+ ;;
668
+ "lock")
669
+ toggle_domain_lock "$account_name" "$domain" "lock"
670
+ ;;
671
+ "unlock")
672
+ toggle_domain_lock "$account_name" "$domain" "unlock"
673
+ ;;
674
+ "transfer-status")
675
+ get_transfer_status "$account_name" "$domain"
676
+ ;;
677
+ "privacy-status")
678
+ get_privacy_status "$account_name" "$domain"
679
+ ;;
680
+ "enable-privacy")
681
+ toggle_domain_privacy "$account_name" "$domain" "enable"
682
+ ;;
683
+ "disable-privacy")
684
+ toggle_domain_privacy "$account_name" "$domain" "disable"
685
+ ;;
686
+ "audit")
687
+ audit_domain "$account_name" "$domain"
688
+ ;;
689
+ "monitor-expiration")
690
+ monitor_expiration "$account_name" "$domain"
691
+ ;;
692
+ "help"|*)
693
+ show_help
694
+ ;;
695
+ esac
696
+ return 0
697
+ }
698
+
699
+ main "$@"
700
+
701
+ return 0