From 99c113b6f50ae96ff5a0d4006edd121aa17f79ed Mon Sep 17 00:00:00 2001 From: maikrolf <40924921+maikrolf@users.noreply.github.com> Date: Sun, 5 Jul 2026 16:57:29 +0200 Subject: [PATCH] fix: bw/stats 404, gateway links, history crash - swr.ts: remove useBandwidth(), drop bw from useDashboard() - events/route.ts: skip bandwidth SSE (Kubo 0.28.0 unsupported) - usage/page.tsx: remove getBWStats call + bw references - helpers.ts: gatewayLink -> ipfs.maos.dedyn.io (subdomain only) - upload/page.tsx: fix local gatewayLink (subdomain only) - storage.ts: update default gatewayUrl, add defensive getHistory() --- .omo/plans/features-plan.md | 166 + .../ses_0dccaec9affeokDqxzoESEknqc.json | 10 + .../ses_0f6f91d66ffexLf0P0aWM1urQ2.json | 10 + ARCHITECTURE.md | 306 + IPFS-Portal-verbeterplan.html | 1185 +++ graphify-out/.graphify_labels.json | 1 + graphify-out/.graphify_python | 1 + graphify-out/.graphify_root | 1 + graphify-out/GRAPH_REPORT.md | 111 + graphify-out/_query.py | 20 + graphify-out/_query2.py | 17 + ...578fd6f3f30c40ae57eb4ee0d57f2dd440ed1.json | 1 + ...36e2bc09b9dd2d7e3f8a3ecf01ddf9aaeba38.json | 1 + ...9a097b30f87d4f5fc666c2e5bebe5f26a3713.json | 1 + graphify-out/cache/stat-index.json | 1 + graphify-out/cost.json | 12 + graphify-out/graph.html | 307 + graphify-out/graph.json | 6726 +++++++++++++++++ graphify-out/manifest.json | 187 + package.json | 1 + public/icon-192.png | Bin 0 -> 3233 bytes public/icon-512.png | Bin 0 -> 12970 bytes public/sw.js | 31 +- scripts/gen-icon.cjs | 103 + src/app/admin/page.tsx | 198 + src/app/api/events/route.ts | 31 - .../explorer/components/DirectoryListing.tsx | 257 +- src/app/explorer/components/FileIcon.tsx | 64 +- src/app/explorer/components/FilePreview.tsx | 254 +- src/app/history/page.tsx | 3 + src/app/settings/page.tsx | 93 +- src/app/upload/components/QuickUpload.tsx | 85 +- src/app/upload/page.tsx | 45 +- src/app/usage/page.tsx | 13 +- src/lib/__tests__/helpers.test.ts | 4 +- src/lib/api.ts | 7 +- src/lib/helpers.ts | 2 +- src/lib/storage.ts | 16 +- src/lib/swr.ts | 30 +- src/lib/useRealtime.ts | 29 +- src/lib/wallet.ts | 8 +- src/{middleware.ts => proxy.ts} | 6 +- 42 files changed, 10081 insertions(+), 263 deletions(-) create mode 100644 .omo/plans/features-plan.md create mode 100644 .omo/run-continuation/ses_0dccaec9affeokDqxzoESEknqc.json create mode 100644 .omo/run-continuation/ses_0f6f91d66ffexLf0P0aWM1urQ2.json create mode 100644 ARCHITECTURE.md create mode 100644 IPFS-Portal-verbeterplan.html create mode 100644 graphify-out/.graphify_labels.json create mode 100644 graphify-out/.graphify_python create mode 100644 graphify-out/.graphify_root create mode 100644 graphify-out/GRAPH_REPORT.md create mode 100644 graphify-out/_query.py create mode 100644 graphify-out/_query2.py create mode 100644 graphify-out/cache/ast/07d2ec4b6bf62550169c81f9ecd578fd6f3f30c40ae57eb4ee0d57f2dd440ed1.json create mode 100644 graphify-out/cache/ast/93155dc8f78a78f135a0687f64636e2bc09b9dd2d7e3f8a3ecf01ddf9aaeba38.json create mode 100644 graphify-out/cache/ast/b4d183d0a729b9f4854201b7a3e9a097b30f87d4f5fc666c2e5bebe5f26a3713.json create mode 100644 graphify-out/cache/stat-index.json create mode 100644 graphify-out/cost.json create mode 100644 graphify-out/graph.html create mode 100644 graphify-out/graph.json create mode 100644 graphify-out/manifest.json create mode 100644 public/icon-192.png create mode 100644 public/icon-512.png create mode 100644 scripts/gen-icon.cjs create mode 100644 src/app/admin/page.tsx rename src/{middleware.ts => proxy.ts} (95%) diff --git a/.omo/plans/features-plan.md b/.omo/plans/features-plan.md new file mode 100644 index 0000000..ef4d035 --- /dev/null +++ b/.omo/plans/features-plan.md @@ -0,0 +1,166 @@ +# IPFS Portal Feature Plan + +## A. Payment / Blockchain Features + +### A1. Multi-chain Support +- **Status**: `getWalletClient()` en `getPublicClient()` hardcoden naar `zkSyncLocal` +- **Wijzigingen**: + - `src/lib/payment/read-service.ts`: `getPublicClient()` chain parameter toevoegen + - `src/lib/payment/write-service.ts`: `getWalletClient()` chain configurable maken + - `src/lib/payment/abi.ts`: `ChainConfig[]` type, default chains (zkSync Local + optioneel Polygon/Arbitrum) + - `src/lib/payment/service.ts`: chain selector in constructor + - `src/components/PaymentPanel.tsx`: chain switcher UI + - `src/app/admin/payment/page.tsx`: multi-chain admin overzicht +- **Bestanden**: `src/lib/payment/read-service.ts`, `write-service.ts`, `abi.ts`, `service.ts`, `src/components/PaymentPanel.tsx`, `src/app/admin/payment/page.tsx` + +### A2. Gas Estimator +- **Status**: Geen indicatie van transactiekosten voor gebruiker +- **Wijzigingen**: + - `src/lib/payment/read-service.ts`: `estimateGas()` methode + - `src/lib/payment/write-service.ts`: gas estimation voor `payWithETH`, `approveAndPayWithToken` + - `src/components/PaymentPanel.tsx`: gas fee display naast prijs +- **Bestanden**: `src/lib/payment/read-service.ts`, `write-service.ts`, `src/components/PaymentPanel.tsx` + +### A3. Batch Upload + Single Payment +- **Status**: 1 file → 1 upload → 1 tx (sequentieel via `startUpload()`) +- **Wijzigingen**: + - `src/lib/payment/write-service.ts`: `payWithBatch(provider, cids[], totalBytes, priceWei)` — encodet meerdere CIDs in 1 tx + - `src/app/upload/page.tsx`: batch selectie in crypto tab + - `src/components/PaymentPanel.tsx`: multiple files support +- **Bestanden**: `src/lib/payment/write-service.ts`, `src/app/upload/page.tsx`, `src/components/PaymentPanel.tsx` + +### A4. Storage Quota UI +- **Status**: `getUserStats()` returned `totalBytes/uploadCount/remainingFree` maar nergens getoond als overzicht +- **Wijzigingen**: + - Nieuw component: `src/components/StorageQuota.tsx` — balkje met used/free/total + - `src/app/dashboard/page.tsx`: storage quota card toevoegen + - `src/components/PaymentPanel.tsx`: quota status in payment panel +- **Bestanden**: NIEUW `src/components/StorageQuota.tsx`, `src/app/dashboard/page.tsx`, `src/components/PaymentPanel.tsx` + +### A5. On-chain Transaction History +- **Status**: History page gebruikt alleen localStorage; contract heeft `getUserUploads(address)` met records +- **Wijzigingen**: + - `src/lib/payment/read-service.ts`: `getUserUploads()` bestaat al — wordt gebruikt in UsersPage + - `src/app/history/page.tsx`: "On-chain History" tab toevoegen naast localStorage tab + - Nieuw component: `src/components/ChainHistory.tsx` +- **Bestanden**: `src/app/history/page.tsx`, NIEUW `src/components/ChainHistory.tsx` + +### A6. Token Auto-router +- **Status**: Gebruiker kiest handmatig token in PaymentPanel +- **Wijzigingen**: + - `src/components/PaymentPanel.tsx`: auto-select goedkoopste token op basis van `finalWei` / `weiPerToken` + - Optioneel: "Auto" button naast token lijst +- **Bestanden**: `src/components/PaymentPanel.tsx` + +### A7. Subscription / Pre-paid Tegoed +- **Status**: Per-file betaling; contract heeft `getUserStats()` met `remainingFree` +- **Wijzigingen**: + - Nieuw component: `src/components/DepositPanel.tsx` — stort ETH/tokens op contract + - Nieuw component: `src/components/BalanceDisplay.tsx` — toon tegoed + - `src/app/dashboard/page.tsx`: balance card + - `src/lib/payment/write-service.ts`: `deposit(provider, amount)` methode +- **Bestanden**: NIEUW `src/components/DepositPanel.tsx`, NIEUW `src/components/BalanceDisplay.tsx`, `src/app/dashboard/page.tsx`, `src/lib/payment/write-service.ts` + +--- + +## B. IPFS Explorer — Content Viewing + +### B1. Video Preview (.mp4, .webm, .mov) +- **Status**: valt onder `'other'` → "Preview not available" +- **Wijzigingen**: + - `src/app/explorer/components/FilePreview.tsx`: `detectFileType()` uitbreiden met `'video'` type + - `src/app/explorer/components/FilePreview.tsx`: `