cbrowser 18.64.0 → 18.65.0

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.
Files changed (45) hide show
  1. package/dist/analysis/accessibility-empathy.d.ts.map +1 -1
  2. package/dist/analysis/accessibility-empathy.js +48 -24
  3. package/dist/analysis/accessibility-empathy.js.map +1 -1
  4. package/dist/analysis/agent-ready-audit.d.ts.map +1 -1
  5. package/dist/analysis/agent-ready-audit.js +38 -34
  6. package/dist/analysis/agent-ready-audit.js.map +1 -1
  7. package/dist/cif-score.d.ts +141 -0
  8. package/dist/cif-score.d.ts.map +1 -0
  9. package/dist/cif-score.js +634 -0
  10. package/dist/cif-score.js.map +1 -0
  11. package/dist/ideal-profiles-gap.d.ts +92 -0
  12. package/dist/ideal-profiles-gap.d.ts.map +1 -0
  13. package/dist/ideal-profiles-gap.js +325 -0
  14. package/dist/ideal-profiles-gap.js.map +1 -0
  15. package/dist/ideal-profiles.d.ts +70 -0
  16. package/dist/ideal-profiles.d.ts.map +1 -0
  17. package/dist/ideal-profiles.js +404 -0
  18. package/dist/ideal-profiles.js.map +1 -0
  19. package/dist/mcp-server-remote.d.ts.map +1 -1
  20. package/dist/mcp-server-remote.js +24 -10
  21. package/dist/mcp-server-remote.js.map +1 -1
  22. package/dist/mcp-tools/base/visual-testing-tools.d.ts.map +1 -1
  23. package/dist/mcp-tools/base/visual-testing-tools.js +3 -2
  24. package/dist/mcp-tools/base/visual-testing-tools.js.map +1 -1
  25. package/dist/mcp-tools/persona-creation-tools.d.ts.map +1 -1
  26. package/dist/mcp-tools/persona-creation-tools.js +119 -15
  27. package/dist/mcp-tools/persona-creation-tools.js.map +1 -1
  28. package/dist/types.d.ts +4 -0
  29. package/dist/types.d.ts.map +1 -1
  30. package/dist/types.js.map +1 -1
  31. package/dist/visual/attention-transport.d.ts +2 -2
  32. package/dist/visual/attention-transport.d.ts.map +1 -1
  33. package/dist/visual/attention-transport.js +125 -18
  34. package/dist/visual/attention-transport.js.map +1 -1
  35. package/dist/visual/cognitive-transport-chain.d.ts.map +1 -1
  36. package/dist/visual/cognitive-transport-chain.js +6 -1
  37. package/dist/visual/cognitive-transport-chain.js.map +1 -1
  38. package/dist/visual/cognitive-transport.d.ts.map +1 -1
  39. package/dist/visual/cognitive-transport.js +18 -4
  40. package/dist/visual/cognitive-transport.js.map +1 -1
  41. package/dist/visual/perceptual-transport.d.ts +15 -3
  42. package/dist/visual/perceptual-transport.d.ts.map +1 -1
  43. package/dist/visual/perceptual-transport.js +92 -6
  44. package/dist/visual/perceptual-transport.js.map +1 -1
  45. package/package.json +1 -1
