refactor(orbit): switch share link to psysonic2- magic string format

Aligns orbit invites with the existing magic-string family (psysonic1- for
server invites, psysonic2- for library shares) by folding orbit into the
psysonic2- payload as a new k:'orbit' variant. The JSON body is
intentionally extendable so future layers (passwords, permissions,
invite expiry) can be added without a format migration.

- SharePayloadV1 split into EntitySharePayloadV1 + OrbitSharePayloadV1
- decodeSharePayloadFromText filters orbit out; orbit has its own decoder
- applySharePastePayload param narrowed to EntitySharePayloadV1
- buildOrbitShareLink / parseOrbitShareLink kept as thin wrappers
- slug parameter dropped (magic string is opaque, so the slug was
  cosmetic-only in the old URL form); slugifyOrbitName removed as dead code
- joinModalLinkPlaceholder updated in all 8 locales

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Psychotoxical
2026-04-24 23:59:37 +02:00
parent 682fe99bba
commit 0d18d5dfa9
12 changed files with 84 additions and 79 deletions
+2 -3
View File
@@ -9,7 +9,6 @@ import {
startOrbitSession,
buildOrbitShareLink,
generateSessionId,
slugifyOrbitName,
} from '../utils/orbit';
import { randomOrbitSessionName } from '../utils/orbitNames';
import { useAuthStore } from '../store/authStore';
@@ -44,8 +43,8 @@ export default function OrbitStartModal({ onClose }: Props) {
const onLan = isLanUrl(serverBase);
const shareLink = useMemo(
() => buildOrbitShareLink(serverBase, sid, slugifyOrbitName(name)),
[serverBase, sid, name],
() => buildOrbitShareLink(serverBase, sid),
[serverBase, sid],
);
const writeLinkToClipboard = async (): Promise<boolean> => {