ClawSkills logoClawSkills

Gandi - Registrar & DNS

全面的 Gandi 域名注册商集成,用于域名和 DNS 管理。注册和管理域名,创建/更新/删除 DNS 记录 (A, AAAA, CNAME, M

介绍

# 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)

更多产品