Files

106 lines
3.1 KiB
Markdown

# NodeLoc (domain.nodeloc.com) Reference
## Provider Details
- **Service**: Free subdomains by NodeLoc community
- **URL**: https://domain.nodeloc.com
- **Root domains**: loc.cc, and others
- **Nameservers**: ns1.nodelook.com, ns2.nodelook.com (IP: [REDACTED-IP])
- **DNS backend**: PowerDNS (has "Sync from PowerDNS" button)
- **Health checks**: Automatic — domain gets suspended if health check fails for extended period
## API Endpoints
| Method | Endpoint | Auth | Purpose |
|--------|----------|------|---------|
| POST | `/api/auth/login` | None | Login, returns JWT token |
| GET | `/api/domains` | Bearer | List user's domains |
| GET | `/api/domains` + query | Bearer | Domain details |
DNS record management has NO REST API. Must use browser UI.
## Login Response Shape
```json
{
"message": "success.login",
"token": "[REDACTED-JWT]...<full JWT>",
"user": {
"id": 3375,
"username": "[REDACTED-NAME]",
"email": "user@example.com",
"email_verified": false,
"is_admin": false,
"user_level": "normal",
"domain_quota": 2,
"invite_code": "...",
"total_invites": 0,
"successful_invites": 0,
"status": "active",
"created_at": "2026-07-16T10:39:49.944849Z",
"last_login_at": "..."
}
}
```
JWT is HS256. Payload: `{"user_id":...,"username":"...","email":"...","is_admin":false,"exp":...,"iat":...}`
## Domain Response Shape
```json
{
"domains": [{
"id": 4901,
"full_domain": "[REDACTED-NAME].loc.cc",
"root_domain": {"id": 1, "domain": "loc.cc", ...},
"nameservers": "[\"ns1.nodelook.com\",\"ns2.nodelook.com\"]",
"registered_at": "2026-07-16T10:52:26.925642Z",
"expires_at": "2036-07-16T10:52:26.925642Z",
"dns_synced": false,
"auto_renew": false,
"first_failed_at": "2026-07-16T16:03:45.845029Z"
}]
}
```
## DNS Record States
| Status | Chinese | Meaning |
|--------|---------|---------|
| `已同步` | Synced | Record active and propagated |
| `待处理` | Pending | Record submitted but not yet synced to PowerDNS |
## Domain Statuses
| Status | Meaning |
|--------|---------|
| `suspended` | Health check failed repeatedly. Domain will be auto-deleted in ~19 days if not fixed. |
| `active` | Normal operation |
## Health Check Behavior
- Runs periodically against the domain
- Checks if the domain resolves AND responds
- After repeated failures: domain gets suspended
- After suspension: ~19 days until auto-deletion
- Adding a valid A record + making the server respond fixes the health check
## Browser UI Navigation
1. Login → Dashboard (`/`)
2. "我的域名" → Domain list
3. Click domain → Domain detail (status, health, DNS button)
4. "DNS" button → DNS management page with record table
5. "添加 DNS 记录" → Add record dialog
## DNS Record Form
- Name: `@` (root) or subdomain name
- Type: A, AAAA, CNAME, ALIAS, MX, TXT, NS, SRV, CAA
- Value: IP or hostname
- TTL: seconds (default 3600)
- Button: "创建" (Create) — may require JS click workaround
## Expiration
Domains are free and expire in 20 years (2036 for domains registered in 2026). Auto-renewal is off by default.