@opusdns/api 1.137.0 → 1.138.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/README.md CHANGED
@@ -61,34 +61,69 @@ import {
61
61
 
62
62
  ## Documentation
63
63
 
64
- There are two documentation setups in this repository:
65
-
66
- ### Legacy: GitHub Pages API Reference (production)
67
-
68
- The `docs/` folder is a static site that embeds
69
- [`@scalar/api-reference`](https://github.com/scalar/scalar) and is published
70
- via GitHub Pages on [developers.opusdns.com](https://developers.opusdns.com/).
71
- Source of truth: [`docs/index.html`](./docs/index.html). Do **not** put
72
- guides/Markdown content here.
73
-
74
- ### Scalar Docs 2.0 (local preview)
75
-
76
- A more sophisticated documentation setup using
77
- [Scalar Docs 2.0](https://scalar.com/products/docs/getting-started) is
78
- contained in [`scalar/`](./scalar/). The Scalar project config lives at
79
- [`scalar/scalar.config.json`](./scalar/scalar.config.json), guide content lives
80
- under [`scalar/content/`](./scalar/content/), and the API reference is
81
- fetched from the raw GitHub copy of [`src/openapi.yaml`](./src/openapi.yaml).
82
-
83
- To preview locally:
64
+ [developers.opusdns.com](https://developers.opusdns.com/) is served by
65
+ [Scalar Docs 2.0](https://scalar.com/products/docs/getting-started) from
66
+ [`scalar/`](./scalar/) in this repository.
67
+
68
+ ### How publishing works
69
+
70
+ **Merging to `main` publishes.** Scalar's GitHub integration builds `main`; there
71
+ is no deploy workflow in this repo and no Scalar token. The custom domain is
72
+ declared in the config itself
73
+ ([`scalar/scalar.config.json`](./scalar/scalar.config.json), `siteConfig.customDomain`),
74
+ not in CI. Nothing in the repository shows this connection, so it is written down
75
+ here: if publishing ever stops, the integration in the Scalar dashboard is where
76
+ to look.
77
+
78
+ **Every PR gets a preview.** The same integration builds each pull request and
79
+ posts a throwaway URL as a comment (`…--opusdns-api-spec.apidocumentation.com`),
80
+ so you can read a change as rendered before merging it. Use it — a bad `filepath`
81
+ or an icon name Scalar does not know renders as nothing rather than failing, and
82
+ merging is what makes that public.
83
+
84
+ The preview does not, however, cover the bots' own PRs: GitHub suppresses
85
+ workflow runs for pull requests opened with a token rather than by a person, so
86
+ both bots validate the config inline before opening theirs.
87
+
88
+ ### Layout
89
+
90
+ | Path | What |
91
+ | --- | --- |
92
+ | `scalar/scalar.config.json` | The whole site: tabs, sidebar routes, theme. Every page's title, icon and URL live here — content files carry no frontmatter |
93
+ | `scalar/content/` | Guide Markdown |
94
+ | `scalar/content/tld-knowledge-base/` | **Generated** from `OpusDNS/tld-specifications` by `scripts/generate_tld_knowledge_base.py` |
95
+ | `scalar/content/mcp-server/` | **Generated** in `OpusDNS/opusdns-mcp`, which opens a PR here carrying the diff. `scripts/sync_mcp_docs.py` lives here but is run from there — see [`scripts/mcp_docs/`](./scripts/mcp_docs/) |
96
+ | `src/openapi.yaml` | The spec. The API Reference tab is fetched by Scalar from the raw GitHub URL at build time, so it is eventually consistent rather than bundled |
97
+
98
+ Two bots write `scalar.config.json`: **Generate TLD Knowledge Base**, a workflow
99
+ in this repo, and **Publish MCP docs to api-spec**, a workflow in
100
+ `OpusDNS/opusdns-mcp` that opens its PR here. Each rebuilds only the subtree it
101
+ owns and both serialise identically (`json.dumps(..., indent=2,
102
+ ensure_ascii=False)` plus a trailing newline), so hand edits should match that
103
+ style — otherwise the next bot PR reformats your lines.
104
+
105
+ ### Local preview
84
106
 
85
107
  ```bash
86
108
  npm install
87
109
  npm --prefix scalar install
88
110
  npm run docs:preview
89
111
  # → http://localhost:7970
112
+
113
+ npm --prefix scalar run check # validate scalar.config.json
90
114
  ```
91
115
 
116
+ Run `check` before pushing anything that touches the config. A `filepath`
117
+ pointing at a file that does not exist, or an icon name Scalar does not know,
118
+ renders as nothing — and merging is what publishes.
119
+
120
+ ### The legacy `docs/` folder
121
+
122
+ [`docs/`](./docs/) is a static GitHub Pages site that embeds
123
+ [`@scalar/api-reference`](https://github.com/scalar/scalar). GitHub Pages is
124
+ still configured for it, but DNS points at Scalar, so **it is not what serves the
125
+ domain**. Treat it as vestigial; do not put content there.
126
+
92
127
  ### Links
93
128
 
94
129
  - [Main website](https://www.opusdns.com/)
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "@opusdns/api-spec-ts-generator": "^1.5.0"
4
4
  },
5
5
  "name": "@opusdns/api",
6
- "version": "1.137.0",
6
+ "version": "1.138.0",
7
7
  "description": "TypeScript types for the OpusDNS OpenAPI specification",
8
8
  "main": "./src/index.ts",
9
9
  "module": "./src/index.ts",
package/src/openapi.yaml CHANGED
@@ -15765,7 +15765,7 @@ info:
15765
15765
  \n\n"
15766
15766
  summary: OpusDNS - your gateway to a seamless domain management experience.
15767
15767
  title: OpusDNS API
15768
- version: 2026-08-26-021624
15768
+ version: 2026-08-26-165903
15769
15769
  x-logo:
15770
15770
  altText: OpusDNS API Reference
15771
15771
  url: https://d24lr4zqs1tgqh.cloudfront.net/c9505a20-5ae1-406c-b060-d392569caebf.jpg
@@ -23423,18 +23423,33 @@ paths:
23423
23423
  - domain_forwards:manage
23424
23424
  /v1/domain-search/suggest:
23425
23425
  get:
23426
- description: Get a list of domain suggestions based on a search query
23426
+ description: "Get a list of domain suggestions based on a search query.\n\n\
23427
+ Suggestions are generated and ranked by relevance rather than enumerated from\
23428
+ \ a fixed list, so the\nresults depend on the shape of `query`:\n\n- **Keyword\
23429
+ \ or phrase** (e.g. `bluewidgets`) \u2014 every result is a generated name,\
23430
+ \ and its `available`\n flag is best-effort.\n- **Full domain name** (e.g.\
23431
+ \ `bluewidgets.de`) \u2014 the queried domain is always returned as the first\n\
23432
+ \ result, with availability checked directly against the registry.\n\nUse\
23433
+ \ a full domain name, or `GET /v1/availability`, whenever you need a definitive\
23434
+ \ answer about a\nspecific domain."
23427
23435
  operationId: suggest_v1_domain_search_suggest_get
23428
23436
  parameters:
23429
- - description: The primary keyword or phrase for the domain search
23437
+ - description: The primary keyword or phrase for the domain search. A full domain
23438
+ name is always returned as the first result, with registry-checked availability.
23430
23439
  in: query
23431
23440
  name: query
23432
23441
  required: true
23433
23442
  schema:
23434
- description: The primary keyword or phrase for the domain search
23443
+ description: The primary keyword or phrase for the domain search. A full
23444
+ domain name is always returned as the first result, with registry-checked
23445
+ availability.
23435
23446
  title: Query
23436
23447
  type: string
23437
- - description: The TLDs to include in the search
23448
+ - description: 'Restricts results to these TLDs. This is a filter, not a guarantee:
23449
+ suggestions are ranked by relevance across the whole requested set, so a
23450
+ listed TLD may be absent from the results even when available names exist
23451
+ in it, and raising `limit` does not change that. To guarantee a TLD is represented,
23452
+ query it on its own.'
23438
23453
  examples:
23439
23454
  list:
23440
23455
  summary: A list of TLDs
@@ -23451,7 +23466,11 @@ paths:
23451
23466
  type: string
23452
23467
  type: array
23453
23468
  - type: 'null'
23454
- description: The TLDs to include in the search
23469
+ description: 'Restricts results to these TLDs. This is a filter, not a guarantee:
23470
+ suggestions are ranked by relevance across the whole requested set, so
23471
+ a listed TLD may be absent from the results even when available names
23472
+ exist in it, and raising `limit` does not change that. To guarantee a
23473
+ TLD is represented, query it on its own.'
23455
23474
  title: Tlds
23456
23475
  - description: The maximum number of domain suggestions to return
23457
23476
  in: query
@@ -33664,9 +33683,33 @@ tags:
33664
33683
  - description: ''
33665
33684
  name: domain_tld_specific
33666
33685
  x-displayName: TLD specific domain management
33667
- - description: 'Endpoints for searching domains.
33668
-
33669
- '
33686
+ - description: "Endpoints for searching domains.\n\n### Keyword queries vs. full domain\
33687
+ \ names\n\n`GET /v1/domain-search/suggest` behaves differently depending on the\
33688
+ \ shape of the `query` value:\n\n- **Keyword or phrase** (e.g. `bluewidgets`)\
33689
+ \ \u2014 every result is a name produced by our suggestion engine, which generates\
33690
+ \ candidates and ranks them by relevance. No particular name is guaranteed to\
33691
+ \ appear.\n- **Full domain name** (e.g. `bluewidgets.de`) \u2014 the queried domain\
33692
+ \ is always returned as the first result, and its availability is checked directly\
33693
+ \ against the registry rather than coming from the suggestion engine.\n\nUse a\
33694
+ \ full domain name whenever you need a definitive answer about one specific domain.\
33695
+ \ To check several specific domains at once, use `GET /v1/availability` instead.\n\
33696
+ \n### `tlds` restricts results, it does not guarantee them\n\nThe `tlds` parameter\
33697
+ \ is a filter: results are limited to the TLDs you list, but a TLD you list may\
33698
+ \ still be absent from the response. Suggestions are ranked by relevance across\
33699
+ \ the whole requested set, so a keyword whose strongest candidates are `.com`/`.net`/`.org`\
33700
+ \ names can return no `.de` results even though available `.de` names exist for\
33701
+ \ that keyword.\n\nThis is consistent for a given keyword rather than random \u2014\
33702
+ \ the same query returns the same TLD mix each time \u2014 and raising `limit`\
33703
+ \ does not change it.\n\nTo guarantee that a TLD is represented, query it on its\
33704
+ \ own:\n\n```\nGET /v1/domain-search/suggest?query=bluewidgets&tlds=de&limit=5\n\
33705
+ ```\n\nIssuing one request per TLD is the reliable way to build a per-TLD view\
33706
+ \ in a search interface.\n\n### Availability of suggestions\n\nThe `available`\
33707
+ \ flag on a generated suggestion is best-effort. Our suggestion engine's data\
33708
+ \ is not authoritative for every TLD, and it is less accurate for some ccTLDs,\
33709
+ \ so a suggestion can occasionally be shown as available when it is not.\n\nAvailability\
33710
+ \ is authoritative in two cases: when the query is a full domain name (the first\
33711
+ \ result), and for domains checked via `GET /v1/availability`. Always confirm\
33712
+ \ with one of those before presenting a domain as purchasable.\n"
33670
33713
  name: domain_search
33671
33714
  x-displayName: Domain search
33672
33715
  - description: "Endpoints for managing host objects (nameserver glue records).\n\n\
package/src/schema.d.ts CHANGED
@@ -1063,7 +1063,18 @@ export interface paths {
1063
1063
  };
1064
1064
  /**
1065
1065
  * Suggest domains
1066
- * @description Get a list of domain suggestions based on a search query
1066
+ * @description Get a list of domain suggestions based on a search query.
1067
+ *
1068
+ * Suggestions are generated and ranked by relevance rather than enumerated from a fixed list, so the
1069
+ * results depend on the shape of `query`:
1070
+ *
1071
+ * - **Keyword or phrase** (e.g. `bluewidgets`) — every result is a generated name, and its `available`
1072
+ * flag is best-effort.
1073
+ * - **Full domain name** (e.g. `bluewidgets.de`) — the queried domain is always returned as the first
1074
+ * result, with availability checked directly against the registry.
1075
+ *
1076
+ * Use a full domain name, or `GET /v1/availability`, whenever you need a definitive answer about a
1077
+ * specific domain.
1067
1078
  */
1068
1079
  get: operations["suggest_v1_domain_search_suggest_get"];
1069
1080
  put?: never;
@@ -19178,9 +19189,9 @@ export interface operations {
19178
19189
  suggest_v1_domain_search_suggest_get: {
19179
19190
  parameters: {
19180
19191
  query: {
19181
- /** @description The primary keyword or phrase for the domain search */
19192
+ /** @description The primary keyword or phrase for the domain search. A full domain name is always returned as the first result, with registry-checked availability. */
19182
19193
  query: string;
19183
- /** @description The TLDs to include in the search */
19194
+ /** @description Restricts results to these TLDs. This is a filter, not a guarantee: suggestions are ranked by relevance across the whole requested set, so a listed TLD may be absent from the results even when available names exist in it, and raising `limit` does not change that. To guarantee a TLD is represented, query it on its own. */
19184
19195
  tlds?: string[] | null;
19185
19196
  /** @description The maximum number of domain suggestions to return */
19186
19197
  limit?: number | null;