aweshare 0.7.2 → 0.7.4
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.ai.md +1 -1
- package/README.md +41 -9
- package/apps/agent/dist/config.d.ts +1 -1
- package/apps/agent/dist/config.js +4 -0
- package/apps/agent/dist/config.js.map +1 -1
- package/apps/agent/dist/doctor.js +4 -2
- package/apps/agent/dist/doctor.js.map +1 -1
- package/apps/hub/dist/auth.js +0 -12
- package/apps/hub/dist/auth.js.map +1 -1
- package/apps/hub/dist/backups.d.ts +43 -0
- package/apps/hub/dist/backups.js +122 -0
- package/apps/hub/dist/backups.js.map +1 -0
- package/apps/hub/dist/cli.js +353 -121
- package/apps/hub/dist/cli.js.map +1 -1
- package/apps/hub/dist/config.d.ts +2 -0
- package/apps/hub/dist/config.js +1 -0
- package/apps/hub/dist/config.js.map +1 -1
- package/apps/hub/dist/consumer.d.ts +3 -0
- package/apps/hub/dist/consumer.js +190 -57
- package/apps/hub/dist/consumer.js.map +1 -1
- package/apps/hub/dist/db.d.ts +7 -10
- package/apps/hub/dist/db.js +20 -22
- package/apps/hub/dist/db.js.map +1 -1
- package/apps/hub/dist/http.d.ts +7 -1
- package/apps/hub/dist/http.js +6 -1
- package/apps/hub/dist/http.js.map +1 -1
- package/apps/hub/dist/invites.js +9 -2
- package/apps/hub/dist/invites.js.map +1 -1
- package/apps/hub/dist/relay.js +7 -0
- package/apps/hub/dist/relay.js.map +1 -1
- package/apps/hub/dist/sanitize.js +11 -0
- package/apps/hub/dist/sanitize.js.map +1 -1
- package/apps/hub/dist/server.d.ts +7 -3
- package/apps/hub/dist/server.js +23 -8
- package/apps/hub/dist/server.js.map +1 -1
- package/apps/hub/dist/table.d.ts +1 -3
- package/apps/hub/dist/table.js +2 -6
- package/apps/hub/dist/table.js.map +1 -1
- package/apps/hub/dist/tunnel.d.ts +0 -2
- package/apps/hub/dist/tunnel.js +2 -16
- package/apps/hub/dist/tunnel.js.map +1 -1
- package/package.json +1 -1
- package/packages/producer-core/dist/adapters.js +1 -1
- package/packages/producer-core/dist/adapters.js.map +1 -1
- package/packages/producer-core/dist/catalog.d.ts +7 -0
- package/packages/producer-core/dist/catalog.js +38 -1
- package/packages/producer-core/dist/catalog.js.map +1 -1
- package/packages/producer-core/dist/credentials.d.ts +5 -1
- package/packages/producer-core/dist/credentials.js +6 -2
- package/packages/producer-core/dist/credentials.js.map +1 -1
- package/packages/producer-core/dist/probe.js +1 -1
- package/packages/producer-core/dist/probe.js.map +1 -1
- package/packages/protocol/dist/models.js +6 -1
- package/packages/protocol/dist/models.js.map +1 -1
package/README.ai.md
CHANGED
|
@@ -241,7 +241,7 @@ Remind the consumer: prompts and responses transit the hub in plaintext — only
|
|
|
241
241
|
```
|
|
242
242
|
Consumers redeem codes themselves (`aweshare consumer join`); producers via `aweshare producer join`.
|
|
243
243
|
3. Administering a remote hub: run admin commands on the server (`ssh` + CLI, or `docker exec aweshare-hub aweshare hub ...`), or locally with `AWESHARE_HUB_URL=https://<hub-host>` plus the admin-token file in a local data dir — otherwise they fail with "no admin token" / connection refused.
|
|
244
|
-
4. Guardrails you can tune on request: per-consumer `aweshare hub limits NAME [--rps N] [--tpm N] [--max-total-tokens N] ...`, suspension `aweshare hub admin invite revoke N` / `restore N` (reversible, invite-keyed).
|
|
244
|
+
4. Guardrails you can tune on request: per-consumer `aweshare hub limits NAME [--rps N] [--tpm N] [--max-total-tokens N] ...`, per-alias failover queues `aweshare hub backups ALIAS --add OTHER/BACKUP` (file: `config.backups.toml`, hot-reloads), suspension `aweshare hub admin invite revoke N` / `restore N` (reversible, invite-keyed).
|
|
245
245
|
5. Security notes for the operator: keep :8787 off the public internet behind TLS; a redeemed consumer key can call **every** offering on the hub; tokens/codes stored plaintext-recoverable (`hub list invites --reveal` / `--token`) means a data-dir leak exposes identities — guard it.
|
|
246
246
|
|
|
247
247
|
---
|
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<a href="https://ko-fi.com/mugpeng"><img src="https://img.shields.io/badge/Ko--fi-Buy%20me%20a%20coffee-FF5E5B?style=flat-square&logo=ko-fi&logoColor=white" alt="Ko-fi"></a>
|
|
15
15
|
</p>
|
|
16
16
|
<p>
|
|
17
|
-
<a href="https://github.com/wehuman01/aweshare-source/releases"><img src="https://img.shields.io/badge/version-0.7.
|
|
17
|
+
<a href="https://github.com/wehuman01/aweshare-source/releases"><img src="https://img.shields.io/badge/version-0.7.4-7C3AED?style=flat-square" alt="Version"></a>
|
|
18
18
|
<a href="https://github.com/wehuman01/aweshare"><img src="https://img.shields.io/badge/node-%E2%89%A522-0EA5E9?style=flat-square" alt="Node"></a>
|
|
19
19
|
<a href="https://github.com/wehuman01/aweshare/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-proprietary-E34F26?style=flat-square" alt="License"></a>
|
|
20
20
|
<a href="https://www.npmjs.com/package/aweshare"><img src="https://img.shields.io/badge/npm-aweshare-7C3AED?style=flat-square" alt="npm package"></a>
|
|
@@ -272,6 +272,7 @@ id = "codex-account"
|
|
|
272
272
|
protocol = "responses"
|
|
273
273
|
baseUrl = "https://chatgpt.com/backend-api/codex"
|
|
274
274
|
login = "codex" # account auth instead of a key; exclusive with keyRef
|
|
275
|
+
# loginHome = "~/.config/aweswitch/accounts/codex/cxo-second" # another login's dir; default ~/.codex
|
|
275
276
|
# proxyUrl = "http://127.0.0.1:7890" # egress proxy for this backend (any backend may set one)
|
|
276
277
|
|
|
277
278
|
[[offerings]]
|
|
@@ -312,6 +313,7 @@ Key hygiene: use dedicated, least-privilege, revocable keys with budget alerts;
|
|
|
312
313
|
**Account-login backends** (`login = "codex"`) authenticate with the producer machine's own `codex login` instead of a key — the fixed official upstream is `https://chatgpt.com/backend-api/codex`, responses wire. Other protocols or base URLs are rejected so the account credential cannot be sent elsewhere. How it behaves:
|
|
313
314
|
|
|
314
315
|
- The login is read from `${CODEX_HOME|~/.codex}/auth.json`, stays in producer memory only, and is re-read whenever the file changes or a request comes back 401 — so a fresh `codex login` on the producer machine is picked up without a restart. No secrets.json entry exists for it.
|
|
316
|
+
- **Several logins side by side (`loginHome`)**: give each codex-login backend its own `loginHome` — the CODEX_HOME-style dir (absolute, leading `~` expanded) that holds `auth.json`. One producer can then share two accounts at once; each backend reads and re-reads its own file, and `producer doctor` reports each login separately. Each account's tokens still refresh only where that login lives (e.g. run the second account's CLI session occasionally); an idle expired login degrades only its own aliases.
|
|
315
317
|
- The producer injects the headers the Codex CLI itself sends, forces `store: false`, and removes `max_output_tokens` emitted by some Responses SDKs (the chatgpt backend rejects it).
|
|
316
318
|
- **Egress proxy (`proxyUrl`)**: when the upstream is only reachable through a proxy (e.g. a ladder such as Clash on `http://127.0.0.1:7890`), set `proxyUrl` on the backend — any backend, not just account logins (an `api.openai.com` key behind the same ladder qualifies). It covers that backend's http and https traffic only, hot-reloads with the config, and survives background/systemd starts, where shell environment variables silently vanish. Precedence: `proxyUrl` beats `HTTPS_PROXY`/`HTTP_PROXY`/`ALL_PROXY`; the env vars alone still apply to codex-login backends only, so a machine-wide proxy setting can never capture a local Ollama. `NO_PROXY` is always honored; SOCKS is rejected at config load. `producer doctor` TCP-probes a configured proxy and fails loudly when it is down, and proxy URLs are redacted in `producer config show` (they can carry credentials) and never logged.
|
|
317
319
|
- Consumers must speak `/v1/responses`: Codex CLI (default `wire_api`), opencode (via `@ai-sdk/openai`), Cline (OpenAI Native provider). Chat-completions tools and Claude Code cannot use these offerings.
|
|
@@ -342,6 +344,35 @@ curl -X PUT https://hub.example.com/admin/v1/consumers/alice/limits \
|
|
|
342
344
|
|
|
343
345
|
Honest limits: token-based caps count what upstreams report — Ollama streams report no usage, so they contribute 0. Both TPM and the lifetime budget are observed-usage thresholds, not hard reservations: one request can cross the threshold, and concurrent requests that start before earlier usage is recorded can overshoot it further. Once recorded usage has reached the threshold, new requests are rejected.
|
|
344
346
|
|
|
347
|
+
## Alias backups (hub-side failover)
|
|
348
|
+
|
|
349
|
+
An alias dies in ways no retry fixes: the producer drops offline, the alias burns its daily budget, its backend degrades, the operator blocks it. Without help, every consumer pointed at that alias breaks until someone hand-edits a model name. **Alias backups** fix that on the hub side: the operator gives each alias an ordered list of backup aliases, and when the alias cannot serve, the hub retries the queue in order before answering with the alias's own error. The consumer configures one model and keeps it — a backup that serves stamps the response with `x-aweshare-fallback: <alias actually served>`, so the swap is visible on the wire, in the usage log (each attempt is its own row, under the alias that served it) and in the model-honesty audit (keyed to the alias that answered).
|
|
350
|
+
|
|
351
|
+
Two ways to manage the queues — a file and a command over the same data:
|
|
352
|
+
|
|
353
|
+
```toml
|
|
354
|
+
# ~/.aweshare-hub/config.backups.toml — key = alias, value = ordered backups
|
|
355
|
+
"peng/qwen3-coder" = ["alice/qwen3-coder", "hub/glm-4.6"]
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
aweshare hub backups # list every queue
|
|
360
|
+
aweshare hub backups peng/qwen3-coder # show one
|
|
361
|
+
aweshare hub backups peng/qwen3-coder --add alice/qwen3-coder,hub/glm-4.6
|
|
362
|
+
aweshare hub backups peng/qwen3-coder --add hub/glm-4.6 --first # prepend
|
|
363
|
+
aweshare hub backups peng/qwen3-coder --remove hub/glm-4.6
|
|
364
|
+
aweshare hub backups peng/qwen3-coder --clear
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
Semantics, deliberately close to a queue of literal strings:
|
|
368
|
+
|
|
369
|
+
- **The queue is exactly what was written** — no implicit hops, a backup's own queue is never expanded, each entry is tried at most once per request. Entries must be distinct, may not include the alias itself, and may name aliases that don't exist yet (producers come and go); an entry with no offering on the request's wire protocol is simply skipped.
|
|
370
|
+
- **Failover triggers on alias-side faults only**: producer offline, degraded backend, blocked alias, closed share window, spent daily budget, per-alias concurrency caps — and pre-head relay failures (the producer accepted the dispatch but never delivered a response head: tunnel closed, backend timeout). Once the response head reached the consumer the stream is committed — no mid-stream swaps. Consumer-side denials (rate limits, probe budget, the consumer's own token budget) never fail over: swapping aliases cannot rescue the consumer's own limits, and `consumer list --ping` must tell the truth about the alias it names, so probes never fail over either.
|
|
371
|
+
- **Each attempt runs full admission again** — the backup's per-alias caps and daily budget apply as they would for a direct request, and the backup's usage lands on its own account, not the failed alias's.
|
|
372
|
+
- When every entry fails, the response is the **primary's original error** — the one the consumer asked about is the one worth explaining.
|
|
373
|
+
|
|
374
|
+
The file lives in the hub data dir next to `config.toml` (`~/.aweshare-hub/config.backups.toml`; Docker: `/data/config.backups.toml`) and hot-reloads like every other hub config — edits apply within ~2s, a broken file is logged while the previous queues keep serving, an invalid file fails `hub serve` at startup. `hub init` scaffolds it (commented, empty). Like `config.toml` itself it is a this-machine file, not part of the admin REST API: on a remote hub, run the command there (ssh / `docker exec`) or edit the file.
|
|
375
|
+
|
|
345
376
|
## Endpoints and errors
|
|
346
377
|
|
|
347
378
|
| Endpoint | Purpose |
|
|
@@ -368,18 +399,19 @@ Both sides at a glance — details in the sections above.
|
|
|
368
399
|
| `aweshare hub init` | create data dir + admin token (printed once) |
|
|
369
400
|
| `aweshare hub serve [--host H] [--port N]` | run the hub — the only runner; a `config.produce.toml` in the data dir mounts automatically: its `[[backends]]`/`[[offerings]]` sections become `hub/…` offerings served in-process (keys in the data dir's secrets.json; edits hot-reload) |
|
|
370
401
|
| `aweshare hub produce init` | scaffold `config.produce.toml` + empty `secrets.json` in the data dir (kept if they exist); also initializes the data dir, db, pepper and admin token |
|
|
371
|
-
| `aweshare hub admin invite mint [--role producer\|consumer] [--name NAME] [--count N] [--expires-in D\|none]` | mint one-time invite codes (`asi_…`, printed once
|
|
372
|
-
| `aweshare hub admin invite revoke N
|
|
373
|
-
| `aweshare hub admin invite extend N --expires-in D\|none` |
|
|
374
|
-
| `aweshare hub admin offering revoke ALIAS
|
|
402
|
+
| `aweshare hub admin invite mint [--role producer\|consumer] [--name NAME] [--count N] [--expires-in D\|none]` | mint one-time invite codes (`asi_…`, printed once; re-view with `list invites --reveal`); `--expires-in` (default 7d, `none` = no deadline) bounds only how long the code stays redeemable — the token a redeem mints never expires, revoke/restore is its lifecycle handle; producer codes: bound (`--name`) or unbound (name + email at redeem, `--count` batches); consumer codes: always bound to one name |
|
|
403
|
+
| `aweshare hub admin invite revoke N…` · `aweshare hub admin invite restore N…` | kill invite(s) / undo — a redeemed code suspends the producer it minted, restore revives both; several ids per call (spaces or commas), one failure does not stop the rest |
|
|
404
|
+
| `aweshare hub admin invite extend N… --expires-in D\|none` | reset a pending invite's redemption window from now (`none` = no deadline); a redeemed invite answers `redeemed: true` — its token never expires, there is nothing to extend |
|
|
405
|
+
| `aweshare hub admin offering revoke ALIAS…` · `aweshare hub admin offering restore ALIAS…` | the per-alias scalpel between doing nothing and revoking a whole producer: revoke offerings (every protocol row of each alias) — new requests get 503 `OFFERING_BLOCKED`, `list offerings` shows `blocked`, the producer's other offerings keep serving; several aliases per call. Manual revokes survive re-registers; auto revokes (model mismatch, see `autoBlockModelMismatch`) clear once the producer re-declares a different `upstreamModel` |
|
|
375
406
|
| `aweshare hub list [invites\|producers\|consumers\|offerings\|usage]` | read hub state, one table per noun (default: invites) |
|
|
376
|
-
| `aweshare hub list invites [--reveal] [--token] [--json]` | the invite ledger: every code, the identity it minted and its lifecycle (pending/used/suspended/revoked/expired
|
|
407
|
+
| `aweshare hub list invites [--reveal] [--token] [--json]` | the invite ledger: every code, the identity it minted and its lifecycle (pending/used/suspended/revoked/expired — `expired` marks a pending code whose redemption window closed; redeemed identities never expire); `--reveal` re-shows the codes, `--token` the minted tokens with last seen |
|
|
377
408
|
| `aweshare hub list producers [--json]` · `aweshare hub list consumers [--json]` | the rosters: name, status (active/suspended/built-in), online state (producers), last seen, created |
|
|
378
409
|
| `aweshare hub list offerings [--json]` | the catalog: offerings counted per deduplicated alias (several protocols → one verdict, the worst), one row per alias — the same columns as `consumer list` and `producer list`, worst status first — with observed model, caps, live occupancy (`IN USE n/max`) and today's remaining daily tokens |
|
|
379
410
|
| `aweshare hub status` | the live dashboard: capacity (producer slots, consumers, offering counts), a last-5m requests/ok-rate/errors line from the usage summary (hub-admission 429s are not metered), admission-rejection pressure (top throttled alias/consumer) and the effective consumer defaults |
|
|
380
|
-
| `aweshare hub limits NAME [--rps N] [--burst N] [--max-concurrent N] [--tpm N] [--max-total-tokens N] [--probe-budget N] [--clear] [--json]` | show, merge or clear
|
|
411
|
+
| `aweshare hub limits NAME… [--rps N] [--burst N] [--max-concurrent N] [--tpm N] [--max-total-tokens N] [--probe-budget N] [--clear] [--json]` | show, merge or clear consumers' limit overrides, one consumer or several per call (unset keys keep the hub-wide defaults) |
|
|
412
|
+
| `aweshare hub backups [ALIAS] [--add A[,A…]] [--first] [--remove A[,A…]] [--clear] [--json]` | per-alias failover queues in the data dir's `config.backups.toml` (hot-reloads; this machine's file, like `config.toml` itself): bare `ALIAS` shows one queue, no `ALIAS` lists all; `--add` appends (comma-separate several), `--first` prepends, `--remove` deletes entries, `--clear` drops the queue — see Alias backups |
|
|
381
413
|
| `aweshare hub list usage [--details] [--consumer NAME] [--producer NAME] [--alias ns/model] [--group-by consumer-alias\|consumer\|alias] [--since 7d\|all] [--sort time\|consumer\|producer\|model\|tokens\|requests] [--limit N] [--json]` | who used how much (default): aggregate per consumer × model, most recently used first — requests, errors, rate, best-effort token totals, unknown-token count, mean duration; window defaults to 7d and is printed with the table; `--sort` re-orders (consumer/producer/model alphabetical, tokens/requests busiest first) · `--details`: per-request log, newest first, zero content stored, each row naming its consumer |
|
|
382
|
-
| `aweshare hub produce refresh NAME [--add N] [--clear] [--json]` · `aweshare hub produce refresh --all [--json]` | reopen
|
|
414
|
+
| `aweshare hub produce refresh NAME… [--add N] [--clear] [--json]` · `aweshare hub produce refresh --all [--json]` | reopen hub-hosted models' daily token budgets mid-day (`hub/` prefix optional; several names per call): bare call re-anchors today's window at this moment, `--add N` raises today's cap by N tokens until Beijing midnight, `--clear` drops both markers. Hub-hosted (`hub/…`) offerings only — a producer's models are its own to refresh. `--all` bare-refreshes every `hub/…` offering with a daily cap in one run (unlimited ones are reported and skipped; one failure does not stop the rest) |
|
|
383
415
|
|
|
384
416
|
Token issuance runs through invites (both roles). `admin`, `limits` and `list usage` are thin wrappers over the admin REST API (`/admin/v1/*`, see Endpoints and errors) — curl works too.
|
|
385
417
|
|
|
@@ -418,7 +450,7 @@ No always-on box to share from, or looking for models others share? The project'
|
|
|
418
450
|
|
|
419
451
|
The hub reads `config.toml` from its data dir (`~/.aweshare-hub/config.toml`; Docker: `/data/config.toml`). `aweshare hub init` writes the template with every key commented out — uncomment to override a default. Keys use the same names as below, camelCase (`consumerRps`, `headTimeoutMs`, …). Precedence: `serve` flags (`--host`/`--port`) > env vars > config.toml > defaults. A broken file (invalid TOML, unknown key, non-positive value) fails fast at startup with the key named; `AWESHARE_HUB_DATA_DIR` itself stays env-only (it locates the file).
|
|
420
452
|
|
|
421
|
-
**Hot reload:** every tunable in the table except host/port applies live on `SIGHUP` (`kill -HUP <pid>`; Docker: `docker kill -s HUP aweshare-hub`) — the new file is validated first, and a broken edit is logged while the previous values keep serving. Env vars are fixed at process start, so keys pinned by `AWESHARE_*` ignore the reloaded file (same precedence as startup); host/port need a restart. Producer-side offerings and caps reload via `aweshare producer reload`.
|
|
453
|
+
**Hot reload:** every tunable in the table except host/port applies live on `SIGHUP` (`kill -HUP <pid>`; Docker: `docker kill -s HUP aweshare-hub`) — the new file is validated first, and a broken edit is logged while the previous values keep serving. Env vars are fixed at process start, so keys pinned by `AWESHARE_*` ignore the reloaded file (same precedence as startup); host/port need a restart. Producer-side offerings and caps reload via `aweshare producer reload`. `config.backups.toml` (per-alias failover queues, see Alias backups) rides the same watcher: edits hot-reload within ~2s, a broken edit keeps the previous queues, an invalid file fails `hub serve` at startup.
|
|
422
454
|
|
|
423
455
|
**Hub-hosted models (`hub produce`):** `config.produce.toml` carries `[[backends]]` and `[[offerings]]` sections (producer format; alias namespace `hub/…` — bare names are auto-prefixed) with upstream keys in `secrets.json` next to it (chmod 600). `config.toml` remains exclusively for Hub runtime settings. Those offerings appear in the catalog under producer `hub` and are served by the hub process directly — no tunnel, and they never count against `AWESHARE_MAX_PRODUCERS`. Caps (`maxConcurrencyPerUser`, `maxConcurrentUsers`, `dailyTokens`), usage metering and consumer limits apply exactly as for remote producers. The built-in `hub` producer is not an identity (no token, no invite, cannot be revoked); it appears in the `hub list producers` roster — status `built-in` — only while it carries offerings. An `enabled = true|false` key at the top of the file is the catalog's master switch: `false` unloads every `hub/…` model within the hot-reload window (the definitions stay; flip back to bring them all back) — the produce-side counterpart of revoking a remote producer's invite. A non-boolean value fails loudly instead of silently serving or unloading. Catalog and key edits hot-reload like the tunables; a broken catalog keeps the previous one and is logged.
|
|
424
456
|
|
|
@@ -32,5 +32,5 @@ export declare function escapeTomlString(s: string): string;
|
|
|
32
32
|
export declare function applyJoinToConfig(content: string, hubUrl: string, token: string): string | null;
|
|
33
33
|
/** tmp+rename atomic write with owner-only permissions. */
|
|
34
34
|
export declare function writeFileAtomic(path: string, content: string, mode?: number): void;
|
|
35
|
-
export declare const CONFIG_TEMPLATE = "# aweshare producer configuration (~/.aweshare/config.toml)\n# Secrets live in ~/.aweshare/secrets.json and never leave this machine.\n\nhubUrl = \"http://127.0.0.1:8787\"\ntoken = \"asp_PASTE_PRODUCER_TOKEN\"\n\n# Upstream 5xx handling: 2 consecutive failures mark the backend 'unstable'\n# (listed with a warning, dispatch continues \u2014 that part is always on).\n# Opt in below to also degrade (stop dispatch, 503, recovery probes) after 3:\n# degradeOn5xx = true\n\n# Backends hold the upstream API. baseUrl follows the SDK convention:\n# openai-style (OpenAI/Ollama/vLLM/LM Studio) includes /v1, e.g. http://127.0.0.1:11434/v1\n# anthropic-style excludes /v1, e.g. https://api.anthropic.com\n# responses-style includes the version path, e.g. https://open.bigmodel.cn/api/v1\n[[backends]]\nid = \"ollama\"\nprotocol = \"openai\"\nbaseUrl = \"http://127.0.0.1:11434/v1\"\n# keyRef = \"ollama-key\" # optional; keys live in secrets.json\n\n[[backends]]\nid = \"openai\"\nprotocol = \"openai\"\nbaseUrl = \"https://api.openai.com/v1\"\nkeyRef = \"openai-key\"\n\n# Share your local Codex CLI login (chatgpt subscription) instead of a key.\n# The login is read from ~/.codex/auth.json (CODEX_HOME honored), never enters\n# the hub, and is sent only to the fixed official upstream below. /v1/responses only.\n# [[backends]]\n# id = \"codex-account\"\n# protocol = \"responses\"\n# baseUrl = \"https://chatgpt.com/backend-api/codex\"\n# login = \"codex\"\n# Needs a ladder/egress proxy (e.g. Clash) to reach the upstream? Set proxyUrl\n# on ANY backend \u2014 it hot-reloads with the config and survives background\n# starts (environment variables do not). Precedence: proxyUrl beats\n# HTTPS_PROXY/HTTP_PROXY/ALL_PROXY env (env applies to codex-login backends\n# only); NO_PROXY is always honored. SOCKS is not supported.\n# proxyUrl = \"http://127.0.0.1:7890\"\n\n# Offerings map a public alias to a backend model \u2014 exactly one\n# upstream model per offering; consumers call the alias and can never pick another model.\n# The alias may be a bare name (auto-prefixed with your producer name; consumers\n# dial PRODUCER/name) or an explicit namespace/name where namespace is your producer name.\n# Use backends = [\"a\", \"b\"] to serve one alias over several protocols at once.\n[[offerings]]\nalias = \"YOUR_NAME/qwen2.5.7b\"\nbackend = \"ollama\"\nupstreamModel = \"qwen2.5:7b\" # must match 'ollama list' exactly, including the tag\nmaxConcurrencyPerUser = 1 # concurrent requests PER CONSUMER on this alias\n# maxConcurrentUsers = 3 # distinct concurrent consumers on this alias (hub default 3)\n# dailyTokens = 1000000 # shared tokens per UTC day (hub default 1M; 0 = unlimited)\n# Share-time scheduling (optional; any of the four keys turns it on). Windows\n# are wall-clock HH:MM-HH:MM in shareTimezone (default: this machine's display\n# zone, frozen at parse time); a start later than its end crosses midnight and\n# belongs to the start day. shareDays is one of everyday (default), weekdays,\n# weekend, today, tomorrow \u2014 the last two freeze into concrete dates when the\n# config is read \u2014 or a list like [\"2026-09-08\", \"2026-09-09\"]. Outside the\n# schedule the hub answers 503 SHARE_WINDOW_CLOSED; edits hot-reload.\n# shareWindows = [\"00:00-06:00\"] # only share in these windows\n# blockWindows = [\"14:00-18:00\"] # never share in these (mutually exclusive)\n# shareDays = \"weekdays\"\n# shareTimezone = \"Asia/Shanghai\"\n\n[[offerings]]\nalias = \"YOUR_NAME/gpt-4o\"\nbackend = \"openai\"\nupstreamModel = \"gpt-4o-2024-11-20\"\nmaxConcurrencyPerUser = 4\n";
|
|
35
|
+
export declare const CONFIG_TEMPLATE = "# aweshare producer configuration (~/.aweshare/config.toml)\n# Secrets live in ~/.aweshare/secrets.json and never leave this machine.\n\nhubUrl = \"http://127.0.0.1:8787\"\ntoken = \"asp_PASTE_PRODUCER_TOKEN\"\n\n# Upstream 5xx handling: 2 consecutive failures mark the backend 'unstable'\n# (listed with a warning, dispatch continues \u2014 that part is always on).\n# Opt in below to also degrade (stop dispatch, 503, recovery probes) after 3:\n# degradeOn5xx = true\n\n# Backends hold the upstream API. baseUrl follows the SDK convention:\n# openai-style (OpenAI/Ollama/vLLM/LM Studio) includes /v1, e.g. http://127.0.0.1:11434/v1\n# anthropic-style excludes /v1, e.g. https://api.anthropic.com\n# responses-style includes the version path, e.g. https://open.bigmodel.cn/api/v1\n[[backends]]\nid = \"ollama\"\nprotocol = \"openai\"\nbaseUrl = \"http://127.0.0.1:11434/v1\"\n# keyRef = \"ollama-key\" # optional; keys live in secrets.json\n\n[[backends]]\nid = \"openai\"\nprotocol = \"openai\"\nbaseUrl = \"https://api.openai.com/v1\"\nkeyRef = \"openai-key\"\n\n# Share your local Codex CLI login (chatgpt subscription) instead of a key.\n# The login is read from ~/.codex/auth.json (CODEX_HOME honored), never enters\n# the hub, and is sent only to the fixed official upstream below. /v1/responses only.\n# [[backends]]\n# id = \"codex-account\"\n# protocol = \"responses\"\n# baseUrl = \"https://chatgpt.com/backend-api/codex\"\n# login = \"codex\"\n# Several codex logins side by side: give each backend its own loginHome \u2014\n# the CODEX_HOME-style dir that holds auth.json (absolute; leading ~ expanded;\n# default CODEX_HOME / ~/.codex, the machine's own login).\n# loginHome = \"~/.config/aweswitch/accounts/codex/cxo-second\"\n# Needs a ladder/egress proxy (e.g. Clash) to reach the upstream? Set proxyUrl\n# on ANY backend \u2014 it hot-reloads with the config and survives background\n# starts (environment variables do not). Precedence: proxyUrl beats\n# HTTPS_PROXY/HTTP_PROXY/ALL_PROXY env (env applies to codex-login backends\n# only); NO_PROXY is always honored. SOCKS is not supported.\n# proxyUrl = \"http://127.0.0.1:7890\"\n\n# Offerings map a public alias to a backend model \u2014 exactly one\n# upstream model per offering; consumers call the alias and can never pick another model.\n# The alias may be a bare name (auto-prefixed with your producer name; consumers\n# dial PRODUCER/name) or an explicit namespace/name where namespace is your producer name.\n# Use backends = [\"a\", \"b\"] to serve one alias over several protocols at once.\n[[offerings]]\nalias = \"YOUR_NAME/qwen2.5.7b\"\nbackend = \"ollama\"\nupstreamModel = \"qwen2.5:7b\" # must match 'ollama list' exactly, including the tag\nmaxConcurrencyPerUser = 1 # concurrent requests PER CONSUMER on this alias\n# maxConcurrentUsers = 3 # distinct concurrent consumers on this alias (hub default 3)\n# dailyTokens = 1000000 # shared tokens per UTC day (hub default 1M; 0 = unlimited)\n# Share-time scheduling (optional; any of the four keys turns it on). Windows\n# are wall-clock HH:MM-HH:MM in shareTimezone (default: this machine's display\n# zone, frozen at parse time); a start later than its end crosses midnight and\n# belongs to the start day. shareDays is one of everyday (default), weekdays,\n# weekend, today, tomorrow \u2014 the last two freeze into concrete dates when the\n# config is read \u2014 or a list like [\"2026-09-08\", \"2026-09-09\"]. Outside the\n# schedule the hub answers 503 SHARE_WINDOW_CLOSED; edits hot-reload.\n# shareWindows = [\"00:00-06:00\"] # only share in these windows\n# blockWindows = [\"14:00-18:00\"] # never share in these (mutually exclusive)\n# shareDays = \"weekdays\"\n# shareTimezone = \"Asia/Shanghai\"\n\n[[offerings]]\nalias = \"YOUR_NAME/gpt-4o\"\nbackend = \"openai\"\nupstreamModel = \"gpt-4o-2024-11-20\"\nmaxConcurrencyPerUser = 4\n";
|
|
36
36
|
export declare const SECRETS_TEMPLATE = "{\n \"openai-key\": \"sk-PASTE_YOUR_KEY\"\n}\n";
|
|
@@ -117,6 +117,10 @@ keyRef = "openai-key"
|
|
|
117
117
|
# protocol = "responses"
|
|
118
118
|
# baseUrl = "https://chatgpt.com/backend-api/codex"
|
|
119
119
|
# login = "codex"
|
|
120
|
+
# Several codex logins side by side: give each backend its own loginHome —
|
|
121
|
+
# the CODEX_HOME-style dir that holds auth.json (absolute; leading ~ expanded;
|
|
122
|
+
# default CODEX_HOME / ~/.codex, the machine's own login).
|
|
123
|
+
# loginHome = "~/.config/aweswitch/accounts/codex/cxo-second"
|
|
120
124
|
# Needs a ladder/egress proxy (e.g. Clash) to reach the upstream? Set proxyUrl
|
|
121
125
|
# on ANY backend — it hot-reloads with the config and survives background
|
|
122
126
|
# starts (environment variables do not). Precedence: proxyUrl beats
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACxF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAsC,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACzF,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,WAAW,CAAA;AAgB9C,MAAM,UAAU,QAAQ,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC3D,OAAO,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAA;AAC/D,CAAC;AAED,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGlB;IAFlB,YACE,OAAe,EACC,QAAkB;QAElC,KAAK,CAAC,OAAO,CAAC,CAAA;QAFE,aAAQ,GAAR,QAAQ,CAAU;IAGpC,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IAIzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IAC7C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,WAAW,CAAC,gBAAgB,UAAU,uCAAuC,EAAE,EAAE,CAAC,CAAA;IAC9F,CAAC;IACD,IAAI,GAA4B,CAAA;IAChC,IAAI,CAAC;QACH,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAA4B,CAAA;IAC9E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,WAAW,CACnB,kCAAkC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,EAC5E,EAAE,CACH,CAAA;IACH,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC;QACrC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAA4B;QAC3E,CAAC,CAAC,EAAE,CAAA;IAEN,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/D,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;IAChF,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5D,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IAExF,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACzE,QAAQ,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAA;IAEjC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,WAAW,CAAC,kCAAkC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IAC9F,CAAC;IACD,OAAO;QACL,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE;QACjE,OAAO;KACR,CAAA;AACH,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,WAA+B;IAC9E,oEAAoE;IACpE,yEAAyE;IACzE,iDAAiD;IACjD,IAAI,GAAG,GAAG,UAAU,CAAC,OAAO,CAC1B,iFAAiF,EACjF,eAAe,CAChB,CAAA;IACD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACvD,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAC1C,CAAA;QACD,GAAG,IAAI,qBAAqB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;IACjE,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,gBAAgB,CAAC,CAAS;IACxC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,MAAc,EAAE,KAAa;IAC9E,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClF,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,OAAO;SACX,OAAO,CAAC,sBAAsB,EAAE,aAAa,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;SACzE,OAAO,CAAC,qBAAqB,EAAE,YAAY,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC3E,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,OAAe,EAAE,IAAI,GAAG,KAAK;IACzE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,MAAM,GAAG,GAAG,GAAG,IAAI,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAA;IACxC,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IACrC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACvB,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2E9B,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;CAG/B,CAAA"}
|
|
@@ -157,17 +157,19 @@ async function checkBackend(backend, offerings, apiKey) {
|
|
|
157
157
|
}
|
|
158
158
|
if (backend.login !== undefined) {
|
|
159
159
|
try {
|
|
160
|
-
readCodexCredentials();
|
|
160
|
+
readCodexCredentials(undefined, backend.loginHome);
|
|
161
161
|
// egress visibility only when a proxy is actually in effect — without
|
|
162
162
|
// one the check output stays exactly as it was
|
|
163
163
|
const egress = backendProxyOptions(backend);
|
|
164
164
|
const via = egress
|
|
165
165
|
? `; egress via ${egress.source === 'config' ? 'config proxyUrl' : egress.source}`
|
|
166
166
|
: '';
|
|
167
|
+
// with several codex logins side by side, name which one this is
|
|
168
|
+
const at = backend.loginHome !== undefined ? ` at ${backend.loginHome}` : '';
|
|
167
169
|
checks.push({
|
|
168
170
|
name: `${label} login`,
|
|
169
171
|
ok: true,
|
|
170
|
-
detail:
|
|
172
|
+
detail: `codex login present and readable${at} — sharing an account login exposes the whole subscription (higher ToS risk than an API key); the producer bears it` +
|
|
171
173
|
via,
|
|
172
174
|
});
|
|
173
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
package/apps/hub/dist/auth.js
CHANGED
|
@@ -17,8 +17,6 @@ export function requireProducer(req, auth) {
|
|
|
17
17
|
if (row.revoked_at) {
|
|
18
18
|
throw new HttpError(401, 'TOKEN_REVOKED', 'producer token was suspended by the operator — ask them to restore it (aweshare hub admin invite restore N)');
|
|
19
19
|
}
|
|
20
|
-
if (isExpired(row.expires_at))
|
|
21
|
-
throw expiredError('producer token');
|
|
22
20
|
return { row, token };
|
|
23
21
|
}
|
|
24
22
|
export function requireConsumer(req, auth) {
|
|
@@ -31,16 +29,6 @@ export function requireConsumer(req, auth) {
|
|
|
31
29
|
if (row.revoked_at) {
|
|
32
30
|
throw new HttpError(401, 'TOKEN_REVOKED', 'consumer key was suspended by the operator — ask them to restore it (admin API)');
|
|
33
31
|
}
|
|
34
|
-
if (isExpired(row.expires_at))
|
|
35
|
-
throw expiredError('consumer key');
|
|
36
32
|
return { row, token };
|
|
37
33
|
}
|
|
38
|
-
/** Identity expiry is copied from the minting invite at redeem (v12+); NULL
|
|
39
|
-
* never expires. Compared as ISO strings, like every other timestamp gate. */
|
|
40
|
-
function isExpired(expiresAt) {
|
|
41
|
-
return expiresAt !== null && expiresAt <= new Date().toISOString();
|
|
42
|
-
}
|
|
43
|
-
function expiredError(what) {
|
|
44
|
-
return new HttpError(401, 'TOKEN_EXPIRED', `${what} has expired — the invite that minted it reached its expiry; ask the operator for a new one`);
|
|
45
|
-
}
|
|
46
34
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,kBAAkB,EAAE,kBAAkB,EAAoB,MAAM,SAAS,CAAA;AACpG,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAQlD,MAAM,UAAU,YAAY,CAAC,GAAoB,EAAE,IAAiB;IAClE,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,sBAAsB,CAAC,CAAA;IACjE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,GAAoB,EACpB,IAAiB;IAEjB,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,yBAAyB,CAAC,CAAA;IAC9E,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IACtE,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,wBAAwB,CAAC,CAAA;IAC3E,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,MAAM,IAAI,SAAS,CACjB,GAAG,EACH,eAAe,EACf,6GAA6G,CAC9G,CAAA;IACH,CAAC;IACD,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,kBAAkB,EAAE,kBAAkB,EAAoB,MAAM,SAAS,CAAA;AACpG,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAQlD,MAAM,UAAU,YAAY,CAAC,GAAoB,EAAE,IAAiB;IAClE,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,sBAAsB,CAAC,CAAA;IACjE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,GAAoB,EACpB,IAAiB;IAEjB,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,yBAAyB,CAAC,CAAA;IAC9E,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IACtE,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,wBAAwB,CAAC,CAAA;IAC3E,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,MAAM,IAAI,SAAS,CACjB,GAAG,EACH,eAAe,EACf,6GAA6G,CAC9G,CAAA;IACH,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,GAAoB,EACpB,IAAiB;IAEjB,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,uBAAuB,CAAC,CAAA;IAC5E,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IACtE,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,sBAAsB,CAAC,CAAA;IACzE,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,MAAM,IAAI,SAAS,CACjB,GAAG,EACH,eAAe,EACf,iFAAiF,CAClF,CAAA;IACH,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;AACvB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-alias failover queues (config.backups.toml): the operator's ordered
|
|
3
|
+
* "try next" list for each alias. When an alias cannot serve — offline
|
|
4
|
+
* producer, spent daily budget, degraded backend, blocked, closed share
|
|
5
|
+
* window, busy — the hub retries the queue in order before giving up.
|
|
6
|
+
*
|
|
7
|
+
* The queue is exactly what was written: no implicit hops, a backup's own
|
|
8
|
+
* queue is never expanded, each entry is tried at most once per request.
|
|
9
|
+
* Entries may name aliases that do not (yet) exist — producers register and
|
|
10
|
+
* leave dynamically — so unresolvable entries are skipped per request, not
|
|
11
|
+
* rejected at load time.
|
|
12
|
+
*/
|
|
13
|
+
export type BackupMap = ReadonlyMap<string, readonly string[]>;
|
|
14
|
+
/** Parse and validate the file's text: alias -> non-empty ordered list of
|
|
15
|
+
* distinct alias strings, none of them the key itself. Throws naming every
|
|
16
|
+
* problem, so the reload path can keep the previous map and the CLI can fail
|
|
17
|
+
* loudly. */
|
|
18
|
+
export declare function parseBackups(raw: string): Map<string, string[]>;
|
|
19
|
+
/** Serialize queues back to the file's text: header first, then one
|
|
20
|
+
* `alias = [backups]` line per key in map order. */
|
|
21
|
+
export declare function serializeBackups(queues: BackupMap): string;
|
|
22
|
+
/** Read and parse the file; a missing file means no backups are configured.
|
|
23
|
+
* Throws on an invalid one (the caller decides: startup fails fast, reload
|
|
24
|
+
* keeps the previous values). */
|
|
25
|
+
export declare function readBackupsFile(backupsFile: string | undefined): Map<string, string[]>;
|
|
26
|
+
/** The live per-alias queues: loaded once at startup, reloaded on SIGHUP and
|
|
27
|
+
* on the config watcher's stat-poll — same cadence and keep-previous-on-error
|
|
28
|
+
* rules as config.toml. */
|
|
29
|
+
export declare class Backups {
|
|
30
|
+
private readonly backupsFile;
|
|
31
|
+
private queues;
|
|
32
|
+
constructor(backupsFile: string | undefined);
|
|
33
|
+
/** Re-read the file; throws on an invalid one so the caller (the config
|
|
34
|
+
* reloader) keeps the previous values. A file deleted at runtime empties
|
|
35
|
+
* the queues — the file is the single source of truth. */
|
|
36
|
+
reload(): void;
|
|
37
|
+
/** Ordered queue for one alias; empty when none is configured. */
|
|
38
|
+
queueFor(alias: string): readonly string[];
|
|
39
|
+
/** Every configured queue, file order. */
|
|
40
|
+
all(): BackupMap;
|
|
41
|
+
}
|
|
42
|
+
/** CLI write path: replace the file's contents wholesale with `queues`. */
|
|
43
|
+
export declare function writeBackupsFile(backupsFile: string, queues: BackupMap): void;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { isValidAlias } from '../../../packages/protocol/dist/index.js';
|
|
3
|
+
import { parse as parseToml, stringify as stringifyToml } from 'smol-toml';
|
|
4
|
+
const EMPTY = [];
|
|
5
|
+
/** File header every rewrite of config.backups.toml carries; the CLI owns
|
|
6
|
+
* this file's shape, so regenerating it wholesale loses nothing. */
|
|
7
|
+
const FILE_HEADER = `# aweshare hub per-alias failover queues (config.backups.toml).
|
|
8
|
+
# key = alias, value = ordered backup aliases, tried in order when the alias
|
|
9
|
+
# cannot serve (producer offline, daily budget spent, degraded backend,
|
|
10
|
+
# blocked, share window closed, busy). Entries that resolve to nothing are
|
|
11
|
+
# skipped. Edits hot-reload within ~2s, like config.toml.
|
|
12
|
+
# Managed by: aweshare hub backups
|
|
13
|
+
|
|
14
|
+
`;
|
|
15
|
+
/** Parse and validate the file's text: alias -> non-empty ordered list of
|
|
16
|
+
* distinct alias strings, none of them the key itself. Throws naming every
|
|
17
|
+
* problem, so the reload path can keep the previous map and the CLI can fail
|
|
18
|
+
* loudly. */
|
|
19
|
+
export function parseBackups(raw) {
|
|
20
|
+
let parsed;
|
|
21
|
+
try {
|
|
22
|
+
parsed = parseToml(raw);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
throw new Error(`config.backups.toml is not valid TOML: ${err instanceof Error ? err.message : err}`);
|
|
26
|
+
}
|
|
27
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
28
|
+
throw new Error('config.backups.toml must be a table of alias = [backup aliases]');
|
|
29
|
+
}
|
|
30
|
+
const out = new Map();
|
|
31
|
+
const problems = [];
|
|
32
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
33
|
+
if (!isValidAlias(key)) {
|
|
34
|
+
problems.push(`'${key}' is not an alias (namespace/name, lowercase)`);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
38
|
+
problems.push(`'${key}' must list at least one backup alias (delete the key for none)`);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const queue = [];
|
|
42
|
+
for (const entry of value) {
|
|
43
|
+
if (typeof entry !== 'string' || !isValidAlias(entry)) {
|
|
44
|
+
problems.push(`'${key}' lists a non-alias: ${JSON.stringify(entry ?? null)}`);
|
|
45
|
+
}
|
|
46
|
+
else if (entry === key) {
|
|
47
|
+
problems.push(`'${key}' lists itself as its own backup`);
|
|
48
|
+
}
|
|
49
|
+
else if (queue.includes(entry)) {
|
|
50
|
+
problems.push(`'${key}' repeats '${entry}'`);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
queue.push(entry);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (queue.length > 0)
|
|
57
|
+
out.set(key, queue);
|
|
58
|
+
}
|
|
59
|
+
if (problems.length > 0) {
|
|
60
|
+
throw new Error(`config.backups.toml has problems:\n - ${problems.join('\n - ')}`);
|
|
61
|
+
}
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
/** Serialize queues back to the file's text: header first, then one
|
|
65
|
+
* `alias = [backups]` line per key in map order. */
|
|
66
|
+
export function serializeBackups(queues) {
|
|
67
|
+
if (queues.size === 0)
|
|
68
|
+
return FILE_HEADER;
|
|
69
|
+
const obj = {};
|
|
70
|
+
for (const [key, queue] of queues)
|
|
71
|
+
obj[key] = [...queue];
|
|
72
|
+
return `${FILE_HEADER}${stringifyToml(obj)}`;
|
|
73
|
+
}
|
|
74
|
+
/** Read and parse the file; a missing file means no backups are configured.
|
|
75
|
+
* Throws on an invalid one (the caller decides: startup fails fast, reload
|
|
76
|
+
* keeps the previous values). */
|
|
77
|
+
export function readBackupsFile(backupsFile) {
|
|
78
|
+
if (typeof backupsFile !== 'string')
|
|
79
|
+
return new Map();
|
|
80
|
+
let raw;
|
|
81
|
+
try {
|
|
82
|
+
raw = readFileSync(backupsFile, 'utf8');
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return new Map();
|
|
86
|
+
}
|
|
87
|
+
return parseBackups(raw);
|
|
88
|
+
}
|
|
89
|
+
/** The live per-alias queues: loaded once at startup, reloaded on SIGHUP and
|
|
90
|
+
* on the config watcher's stat-poll — same cadence and keep-previous-on-error
|
|
91
|
+
* rules as config.toml. */
|
|
92
|
+
export class Backups {
|
|
93
|
+
backupsFile;
|
|
94
|
+
queues = new Map();
|
|
95
|
+
constructor(backupsFile) {
|
|
96
|
+
this.backupsFile = backupsFile;
|
|
97
|
+
// startup fails fast on an invalid file (same as config.toml and the
|
|
98
|
+
// produce catalog — serve must not come up half-configured); a missing
|
|
99
|
+
// file is the ordinary empty state. The reload path catches instead and
|
|
100
|
+
// keeps the previous values.
|
|
101
|
+
this.queues = readBackupsFile(backupsFile);
|
|
102
|
+
}
|
|
103
|
+
/** Re-read the file; throws on an invalid one so the caller (the config
|
|
104
|
+
* reloader) keeps the previous values. A file deleted at runtime empties
|
|
105
|
+
* the queues — the file is the single source of truth. */
|
|
106
|
+
reload() {
|
|
107
|
+
this.queues = readBackupsFile(this.backupsFile);
|
|
108
|
+
}
|
|
109
|
+
/** Ordered queue for one alias; empty when none is configured. */
|
|
110
|
+
queueFor(alias) {
|
|
111
|
+
return this.queues.get(alias) ?? EMPTY;
|
|
112
|
+
}
|
|
113
|
+
/** Every configured queue, file order. */
|
|
114
|
+
all() {
|
|
115
|
+
return this.queues;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/** CLI write path: replace the file's contents wholesale with `queues`. */
|
|
119
|
+
export function writeBackupsFile(backupsFile, queues) {
|
|
120
|
+
writeFileSync(backupsFile, serializeBackups(queues), { mode: 0o600 });
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=backups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backups.js","sourceRoot":"","sources":["../src/backups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,WAAW,CAAA;AAgB1E,MAAM,KAAK,GAAsB,EAAE,CAAA;AAEnC;oEACoE;AACpE,MAAM,WAAW,GAAG;;;;;;;CAOnB,CAAA;AAED;;;aAGa;AACb,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,0CAA0C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CACrF,CAAA;IACH,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAA;IACpF,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoB,CAAA;IACvC,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAiC,CAAC,EAAE,CAAC;QAC7E,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,+CAA+C,CAAC,CAAA;YACrE,SAAQ;QACV,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,iEAAiE,CAAC,CAAA;YACvF,SAAQ;QACV,CAAC;QACD,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtD,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,wBAAwB,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,CAAA;YAC/E,CAAC;iBAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,kCAAkC,CAAC,CAAA;YAC1D,CAAC;iBAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,cAAc,KAAK,GAAG,CAAC,CAAA;YAC9C,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACnB,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC3C,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,0CAA0C,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtF,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;oDACoD;AACpD,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,WAAW,CAAA;IACzC,MAAM,GAAG,GAA6B,EAAE,CAAA;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM;QAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;IACxD,OAAO,GAAG,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAA;AAC9C,CAAC;AAED;;iCAEiC;AACjC,MAAM,UAAU,eAAe,CAAC,WAA+B;IAC7D,IAAI,OAAO,WAAW,KAAK,QAAQ;QAAE,OAAO,IAAI,GAAG,EAAE,CAAA;IACrD,IAAI,GAAW,CAAA;IACf,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAA;IAClB,CAAC;IACD,OAAO,YAAY,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC;AAED;;2BAE2B;AAC3B,MAAM,OAAO,OAAO;IAGW;IAFrB,MAAM,GAAc,IAAI,GAAG,EAAE,CAAA;IAErC,YAA6B,WAA+B;QAA/B,gBAAW,GAAX,WAAW,CAAoB;QAC1D,qEAAqE;QACrE,uEAAuE;QACvE,wEAAwE;QACxE,6BAA6B;QAC7B,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;IAC5C,CAAC;IAED;;8DAE0D;IAC1D,MAAM;QACJ,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACjD,CAAC;IAED,kEAAkE;IAClE,QAAQ,CAAC,KAAa;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAA;IACxC,CAAC;IAED,0CAA0C;IAC1C,GAAG;QACD,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;CACF;AAED,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,MAAiB;IACrE,aAAa,CAAC,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;AACvE,CAAC"}
|