Changeset 749605a in Klonkt for src/routes
- Timestamp:
- 08/16/2026 03:06:18 PM (3 weeks ago)
- Branches:
- main
- Children:
- a5caa73
- Parents:
- a5515b4 (diff), 9026de5 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- src/routes
- Files:
-
- 1 added
- 2 edited
-
activitypub.js (modified) (5 diffs)
-
admin-listeners.js (added)
-
circle.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/activitypub.js
ra5515b4 r749605a 1115 1115 ORDER BY pinned DESC, COALESCE(published_at, created_at) ASC LIMIT 20` 1116 1116 ).all(site.id); 1117 AP.sendAP(res, AP.buildFeatured(baseUrl(req), site, posts ));1117 AP.sendAP(res, AP.buildFeatured(baseUrl(req), site, posts, { page: paginaNr(req) })); 1118 1118 }); 1119 1119 … … 1130 1130 const site = publicSite(req.params.slug); 1131 1131 if (!site) return res.status(404).end(); 1132 AP.sendAP(res, AP.listPlaylistsAP(baseUrl(req), site, wantsEnriched(req, res) ));1132 AP.sendAP(res, AP.listPlaylistsAP(baseUrl(req), site, wantsEnriched(req, res), { page: paginaNr(req) })); 1133 1133 }); 1134 1134 … … 1139 1139 const site = publicSite(req.params.slug); 1140 1140 if (!site) return res.status(404).end(); 1141 AP.sendAP(res, AP.buildTrackCollection(baseUrl(req), site, AP.siteOpenTracks(site.id, { alles: await magAlles(req, site.slug) }))); 1141 AP.sendAP(res, AP.buildTrackCollection(baseUrl(req), site, AP.siteOpenTracks(site.id, { alles: await magAlles(req, site.slug) }), { page: paginaNr(req) })); 1142 }); 1143 1144 // De bibliotheek van deze site (shaer-0nh). Funkwhale's Audio draagt een 1145 // `library`, en dat is bij hen het haakje waar een UPLOAD aan komt te hangen -- 1146 // zonder die bak blijft een binnengehaalde track daar een naam zonder geluid. 1147 // Gemeten op 13-8: open.audio had onze vier tracks wel, met onze eigen AP-id's, 1148 // maar uploads leeg en is_playable false. 1149 // 1150 // Openbaar, want alles erin is fedi_open. Er valt dus niets goed te keuren en de 1151 // volgerslijst blijft leeg: wie ons volgt volgt de ACTOR, niet de bak. 1152 // 1153 // `?page=` MOET hier doorgegeven worden. Zonder dat adverteert de wortel een 1154 // `first` die op zichzelf uitkomt: de lezer volgt hem, krijgt weer een `Library` 1155 // in plaats van een pagina, en klapt eruit -- open.audio gaf op 15-8 een 500 op 1156 // precies deze URL. Dezelfde les als bij de outbox (shaer-sk4): een `first` 1157 // beloven is een pagina beloven. 1158 router.get('/ap/users/:slug/library', (req, res) => { 1159 const site = publicSite(req.params.slug); 1160 if (!site) return res.status(404).end(); 1161 AP.sendAP(res, AP.buildLibrary(baseUrl(req), site, AP.siteOpenTracks(site.id), { page: paginaNr(req) })); 1162 }); 1163 1164 // De volgerscollectie die hun docs als vereist noemen. Leeg en eerlijk: er is 1165 // geen goedkeuringspad omdat de bibliotheek openbaar is. 1166 router.get('/ap/users/:slug/library/followers', (req, res) => { 1167 const site = publicSite(req.params.slug); 1168 if (!site) return res.status(404).end(); 1169 AP.sendAP(res, AP.pagedCollection(`${AP.libraryId(baseUrl(req), site)}/followers`, [], { page: paginaNr(req) })); 1142 1170 }); 1143 1171 … … 1174 1202 const site = publicSite(req.params.slug); 1175 1203 if (!site) return res.status(404).end(); 1176 const pl = db.prepare('SELECT id, title, artist, year, cover_url, kind FROM playlists WHERE id = ? AND site_id = ?')1204 const pl = db.prepare('SELECT id, title, artist, year, cover_url, kind, release_date, mb_release_id, created_at FROM playlists WHERE id = ? AND site_id = ?') 1177 1205 .get(req.params.id, site.id); 1178 1206 if (!pl) return res.status(404).end(); … … 1361 1389 router.post(['/ap/users/:slug/inbox', '/ap/inbox'], apInboxLimiter, apJson, async (req, res) => { 1362 1390 try { return res.status(await AP.handleInbox(req, req.params.slug || null) || 202).end(); } 1363 catch (e) { console.warn('[AP inbox] error:', e.message); return res.status(202).end(); } 1391 // Met de STACK erbij. Hier stond alleen `e.message`, en op 15-8 leverde dat 1392 // zes keer "[AP inbox] error: slug is not defined" op zonder één aanwijzing 1393 // waar -- een ReferenceError in een handler van duizenden regels, met een 1394 // naam die overal voorkomt. Een fout die je niet kunt plaatsen is niet 1395 // gemeld. Het type en de activiteit erbij, want dat zegt welke tak liep. 1396 catch (e) { 1397 const soort = req.body && req.body.type; 1398 console.warn('[AP inbox] error:', e.message, '| type:', soort, '| slug:', req.params.slug || '(gedeeld)'); 1399 console.warn(e.stack); 1400 return res.status(202).end(); 1401 } 1364 1402 }); 1365 1403 -
src/routes/circle.js
ra5515b4 r749605a 16 16 return typeof u === 'string' && /^https?:\/\//i.test(u) ? u : null; 17 17 } 18 /** 19 * media_json als ARRAY, of leeg. 20 * 21 * De catch vangt KAPOTTE json; hij ving niet geldige json van het verkeerde 22 * TYPE. Een remote server stuurde media_json = "[]" -- een string MET daarin 23 * `[]` -- en JSON.parse geeft dan netjes een string terug. Een string heeft 24 * geen .map, en daarmee lag /cirkel op boiert.eu plat: een 500 op de hele 25 * pagina door een enkele post (rij 19 van 72). 26 * 27 * Precies dezelfde fout stond al beschreven en gerepareerd in 28 * views/partials/note-body.ejs, waar drie vreemde notes de Krant meenamen. 29 * Die reparatie is hier nooit gekomen -- zelfde data, andere route. Wat er 30 * binnenkomt is niet van ons, dus de vorm hoort afgedwongen en niet aangenomen. 31 */ 18 32 function safeJson(s) { 19 try { return s ? JSON.parse(s) : []; } catch { return []; } 33 try { 34 const v = s ? JSON.parse(s) : []; 35 return Array.isArray(v) ? v : []; 36 } catch { return []; } 20 37 } 21 38 // The cover image + (separately) a cover video from a remote note's media. NEVER use a video/audio
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)