Nach dem uLoad-Cutover 2026-05-18 (Code/uload/ als Standalone) war
@mana/shared-uload structurell broken: ShareModal-Calls aus presi+
music landeten in mana_sync.sync_changes, aber der alte Konsument
(mana-app-uload-server) ist abgeschaltet → 404 auf ulo.ad/r/<code>.
Fix: shared-uload schreibt jetzt direkt via HTTP gegen die föderierte
uload-API.
- create-link.ts: createShortLink() → POST {apiUrl}/api/v1/links
mit Authorization: Bearer <token>. Init-Signatur ist neu
initSharedUload({ apiUrl, getAuthToken, shortUrlOrigin? }).
- types.ts: UloadLink (Dexie-internal-Type) entfernt — Caller arbeiten
nur noch mit CreateShortLinkOptions + CreatedLink (Wire-Shapes).
- package.json: @mana/local-store-Dep entfernt. Version 0.2.0.
- index.ts: getBaseUrl-Export ergänzt, UloadLink raus.
Caller-Site (apps/mana/apps/web/src/routes/(app)/+layout.svelte):
initSharedUload({
apiUrl: PUBLIC_ULOAD_API_URL ?? 'https://uload-api.mana.how',
getAuthToken: () => authStore.getValidToken(),
shortUrlOrigin: PUBLIC_ULOAD_SHORT_ORIGIN ?? 'https://ulo.ad',
});
Bonus-Cleanup:
- plaintext-allowlist.ts: uloadFolders + uloadTags raus (Tables sind
via Dexie v67 gedroppt, Allowlist-Entries waren orphaned).
mana-Web-App: pnpm check grün (0/0 auf 7396 Files).
Eight more package-level type errors that all came from the same
small handful of patterns.
Modal escape-key handlers calling click-style functions
Four modals (AuthGateModal, GuestWelcomeModal, ConfirmationPopover,
ShareModal) had `onkeydown={(e) => { if (e.key === 'Escape')
handleBackdropClick(); }}` — but handleBackdropClick took a MouseEvent
parameter, so the no-arg call failed with "Expected 1 arguments,
got 0". Fix: route the keyboard escape path through the right
no-arg helper (`onClose` / `handleClose` / `handleContinueAsGuest`)
or pass the keyboard event through with a cast for the popover
trigger that genuinely shares its handler with the click path.
WallpaperModal $derived
`currentLayout` and `currentBackground` were declared with
`$derived(() => {...})` — passing a function expression. The
variant that takes a thunk is `$derived.by(...)`; plain `$derived`
expects a single value expression. Result: the variables held the
arrow function itself, the call sites had to invoke them as
`currentLayout()`, and TS rejected the function value where Layout
was expected. Switch to `$derived.by`, drop the call-site parens.
TagList.svelte
Generic param was named `Tag` in the handler signature
(`tag: Tag`) but the imported type was aliased as `TagType`. Tag
was undefined → "Cannot find name 'Tag'". Renamed to TagType.
TagStrip.svelte
`dropAccepts?: string[]` is too wide for `passiveDropZone`'s
`accepts: DragType[]`. Narrowed the prop type to `DragType[]`
and added the missing import.
shared-auth/types: UserData.{name,image}?
Two more optional fields for the public user shape. Both come
from the JWT user_metadata claim when the user has filled in
their profile during onboarding. Without these the
ProfileStep.svelte onboarding component couldn't read
`authStore.user?.name` / `?.image` without `as any`. Added
alongside `twoFactorEnabled` from the previous shared-auth
commit; same Optional rationale (guest tokens omit the claim).
Net: -10 type errors.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rename the music module from "Mukke" to "Music" across the entire
codebase: API routes, web app module, shared packages, search provider,
dashboard widgets, i18n keys, app registry, and route paths.
Add POST /api/v1/music/cover/upload endpoint that uploads cover art
images through mana-media for deduplication, thumbnails, and Photos
gallery visibility.
Dexie table names (mukkePlaylists, mukkeProjects) kept unchanged to
preserve existing IndexedDB data.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds collapsible "Erweiterte Optionen" section with:
- Password protection toggle with text input
- Expiration date toggle with datetime-local picker
- Footer badges showing active protection/expiry on created links
Both fields are passed through to createShortLink and stored in IndexedDB.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Provides ShareModal component and initSharedUload/createShortLink utilities
for other apps to create uLoad short links with source tracking.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>