@aoxborrow/registrar-client 0.1.0 → 0.3.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/dist/index.d.cts CHANGED
@@ -181,6 +181,7 @@ interface Registrar {
181
181
  readonly name: string;
182
182
  readonly environment: RegistrarEnvironment;
183
183
  readonly features: readonly RegistrarFeature[];
184
+ readonly requiresNameserversFetch: boolean;
184
185
  supports(feature: RegistrarFeature): boolean;
185
186
  testConnection(opts?: RequestOptions): Promise<ConnectionResult>;
186
187
  listDomains(opts?: ListDomainsOptions): Promise<Domain[]>;
@@ -211,6 +212,7 @@ interface Registrar {
211
212
  interface RegistrarConstructor {
212
213
  new (credentials: RegistrarCredentials, options?: RegistrarOptions): Registrar;
213
214
  readonly displayName: string;
215
+ readonly website: string;
214
216
  readonly configFields: ConfigField[];
215
217
  readonly helpText: string;
216
218
  readonly supportsSandbox: boolean;
@@ -360,6 +362,7 @@ declare abstract class BaseRegistrar implements Registrar {
360
362
  static get features(): readonly RegistrarFeature[];
361
363
  get features(): readonly RegistrarFeature[];
362
364
  supports(feature: RegistrarFeature): boolean;
365
+ readonly requiresNameserversFetch: boolean;
363
366
  constructor(credentials: RegistrarCredentials, httpConfig: Omit<HttpClientConfig, 'options'>, options?: RegistrarOptions);
364
367
  testConnection(_opts?: RequestOptions): Promise<ConnectionResult>;
365
368
  listDomains(_opts?: ListDomainsOptions): Promise<Domain[]>;
@@ -392,6 +395,7 @@ declare abstract class BaseRegistrar implements Registrar {
392
395
  declare class CloudflareRegistrar extends BaseRegistrar {
393
396
  readonly name = "cloudflare";
394
397
  static readonly displayName = "Cloudflare";
398
+ static readonly website = "cloudflare.com";
395
399
  static readonly helpText: string;
396
400
  static readonly configFields: ConfigField[];
397
401
  static readonly supportsSandbox = false;
@@ -435,6 +439,7 @@ declare class CloudflareRegistrar extends BaseRegistrar {
435
439
  declare class DynadotRegistrar extends BaseRegistrar {
436
440
  readonly name = "dynadot";
437
441
  static readonly displayName = "Dynadot";
442
+ static readonly website = "dynadot.com";
438
443
  static readonly helpText: string;
439
444
  static readonly configFields: ConfigField[];
440
445
  static readonly supportsSandbox = true;
@@ -447,6 +452,7 @@ declare class DynadotRegistrar extends BaseRegistrar {
447
452
  listDomains(opts?: ListDomainsOptions): Promise<Domain[]>;
448
453
  getDomain(domainName: string, opts?: RequestOptions): Promise<Domain>;
449
454
  private domainInfo;
455
+ readonly requiresNameserversFetch = false;
450
456
  getNameservers(domainName: string, opts?: RequestOptions): Promise<string[]>;
451
457
  getContacts(domainName: string, opts?: RequestOptions): Promise<ContactSet>;
452
458
  getDnsRecords(domainName: string, opts?: RequestOptions): Promise<DnsRecord[]>;
@@ -477,6 +483,7 @@ declare class DynadotRegistrar extends BaseRegistrar {
477
483
  declare class GandiRegistrar extends BaseRegistrar {
478
484
  readonly name = "gandi";
479
485
  static readonly displayName = "Gandi.net";
486
+ static readonly website = "gandi.net";
480
487
  static readonly helpText: string;
481
488
  static readonly configFields: ConfigField[];
482
489
  static readonly supportsSandbox = true;
@@ -514,6 +521,7 @@ declare class GandiRegistrar extends BaseRegistrar {
514
521
  declare class GoDaddyRegistrar extends BaseRegistrar {
515
522
  readonly name = "godaddy";
516
523
  static readonly displayName = "GoDaddy";
524
+ static readonly website = "godaddy.com";
517
525
  static readonly helpText: string;
518
526
  static readonly configFields: ConfigField[];
519
527
  static readonly supportsSandbox = true;
@@ -527,6 +535,7 @@ declare class GoDaddyRegistrar extends BaseRegistrar {
527
535
  private listDomainsV3;
528
536
  private listDomainsV1;
529
537
  getDomain(domainName: string, opts?: RequestOptions): Promise<Domain>;
538
+ readonly requiresNameserversFetch = false;
530
539
  getNameservers(domainName: string, opts?: RequestOptions): Promise<string[]>;
531
540
  checkAvailability(domainNames: string[], opts?: RequestOptions): Promise<DomainAvailability[]>;
532
541
  getPricing(tldOrDomain: string, opts?: RequestOptions): Promise<TldPricing>;
@@ -560,6 +569,7 @@ declare class GoDaddyRegistrar extends BaseRegistrar {
560
569
  declare class NameBrightRegistrar extends BaseRegistrar {
561
570
  readonly name = "namebright";
562
571
  static readonly displayName = "NameBright";
572
+ static readonly website = "namebright.com";
563
573
  static readonly helpText: string;
564
574
  static readonly configFields: ConfigField[];
565
575
  static readonly supportsSandbox = false;
@@ -594,6 +604,7 @@ declare class NameBrightRegistrar extends BaseRegistrar {
594
604
  declare class NamecheapRegistrar extends BaseRegistrar {
595
605
  readonly name = "namecheap";
596
606
  static readonly displayName = "Namecheap";
607
+ static readonly website = "namecheap.com";
597
608
  static readonly helpText: string;
598
609
  static readonly configFields: ConfigField[];
599
610
  static readonly supportsSandbox = true;
@@ -630,6 +641,7 @@ declare class NamecheapRegistrar extends BaseRegistrar {
630
641
  declare class NameSiloRegistrar extends BaseRegistrar {
631
642
  readonly name = "namesilo";
632
643
  static readonly displayName = "NameSilo";
644
+ static readonly website = "namesilo.com";
633
645
  static readonly helpText: string;
634
646
  static readonly configFields: ConfigField[];
635
647
  static readonly supportsSandbox = true;
@@ -639,6 +651,7 @@ declare class NameSiloRegistrar extends BaseRegistrar {
639
651
  testConnection(opts?: RequestOptions): Promise<ConnectionResult>;
640
652
  listDomains(opts?: ListDomainsOptions): Promise<Domain[]>;
641
653
  getDomain(domainName: string, opts?: RequestOptions): Promise<Domain>;
654
+ readonly requiresNameserversFetch = false;
642
655
  getNameservers(domainName: string, opts?: RequestOptions): Promise<string[]>;
643
656
  getContacts(domainName: string, opts?: RequestOptions): Promise<ContactSet>;
644
657
  getDnsRecords(domainName: string, opts?: RequestOptions): Promise<DnsRecord[]>;
@@ -666,6 +679,7 @@ declare class NameSiloRegistrar extends BaseRegistrar {
666
679
  declare class PorkbunRegistrar extends BaseRegistrar {
667
680
  readonly name = "porkbun";
668
681
  static readonly displayName = "Porkbun";
682
+ static readonly website = "porkbun.com";
669
683
  static readonly helpText: string;
670
684
  static readonly configFields: ConfigField[];
671
685
  static readonly supportsSandbox = true;
@@ -698,6 +712,7 @@ declare class PorkbunRegistrar extends BaseRegistrar {
698
712
  declare class SpaceshipRegistrar extends BaseRegistrar {
699
713
  readonly name = "spaceship";
700
714
  static readonly displayName = "Spaceship";
715
+ static readonly website = "spaceship.com";
701
716
  static readonly helpText: string;
702
717
  static readonly configFields: ConfigField[];
703
718
  static readonly supportsSandbox = false;
@@ -706,6 +721,7 @@ declare class SpaceshipRegistrar extends BaseRegistrar {
706
721
  testConnection(opts?: RequestOptions): Promise<ConnectionResult>;
707
722
  listDomains(opts?: ListDomainsOptions): Promise<Domain[]>;
708
723
  getDomain(domainName: string, opts?: RequestOptions): Promise<Domain>;
724
+ readonly requiresNameserversFetch = false;
709
725
  getNameservers(domainName: string, opts?: RequestOptions): Promise<string[]>;
710
726
  getAuthCode(domainName: string, opts?: RequestOptions): Promise<string>;
711
727
  checkAvailability(domainNames: string[], opts?: RequestOptions): Promise<DomainAvailability[]>;
package/dist/index.d.ts CHANGED
@@ -181,6 +181,7 @@ interface Registrar {
181
181
  readonly name: string;
182
182
  readonly environment: RegistrarEnvironment;
183
183
  readonly features: readonly RegistrarFeature[];
184
+ readonly requiresNameserversFetch: boolean;
184
185
  supports(feature: RegistrarFeature): boolean;
185
186
  testConnection(opts?: RequestOptions): Promise<ConnectionResult>;
186
187
  listDomains(opts?: ListDomainsOptions): Promise<Domain[]>;
@@ -211,6 +212,7 @@ interface Registrar {
211
212
  interface RegistrarConstructor {
212
213
  new (credentials: RegistrarCredentials, options?: RegistrarOptions): Registrar;
213
214
  readonly displayName: string;
215
+ readonly website: string;
214
216
  readonly configFields: ConfigField[];
215
217
  readonly helpText: string;
216
218
  readonly supportsSandbox: boolean;
@@ -360,6 +362,7 @@ declare abstract class BaseRegistrar implements Registrar {
360
362
  static get features(): readonly RegistrarFeature[];
361
363
  get features(): readonly RegistrarFeature[];
362
364
  supports(feature: RegistrarFeature): boolean;
365
+ readonly requiresNameserversFetch: boolean;
363
366
  constructor(credentials: RegistrarCredentials, httpConfig: Omit<HttpClientConfig, 'options'>, options?: RegistrarOptions);
364
367
  testConnection(_opts?: RequestOptions): Promise<ConnectionResult>;
365
368
  listDomains(_opts?: ListDomainsOptions): Promise<Domain[]>;
@@ -392,6 +395,7 @@ declare abstract class BaseRegistrar implements Registrar {
392
395
  declare class CloudflareRegistrar extends BaseRegistrar {
393
396
  readonly name = "cloudflare";
394
397
  static readonly displayName = "Cloudflare";
398
+ static readonly website = "cloudflare.com";
395
399
  static readonly helpText: string;
396
400
  static readonly configFields: ConfigField[];
397
401
  static readonly supportsSandbox = false;
@@ -435,6 +439,7 @@ declare class CloudflareRegistrar extends BaseRegistrar {
435
439
  declare class DynadotRegistrar extends BaseRegistrar {
436
440
  readonly name = "dynadot";
437
441
  static readonly displayName = "Dynadot";
442
+ static readonly website = "dynadot.com";
438
443
  static readonly helpText: string;
439
444
  static readonly configFields: ConfigField[];
440
445
  static readonly supportsSandbox = true;
@@ -447,6 +452,7 @@ declare class DynadotRegistrar extends BaseRegistrar {
447
452
  listDomains(opts?: ListDomainsOptions): Promise<Domain[]>;
448
453
  getDomain(domainName: string, opts?: RequestOptions): Promise<Domain>;
449
454
  private domainInfo;
455
+ readonly requiresNameserversFetch = false;
450
456
  getNameservers(domainName: string, opts?: RequestOptions): Promise<string[]>;
451
457
  getContacts(domainName: string, opts?: RequestOptions): Promise<ContactSet>;
452
458
  getDnsRecords(domainName: string, opts?: RequestOptions): Promise<DnsRecord[]>;
@@ -477,6 +483,7 @@ declare class DynadotRegistrar extends BaseRegistrar {
477
483
  declare class GandiRegistrar extends BaseRegistrar {
478
484
  readonly name = "gandi";
479
485
  static readonly displayName = "Gandi.net";
486
+ static readonly website = "gandi.net";
480
487
  static readonly helpText: string;
481
488
  static readonly configFields: ConfigField[];
482
489
  static readonly supportsSandbox = true;
@@ -514,6 +521,7 @@ declare class GandiRegistrar extends BaseRegistrar {
514
521
  declare class GoDaddyRegistrar extends BaseRegistrar {
515
522
  readonly name = "godaddy";
516
523
  static readonly displayName = "GoDaddy";
524
+ static readonly website = "godaddy.com";
517
525
  static readonly helpText: string;
518
526
  static readonly configFields: ConfigField[];
519
527
  static readonly supportsSandbox = true;
@@ -527,6 +535,7 @@ declare class GoDaddyRegistrar extends BaseRegistrar {
527
535
  private listDomainsV3;
528
536
  private listDomainsV1;
529
537
  getDomain(domainName: string, opts?: RequestOptions): Promise<Domain>;
538
+ readonly requiresNameserversFetch = false;
530
539
  getNameservers(domainName: string, opts?: RequestOptions): Promise<string[]>;
531
540
  checkAvailability(domainNames: string[], opts?: RequestOptions): Promise<DomainAvailability[]>;
532
541
  getPricing(tldOrDomain: string, opts?: RequestOptions): Promise<TldPricing>;
@@ -560,6 +569,7 @@ declare class GoDaddyRegistrar extends BaseRegistrar {
560
569
  declare class NameBrightRegistrar extends BaseRegistrar {
561
570
  readonly name = "namebright";
562
571
  static readonly displayName = "NameBright";
572
+ static readonly website = "namebright.com";
563
573
  static readonly helpText: string;
564
574
  static readonly configFields: ConfigField[];
565
575
  static readonly supportsSandbox = false;
@@ -594,6 +604,7 @@ declare class NameBrightRegistrar extends BaseRegistrar {
594
604
  declare class NamecheapRegistrar extends BaseRegistrar {
595
605
  readonly name = "namecheap";
596
606
  static readonly displayName = "Namecheap";
607
+ static readonly website = "namecheap.com";
597
608
  static readonly helpText: string;
598
609
  static readonly configFields: ConfigField[];
599
610
  static readonly supportsSandbox = true;
@@ -630,6 +641,7 @@ declare class NamecheapRegistrar extends BaseRegistrar {
630
641
  declare class NameSiloRegistrar extends BaseRegistrar {
631
642
  readonly name = "namesilo";
632
643
  static readonly displayName = "NameSilo";
644
+ static readonly website = "namesilo.com";
633
645
  static readonly helpText: string;
634
646
  static readonly configFields: ConfigField[];
635
647
  static readonly supportsSandbox = true;
@@ -639,6 +651,7 @@ declare class NameSiloRegistrar extends BaseRegistrar {
639
651
  testConnection(opts?: RequestOptions): Promise<ConnectionResult>;
640
652
  listDomains(opts?: ListDomainsOptions): Promise<Domain[]>;
641
653
  getDomain(domainName: string, opts?: RequestOptions): Promise<Domain>;
654
+ readonly requiresNameserversFetch = false;
642
655
  getNameservers(domainName: string, opts?: RequestOptions): Promise<string[]>;
643
656
  getContacts(domainName: string, opts?: RequestOptions): Promise<ContactSet>;
644
657
  getDnsRecords(domainName: string, opts?: RequestOptions): Promise<DnsRecord[]>;
@@ -666,6 +679,7 @@ declare class NameSiloRegistrar extends BaseRegistrar {
666
679
  declare class PorkbunRegistrar extends BaseRegistrar {
667
680
  readonly name = "porkbun";
668
681
  static readonly displayName = "Porkbun";
682
+ static readonly website = "porkbun.com";
669
683
  static readonly helpText: string;
670
684
  static readonly configFields: ConfigField[];
671
685
  static readonly supportsSandbox = true;
@@ -698,6 +712,7 @@ declare class PorkbunRegistrar extends BaseRegistrar {
698
712
  declare class SpaceshipRegistrar extends BaseRegistrar {
699
713
  readonly name = "spaceship";
700
714
  static readonly displayName = "Spaceship";
715
+ static readonly website = "spaceship.com";
701
716
  static readonly helpText: string;
702
717
  static readonly configFields: ConfigField[];
703
718
  static readonly supportsSandbox = false;
@@ -706,6 +721,7 @@ declare class SpaceshipRegistrar extends BaseRegistrar {
706
721
  testConnection(opts?: RequestOptions): Promise<ConnectionResult>;
707
722
  listDomains(opts?: ListDomainsOptions): Promise<Domain[]>;
708
723
  getDomain(domainName: string, opts?: RequestOptions): Promise<Domain>;
724
+ readonly requiresNameserversFetch = false;
709
725
  getNameservers(domainName: string, opts?: RequestOptions): Promise<string[]>;
710
726
  getAuthCode(domainName: string, opts?: RequestOptions): Promise<string>;
711
727
  checkAvailability(domainNames: string[], opts?: RequestOptions): Promise<DomainAvailability[]>;
package/dist/index.js CHANGED
@@ -256,7 +256,7 @@ var RegistrarClient = class {
256
256
  try {
257
257
  const detail = await this.provider.getDomain(name, opts);
258
258
  let merged = { ...domains[index], ...detail };
259
- if (merged.nameservers.length === 0) {
259
+ if (merged.nameservers.length === 0 && this.provider.requiresNameserversFetch) {
260
260
  try {
261
261
  const nameservers = normalizeNameservers(
262
262
  await this.provider.getNameservers(name, opts)
@@ -644,6 +644,11 @@ var BaseRegistrar = class {
644
644
  supports(feature) {
645
645
  return this.features.includes(feature);
646
646
  }
647
+ // See Registrar.requiresNameserversFetch. Defaults true, so a provider
648
+ // whose getNameservers hits a real endpoint keeps the enrichment fallback
649
+ // without opting in; the providers whose getNameservers just re-reads getDomain
650
+ // override this to false to drop the redundant call.
651
+ requiresNameserversFetch = true;
647
652
  constructor(credentials, httpConfig, options) {
648
653
  const { environment = "production", ...clientOptions } = options ?? {};
649
654
  this.credentials = credentials;
@@ -741,6 +746,7 @@ var BaseRegistrar = class {
741
746
  var CloudflareRegistrar = class _CloudflareRegistrar extends BaseRegistrar {
742
747
  name = "cloudflare";
743
748
  static displayName = "Cloudflare";
749
+ static website = "cloudflare.com";
744
750
  static helpText = 'Create an API token in your Cloudflare dashboard under My Profile > API Tokens. The token needs "Account.Registrar" read/write permissions. Find your Account ID in the URL or on the Overview page of any zone.';
745
751
  static configFields = [
746
752
  { name: "apiToken", label: "API Token", type: "password", required: true },
@@ -1597,6 +1603,7 @@ var SUPPORTED_DNS_TYPES = /* @__PURE__ */ new Set(["A", "AAAA", "CNAME", "MX", "
1597
1603
  var DynadotRegistrar = class extends BaseRegistrar {
1598
1604
  name = "dynadot";
1599
1605
  static displayName = "Dynadot";
1606
+ static website = "dynadot.com";
1600
1607
  static helpText = "Under Tools > API in your Dynadot account, generate an API Key and API Secret. The account must be unlocked with API access enabled. The key identifies you; the secret signs requests (X-Signature) and is never sent directly.";
1601
1608
  static configFields = [
1602
1609
  { name: "apiKey", label: "API Key", type: "password", required: true },
@@ -1712,6 +1719,9 @@ ${bodyStr}`;
1712
1719
  if (!data.domain_info) throw new NotFoundError(`Dynadot: domain '${domainName}' not found`);
1713
1720
  return data.domain_info;
1714
1721
  }
1722
+ // getNameservers re-reads getDomain (domain_info carries NS inline; no separate
1723
+ // endpoint), so listing enrichment gains nothing from the fallback — skip it.
1724
+ requiresNameserversFetch = false;
1715
1725
  async getNameservers(domainName, opts) {
1716
1726
  const domain = await this.getDomain(domainName, opts);
1717
1727
  return domain.nameservers;
@@ -2344,6 +2354,7 @@ var GANDI_TYPE_TO_FORWARD = {
2344
2354
  var GandiRegistrar = class extends BaseRegistrar {
2345
2355
  name = "gandi";
2346
2356
  static displayName = "Gandi.net";
2357
+ static website = "gandi.net";
2347
2358
  static helpText = "Generate a Personal Access Token (PAT) in your Gandi account under Account Settings > Security. The token needs permission to manage domains. (Gandi has deprecated the legacy API Key; use a PAT.)";
2348
2359
  static configFields = [
2349
2360
  { name: "apiKey", label: "Personal Access Token", type: "password", required: true }
@@ -3030,6 +3041,7 @@ var PRICE_MICRO_UNITS = 1e6;
3030
3041
  var GoDaddyRegistrar = class _GoDaddyRegistrar extends BaseRegistrar {
3031
3042
  name = "godaddy";
3032
3043
  static displayName = "GoDaddy";
3044
+ static website = "godaddy.com";
3033
3045
  static helpText = 'Authenticate one of two ways. For production, create a Personal Access Token (PAT) at https://developer.godaddy.com and pass it as `apiToken` \u2014 this enables the modern v3 API. For sandbox testing, create OTE (test environment) keys and pass `apiKey` + `apiSecret` with { environment: "sandbox" }; OTE only exposes the legacy v1 API. The sso-key (API Key/Secret) scheme is deprecated by GoDaddy in 2026. Domain forwarding uses the v2 customer-scoped API \u2014 set `customerId` to your GoDaddy customer UUID, or to your numeric shopper/account ID (which the client resolves to the UUID via an sso-key-authenticated lookup).';
3034
3046
  static configFields = [
3035
3047
  { name: "apiToken", label: "API Token (PAT)", type: "password", required: false },
@@ -3153,6 +3165,9 @@ var GoDaddyRegistrar = class _GoDaddyRegistrar extends BaseRegistrar {
3153
3165
  });
3154
3166
  return this.toDomain(d);
3155
3167
  }
3168
+ // getNameservers re-reads getDomain (GoDaddy has no dedicated NS endpoint), so
3169
+ // listing enrichment gains nothing from the fallback — skip it.
3170
+ requiresNameserversFetch = false;
3156
3171
  async getNameservers(domainName, opts) {
3157
3172
  const domain = await this.getDomain(domainName, opts);
3158
3173
  return domain.nameservers;
@@ -3894,6 +3909,7 @@ var TOKEN_URL = "https://api.namebright.com/auth/token";
3894
3909
  var NameBrightRegistrar = class extends BaseRegistrar {
3895
3910
  name = "namebright";
3896
3911
  static displayName = "NameBright";
3912
+ static website = "namebright.com";
3897
3913
  static helpText = 'API access is not enabled by default \u2014 you must request it from NameBright (contact support / your account manager) before the API Management page is available. Once enabled, create an API Application under my.namebright.com > My Account > API Management. The Client ID is "<accountName>:<applicationName>"; NameBright issues the Client Secret. Note the application also enforces an IP whitelist.';
3898
3914
  static configFields = [
3899
3915
  { name: "clientId", label: "Client ID", type: "text", required: true },
@@ -4384,6 +4400,7 @@ var NC_CONTACT_ROLES = [
4384
4400
  var NamecheapRegistrar = class extends BaseRegistrar {
4385
4401
  name = "namecheap";
4386
4402
  static displayName = "Namecheap";
4403
+ static website = "namecheap.com";
4387
4404
  static helpText = "Enable API access in your Namecheap account under Profile > Tools > API Access, generate an API key, and whitelist your request IP(s) in the API settings. Provide the whitelisted IP as the Client IP field.";
4388
4405
  static configFields = [
4389
4406
  { name: "username", label: "Username", type: "text", required: true },
@@ -4941,6 +4958,7 @@ function toNcContactParams(prefix, c) {
4941
4958
  var NameSiloRegistrar = class extends BaseRegistrar {
4942
4959
  name = "namesilo";
4943
4960
  static displayName = "NameSilo";
4961
+ static website = "namesilo.com";
4944
4962
  static helpText = 'Generate an API key in your NameSilo account under Account Options > API Manager. You can optionally restrict the key to specific IP addresses there. For sandbox testing, use { environment: "sandbox" } (OTE host ote.namesilo.com) \u2014 OTE credentials are not self-service; you must contact NameSilo support to be issued them.';
4945
4963
  static configFields = [
4946
4964
  { name: "apiKey", label: "API Key", type: "password", required: true }
@@ -5051,6 +5069,9 @@ var NameSiloRegistrar = class extends BaseRegistrar {
5051
5069
  nameservers: extractNsHosts(r.nameservers)
5052
5070
  });
5053
5071
  }
5072
+ // getNameservers re-reads getDomain (getDomainInfo carries NS; no separate
5073
+ // endpoint), so listing enrichment gains nothing from the fallback — skip it.
5074
+ requiresNameserversFetch = false;
5054
5075
  async getNameservers(domainName, opts) {
5055
5076
  const domain = await this.getDomain(domainName, opts);
5056
5077
  return domain.nameservers;
@@ -5622,6 +5643,7 @@ var PB_TYPE_TO_FORWARD = {
5622
5643
  var PorkbunRegistrar = class extends BaseRegistrar {
5623
5644
  name = "porkbun";
5624
5645
  static displayName = "Porkbun";
5646
+ static website = "porkbun.com";
5625
5647
  static helpText = 'Create an API key and secret in your Porkbun account under Account > API Access, then enable "API Access" on each domain you want to manage (per-domain toggle in the domain details). For testing, use a sandbox key (prefixed "pk1_sb_") with { environment: "sandbox" } \u2014 it hits the same base URL but an isolated test environment with $1,000 of fake credit and no real charges (top up or reset via POST /sandbox/topup and POST /sandbox/reset).';
5626
5648
  static configFields = [
5627
5649
  { name: "apiKey", label: "API Key", type: "password", required: true },
@@ -6228,6 +6250,7 @@ var WRITABLE_DNS_TYPES = /* @__PURE__ */ new Set(["A", "AAAA", "CNAME", "NS", "T
6228
6250
  var SpaceshipRegistrar = class extends BaseRegistrar {
6229
6251
  name = "spaceship";
6230
6252
  static displayName = "Spaceship";
6253
+ static website = "spaceship.com";
6231
6254
  static helpText = 'Generate your API key and secret in the API Manager at Spaceship using the "New API key" button. The API requires both X-API-Key and X-API-Secret headers.';
6232
6255
  static configFields = [
6233
6256
  { name: "apiKey", label: "API Key", type: "password", required: true },
@@ -6290,6 +6313,9 @@ var SpaceshipRegistrar = class extends BaseRegistrar {
6290
6313
  async getDomain(domainName, opts) {
6291
6314
  return this.toDomain(await this.getRaw(domainName, opts));
6292
6315
  }
6316
+ // getNameservers reads the same getRaw payload as getDomain (no dedicated NS
6317
+ // endpoint), so listing enrichment gains nothing from the fallback — skip it.
6318
+ requiresNameserversFetch = false;
6293
6319
  async getNameservers(domainName, opts) {
6294
6320
  const d = await this.getRaw(domainName, opts);
6295
6321
  return d.nameservers?.hosts ?? [];