ticketlens 0.38.24 → 0.38.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ticketlens",
3
- "version": "0.38.24",
3
+ "version": "0.38.25",
4
4
  "description": "Jira CLI for developers — fetch ticket context, triage your queue, and stop tab-switching. Zero dependencies, all local.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -3,7 +3,7 @@
3
3
  * Centralised here to avoid triplicating the regex and warning logic.
4
4
  */
5
5
 
6
- export const DEFAULT_API_BASE = 'https://api.ticketlens.app';
6
+ export const DEFAULT_API_BASE = 'http://api.ticketlens.test';
7
7
  export const DEFAULT_SITE_BASE = 'https://ticketlens.app';
8
8
 
9
9
  // Matches localhost, 127.0.0.1, and any hostname ending in .test or .local,
@@ -34,7 +34,16 @@ const HYPHENATED_COMPOUND_RE = /^[A-Za-z]+(-[A-Za-z]+)+$/;
34
34
 
35
35
  const HARD_REJECT_PATTERNS = [
36
36
  { name: 'AWS access key', re: /AKIA[0-9A-Z]{16}/ },
37
- { name: 'private key block', re: /-----BEGIN (RSA |EC |OPENSSH |DSA )?PRIVATE KEY-----/ },
37
+ // \s* (not a literal space) between segments: this is the only entry with
38
+ // required internal spacing, and hardRejectRuns (no-separator rejoin) and
39
+ // despacedCombined (whitespace stripped) both destroy a literal space the
40
+ // same way they correctly neutralize whitespace-splitting on every other
41
+ // pattern here — so a tab, extra spaces, a newline, or no separator at all
42
+ // used to bypass this entry completely (backlog 1d). \s* closes all of
43
+ // those in one change since it's tested against combined, hardRejectRuns,
44
+ // and despacedCombined identically. JS's \s is already Unicode-aware
45
+ // (including U+FEFF), so no separate handling is needed here.
46
+ { name: 'private key block', re: /-----BEGIN\s*(RSA\s*|EC\s*|OPENSSH\s*|DSA\s*)?PRIVATE\s*KEY-----/ },
38
47
  { name: 'JSON Web Token (JWT)', re: /eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/ },
39
48
  { name: 'API key', re: /\b(sk-|gsk_)[A-Za-z0-9]{20,}\b/ },
40
49
  { name: 'GitHub token', re: /\bgh[pousr]_[A-Za-z0-9]{20,}\b/ },
@@ -192,8 +201,13 @@ function isHyphenatedWordCompound(token) {
192
201
  * text into false-positive "random" strings (verified empirically — see the
193
202
  * regression test for "PROD-123456 for background"). Entropy-based detection
194
203
  * is a safety net, not a cryptographic guarantee; the well-known secret
195
- * shapes in HARD_REJECT_PATTERNS are the layer that's fully whitespace- and
196
- * word-insertion-proof, since they match a specific literal prefix.
204
+ * shapes in HARD_REJECT_PATTERNS are the layer that's whitespace-proof,
205
+ * since they match a specific literal prefix — with one exception: the
206
+ * private-key-block entry has two internal separator points (around the
207
+ * optional algorithm word and before KEY), and a word inserted at either
208
+ * one still defeats it, exactly as it did before backlog 1d's whitespace
209
+ * fix (that fix closed whitespace-substitution/removal, not word
210
+ * insertion — the same accepted-gap class as the possessive case above).
197
211
  */
198
212
  function isLabelWord(token) {
199
213
  const stripped = stripEdgePunctuation(token);