@kud/gandi-cli 0.1.0 → 0.2.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.
package/README.md CHANGED
@@ -1,59 +1,192 @@
1
- # @kud/gandi-cli
1
+ ```
2
+ ██████╗ █████╗ ███╗ ██╗██████╗ ██╗ ██████╗██╗ ██╗
3
+ ██╔════╝ ██╔══██╗████╗ ██║██╔══██╗██║ ██╔════╝██║ ██║
4
+ ██║ ███╗███████║██╔██╗██║██║ ██║██║ ██║ ██║ ██║
5
+ ██║ ██║██╔══██║██║╚████║██║ ██║██║ ██║ ██║ ██║
6
+ ╚██████╔╝██║ ██║██║ ╚███║██████╔╝███████╗╚██████╗███████╗██║
7
+ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚══╝╚═════╝ ╚══════╝ ╚═════╝╚══════╝╚═╝
8
+ ```
9
+
10
+ <div align="center">
11
+
12
+ ![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white)
13
+ ![Node.js](https://img.shields.io/badge/Node.js-339933?style=flat-square&logo=node.js&logoColor=white)
14
+ ![npm](https://img.shields.io/badge/npm-%40kud%2Fgandi--cli-CB3837?style=flat-square&logo=npm&logoColor=white)
15
+ ![MIT](https://img.shields.io/badge/licence-MIT-22C55E?style=flat-square)
16
+
17
+ **A modern CLI for the Gandi v5 REST API.**
18
+
19
+ [Features](#-features) • [Quick Start](#-quick-start) • [CLI Reference](#-cli-reference) • [Development](#-development) • [Authentication](#-authentication)
20
+
21
+ </div>
22
+
23
+ ---
2
24
 
3
- A modern CLI for the [Gandi v5 REST API](https://api.gandi.net/docs/).
25
+ ## 🌟 Features
4
26
 
5
- ## Installation
27
+ - 🌐 **Domain Management** — List all registered domains with expiry dates and statuses, and renew them for one or more years
28
+ - 🔧 **Full DNS Control** — List, create, update, and delete LiveDNS records with support for custom TTLs and all standard record types
29
+ - 🩺 **Permission Doctor** — Built-in `gandi doctor` checks your PAT scopes and shows exactly which commands are unlocked
30
+ - 🔐 **PAT Authentication** — Uses Gandi Personal Access Tokens with fine-grained scope control — only grant what you need
31
+ - ⚡ **Rich Terminal UI** — Built with Ink and React for spinners, aligned tables, and clean formatted output
32
+ - 📦 **Zero Config** — Set one env var or add one line to a TOML file and you're ready to go
33
+
34
+ ---
35
+
36
+ ## 🚀 Quick Start
37
+
38
+ ### 1. Install
6
39
 
7
40
  ```sh
8
41
  npm install -g @kud/gandi-cli
9
42
  ```
10
43
 
11
- ## Authentication
44
+ ### 2. Authenticate
45
+
46
+ Generate a **Personal Access Token** at **gandi.net → Account → Partage → Créer un jeton d'accès personnel** then export it:
47
+
48
+ ```sh
49
+ export GANDI_API_KEY="your-token-here"
50
+ ```
51
+
52
+ ### 3. Check permissions
53
+
54
+ ```sh
55
+ gandi doctor
56
+ ```
57
+
58
+ ```
59
+ Gandi CLI
60
+ Expires in 29 days · 1 entity
61
+
62
+ ✓ domain:view gandi domain list
63
+ ✗ domain:renew gandi domain renew
64
+ ✓ domain:tech gandi dns list / set / delete
65
+ ```
66
+
67
+ ### 4. Manage domains and DNS
68
+
69
+ ```sh
70
+ gandi domain list
71
+
72
+ gandi dns list example.com
73
+ gandi dns set example.com A www 1.2.3.4 --ttl 300
74
+ gandi dns delete example.com A www
75
+ ```
76
+
77
+ ---
78
+
79
+ ## 📖 CLI Reference
80
+
81
+ | Command | Description |
82
+ | -------------------------------------------------------------- | --------------------------------------------- |
83
+ | `gandi doctor` | Check token info and permissions |
84
+ | `gandi domain list` | List all domains with expiry dates and status |
85
+ | `gandi domain renew <domain>` | Renew a domain for 1 year |
86
+ | `gandi domain renew <domain> --duration <years>` | Renew for a specified number of years |
87
+ | `gandi dns list <domain>` | List all DNS records for a domain |
88
+ | `gandi dns set <domain> <type> <name> <value>` | Create or replace a DNS record |
89
+ | `gandi dns set <domain> <type> <name> <value> --ttl <seconds>` | Set with a custom TTL in seconds |
90
+ | `gandi dns delete <domain> <type> <name>` | Delete a DNS record |
91
+
92
+ ---
93
+
94
+ ## 🔧 Development
95
+
96
+ **Project Structure**
97
+
98
+ ```
99
+ gandi-cli/
100
+ ├── src/
101
+ │ ├── commands/
102
+ │ │ ├── doctor.tsx
103
+ │ │ ├── domain-list.tsx
104
+ │ │ ├── domain-renew.tsx
105
+ │ │ ├── dns-list.tsx
106
+ │ │ ├── dns-set.tsx
107
+ │ │ └── dns-delete.tsx
108
+ │ ├── components/
109
+ │ │ ├── error.tsx
110
+ │ │ ├── spinner-action.tsx
111
+ │ │ └── table.tsx
112
+ │ ├── lib/
113
+ │ │ ├── api.ts
114
+ │ │ └── config.ts
115
+ │ ├── types/
116
+ │ │ └── gandi.ts
117
+ │ └── index.tsx
118
+ ├── dist/
119
+ ├── package.json
120
+ └── README.md
121
+ ```
122
+
123
+ **Scripts**
124
+
125
+ | Script | Description |
126
+ | --------------- | -------------------------------------------- |
127
+ | `npm run build` | Compile TypeScript to `dist/` |
128
+ | `npm run dev` | Run directly with tsx — no build step needed |
129
+ | `npm run start` | Run compiled output from `dist/` |
130
+
131
+ **Workflow**
132
+
133
+ ```sh
134
+ git clone https://github.com/kud/gandi-cli.git
135
+ cd gandi-cli
136
+ npm install
137
+ npm run dev -- doctor
138
+ ```
139
+
140
+ ---
12
141
 
13
- Generate a personal access token at **gandi.net → Account → Partage → Créer un jeton d'accès personnel**.
142
+ ## 🔒 Authentication
14
143
 
15
- Token name: `gandi-cli`
16
- Expiry: your preference
17
- Resource access: **Restreint aux produits sélectionnés**
144
+ gandi-cli uses **Personal Access Tokens (PATs)** — not legacy API keys.
18
145
 
19
- Required permissions (Domaines section only):
146
+ Generate a token at **gandi.net → Account → Partage → Créer un jeton d'accès personnel** with only the permissions you need:
20
147
 
21
- | Permission | Commands |
148
+ | Permission | Required for |
22
149
  | ----------------------------------------------- | ----------------------------------- |
23
150
  | Voir la liste de vos domaines | `gandi domain list` |
24
151
  | Gérer le renouvellement de vos domaines | `gandi domain renew` |
25
152
  | Accéder aux enregistrements DNS de vos domaines | `gandi dns list` |
26
153
  | Gérer les enregistrements DNS de vos domaines | `gandi dns set`, `gandi dns delete` |
27
154
 
28
- No Organisation, Facturation, Web Hosting, Cloud, or SSL permissions needed.
29
-
30
- Then export the key in your shell:
155
+ **Via environment variable** (takes precedence):
31
156
 
32
157
  ```sh
33
158
  export GANDI_API_KEY="your-token-here"
34
159
  ```
35
160
 
36
- Or add it to `~/.config/gandi/config.toml`:
161
+ **Via config file** (`~/.config/gandi/config.toml`):
37
162
 
38
163
  ```toml
39
164
  api_key = "your-token-here"
40
165
  ```
41
166
 
42
- ## Usage
167
+ - ✅ Only grant permissions each command actually needs
168
+ - ✅ Set an expiry date on the token
169
+ - ✅ Use `gandi doctor` to verify scopes before running commands
43
170
 
44
- ### Domains
171
+ ---
45
172
 
46
- ```sh
47
- gandi domain list
48
- gandi domain renew example.com
49
- gandi domain renew example.com --duration 2
50
- ```
173
+ ## 🏗 Tech Stack
51
174
 
52
- ### DNS
175
+ | Component | Details |
176
+ | ------------- | ---------------------- |
177
+ | Runtime | Node.js ≥ 20 |
178
+ | Language | TypeScript 5.x (ESM) |
179
+ | Terminal UI | Ink 7 + React 19 |
180
+ | CLI Framework | Commander.js 12 |
181
+ | Config | smol-toml |
182
+ | Package | npm · `@kud/gandi-cli` |
53
183
 
54
- ```sh
55
- gandi dns list example.com
56
- gandi dns set example.com A www 1.2.3.4
57
- gandi dns set example.com A www 1.2.3.4 --ttl 3600
58
- gandi dns delete example.com A www
59
- ```
184
+ ---
185
+
186
+ <div align="center">
187
+
188
+ MIT © [kud](https://github.com/kud) Made with ❤️ for the terminal
189
+
190
+ ⭐ Star this repo if it saves you time · [↑ Back to top](#)
191
+
192
+ </div>
@@ -1 +1 @@
1
- {"version":3,"file":"dns-list.d.ts","sourceRoot":"","sources":["../../src/commands/dns-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AASlD,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,QAAA,MAAM,OAAO,GAAI,YAAY,YAAY,sBA4CxC,CAAA;AAED,eAAe,OAAO,CAAA"}
1
+ {"version":3,"file":"dns-list.d.ts","sourceRoot":"","sources":["../../src/commands/dns-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AASlD,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,QAAA,MAAM,OAAO,GAAI,YAAY,YAAY,sBA+CxC,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -28,11 +28,12 @@ const DnsList = ({ domain }) => {
28
28
  if (records.length === 0) {
29
29
  return React.createElement(Text, { color: "gray" }, "No DNS records found.");
30
30
  }
31
+ const truncate = (s, max = 60) => s.length > max ? s.slice(0, max - 1) + "…" : s;
31
32
  const rows = records.flatMap((r) => r.rrset_values.map((v) => ({
32
33
  NAME: r.rrset_name,
33
34
  TYPE: r.rrset_type,
34
35
  TTL: String(r.rrset_ttl),
35
- VALUE: v,
36
+ VALUE: truncate(v),
36
37
  })));
37
38
  return (React.createElement(Box, { flexDirection: "column" },
38
39
  React.createElement(Table, { headers: ["NAME", "TYPE", "TTL", "VALUE"], rows: rows }),
@@ -1 +1 @@
1
- {"version":3,"file":"dns-list.js","sourceRoot":"","sources":["../../src/commands/dns-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,KAAK,MAAM,wBAAwB,CAAA;AAC1C,OAAO,aAAa,MAAM,iCAAiC,CAAA;AAC3D,OAAO,YAAY,MAAM,wBAAwB,CAAA;AAMjD,MAAM,OAAO,GAAG,CAAC,EAAE,MAAM,EAAgB,EAAE,EAAE;IAC3C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAA;IAChE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,SAAS,EAAE,CAAA;gBACvB,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;gBAC9C,UAAU,CAAC,IAAI,CAAC,CAAA;YAClB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,QAAQ,CAAE,CAAW,CAAC,OAAO,CAAC,CAAA;YAChC,CAAC;QACH,CAAC,CAAA;QACD,GAAG,EAAE,CAAA;IACP,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,IAAI,KAAK;QAAE,OAAO,oBAAC,YAAY,IAAC,OAAO,EAAE,KAAK,GAAI,CAAA;IAClD,IAAI,CAAC,OAAO;QACV,OAAO,oBAAC,aAAa,IAAC,KAAK,EAAE,4BAA4B,MAAM,GAAG,GAAI,CAAA;IAExE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,4BAA6B,CAAA;IACxD,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACjC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI,EAAE,CAAC,CAAC,UAAU;QAClB,IAAI,EAAE,CAAC,CAAC,UAAU;QAClB,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACxB,KAAK,EAAE,CAAC;KACT,CAAC,CAAC,CACJ,CAAA;IAED,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACzB,oBAAC,KAAK,IAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,GAAI;QAChE,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACf,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;gBACf,OAAO,CAAC,MAAM;;gBAAS,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAClD,CACH,CACF,CACP,CAAA;AACH,CAAC,CAAA;AAED,eAAe,OAAO,CAAA"}
1
+ {"version":3,"file":"dns-list.js","sourceRoot":"","sources":["../../src/commands/dns-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,KAAK,MAAM,wBAAwB,CAAA;AAC1C,OAAO,aAAa,MAAM,iCAAiC,CAAA;AAC3D,OAAO,YAAY,MAAM,wBAAwB,CAAA;AAMjD,MAAM,OAAO,GAAG,CAAC,EAAE,MAAM,EAAgB,EAAE,EAAE;IAC3C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAA;IAChE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,SAAS,EAAE,CAAA;gBACvB,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;gBAC9C,UAAU,CAAC,IAAI,CAAC,CAAA;YAClB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,QAAQ,CAAE,CAAW,CAAC,OAAO,CAAC,CAAA;YAChC,CAAC;QACH,CAAC,CAAA;QACD,GAAG,EAAE,CAAA;IACP,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,IAAI,KAAK;QAAE,OAAO,oBAAC,YAAY,IAAC,OAAO,EAAE,KAAK,GAAI,CAAA;IAClD,IAAI,CAAC,OAAO;QACV,OAAO,oBAAC,aAAa,IAAC,KAAK,EAAE,4BAA4B,MAAM,GAAG,GAAI,CAAA;IAExE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,4BAA6B,CAAA;IACxD,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CACvC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAEhD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACjC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI,EAAE,CAAC,CAAC,UAAU;QAClB,IAAI,EAAE,CAAC,CAAC,UAAU;QAClB,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACxB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;KACnB,CAAC,CAAC,CACJ,CAAA;IAED,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACzB,oBAAC,KAAK,IAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,GAAI;QAChE,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACf,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;gBACf,OAAO,CAAC,MAAM;;gBAAS,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAClD,CACH,CACF,CACP,CAAA;AACH,CAAC,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ declare const AuthWhoami: () => React.JSX.Element;
3
+ export default AuthWhoami;
4
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AA2BlD,QAAA,MAAM,UAAU,yBAmDf,CAAA;AAED,eAAe,UAAU,CAAA"}
@@ -0,0 +1,66 @@
1
+ import React, { useEffect, useState } from "react";
2
+ import { Box, Text } from "ink";
3
+ import { getTokenInfo } from "../lib/api.js";
4
+ import { getApiKey } from "../lib/config.js";
5
+ import SpinnerAction from "../components/spinner-action.js";
6
+ import ErrorMessage from "../components/error.js";
7
+ const SCOPE_MAP = {
8
+ "domain:view": { label: "View domains", commands: "gandi domain list" },
9
+ "domain:renew": {
10
+ label: "Renew domains",
11
+ commands: "gandi domain renew",
12
+ },
13
+ "domain:tech": {
14
+ label: "Manage DNS",
15
+ commands: "gandi dns list / set / delete",
16
+ },
17
+ };
18
+ const formatExpiry = (seconds) => {
19
+ const days = Math.floor(seconds / 86400);
20
+ if (days > 0)
21
+ return `${days} day${days !== 1 ? "s" : ""}`;
22
+ const hours = Math.floor(seconds / 3600);
23
+ return `${hours} hour${hours !== 1 ? "s" : ""}`;
24
+ };
25
+ const AuthWhoami = () => {
26
+ const [info, setInfo] = useState(null);
27
+ const [error, setError] = useState(null);
28
+ useEffect(() => {
29
+ const run = async () => {
30
+ try {
31
+ const key = getApiKey();
32
+ const data = await getTokenInfo(key);
33
+ setInfo(data);
34
+ }
35
+ catch (e) {
36
+ setError(e.message);
37
+ }
38
+ };
39
+ run();
40
+ }, []);
41
+ if (error)
42
+ return React.createElement(ErrorMessage, { message: error });
43
+ if (!info)
44
+ return React.createElement(SpinnerAction, { label: "Checking token\u2026" });
45
+ const knownScopes = Object.keys(SCOPE_MAP);
46
+ return (React.createElement(Box, { flexDirection: "column", gap: 1 },
47
+ React.createElement(Box, { flexDirection: "column" },
48
+ React.createElement(Text, { bold: true, color: "white" }, info.pat_name),
49
+ React.createElement(Text, { color: "gray" },
50
+ "Expires in ",
51
+ formatExpiry(info.expires_in),
52
+ " \u00B7 ",
53
+ info.entities.length,
54
+ " ",
55
+ info.entities.length !== 1 ? "entities" : "entity")),
56
+ React.createElement(Box, { flexDirection: "column" }, knownScopes.map((scope) => {
57
+ const has = info.scope.includes(scope);
58
+ const entry = SCOPE_MAP[scope];
59
+ return (React.createElement(Box, { key: scope, gap: 2 },
60
+ React.createElement(Text, { color: has ? "green" : "red" }, has ? "✓" : "✗"),
61
+ React.createElement(Text, { color: has ? "white" : "gray", dimColor: !has }, scope),
62
+ React.createElement(Text, { color: "gray" }, entry.commands)));
63
+ }))));
64
+ };
65
+ export default AuthWhoami;
66
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"domain-list.d.ts","sourceRoot":"","sources":["../../src/commands/domain-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AASlD,QAAA,MAAM,UAAU,yBA8Cf,CAAA;AAED,eAAe,UAAU,CAAA"}
1
+ {"version":3,"file":"domain-list.d.ts","sourceRoot":"","sources":["../../src/commands/domain-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AASlD,QAAA,MAAM,UAAU,yBA6Df,CAAA;AAED,eAAe,UAAU,CAAA"}
@@ -28,13 +28,27 @@ const DomainList = () => {
28
28
  if (domains.length === 0) {
29
29
  return React.createElement(Text, { color: "gray" }, "No domains found.");
30
30
  }
31
+ const STATUS_MAP = {
32
+ clientTransferProhibited: "locked",
33
+ clientDeleteProhibited: "delete-locked",
34
+ clientUpdateProhibited: "update-locked",
35
+ serverTransferProhibited: "server-locked",
36
+ pendingTransfer: "transferring",
37
+ pendingDelete: "deleting",
38
+ pendingCreate: "creating",
39
+ };
40
+ const formatStatus = (statuses) => {
41
+ if (statuses.length === 0)
42
+ return "active";
43
+ return statuses.map((s) => STATUS_MAP[s] ?? s).join(", ");
44
+ };
31
45
  const rows = domains.map((d) => ({
32
46
  DOMAIN: d.fqdn_unicode,
33
47
  EXPIRES: d.dates.registry_ends_at
34
48
  ? new Date(d.dates.registry_ends_at).toISOString().slice(0, 10)
35
49
  : "—",
36
- STATUS: d.status.join(", ") || "active",
37
- NAMESERVER: d.name_server.current,
50
+ STATUS: formatStatus(d.status),
51
+ NAMESERVER: d.name_server?.current ?? "—",
38
52
  }));
39
53
  return (React.createElement(Box, { flexDirection: "column" },
40
54
  React.createElement(Table, { headers: ["DOMAIN", "EXPIRES", "STATUS", "NAMESERVER"], rows: rows }),
@@ -1 +1 @@
1
- {"version":3,"file":"domain-list.js","sourceRoot":"","sources":["../../src/commands/domain-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,KAAK,MAAM,wBAAwB,CAAA;AAC1C,OAAO,aAAa,MAAM,iCAAiC,CAAA;AAC3D,OAAO,YAAY,MAAM,wBAAwB,CAAA;AAEjD,MAAM,UAAU,GAAG,GAAG,EAAE;IACtB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAkB,IAAI,CAAC,CAAA;IAC7D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,SAAS,EAAE,CAAA;gBACvB,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;gBACnC,UAAU,CAAC,IAAI,CAAC,CAAA;YAClB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,QAAQ,CAAE,CAAW,CAAC,OAAO,CAAC,CAAA;YAChC,CAAC;QACH,CAAC,CAAA;QACD,GAAG,EAAE,CAAA;IACP,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,IAAI,KAAK;QAAE,OAAO,oBAAC,YAAY,IAAC,OAAO,EAAE,KAAK,GAAI,CAAA;IAClD,IAAI,CAAC,OAAO;QAAE,OAAO,oBAAC,aAAa,IAAC,KAAK,EAAC,wBAAmB,GAAG,CAAA;IAEhE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,wBAAyB,CAAA;IACpD,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/B,MAAM,EAAE,CAAC,CAAC,YAAY;QACtB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB;YAC/B,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC/D,CAAC,CAAC,GAAG;QACP,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ;QACvC,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,OAAO;KAClC,CAAC,CAAC,CAAA;IAEH,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACzB,oBAAC,KAAK,IACJ,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,EACtD,IAAI,EAAE,IAAI,GACV;QACF,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACf,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;gBACf,OAAO,CAAC,MAAM;;gBAAS,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAClD,CACH,CACF,CACP,CAAA;AACH,CAAC,CAAA;AAED,eAAe,UAAU,CAAA"}
1
+ {"version":3,"file":"domain-list.js","sourceRoot":"","sources":["../../src/commands/domain-list.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/components/table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEjC,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,EAAE,GAAG,EAAE,CAAA;CACZ;AAID,QAAA,MAAM,KAAK,GAAI,mBAAmB,UAAU,sBAmC3C,CAAA;AAED,eAAe,KAAK,CAAA"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/components/table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEjC,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,EAAE,GAAG,EAAE,CAAA;CACZ;AAED,QAAA,MAAM,KAAK,GAAI,mBAAmB,UAAU,sBAkC3C,CAAA;AAED,eAAe,KAAK,CAAA"}
@@ -1,18 +1,14 @@
1
1
  import React from "react";
2
2
  import { Box, Text } from "ink";
3
- const pad = (str, len) => str.padEnd(len);
4
3
  const Table = ({ headers, rows }) => {
5
4
  const widths = headers.map((h) => Math.max(h.length, ...rows.map((r) => (r[h] ?? "").length)));
6
5
  return (React.createElement(Box, { flexDirection: "column" },
7
- React.createElement(Box, null, headers.map((h, i) => (React.createElement(Text, { key: h, color: "cyan", bold: true },
8
- pad(h, widths[i]),
9
- " ")))),
10
- React.createElement(Box, null, headers.map((h, i) => (React.createElement(Text, { key: h, color: "gray" },
11
- pad("─".repeat(widths[i]), widths[i]),
12
- " ")))),
13
- rows.map((row, ri) => (React.createElement(Box, { key: ri }, headers.map((h, i) => (React.createElement(Text, { key: h },
14
- pad(row[h] ?? "", widths[i]),
15
- " "))))))));
6
+ React.createElement(Box, null, headers.map((h, i) => (React.createElement(Box, { key: h, minWidth: widths[i] + 2 },
7
+ React.createElement(Text, { color: "cyan", bold: true }, h))))),
8
+ React.createElement(Box, null, headers.map((h, i) => (React.createElement(Box, { key: h, minWidth: widths[i] + 2 },
9
+ React.createElement(Text, { color: "gray" }, "─".repeat(widths[i])))))),
10
+ rows.map((row, ri) => (React.createElement(Box, { key: ri }, headers.map((h, i) => (React.createElement(Box, { key: h, minWidth: widths[i] + 2 },
11
+ React.createElement(Text, null, row[h] ?? "")))))))));
16
12
  };
17
13
  export default Table;
18
14
  //# sourceMappingURL=table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/components/table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAS/B,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAEzD,MAAM,KAAK,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAc,EAAE,EAAE;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAC5D,CAAA;IAED,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACzB,oBAAC,GAAG,QACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,oBAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAC,MAAM,EAAC,IAAI;YAC5B,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACjB,IAAI,CACA,CACR,CAAC,CACE;QACN,oBAAC,GAAG,QACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,oBAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAC,MAAM;YACvB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CACA,CACR,CAAC,CACE;QACL,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CACrB,oBAAC,GAAG,IAAC,GAAG,EAAE,EAAE,IACT,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,oBAAC,IAAI,IAAC,GAAG,EAAE,CAAC;YACT,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CACA,CACR,CAAC,CACE,CACP,CAAC,CACE,CACP,CAAA;AACH,CAAC,CAAA;AAED,eAAe,KAAK,CAAA"}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/components/table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAS/B,MAAM,KAAK,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAc,EAAE,EAAE;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAC5D,CAAA;IAED,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACzB,oBAAC,GAAG,QACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,oBAAC,GAAG,IAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;YAClC,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,UACpB,CAAC,CACG,CACH,CACP,CAAC,CACE;QACN,oBAAC,GAAG,QACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,oBAAC,GAAG,IAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;YAClC,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,IAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAQ,CAC7C,CACP,CAAC,CACE;QACL,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CACrB,oBAAC,GAAG,IAAC,GAAG,EAAE,EAAE,IACT,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,oBAAC,GAAG,IAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;YAClC,oBAAC,IAAI,QAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAQ,CACvB,CACP,CAAC,CACE,CACP,CAAC,CACE,CACP,CAAA;AACH,CAAC,CAAA;AAED,eAAe,KAAK,CAAA"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import React from "react";
3
3
  import { render } from "ink";
4
4
  import { Command } from "commander";
5
+ import Doctor from "./commands/doctor.js";
5
6
  import DomainList from "./commands/domain-list.js";
6
7
  import DomainRenew from "./commands/domain-renew.js";
7
8
  import DnsList from "./commands/dns-list.js";
@@ -12,6 +13,10 @@ program
12
13
  .name("gandi")
13
14
  .description("Modern CLI for the Gandi v5 REST API")
14
15
  .version("0.1.0");
16
+ program
17
+ .command("doctor")
18
+ .description("Check token info and permissions")
19
+ .action(() => void render(React.createElement(Doctor, null)));
15
20
  const domain = program.command("domain").description("Manage domains");
16
21
  domain
17
22
  .command("list")
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,UAAU,MAAM,2BAA2B,CAAA;AAClD,OAAO,WAAW,MAAM,4BAA4B,CAAA;AACpD,OAAO,OAAO,MAAM,wBAAwB,CAAA;AAC5C,OAAO,MAAM,MAAM,uBAAuB,CAAA;AAC1C,OAAO,SAAS,MAAM,0BAA0B,CAAA;AAEhD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,sCAAsC,CAAC;KACnD,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAA;AAEtE,MAAM;KACH,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,oBAAC,UAAU,OAAG,CAAC,CAAC,CAAA;AAE5C,MAAM;KACH,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,gBAAgB,CAAC;KAC7B,MAAM,CAAC,wBAAwB,EAAE,0BAA0B,EAAE,GAAG,CAAC;KACjE,MAAM,CAAC,CAAC,CAAS,EAAE,IAA0B,EAAE,EAAE;IAChD,KAAK,MAAM,CACT,oBAAC,WAAW,IAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAI,CAClE,CAAA;AACH,CAAC,CAAC,CAAA;AAEJ,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAA;AAExE,GAAG;KACA,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,oBAAC,OAAO,IAAC,MAAM,EAAE,CAAC,GAAI,CAAC,CAAC,CAAA;AAE7D,GAAG;KACA,OAAO,CAAC,oCAAoC,CAAC;KAC7C,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,OAAO,CAAC;KACxD,MAAM,CACL,CACE,CAAS,EACT,IAAY,EACZ,IAAY,EACZ,KAAa,EACb,IAAqB,EACrB,EAAE;IACF,KAAK,MAAM,CACT,oBAAC,MAAM,IACL,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAC3B,CACH,CAAA;AACH,CAAC,CACF,CAAA;AAEH,GAAG;KACA,OAAO,CAAC,+BAA+B,CAAC;KACxC,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,CAAC,CAAS,EAAE,IAAY,EAAE,IAAY,EAAE,EAAE;IAChD,KAAK,MAAM,CAAC,oBAAC,SAAS,IAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAI,CAAC,CAAA;AAC/D,CAAC,CAAC,CAAA;AAEJ,OAAO,CAAC,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
package/dist/lib/api.d.ts CHANGED
@@ -1,6 +1,7 @@
1
- import type { Domain, DnsRecord } from "../types/gandi.js";
1
+ import type { Domain, DnsRecord, TokenInfo } from "../types/gandi.js";
2
2
  export declare const listDomains: (apiKey: string) => Promise<Domain[]>;
3
3
  export declare const listDnsRecords: (apiKey: string, domain: string) => Promise<DnsRecord[]>;
4
4
  export declare const setDnsRecord: (apiKey: string, domain: string, type: string, name: string, values: string[], ttl?: number) => Promise<void>;
5
5
  export declare const deleteDnsRecord: (apiKey: string, domain: string, type: string, name: string) => Promise<void>;
6
+ export declare const getTokenInfo: (apiKey: string) => Promise<TokenInfo>;
6
7
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAc,MAAM,mBAAmB,CAAA;AA6BtE,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CACf,CAAA;AAE9C,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,QAAQ,MAAM,KACb,OAAO,CAAC,SAAS,EAAE,CAC8C,CAAA;AAEpE,eAAO,MAAM,YAAY,GACvB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,QAAQ,MAAM,EAAE,EAChB,YAAW,KACV,OAAO,CAAC,IAAI,CAIX,CAAA;AAEJ,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,MAAM,MAAM,EACZ,MAAM,MAAM,KACX,OAAO,CAAC,IAAI,CAGX,CAAA"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,SAAS,EAET,SAAS,EACV,MAAM,mBAAmB,CAAA;AA6B1B,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CACf,CAAA;AAE9C,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,QAAQ,MAAM,KACb,OAAO,CAAC,SAAS,EAAE,CAC8C,CAAA;AAEpE,eAAO,MAAM,YAAY,GACvB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,QAAQ,MAAM,EAAE,EAChB,YAAW,KACV,OAAO,CAAC,IAAI,CAIX,CAAA;AAEJ,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,MAAM,MAAM,EACZ,MAAM,MAAM,KACX,OAAO,CAAC,IAAI,CAGX,CAAA;AAEJ,eAAO,MAAM,YAAY,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,SAAS,CAWpE,CAAA"}
package/dist/lib/api.js CHANGED
@@ -3,7 +3,7 @@ const request = async (apiKey, path, options = {}) => {
3
3
  const res = await fetch(`${BASE_URL}${path}`, {
4
4
  ...options,
5
5
  headers: {
6
- Authorization: `Apikey ${apiKey}`,
6
+ Authorization: `Bearer ${apiKey}`,
7
7
  "Content-Type": "application/json",
8
8
  ...options.headers,
9
9
  },
@@ -27,4 +27,16 @@ export const setDnsRecord = (apiKey, domain, type, name, values, ttl = 10800) =>
27
27
  export const deleteDnsRecord = (apiKey, domain, type, name) => request(apiKey, `/livedns/domains/${domain}/records/${name}/${type}`, {
28
28
  method: "DELETE",
29
29
  });
30
+ export const getTokenInfo = async (apiKey) => {
31
+ const res = await fetch("https://id.gandi.net/tokeninfo", {
32
+ headers: { Authorization: `Bearer ${apiKey}` },
33
+ });
34
+ if (!res.ok) {
35
+ const err = (await res
36
+ .json()
37
+ .catch(() => ({ message: res.statusText })));
38
+ throw new Error(err.message ?? `HTTP ${res.status}`);
39
+ }
40
+ return res.json();
41
+ };
30
42
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAG,0BAA0B,CAAA;AAE3C,MAAM,OAAO,GAAG,KAAK,EACnB,MAAc,EACd,IAAY,EACZ,UAAuB,EAAE,EACb,EAAE;IACd,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,EAAE,EAAE;QAC5C,GAAG,OAAO;QACV,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,EAAE;YACjC,cAAc,EAAE,kBAAkB;YAClC,GAAG,OAAO,CAAC,OAAO;SACnB;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG;aACnB,IAAI,EAAE;aACN,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAe,CAAA;QAC5D,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,SAAc,CAAA;IAC7C,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAA;AACjC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAc,EAAqB,EAAE,CAC/D,OAAO,CAAW,MAAM,EAAE,iBAAiB,CAAC,CAAA;AAE9C,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,MAAc,EACd,MAAc,EACQ,EAAE,CACxB,OAAO,CAAc,MAAM,EAAE,oBAAoB,MAAM,UAAU,CAAC,CAAA;AAEpE,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,MAAc,EACd,MAAc,EACd,IAAY,EACZ,IAAY,EACZ,MAAgB,EAChB,GAAG,GAAG,KAAK,EACI,EAAE,CACjB,OAAO,CAAO,MAAM,EAAE,oBAAoB,MAAM,YAAY,IAAI,IAAI,IAAI,EAAE,EAAE;IAC1E,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;CAC/D,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAAc,EACd,MAAc,EACd,IAAY,EACZ,IAAY,EACG,EAAE,CACjB,OAAO,CAAO,MAAM,EAAE,oBAAoB,MAAM,YAAY,IAAI,IAAI,IAAI,EAAE,EAAE;IAC1E,MAAM,EAAE,QAAQ;CACjB,CAAC,CAAA"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAOA,MAAM,QAAQ,GAAG,0BAA0B,CAAA;AAE3C,MAAM,OAAO,GAAG,KAAK,EACnB,MAAc,EACd,IAAY,EACZ,UAAuB,EAAE,EACb,EAAE;IACd,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,EAAE,EAAE;QAC5C,GAAG,OAAO;QACV,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,EAAE;YACjC,cAAc,EAAE,kBAAkB;YAClC,GAAG,OAAO,CAAC,OAAO;SACnB;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG;aACnB,IAAI,EAAE;aACN,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAe,CAAA;QAC5D,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,SAAc,CAAA;IAC7C,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAA;AACjC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAc,EAAqB,EAAE,CAC/D,OAAO,CAAW,MAAM,EAAE,iBAAiB,CAAC,CAAA;AAE9C,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,MAAc,EACd,MAAc,EACQ,EAAE,CACxB,OAAO,CAAc,MAAM,EAAE,oBAAoB,MAAM,UAAU,CAAC,CAAA;AAEpE,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,MAAc,EACd,MAAc,EACd,IAAY,EACZ,IAAY,EACZ,MAAgB,EAChB,GAAG,GAAG,KAAK,EACI,EAAE,CACjB,OAAO,CAAO,MAAM,EAAE,oBAAoB,MAAM,YAAY,IAAI,IAAI,IAAI,EAAE,EAAE;IAC1E,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;CAC/D,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAAc,EACd,MAAc,EACd,IAAY,EACZ,IAAY,EACG,EAAE,CACjB,OAAO,CAAO,MAAM,EAAE,oBAAoB,MAAM,YAAY,IAAI,IAAI,IAAI,EAAE,EAAE;IAC1E,MAAM,EAAE,QAAQ;CACjB,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,MAAc,EAAsB,EAAE;IACvE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,gCAAgC,EAAE;QACxD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;KAC/C,CAAC,CAAA;IACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG;aACnB,IAAI,EAAE;aACN,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAe,CAAA;QAC5D,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;IACtD,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAwB,CAAA;AACzC,CAAC,CAAA"}
@@ -3,7 +3,7 @@ export interface Domain {
3
3
  fqdn_unicode: string;
4
4
  href: string;
5
5
  id: string;
6
- name_server: {
6
+ name_server?: {
7
7
  current: string;
8
8
  };
9
9
  dates: {
@@ -28,4 +28,15 @@ export interface GandiError {
28
28
  object: string;
29
29
  cause: string;
30
30
  }
31
+ export interface TokenInfo {
32
+ user_id: string;
33
+ sharing_id: string;
34
+ pat_id: string;
35
+ pat_name: string;
36
+ scope: string[];
37
+ entities: {
38
+ id: string;
39
+ }[];
40
+ expires_in: number;
41
+ }
31
42
  //# sourceMappingURL=gandi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gandi.d.ts","sourceRoot":"","sources":["../../src/types/gandi.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE;QACX,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAA;QAClB,mBAAmB,EAAE,MAAM,CAAA;QAC3B,gBAAgB,EAAE,MAAM,CAAA;QACxB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd"}
1
+ {"version":3,"file":"gandi.d.ts","sourceRoot":"","sources":["../../src/types/gandi.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,CAAC,EAAE;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAA;QAClB,mBAAmB,EAAE,MAAM,CAAA;QAC3B,gBAAgB,EAAE,MAAM,CAAA;QACxB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;CACnB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kud/gandi-cli",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "A modern CLI for the Gandi v5 REST API",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,9 +11,10 @@
11
11
  ],
12
12
  "scripts": {
13
13
  "build": "tsc",
14
- "dev": "tsc --watch",
14
+ "dev": "tsx src/index.tsx",
15
15
  "start": "node dist/index.js"
16
16
  },
17
+ "homepage": "https://kud.github.io/gandi-cli",
17
18
  "repository": {
18
19
  "type": "git",
19
20
  "url": "https://github.com/kud/gandi-cli"
@@ -27,6 +28,7 @@
27
28
  "devDependencies": {
28
29
  "@types/node": "^22.0.0",
29
30
  "@types/react": "^19.0.0",
31
+ "tsx": "4.21.0",
30
32
  "typescript": "^5.5.4"
31
33
  }
32
34
  }