@enricai/barnacle 1.6.1 → 1.6.3

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 (105) hide show
  1. package/README.md +36 -29
  2. package/dist/api/errors.d.ts +3 -3
  3. package/dist/api/errors.d.ts.map +1 -1
  4. package/dist/api/errors.js +4 -4
  5. package/dist/api/errors.js.map +1 -1
  6. package/dist/api/helpers/reply.d.ts +1 -1
  7. package/dist/api/helpers/reply.js +1 -1
  8. package/dist/cache/keyed-ttl-cache.d.ts +4 -4
  9. package/dist/cache/keyed-ttl-cache.js +2 -2
  10. package/dist/lib/applicant-payload.d.ts +4 -4
  11. package/dist/lib/applicant-payload.js +4 -4
  12. package/dist/lib/application-address.d.ts +3 -3
  13. package/dist/lib/application-address.js +5 -5
  14. package/dist/lib/application-address.js.map +1 -1
  15. package/dist/lib/application-resume.d.ts +4 -4
  16. package/dist/lib/application-resume.js +4 -4
  17. package/dist/lib/dispatch-metrics.js +1 -1
  18. package/dist/lib/llm/judges/verify-submit.d.ts +1 -1
  19. package/dist/lib/llm/judges/verify-submit.js +1 -1
  20. package/dist/lib/llm/schemas.js +3 -3
  21. package/dist/lib/phone.d.ts +1 -1
  22. package/dist/lib/phone.js +1 -1
  23. package/dist/lib/telemetry/call-types.d.ts +1 -1
  24. package/dist/lib/telemetry/call-types.js +1 -1
  25. package/dist/lib/tracking-click.d.ts +5 -3
  26. package/dist/lib/tracking-click.d.ts.map +1 -1
  27. package/dist/lib/tracking-click.js +5 -3
  28. package/dist/lib/tracking-click.js.map +1 -1
  29. package/dist/lib/us-states.d.ts +1 -1
  30. package/dist/lib/us-states.js +1 -1
  31. package/dist/plugins/loader.js +2 -2
  32. package/dist/scraper/cookie-jar.d.ts +2 -2
  33. package/dist/scraper/cookie-jar.js +2 -2
  34. package/dist/scraper/deep-query.d.ts +36 -0
  35. package/dist/scraper/deep-query.d.ts.map +1 -0
  36. package/dist/scraper/deep-query.js +87 -0
  37. package/dist/scraper/deep-query.js.map +1 -0
  38. package/dist/scraper/errors.d.ts +12 -14
  39. package/dist/scraper/errors.d.ts.map +1 -1
  40. package/dist/scraper/errors.js +12 -17
  41. package/dist/scraper/errors.js.map +1 -1
  42. package/dist/scraper/flow-runner.d.ts +97 -30
  43. package/dist/scraper/flow-runner.d.ts.map +1 -1
  44. package/dist/scraper/flow-runner.js +304 -104
  45. package/dist/scraper/flow-runner.js.map +1 -1
  46. package/dist/scraper/http-client.d.ts +11 -1
  47. package/dist/scraper/http-client.d.ts.map +1 -1
  48. package/dist/scraper/http-client.js +90 -3
  49. package/dist/scraper/http-client.js.map +1 -1
  50. package/dist/scraper/phantom-click.d.ts +45 -0
  51. package/dist/scraper/phantom-click.d.ts.map +1 -0
  52. package/dist/scraper/phantom-click.js +37 -0
  53. package/dist/scraper/phantom-click.js.map +1 -0
  54. package/dist/scraper/raw-fetch.d.ts +2 -2
  55. package/dist/scraper/raw-fetch.js +1 -1
  56. package/dist/scraper/require-response-field.d.ts +1 -1
  57. package/dist/scraper/require-response-field.js +1 -1
  58. package/dist/scraper/session-browserbase.d.ts +48 -0
  59. package/dist/scraper/session-browserbase.d.ts.map +1 -1
  60. package/dist/scraper/session-browserbase.js +10 -5
  61. package/dist/scraper/session-browserbase.js.map +1 -1
  62. package/dist/scraper/session-shared.d.ts +6 -0
  63. package/dist/scraper/session-shared.d.ts.map +1 -1
  64. package/dist/scraper/session-shared.js.map +1 -1
  65. package/dist/scraper/session-warmup.d.ts +1 -1
  66. package/dist/scraper/session-warmup.js +1 -1
  67. package/dist/scraper/submit-control.d.ts +51 -0
  68. package/dist/scraper/submit-control.d.ts.map +1 -0
  69. package/dist/scraper/submit-control.js +142 -0
  70. package/dist/scraper/submit-control.js.map +1 -0
  71. package/dist/scripts/migrate-telemetry-dir-names.d.ts +2 -2
  72. package/dist/scripts/migrate-telemetry-dir-names.d.ts.map +1 -1
  73. package/dist/scripts/migrate-telemetry-dir-names.js +1 -1
  74. package/dist/scripts/recon-browser.d.ts +25 -20
  75. package/dist/scripts/recon-browser.d.ts.map +1 -1
  76. package/dist/scripts/recon-browser.js +65 -56
  77. package/dist/scripts/recon-browser.js.map +1 -1
  78. package/dist/scripts/recon-generate.d.ts +52 -7
  79. package/dist/scripts/recon-generate.d.ts.map +1 -1
  80. package/dist/scripts/recon-generate.js +73 -31
  81. package/dist/scripts/recon-generate.js.map +1 -1
  82. package/dist/scripts/recon-http.d.ts +36 -5
  83. package/dist/scripts/recon-http.d.ts.map +1 -1
  84. package/dist/scripts/recon-http.js +77 -47
  85. package/dist/scripts/recon-http.js.map +1 -1
  86. package/dist/scripts/recon-replay-jobs.d.ts +32 -3
  87. package/dist/scripts/recon-replay-jobs.d.ts.map +1 -1
  88. package/dist/scripts/recon-replay-jobs.js +46 -29
  89. package/dist/scripts/recon-replay-jobs.js.map +1 -1
  90. package/dist/scripts/recon-shared.d.ts +45 -0
  91. package/dist/scripts/recon-shared.d.ts.map +1 -1
  92. package/dist/scripts/recon-shared.js +117 -0
  93. package/dist/scripts/recon-shared.js.map +1 -1
  94. package/dist/scripts/recon-summarize.d.ts +5 -1
  95. package/dist/scripts/recon-summarize.d.ts.map +1 -1
  96. package/dist/scripts/recon-summarize.js +19 -7
  97. package/dist/scripts/recon-summarize.js.map +1 -1
  98. package/dist/site-plugin.d.ts +4 -4
  99. package/dist/testing/persona-fixture.d.ts +4 -4
  100. package/dist/testing/persona-fixture.d.ts.map +1 -1
  101. package/dist/testing/persona-fixture.js +4 -4
  102. package/dist/testing/persona-fixture.js.map +1 -1
  103. package/dist/types/dispatch-metrics.d.ts +1 -1
  104. package/dist/types/dispatch-metrics.js +1 -1
  105. package/package.json +1 -1
