@aoxborrow/registrar-client 0.3.0 → 0.5.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aoxborrow/registrar-client",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "One consistent, fully-typed TypeScript interface to many domain registrar APIs (GoDaddy, Cloudflare, Namecheap, Spaceship, Dynadot, Porkbun, and more) behind a single pluggable multi-provider client",
5
5
  "author": {
6
6
  "name": "Aaron Oxborrow",
@@ -271,20 +271,28 @@ export class GoDaddyRegistrar extends BaseRegistrar {
271
271
  static readonly displayName = 'GoDaddy';
272
272
  static readonly website = 'godaddy.com';
273
273
  static readonly helpText =
274
- 'Authenticate one of two ways. For production, create a Personal Access ' +
275
- 'Token (PAT) at https://developer.godaddy.com and pass it as `apiToken` — ' +
276
- 'this enables the modern v3 API. For sandbox testing, create OTE ' +
277
- '(test environment) keys and pass `apiKey` + `apiSecret` with ' +
278
- '{ environment: "sandbox" }; OTE only exposes the legacy v1 API. The ' +
279
- 'sso-key (API Key/Secret) scheme is deprecated by GoDaddy in 2026. ' +
280
- 'Domain forwarding uses the v2 customer-scoped API — set `customerId` to ' +
281
- 'your GoDaddy customer UUID, or to your numeric shopper/account ID (which ' +
282
- 'the client resolves to the UUID via an sso-key-authenticated lookup).';
274
+ 'Create a Personal Access Token (PAT) at https://developer.godaddy.com and ' +
275
+ "paste it here. The PAT is GoDaddy's modern credential: it unlocks the v3 " +
276
+ 'API (discovery, registration, DNS, nameservers) and also authenticates the ' +
277
+ 'legacy v1 API for management operations (renew, transfer, auto-renew, ' +
278
+ 'lock, privacy, contacts) — one token covers everything.';
279
+ // Only the PAT is exposed for configuration — it is the sole credential
280
+ // GoDaddy recommends going forward, and it covers every production operation.
281
+ //
282
+ // The legacy `apiKey` + `apiSecret` (sso-key) pair and the `customerId` field
283
+ // are intentionally NOT advertised here. The code that consumes them is kept
284
+ // (see `authHeader`, `useV3`, `resolveCustomerId`, and the forwarding methods)
285
+ // so OTE/sandbox testing and direct programmatic use still work when those
286
+ // values are passed in credentials explicitly. But because they are no longer
287
+ // configurable, two capabilities are effectively unreachable through normal
288
+ // (config-driven) setup:
289
+ // - OTE/sandbox, which needs an sso-key (`apiKey` + `apiSecret`), and
290
+ // - domain forwarding, which needs `customerId` (a customer UUID), plus an
291
+ // sso-key to resolve a numeric shopper ID to that UUID.
292
+ // GoDaddy is deprecating the sso-key scheme in 2026, so this is the direction
293
+ // of travel regardless.
283
294
  static readonly configFields: ConfigField[] = [
284
- { name: 'apiToken', label: 'API Token (PAT)', type: 'password', required: false },
285
- { name: 'apiKey', label: 'API Key', type: 'password', required: false },
286
- { name: 'apiSecret', label: 'API Secret', type: 'password', required: false },
287
- { name: 'customerId', label: 'Customer ID or Shopper ID', type: 'text', required: false },
295
+ { name: 'apiToken', label: 'API Token (PAT)', type: 'password', required: true },
288
296
  ];
289
297
  // GoDaddy's OTE ("Operational Test Environment") is its sandbox
290
298
  static readonly supportsSandbox = true;
@@ -196,7 +196,10 @@ export class NamecheapRegistrar extends BaseRegistrar {
196
196
  static readonly configFields: ConfigField[] = [
197
197
  { name: 'username', label: 'Username', type: 'text', required: true },
198
198
  { name: 'apiKey', label: 'API Key', type: 'password', required: true },
199
- { name: 'clientIp', label: 'Client IP', type: 'text', required: false, default: '0.0.0.0' },
199
+ // Required: Namecheap rejects any request whose ClientIp isn't on the
200
+ // account's whitelist, so a placeholder like 0.0.0.0 only defers the
201
+ // failure to the first call. Make the user supply the whitelisted IP.
202
+ { name: 'clientIp', label: 'Client IP', type: 'text', required: true },
200
203
  ];
201
204
  // Namecheap runs a sandbox at api.sandbox.namecheap.com (separate account at
202
205
  // sandbox.namecheap.com with its own API key)