介绍
# Gandi Domain Registrar Skill
Moltbot 的综合 Gandi 域名注册商集成。
**状态:** ✅ 第 2 阶段完成 - DNS 修改和快照功能已就绪
## ⚠️ 安全警告
**此技能可以对您的 Gandi 账户执行破坏性操作:**
- **DNS 修改:** 添加、更新或删除 DNS 记录(可能导致网站/邮件中断) - **邮件管理:** 创建、修改或删除邮件转发(可能会拦截邮件) - **域名注册:** 注册域名(产生金融交易) - **批量操作:** 一次性替换所有 DNS 记录(除非通过快照,否则无法撤销)
**运行任何脚本之前:** 1. 检查脚本代码以了解其作用 2. 在批量更改之前创建 DNS 快照(`create-snapshot.js`) 3. 尽可能使用只读个人访问令牌 (PAT) 4. 先在非生产域名上测试 5. 了解某些操作无法撤销
**破坏性脚本**(⚠️ 修改或删除数据): - `add-dns-record.js`, `delete-dns-record.js`, `update-dns-bulk.js` - `add-email-forward.js`, `update-email-forward.js`, `delete-email-forward.js` - `restore-snapshot.js`(替换当前 DNS)
**只读脚本**(✅ 安全,无修改): - `list-domains.js`, `list-dns.js`, `list-snapshots.js` - `list-email-forwards.js`, `check-domain.js`, `check-ssl.js`
📖 **完整脚本文档:** 请参阅 [SCRIPTS.md](SCRIPTS.md) 了解详细信息,包括: - 每个脚本的作用 - 网络操作和 API 调用 - 安全影响 - 撤销/恢复程序 - 审计工作流建议
## 当前功能
### 第 1 阶段(已完成) - ✅ 个人访问令牌 (PAT) 身份验证 - ✅ 列出您账户中的域名 - ✅ 获取域名详细信息(到期时间、状态、服务) - ✅ 列出域名的 DNS 记录 - ✅ 查看域名和 DNS 信息 - ✅ **域名可用性检查** ([#4](https://github.com/chrisagiddings/moltbot-gandi-skill/issues/4)) - ✅ **智能域名建议及变体** ([#4](https://github.com/chrisagiddings/moltbot-gandi-skill/issues/4)) - ✅ SSL 证书状态检查器 - ✅ 错误处理和验证
### 第 2 阶段(已完成) - ✅ **添加/更新 DNS 记录**(A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, PTR) - ✅ **删除 DNS 记录** - ✅ **批量 DNS 操作**(一次性替换所有记录) - ✅ **DNS 区域快照**(创建、列出、恢复) - ✅ **邮件转发**(创建、列出、更新、删除转发,包括全接 (catch-all)) - ✅ **记录验证**(每种记录类型的自动验证) - ✅ **安全功能**(批量更改前自动快照、确认提示)
## 即将推出(第 3 阶段+)
- 域名注册 - 多组织支持 ([#1](https://github.com/chrisagiddings/moltbot-gandi-skill/issues/1)) - Gateway Console 配置 ([#3](https://github.com/chrisagiddings/moltbot-gandi-skill/issues/3)) - 域名续费管理 - DNSSEC 配置 - 证书管理 - 邮箱管理(转发之外)
## 设置
### 步骤 1:创建个人访问令牌 (PAT)
**⚠️ 安全建议:** 针对您的用例使用**所需的最小权限范围**。
1. 前往 [Gandi Admin → Personal Access Tokens](https://admin.gandi.net/organizations/account/pat) 2. 点击 **"Create a token"** 3. 选择您的组织 4. 选择权限范围: **只读(推荐仅用于查看):** - ✅ Domain: read(列出域名所必需) - ✅ LiveDNS: read(查看 DNS 记录所必需) - ✅ Email: read(查看邮件转发所必需) **写入权限(修改操作所需,请谨慎使用):** - ⚠️ LiveDNS: write(启用 DNS 修改、删除、批量操作) - ⚠️ Email: write(启用邮件转发创建、更新、删除)
5. 复制令牌(您将无法再次看到它!)
**安全最佳实践:** - 为只读和写入操作创建单独的令牌 - 使用只读令牌进行常规检查/监控 - 仅在进行实际更改时使用写入令牌 - 定期轮换令牌(建议每 90 天) - 立即删除未使用的令牌 - **切勿分享或提交令牌到版本控制**
### 步骤 2:存储令牌
脚本按优先级顺序检查凭据: 1. **`GANDI_API_TOKEN` 环境变量**(首先检查) 2. **`~/.config/gandi/api_token` 文件**(如果未设置环境变量,则作为后备)
**选择适合您工作流程的方法:**
#### 选项 A:环境变量(推荐用于 CI/CD)
```bash # Set environment variable (replace YOUR_PAT with actual token) export GANDI_API_TOKEN="YOUR_PERSONAL_ACCESS_TOKEN"
# Add to shell profile for persistence (~/.bashrc, ~/.zshrc, etc.) echo 'export GANDI_API_TOKEN="YOUR_PERSONAL_ACCESS_TOKEN"' >> ~/.bashrc ```
**优点:** - ✅ 适合 CI/CD(自动化的标准模式) - ✅ 容器就绪(无需文件挂载) - ✅ 可配合密钥管理工具使用(1Password、Vault 等) - ✅ 易于在多个令牌之间切换
#### 选项 B:基于文件(推荐用于本地开发)
```bash # Create config directory mkdir -p ~/.config/gandi
# Store your token (replace YOUR_PAT with actual token) echo "YOUR_PERSONAL_ACCESS_TOKEN" > ~/.config/gandi/api_token
# Secure the file (owner read-only) chmod 600 ~/.config/gandi/api_token ```
**优点:** - ✅ 令牌在 Shell 会话之间持久保存 - ✅ 安全的文件权限(0600 = 仅所有者可读) - ✅ 没有在进程列表中暴露令牌的风险 - ✅ 可离线工作(无外部依赖)
### 步骤 3:安装依赖项
**要求:** Node.js >= 18.0.0
```bash cd gandi-skill/scripts
# Install npm dependencies npm install
# Verify installation npm list --depth=0 ```
**预期软件包:** - axios(用于 Gandi API 的 HTTP 客户端) - package.json 中列出的任何其他依赖项
**故障排除:** - 如果未找到 `node` 或 `npm`:请从 [nodejs.org](https://nodejs.org/) 安装 Node.js - 如果出现权限错误:不要使用 `sudo` - 修复 npm 权限或使用 nvm - 如果出现软件包错误:删除 `node_modules/` 和 `package-lock.json`,然后再次运行 `npm install`
### 步骤 4:测试身份验证
```bash cd gandi-skill/scripts node test-auth.js ```
预期输出: ``` ✅ Authentication successful!
Your organizations: 1. Personal Account (uuid-here) Type: individual
🎉 You're ready to use the Gandi skill! ```
### 步骤 5:设置联系信息(可选,用于域名注册)
如果您计划注册域名,请保存一次您的联系信息以便重复使用:
```bash cd gandi-skill/scripts node setup-contact.js ```
**脚本将提示输入:** - 姓名(名和姓) - 电子邮件地址 - 电话号码(国际格式:+1.5551234567) - 街道地址 - 城市 - 州/省(对于美国:2字母代码,如 OH,自动格式化为 US-OH) - 邮政编码 - 国家(2字母代码:US, FR 等) - 类型(个人或公司) - **隐私偏好:** 注册后保留或自动清除联系人
**联系信息将保存至:** - `~/.config/gandi/contact.json` - 权限:600(仅所有者读写) - 在技能目录之外(从未提交到 git)
**隐私选项:**
1. **RETAIN (保留,默认):** 保存联系人以供将来注册使用 - 最适合频繁注册域名 - 一次设置,永久使用 - 随时可以使用 `delete-contact.js` 手动删除
2. **PURGE (清除):** 每次注册后自动删除联系人 - 最适合注重隐私的用户 - 联系信息仅存在于注册期间 - 下次注册必须重新输入
**管理已保存的联系人:** ```bash # View current contact node view-contact.js
# Update contact info or privacy preference node setup-contact.js
# Delete saved contact manually node delete-contact.js
# Delete without confirmation node delete-contact.js --force ```
**一次性清除覆盖:** ```bash # Register and delete contact (even if preference is "retain") node register-domain.js example.com --purge-contact ```
## 使用示例
### 列出您的域名
```bash node list-domains.js ```
输出显示: - 域名 - 到期日期 - 自动续费状态 - 服务(LiveDNS、电子邮件等) - 组织所有权
### 列出 DNS 记录
```bash node list-dns.js example.com ```
输出显示: - 按 type 分组的所有 DNS 记录 - TTL 值 - 记录名称和值 - 名称服务器
### 在 Moltbot 中使用
配置完成后,您可以使用自然语言:
> "列出我的 Gandi 域名"
> "显示 example.com 的 DNS 记录"
> "example.com 什么时候到期?"
> "example.com 启用了自动续费吗?"
## 域名可用性检查
### 检查单个域名
检查特定域名是否可用于注册:
```bash node check-domain.js example.com ```
**功能:** - 显示可用性状态(available/unavailable/pending/error) - 显示价格信息(注册、续费、转移) - 列出支持的功能(DNSSEC、LiveDNS 等) - 显示 TLD 信息
**示例输出:** ``` 🔍 Checking availability for: example.com
Domain: example.com
✅ Status: AVAILABLE
💰 Pricing: 1 year: 12.00 EUR (+ 2.40 tax) 2 years: 24.00 EUR (+ 4.80 tax)
📋 Supported Features: • create • dnssec • livedns
🌐 TLD Information: Extension: com ```
### 智能域名建议
通过 TLD 变体和名称修改查找可用的替代方案:
```bash # Check all configured TLDs + variations node suggest-domains.js example
# Check specific TLDs only node suggest-domains.js example --tlds com,net,io
# Skip name variations (only check TLDs) node suggest-domains.js example --no-variations
# Output as JSON node suggest-domains.js example --json ```
**名称变体模式:** 1. **连字符:** 在单词边界之间添加连字符(`example` → `ex-ample`) 2. **缩写:** 删除元音(`example` → `exmpl`) 3. **前缀:** 添加常用前缀(`example` → `get-example`, `my-example`) 4. **后缀:** 添加常用后缀(`example` → `example-app`, `example-hub`) 5. **数字:** 附加数字(`example` → `example2`, `example3`)
**示例输出:** ``` 🔍 Checking availability for: example
📊 Checking 13 TLDs and generating variations...
═══════════════════════════════════════════════════════ 📋 EXACT MATCHES (Different TLDs) ═══════════════════════════════════════════════════════
✅ Available:
example.net 12.00 EUR example.io 39.00 EUR example.dev 15.00 EUR
❌ Unavailable:
example.com (unavailable) example.org (unavailable)
═══════════════════════════════════════════════════════ 🎨 NAME VARIATIONS ═══════════════════════════════════════════════════════
Hyphenated:
✅ ex-ample.com 12.00 EUR
Prefix:
✅ get-example.com 12.00 EUR ✅ my-example.com 12.00 EUR
Suffix:
✅ example-app.com 12.00 EUR ✅ example-io.com 12.00 EUR
═══════════════════════════════════════════════════════ 📊 SUMMARY: 8 available domains found ═══════════════════════════════════════════════════════ ```
### 配置
域名检查器配置存储在 `gandi-skill/config/domain-checker-defaults.json` 中。
**结构:** ```json { "tlds": { "mode": "extend", "defaults": ["com", "net", "org", "info", "io", "dev", "app", "ai", "tech"], "custom": [] }, "variations": { "enabled": true, "patterns": ["hyphenated", "abbreviated", "prefix", "suffix", "numbers"], "prefixes": ["get", "my", "the", "try"], "suffixes": ["app", "hub", "io", "ly", "ai", "hq"], "maxNumbers": 3 }, "rateLimit": { "maxConcurrent": 3, "delayMs": 200, "maxRequestsPerMinute": 100 }, "limits": { "maxTlds": 5, "maxVariations": 10 } } ```
**速率限制与限制:** - **maxConcurrent**:最大并发 API 请求数(默认:3) - **delayMs**:请求之间的延迟(毫秒)(默认:200ms) - **maxRequestsPerMinute**:每分钟请求的硬限制(默认:100,Gandi 允许 1000) - **maxTlds**:在 suggest-domains.js 中检查的最大 TLD 数(默认:5) - **maxVariations**:生成的最大名称变体数(默认:10)
这些限制确保良好的 API 行为,防止压垮 Gandi 的 API。
**TLD 模式:** - `"extend"`:使用默认值 + 自定义 TLD(合并列表) - `"replace"`:仅使用自定义 TLD(忽略默认值)
**Gateway Console 集成:**
当添加 Gateway Console 支持时 ([#3](https://github.com/chrisagiddings/moltbot-gandi-skill/issues/3)),配置将位于:
```yaml skills: entries: gandi: config: domainChecker: tlds: mode: extend defaults: [...] custom: [...] variations: enabled: true patterns: [...] ```
有关完整的配置架构,请参阅 `docs/gateway-config-design.md`。
## DNS 管理(第 2 阶段)
### 添加或更新 DNS 记录
创建或更新单个 DNS 记录:
```bash # Add an A record for root domain node add-dns-record.js example.com @ A 192.168.1.1
# Add www subdomain pointing to root node add-dns-record.js example.com www CNAME @
# Add MX record for email node add-dns-record.js example.com @ MX "10 mail.example.com."
# Add TXT record for SPF node add-dns-record.js example.com @ TXT "v=spf1 include:_spf.google.com ~all"
# Add with custom TTL (5 minutes) node add-dns-record.js example.com api A 192.168.1.10 300 ```
**支持的记录类型:** A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, PTR
### 删除 DNS 记录
删除特定的 DNS 记录:
```bash # Delete old A record node delete-dns-record.js example.com old A
# Delete with confirmation prompt node delete-dns-record.js example.com test CNAME
# Delete without confirmation node delete-dns-record.js example.com old A --force ```
### 批量 DNS 操作
一次性替换所有 DNS 记录:
```bash # From JSON file node update-dns-bulk.js example.com new-records.json
# From stdin cat records.json | node update-dns-bulk.js example.com
# Skip automatic snapshot node update-dns-bulk.js example.com records.json --no-snapshot
# Skip confirmation node update-dns-bulk.js example.com records.json --force ```
**JSON 格式:** ```json [ { "rrset_name": "@", "rrset_type": "A", "rrset_ttl": 10800, "rrset_values": ["192.168.1.1"] }, { "rrset_name": "www", "rrset_type": "CNAME", "rrset_ttl": 10800, "rrset_values": ["@"] }, { "rrset_name": "@", "rrset_type": "MX", "rrset_ttl": 10800, "rrset_values": ["10 mail.example.com.", "20 mail2.example.com."] } ] ```
### DNS 区域快照
在进行更改之前创建安全备份:
```bash # Create a snapshot node create-snapshot.js example.com "Before migration"
# List all snapshots node list-snapshots.js example.com
# Restore from a snapshot node restore-snapshot.js example.com abc123-def456-ghi789
# Restore without confirmation node restore-snapshot.js example.com abc123-def456-ghi789 --force ```
**自动快照:** - 批量更新会自动创建快照(除非使用 `--no-snapshot`) - 快照以时间戳命名 - 使用快照进行轻松回滚
### 常见 DNS 配置示例
#### 基本网站设置 ```bash # Root domain node add-dns-record.js example.com @ A 192.168.1.1
# WWW subdomain node add-dns-record.js example.com www CNAME @ ```
#### 电子邮件配置 (Google Workspace) ```bash # MX records node add-dns-record.js example.com @ MX "1 ASPMX.L.GOOGLE.COM." node add-dns-record.js example.com @ MX "5 ALT1.ASPMX.L.GOOGLE.COM." node add-dns-record.js example.com @ MX "5 ALT2.ASPMX.L.GOOGLE.COM."
# SPF record node add-dns-record.js example.com @ TXT "v=spf1 include:_spf.google.com ~all" ```
#### 域名重定向设置 要将一个域名重定向到另一个域名:
```bash # Point root domain to same server node add-dns-record.js old-domain.com @ A 192.168.1.1
# Point www to same CNAME node add-dns-record.js old-domain.com www CNAME @ ```
然后在服务器级别配置 HTTP 301 重定向。
#### 子域名设置 ```bash # API subdomain node add-dns-record.js example.com api A 192.168.1.10
# Staging subdomain node add-dns-record.js example.com staging A 192.168.1.20
# Wildcard subdomain node add-dns-record.js example.com "*" A 192.168.1.100 ```
## 电子邮件转发 (阶段 2)
### 列出电子邮件转发 查看为域名配置的所有电子邮件转发:
```bash node list-email-forwards.js example.com ```
### 创建电子邮件转发 将电子邮件转发到一个或多个目标地址:
```bash # Simple forward node add-email-forward.js example.com hello [email protected]
# Forward to multiple destinations node add-email-forward.js example.com support [email protected] [email protected]
# Catch-all forward (forwards all unmatched emails) node add-email-forward.js example.com @ [email protected] ```
### 更新电子邮件转发 更改现有转发的目标地址:
```bash # Update single destination node update-email-forward.js example.com hello [email protected]
# Update to multiple destinations node update-email-forward.js example.com support [email protected] [email protected] ```
**注意:** 这将用新地址替换所有现有目标地址。
### 删除电子邮件转发 移除电子邮件转发:
```bash # Delete with confirmation prompt node delete-email-forward.js example.com old
# Delete without confirmation node delete-email-forward.js example.com old --force
# Delete catch-all forward node delete-email-forward.js example.com @ --force ```
### 常见的电子邮件转发用例
#### 基本电子邮件转发 ```bash # Forward contact@ to your personal email node add-email-forward.js example.com contact [email protected]
# Forward sales@ to team node add-email-forward.js example.com sales [email protected] ```
#### 域名迁移电子邮件转发 ```bash # Forward all email from old domain to new domain # Preserves the local part (username before @)
# First, list existing forwards on old domain node list-email-forwards.js old-domain.com
# Then create matching forwards on new domain node add-email-forward.js old-domain.com contact [email protected] node add-email-forward.js old-domain.com support [email protected]
# Or use catch-all to forward everything node add-email-forward.js old-domain.com @ [email protected] ```
#### 团队分发列表 ```bash # Forward to entire team node add-email-forward.js example.com team [email protected] [email protected] [email protected]
# Update team members node update-email-forward.js example.com team [email protected] [email protected] ```
#### 全局接收 (Catch-All) 配置 ```bash # Forward all unmatched emails to one address node add-email-forward.js example.com @ [email protected]
# Forward all unmatched emails to multiple addresses node add-email-forward.js example.com @ [email protected] [email protected] ```
**注意:** 全局接收转发仅适用于未配置特定转发的电子邮件地址。
### 电子邮件转发管理技巧
1. **创建后进行测试:** 发送测试电子邮件以验证转发是否正常工作 2. **优先使用特定转发而非全局接收:** 控制力更强且更易于管理 3. **多个目标地址:** 电子邮件将发送到所有目标地址(非轮询) 4. **顺序无关紧要:** Gandi 会优先处理最具体的匹配 5. **检查垃圾邮件文件夹:** 转发的电子邮件可能会被收件人的垃圾邮件过滤器过滤
### 示例:完整的域名电子邮件设置
```bash # 1. Set up MX records (if not already done) node add-dns-record.js example.com @ MX "10 spool.mail.gandi.net." node add-dns-record.js example.com @ MX "50 fb.mail.gandi.net."
# 2. Create specific forwards node add-email-forward.js example.com hello [email protected] node add-email-forward.js example.com support [email protected] node add-email-forward.js example.com sales [email protected]
# 3. Set up catch-all for everything else node add-email-forward.js example.com @ [email protected]
# 4. List all forwards to verify node list-email-forwards.js example.com ```
## 辅助脚本
所有脚本位于 `gandi-skill/scripts/` 中:
### 身份验证与设置 | 脚本 | 用途 | |--------|---------| | `test-auth.js` | 验证身份验证是否有效 | | `setup-contact.js` | 保存域名注册的联系信息(运行一次) | | `view-contact.js` | 查看保存的联系信息 | | `delete-contact.js` | 删除保存的联系信息(可选 --force) |
### 域名和 DNS 查看 | 脚本 | 用途 | |--------|---------| | `list-domains.js` | 列出账户中的所有域名 | | `list-dns.js <domain>` | 显示域名的 DNS 记录 | | `check-domain.js <domain>` | 检查单个域名的可用性和价格 | | `suggest-domains.js <name>` | 智能域名建议及变体 | | `check-ssl.js` | 检查所有域名的 SSL 证书状态 |
### DNS 修改 (阶段 2) | 脚本 | 用途 | |--------|---------| | `add-dns-record.js <domain> <name> <type> <value> [ttl]` | 添加或更新 DNS 记录 | | `delete-dns-record.js <domain> <name> <type> [--force]` | 删除 DNS 记录 | | `update-dns-bulk.js <domain> <records.json> [--no-snapshot] [--force]` | 批量更新所有 DNS 记录 | | `list-snapshots.js <domain>` | 列出 DNS 区域快照 | | `create-snapshot.js <domain> [name]` | 创建 DNS 区域快照 | | `restore-snapshot.js <domain> <snapshot-id> [--force]` | 从快照恢复 DNS 区域 |
### 电子邮件转发 (阶段 2) | 脚本 | 用途 | |--------|---------| | `list-email-forwards.js <domain>` | 列出域名的所有电子邮件转发 | | `add-email-forward.js <domain> <mailbox> <destination> [dest2...]` | 创建电子邮件转发(使用 @ 表示全局接收) | | `update-email-forward.js <domain> <mailbox> <destination> [dest2...]` | 更新电子邮件转发目标地址 | | `delete-email-forward.js <domain> <mailbox> [--force]` | 删除电子邮件转发 |
### 核心库 | 脚本 | 用途 | |--------|---------| | `gandi-api.js` | 核心 API 客户端(可导入) |
## 配置
### 默认配置
- **Token 文件:** `~/.config/gandi/api_token` (API 身份验证) - **联系人文件:** `~/.config/gandi/contact.json` (域名注册信息,可选) - **API URL:** `https://api.gandi.net` (生产环境)
### 沙盒测试
要使用 Gandi 的沙盒环境:
```bash # Create sandbox token at: https://admin.sandbox.gandi.net echo "YOUR_SANDBOX_TOKEN" > ~/.config/gandi/api_token echo "https://api.sandbox.gandi.net" > ~/.config/gandi/api_url ```
## 故障排除
### 未找到 Token
```bash # Verify file exists ls -la ~/.config/gandi/api_token
# Should show: -rw------- (600 permissions) ```
### 身份验证失败 (401)
- Token 不正确或已过期 - 在 Gandi Admin 创建新 Token - 更新存储的 Token 文件
### 权限被拒绝 (403)
- Token 不具备所需权限范围 - 创建具有 Domain:read 和 LiveDNS:read 权限的新 Token - 验证组织成员身份
### 域名未使用 LiveDNS
如果您收到“not using Gandi LiveDNS”错误: 1. 登录 Gandi Admin 2. 转到域名管理 3. 将 LiveDNS 服务附加到域名
### 速率限制 (429)
Gandi 允许每分钟 1000 次请求。如果超出限制: - 等待 60 秒 - 减少 API 调用频率
## API 参考
该技能提供可导入的函数:
```javascript import { testAuth, listDomains, getDomain, listDnsRecords, getDnsRecord, checkAvailability } from './gandi-api.js';
// Test authentication const auth = await testAuth();
// List domains const domains = await listDomains();
// Get domain info const domain = await getDomain('example.com');
// List DNS records const records = await listDnsRecords('example.com');
// Get specific DNS record const record = await getDnsRecord('example.com', '@', 'A');
// Check availability const available = await checkAvailability(['example.com', 'example.net']); ```
## 安全
### Token 存储
✅ **建议:** - 存储在 `~/.config/gandi/api_token` - 使用 600 权限(所有者只读) - 定期轮换 Token - 使用最小所需权限范围
❌ **禁止:** - 将 Token 提交到代码仓库 - 在用户之间共享 Token - 授予 Token 不必要的权限 - 将 Token 存储在脚本中
### Token 权限范围
**阶段 1 (当前):** - Domain: read - LiveDNS: read
**阶段 2+ (未来):** - Domain: read, write (用于注册、续费) - LiveDNS: read, write (用于 DNS 修改) - Certificate: read (可选,用于 SSL 证书) - Email: read, write (可选,用于电子邮件配置)
## 架构
``` gandi-skill/ ├── SKILL.md # This file ├── references/ # API documentation │ ├── api-overview.md │ ├── authentication.md │ ├── domains.md │ ├── livedns.md │ └── setup.md └── scripts/ # Helper utilities ├── package.json ├── gandi-api.js # Core API client ├── test-auth.js # Test authentication ├── list-domains.js # List domains └── list-dns.js # List DNS records ```
## 开发路线图
**阶段 1:读取操作** (✅ 当前) - 使用 PAT 进行身份验证 - 列出域名 - 获取域名详情 - 列出 DNS 记录 - 基本错误处理
**阶段 2:DNS 修改** - 添加 DNS 记录 - 更新 DNS 记录 - 删除 DNS 记录 - 批量 DNS 操作
**阶段 3:域名管理** - 域名注册 - 域名续费 - 自动续费配置 - 名称服务器管理
**阶段 4:多组织支持** ([#1](https://github.com/chrisagiddings/moltbot-gandi-skill/issues/1)) - 基于配置文件的 Token 管理 - 组织选择 - 多 Token 支持
**阶段 5:高级功能** - DNSSEC 管理 - 证书管理 - 电子邮件/邮箱配置 - 域名转移操作
## 贡献
请参阅主 README 中的[贡献指南](../../README.md#contributing)。
## 支持
- **问题反馈:** [GitHub Issues](https://github.com/chrisagiddings/moltbot-gandi-skill/issues) - **文档:** [参考指南](./references/) - **Gandi 支持:** [help.gandi.net](https://help.gandi.net/)
## 许可证
MIT License - 请参阅 [LICENSE](../../LICENSE)