1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130 | <!doctype html>
<html lang="en" data-releases="../releases.json">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ts.git — ird-ts, TypeScript client for the ird API</title>
<style>
:root {
color-scheme: dark;
--paper: #12161c; --ink: #e8edf2; --ink-soft: #9aa7b3;
--line: #263241; --card: #182029; --code-bg: #1f2a36; --accent: #7fc4a8;
}
@media (prefers-color-scheme: light) {
:root {
color-scheme: light;
--paper: #f8f9fa; --ink: #232a30; --ink-soft: #61707d;
--line: #dde4ea; --card: #ffffff; --code-bg: #eef2f5; --accent: #35836a;
}
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: var(--paper); color: var(--ink);
font: 16.5px/1.65 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
"Helvetica Neue", Arial, sans-serif;
padding: 64px 22px 90px;
}
main { max-width: 660px; margin: 0 auto; }
h1 { font-size: 40px; font-weight: 600; letter-spacing: -.4px;
font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
.tag { margin: 14px 0 34px; font-size: 18px; color: var(--ink-soft); }
h2 { font-size: 20px; font-weight: 600; margin: 36px 0 10px; }
p { margin: 10px 0; }
a { color: var(--accent); }
pre {
background: var(--card); border: 1px solid var(--line); border-radius: 10px;
padding: 13px 16px; overflow-x: auto; margin: 14px 0;
font: 14px/1.5 ui-monospace, SFMono-Regular, Menlo, monospace;
}
code { font: 15px ui-monospace, SFMono-Regular, Menlo, monospace;
background: var(--code-bg); border-radius: 5px; padding: 1px 6px; }
pre code { background: none; padding: 0; }
ul { padding-left: 22px; } li { margin: 6px 0; }
footer { margin-top: 48px; padding-top: 20px; border-top: 1px solid var(--line);
font-size: 14px; color: var(--ink-soft); }
footer a { color: inherit; }
</style>
</head>
<body>
<main>
<h1>ts.git</h1>
<p class="tag"><strong>ird-ts</strong> — TypeScript client for the
<a href="https://api.ird.ro/openapi.json">ird public API</a>: .ro domains, DNS
(hosted zones, DNSSEC, bring-your-own-domain claims), VPS, tunnels, IPFS,
P2P apps, and async jobs. Every one of the API's 161 operations is a small
typed function; the types are generated from the OpenAPI spec. Zero runtime
dependencies, Node 18+, ESM and CommonJS.</p>
<h2>Use as a dependency</h2>
<p>No registry — add the git URL to <code>package.json</code>:</p>
<pre><code>{
"dependencies": {
"ird-ts": "git+https://ird.cod-sursa.ro/ts.git#semver:^<span data-rel="ts.version">0.2.0</span>"
}
}</code></pre>
<p>or pin an exact commit — the latest release is
<code><span data-rel="ts.tag">v0.2.0</span></code>, the newest commit
<code><span data-rel="ts.head">…</span></code> (the compiled <code>dist/</code>
is committed, so installing needs no build step):</p>
<pre><code>npm install "git+https://ird.cod-sursa.ro/ts.git#<span data-rel="ts.tag_sha"><sha></span>"</code></pre>
<p>The same coordinates are machine-readable in
<a href="../releases.json">releases.json</a>.</p>
<h2>Clone</h2>
<pre><code>git clone https://ird.cod-sursa.ro/ts.git</code></pre>
<p><a href="browse/">browse the source in your browser →</a></p>
<h2>Quickstart</h2>
<pre><code>import { createClient, domains } from 'ird-ts';
const client = createClient({ apiKey: process.env.IRD_API_KEY });
const { status } = await domains.check(client, 'example.ro');
// status: "registered"</code></pre>
<p>The full guide — authentication, tagged errors, pagination, async jobs,
the domain safety gate, tests — is in the repo's <code>README.md</code>.</p>
<h2>What's inside</h2>
<ul>
<li><code>src/</code> — one module per API area
(<code>domains</code>, <code>dns</code>, <code>vps</code>,
<code>tunnels</code>, <code>ipfs</code>, <code>p2p</code>,
<code>jobs</code>, …) over a small typed HTTP core</li>
<li><code>src/generated/api.ts</code> — request/response types generated
from <code>spec/openapi.json</code>, the spec the client is verified
against one-to-one by the test suite</li>
<li><code>dist/</code> — the committed ESM + CommonJS build with
declarations</li>
<li><code>test/</code> — coverage, transport, gate, flow and conformance
tests (<code>npm test</code>; live tests opt-in)</li>
</ul>
<h2>License</h2>
<p>MIT.</p>
<footer>
part of <a href="https://ird.cod-sursa.ro/">ird.cod-sursa.ro</a> —
public source, clonable straight from this domain.
</footer>
</main>
<script>
// Fill release coordinates from the site's releases.json (written by the
// assembler from the mirrors it publishes); the static text is the fallback.
(function () {
var els = document.querySelectorAll('[data-rel]');
if (!els.length || !window.fetch) return;
fetch(document.documentElement.getAttribute('data-releases') || 'releases.json')
.then(function (r) { return r.ok ? r.json() : null; })
.then(function (j) {
if (!j || !j.apps) return;
Array.prototype.forEach.call(els, function (el) {
var k = el.getAttribute('data-rel').split('.'), a = j.apps[k[0]];
var v = a && a[k[1]];
if (typeof v === 'string' && v) el.textContent = v;
});
})
.catch(function () {});
})();
</script>
</body>
</html>
|