Monorepo for Aesthetic.Computer aesthetic.computer
4
fork

Configure Feed

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

Route bare KidLisp codes

+62 -17
+56 -17
system/netlify/functions/index.mjs
··· 7 7 import he from "he"; 8 8 const { encode } = he; 9 9 import * as num from "../../public/aesthetic.computer/lib/num.mjs"; 10 - import { 11 - parse, 12 - metadata, 13 - inferTitleDesc, 14 - updateCode, 15 - } from "../../public/aesthetic.computer/lib/parse.mjs"; 16 - import { respond } from "../../backend/http.mjs"; 17 - import { handleFromPermahandle } from "../../backend/authorization.mjs"; 18 - import { defaultTemplateStringProcessor as html } from "../../public/aesthetic.computer/lib/helpers.mjs"; 19 - import { networkInterfaces } from "os"; 20 - const dev = process.env.CONTEXT === "dev" || process.env.NETLIFY_DEV === "true"; 10 + import { 11 + parse, 12 + metadata, 13 + inferTitleDesc, 14 + updateCode, 15 + } from "../../public/aesthetic.computer/lib/parse.mjs"; 16 + import { respond } from "../../backend/http.mjs"; 17 + import { handleFromPermahandle } from "../../backend/authorization.mjs"; 18 + import { connect } from "../../backend/database.mjs"; 19 + import { defaultTemplateStringProcessor as html } from "../../public/aesthetic.computer/lib/helpers.mjs"; 20 + import { networkInterfaces } from "os"; 21 + const dev = process.env.CONTEXT === "dev" || process.env.NETLIFY_DEV === "true"; 22 + const BARE_KIDLISP_CODE = /^[0-9A-Za-z]{3,64}$/; 21 23 22 24 // Fire-and-forget piece hit tracking (don't await, don't block page load) 23 - async function trackPieceHit(piece, type) { 25 + async function trackPieceHit(piece, type) { 24 26 try { 25 27 const baseUrl = dev ? "https://localhost:8888" : "https://aesthetic.computer"; 26 28 const { got } = await import("got"); ··· 35 37 // Silent fail - don't let tracking break page loads 36 38 if (dev) console.log("📊 Hit tracking failed:", e.message); 37 39 } 38 - } 40 + } 41 + 42 + async function findBareKidlispCode(slug) { 43 + if (!BARE_KIDLISP_CODE.test(slug)) return false; 44 + 45 + try { 46 + const database = await connect(); 47 + const record = await database.db.collection("kidlisp").findOne( 48 + { code: slug }, 49 + { projection: { _id: 1 } }, 50 + ); 51 + await database.disconnect(); 52 + return !!record; 53 + } catch (err) { 54 + console.log(`[kidlisp] Bare /${slug} lookup failed:`, err?.message || err); 55 + return false; 56 + } 57 + } 58 + 59 + function redirectToKidlispCode(event, code) { 60 + const query = new URLSearchParams(event.queryStringParameters || {}); 61 + const suffix = query.toString() ? `?${query.toString()}` : ""; 62 + const location = `/$${code}${suffix}`; 63 + 64 + return respond( 65 + 302, 66 + `<a href="${location}">Redirecting to ${location}</a>`, 67 + { 68 + "Content-Type": "text/html", 69 + Location: location, 70 + }, 71 + ); 72 + } 39 73 40 74 async function fun(event, context) { 41 75 const _startTime = Date.now(); ··· 728 762 } 729 763 } 730 764 } 731 - } else if (parsed.source) { 765 + } else if (parsed.source) { 732 766 // Handle inline kidlisp code that doesn't need file loading 733 767 console.log("[kidlisp] Using inline kidlisp source for metadata"); 734 768 ··· 745 779 if (title) { 746 780 meta = { ...meta, title, standaloneTitle: true }; 747 781 } 748 - } 749 - } 750 - } catch (err) { 782 + } 783 + } 784 + 785 + if (statusCode === 404 && !sourceCode && !fromHandle && await findBareKidlispCode(slug)) { 786 + console.log(`[kidlisp] Converting bare /${slug} to /$${slug} and redirecting`); 787 + return redirectToKidlispCode(event, slug); 788 + } 789 + } catch (err) { 751 790 // If either module doesn't load, then we can fallback to the main route. 752 791 console.log("🔴 Error loading module:", err, sourceCode); 753 792 return redirect;
+6
system/public/aesthetic.computer/disks/prompt.mjs
··· 79 79 80 80 const TYPO_REPLY = ` 81 81 Use Aesthetic Computer by entering a correct word.\n\nEnter "list" for some available words.\n\nEnter "chat" for help.\n\nText 1-508-728-4043 for tips.\n\n - @jeffrey`.trim(); 82 + const BARE_KIDLISP_CODE = /^[0-9A-Za-z]{3,64}$/; 82 83 83 84 import { Android, MetaBrowser, iOS } from "../lib/platform.mjs"; 84 85 import { validateHandle } from "../lib/text.mjs"; ··· 4140 4141 } else { 4141 4142 body = parse(trimmed); 4142 4143 loaded = await load(body); // Execute the current command. 4144 + 4145 + // Bare code fallback: let `duv` resolve to `$duv` when no disk named `duv` exists. 4146 + if (!loaded && BARE_KIDLISP_CODE.test(trimmed) && !trimmed.startsWith("$")) { 4147 + loaded = await load(parse(`$${trimmed}`)); 4148 + } 4143 4149 } 4144 4150 4145 4151 // console.log("Loaded:", loaded);