@@ -83,6 +83,58 @@ function extractCookieValue(setCookieHeaders, cookieName) {
83
83
  }
84
84
  return undefined;
85
85
  }
86
+ /**
87
+ * Finds a header's value by case-insensitive key lookup — `baseHeaders` and
88
+ * `init.headers` are operator-supplied with arbitrary casing (unlike
89
+ * `boundHeaders`, which is normalized via `targetHeaderCasing`), so a plain
90
+ * `headers["Cookie"]` lookup would miss a `"cookie"` or `"COOKIE"` key.
91
+ */
92
+ function findHeaderCaseInsensitive(headers, name) {
93
+ const lower = name.toLowerCase();
94
+ const key = Object.keys(headers).find((k) => k.toLowerCase() === lower);
95
+ return key === undefined ? undefined : headers[key];
96
+ }
97
+ /**
98
+ * Parses a `name=value; name=value` Cookie header string into per-cookie
99
+ * entries, mirroring the pair-splitting `extractCookieValue` already does
100
+ * for `Set-Cookie`. Skips malformed segments (no `=`) rather than throwing —
101
+ * an operator-authored `baseHeaders` or per-call `init.headers` Cookie value
102
+ * is untrusted input, not a value this module produced.
103
+ */
104
+ function parseCookiePairs(cookieHeader) {
105
+ return cookieHeader
106
+ .split(";")
107
+ .map((pair) => pair.trim())
108
+ .filter(Boolean)
109
+ .flatMap((pair) => {
110
+ const eq = pair.indexOf("=");
111
+ return eq === -1 ? [] : [[pair.slice(0, eq).trim(), pair.slice(eq + 1).trim()]];
112
+ });
113
+ }
114
+ /**
115
+ * Merges the Cookie header across `baseHeaders`, the live `boundHeaders`
116
+ * accumulator, and per-call `init.headers` by individual cookie name instead
117
+ * of the last-wins overwrite plain object spread gives every other header —
118
+ * see the http-client.ts module docblock and CLAUDE.md "battle-tested
119
+ * libraries only" for why the Cookie header specifically needs pair-level
120
+ * merging. Precedence on a name collision: a freshly bound value (the live
121
+ * session state a response just handed back) wins over a per-call override,
122
+ * which wins over the plugin's static default — bound values are the most
123
+ * current source of truth for a cookie in active rotation.
124
+ */
125
+ function mergeCookieHeader(baseHeaders, boundHeaders, initHeaders) {
126
+ const merged = new Map();
127
+ for (const source of [baseHeaders, initHeaders, boundHeaders]) {
128
+ const cookieHeader = findHeaderCaseInsensitive(source, "Cookie");
129
+ if (cookieHeader === undefined)
130
+ continue;
131
+ for (const [name, value] of parseCookiePairs(cookieHeader))
132
+ merged.set(name, value);
133
+ }
134
+ if (merged.size === 0)
135
+ return undefined;
136
+ return [...merged.entries()].map(([name, value]) => `${name}=${value}`).join("; ");
137
+ }
86
138
  /**
87
139
  * Resolves one {@link HttpResponseBinding} against a response's headers.
88
140
  * Returns `undefined` on a miss (source header/cookie absent) so the caller
@@ -125,10 +177,33 @@ function createHttpClient(options) {
125
177
  // targetHeader. Lives for the lifetime of this client instance so a later
126
178
  // call can pick up what an earlier call captured — see HttpResponseBinding.
127
179
  const boundHeaders = {};
180
+ // Per-cookie values for targetHeaders that carry multiple cookies (e.g.
181
+ // "Cookie"), keyed by targetHeader.toLowerCase() then cookieName so
182
+ // several bindings sharing one targetHeader — even across differing
183
+ // casing, since HTTP header names are case-insensitive — accumulate
184
+ // instead of overwriting or splitting into two outbound headers — see
185
+ // HttpResponseBinding.targetHeader. Materialized into boundHeaders
186
+ // (joined by "; ") whenever an entry changes.
187
+ const boundCookiesByTarget = new Map();
188
+ // Canonical (first-seen) casing of each targetHeader, keyed by
189
+ // targetHeader.toLowerCase() — lets both branches below write
190
+ // boundHeaders under one stable key regardless of which casing a later
191
+ // binding declares.
192
+ const targetHeaderCasing = new Map();
128
193
  return async (url, init = {}) => {
129
194
  return bottleneck.schedule(() => (0, p_retry_1.default)(async () => {
130
195
  const method = init.method ?? "GET";
131
- const headers = { ...baseHeaders, ...boundHeaders, ...(init.headers ?? {}) };
196
+ const initHeaders = init.headers ?? {};
197
+ const mergedCookie = mergeCookieHeader(baseHeaders, boundHeaders, initHeaders);
198
+ const headers = {
199
+ ...baseHeaders,
200
+ ...boundHeaders,
201
+ ...initHeaders,
202
+ };
203
+ if (mergedCookie !== undefined) {
204
+ const cookieKey = Object.keys(headers).find((k) => k.toLowerCase() === "cookie") ?? "Cookie";
205
+ headers[cookieKey] = mergedCookie;
206
+ }
132
207
  let response;
133
208
  try {
134
209
  response = await fetch(url, {
@@ -157,9 +232,21 @@ function createHttpClient(options) {
157
232
  // clearing it — and if nothing has ever been bound, the target
158
233
  // header stays absent from `boundHeaders` entirely, so later
159
234
  // requests never send it as an empty string.
160
- if (value !== undefined) {
161
- boundHeaders[binding.targetHeader] = value;
235
+ if (value === undefined)
236
+ continue;
237
+ const targetKey = binding.targetHeader.toLowerCase();
238
+ const canonicalTarget = targetHeaderCasing.get(targetKey) ?? binding.targetHeader;
239
+ targetHeaderCasing.set(targetKey, canonicalTarget);
240
+ if (binding.cookieName === undefined) {
241
+ boundHeaders[canonicalTarget] = value;
242
+ continue;
162
243
  }
244
+ const cookies = boundCookiesByTarget.get(targetKey) ?? new Map();
245
+ cookies.set(binding.cookieName, value);
246
+ boundCookiesByTarget.set(targetKey, cookies);
247
+ boundHeaders[canonicalTarget] = [...cookies.entries()]
248
+ .map(([name, cookieValue]) => `${name}=${cookieValue}`)
249
+ .join("; ");
163
250
  }
164
251
  if (response.status === 401 || response.status === 403) {
165
252
  // Bot challenge / auth wall — not a transient failure, abort retry.
@@ -1 +1 @@
1
- {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/scraper/http-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAmD;AACnD,yCAAiC;AAGjC,mDAA6C;AAG7C,2CAA0C;AAC1C,6CAO0B;AAE1B,MAAM,MAAM,GAAG,IAAA,mBAAS,EAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAC;AAE1D;;;;;;;GAOG;AACH,IAAI,mBAAmB,GAAG,CAAC,CAAC;AA0G5B;;;;;;GAMG;AACH,SAAS,yBAAyB,CAAC,OAAe,EAAE,GAAW;IAC7D,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,+BAA+B,GAAG,uBAAuB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9F,MAAM,IAAI,4BAAmB,CAAC,oCAAoC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,gBAA0B,EAAE,UAAkB;IACxE,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,EAAE,KAAK,CAAC,CAAC;YAAE,SAAS;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,OAA4B,EAAE,OAAgB;IACpE,IAAI,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,YAAY,EAAE,CAAC;QACxD,OAAO,OAAO,CAAC,UAAU;YACvB,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC;YAChE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;AACxD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,0BACE,OAAqC;IAErC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC;IACjG,0EAA0E;IAC1E,0EAA0E;IAC1E,4EAA4E;IAC5E,MAAM,YAAY,GAA2B,EAAE,CAAC;IAEhD,OAAO,KAAK,EAAE,GAAW,EAAE,IAAI,GAAoB,EAAE,EAAsB,EAAE;QAC3E,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,CAC9B,IAAA,iBAAM,EACJ,KAAK,IAAI,EAAE;YACT,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;YACpC,MAAM,OAAO,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;YAE7E,IAAI,QAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBAC1B,MAAM;oBACN,OAAO;oBACP,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,+DAA+D;gBAC/D,+DAA+D;gBAC/D,gEAAgE;gBAChE,+DAA+D;gBAC/D,uBAAuB;gBACvB,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBACtD,MAAM,IAAI,oBAAU,CAAC,GAAG,CAAC,CAAC;gBAC5B,CAAC;gBACD,+DAA+D;gBAC/D,MAAM,IAAI,4BAAmB,CAAC,sBAAsB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrE,CAAC;YAED,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YAE1E,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACxD,gEAAgE;gBAChE,+DAA+D;gBAC/D,6DAA6D;gBAC7D,6CAA6C;gBAC7C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;gBAC7C,CAAC;YACH,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvD,oEAAoE;gBACpE,MAAM,IAAI,oBAAU,CAClB,IAAI,8BAAqB,CACvB,QAAQ,QAAQ,CAAC,MAAM,SAAS,GAAG,mCAAmC,CACvE,CACF,CAAC;YACJ,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,qDAAqD;gBACrD,MAAM,IAAI,oBAAU,CAClB,IAAI,2BAAkB,CAAC,iBAAiB,GAAG,wBAAwB,CAAC,CACrE,CAAC;YACJ,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;gBAC3B,kEAAkE;gBAClE,uCAAuC;gBACvC,MAAM,IAAI,oBAAU,CAAC,IAAI,wBAAe,CAAC,QAAQ,QAAQ,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC;YACnF,CAAC;YAED,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,GAAG,EAAE,CAAC;gBAChD,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,sBAAsB,CAAC;oBACtE,IAAA,mBAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACpC,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBAC3D,MAAM,IAAI,GACR,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ;yBAClB,KAAK,CAAC,GAAG,CAAC;yBACV,MAAM,CAAC,OAAO,CAAC;yBACf,KAAK,CAAC,CAAC,CAAC,CAAC;yBACT,IAAI,CAAC,GAAG,CAAC;yBACT,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC;oBAChD,MAAM,MAAM,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,GAAG,GAAG,IAAI,MAAM,IAAI,IAAI,OAAO,CAAC,CAAC;oBAC1D,IAAA,uBAAa,EACX,MAAM,EACN,IAAI,CAAC,SAAS,CACZ;wBACE,MAAM;wBACN,GAAG;wBACH,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,cAAc,EAAE,OAAO;wBACvB,WAAW,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;qBAC/B,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;oBACF,MAAM,CAAC,IAAI,CAAC,2BAA2B,MAAM,EAAE,CAAC,CAAC;gBACnD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CACT,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACpF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEtC,mEAAmE;YACnE,gEAAgE;YAChE,qEAAqE;YACrE,gEAAgE;YAChE,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YAC5D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,oBAAU,CAAC,UAAU,CAAC,CAAC;YACvE,CAAC;YAED,MAAM,IAAI,GAAG,yBAAyB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CACT,6BAA6B,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5F,CAAC;gBACF,gDAAgD;gBAChD,MAAM,IAAI,oBAAU,CAClB,IAAI,wBAAe,CACjB,6BAA6B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpF,CACF,CAAC;YACJ,CAAC;YAED,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC,EACD;YACE,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC;YACT,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC3B,MAAM,CAAC,IAAI,CACT,yBAAyB,OAAO,CAAC,aAAa,YAAY,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,WAAW,eAAe,CACvH,CAAC;YACJ,CAAC;SACF,CACF,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/scraper/http-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Pure phantom-click predicate. `describeAttemptEffectSignals` (flow-runner.ts)
3
+ * renders pre/post deltas into a diagnostic string for LLM consumption; this
4
+ * module renders the same shape of data into a decision so the cascade can
5
+ * escalate immediately instead of repeating techniques that all no-op the
6
+ * same way (see recon-submit-phantom-click bug report).
7
+ */
8
+ /** Cheap snapshot of side effects — field names mirror flow-runner's StepSnapshot. */
9
+ export interface PhantomClickSnapshot {
10
+ networkCount: number;
11
+ url: string;
12
+ /** `document.body.outerHTML.length`. */
13
+ bodyHtmlLength: number;
14
+ }
15
+ export interface PhantomClickAttempt {
16
+ /** Stagehand's own verdict for the attempt — did it believe it acted? */
17
+ actResultSuccess: boolean | null;
18
+ pre: PhantomClickSnapshot;
19
+ post: PhantomClickSnapshot;
20
+ }
21
+ export type PhantomClickVerdict =
22
+ /** Stagehand reported success but pre/post shows no observable effect — a no-op click. */
23
+ "phantom"
24
+ /** Stagehand reported success and pre/post shows a real effect. */
25
+ | "effective"
26
+ /** Stagehand couldn't resolve a target at all (error / null) — distinct from a phantom click: nothing was clicked, vs. something was clicked that did nothing. */
27
+ | "unresolved";
28
+ /**
29
+ * Bytes of body-HTML growth treated as noise rather than a real DOM effect.
30
+ * Reused from `describeAttemptEffectSignals`'s dom-grew-without-network
31
+ * boundary (flow-runner.ts) so both signals agree on what counts as
32
+ * "trivial" — e.g. the bug report's attempt 5 (+30B) must classify as
33
+ * phantom, not effective.
34
+ */
35
+ export declare const TRIVIAL_DOM_DELTA_BYTES = 500;
36
+ /**
37
+ * Classifies one cascade attempt as `phantom` (Stagehand claimed success but
38
+ * pre/post shows zero network, zero URL change, and only trivial DOM
39
+ * growth), `unresolved` (Stagehand never resolved/executed the action), or
40
+ * `effective` (a real, observable change occurred). The cascade uses this to
41
+ * escalate off a phantom click immediately instead of burning all five
42
+ * techniques on the same no-op.
43
+ */
44
+ export declare function classifyPhantomClick(attempt: PhantomClickAttempt): PhantomClickVerdict;
45
+ //# sourceMappingURL=phantom-click.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phantom-click.d.ts","sourceRoot":"","sources":["../../src/scraper/phantom-click.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,sFAAsF;AACtF,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,GAAG,EAAE,oBAAoB,CAAC;IAC1B,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AAED,MAAM,MAAM,mBAAmB;AAC7B,0FAA0F;AACxF,SAAS;AACX,mEAAmE;GACjE,WAAW;AACb,kKAAkK;GAChK,YAAY,CAAC;AAEjB;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,mBAAmB,CAStF"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /**
3
+ * Pure phantom-click predicate. `describeAttemptEffectSignals` (flow-runner.ts)
4
+ * renders pre/post deltas into a diagnostic string for LLM consumption; this
5
+ * module renders the same shape of data into a decision so the cascade can
6
+ * escalate immediately instead of repeating techniques that all no-op the
7
+ * same way (see recon-submit-phantom-click bug report).
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.TRIVIAL_DOM_DELTA_BYTES = void 0;
11
+ exports.classifyPhantomClick = classifyPhantomClick;
12
+ /**
13
+ * Bytes of body-HTML growth treated as noise rather than a real DOM effect.
14
+ * Reused from `describeAttemptEffectSignals`'s dom-grew-without-network
15
+ * boundary (flow-runner.ts) so both signals agree on what counts as
16
+ * "trivial" — e.g. the bug report's attempt 5 (+30B) must classify as
17
+ * phantom, not effective.
18
+ */
19
+ exports.TRIVIAL_DOM_DELTA_BYTES = 500;
20
+ /**
21
+ * Classifies one cascade attempt as `phantom` (Stagehand claimed success but
22
+ * pre/post shows zero network, zero URL change, and only trivial DOM
23
+ * growth), `unresolved` (Stagehand never resolved/executed the action), or
24
+ * `effective` (a real, observable change occurred). The cascade uses this to
25
+ * escalate off a phantom click immediately instead of burning all five
26
+ * techniques on the same no-op.
27
+ */
28
+ function classifyPhantomClick(attempt) {
29
+ if (attempt.actResultSuccess !== true)
30
+ return "unresolved";
31
+ const networkDelta = attempt.post.networkCount - attempt.pre.networkCount;
32
+ const bytesDelta = attempt.post.bodyHtmlLength - attempt.pre.bodyHtmlLength;
33
+ const urlChanged = attempt.post.url !== attempt.pre.url;
34
+ const hasEffect = networkDelta !== 0 || urlChanged || bytesDelta >= exports.TRIVIAL_DOM_DELTA_BYTES;
35
+ return hasEffect ? "effective" : "phantom";
36
+ }
37
+ //# sourceMappingURL=phantom-click.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phantom-click.js","sourceRoot":"","sources":["../../src/scraper/phantom-click.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;AAyBH;;;;;;GAMG;AACU,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;;;;;;GAOG;AACH,8BAAqC,OAA4B;IAC/D,IAAI,OAAO,CAAC,gBAAgB,KAAK,IAAI;QAAE,OAAO,YAAY,CAAC;IAE3D,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC1E,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAExD,MAAM,SAAS,GAAG,YAAY,KAAK,CAAC,IAAI,UAAU,IAAI,UAAU,IAAI,QAAA,uBAAuB,CAAC;IAC5F,OAAO,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Site-agnostic fetch scaffold shared by plugins that cannot use
3
3
  * `createHttpClient` — typically because they need multipart Buffer bodies
