mcp-accessibility-scanner 3.0.1 → 3.2.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 (85) hide show
  1. package/README.md +265 -12
  2. package/index.d.ts +1 -1
  3. package/lib/browserContextFactory.js +1161 -94
  4. package/lib/browserContextFactory.js.map +1 -1
  5. package/lib/browserServerBackend.js +199 -22
  6. package/lib/browserServerBackend.js.map +1 -1
  7. package/lib/browserSessions.js +172 -0
  8. package/lib/browserSessions.js.map +1 -0
  9. package/lib/config.js +48 -7
  10. package/lib/config.js.map +1 -1
  11. package/lib/context.js +321 -71
  12. package/lib/context.js.map +1 -1
  13. package/lib/extension/cdpRelay.js +5 -0
  14. package/lib/extension/cdpRelay.js.map +1 -1
  15. package/lib/extension/extensionContextFactory.js +12 -1
  16. package/lib/extension/extensionContextFactory.js.map +1 -1
  17. package/lib/index.js +5 -1
  18. package/lib/index.js.map +1 -1
  19. package/lib/mcp/http.js +194 -44
  20. package/lib/mcp/http.js.map +1 -1
  21. package/lib/mcp/inProcessTransport.js.map +1 -1
  22. package/lib/mcp/mdb.js +7 -9
  23. package/lib/mcp/mdb.js.map +1 -1
  24. package/lib/mcp/proxyBackend.js +76 -18
  25. package/lib/mcp/proxyBackend.js.map +1 -1
  26. package/lib/mcp/server.js +70 -41
  27. package/lib/mcp/server.js.map +1 -1
  28. package/lib/mcp/sharedClientSlot.js +134 -0
  29. package/lib/mcp/sharedClientSlot.js.map +1 -0
  30. package/lib/mcp/tool.js +3 -0
  31. package/lib/mcp/tool.js.map +1 -1
  32. package/lib/networkPolicy.js +73 -0
  33. package/lib/networkPolicy.js.map +1 -0
  34. package/lib/program.js +91 -12
  35. package/lib/program.js.map +1 -1
  36. package/lib/response.js +16 -3
  37. package/lib/response.js.map +1 -1
  38. package/lib/sessionLog.js +36 -6
  39. package/lib/sessionLog.js.map +1 -1
  40. package/lib/tab.js +149 -18
  41. package/lib/tab.js.map +1 -1
  42. package/lib/tools/auditKeyboard.js +204 -4
  43. package/lib/tools/auditKeyboard.js.map +1 -1
  44. package/lib/tools/auditScreenReader.js +823 -0
  45. package/lib/tools/auditScreenReader.js.map +1 -0
  46. package/lib/tools/auditSite.js +268 -90
  47. package/lib/tools/auditSite.js.map +1 -1
  48. package/lib/tools/axe.js +479 -21
  49. package/lib/tools/axe.js.map +1 -1
  50. package/lib/tools/dialogs.js +18 -4
  51. package/lib/tools/dialogs.js.map +1 -1
  52. package/lib/tools/evaluate.js +34 -5
  53. package/lib/tools/evaluate.js.map +1 -1
  54. package/lib/tools/network.js +136 -8
  55. package/lib/tools/network.js.map +1 -1
  56. package/lib/tools/pdf.js +5 -2
  57. package/lib/tools/pdf.js.map +1 -1
  58. package/lib/tools/scanPageMatrix.js +135 -47
  59. package/lib/tools/scanPageMatrix.js.map +1 -1
  60. package/lib/tools/screenshot.js +8 -4
  61. package/lib/tools/screenshot.js.map +1 -1
  62. package/lib/tools/session.js +53 -0
  63. package/lib/tools/session.js.map +1 -0
  64. package/lib/tools/snapshot.js +266 -8
  65. package/lib/tools/snapshot.js.map +1 -1
  66. package/lib/tools/tool.js.map +1 -1
  67. package/lib/tools/utils.js +62 -6
  68. package/lib/tools/utils.js.map +1 -1
  69. package/lib/tools.js +11 -2
  70. package/lib/tools.js.map +1 -1
  71. package/lib/utils/dataUrl.js +58 -35
  72. package/lib/utils/dataUrl.js.map +1 -1
  73. package/lib/utils/fileUtils.js +35 -0
  74. package/lib/utils/fileUtils.js.map +1 -1
  75. package/lib/utils/guid.js +8 -0
  76. package/lib/utils/guid.js.map +1 -1
  77. package/lib/utils/jsSource.js +187 -0
  78. package/lib/utils/jsSource.js.map +1 -0
  79. package/lib/vscode/browserContextFactory.js +87 -0
  80. package/lib/vscode/browserContextFactory.js.map +1 -0
  81. package/lib/vscode/host.js +189 -33
  82. package/lib/vscode/host.js.map +1 -1
  83. package/lib/vscode/main.js +3 -35
  84. package/lib/vscode/main.js.map +1 -1
  85. package/package.json +13 -9
