license: relicense to AGPL-3.0-only with commercial dual-license

- LICENSE -> verbatim GNU AGPL-3.0; add LICENSE-COMMERCIAL.md + SECURITY.md
- CLA -> exclusive-license grant (contributors keep copyright); add README
  anti-rugpull covenant + relicense record
- NOTICE / README / CONTRIBUTING / CLAUDE.md / package.json x5 updated;
  contact routed through GitHub (no email placeholders)
- AGPL section 13 source offer: operator-configurable BACKSPACE_SOURCE_URL +
  build-injected commit; sourceCodeUrl+commit on /api/instance/info;
  SourceCodeLink on login/register/settings/desktop; docs + .env.example updated
This commit is contained in:
Jannis Braun
2026-07-01 16:38:22 +02:00
parent 16d75f2806
commit f481e1fe9e
34 changed files with 1084 additions and 165 deletions
+25 -3
View File
@@ -536,9 +536,30 @@ export const useInstanceStore = create<InstanceState>((set, get) => ({
try {
const user = await inst.api.users.me();
// Refresh the instance label (non-critical — a failure here must not
// block a successful token reconnect).
let info: (InstanceInfoResponse) | null = null;
try {
info = await inst.api.instance.info();
} catch {
// Keep whatever label the instance already had.
}
set((state) => ({
instances: state.instances.map(i =>
i.origin === origin ? { ...i, status: 'connected' as const, user, error: undefined } : i
i.origin === origin
? {
...i,
status: 'connected' as const,
user,
error: undefined,
...(info
? {
label: info.name,
}
: {}),
}
: i
),
}));
@@ -996,10 +1017,11 @@ export const useInstanceStore = create<InstanceState>((set, get) => ({
// Verify the token is still valid
const user = await client.users.me();
// Fetch instance info for fresh label
// Fetch instance info for a fresh label
let label = cachedEntry.label || new URL(origin).host;
let info: InstanceInfoResponse | null = null;
try {
const info = await client.instance.info();
info = await client.instance.info();
label = info.name;
} catch {
// Non-critical — keep cached label