4
- * or per-response header rotation (appcast token churn). Owns the
4
+ * or per-response header rotation (per-site token churn). Owns the
5
5
  * try/catch network-error conversion, the onResponse hook, and the
6
6
  * classifyHttpStatus call so callers only supply the what (URL, headers,
7
7
  * body) and the where (their token-rotation / audit hook and context label).
@@ -47,7 +47,7 @@ export interface RawFetchOptions {
47
47
  onResponse: (headers: Headers) => void;
48
48
  /**
49
49
  * Short label used in error messages from `classifyHttpStatus`, e.g.
50
- * `"appcast /integrated_questions"`. Should identify the endpoint so
50
+ * `"<site> /integrated_questions"`. Should identify the endpoint so
51
51
  * logs and error surfaces are actionable.
52
52
  */
53
53
  contextLabel: string;
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * Site-agnostic fetch scaffold shared by plugins that cannot use
4
4
  * `createHttpClient` — typically because they need multipart Buffer bodies
5
- * or per-response header rotation (appcast token churn). Owns the
5
+ * or per-response header rotation (per-site token churn). Owns the
6
6
  * try/catch network-error conversion, the onResponse hook, and the
7
7
  * classifyHttpStatus call so callers only supply the what (URL, headers,
8
8
  * body) and the where (their token-rotation / audit hook and context label).
@@ -14,7 +14,7 @@ export declare function requireResponseField<T>(obj: Record<string, unknown>, ke
14
14
  /**
15
15
  * Returns `resp.items[0][key]` cast to `T`. Throws {@link HttpSchemaError}
16
16
  * when `items` is absent or empty, or when the field itself is nullish.
17
- * Covers the Oracle HCM `?finder=...` pattern where results always arrive as
17
+ * Covers the `?finder=...` pattern used by some ATS APIs where results arrive as
18
18
  * `{ items: [...] }` and the first element carries the required field.
19
19
  */
20
20
  export declare function requireFirstItemField<T>(resp: {
@@ -25,7 +25,7 @@ function requireResponseField(obj, key, contextLabel) {
25
25
  /**
26
26
  * Returns `resp.items[0][key]` cast to `T`. Throws {@link HttpSchemaError}
27
27
  * when `items` is absent or empty, or when the field itself is nullish.
28
- * Covers the Oracle HCM `?finder=...` pattern where results always arrive as
28
+ * Covers the `?finder=...` pattern used by some ATS APIs where results arrive as
29
29
  * `{ items: [...] }` and the first element carries the required field.
30
30
  */
31
31
  function requireFirstItemField(resp, key, contextLabel) {
@@ -1,4 +1,52 @@
1
1
  import { type BrowserSession, type BrowserSessionOptions } from "../scraper/session-shared";
2
+ import type { Logger } from "../types/logging";
3
+ /**
4
+ * Shape of the LogLine objects Stagehand passes to its `logger` callback.
5
+ * We declare a minimal local subset rather than importing from Stagehand
6
+ * because the type isn't re-exported from the package's top-level entrypoint.
7
+ */
8
+ export interface StagehandLogLine {
9
+ message: string;
10
+ category?: string;
11
+ level?: number;
12
+ auxiliary?: Record<string, {
13
+ value: string;
14
+ type: string;
15
+ }>;
16
+ }
17
+ /**
18
+ * Build a custom Stagehand logger that filters out the noisy upstream
19
+ * `AI_TypeValidationError` schema-validation spam. The errors come from
20
+ * Stagehand's internal Haiku LLM returning bare integers like "4671"
21
+ * when its Zod schema requires "N-N" format (regex /^\\d+-\\d+$/ at
22
+ * stagehand inference.js:147+240). Each error stack-trace is ~500 bytes
23
+ * of pino I/O — verified at 118 occurrences in run 1781485435455
24
+ * (2026-06-14), totaling ~5-7 min of wasted wall clock.
25
+ *
26
+ * The existing cascade Fix 1B (resolvedAction-null fast-skip) already
27
+ * handles the consequence: when Stagehand returns success=false due to
28
+ * this schema error, attempt 1 short-circuits cleanly and attempt 2
29
+ * (observe-act) runs on a structured target instead. The error log
30
+ * lines are pure noise.
31
+ *
32
+ * Filter is precise — only matches when category is "AISDK error"
33
+ * AND the cause body contains both `AI_TypeValidationError` and
34
+ * `elementId`. Other AISDK errors (rate limits, malformed requests,
35
+ * server errors) pass through unchanged. Site-agnostic — the
36
+ * upstream Stagehand bug is universal across tenants.
37
+ *
38
+ * Returns the callback + a `reportSuppressed` function that the
39
+ * session teardown calls to log the final suppression count, plus a
40
+ * `getSuppressedCount` live accessor so callers can read the running
41
+ * total while a step is still executing — e.g. treating "resolver
42
+ * threw on this step" as evidence a reported-success click was
43
+ * phantom, without waiting for teardown.
44
+ */
45
+ export declare function makeFilteredStagehandLogger(pinoLogger: Logger): {
46
+ callback: (line: StagehandLogLine) => void;
47
+ reportSuppressed: () => void;
48
+ getSuppressedCount: () => number;
49
+ };
2
50
  /**
3
51
  * Spins up one Browserbase cloud session with the configured Stagehand LLM.
4
52
  *
@@ -1 +1 @@
1
- {"version":3,"file":"session-browserbase.d.ts","sourceRoot":"","sources":["../../src/scraper/session-browserbase.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAG3B,MAAM,0BAA0B,CAAC;AA6ElC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,+BAA+B,CACnD,IAAI,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,iBAAiB,GAAG,gCAAgC,CAAC,GACvF,OAAO,CAAC,cAAc,CAAC,CAkHzB"}
1
+ {"version":3,"file":"session-browserbase.d.ts","sourceRoot":"","sources":["../../src/scraper/session-browserbase.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAG3B,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAI9C;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG;IAC/D,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3C,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,kBAAkB,EAAE,MAAM,MAAM,CAAC;CAClC,CA6BA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,+BAA+B,CACnD,IAAI,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,iBAAiB,GAAG,gCAAgC,CAAC,GACvF,OAAO,CAAC,cAAc,CAAC,CAsHzB"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeFilteredStagehandLogger = makeFilteredStagehandLogger;
3
4
  exports.createBrowserbaseBrowserSession = createBrowserbaseBrowserSession;
4
5
  const stagehand_1 = require("@browserbasehq/stagehand");
5
6
  const config_1 = require("../config");
@@ -31,9 +32,11 @@ const logger = (0, logging_1.getLogger)({ name: "scraper/session-browserbase" })
31
32
  * upstream Stagehand bug is universal across tenants.
32
33
  *
33
34
  * Returns the callback + a `reportSuppressed` function that the
34
- * session teardown calls to log the final suppression count keeps
35
- * the noise out of the running log while preserving the diagnostic
36
- * for run-completion summary.
35
+ * session teardown calls to log the final suppression count, plus a
36
+ * `getSuppressedCount` live accessor so callers can read the running
37
+ * total while a step is still executing — e.g. treating "resolver
38
+ * threw on this step" as evidence a reported-success click was
39
+ * phantom, without waiting for teardown.
37
40
  */
38
41
  function makeFilteredStagehandLogger(pinoLogger) {
39
42
  let suppressedCount = 0;
@@ -62,7 +65,8 @@ function makeFilteredStagehandLogger(pinoLogger) {
62
65
  pinoLogger.info(`stagehand-logger: suppressed ${suppressedCount} AISDK elementId-regex errors (upstream Stagehand bug; cascade Fix 1B handles consequence)`);
63
66
  }
64
67
  };
65
- return { callback, reportSuppressed };
68
+ const getSuppressedCount = () => suppressedCount;
69
+ return { callback, reportSuppressed, getSuppressedCount };
66
70
  }
67
71
  /**
68
72
  * Spins up one Browserbase cloud session with the configured Stagehand LLM.
@@ -151,7 +155,7 @@ async function createBrowserbaseBrowserSession(opts) {
151
155
  operatingSystems: ["windows"],
152
156
  }
153
157
  : baseFingerprint;
154
- const { callback: stagehandLoggerCallback, reportSuppressed: reportSuppressedAisdkErrors } = makeFilteredStagehandLogger(logger);
158
+ const { callback: stagehandLoggerCallback, reportSuppressed: reportSuppressedAisdkErrors, getSuppressedCount: getSuppressedAisdkElementIdErrorCount, } = makeFilteredStagehandLogger(logger);
155
159
  let stagehand;
156
160
  try {
157
161
  stagehand = new stagehand_1.Stagehand({
@@ -215,6 +219,7 @@ async function createBrowserbaseBrowserSession(opts) {
215
219
  sessionId,
216
220
  provider: "browserbase",
217
221
  close,
222
+ getSuppressedAisdkElementIdErrorCount,
218
223
  };
219
224
  }
220
225
  //# sourceMappingURL=session-browserbase.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-browserbase.js","sourceRoot":"","sources":["../../src/scraper/session-browserbase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-browserbase.js","sourceRoot":"","sources":["../../src/scraper/session-browserbase.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,12 @@ export interface BrowserSession {
31
31
  /** Which provider produced this session — informational, useful for logs. */
32
32
  provider: ProviderName;
33
33
  close(): Promise<void>;
34
+ /**
35
+ * Live count of suppressed AISDK elementId-regex errors so far this
36
+ * session. Only present on providers that filter Stagehand's logger for
37
+ * this upstream error (currently Browserbase); absent on Steel.
38
+ */
39
+ getSuppressedAisdkElementIdErrorCount?: () => number;
34
40
  }
35
41
  /**
36
42
  * Returns a fetch wrapper that aborts after `timeoutMs` milliseconds.
@@ -1 +1 @@
1
- {"version":3,"file":"session-shared.d.ts","sourceRoot":"","sources":["../../src/scraper/session-shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AAIzC,8BAA8B;AAC9B,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,OAAO,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACrE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAEF,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8BAA8B,CAAC,EAAE,8BAA8B,CAAC;CACjE;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,KAAK,CAYlE;AAaD,wBAAgB,kBAAkB,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAEtE"}
1
+ {"version":3,"file":"session-shared.d.ts","sourceRoot":"","sources":["../../src/scraper/session-shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AAIzC,8BAA8B;AAC9B,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,OAAO,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACrE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAEF,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8BAA8B,CAAC,EAAE,8BAA8B,CAAC;CACjE;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB;;;;OAIG;IACH,qCAAqC,CAAC,EAAE,MAAM,MAAM,CAAC;CACtD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,KAAK,CAYlE;AAaD,wBAAgB,kBAAkB,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAEtE"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-shared.js","sourceRoot":"","sources":["../../src/scraper/session-shared.ts"],"names":[],"mappings":";;;;AAGA,yCAA0C;AAsC1C;;;;GAIG;AACH,4BAAmC,SAAiB;IAClD,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAC9D,kFAAkF;QAClF,gDAAgD;QAChD,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CACtD,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,YAAY,WAAW,CAClD,CAAC;QACF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1E,OAAO,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,SAAS,GAAG;IAChB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5B,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5B,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5B,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;CACrB,CAAC;AAEX;IACE,OAAO,IAAA,mBAAU,EAAC,SAAS,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"session-shared.js","sourceRoot":"","sources":["../../src/scraper/session-shared.ts"],"names":[],"mappings":";;;;AAGA,yCAA0C;AA4C1C;;;;GAIG;AACH,4BAAmC,SAAiB;IAClD,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAC9D,kFAAkF;QAClF,gDAAgD;QAChD,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CACtD,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,YAAY,WAAW,CAClD,CAAC;QACF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1E,OAAO,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,SAAS,GAAG;IAChB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5B,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5B,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5B,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;CACrB,CAAC;AAEX;IACE,OAAO,IAAA,mBAAU,EAAC,SAAS,CAAC,CAAC;AAC/B,CAAC"}
@@ -5,7 +5,7 @@
5
5
  * the caller-supplied pRetry options. On exhaustion, wraps the last error in
6
6
  * the caller-supplied `exhaustionError`.
7
7
  *
8
- * Extracted from appcast/tokens/warmup.ts so any future recon→generate warmup
8
+ * Extracted from a plugin's token warmup so any future recon→generate warmup
9
9
  * flow can reuse the session-lifecycle shell without re-hand-rolling pRetry +
10
10
  * finally-close + error-mapping each time.
11
11
  */
@@ -6,7 +6,7 @@
6
6
  * the caller-supplied pRetry options. On exhaustion, wraps the last error in
7
7
  * the caller-supplied `exhaustionError`.
8
8
  *
9
- * Extracted from appcast/tokens/warmup.ts so any future recon→generate warmup
9
+ * Extracted from a plugin's token warmup so any future recon→generate warmup
10
10
  * flow can reuse the session-lifecycle shell without re-hand-rolling pRetry +
11
11
  * finally-close + error-mapping each time.
12
12
  */
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Submit-control locator: ranks every submit-shaped candidate the deep
3
+ * resolver (`deep-query.ts`) can reach — piercing open shadow roots — so
4
+ * the cascade can act on the best-ranked candidate and retry the runner-up
5
+ * if the first click phantoms. A false-positive submit click on a real run
6
+ * (e.g. clicking "Save draft") is worse than the current failure, since it
7
+ * could submit a half-filled application — so ranking is deliberately
8
+ * conservative: only tiers with strong, unambiguous submit signal are
9
+ * included, and "Back"/"Cancel"/"Save draft"-shaped controls never appear.
10
+ */
11
+ /**
12
+ * Builds a self-contained `page.evaluate` expression string that walks the
13
+ * whole document (light DOM plus every open shadow root, arbitrarily deep)
14
+ * and returns every submit-shaped candidate ranked by confidence tier,
15
+ * highest first. Ties within a tier keep document order. Elements that
16
+ * match no positive tier — including anything caught by
17
+ * {@link NEGATIVE_TEXT_EXPR} — are excluded entirely rather than ranked
18
+ * last, so the caller never has to guess where the "safe" cutoff is.
19
+ *
20
+ * Each returned candidate carries `deepIndex`, the candidate's position in
21
+ * this same deterministic deep-traversal order. {@link buildClickByDeepIndexExpr}
22
+ * re-runs the identical traversal and clicks the element at that index, so
23
+ * the caller can locate once, decide which candidate to try, then click by
24
+ * index without holding a live element handle across the two round trips.
25
+ */
26
+ export declare function buildRankSubmitCandidatesExpr(): string;
27
+ /**
28
+ * Builds a self-contained `page.evaluate` expression string that re-runs
29
+ * the same deterministic deep traversal as {@link buildRankSubmitCandidatesExpr}
30
+ * and clicks the element at `deepIndex` (dispatching focus + bubbling
31
+ * mousedown/mouseup/click, matching `deep-query.ts`'s controlled-state click
32
+ * convention). Returns `{ clicked: false }` without throwing if the index is
33
+ * out of range for the current DOM (e.g. the page changed between the
34
+ * locate and click calls).
35
+ */
36
+ export declare function buildClickByDeepIndexExpr(deepIndex: number): string;
37
+ /** Confidence tier for a ranked submit candidate — higher is more confident. See {@link buildRankSubmitCandidatesExpr}. */
38
+ export type SubmitCandidateTier = 1 | 2 | 3;
39
+ /** One ranked candidate returned by {@link buildRankSubmitCandidatesExpr}'s `page.evaluate` call. */
40
+ export interface SubmitCandidate {
41
+ /** Position in the deterministic deep-traversal order; pass to {@link buildClickByDeepIndexExpr} to click this exact candidate. */
42
+ deepIndex: number;
43
+ tier: SubmitCandidateTier;
44
+ tag: string;
45
+ accessibleName: string;
46
+ }
47
+ /** Result of {@link buildClickByDeepIndexExpr}'s `page.evaluate` call. */
48
+ export interface ClickByDeepIndexResult {
49
+ clicked: boolean;
50
+ }
51
+ //# sourceMappingURL=submit-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-control.d.ts","sourceRoot":"","sources":["../../src/scraper/submit-control.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAyEH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CAsBtD;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAYnE;AAED,2HAA2H;AAC3H,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE5C,qGAAqG;AACrG,MAAM,WAAW,eAAe;IAC9B,mIAAmI;IACnI,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,0EAA0E;AAC1E,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;CAClB"}