From 477ef638cce951a346eed972867003ce6771ae7f Mon Sep 17 00:00:00 2001 From: Bad Manners <me@badmanners.xyz> Date: Thu, 2 Jan 2025 11:23:24 -0300 Subject: [PATCH] Add labels to icons and add 'Party Trick' --- package-lock.json | 519 ++++++++++++++---- package.json | 2 +- scripts/export-story.ts | 10 +- .../stories/bm_ff_18_party_trick.png | Bin 0 -> 17175 bytes src/components/ExternalPosts.astro | 57 +- src/data/stories/party-trick.md | 130 +++++ src/data/stories/spontaneous-sleepover.md | 1 + .../the-lost-of-the-marshes/chapter-7.md | 1 + src/data/tags.yaml | 22 +- src/i18n/index.ts | 2 +- src/layouts/PublishedContentLayout.astro | 26 +- src/pages/api/export-story/[...id].ts | 2 +- 12 files changed, 581 insertions(+), 191 deletions(-) create mode 100644 src/assets/thumbnails/stories/bm_ff_18_party_trick.png create mode 100644 src/data/stories/party-trick.md diff --git a/package-lock.json b/package-lock.json index bc774f6..8e1a3e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "gallery.badmanners.xyz", - "version": "1.14.0", + "version": "1.15.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "gallery.badmanners.xyz", - "version": "1.14.0", + "version": "1.15.0", "hasInstallScript": true, "dependencies": { "@astrojs/alpinejs": "^0.4.0", @@ -703,6 +703,22 @@ "node": ">=12" } }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/netbsd-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", @@ -2198,14 +2214,14 @@ } }, "node_modules/astro": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/astro/-/astro-5.0.1.tgz", - "integrity": "sha512-7XzFq3eFdSkeT/aCNealVv4klwmKoOYb6LZymbyZQrdUA9vEoUCKFcujVo4YbJJ8WXyEm515ZHPCxHTdDneEug==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.1.2.tgz", + "integrity": "sha512-+U5lXPEJZ6cQx0botGbPhzN6XGWRgDtXgy/RUkpTmUj18LW6pbzYo0O0k3hFWOazlI039bZ+4P2e/oSNlKzm0Q==", "license": "MIT", "dependencies": { "@astrojs/compiler": "^2.10.3", "@astrojs/internal-helpers": "0.4.2", - "@astrojs/markdown-remark": "6.0.0", + "@astrojs/markdown-remark": "6.0.1", "@astrojs/telemetry": "3.2.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.1.3", @@ -2251,8 +2267,9 @@ "tsconfck": "^3.1.4", "ultrahtml": "^1.5.3", "unist-util-visit": "^5.0.0", + "unstorage": "^1.14.0", "vfile": "^6.0.3", - "vite": "^6.0.1", + "vite": "^6.0.5", "vitefu": "^1.0.4", "which-pm": "^3.0.0", "xxhash-wasm": "^1.1.0", @@ -2279,9 +2296,9 @@ "link": true }, "node_modules/astro/node_modules/@astrojs/markdown-remark": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.0.0.tgz", - "integrity": "sha512-Tabo7xM44Pz2Yf9qpdaCCgxRmtaypi2YCinqTUNefDrWUa+OyKW62OuNeCaGwNh/ys+QAd9FUWN5/3HgPWjP4Q==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.0.1.tgz", + "integrity": "sha512-CTSYijj25NfxgZi15TU3CwPwgyD1/7yA3FcdcNmB9p94nydupiUbrIiq3IqeTp2m5kCVzxbPZeC7fTwEOaNyGw==", "license": "MIT", "dependencies": { "@astrojs/prism": "3.2.0", @@ -2792,6 +2809,15 @@ "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", "license": "ISC" }, + "node_modules/consola": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.3.3.tgz", + "integrity": "sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", @@ -2801,6 +2827,12 @@ "node": ">= 0.6" } }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2815,6 +2847,15 @@ "node": ">= 8" } }, + "node_modules/crossws": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.1.tgz", + "integrity": "sha512-HsZgeVYaG+b5zA+9PbIPGq4+J/CJynJuearykPsXx4V/eMhyQ5EDVg3Ak2FBZtVXCiOLu/U7IiwDHTr9MA+IKw==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -2866,6 +2907,12 @@ "node": ">=0.10.0" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -2875,6 +2922,12 @@ "node": ">=6" } }, + "node_modules/destr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz", + "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==", + "license": "MIT" + }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", @@ -3544,6 +3597,24 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, + "node_modules/h3": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.13.0.tgz", + "integrity": "sha512-vFEAu/yf8UMUcB4s43OaDaigcqpQd14yanmOsn+NcRX3/guSKncyE2rOYhq8RIchgJrPSs/QiIddnTTR1ddiAg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": ">=0.2.0 <0.4.0", + "defu": "^6.1.4", + "destr": "^2.0.3", + "iron-webcrypto": "^1.2.1", + "ohash": "^1.1.4", + "radix3": "^1.1.2", + "ufo": "^1.5.4", + "uncrypto": "^0.1.3", + "unenv": "^1.10.0" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -3860,6 +3931,15 @@ "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", "license": "MIT" }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, "node_modules/is-alphabetical": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", @@ -5346,6 +5426,18 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -5442,6 +5534,12 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/node-fetch-native": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", + "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==", + "license": "MIT" + }, "node_modules/node-releases": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", @@ -5484,6 +5582,23 @@ "node": ">= 6" } }, + "node_modules/ofetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" + } + }, + "node_modules/ohash": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz", + "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==", + "license": "MIT" + }, "node_modules/oniguruma-to-es": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-0.7.0.tgz", @@ -5704,6 +5819,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -6099,6 +6220,12 @@ ], "license": "MIT" }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -7701,12 +7828,24 @@ "semver": "^7.3.8" } }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "license": "MIT" + }, "node_modules/ultrahtml": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.5.3.tgz", "integrity": "sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==", "license": "MIT" }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, "node_modules/undici-types": { "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", @@ -7714,6 +7853,19 @@ "devOptional": true, "license": "MIT" }, + "node_modules/unenv": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-1.10.0.tgz", + "integrity": "sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3", + "defu": "^6.1.4", + "mime": "^3.0.0", + "node-fetch-native": "^1.6.4", + "pathe": "^1.1.2" + } + }, "node_modules/unified": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", @@ -7869,6 +8021,146 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unstorage": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.14.4.tgz", + "integrity": "sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^3.6.0", + "destr": "^2.0.3", + "h3": "^1.13.0", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.4", + "ofetch": "^1.4.1", + "ufo": "^1.5.4" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.5.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3", + "@deno/kv": ">=0.8.4", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.1" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/unstorage/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/unstorage/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/unstorage/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", @@ -7948,12 +8240,12 @@ } }, "node_modules/vite": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.2.tgz", - "integrity": "sha512-XdQ+VsY2tJpBsKGs0wf3U/+azx8BBpYRHFAyKm5VeEZNOJZRB63q7Sc8Iup3k0TrN3KO6QgyzFf+opSbfY1y0g==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.6.tgz", + "integrity": "sha512-NSjmUuckPmDU18bHz7QZ+bTYhRR0iA72cs2QAxCqDpafJ0S6qetco0LB3WW2OxlMHS0JmAv+yZ/R3uPmMyGTjQ==", "license": "MIT", "dependencies": { - "esbuild": "^0.24.0", + "esbuild": "^0.24.2", "postcss": "^8.4.49", "rollup": "^4.23.0" }, @@ -8019,9 +8311,9 @@ } }, "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", - "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", "cpu": [ "ppc64" ], @@ -8035,9 +8327,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", - "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", "cpu": [ "arm" ], @@ -8051,9 +8343,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", - "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", "cpu": [ "arm64" ], @@ -8067,9 +8359,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", - "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", "cpu": [ "x64" ], @@ -8083,9 +8375,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", - "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", "cpu": [ "arm64" ], @@ -8099,9 +8391,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", - "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", "cpu": [ "x64" ], @@ -8115,9 +8407,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", - "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", "cpu": [ "arm64" ], @@ -8131,9 +8423,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", - "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", "cpu": [ "x64" ], @@ -8147,9 +8439,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", - "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", "cpu": [ "arm" ], @@ -8163,9 +8455,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", - "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", "cpu": [ "arm64" ], @@ -8179,9 +8471,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", - "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", "cpu": [ "ia32" ], @@ -8195,9 +8487,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", - "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", "cpu": [ "loong64" ], @@ -8211,9 +8503,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", - "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", "cpu": [ "mips64el" ], @@ -8227,9 +8519,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", - "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", "cpu": [ "ppc64" ], @@ -8243,9 +8535,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", - "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", "cpu": [ "riscv64" ], @@ -8259,9 +8551,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", - "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", "cpu": [ "s390x" ], @@ -8275,9 +8567,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", - "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", "cpu": [ "x64" ], @@ -8291,9 +8583,9 @@ } }, "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", - "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", "cpu": [ "x64" ], @@ -8307,9 +8599,9 @@ } }, "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", - "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", "cpu": [ "arm64" ], @@ -8323,9 +8615,9 @@ } }, "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", - "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", "cpu": [ "x64" ], @@ -8339,9 +8631,9 @@ } }, "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", - "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", "cpu": [ "x64" ], @@ -8355,9 +8647,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", - "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", "cpu": [ "arm64" ], @@ -8371,9 +8663,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", - "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", "cpu": [ "ia32" ], @@ -8387,9 +8679,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", - "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", "cpu": [ "x64" ], @@ -8403,9 +8695,9 @@ } }, "node_modules/vite/node_modules/esbuild": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", - "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -8415,30 +8707,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.24.0", - "@esbuild/android-arm": "0.24.0", - "@esbuild/android-arm64": "0.24.0", - "@esbuild/android-x64": "0.24.0", - "@esbuild/darwin-arm64": "0.24.0", - "@esbuild/darwin-x64": "0.24.0", - "@esbuild/freebsd-arm64": "0.24.0", - "@esbuild/freebsd-x64": "0.24.0", - "@esbuild/linux-arm": "0.24.0", - "@esbuild/linux-arm64": "0.24.0", - "@esbuild/linux-ia32": "0.24.0", - "@esbuild/linux-loong64": "0.24.0", - "@esbuild/linux-mips64el": "0.24.0", - "@esbuild/linux-ppc64": "0.24.0", - "@esbuild/linux-riscv64": "0.24.0", - "@esbuild/linux-s390x": "0.24.0", - "@esbuild/linux-x64": "0.24.0", - "@esbuild/netbsd-x64": "0.24.0", - "@esbuild/openbsd-arm64": "0.24.0", - "@esbuild/openbsd-x64": "0.24.0", - "@esbuild/sunos-x64": "0.24.0", - "@esbuild/win32-arm64": "0.24.0", - "@esbuild/win32-ia32": "0.24.0", - "@esbuild/win32-x64": "0.24.0" + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" } }, "node_modules/vitefu": { diff --git a/package.json b/package.json index bd9c267..b060a6f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "gallery.badmanners.xyz", "type": "module", - "version": "1.14.0", + "version": "1.15.0", "scripts": { "postinstall": "astro sync", "dev": "astro dev", diff --git a/scripts/export-story.ts b/scripts/export-story.ts index 95ce712..2b04b1e 100644 --- a/scripts/export-story.ts +++ b/scripts/export-story.ts @@ -83,7 +83,7 @@ async function exportStory(id: string, options: { outputDir: string }) { lines.on("close", reject); }); console.log(`Astro listening on ${astroURL}`); - const response = await fetchRetry(new URL(`api/healthcheck`, astroURL), { retries: 5, retryDelay: 2000 }); + const response = await fetchRetry(new URL(`/api/healthcheck`, astroURL), { retries: 5, retryDelay: 2000 }); if (!response.ok) { throw new Error(response.statusText); } @@ -103,7 +103,11 @@ async function exportStory(id: string, options: { outputDir: string }) { let storyText = ""; try { console.log("Getting data from Astro..."); - const response = await fetch(new URL(`api/export-story/${id}`, astroURL)); + const response = await fetchRetry(new URL(`/api/export-story/${id}`, astroURL), { + retries: 5, + retryDelay: 1000, + retryOn: [404], + }); if (!response.ok) { throw new Error(`Failed to reach export-story API (status code ${response.status})`); } @@ -129,7 +133,7 @@ async function exportStory(id: string, options: { outputDir: string }) { .replace(/\?(&?[a-z][a-zA-Z0-9_-]+=[a-zA-Z0-9_-]*)*$/, ""); await copyFile(thumbnailPath, join(outputDir, `thumbnail${thumbnailPath.match(/\.[^.]+$/)![0]}`)); } else { - const thumbnail = await fetchRetry(data.thumbnail, { retries: 2, retryDelay: 10000 }); + const thumbnail = await fetchRetry(data.thumbnail, { retries: 2, retryDelay: 2000 }); if (!thumbnail.ok) { throw new Error("Failed to get thumbnail"); } diff --git a/src/assets/thumbnails/stories/bm_ff_18_party_trick.png b/src/assets/thumbnails/stories/bm_ff_18_party_trick.png new file mode 100644 index 0000000000000000000000000000000000000000..7dfd4e72eb4c07e7c69614745dcbca58b555e13b GIT binary patch literal 17175 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 literal 0 HcmV?d00001 diff --git a/src/components/ExternalPosts.astro b/src/components/ExternalPosts.astro index 033a7de..95f4214 100644 --- a/src/components/ExternalPosts.astro +++ b/src/components/ExternalPosts.astro @@ -23,66 +23,41 @@ const isVisible = eka || furaffinity || inkbunny || sofurry || weasyl; <ul id="external-posts" class="flex flex-wrap justify-around"> {eka ? ( <li class="min-w-12 grow"> - <a - class="u-syndication text-link w-full" - href={eka.link} - target="_blank" - aria-label={t(lang, "published_content/syndication_eka")} - > + <a class="u-syndication text-link flex w-full flex-col" href={eka.link} target="_blank"> <IconEkasPortal class="mx-auto" width="2rem" height="2rem" /> - <span class="sr-only">{t(lang, "published_content/syndication_eka")}</span> + <span class="text-center text-xs">{t(lang, "published_content/syndication_eka")}</span> </a> </li> ) : null} {furaffinity ? ( <li class="min-w-12 grow"> - <a - class="u-syndication text-link w-full" - href={furaffinity.link} - target="_blank" - aria-label={t(lang, "published_content/syndication_furaffinity")} - > + <a class="u-syndication text-link flex w-full flex-col" href={furaffinity.link} target="_blank"> <IconFurAffinity class="mx-auto" width="2rem" height="2rem" /> - <span class="sr-only">{t(lang, "published_content/syndication_furaffinity")}</span> + <span class="text-center text-xs">{t(lang, "published_content/syndication_furaffinity")}</span> </a> </li> ) : null} {inkbunny ? ( <li class="min-w-12 grow"> - <a - class="u-syndication text-link w-full" - href={inkbunny.link} - target="_blank" - aria-label={t(lang, "published_content/syndication_inkbunny")} - > + <a class="u-syndication text-link flex w-full flex-col" href={inkbunny.link} target="_blank"> <IconInkbunny class="mx-auto" width="2rem" height="2rem" /> - <span class="sr-only">{t(lang, "published_content/syndication_inkbunny")}</span> + <span class="text-center text-xs">{t(lang, "published_content/syndication_inkbunny")}</span> </a> </li> ) : null} {sofurry ? ( <li class="min-w-12 grow"> - <a - class="u-syndication text-link w-full" - href={sofurry.link} - target="_blank" - aria-label={t(lang, "published_content/syndication_sofurry")} - > + <a class="u-syndication text-link flex w-full flex-col" href={sofurry.link} target="_blank"> <IconSoFurry class="mx-auto" width="2rem" height="2rem" /> - <span class="sr-only">{t(lang, "published_content/syndication_sofurry")}</span> + <span class="text-center text-xs">{t(lang, "published_content/syndication_sofurry")}</span> </a> </li> ) : null} {weasyl ? ( <li class="min-w-12 grow"> - <a - class="u-syndication text-link w-full" - href={weasyl.link} - target="_blank" - aria-label={t(lang, "published_content/syndication_weasyl")} - > + <a class="u-syndication text-link flex w-full flex-col" href={weasyl.link} target="_blank"> <IconWeasyl class="mx-auto" width="2rem" height="2rem" /> - <span class="sr-only">{t(lang, "published_content/syndication_weasyl")}</span> + <span class="text-center text-xs">{t(lang, "published_content/syndication_weasyl")}</span> </a> </li> ) : null} @@ -91,15 +66,3 @@ const isVisible = eka || furaffinity || inkbunny || sofurry || weasyl; </section> ) : null } - -<script> - import tippy from "tippy.js"; - import "tippy.js/dist/tippy.css"; - - const clipboardItems = document.querySelectorAll<HTMLElement>("ul#external-posts a[aria-label]"); - - tippy(clipboardItems, { - content: (el) => (el as HTMLElement).getAttribute("aria-label")!, - theme: "bm", - }); -</script> diff --git a/src/data/stories/party-trick.md b/src/data/stories/party-trick.md new file mode 100644 index 0000000..a2701d2 --- /dev/null +++ b/src/data/stories/party-trick.md @@ -0,0 +1,130 @@ +--- +title: Party Trick +pubDate: 2025-01-02 +isAgeRestricted: true +authors: bad-manners +wordCount: 1800 +contentWarning: > + Contains: Oral vore (safe vore/endosoma), with willing male anthro jaguar predator, and willing anthro opossum prey. Also includes size difference, regurgitation, public vore, and alcohol. +thumbnail: /src/assets/thumbnails/stories/bm_ff_18_party_trick.png +description: | + Max receives an unusual request from a friend. + + Happy new year! Here's a short story for the start of the year. I intend to make and share plenty of new stuff throughout 2025 as well, although progress may be slow due to me starting out a new job. We'll see! +posts: + eka: https://aryion.com/g4/view/1087736 + furaffinity: https://www.furaffinity.net/view/59381567/ + inkbunny: https://inkbunny.net/s/3515191 + sofurry: https://www.sofurry.com/view/2216338 + sofurrybeta: https://sofurrybeta.com/s/ZmM3vgW1 + weasyl: https://www.weasyl.com/~badmanners/submissions/2454699/party-trick + bluesky: https://bsky.app/profile/badmanners.xyz/post/3lerb6lpxw22q + mastodon: https://meow.social/@BadManners/113759163137942723 +tags: + - oral vore + - anthro predator + - anthro prey + - male predator + - ambiguous gender prey + - willing predator + - willing prey + - size difference + - public vore + - flash fiction +--- + +"...But then I told him, 'I thought you were against that sort of thing!'" + +The circle of people laughed at Max's punchline, and the jaguar sipped from his beer can. After gulping, a small burp came from his lips, but the other guests in the party didn't seem to notice. + +"Then he said, 'What the fuck do you mean'?" Max used an absurdly low register to mock the voice, while not noticing the cat approaching him from behind. + +"Pssh... Maax..." The tabby cat whispered, nearly losing his balance from inebriation, but he was too quiet for the spotted feline to pay him any attention. + +"And you should've seen the look on his wife's face... She went red as a peach!" + +"Heey M-OOURP-Maxx..." + +The burp _was_ loud enough to make the jaguar turn his neck. "Oh, hey Cam." He scanned the tabby, who certainly looked way more drunk than half-an-hour ago. Max took a step back to put some space between them, and that's when he noticed Cam's arms. "...Who is that you're carrying?" + +"Ohh –hic!–, this?" He gently lifted the third-sized anthro, wearing a heavy hoodie that made it hard to tell their species apart. "Sooo I mighta told deese guys about dat trick you –hic– did in the last party we gone to, and dey wanna see it~..." + +"Cam... But that was– I-I was too drunk! I shouldn't have–" + +"Baaaah!" The tabby bleated. "But it was fine! Like you said, it's totally safe. C'mooooon~..." + +Max gave a forced smile, glancing at the rest of his group – all of them seemed confused. Then he looked at the small person that Cam was carrying – they looked like an opossum, underneath the bulky clothes. 'Goddammit', he thought to himself, 'he _knows_ I have a soft spot for opossums...' + +"...Fine, but you owe me." He blurted out before he even processed his own words. + +Cam let out an excited squeal, raising the opossum to his taller friend. It was normally considered bad Manners to manhandle smaller anthros like this, but there wasn't any other way to go about it. After setting his beer aside, he managed to get a closer look, and they were definitely an opossum – damn it! –, but it was hard to tell their gender because of their bulky clothes. Not like it mattered, anyway. + +"You probably want to ditch your clothes first." The jaguar told them. + +They blushed and shrunk even more inside of their black hoodie. "N-No, it's fine..." + +"You sure? I'm not paying to get them cleaned afterwards." + +Gosh did they look cute with those beady eyes and bashful nodding. His maw was already watering. + +Lifting them by the scuff of their hoodie, Max tried his best to ignore the insurmountable gazes set on him – which only seemed to increase over time. He closed his eyes, letting the background house music drown out any whispers. + +The jaguar opened his maw toward the ceiling, his hot breath likely tickling the opossum's legs. There was no reaction from the marsupial, who was limp in his grip. Maybe they were playing dead, or trying to contain their excitement like Max was. + +He gently lowered them, until their feet were planted against his barbed tongue. Such a sweet, earthy flavor... Max already knew what those paws looked like – cute pink digits sticking out from a fingerless glove of black fur –, so he kept his eyes closed and let his imagination do the rest. + +His jaws were wide enough to scoop the smaller opossum in one go, but Max was intent on savoring what little time they'd be between his menacing-looking teeth. He planted their butt on his tongue, legs pointing towards the back of his maw, enjoying the flavor and aroma satiating his predatorial side. The murmurs and gasps around Max seemed to intensify – as did Cam's silly giggling –, but he stood proud and erect as he continued to perform his 'trick'. + +With the rat-like tail settling on his tongue, the jaguar wiggled his muscle, feeling the weight of the anthro who was a fraction of his size. More of that warmth seeped into his tastebuds as he, in turn, breathed all over their front. Perhaps some of the other guests might've thought that this was his trick – using his maw as a chair –, but his drunk friend's growing excitement indicated otherwise. + +Planting his palm against their back, Max craned his neck further, far enough for the opossum to begin slipping forward. He opened one eye, just to make sure that his prey wasn't too close to the ceiling, and he saw the most adorable look of thrill on that blushing white face. Such a willing plaything... He had to resist the temptation and close his eye again, otherwise he might end up claiming them all in one gulp. + +His throat was kept intentionally tight, wet flesh parting ever so slightly at the nudging of the marsupial's paws. But before they entered his gullet, Max took a deep breath – it'd be his last one in a while. Now, the walls were looser, and one subdued shove planted those extremities inside, drawing a gasp from his prey. + +Saliva dribbled out the corners of his mouth, pushed aside by the living snack slowly slipping down. As his neck started to bulge out, the jaguar couldn't help but purr at the feeling of those little claws tickling his esophagus. He knew that the opossum would look even cuter padding out his belly, which wouldn't be long from now. After all, Max was still holding his breath, to avoid choking on the bite-sized anthro. + +They fit between his jaws without issue, until their hooded head finally lied on his tongue. He moved his paw away, feeling that large bulge in his spotted neck thanks to the marsupial's hips slipping down. Then, he lowered his head, keeping his maw almost shut as his palate pressed down on the marsupial's face, slowing them down just a tiny bit. Enough time for his paws to reach his shirt, undoing the buttons on the lower half. + +Once his lungs started to burn, he gave one strong 'gulp!'. It was more than enough to force the opossum into his throat, sending down that immense and writhing swelling behind his tan fur. His jaws, snapping shut before the marsupial could let out a peep, relaxed as Max rubbed his chin. That pleasant weight quickly shifted down his chest, and the jaguar gasped for air once his prey stopped dislodging his lungs. + +He opened his eyes as he faced down, just in time to see his spotted belly grow. His toned abs gave way to a slug-like mass arriving from his chest, held tight by the firm walls despite the occasional movements on its own. + +"Fuck yeaaaaah! Woo!" Cam shouted out and cheered, inviting the uncomfortably quiet crowd around them to do the same. + +Some awkwardly clapped and stared, Max noticed, although most of them were awestruck by his trick. He simply smiled proudly as he reached for his beer can, taking a swig to wash down some of the fur stuck to his throat. The drink was already warm, so it likely wouldn't bother his new occupant on the way down. Regardless, they'd have to get accustomed to the stuff already stewing in his gut. + +"See, M-Max? Everyone liked dat!" The tabby blurted out, his eyes transfixed on the bulge that gurgled with every move. "Especially dat little one, I think..." + +The jaguar flashed his teeth. "Would you like to confirm that?" + +"I-I–" + +Before Cam could conceal his embarrassment, Max reached his arm around his friend's neck, putting him in a headlock and pressing his nose right against his midriff. + +"So," the larger feline teased, "about that favor you owe me. You better start rubbing my belly, since I don't want to feel sore by the time I cough them out." + +Still blushing, Cam's only response was to stick his tongue out. His paws moved to the vaguely anthro-shaped bulge, more than happy to oblige. + +Max sighed, enjoying the feeling of his stomach walls being squeezed from both sides. Apparently, most of the guests had turned away, off to enjoy whatever else the party had to offer. Perhaps he should do the same. + +"Sorry about that interruption," he said unabashed to the circle of people staring at him, still holding Cam against his groaning gut. "Now, where was I...?" + +--- + +Tight... damp... squelchy... Though the thrumming heartbeat served as a biological clock, the opossum had lost track of time. How long had it been, hours? Minutes? The party outside seemed so distant in here. + +They were about to doze off in the jaguar's acrid chamber... Until they suddenly started shifting up, with light finally reaching their eyes again. And the first thing they saw was a towel. + +Max was careful to regurgitate them, so they wouldn't slip away or hit anything hard. From his jaws, he slowly deposited the drenched anthro on the towel he held, quickly staining the white cloth. His released prey noticed that they were in a restroom. He waited until all of that pink tail had slipped out from his maw before he decided to speak. + +"Hey there, sorry about the mess. The party is winding down and your friend told me you were her ride home, so...time to let you out and all that. How was it?" + +The opossum wrapped the towel tighter around their shoulders, intentionally looking away from the big feline. "...I-It was okay." + +Max chuckled, expecting anything but that answer. "Ouch! Well, I'll leave you to dry yourself. Oh, but first," he reached into his shirt pocket and pulled out a card, "if you ever want to do it again – even though it was 'just okay'. Just call me on that number right there." + +The hoodie-wearing marsupial took his card between their fingers, inspecting the laminated paper as drool and gunk dribbled onto it. 'MAX SIMMONS – Oncologist', it read. It was funny to receive a business card from a guy after just having been devoured by him. And they wouldn't have guessed that he was a doctor. + +Before the opossum could speak, Max closed the door behind him, leaving them alone in the restroom. They never told him their name... Oh, well. They reached into their hoodie's pocket, placing the card there and fishing out a slimy phone. The screen unlocked to the gallery app – displaying lots of pictures of the jaguar's tight pink insides. + +What a party this had been... diff --git a/src/data/stories/spontaneous-sleepover.md b/src/data/stories/spontaneous-sleepover.md index e00743b..2608444 100644 --- a/src/data/stories/spontaneous-sleepover.md +++ b/src/data/stories/spontaneous-sleepover.md @@ -27,6 +27,7 @@ tags: - willing prey - unwilling prey - same size + - public vore - flash fiction --- diff --git a/src/data/stories/the-lost-of-the-marshes/chapter-7.md b/src/data/stories/the-lost-of-the-marshes/chapter-7.md index 05a84ab..a303d10 100644 --- a/src/data/stories/the-lost-of-the-marshes/chapter-7.md +++ b/src/data/stories/the-lost-of-the-marshes/chapter-7.md @@ -35,6 +35,7 @@ tags: - willing prey - macro predator - size difference + - public vore - gay sex - transformation series: the-lost-of-the-marshes diff --git a/src/data/tags.yaml b/src/data/tags.yaml index 2a1c8bc..b61d7ad 100644 --- a/src/data/tags.yaml +++ b/src/data/tags.yaml @@ -59,9 +59,13 @@ description: Scenarios where at least one of the predators is a woman and/or female-presenting. - name: non-binary predator description: Scenarios where at least one of the predators has a non-binary gender expression, be they genderless/agender, intersex, androgynous, gender-fluid, non-binary and/or non-binary-presenting, et cetera, regardless of undergoing or having undergone gender transition or not. - - name: { en: ambiguous gender predator, tok: jan pi wawa mute li meli anu mije } + - name: + { + en: ambiguous gender predator, + tok: jan pi wawa mute li meli anu mije, + } description: - en: Scenarios where the gender at least one of the predators is left ambiguous. + en: Scenarios where the gender of at least one of the predators is left ambiguous. tok: jan pi moku musi pi wawa mute la toki tan meli anu mije anu tonsi li lon ala. - name: male prey description: Scenarios where at least one of the prey is a man and/or male-presenting. @@ -75,9 +79,10 @@ - female prey - name: non-binary prey description: Scenarios where at least one of the predators has a non-binary gender expression, be they genderless/agender, intersex, androgynous, gender-fluid, non-binary and/or non-binary-presenting, et cetera, regardless of undergoing or having undergone gender transition or not. - - name: { en: ambiguous gender prey, tok: jan pi wawa lili li meli anu mije } + - name: + { en: ambiguous gender prey, tok: jan pi wawa lili li meli anu mije } description: - en: Scenarios where the gender at least one of the predators is left ambiguous. + en: Scenarios where the gender of at least one of the prey is left ambiguous. tok: jan pi moku musi pi wawa lili la toki tan meli anu mije anu tonsi li lon ala. - id: relative-size category: Relative size @@ -113,7 +118,8 @@ description: Scenarios where at least one of the prey participates in vore willingly. - name: semi-willing prey description: Scenarios where the willingness of at least one of the prey might be partial, oscillating between willing and unwilling, somewhere in-between, or ambiguous. - - name: { en: unwilling prey, tok: jan pi wawa lili li wile ala e moku musi } + - name: + { en: unwilling prey, tok: jan pi wawa lili li wile ala e moku musi } description: en: Scenarios where at least one of the prey participates in vore unwillingly. tok: jan pi moku musi pi wawa lili la jan li wile ala e moku musi. @@ -176,6 +182,8 @@ - role reversal - name: multiple prey description: Scenarios where one predator consumes multiple prey at once. + - name: public vore + description: Scenarios where vore is performed in public. - name: messy stomach description: Scenarios where a prey visits a messy stomach, usually with semi-digested food inside. related: @@ -264,7 +272,7 @@ en: Short-format stories with no more than 2,500 words. tok: lipu li jo e nanpa nimi lili. - name: toki pona - description: + description: en: Stories written in toki pona, the language of good. tok: lipu li kepeken toki pona. - name: behind the scenes @@ -291,4 +299,4 @@ - name: Muno description: Content that features my character Muno, the snake. - name: Yolk - description: Content that features <a href="https://www.furaffinity.net/user/vampire101" target="_blank" rel="nofollow">Vampire101's</a> fursona, Yolk the monkey. \ No newline at end of file + description: Content that features <a href="https://www.furaffinity.net/user/vampire101" target="_blank" rel="nofollow">Vampire101's</a> fursona, Yolk the monkey. diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 601a948..0f3ae9c 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -68,7 +68,7 @@ const UI_STRINGS = { }, // Shared strings for published content (stories + games) "published_content/return_to_series": { - en: (seriesName: string) => `Return to ${seriesName}`, + en: "Return to series", }, "published_content/go_to_description": { en: "Go to description", diff --git a/src/layouts/PublishedContentLayout.astro b/src/layouts/PublishedContentLayout.astro index 635dda2..2418fa2 100644 --- a/src/layouts/PublishedContentLayout.astro +++ b/src/layouts/PublishedContentLayout.astro @@ -105,9 +105,7 @@ const thumbnail = props.thumbnail && (await getImage({ src: props.thumbnail, width: props.thumbnailWidth, height: props.thumbnailHeight })); -const returnTo = series - ? t(props.lang, "published_content/return_to_series", series.data.name) - : props.labelReturnTo.title; +const returnTo = series ? t(props.lang, "published_content/return_to_series") : props.labelReturnTo.title; --- <BaseLayout pageTitle={props.title} lang={props.lang} isAgeRestricted={props.isAgeRestricted}> @@ -145,25 +143,23 @@ const returnTo = series class="pointer-events-none absolute top-0 h-[80vh] py-2 pl-2 lg:inset-y-0 lg:h-full" > <div - class="pointer-events-auto sticky top-6 flex rounded-full bg-white px-1 py-1 shadow-md dark:bg-black print:hidden" + class="pointer-events-auto sticky top-6 flex flex-col rounded-xl bg-white px-1 py-1 shadow-md dark:bg-black print:hidden" > - <a href={series ? series.data.link : props.labelReturnTo.link} class="text-link my-1 p-2" aria-label={returnTo}> + <a href={series ? series.data.link : props.labelReturnTo.link} class="text-link mx-1 flex items-center p-2"> <IconArrowBack width="1.25rem" height="1.25rem" /> + <span class="ml-1 text-sm">{returnTo}</span> </a> - <a - href="#meta" - class="text-link my-1 border-l border-stone-300 p-2 dark:border-stone-700" - aria-label={t(props.lang, "published_content/go_to_description")} - > + <a href="#meta" class="text-link mx-1 flex items-center border-t border-stone-300 p-2 dark:border-stone-700"> <IconCircleInfo width="1.25rem" height="1.25rem" /> + <span class="ml-1 text-sm">{t(props.lang, "published_content/go_to_description")}</span> </a> <button - class="text-link my-1 border-l border-stone-300 p-2 dark:border-stone-700" - aria-label={t(props.lang, "published_content/toggle_dark_mode")} + class="text-link mx-1 flex items-center border-t border-stone-300 p-2 dark:border-stone-700" @click="darkMode = !darkMode; localStorage.colorScheme = darkMode ? 'dark' : 'light'" > <IconSun width="1.25rem" height="1.25rem" class="hidden dark:block" /> <IconMoon width="1.25rem" height="1.25rem" class="block dark:hidden" /> + <span class="ml-1 text-sm">{t(props.lang, "published_content/toggle_dark_mode")}</span> </button> </div> </div> @@ -461,12 +457,6 @@ const returnTo = series import tippy from "tippy.js"; import "tippy.js/dist/tippy.css"; - tippy("#toolbox-buttons :is(a, button)[aria-label]", { - content: (el) => el.getAttribute("aria-label")!, - placement: "bottom", - theme: "bm", - }); - const tooltipItems = document.querySelectorAll<HTMLElement>("[title][data-tooltip]"); tooltipItems.forEach((el) => el.setAttribute("data-tooltip", el.title)); tippy(tooltipItems, { diff --git a/src/pages/api/export-story/[...id].ts b/src/pages/api/export-story/[...id].ts index 2784fb6..b19f12f 100644 --- a/src/pages/api/export-story/[...id].ts +++ b/src/pages/api/export-story/[...id].ts @@ -69,7 +69,7 @@ export const GET: APIRoute<Props, Params> = async ({ props: { story }, site }) = : getWebsiteLinkForUser(user, exportWebsite, (user) => getUsernameForLang(user, lang)); const storyDescription = await [ story.data.description, - `*${t(lang, "story/warnings", story.data.wordCount, story.data.contentWarning)}*`, + `_${t(lang, "story/warnings", story.data.wordCount, story.data.contentWarning)}_`, t( lang, "export_story/authors",