Rexact
Cheatsheet

Regex Sentry DSN (Data Source Name)

A Sentry DSN is written {PROTOCOL}://{PUBLIC_KEY}:{SECRET_KEY}@{HOST}{PATH}/{PROJECT_ID}. The secret key is optional and effectively deprecated, and the project ID is an integer. Sentry publishes two patterns: SaaS (https://[a-f0-9]{32}@o\d+\.ingest(\.[a-z]+)?\.sentry\.io/\d+) and self-hosted or Relay (https?://[a-f0-9]{32}@[^/]+/\d+), yet the SDK documentation's example (https://public@sentry.example.com/1) has a 6-letter key. The JavaScript SDK's pattern leaves validation to later code: on its own it accepts 'ftp://' and a project 'abc'. Here's an anchored pattern accepting both families, compared against these three. A DSN is not a secret.

/^https?://\w+(?::\w+)?@(?:\[[:.%\w]+\]|[\w.-]+)(?::\d+)?(?:/[\w.-]+)*/\d+$/
passes 23/23 cases

Comparison of existing patterns

Implementation

const re = new RegExp("^https?://\\w+(?::\\w+)?@(?:\\[[:.%\\w]+\\]|[\\w.-]+)(?::\\d+)?(?:/[\\w.-]+)*/\\d+$", "");
re.test(input);

Limits

  • Valide seulement la FORME : ne prouve pas que le projet existe ni que la clé est active. Pas de contrôle du nombre de chiffres de l'identifiant, ni du format de 32 hexadécimaux que la page de formats de jetons indique pour la clé : le motif accepte tout mot (\w+), comme le SDK, car la documentation donne elle-même « public » en exemple.
  • L'hôte est accepté dès qu'il est composé de lettres, chiffres, tirets et points (ou d'une adresse IPv6 entre crochets) : le motif ne vérifie ni le domaine ni le format *.ingest.sentry.io, et le port n'est pas borné à 65535.
  • Un DSN n'est pas un secret (il ne permet que d'envoyer des événements) : ne le confondez pas avec les jetons d'authentification Sentry (sntryu_…, sntrys_…), un autre format.

Related pages