@@ -25,47 +25,40 @@ export function truncateDataUrl(url) {
25
25
  return `${match.displayPrefix}...`;
26
26
  }
27
27
  export function truncateDataUrls(text) {
28
+ // Snapshots are routinely hundreds of KB and usually hold no data URL at all,
29
+ // so nothing is copied or rebuilt until the first one is actually found.
30
+ let start = findDataUrlStart(text, 0);
31
+ if (start === -1)
32
+ return text;
28
33
  let result = '';
29
34
  let offset = 0;
30
- const lowerText = text.toLowerCase();
31
- while (offset < text.length) {
32
- const start = findDataUrlStart(text, lowerText, offset);
33
- if (start === -1) {
34
- result += text.slice(offset);
35
- break;
36
- }
35
+ while (start !== -1) {
37
36
  result += text.slice(offset, start);
38
37
  const match = parseDataUrl(text, start);
39
38
  if (!match) {
40
39
  const prefixLength = dataUrlPrefixLengthAt(text, start);
41
40
  result += text.slice(start, start + prefixLength);
42
41
  offset = start + prefixLength;
43
- continue;
44
42
  }
45
- const end = findDataUrlEnd(text, match);
46
- result += `${match.displayPrefix}...`;
47
- offset = end;
43
+ else {
44
+ result += `${match.displayPrefix}...`;
45
+ offset = findDataUrlEnd(text, match);
46
+ }
47
+ start = findDataUrlStart(text, offset);
48
48
  }
49
- return result;
50
- }
51
- function findDataUrlStart(text, lowerText, offset) {
52
- let start = nextDataUrlPrefix(lowerText, offset);
53
- while (start !== -1) {
54
- if (isDataUrlStartBoundary(text, start))
55
- return start;
56
- start = nextDataUrlPrefix(lowerText, start + dataUrlPrefixLengthAt(lowerText, start));
49
+ return result + text.slice(offset);
50
+ }
51
+ // Matches either prefix case-insensitively without lower-casing a copy of the
52
+ // whole text, which on a large snapshot costs more than the scan itself.
53
+ const dataUrlPrefixPattern = /data(?::|%3a)/gi;
54
+ function findDataUrlStart(text, offset) {
55
+ dataUrlPrefixPattern.lastIndex = offset;
56
+ for (let match = dataUrlPrefixPattern.exec(text); match; match = dataUrlPrefixPattern.exec(text)) {
57
+ if (isDataUrlStartBoundary(text, match.index))
58
+ return match.index;
57
59
  }
58
60
  return -1;
59
61
  }
60
- function nextDataUrlPrefix(lowerText, offset) {
61
- const literalStart = lowerText.indexOf(dataUrlPrefix, offset);
62
- const encodedStart = lowerText.indexOf(encodedDataUrlPrefix, offset);
63
- if (literalStart === -1)
64
- return encodedStart;
65
- if (encodedStart === -1)
66
- return literalStart;
67
- return Math.min(literalStart, encodedStart);
68
- }
69
62
  function dataUrlPrefixLengthAt(text, start) {
70
63
  return startsWithIgnoreCase(text, start, encodedDataUrlPrefix) ? encodedDataUrlPrefix.length : dataUrlPrefix.length;
71
64
  }
@@ -170,8 +163,26 @@ function dataUrlQuoteAt(text, start) {
170
163
  function isLineBreak(char) {
171
164
  return char === '\n' || char === '\r';
172
165
  }
166
+ // Runs once per character of a base64 payload, which is the longest run in any
167
+ // snapshot, so it stays a plain switch rather than a regex plus an array scan.
173
168
  function isBase64PayloadTerminator(char) {
174
- return /\s/.test(char) || ['"', '\'', '<', '>', ')', ']', '}', '`', ':'].includes(char);
169
+ switch (char) {
170
+ case '"':
171
+ case '\'':
172
+ case '<':
173
+ case '>':
174
+ case ')':
175
+ case ']':
176
+ case '}':
177
+ case '`':
178
+ case ':':
179
+ return true;
180
+ default:
181
+ return isWhitespace(char);
182
+ }
183
+ }
184
+ function isWhitespace(char) {
185
+ return /\s/.test(char);
175
186
  }
176
187
  function isQueryParamBoundary(text, match, ampersand) {
177
188
  if (!looksLikeQueryParam(text, ampersand + 1))
@@ -180,13 +191,13 @@ function isQueryParamBoundary(text, match, ampersand) {
180
191
  }
181
192
  function isRawPayloadCompleteBefore(text, payloadStart, end) {
182
193
  let position = end - 1;
183
- while (position >= payloadStart && /\s/.test(text[position]))
194
+ while (position >= payloadStart && isWhitespace(text[position]))
184
195
  position--;
185
196
  return text[position] === '>' || (position >= payloadStart + 2 && startsWithIgnoreCase(text, position - 2, '%3e'));
186
197
  }
187
198
  function isRawPayloadSuffixBoundary(text, match, position) {
188
199
  const char = text[position];
189
- if (/\s/.test(char))
200
+ if (isWhitespace(char))
190
201
  return !isRawMarkupPayload(text, match.payloadStart) || isRawPayloadCompleteBefore(text, match.payloadStart, position);
191
202
  if (isRawPayloadWrapperBoundary(text, match, position))
192
203
  return true;
@@ -210,7 +221,7 @@ function looksLikeSourceLocationSuffix(text, colon) {
210
221
  return false;
211
222
  while (position < text.length && /\d/.test(text[position]))
212
223
  position++;
213
- return position === text.length || isLineBreak(text[position]) || /\s/.test(text[position]);
224
+ return position === text.length || isLineBreak(text[position]) || isWhitespace(text[position]);
214
225
  }
215
226
  function looksLikeQueryParam(text, offset) {
216
227
  if (offset >= text.length)
@@ -219,7 +230,7 @@ function looksLikeQueryParam(text, offset) {
219
230
  const char = text[position];
220
231
  if (char === '=')
221
232
  return position > offset;
222
- if (isLineBreak(char) || /\s/.test(char) || ['&', '#', '"', '\'', '<', '>', ')', '}', '`'].includes(char))
233
+ if (isLineBreak(char) || isWhitespace(char) || ['&', '#', '"', '\'', '<', '>', ')', '}', '`'].includes(char))
223
234
  return false;
224
235
  }
225
236
  return false;
@@ -245,7 +256,7 @@ function isRawPayloadBoundarySuffix(text, offset) {
245
256
  if (offset >= text.length)
246
257
  return true;
247
258
  const char = text[offset];
248
- return isLineBreak(char) || /\s/.test(char) || ['"', '\'', ')', ']', '}', '`'].includes(char) || (char === '&' && looksLikeQueryParam(text, offset + 1));
259
+ return isLineBreak(char) || isWhitespace(char) || ['"', '\'', ')', ']', '}', '`'].includes(char) || (char === '&' && looksLikeQueryParam(text, offset + 1));
249
260
  }
250
261
  function isEncodedPayloadTerminator(text, position) {
251
262
  const encodedChar = percentEncodedCharAt(text, position);
@@ -259,7 +270,19 @@ function percentEncodedCharAt(text, position) {
259
270
  return;
260
271
  return String.fromCharCode(Number.parseInt(text.slice(position + 1, position + 3), 16));
261
272
  }
273
+ // `value` is always lower-case ASCII here, so a char-code compare answers this
274
+ // without allocating the slice these hot per-character scans would otherwise make.
262
275
  function startsWithIgnoreCase(text, position, value) {
263
- return text.slice(position, position + value.length).toLowerCase() === value;
276
+ if (position < 0 || position + value.length > text.length)
277
+ return false;
278
+ for (let index = 0; index < value.length; index++) {
279
+ const char = text.charCodeAt(position + index);
280
+ const expected = value.charCodeAt(index);
281
+ // Fold upper-case ASCII only; folding by bit would also equate control
282
+ // characters with punctuation.
283
+ if (char !== expected && !(char >= 65 && char <= 90 && char + 32 === expected))
284
+ return false;
285
+ }
286
+ return true;
264
287
  }
265
288
  //# sourceMappingURL=dataUrl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataUrl.js","sourceRoot":"","sources":["../../src/utils/dataUrl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dataUrl.js","sourceRoot":"","sources":["../../src/utils/dataUrl.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@
15
15
  */
16
16
  import os from 'node:os';
17
17
  import path from 'node:path';
18
+ import { createShortGuid } from './guid.js';
18
19
  export function cacheDir() {
19
20
  let cacheDirectory;
20
21
  if (process.platform === 'linux')
@@ -34,4 +35,38 @@ export function sanitizeForFilePath(s) {
34
35
  return sanitize(s);
35
36
  return sanitize(s.substring(0, separator)) + '.' + sanitize(s.substring(separator + 1));
36
37
  }
38
+ /**
39
+ * Timestamp fragment for DEFAULT artifact file names (screenshots, PDFs,
40
+ * reports, downloaded files). Carries a short random token besides the
41
+ * sanitized ISO timestamp:
42
+ * concurrent sessions (or overlapping calls) share one output directory, and
43
+ * a timestamp alone let two artifacts produced in the same millisecond
44
+ * overwrite each other. User-specified file names are never routed through
45
+ * this helper.
46
+ */
47
+ export function safeIsoTimestampForFileName() {
48
+ return `${sanitizeForFilePath(new Date().toISOString())}-${createShortGuid()}`;
49
+ }
50
+ /**
51
+ * Truncates `value` to at most `maxBytes` of UTF-8. Measured in bytes, not
52
+ * characters — filesystem name limits are byte limits — and cut between code
53
+ * points (surrogate pairs stay whole), so the result never ends in a split
54
+ * UTF-8 sequence.
55
+ */
56
+ export function truncateToUtf8Bytes(value, maxBytes) {
57
+ if (maxBytes <= 0)
58
+ return '';
59
+ if (Buffer.byteLength(value, 'utf8') <= maxBytes)
60
+ return value;
61
+ let bytes = 0;
62
+ let result = '';
63
+ for (const character of value) {
64
+ const characterBytes = Buffer.byteLength(character, 'utf8');
65
+ if (bytes + characterBytes > maxBytes)
66
+ break;
67
+ result += character;
68
+ bytes += characterBytes;
69
+ }
70
+ return result;
71
+ }
37
72
  //# sourceMappingURL=fileUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fileUtils.js","sourceRoot":"","sources":["../../src/utils/fileUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,QAAQ;IACtB,IAAI,cAAsB,CAAC;IAC3B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC9B,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;SAC9E,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QACpC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;SAC3D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QACnC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;;QAEzF,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,CAAS;IAC3C,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;IACpG,MAAM,SAAS,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,SAAS,KAAK,CAAC,CAAC;QAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC"}
1
+ {"version":3,"file":"fileUtils.js","sourceRoot":"","sources":["../../src/utils/fileUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,UAAU,QAAQ;IACtB,IAAI,cAAsB,CAAC;IAC3B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC9B,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;SAC9E,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QACpC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;SAC3D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QACnC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;;QAEzF,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,CAAS;IAC3C,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;IACpG,MAAM,SAAS,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,SAAS,KAAK,CAAC,CAAC;QAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO,GAAG,mBAAmB,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,eAAe,EAAE,EAAE,CAAC;AACjF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,QAAgB;IACjE,IAAI,QAAQ,IAAI,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,QAAQ;QAC9C,OAAO,KAAK,CAAC;IACf,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC5D,IAAI,KAAK,GAAG,cAAc,GAAG,QAAQ;YACnC,MAAM;QACR,MAAM,IAAI,SAAS,CAAC;QACpB,KAAK,IAAI,cAAc,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/lib/utils/guid.js CHANGED
@@ -17,6 +17,14 @@ import crypto from 'node:crypto';
17
17
  export function createGuid() {
18
18
  return crypto.randomBytes(16).toString('hex');
19
19
  }
20
+ /**
21
+ * Short collision-resistant token (8 hex chars) for artifact names that
22
+ * already carry a timestamp: two connections created in the same millisecond
23
+ * must still get distinct session/trace folders.
24
+ */
25
+ export function createShortGuid() {
26
+ return crypto.randomBytes(4).toString('hex');
27
+ }
20
28
  export function createHash(data) {
21
29
  return crypto.createHash('sha256').update(data).digest('hex').slice(0, 7);
22
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"guid.js","sourceRoot":"","sources":["../../src/utils/guid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,UAAU,UAAU;IACxB,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"guid.js","sourceRoot":"","sources":["../../src/utils/guid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,UAAU,UAAU;IACxB,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ // Just enough of a JavaScript lexer to tell a function literal from an
17
+ // expression, for callers that must decide from the source form alone. A parser
18
+ // would be more exact, but the repo ships no runtime one and reaching into
19
+ // Playwright's bundled Babel would add a deep private import for one question.
20
+ const whitespace = /\s/;
21
+ const identifierStart = /^[\p{ID_Start}$_][\p{ID_Continue}$]*/u;
22
+ /**
23
+ * Whether `source` is a function literal -- `() => {}`, `function () {}`,
24
+ * `async x => x` -- as opposed to an expression that may merely evaluate to one.
25
+ */
26
+ export function isFunctionSource(source) {
27
+ let body = source.slice(skipTrivia(source, 0));
28
+ for (;;) {
29
+ const afterAsync = body.slice(skipAsyncKeyword(body));
30
+ if (/^function\b/.test(afterAsync) || hasArrowHead(afterAsync))
31
+ return true;
32
+ // `(() => 1)` and `(function () {})` are function literals inside grouping
33
+ // parentheses. Look inside before concluding this is an expression.
34
+ const inner = stripEnclosingParens(body);
35
+ if (inner === null)
36
+ return false;
37
+ body = inner.slice(skipTrivia(inner, 0));
38
+ }
39
+ }
40
+ function skipAsyncKeyword(source) {
41
+ const keyword = /^async\b/.exec(source)?.[0];
42
+ return keyword ? skipTrivia(source, keyword.length) : 0;
43
+ }
44
+ /**
45
+ * Matches the head of an arrow function -- `x =>`, `(a, b) =>` -- without
46
+ * matching a parenthesised expression such as `(a + b)`. The `async` keyword is
47
+ * already stripped by the caller.
48
+ */
49
+ function hasArrowHead(source) {
50
+ let offset = 0;
51
+ if (source[0] === '(') {
52
+ const end = matchingParen(source, 0);
53
+ // The scanner does not model every parameter-list construct. When the match
54
+ // cannot be found, call it a function: passing a function through is the
55
+ // conservative answer, since a wrongly wrapped function fails silently
56
+ // while a wrongly passed-through expression fails loudly.
57
+ if (end === -1)
58
+ return true;
59
+ offset = end + 1;
60
+ }
61
+ else {
62
+ const identifier = identifierStart.exec(source)?.[0];
63
+ if (!identifier)
64
+ return false;
65
+ offset = identifier.length;
66
+ }
67
+ return source.startsWith('=>', skipTrivia(source, offset));
68
+ }
69
+ function stripEnclosingParens(source) {
70
+ if (source[0] !== '(')
71
+ return null;
72
+ const end = matchingParen(source, 0);
73
+ // Only a group that wraps the whole source: `(a) => a` closes early and its
74
+ // parentheses are a parameter list, not a group.
75
+ if (end === -1 || skipTrivia(source, end + 1) !== source.length)
76
+ return null;
77
+ return source.slice(1, end);
78
+ }
79
+ function matchingParen(source, start) {
80
+ return matchingDelimiter(source, start, '(', ')');
81
+ }
82
+ /**
83
+ * Finds the delimiter closing the one at `start`, stepping over comments,
84
+ * strings, template substitutions and regular expression literals so that a
85
+ * bracket inside any of them is not counted.
86
+ */
87
+ function matchingDelimiter(source, start, open, close) {
88
+ let depth = 0;
89
+ for (let offset = start; offset < source.length; offset++) {
90
+ const char = source[offset];
91
+ if (char === '/' && (source[offset + 1] === '/' || source[offset + 1] === '*')) {
92
+ const end = skipTrivia(source, offset);
93
+ if (end === offset)
94
+ return -1;
95
+ offset = end - 1;
96
+ }
97
+ else if (char === '"' || char === '\'' || char === '`') {
98
+ const end = endOfString(source, offset);
99
+ if (end === -1)
100
+ return -1;
101
+ offset = end;
102
+ }
103
+ else if (char === '/' && startsRegex(source, offset)) {
104
+ const end = endOfRegex(source, offset);
105
+ if (end === -1)
106
+ return -1;
107
+ offset = end;
108
+ }
109
+ else if (char === open) {
110
+ depth++;
111
+ }
112
+ else if (char === close) {
113
+ depth--;
114
+ if (!depth)
115
+ return offset;
116
+ }
117
+ }
118
+ return -1;
119
+ }
120
+ function endOfString(source, start) {
121
+ const quote = source[start];
122
+ for (let offset = start + 1; offset < source.length; offset++) {
123
+ const char = source[offset];
124
+ if (char === '\\') {
125
+ offset++;
126
+ }
127
+ else if (quote === '`' && char === '$' && source[offset + 1] === '{') {
128
+ // A substitution can hold anything, including another template.
129
+ const end = matchingDelimiter(source, offset + 1, '{', '}');
130
+ if (end === -1)
131
+ return -1;
132
+ offset = end;
133
+ }
134
+ else if (char === quote) {
135
+ return offset;
136
+ }
137
+ }
138
+ return -1;
139
+ }
140
+ // A slash directly after a value is division; anywhere else it opens a regular
141
+ // expression. Parameter defaults are the case that matters here: `(a = /)/)`.
142
+ function startsRegex(source, offset) {
143
+ let index = offset - 1;
144
+ while (index >= 0 && whitespace.test(source[index]))
145
+ index--;
146
+ return index < 0 || !/[\w$)\]]/.test(source[index]);
147
+ }
148
+ function endOfRegex(source, start) {
149
+ let inCharacterClass = false;
150
+ for (let offset = start + 1; offset < source.length; offset++) {
151
+ const char = source[offset];
152
+ if (char === '\\')
153
+ offset++;
154
+ else if (char === '\n')
155
+ return -1;
156
+ else if (inCharacterClass)
157
+ inCharacterClass = char !== ']';
158
+ else if (char === '[')
159
+ inCharacterClass = true;
160
+ else if (char === '/')
161
+ return offset;
162
+ }
163
+ return -1;
164
+ }
165
+ /** Offset of the first character at or after `offset` that is not whitespace or a comment. */
166
+ export function skipTrivia(source, offset) {
167
+ for (;;) {
168
+ while (offset < source.length && whitespace.test(source[offset]))
169
+ offset++;
170
+ if (source.startsWith('//', offset)) {
171
+ const lineEnd = source.indexOf('\n', offset);
172
+ if (lineEnd === -1)
173
+ return source.length;
174
+ offset = lineEnd + 1;
175
+ }
176
+ else if (source.startsWith('/*', offset)) {
177
+ const commentEnd = source.indexOf('*/', offset + 2);
178
+ if (commentEnd === -1)
179
+ return source.length;
180
+ offset = commentEnd + 2;
181
+ }
182
+ else {
183
+ return offset;
184
+ }
185
+ }
186
+ }
187
+ //# sourceMappingURL=jsSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsSource.js","sourceRoot":"","sources":["../../src/utils/jsSource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { applyStorageStateToReusedContext, assertStorageStateDoesNotResetUserProfile } from '../browserContextFactory.js';
17
+ // Shared with the host's browser_connect validation so the two never drift:
18
+ // the host checks the combination before tearing down the working provider,
19
+ // and the factory keeps the same check as the last line of defense.
20
+ export const vscodeProfileConflictRemedy = 'Drop --user-data-dir (the state is applied inside the extension\'s own browser profile), or drop the storage state and sign in in that profile instead.';
21
+ export class VSCodeBrowserContextFactory {
22
+ _config;
23
+ _playwright;
24
+ _connectionString;
25
+ name = 'vscode';
26
+ description = 'Connect to a browser running in the Playwright VS Code extension';
27
+ // A fresh context is created with the state; a reused extension context gets
28
+ // it applied via setStorageState(), like the other reused-context factories.
29
+ appliesStorageState = true;
30
+ // Each createContext() reuses the extension browser's existing context when
31
+ // one is present, so two sessions would end up in the same context (same
32
+ // tabs, cookies and storage) — never a separate one per handle.
33
+ sessionsUnsupportedReason = 'the VS Code extension supplies the browser\'s existing context, which every session would share (same tabs, cookies and storage).';
34
+ constructor(_config, _playwright, _connectionString) {
35
+ this._config = _config;
36
+ this._playwright = _playwright;
37
+ this._connectionString = _connectionString;
38
+ }
39
+ async createContext(clientInfo, abortSignal) {
40
+ // A configured --user-data-dir is forwarded to the extension's launch
41
+ // below, so the context the extension hands back lives inside the user's
42
+ // own profile — applying the storage state there would clear that
43
+ // profile's cookies and origin storage, which the persistent factory
44
+ // already refuses to do. Checked before connecting, so the contradiction
45
+ // fails fast without ever reaching the browser.
46
+ assertStorageStateDoesNotResetUserProfile(this._config, vscodeProfileConflictRemedy);
47
+ let launchOptions = this._config.browser.launchOptions;
48
+ if (this._config.browser.userDataDir) {
49
+ launchOptions = {
50
+ ...launchOptions,
51
+ ...this._config.browser.contextOptions,
52
+ userDataDir: this._config.browser.userDataDir,
53
+ };
54
+ }
55
+ const connectionString = new URL(this._connectionString);
56
+ connectionString.searchParams.set('launch-options', JSON.stringify(launchOptions));
57
+ const browserType = this._playwright.chromium; // it could also be firefox or webkit, we just need some browser type to call `connect` on
58
+ const browser = await browserType.connect(connectionString.toString());
59
+ let context;
60
+ try {
61
+ const existing = browser.contexts()[0];
62
+ if (existing) {
63
+ // Without this, a configured storage state would be silently ignored on
64
+ // the reuse path while newContext() below applies it — authenticated
65
+ // scans would run anonymously depending on which branch was taken.
66
+ await applyStorageStateToReusedContext(this._config, existing);
67
+ context = existing;
68
+ }
69
+ else {
70
+ context = await browser.newContext(this._config.browser.contextOptions);
71
+ }
72
+ }
73
+ catch (error) {
74
+ // No close() has been handed out yet, so the connection must not outlive
75
+ // the failure (e.g. an unreadable storage-state file).
76
+ await browser.close().catch(() => { });
77
+ throw error;
78
+ }
79
+ return {
80
+ browserContext: context,
81
+ close: async () => {
82
+ await browser.close();
83
+ }
84
+ };
85
+ }
86
+ }
87
+ //# sourceMappingURL=browserContextFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserContextFactory.js","sourceRoot":"","sources":["../../src/vscode/browserContextFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,gCAAgC,EAAE,yCAAyC,EAAE,MAAM,6BAA6B,CAAC;AAK1H,4EAA4E;AAC5E,4EAA4E;AAC5E,oEAAoE;AACpE,MAAM,CAAC,MAAM,2BAA2B,GAAG,yJAAyJ,CAAC;AAErM,MAAM,OAAO,2BAA2B;IAWlB,OAAO;IAAsB,WAAW;IAAuC,iBAAiB;IAVpH,IAAI,GAAG,QAAQ,CAAC;IAChB,WAAW,GAAG,kEAAkE,CAAC;IACjF,6EAA6E;IAC7E,6EAA6E;IACpE,mBAAmB,GAAG,IAAI,CAAC;IACpC,4EAA4E;IAC5E,yEAAyE;IACzE,gEAAgE;IACvD,yBAAyB,GAAG,mIAAmI,CAAC;IAEzK,YAAoB,OAAmB,EAAU,WAAwC,EAAU,iBAAyB;uBAAxG,OAAO;2BAAsB,WAAW;iCAAuC,iBAAiB;IAAW,CAAC;IAEhI,KAAK,CAAC,aAAa,CAAC,UAAsB,EAAE,WAAwB;QAClE,sEAAsE;QACtE,yEAAyE;QACzE,kEAAkE;QAClE,qEAAqE;QACrE,yEAAyE;QACzE,gDAAgD;QAChD,yCAAyC,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;QACrF,IAAI,aAAa,GAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAC5D,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACrC,aAAa,GAAG;gBACd,GAAG,aAAa;gBAChB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc;gBACtC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW;aAC9C,CAAC;QACJ,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACzD,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;QAEnF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,0FAA0F;QACzI,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEvE,IAAI,OAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,QAAQ,EAAE,CAAC;gBACb,wEAAwE;gBACxE,qEAAqE;gBACrE,mEAAmE;gBACnE,MAAM,gCAAgC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAC/D,OAAO,GAAG,QAAQ,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yEAAyE;YACzE,uDAAuD;YACvD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACtC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO;YACL,cAAc,EAAE,OAAO;YACvB,KAAK,EAAE,KAAK,IAAI,EAAE;gBAChB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}