[v2] URI template strict expansions leave !'()* unencoded
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 84/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- typescript
- Domaine
- api
Piste de recherche
Commencez par packages/core-internal/src/shared/uriTemplate.ts, en vous concentrant sur UriTemplate.expand() et encodeValue(), puis exécutez l’exemple repro.mjs avec Node.js 24 ou une version ultérieure. C’est terminé lorsque les expansions simple et query encodent !'()* en pourcentage comme indiqué, tandis que les expansions reserved et fragment conservent leurs caractères autorisés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
What happened?
UriTemplate.expand() leaves !'()* unchanged in simple expansions. Query values have the same problem: search{?q} with q: 'hello!' produces search?q=hello!.
encodeURIComponent() leaves these characters unchanged, and encodeValue() returns that output directly for strict expansion operators.
What did you expect?
Expected output from the snippet below:
%21%27%28%29%2A
search?q=hello%21
RFC 6570 section 3.2.1 permits unreserved characters in strict variable expansions. The five characters above are reserved and need percent-encoding. Reserved and fragment expansions can keep them.
Code to reproduce
Save this as repro.mjs at the SDK repository root and run node repro.mjs with Node.js 24 or later. It imports the source module directly.
import { UriTemplate } from './packages/core-internal/src/shared/uriTemplate.ts';
const value = "!'()*";
console.log(new UriTemplate('{value}').expand({ value }));
console.log(new UriTemplate('search{?q}').expand({ q: 'hello!' }));
Current output:
!'()*
search?q=hello!
SDK version
main at e16d27729ea2fae144a6d957fd0372d9eb0e6c58 (v2 source checkout). Tested with Node.js 24.12.0.
Area
Other
- Langage dominant
- TypeScript
- Étoiles
- 13.7k
- Forks
- 2.3k
- Merge moyen
- 1 j 2 h
- PR mergées (30 j)
- 60
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun 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 modelcontextprotocol/typescript-sdk
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
modelcontextprotocol/typescript-sdk#3103 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
modelcontextprotocol/typescript-sdk#3101 ·
Les mainteneurs répondent en général sous 1 jour
-
[v1.x] Protocol.request keeps its abort listener after the request resolved, so a later abort sends notifications/cancelled for an answered request (1.30.0)Peut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouvertev1
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
modelcontextprotocol/typescript-sdk#3090 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
[v2] e2e `protocol:timeout:max-total` is flaky over SSE: fake timers advance before the request reaches the serverPeut-être pris @Singmin l’a pris il y a 8 jours. Ouvertev1 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
modelcontextprotocol/typescript-sdk#3045 ·
Les mainteneurs répondent en général sous 1 jour
-
[v1.x] Backport #2654: `notifications/cancelled` with `requestId: 0` is ignored, so the first server→client request cannot be cancelled (still in 1.32.1)Peut-être pris @CloudCorpRecords l’a pris il y a 9 jours. Ouvertev1
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
modelcontextprotocol/typescript-sdk#3043 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de modelcontextprotocol/typescript-sdk
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
VictoriaMetrics/victorialogs-datasource#747 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 79/100
Les mainteneurs répondent en général sous 1 jour
-
bug from-studio
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
esengine/DeepSeek-Reasonix#14608 ·
Les mainteneurs répondent en général sous 1 jour
-
triage
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
getarcaneapp/arcane#4590 ·
Les mainteneurs répondent en général sous 1 jour
-
支持对已取消(cancelled)任务生成报告Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
Clouditera/VulnHunter#57 ·