An empty `imageUrl=`, `logoUrl=` or `template=` returns an error instead of the default
Les mainteneurs répondent en général sous 1 jour
@Saifjafri212213 y travaille déjà.
Depuis le 21/10/2026.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 88/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- typescript
Piste de recherche
Commencez dans src/lib/api-validation.ts en comparant le prétraitement existant de width et height aux schémas de template, logoUrl et imageUrl. Vérifiez les tests du schéma dans tests/api/og.test.ts, puis les tests de routes qui simulent le renderer. Le travail est terminé lorsque les valeurs vides utilisent les valeurs par défaut, que les URL non vides invalides renvoient toujours 400 et que les tests du schéma et des routes couvrent ces cas.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
/api/og treats an empty parameter as "use the default": title= or bgColor= with nothing after them still give the normal image. Three parameters don't:
- https://og.codercops.com/api/og?template=blog-photo-overlay&imageUrl= returns 400
{"error":"imageUrl: Invalid url"}. WithoutimageUrl=, the same template renders with its gradient background. logoUrl=returns 400{"error":"logoUrl: Invalid url"}with any template, for example https://og.codercops.com/api/og?template=blog-minimal-dark&logoUrl= (no template readslogoUrlyet, but the schema still checks it).- https://og.codercops.com/api/og?template= returns 404
{"error":"Template \"\" not found"}. The API docs say the default template isblog-minimal-dark(src/pages/api-docs.astro, line 68), and that's what you get whentemplateis left out.
This is easy to hit when the URL is built from CMS data, like imageUrl={{ post.cover }} on a post without a cover image: the whole OG image fails instead of falling back.
In src/lib/api-validation.ts, logoUrl and imageUrl (lines 14 and 15) are z.string().url().optional(). .optional() only covers a missing key, so an empty string goes on to .url() and fails. template (line 4) uses .default('blog-minimal-dark'), which also only applies when the key is missing. width and height (lines 16 to 23) already handle this: z.preprocess turns '' into undefined before the rest of the check.
What to do
- Use the same
z.preprocessforlogoUrl,imageUrlandtemplate, so an empty value counts as missing.template=then getsblog-minimal-dark, and the two URLs fall back to the template's defaults. - A value that's there but isn't a URL, like
imageUrl=not-a-url, should still return 400.
Where to look
src/lib/api-validation.ts:template(line 4),logoUrlandimageUrl(lines 14 and 15), and thewidth/heightpreprocess (lines 16 to 23)src/pages/api/og.ts: the 400 for invalid params (lines 41 to 47) and the 404 for an unknown template (lines 61 to 70)tests/api/og.test.ts: the schema tests (line 11) and the route tests, which mock the renderer (from line 269)
Acceptance criteria
-
?template=blog-photo-overlay&imageUrl=and?logoUrl=return the same image as leaving the parameter out -
?template=rendersblog-minimal-dark -
imageUrl=not-a-urlstill returns 400 - Tests for the schema and for the route
-
npm run check,npm run testandnpm run buildpass
Want to work on this? Comment below and I'll assign it to you. Please take one issue at a time, branch off dev, and open your PR against dev with Closes #166 in the description.
- Langage dominant
- TypeScript
- Étoiles
- 8
- Forks
- 4
- Merge moyen
- 5 h 44 min
- PR mergées (30 j)
- 83
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de codercops/ogcops
-
Add the Order Status e-commerce template (`ecommerce-order-status`)Peut-être pris @piyusshhjangid l’a pris il y a 1 jour. Ouvertegood first issue hacktoberfest templates
codercops/ogcops#181 · 4 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
Add the Cheat Sheet tutorial template (`tutorial-cheat-sheet`)Peut-être pris @srikar-naidu l’a pris il y a 1 jour. Ouvertehacktoberfest help wanted templates
Difficulté 2/5 1-3 heures Accessibilité débutants 45/100
codercops/ogcops#180 · 3 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Add the Call for Speakers event template (`event-call-for-speakers`)Peut-être pris @Saifjafri212213 l’a pris il y a 1 jour. Ouvertegood first issue hacktoberfest templates
codercops/ogcops#177 · 2 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
Add the Day Streak developer template (`developer-day-streak`)Peut-être pris @srikar-naidu l’a pris il y a 1 jour. Ouvertehacktoberfest help wanted templates
codercops/ogcops#176 · 3 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
Hacktoberfest 2026: start hereOuvertehacktoberfest
Difficulté 1/5 Moins d'une heure Accessibilité débutants 35/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de codercops/ogcops
Issues similaires
-
level/task type/bug
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
wazuh/wazuh-dashboard-plugins#9508 ·
Les mainteneurs répondent en général sous 1 jour
-
Testnet EOL page links Zonescan mainnetPeut-être pris @napelvs l’a pris aujourd’hui. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 76/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Azure-Samples/azure-search-openai-demo#3249 ·
Les mainteneurs répondent en général sous 1 jour
-
[Docs] docs/architecture.mermaid leaves out 21 of the 51 src/ directoriesPeut-être pris @uyg7x l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 1 jour
-
enhancement status:needs-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
dongdongbh/Mindwtr#1438 ·
Les mainteneurs répondent en général sous 1 jour