@@ -0,0 +1,404 @@
1
+ /**
2
+ * Ideal Interface Profiles — Research-backed attention targets per persona
3
+ *
4
+ * Defines the ideal attention distribution, structural constraints, and
5
+ * cognitive thresholds for each persona. Used by the gap score calculator
6
+ * to measure how well a page serves a specific user type.
7
+ *
8
+ * Also defines intent presets that modify attention weights based on
9
+ * user goals (learn, buy, support, compare, explore, signup).
10
+ *
11
+ * @version 1.0.0
12
+ * @since v18.60.0
13
+ */
14
+ // ── Ideal Profiles ──
15
+ export const IDEAL_PROFILES = [
16
+ {
17
+ persona: 'cognitive-adhd',
18
+ attentionTargets: {
19
+ cta: { min: 30, max: 60, ideal: 45 },
20
+ heading: { min: 15, max: 30, ideal: 20 },
21
+ navigation: { min: 0, max: 15, ideal: 5 },
22
+ content: { min: 5, max: 20, ideal: 10 },
23
+ decorative: { min: 0, max: 5, ideal: 0 },
24
+ search: { min: 0, max: 10, ideal: 5 },
25
+ },
26
+ structure: {
27
+ maxNavItems: 5,
28
+ maxCTAsAboveFold: 1,
29
+ maxContentBlockWords: 40,
30
+ requireVisibleLabels: true,
31
+ requirePredictableLayout: true,
32
+ maxAnimations: 0,
33
+ requireColorRedundancy: false,
34
+ minTouchTarget: 44,
35
+ maxInformationDensity: 0.3,
36
+ },
37
+ thresholds: {
38
+ maxCTC: 0.6,
39
+ maxAbandonmentRisk: 40,
40
+ maxDecisionComplexity: 0.3,
41
+ maxReadabilityCost: 0.4,
42
+ },
43
+ research: [
44
+ 'Barkley 1997',
45
+ 'Castellanos & Tannock 2002',
46
+ 'Sonuga-Barke 2005',
47
+ ],
48
+ },
49
+ {
50
+ persona: 'autism-spectrum',
51
+ attentionTargets: {
52
+ cta: { min: 15, max: 35, ideal: 25 },
53
+ heading: { min: 20, max: 40, ideal: 30 },
54
+ navigation: { min: 10, max: 25, ideal: 15 },
55
+ content: { min: 15, max: 30, ideal: 20 },
56
+ decorative: { min: 0, max: 3, ideal: 0 },
57
+ search: { min: 5, max: 15, ideal: 10 },
58
+ },
59
+ structure: {
60
+ maxNavItems: 7,
61
+ maxCTAsAboveFold: 2,
62
+ maxContentBlockWords: 80,
63
+ requireVisibleLabels: true,
64
+ requirePredictableLayout: true,
65
+ maxAnimations: 0,
66
+ requireColorRedundancy: true,
67
+ minTouchTarget: 44,
68
+ maxInformationDensity: 0.4,
69
+ },
70
+ thresholds: {
71
+ maxCTC: 0.7,
72
+ maxAbandonmentRisk: 50,
73
+ maxDecisionComplexity: 0.4,
74
+ maxReadabilityCost: 0.5,
75
+ },
76
+ research: [
77
+ 'Baron-Cohen 2009',
78
+ 'Happ\u00e9 & Frith 2006',
79
+ 'Kandalaft et al. 2013',
80
+ ],
81
+ },
82
+ {
83
+ persona: 'motor-impairment-tremor',
84
+ attentionTargets: {
85
+ cta: { min: 20, max: 40, ideal: 30 },
86
+ heading: { min: 15, max: 30, ideal: 20 },
87
+ navigation: { min: 5, max: 20, ideal: 10 },
88
+ content: { min: 10, max: 25, ideal: 15 },
89
+ decorative: { min: 0, max: 10, ideal: 5 },
90
+ search: { min: 5, max: 15, ideal: 10 },
91
+ },
92
+ structure: {
93
+ maxNavItems: 5,
94
+ maxCTAsAboveFold: 2,
95
+ maxContentBlockWords: 100,
96
+ requireVisibleLabels: true,
97
+ requirePredictableLayout: false,
98
+ maxAnimations: 5,
99
+ requireColorRedundancy: false,
100
+ minTouchTarget: 48,
101
+ maxInformationDensity: 0.5,
102
+ },
103
+ thresholds: {
104
+ maxCTC: 0.8,
105
+ maxAbandonmentRisk: 50,
106
+ maxDecisionComplexity: 0.5,
107
+ maxReadabilityCost: 0.6,
108
+ },
109
+ research: [],
110
+ },
111
+ {
112
+ persona: 'first-timer',
113
+ attentionTargets: {
114
+ cta: { min: 25, max: 50, ideal: 35 },
115
+ heading: { min: 20, max: 35, ideal: 25 },
116
+ navigation: { min: 10, max: 25, ideal: 15 },
117
+ content: { min: 10, max: 20, ideal: 15 },
118
+ decorative: { min: 0, max: 15, ideal: 5 },
119
+ search: { min: 0, max: 10, ideal: 5 },
120
+ },
121
+ structure: {
122
+ maxNavItems: 7,
123
+ maxCTAsAboveFold: 2,
124
+ maxContentBlockWords: 80,
125
+ requireVisibleLabels: true,
126
+ requirePredictableLayout: true,
127
+ maxAnimations: 3,
128
+ requireColorRedundancy: false,
129
+ minTouchTarget: 44,
130
+ maxInformationDensity: 0.5,
131
+ },
132
+ thresholds: {
133
+ maxCTC: 0.8,
134
+ maxAbandonmentRisk: 50,
135
+ maxDecisionComplexity: 0.5,
136
+ maxReadabilityCost: 0.6,
137
+ },
138
+ research: [],
139
+ },
140
+ {
141
+ persona: 'impatient-user',
142
+ attentionTargets: {
143
+ cta: { min: 40, max: 70, ideal: 55 },
144
+ heading: { min: 10, max: 20, ideal: 15 },
145
+ navigation: { min: 0, max: 10, ideal: 5 },
146
+ content: { min: 0, max: 10, ideal: 5 },
147
+ decorative: { min: 0, max: 5, ideal: 0 },
148
+ search: { min: 10, max: 25, ideal: 15 },
149
+ },
150
+ structure: {
151
+ maxNavItems: 3,
152
+ maxCTAsAboveFold: 1,
153
+ maxContentBlockWords: 20,
154
+ requireVisibleLabels: true,
155
+ requirePredictableLayout: true,
156
+ maxAnimations: 0,
157
+ requireColorRedundancy: false,
158
+ minTouchTarget: 44,
159
+ maxInformationDensity: 0.2,
160
+ },
161
+ thresholds: {
162
+ maxCTC: 0.5,
163
+ maxAbandonmentRisk: 30,
164
+ maxDecisionComplexity: 0.2,
165
+ maxReadabilityCost: 0.3,
166
+ },
167
+ research: [],
168
+ },
169
+ {
170
+ persona: 'elderly-user',
171
+ attentionTargets: {
172
+ cta: { min: 20, max: 40, ideal: 30 },
173
+ heading: { min: 20, max: 35, ideal: 25 },
174
+ navigation: { min: 10, max: 25, ideal: 20 },
175
+ content: { min: 10, max: 25, ideal: 15 },
176
+ decorative: { min: 0, max: 5, ideal: 2 },
177
+ search: { min: 0, max: 10, ideal: 5 },
178
+ },
179
+ structure: {
180
+ maxNavItems: 5,
181
+ maxCTAsAboveFold: 2,
182
+ maxContentBlockWords: 60,
183
+ requireVisibleLabels: true,
184
+ requirePredictableLayout: true,
185
+ maxAnimations: 0,
186
+ requireColorRedundancy: true,
187
+ minTouchTarget: 48,
188
+ maxInformationDensity: 0.3,
189
+ },
190
+ thresholds: {
191
+ maxCTC: 0.7,
192
+ maxAbandonmentRisk: 45,
193
+ maxDecisionComplexity: 0.4,
194
+ maxReadabilityCost: 0.4,
195
+ },
196
+ research: [],
197
+ },
198
+ {
199
+ persona: 'low-vision-magnified',
200
+ attentionTargets: {
201
+ cta: { min: 20, max: 40, ideal: 30 },
202
+ heading: { min: 20, max: 40, ideal: 30 },
203
+ navigation: { min: 5, max: 20, ideal: 10 },
204
+ content: { min: 5, max: 20, ideal: 10 },
205
+ decorative: { min: 0, max: 5, ideal: 0 },
206
+ search: { min: 5, max: 15, ideal: 10 },
207
+ },
208
+ structure: {
209
+ maxNavItems: 5,
210
+ maxCTAsAboveFold: 2,
211
+ maxContentBlockWords: 60,
212
+ requireVisibleLabels: true,
213
+ requirePredictableLayout: true,
214
+ maxAnimations: 0,
215
+ requireColorRedundancy: true,
216
+ minTouchTarget: 48,
217
+ maxInformationDensity: 0.3,
218
+ },
219
+ thresholds: {
220
+ maxCTC: 0.8,
221
+ maxAbandonmentRisk: 50,
222
+ maxDecisionComplexity: 0.5,
223
+ maxReadabilityCost: 0.5,
224
+ },
225
+ research: [],
226
+ },
227
+ {
228
+ persona: 'dyslexic-user',
229
+ attentionTargets: {
230
+ cta: { min: 20, max: 40, ideal: 30 },
231
+ heading: { min: 25, max: 40, ideal: 30 },
232
+ navigation: { min: 5, max: 20, ideal: 10 },
233
+ content: { min: 5, max: 15, ideal: 10 },
234
+ decorative: { min: 0, max: 10, ideal: 5 },
235
+ search: { min: 5, max: 15, ideal: 10 },
236
+ },
237
+ structure: {
238
+ maxNavItems: 5,
239
+ maxCTAsAboveFold: 2,
240
+ maxContentBlockWords: 40,
241
+ requireVisibleLabels: true,
242
+ requirePredictableLayout: true,
243
+ maxAnimations: 1,
244
+ requireColorRedundancy: false,
245
+ minTouchTarget: 44,
246
+ maxInformationDensity: 0.3,
247
+ },
248
+ thresholds: {
249
+ maxCTC: 0.7,
250
+ maxAbandonmentRisk: 45,
251
+ maxDecisionComplexity: 0.4,
252
+ maxReadabilityCost: 0.3,
253
+ },
254
+ research: [],
255
+ },
256
+ ];
257
+ // ── Intent Presets ──
258
+ export const INTENT_PRESETS = [
259
+ {
260
+ id: 'learn',
261
+ name: 'Learn / Research',
262
+ description: 'User wants to understand a topic, read documentation, or educate themselves',
263
+ elementModifiers: {
264
+ cta: 0.3,
265
+ heading: 1.8,
266
+ navigation: 1.3,
267
+ content: 1.5,
268
+ price: 0.2,
269
+ search: 1.0,
270
+ form: 0.3,
271
+ trust: 0.5,
272
+ },
273
+ keywordPatterns: ['how', 'what is', 'learn', 'understand', 'about', 'documentation', 'guide', 'tutorial'],
274
+ },
275
+ {
276
+ id: 'buy',
277
+ name: 'Purchase / Convert',
278
+ description: 'User intends to buy a product or complete a transaction',
279
+ elementModifiers: {
280
+ cta: 2.0,
281
+ heading: 0.8,
282
+ navigation: 0.5,
283
+ content: 0.3,
284
+ price: 2.0,
285
+ search: 0.5,
286
+ form: 1.5,
287
+ trust: 1.8,
288
+ },
289
+ keywordPatterns: ['buy', 'purchase', 'price', 'pricing', 'order', 'checkout', 'add to cart', 'shop'],
290
+ },
291
+ {
292
+ id: 'support',
293
+ name: 'Get Help / Support',
294
+ description: 'User is looking for help, troubleshooting, or customer support',
295
+ elementModifiers: {
296
+ cta: 0.5,
297
+ heading: 1.0,
298
+ navigation: 1.5,
299
+ content: 1.2,
300
+ price: 0.2,
301
+ search: 2.0,
302
+ form: 1.3,
303
+ trust: 0.5,
304
+ },
305
+ keywordPatterns: ['help', 'support', 'contact', 'issue', 'problem', 'fix', 'troubleshoot', 'FAQ'],
306
+ },
307
+ {
308
+ id: 'compare',
309
+ name: 'Compare Options',
310
+ description: 'User is evaluating alternatives and comparing features or prices',
311
+ elementModifiers: {
312
+ cta: 0.5,
313
+ heading: 1.5,
314
+ navigation: 0.8,
315
+ content: 1.2,
316
+ price: 2.0,
317
+ search: 0.5,
318
+ form: 0.3,
319
+ trust: 1.0,
320
+ },
321
+ keywordPatterns: ['compare', 'vs', 'versus', 'difference', 'which', 'best', 'alternative'],
322
+ },
323
+ {
324
+ id: 'explore',
325
+ name: 'Browse / Explore',
326
+ description: 'User is casually browsing without a specific goal',
327
+ elementModifiers: {
328
+ cta: 0.8,
329
+ heading: 1.5,
330
+ navigation: 1.5,
331
+ content: 1.0,
332
+ price: 0.5,
333
+ search: 1.0,
334
+ form: 0.3,
335
+ trust: 0.5,
336
+ },
337
+ keywordPatterns: ['browse', 'explore', 'see', 'look at', 'check out', 'discover'],
338
+ },
339
+ {
340
+ id: 'signup',
341
+ name: 'Sign Up / Register',
342
+ description: 'User wants to create an account or start a free trial',
343
+ elementModifiers: {
344
+ cta: 2.0,
345
+ heading: 1.0,
346
+ navigation: 0.3,
347
+ content: 0.3,
348
+ price: 1.0,
349
+ search: 0.3,
350
+ form: 2.0,
351
+ trust: 1.5,
352
+ },
353
+ keywordPatterns: ['sign up', 'register', 'create account', 'get started', 'join', 'start', 'free trial'],
354
+ },
355
+ ];
356
+ // ── Lookup Functions ──
357
+ const profileMap = new Map();
358
+ for (const p of IDEAL_PROFILES) {
359
+ profileMap.set(p.persona, p);
360
+ }
361
+ const intentMap = new Map();
362
+ for (const i of INTENT_PRESETS) {
363
+ intentMap.set(i.id, i);
364
+ }
365
+ /**
366
+ * Get the ideal profile for a persona.
367
+ * Returns undefined if no profile exists for this persona.
368
+ */
369
+ export function getIdealProfile(persona) {
370
+ return profileMap.get(persona);
371
+ }
372
+ /**
373
+ * Detect user intent from goal text by matching keyword patterns.
374
+ * Returns the best-matching intent preset ID, or null if no match.
375
+ */
376
+ export function detectIntent(goalText) {
377
+ if (!goalText)
378
+ return null;
379
+ const lower = goalText.toLowerCase();
380
+ let bestId = null;
381
+ let bestScore = 0;
382
+ for (const preset of INTENT_PRESETS) {
383
+ let score = 0;
384
+ for (const pattern of preset.keywordPatterns) {
385
+ if (lower.includes(pattern.toLowerCase())) {
386
+ // Longer patterns are more specific, weight them higher
387
+ score += pattern.length;
388
+ }
389
+ }
390
+ if (score > bestScore) {
391
+ bestScore = score;
392
+ bestId = preset.id;
393
+ }
394
+ }
395
+ return bestId;
396
+ }
397
+ /**
398
+ * Get an intent preset by ID.
399
+ * Returns undefined if no preset exists for this ID.
400
+ */
401
+ export function getIntentPreset(intentId) {
402
+ return intentMap.get(intentId);
403
+ }
404
+ //# sourceMappingURL=ideal-profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ideal-profiles.js","sourceRoot":"","sources":["../src/ideal-profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAgDH,uBAAuB;AAEvB,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C;QACE,OAAO,EAAE,gBAAgB;QACzB,gBAAgB,EAAE;YAChB,GAAG,EAAS,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,OAAO,EAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YAC1C,OAAO,EAAK,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,CAAC,EAAG,KAAK,EAAE,CAAC,EAAE;YAC1C,MAAM,EAAM,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;SAC3C;QACD,SAAS,EAAE;YACT,WAAW,EAAE,CAAC;YACd,gBAAgB,EAAE,CAAC;YACnB,oBAAoB,EAAE,EAAE;YACxB,oBAAoB,EAAE,IAAI;YAC1B,wBAAwB,EAAE,IAAI;YAC9B,aAAa,EAAE,CAAC;YAChB,sBAAsB,EAAE,KAAK;YAC7B,cAAc,EAAE,EAAE;YAClB,qBAAqB,EAAE,GAAG;SAC3B;QACD,UAAU,EAAE;YACV,MAAM,EAAE,GAAG;YACX,kBAAkB,EAAE,EAAE;YACtB,qBAAqB,EAAE,GAAG;YAC1B,kBAAkB,EAAE,GAAG;SACxB;QACD,QAAQ,EAAE;YACR,cAAc;YACd,4BAA4B;YAC5B,mBAAmB;SACpB;KACF;IACD;QACE,OAAO,EAAE,iBAAiB;QAC1B,gBAAgB,EAAE;YAChB,GAAG,EAAS,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,OAAO,EAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,OAAO,EAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,CAAC,EAAG,KAAK,EAAE,CAAC,EAAE;YAC1C,MAAM,EAAM,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;SAC5C;QACD,SAAS,EAAE;YACT,WAAW,EAAE,CAAC;YACd,gBAAgB,EAAE,CAAC;YACnB,oBAAoB,EAAE,EAAE;YACxB,oBAAoB,EAAE,IAAI;YAC1B,wBAAwB,EAAE,IAAI;YAC9B,aAAa,EAAE,CAAC;YAChB,sBAAsB,EAAE,IAAI;YAC5B,cAAc,EAAE,EAAE;YAClB,qBAAqB,EAAE,GAAG;SAC3B;QACD,UAAU,EAAE;YACV,MAAM,EAAE,GAAG;YACX,kBAAkB,EAAE,EAAE;YACtB,qBAAqB,EAAE,GAAG;YAC1B,kBAAkB,EAAE,GAAG;SACxB;QACD,QAAQ,EAAE;YACR,kBAAkB;YAClB,yBAAyB;YACzB,uBAAuB;SACxB;KACF;IACD;QACE,OAAO,EAAE,yBAAyB;QAClC,gBAAgB,EAAE;YAChB,GAAG,EAAS,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,OAAO,EAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,OAAO,EAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YAC1C,MAAM,EAAM,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;SAC5C;QACD,SAAS,EAAE;YACT,WAAW,EAAE,CAAC;YACd,gBAAgB,EAAE,CAAC;YACnB,oBAAoB,EAAE,GAAG;YACzB,oBAAoB,EAAE,IAAI;YAC1B,wBAAwB,EAAE,KAAK;YAC/B,aAAa,EAAE,CAAC;YAChB,sBAAsB,EAAE,KAAK;YAC7B,cAAc,EAAE,EAAE;YAClB,qBAAqB,EAAE,GAAG;SAC3B;QACD,UAAU,EAAE;YACV,MAAM,EAAE,GAAG;YACX,kBAAkB,EAAE,EAAE;YACtB,qBAAqB,EAAE,GAAG;YAC1B,kBAAkB,EAAE,GAAG;SACxB;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,OAAO,EAAE,aAAa;QACtB,gBAAgB,EAAE;YAChB,GAAG,EAAS,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,OAAO,EAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,OAAO,EAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YAC1C,MAAM,EAAM,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;SAC3C;QACD,SAAS,EAAE;YACT,WAAW,EAAE,CAAC;YACd,gBAAgB,EAAE,CAAC;YACnB,oBAAoB,EAAE,EAAE;YACxB,oBAAoB,EAAE,IAAI;YAC1B,wBAAwB,EAAE,IAAI;YAC9B,aAAa,EAAE,CAAC;YAChB,sBAAsB,EAAE,KAAK;YAC7B,cAAc,EAAE,EAAE;YAClB,qBAAqB,EAAE,GAAG;SAC3B;QACD,UAAU,EAAE;YACV,MAAM,EAAE,GAAG;YACX,kBAAkB,EAAE,EAAE;YACtB,qBAAqB,EAAE,GAAG;YAC1B,kBAAkB,EAAE,GAAG;SACxB;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,OAAO,EAAE,gBAAgB;QACzB,gBAAgB,EAAE;YAChB,GAAG,EAAS,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,OAAO,EAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YAC1C,OAAO,EAAK,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YAC1C,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,CAAC,EAAG,KAAK,EAAE,CAAC,EAAE;YAC1C,MAAM,EAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;SAC5C;QACD,SAAS,EAAE;YACT,WAAW,EAAE,CAAC;YACd,gBAAgB,EAAE,CAAC;YACnB,oBAAoB,EAAE,EAAE;YACxB,oBAAoB,EAAE,IAAI;YAC1B,wBAAwB,EAAE,IAAI;YAC9B,aAAa,EAAE,CAAC;YAChB,sBAAsB,EAAE,KAAK;YAC7B,cAAc,EAAE,EAAE;YAClB,qBAAqB,EAAE,GAAG;SAC3B;QACD,UAAU,EAAE;YACV,MAAM,EAAE,GAAG;YACX,kBAAkB,EAAE,EAAE;YACtB,qBAAqB,EAAE,GAAG;YAC1B,kBAAkB,EAAE,GAAG;SACxB;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,OAAO,EAAE,cAAc;QACvB,gBAAgB,EAAE;YAChB,GAAG,EAAS,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,OAAO,EAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,OAAO,EAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,CAAC,EAAG,KAAK,EAAE,CAAC,EAAE;YAC1C,MAAM,EAAM,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;SAC3C;QACD,SAAS,EAAE;YACT,WAAW,EAAE,CAAC;YACd,gBAAgB,EAAE,CAAC;YACnB,oBAAoB,EAAE,EAAE;YACxB,oBAAoB,EAAE,IAAI;YAC1B,wBAAwB,EAAE,IAAI;YAC9B,aAAa,EAAE,CAAC;YAChB,sBAAsB,EAAE,IAAI;YAC5B,cAAc,EAAE,EAAE;YAClB,qBAAqB,EAAE,GAAG;SAC3B;QACD,UAAU,EAAE;YACV,MAAM,EAAE,GAAG;YACX,kBAAkB,EAAE,EAAE;YACtB,qBAAqB,EAAE,GAAG;YAC1B,kBAAkB,EAAE,GAAG;SACxB;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,OAAO,EAAE,sBAAsB;QAC/B,gBAAgB,EAAE;YAChB,GAAG,EAAS,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,OAAO,EAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,OAAO,EAAK,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,CAAC,EAAG,KAAK,EAAE,CAAC,EAAE;YAC1C,MAAM,EAAM,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;SAC5C;QACD,SAAS,EAAE;YACT,WAAW,EAAE,CAAC;YACd,gBAAgB,EAAE,CAAC;YACnB,oBAAoB,EAAE,EAAE;YACxB,oBAAoB,EAAE,IAAI;YAC1B,wBAAwB,EAAE,IAAI;YAC9B,aAAa,EAAE,CAAC;YAChB,sBAAsB,EAAE,IAAI;YAC5B,cAAc,EAAE,EAAE;YAClB,qBAAqB,EAAE,GAAG;SAC3B;QACD,UAAU,EAAE;YACV,MAAM,EAAE,GAAG;YACX,kBAAkB,EAAE,EAAE;YACtB,qBAAqB,EAAE,GAAG;YAC1B,kBAAkB,EAAE,GAAG;SACxB;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,OAAO,EAAE,eAAe;QACxB,gBAAgB,EAAE;YAChB,GAAG,EAAS,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,OAAO,EAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,OAAO,EAAK,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YAC1C,MAAM,EAAM,EAAE,GAAG,EAAE,CAAC,EAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;SAC5C;QACD,SAAS,EAAE;YACT,WAAW,EAAE,CAAC;YACd,gBAAgB,EAAE,CAAC;YACnB,oBAAoB,EAAE,EAAE;YACxB,oBAAoB,EAAE,IAAI;YAC1B,wBAAwB,EAAE,IAAI;YAC9B,aAAa,EAAE,CAAC;YAChB,sBAAsB,EAAE,KAAK;YAC7B,cAAc,EAAE,EAAE;YAClB,qBAAqB,EAAE,GAAG;SAC3B;QACD,UAAU,EAAE;YACV,MAAM,EAAE,GAAG;YACX,kBAAkB,EAAE,EAAE;YACtB,qBAAqB,EAAE,GAAG;YAC1B,kBAAkB,EAAE,GAAG;SACxB;QACD,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAEF,uBAAuB;AAEvB,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C;QACE,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,6EAA6E;QAC1F,gBAAgB,EAAE;YAChB,GAAG,EAAE,GAAG;YACR,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,GAAG;SACX;QACD,eAAe,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,CAAC;KAC1G;IACD;QACE,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,yDAAyD;QACtE,gBAAgB,EAAE;YAChB,GAAG,EAAE,GAAG;YACR,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,GAAG;SACX;QACD,eAAe,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,CAAC;KACrG;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,gEAAgE;QAC7E,gBAAgB,EAAE;YAChB,GAAG,EAAE,GAAG;YACR,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,GAAG;SACX;QACD,eAAe,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC;KAClG;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,kEAAkE;QAC/E,gBAAgB,EAAE;YAChB,GAAG,EAAE,GAAG;YACR,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,GAAG;SACX;QACD,eAAe,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC;KAC3F;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,mDAAmD;QAChE,gBAAgB,EAAE;YAChB,GAAG,EAAE,GAAG;YACR,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,GAAG;SACX;QACD,eAAe,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC;KAClF;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,uDAAuD;QACpE,gBAAgB,EAAE;YAChB,GAAG,EAAE,GAAG;YACR,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,GAAG;SACX;QACD,eAAe,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC;KACzG;CACF,CAAC;AAEF,yBAAyB;AAEzB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAwB,CAAC;AACnD,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;IAC/B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;AAClD,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;IAC/B,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAErC,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC7C,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC1C,wDAAwD;gBACxD,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;YACtB,SAAS,GAAG,KAAK,CAAC;YAClB,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server-remote.d.ts","sourceRoot":"","sources":["../src/mcp-server-remote.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAmCH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAexC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAoBpE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAuCrG;AA6/BD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,uBAAuB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAGD,YAAY,EAAE,uBAAuB,EAAE,CAAC;AAExC;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAq1B1F"}
1
+ {"version":3,"file":"mcp-server-remote.d.ts","sourceRoot":"","sources":["../src/mcp-server-remote.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAmCH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAexC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAoBpE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAuCrG;AA6/BD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,uBAAuB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAGD,YAAY,EAAE,uBAAuB,EAAE,CAAC;AAExC;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAm2B1F"}
@@ -1452,13 +1452,28 @@ ${VERSION}
1452
1452
  // OAuth Authorization Server Metadata (RFC 8414)
1453
1453
  // Return 404 when no Auth0 — prevents Claude.ai from initiating OAuth flow
1454
1454
  // Users authenticate via Bearer token (cbk_ API key) instead
1455
- if (url.pathname === "/.well-known/oauth-authorization-server" && !auth0Enabled) {
1456
- res.writeHead(404, { "Content-Type": "application/json" });
1457
- res.end(JSON.stringify({
1458
- error: "No OAuth server configured",
1459
- message: "Authenticate with a Bearer token. Get your API key at https://cbrowser.ai/account/register",
1460
- }));
1461
- return;
1455
+ if (url.pathname === "/.well-known/oauth-authorization-server") {
1456
+ const serverHost = req.headers.host || `${host}:${port}`;
1457
+ const protocol = req.headers["x-forwarded-proto"] || "http";
1458
+ const baseUrl = `${protocol}://${serverHost}`;
1459
+ if (auth0Enabled) {
1460
+ // Auth0-backed OAuth (existing behavior)
1461
+ }
1462
+ else {
1463
+ // Self-hosted OAuth PKCE (built-in /authorize + /token)
1464
+ res.writeHead(200, { "Content-Type": "application/json" });
1465
+ res.end(JSON.stringify({
1466
+ issuer: baseUrl,
1467
+ authorization_endpoint: `${baseUrl}/authorize`,
1468
+ token_endpoint: `${baseUrl}/token`,
1469
+ response_types_supported: ["code"],
1470
+ grant_types_supported: ["authorization_code", "client_credentials"],
1471
+ code_challenge_methods_supported: ["S256"],
1472
+ token_endpoint_auth_methods_supported: ["none"],
1473
+ scopes_supported: [],
1474
+ }));
1475
+ return;
1476
+ }
1462
1477
  }
1463
1478
  if (url.pathname === "/.well-known/oauth-protected-resource") {
1464
1479
  const metadata = getProtectedResourceMetadata();
@@ -1468,15 +1483,14 @@ ${VERSION}
1468
1483
  res.end(JSON.stringify(metadata));
1469
1484
  }
1470
1485
  else {
1471
- // No OAuth provider — advertise API key auth only
1472
- // Claude.ai will prompt user for Bearer token (their cbk_ API key)
1486
+ // Self-hosted OAuth — advertise built-in auth server
1473
1487
  const serverHost = req.headers.host || `${host}:${port}`;
1474
1488
  const protocol = req.headers["x-forwarded-proto"] || "http";
1475
1489
  const baseUrl = `${protocol}://${serverHost}`;
1476
1490
  res.writeHead(200, { "Content-Type": "application/json" });
1477
1491
  res.end(JSON.stringify({
1478
1492
  resource: baseUrl,
1479
- authorization_servers: [],
1493
+ authorization_servers: [baseUrl],
1480
1494
  bearer_methods_supported: ["header"],
1481
1495
  scopes_supported: [],
1482
1496
  resource_documentation: `${protocol}://${serverHost}/docs`,