api-swift / site / index.html
723 words
  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
131
132
133
134
135
136
137
138
139
140
141
142
143
<!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>api-swift.git — ird-api-swift, native Swift client for the whole 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>api-swift.git</h1>
  <p class="tag"><strong>ird-api-swift</strong> — native Swift client for the whole
  <a href="https://api.ird.ro/openapi.json">ird API</a> on iOS 16+ and macOS 13+.
  Every one of the API's 161 operations is a typed <code>async throws</code> method —
  domains, DNS, servers, IPFS, tunnels, p2p apps, credits, support, sharing,
  transfers, jobs and API keys — with models generated from the OpenAPI spec.
  One library product, <code>IrdAPI</code>; the p2p SDK lives in
  <a href="../swift/">swift.git</a>.</p>

  <h2>Use as a dependency</h2>
  <p>No registry — a Swift Package served straight from this domain:</p>
  <pre><code>// Package.swift
dependencies: [
    .package(url: "https://ird.cod-sursa.ro/api-swift.git", from: "<span data-rel="api-swift.version">0.1.0</span>"),
],
targets: [
    .target(name: "MyApp", dependencies: [.product(name: "IrdAPI", package: "api-swift")]),
]</code></pre>
  <p>The latest release is <code><span data-rel="api-swift.tag">v0.1.0</span></code>
  (<code><span data-rel="api-swift.tag_sha_short">8411686</span></code>). To pin that exact commit:</p>
  <pre><code>.package(url: "https://ird.cod-sursa.ro/api-swift.git", revision: "<span data-rel="api-swift.tag_sha">8411686ebd7bd0b39f1b9ec24a8e78c251e7ce8d</span>")</code></pre>
  <p>These coordinates are filled from <a href="../releases.json">releases.json</a>,
  which scripts and agents can read directly (<code>head</code>, <code>tag</code>,
  <code>tag_sha</code> per repo).</p>

  <h2>Xcode</h2>
  <p>File ▸ Add Package Dependencies…, paste
  <code>https://ird.cod-sursa.ro/api-swift.git</code>, choose “Up to Next Major
  Version” from 0.1.0, and add the <code>IrdAPI</code> product to your app
  target. The package has no dependencies.</p>

  <h2>Quickstart</h2>
  <pre><code>import IrdAPI

let client = IrdClient(apiKey: "ird_...")            // or IrdClient(credential: KeychainCredentialStore())

let balance = try await client.credits.balance()     // balance.total is a decimal String
let servers = try await client.vps.listInstances().instances

let check = try await IrdClient().domains.check(domain: "numele-meu.ro")
if check.status == .available {
    let queued = try await client.registrations.register(
        body: RegisterBody(domain: check.domain, years: 1, useOurDns: true))
    let action = try await client.registrations.waitForAction(id: queued.action.id)
}

let upload = try await client.ipfs.addFile(url: fileURL)          // grant → bytes → poll
let answer = try await client.jobs.run(.llmChat(messages: [.user("Salut!")]))</code></pre>
  <p>The full guide — device login and the Keychain credential store, the error
  table, the domain gate for agents, pagination and every async flow — is in the
  repo's <code>README.md</code>.</p>

  <h2>Clone</h2>
  <pre>git clone https://ird.cod-sursa.ro/api-swift.git</pre>
  <p><a href="browse/">browse the source in your browser →</a></p>

  <h2>What's inside</h2>
  <ul>
    <li><code>Sources/IrdAPI/Generated/</code> — the 161 operations and their models, emitted by <code>scripts/gen-api.py</code> from <code>spec/openapi.json</code></li>
    <li><code>Sources/IrdAPI/Core/</code> — client, request builder, decode table, errors, polling, pagination, <code>JSONValue</code></li>
    <li><code>Sources/IrdAPI/Credentials/</code> — API key or account session, in memory or in the Keychain</li>
    <li><code>Sources/IrdAPI/Gate/</code> — the client-side domain allow/deny gate for agents</li>
    <li><code>Sources/IrdAPI/Flows/</code> — jobs, uploads, device login, action polling, <code>listAll</code> companions</li>
    <li><code>Examples/IrdManager/</code> — a SwiftUI account manager for macOS</li>
    <li><code>Tests/</code> — offline suites, the generated inventory, env-gated live smoke and conformance sweeps</li>
  </ul>

  <h2>License</h2>
  <p>MIT.</p>

  <footer>Part of <a href="../">ird.cod-sursa.ro</a> — source published on IPFS,
  cloned over plain HTTP.</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>

static mirror of HEAD · about · clone: git clone https://ird.cod-sursa.ro/api-swift.git