A Deno-powered backend service for Plants vs. Zombies: MODDED. [Read-only GitHub mirror] docs.pvzm.net
express typescript expressjs plant deno jspvz pvzm game online backend plants-vs-zombies zombie javascript plants modded vs plantsvszombies openapi pvz noads
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Format "0.6.4 - 🛠️ Fix requests hanging when a logging provider fails or is slow" Original commit: https://github.com/ROBlNET13/pvzm-backend/commit/a93ae47e9eaedd2a8048805467fe992cac637e6c

Co-authored-by: ClaytonTDM <clay@clay.rip>

+59 -48
+36 -28
modules/routes/admin.ts
··· 272 272 273 273 const updatedLevel = dbCtx.db.prepare("SELECT * FROM levels WHERE id = ?").get(levelId) as LevelRecord; 274 274 275 - deps.loggingManager.sendAuditLog({ 276 - action: "feature", 277 - levelId, 278 - levelName: updatedLevel.name, 279 - author: updatedLevel.author, 280 - }).catch((err) => console.error("Warning: Failed to send audit log for level feature", levelId, err)); 275 + deps.loggingManager 276 + .sendAuditLog({ 277 + action: "feature", 278 + levelId, 279 + levelName: updatedLevel.name, 280 + author: updatedLevel.author, 281 + }) 282 + .catch((err) => console.error("Warning: Failed to send audit log for level feature", levelId, err)); 281 283 282 284 // send featured message to logging providers (e.g., bluesky) 283 - deps.loggingManager.sendFeaturedMessage( 284 - { 285 - id: levelId, 286 - name: updatedLevel.name, 287 - author: updatedLevel.author, 288 - gameUrl: config.gameUrl, 289 - backendUrl: config.backendUrl, 290 - featuredAt: now, 291 - }, 292 - exists.logging_data 293 - ).then((loggingData) => { 294 - if (loggingData) { 295 - dbCtx.db.prepare("UPDATE levels SET logging_data = ? WHERE id = ?").run(loggingData, levelId); 296 - } 297 - }).catch((err) => console.error("Warning: Failed to send featured message for level", levelId, err)); 285 + deps.loggingManager 286 + .sendFeaturedMessage( 287 + { 288 + id: levelId, 289 + name: updatedLevel.name, 290 + author: updatedLevel.author, 291 + gameUrl: config.gameUrl, 292 + backendUrl: config.backendUrl, 293 + featuredAt: now, 294 + }, 295 + exists.logging_data 296 + ) 297 + .then((loggingData) => { 298 + if (loggingData) { 299 + dbCtx.db.prepare("UPDATE levels SET logging_data = ? WHERE id = ?").run(loggingData, levelId); 300 + } 301 + }) 302 + .catch((err) => console.error("Warning: Failed to send featured message for level", levelId, err)); 298 303 299 304 // send to posthog 300 305 if (postHogClient) { ··· 336 341 const updatedLevel = dbCtx.db.prepare("SELECT * FROM levels WHERE id = ?").get(levelId) as LevelRecord; 337 342 338 343 // delete featured message from logging providers (e.g., bluesky) 339 - deps.loggingManager.deleteFeaturedMessage(levelRow.logging_data) 344 + deps.loggingManager 345 + .deleteFeaturedMessage(levelRow.logging_data) 340 346 .then((loggingData) => { 341 347 if (loggingData) { 342 348 dbCtx.db.prepare("UPDATE levels SET logging_data = ? WHERE id = ?").run(loggingData, levelId); ··· 344 350 }) 345 351 .catch((err) => console.error("Warning: Failed to delete featured message for level", levelId, err)); 346 352 347 - deps.loggingManager.sendAuditLog({ 348 - action: "unfeature", 349 - levelId, 350 - levelName: updatedLevel.name, 351 - author: updatedLevel.author, 352 - }).catch((err) => console.error("Warning: Failed to send audit log for level unfeature", levelId, err)); 353 + deps.loggingManager 354 + .sendAuditLog({ 355 + action: "unfeature", 356 + levelId, 357 + levelName: updatedLevel.name, 358 + author: updatedLevel.author, 359 + }) 360 + .catch((err) => console.error("Warning: Failed to send audit log for level unfeature", levelId, err)); 353 361 354 362 // send to posthog 355 363 if (postHogClient) {
+23 -20
modules/routes/levels.ts
··· 295 295 )}&action=delete&level=${levelId}`, 296 296 }; 297 297 298 - deps.loggingManager.sendLevelMessage(levelInfo) 298 + deps.loggingManager 299 + .sendLevelMessage(levelInfo) 299 300 .then((loggingData) => deps.loggingManager.sendAdminLevelMessage(adminLevelInfo, loggingData)) 300 301 .then((loggingData) => { 301 302 if (loggingData) { ··· 633 634 console.error("Error reading level file for report:", fileError); 634 635 } 635 636 636 - deps.loggingManager.sendReportMessage({ 637 - levelId, 638 - levelName: typedLevel.name, 639 - author: typedLevel.author, 640 - reason, 641 - reporterIp: getClientIP(req), 642 - editUrl: `${config.backendUrl}/admin.html?token=${encodeURIComponent(dbCtx.createOneTimeTokenForLevel(levelId))}&action=edit&level=${levelId}`, 643 - deleteUrl: `${config.backendUrl}/admin.html?token=${encodeURIComponent( 644 - dbCtx.createOneTimeTokenForLevel(levelId) 645 - )}&action=delete&level=${levelId}`, 646 - viewUrl: `${config.gameUrl}/?izl_id=${levelId}`, 647 - mentionUserIds: config.discordMentionUserIds, 648 - fileAttachment: fileContent 649 - ? { 650 - content: fileContent, 651 - fileName: `${safeName}.${fileExtension}`, 652 - } 653 - : undefined, 654 - }).catch((err) => console.error("Warning: Failed to send report message for level", levelId, err)); 637 + deps.loggingManager 638 + .sendReportMessage({ 639 + levelId, 640 + levelName: typedLevel.name, 641 + author: typedLevel.author, 642 + reason, 643 + reporterIp: getClientIP(req), 644 + editUrl: `${config.backendUrl}/admin.html?token=${encodeURIComponent(dbCtx.createOneTimeTokenForLevel(levelId))}&action=edit&level=${levelId}`, 645 + deleteUrl: `${config.backendUrl}/admin.html?token=${encodeURIComponent( 646 + dbCtx.createOneTimeTokenForLevel(levelId) 647 + )}&action=delete&level=${levelId}`, 648 + viewUrl: `${config.gameUrl}/?izl_id=${levelId}`, 649 + mentionUserIds: config.discordMentionUserIds, 650 + fileAttachment: fileContent 651 + ? { 652 + content: fileContent, 653 + fileName: `${safeName}.${fileExtension}`, 654 + } 655 + : undefined, 656 + }) 657 + .catch((err) => console.error("Warning: Failed to send report message for level", levelId, err)); 655 658 656 659 // send to posthog 657 660 const clientIP = getClientIP(req);