mirror of
https://github.com/Xevion/rdap.git
synced 2026-01-31 00:25:18 -06:00
chore: reword README.md, cleanup .gitignore, remove .env.example
This commit is contained in:
@@ -1,10 +0,0 @@
|
|||||||
# Since .env is gitignored, you can use .env.example to build a new `.env` file when you clone the repo.
|
|
||||||
# Keep this file up-to-date when you add new variables to `.env`.
|
|
||||||
|
|
||||||
# This file will be committed to version control, so make sure not to have any secrets in it.
|
|
||||||
# If you are cloning this repo, create a copy of this file named `.env` and populate it with your secrets.
|
|
||||||
|
|
||||||
# When adding additional env variables, the schema in /env/schema.mjs should be updated accordingly
|
|
||||||
# Example:
|
|
||||||
# SERVERVAR=foo
|
|
||||||
# NEXT_PUBLIC_CLIENTVAR=bar
|
|
||||||
Vendored
+10
-30
@@ -1,45 +1,25 @@
|
|||||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
|
||||||
.idea
|
|
||||||
.log*
|
|
||||||
.yarn
|
|
||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
/node_modules
|
node_modules
|
||||||
/.pnp
|
|
||||||
.pnp.js
|
|
||||||
|
|
||||||
# testing
|
|
||||||
/coverage
|
|
||||||
|
|
||||||
# database
|
|
||||||
/prisma/db.sqlite
|
|
||||||
/prisma/db.sqlite-journal
|
|
||||||
|
|
||||||
# next.js
|
# next.js
|
||||||
/.next/
|
.next
|
||||||
/out/
|
out
|
||||||
next-env.d.ts
|
next-env.d.ts
|
||||||
|
|
||||||
# production
|
# testing
|
||||||
/build
|
coverage
|
||||||
|
|
||||||
# misc
|
# misc
|
||||||
.DS_Store
|
.DS_Store
|
||||||
*.pem
|
*.pem
|
||||||
|
*.log
|
||||||
|
|
||||||
# debug
|
# env files
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
.pnpm-debug.log*
|
|
||||||
|
|
||||||
# local env files
|
|
||||||
# do not commit any .env files to git, except for the .env.example file. https://create.t3.gg/en/usage/env-variables#using-environment-variables
|
|
||||||
.env
|
.env
|
||||||
.env*.local
|
.env*.local
|
||||||
|
|
||||||
# vercel
|
|
||||||
.vercel
|
|
||||||
|
|
||||||
# typescript
|
# typescript
|
||||||
*.tsbuildinfo
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
# vercel
|
||||||
|
.vercel
|
||||||
|
|||||||
@@ -8,15 +8,15 @@
|
|||||||
[![Next.js][badge-nextjs]][nextjs]
|
[![Next.js][badge-nextjs]][nextjs]
|
||||||
[![React][badge-react]][react]
|
[![React][badge-react]][react]
|
||||||
|
|
||||||
[badge-version]: https://img.shields.io/badge/version-0.9.0-blue
|
[badge-version]: https://img.shields.io/badge/version-0.9.1-blue
|
||||||
[badge-license]: https://img.shields.io/badge/license-MIT-green
|
[badge-license]: https://img.shields.io/badge/license-MIT-green
|
||||||
[badge-ci]: https://github.com/Xevion/rdap/actions/workflows/ci.yml/badge.svg
|
[badge-ci]: https://github.com/Xevion/rdap/actions/workflows/ci.yml/badge.svg
|
||||||
[badge-codecov]: https://codecov.io/gh/Xevion/rdap/branch/master/graph/badge.svg
|
[badge-codecov]: https://codecov.io/gh/Xevion/rdap/branch/master/graph/badge.svg
|
||||||
[badge-typescript]: https://img.shields.io/badge/TypeScript-5.9-blue
|
[badge-typescript]: https://img.shields.io/badge/TypeScript-5.9-blue
|
||||||
[badge-nextjs]: https://img.shields.io/badge/Next.js-15.5-black
|
[badge-nextjs]: https://img.shields.io/badge/Next.js-16-black
|
||||||
[badge-react]: https://img.shields.io/badge/React-19.2-blue
|
[badge-react]: https://img.shields.io/badge/React-19-blue
|
||||||
|
|
||||||
A modern RDAP query client built with Next.js and React. Query domains, IP addresses, ASNs, and more. Now with **dark mode**.
|
A web-based RDAP client for querying domains, IP addresses, and ASNs. Has dark mode.
|
||||||
|
|
||||||
[][live-demo]
|
[][live-demo]
|
||||||
[][live-demo]
|
[][live-demo]
|
||||||
@@ -26,165 +26,58 @@ A modern RDAP query client built with Next.js and React. Query domains, IP addre
|
|||||||
|
|
||||||
## What is RDAP?
|
## What is RDAP?
|
||||||
|
|
||||||
RDAP (Registration Data Access Protocol) is the modern successor to WHOIS, providing structured, machine-readable access to domain registration and network resource data. Instead of parsing inconsistent text output, RDAP delivers standardized JSON responses with richer metadata.
|
RDAP (Registration Data Access Protocol) is the successor to WHOIS. It returns structured JSON instead of inconsistent plaintext, making it easier to parse and use programmatically.
|
||||||
|
|
||||||
## Why?
|
## Why?
|
||||||
|
|
||||||
The tool hosted by [rdap.org][rdap-client] is fantastic, but it's too simple, and isn't as overly-complicated and annoying as I want it to be. So, I built my own. **Mine has dark mode.**
|
The [rdap.org client][rdap-client] works fine, but I wanted something with dark mode and shareable URLs. Plus it was a good excuse to learn Next.js 16.
|
||||||
|
|
||||||
Inspired by the [rdap.org client][rdap-client], this project adds several features I wanted:
|
Main additions:
|
||||||
|
|
||||||
- **🌙 Dark Mode**: Because the blistering white of other RDAP clients is painful to look at
|
- Dark mode (actually important when you stare at this stuff all day)
|
||||||
- **🔗 Shareable Links**: Every query generates a unique URL you can bookmark or share
|
- Every query gets a shareable URL
|
||||||
- **🎨 Modern Interface**: Intuitive type detection, status badges, and responsive design
|
- Better type detection for inputs
|
||||||
- **📊 Rich Data Display**: Comprehensive support for all RDAP entity types, DNSSEC, JSContact, vCard, and more
|
- Cleaner UI with status badges and collapsible sections
|
||||||
- **⚡ Advanced Features**: Follow referrals to registrars, modern JSContact format support, export/copy JSON responses
|
- JSContact support alongside vCard
|
||||||
- **🏠 Self-Hostable**: Static site that you can deploy anywhere for complete control
|
- Static export, no backend needed
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
### Query Capabilities
|
**Query types**: domains, IPv4/IPv6 (with CIDR), ASNs, entity handles, nameservers, or raw RDAP URLs. Type detection is automatic but can be overridden.
|
||||||
|
|
||||||
- **Multiple Input Types**: IPv4/IPv6 (with CIDR notation), domain names, TLDs, ASNs, entity handles, or raw RDAP URLs
|
**Supported objects**: domains, IP networks, autonomous systems, entities (contacts/registrars), and nameservers. Shows all the standard RDAP fields plus DNSSEC info when available.
|
||||||
- **Smart Auto-Detection**: Automatically identifies query types with visual feedback
|
|
||||||
- **Manual Override**: Lock query type when auto-detection isn't enough
|
|
||||||
- **Follow Referrals**: Automatically follows redirects to registrar RDAP servers for complete data
|
|
||||||
- **JSContact Support**: Modern JSContact (RFC 9553) format alongside traditional vCard
|
|
||||||
|
|
||||||
### Supported Entity Types
|
**Contacts**: Displays both vCard (jCard) and JSContact (RFC 9553) formats. Shows names, organizations, emails, phones, addresses, etc.
|
||||||
|
|
||||||
Full rendering support for all RDAP object classes:
|
**UI stuff**: Dark/light mode, copy buttons everywhere, collapsible sections, status badges with hover tooltips, relative timestamps ("2 days ago"), responsive layout.
|
||||||
|
|
||||||
- **Domains**: Name, status, nameservers, DNSSEC, registrar info, creation/expiry dates
|
**Technical**: Uses IANA bootstrap files to resolve RDAP server URLs. All queries happen client-side from your browser. Zod schemas for validation. Fully static build.
|
||||||
- **IP Networks**: IPv4/IPv6 ranges, allocation dates, network types, parent/child relationships
|
|
||||||
- **Autonomous Systems**: AS numbers, names, registration details
|
|
||||||
- **Entities**: Contacts, registrars, registrants with role information and public IDs
|
|
||||||
- **Nameservers**: Hostnames with IPv4/IPv6 address mappings
|
|
||||||
|
|
||||||
### Contact Information
|
## Development
|
||||||
|
|
||||||
- **Dual Format Support**: Both legacy vCard (jCard) and modern JSContact (RFC 9553)
|
Uses pnpm:
|
||||||
- **Rich Contact Data**: Names, organizations, emails, phone numbers, addresses, URLs, titles, and roles
|
|
||||||
- **Structured Display**: Clean presentation of hierarchical contact information
|
|
||||||
|
|
||||||
### DNS Security (DNSSEC)
|
|
||||||
|
|
||||||
- Zone signing and delegation status indicators
|
|
||||||
- DS (Delegation Signer) records with key tags, algorithms, digest types
|
|
||||||
- DNSKEY records with flags, protocols, and public keys
|
|
||||||
- Maximum signature lifetime display
|
|
||||||
|
|
||||||
### User Experience
|
|
||||||
|
|
||||||
- **🎨 Theme Toggle**: Full dark mode and light mode support with persistence
|
|
||||||
- **📋 Data Export**: Copy individual values, entire JSON responses, or download as files
|
|
||||||
- **🔍 Raw View Toggle**: Switch between formatted display and raw JSON
|
|
||||||
- **📊 Status Badges**: Interactive badges for 28+ RDAP status types with hover definitions
|
|
||||||
- **⏱️ Relative Timestamps**: Human-readable event times with precise date fallback
|
|
||||||
- **📱 Responsive Design**: Mobile-first layout that adapts from phone to desktop
|
|
||||||
|
|
||||||
### Error Handling & Validation
|
|
||||||
|
|
||||||
- **Comprehensive HTTP Error Messages**: Clear explanations for 302, 400, 403, 404, 500 responses
|
|
||||||
- **Input Validation**: Type checking with helpful warnings when manual type doesn't match input
|
|
||||||
- **Schema Validation**: Zod-based validation with readable error messages
|
|
||||||
- **Bootstrap Integration**: Automatic IANA registry bootstrap for URL resolution
|
|
||||||
|
|
||||||
### Technical Details
|
|
||||||
|
|
||||||
- **Registry Bootstrap**: Automatic fetching from IANA bootstrap files (DNS, IPv4, IPv6, ASN, object tags)
|
|
||||||
- **CIDR Matching**: Proper network range matching for IP lookups
|
|
||||||
- **Internationalization**: Full Unicode domain name support
|
|
||||||
- **Type Safety**: Comprehensive TypeScript types inferred from Zod schemas
|
|
||||||
- **Static Site**: No backend required for basic usage, fully client-side queries
|
|
||||||
|
|
||||||
## Installation & Usage
|
|
||||||
|
|
||||||
This project uses [pnpm][pnpm] as its package manager. Make sure you have [Node.js][nodejs] installed, then run:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Install dependencies
|
|
||||||
pnpm install
|
pnpm install
|
||||||
|
pnpm dev # localhost:3000
|
||||||
# Run development server
|
pnpm build # static export
|
||||||
pnpm dev
|
pnpm test # vitest
|
||||||
|
pnpm check # tsc + eslint
|
||||||
# Build for production
|
|
||||||
pnpm build
|
|
||||||
|
|
||||||
# Start production server
|
|
||||||
pnpm start
|
|
||||||
```
|
```
|
||||||
|
|
||||||
The development server will be available at `http://localhost:3000`.
|
|
||||||
|
|
||||||
### Additional Commands
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Run tests
|
|
||||||
pnpm test
|
|
||||||
|
|
||||||
# Run tests with coverage
|
|
||||||
pnpm test:coverage
|
|
||||||
|
|
||||||
# Type checking and linting
|
|
||||||
pnpm check
|
|
||||||
|
|
||||||
# Fix linting issues
|
|
||||||
pnpm lint:fix
|
|
||||||
|
|
||||||
# Code formatting
|
|
||||||
pnpm format
|
|
||||||
pnpm format:check
|
|
||||||
```
|
|
||||||
|
|
||||||
## Tech Stack
|
|
||||||
|
|
||||||
- **[Next.js 15][nextjs]**: React framework with static site generation (SSG only)
|
|
||||||
- **[React 19][react]**: UI library with modern hooks
|
|
||||||
- **[TypeScript 5.9][typescript]**: Type-safe development
|
|
||||||
- **[Radix UI Themes][radix]**: Accessible component primitives and design system
|
|
||||||
- **[Tailwind CSS 4][tailwind]**: Utility-first styling
|
|
||||||
- **[Zod 4][zod]**: Runtime schema validation
|
|
||||||
- **[Vitest][vitest]**: Fast unit testing framework
|
|
||||||
- **[next-themes][next-themes]**: Theme management
|
|
||||||
|
|
||||||
## Self-Hosting
|
## Self-Hosting
|
||||||
|
|
||||||
This is a **fully static site** with no backend required for basic usage. It generates all HTML at build time and queries RDAP servers directly from your browser.
|
Fully static. Queries go directly from your browser to RDAP servers (no backend). Just run `pnpm build` and host the output anywhere.
|
||||||
|
|
||||||
**Key characteristics**:
|
CORS issue: Some RDAP servers don't set CORS headers, so those queries will fail in the browser. Might add an optional proxy later.
|
||||||
|
|
||||||
- ✅ All RDAP queries made directly from your browser to source servers
|
## Privacy
|
||||||
- ✅ No intermediary servers logging your lookups
|
|
||||||
- ✅ Minimal local storage (theme preference only)
|
|
||||||
- ✅ Fully self-hostable for complete control
|
|
||||||
|
|
||||||
**Note on CORS**: Some RDAP servers don't enable CORS headers, preventing direct browser access. For these servers, you'll see an error. Future versions may include an optional proxy for these cases.
|
The demo at [rdap.xevion.dev][live-demo] has telemetry (PostHog) to track what breaks. Query targets aren't logged for successful queries, only type/timing. Failed queries might include the target for debugging. Self-hosted builds have no telemetry.
|
||||||
|
|
||||||
To self-host:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Build the static site
|
|
||||||
pnpm build
|
|
||||||
```
|
|
||||||
|
|
||||||
## Privacy & Telemetry
|
|
||||||
|
|
||||||
The hosted demo at [rdap.xevion.dev][live-demo] collects optional telemetry to improve the service. Self-hosted deployments have no telemetry by default.
|
|
||||||
|
|
||||||
**What's tracked:** Page views, query metadata (type, success/failure, timing), user interactions, and errors.
|
|
||||||
|
|
||||||
**Privacy protections:** Successful query targets are never logged—only the query type and timing. Failed queries may include targets for debugging. Copy actions track text length only.
|
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Issues and pull requests are welcome! This project uses:
|
PRs welcome. Uses ESLint, Prettier, Husky git hooks, and conventional commits.
|
||||||
|
|
||||||
- **ESLint** for linting
|
|
||||||
- **Prettier** for code formatting
|
|
||||||
- **Husky** for git hooks
|
|
||||||
- **Conventional Commits** for commit messages
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -1,8 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "rdap",
|
"name": "rdap",
|
||||||
"version": "0.9.0",
|
"version": "0.9.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"preinstall": "npx only-allow pnpm",
|
||||||
"build": "next build",
|
"build": "next build",
|
||||||
"dev": "next dev",
|
"dev": "next dev",
|
||||||
"start": "next start",
|
"start": "next start",
|
||||||
|
|||||||
Reference in New Issue
Block a user