@mercuryo-ai/agentbrowse 0.2.57 → 0.2.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -57
- package/dist/browser-session-state.d.ts +39 -0
- package/dist/browser-session-state.d.ts.map +1 -1
- package/dist/browser-session-state.js +63 -1
- package/dist/command-name.js +1 -1
- package/dist/commands/act.d.ts.map +1 -1
- package/dist/commands/act.js +540 -528
- package/dist/commands/action-executor-helpers.d.ts.map +1 -1
- package/dist/commands/action-executor-helpers.js +10 -8
- package/dist/commands/attach.d.ts.map +1 -1
- package/dist/commands/attach.js +5 -10
- package/dist/commands/browser-connection-failure.d.ts +9 -0
- package/dist/commands/browser-connection-failure.d.ts.map +1 -0
- package/dist/commands/browser-connection-failure.js +15 -0
- package/dist/commands/browser-status.d.ts.map +1 -1
- package/dist/commands/browser-status.js +26 -30
- package/dist/commands/click-activation-policy.d.ts.map +1 -1
- package/dist/commands/click-activation-policy.js +6 -2
- package/dist/commands/close.d.ts.map +1 -1
- package/dist/commands/close.js +5 -0
- package/dist/commands/extract.d.ts.map +1 -1
- package/dist/commands/extract.js +147 -144
- package/dist/commands/launch.d.ts +0 -1
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +13 -16
- package/dist/commands/navigate.d.ts.map +1 -1
- package/dist/commands/navigate.js +79 -73
- package/dist/commands/observe-inventory.d.ts +6 -1
- package/dist/commands/observe-inventory.d.ts.map +1 -1
- package/dist/commands/observe-inventory.js +331 -8
- package/dist/commands/observe-persistence.d.ts.map +1 -1
- package/dist/commands/observe-persistence.js +2 -0
- package/dist/commands/observe-projection.d.ts +3 -2
- package/dist/commands/observe-projection.d.ts.map +1 -1
- package/dist/commands/observe-projection.js +1 -0
- package/dist/commands/observe-protected.d.ts +3 -1
- package/dist/commands/observe-protected.d.ts.map +1 -1
- package/dist/commands/observe-protected.js +23 -1
- package/dist/commands/observe-semantics.d.ts.map +1 -1
- package/dist/commands/observe-semantics.js +70 -0
- package/dist/commands/observe.d.ts +1 -0
- package/dist/commands/observe.d.ts.map +1 -1
- package/dist/commands/observe.js +260 -270
- package/dist/commands/screenshot.d.ts.map +1 -1
- package/dist/commands/screenshot.js +50 -64
- package/dist/control-semantics.d.ts.map +1 -1
- package/dist/control-semantics.js +5 -0
- package/dist/date-value-normalization.d.ts +16 -0
- package/dist/date-value-normalization.d.ts.map +1 -0
- package/dist/date-value-normalization.js +117 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -24
- package/dist/library.d.ts +5 -1
- package/dist/library.d.ts.map +1 -1
- package/dist/library.js +4 -1
- package/dist/protected-fill.d.ts +3 -2
- package/dist/protected-fill.d.ts.map +1 -1
- package/dist/protected-fill.js +46 -7
- package/dist/runtime-protected-state.d.ts.map +1 -1
- package/dist/runtime-protected-state.js +8 -1
- package/dist/runtime-state.d.ts +11 -0
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/secrets/form-matcher.d.ts +1 -2
- package/dist/secrets/form-matcher.d.ts.map +1 -1
- package/dist/secrets/form-matcher.js +125 -119
- package/dist/secrets/matching-helpers.d.ts +13 -0
- package/dist/secrets/matching-helpers.d.ts.map +1 -0
- package/dist/secrets/matching-helpers.js +147 -0
- package/dist/secrets/observed-field-resolution.d.ts +43 -0
- package/dist/secrets/observed-field-resolution.d.ts.map +1 -0
- package/dist/secrets/observed-field-resolution.js +223 -0
- package/dist/secrets/protected-field-semantics.d.ts.map +1 -1
- package/dist/secrets/protected-field-semantics.js +3 -2
- package/dist/secrets/protected-fill.d.ts +3 -1
- package/dist/secrets/protected-fill.d.ts.map +1 -1
- package/dist/secrets/protected-fill.js +31 -0
- package/dist/secrets/protected-value-adapters.d.ts.map +1 -1
- package/dist/secrets/protected-value-adapters.js +14 -22
- package/dist/secrets/types.d.ts +3 -0
- package/dist/secrets/types.d.ts.map +1 -1
- package/dist/sticky-owner-host-entry.d.ts +2 -0
- package/dist/sticky-owner-host-entry.d.ts.map +1 -0
- package/dist/sticky-owner-host-entry.js +97 -0
- package/dist/sticky-owner.d.ts +15 -0
- package/dist/sticky-owner.d.ts.map +1 -0
- package/dist/sticky-owner.js +431 -0
- package/docs/README.md +15 -2
- package/docs/api-reference.md +13 -3
- package/docs/assistive-runtime.md +63 -7
- package/docs/configuration.md +48 -8
- package/docs/getting-started.md +42 -9
- package/docs/integration-checklist.md +8 -7
- package/docs/protected-fill.md +40 -7
- package/docs/testing.md +4 -3
- package/docs/troubleshooting.md +126 -36
- package/examples/README.md +9 -2
- package/package.json +8 -3
- package/dist/protected-fill-browser.d.ts +0 -22
- package/dist/protected-fill-browser.d.ts.map +0 -1
- package/dist/protected-fill-browser.js +0 -52
|
@@ -6,8 +6,10 @@ import { getProtectedExposure } from '../runtime-protected-state.js';
|
|
|
6
6
|
import { saveSession } from '../session.js';
|
|
7
7
|
import { outputFailure, outputJSON, outputContractFailure, info } from '../output.js';
|
|
8
8
|
import { captureDiagnosticSnapshotBestEffort, finishDiagnosticStepBestEffort, recordCommandLifecycleEventBestEffort, startDiagnosticStep, } from '../diagnostics.js';
|
|
9
|
-
import {
|
|
9
|
+
import { resolveCurrentPageContext, syncSessionPage } from '../playwright-runtime.js';
|
|
10
10
|
import { buildProtectedScreenshotBlockedResult, } from '../secrets/protected-artifact-guard.js';
|
|
11
|
+
import { describeBrowserConnectionFailure } from './browser-connection-failure.js';
|
|
12
|
+
import { withStickyOwnerBrowser } from '../sticky-owner.js';
|
|
11
13
|
/** Stable top-level error codes returned by `screenshot(...)`. */
|
|
12
14
|
export const SCREENSHOT_ERROR_CODES = [
|
|
13
15
|
'browser_connection_failed',
|
|
@@ -172,81 +174,65 @@ export async function screenshotBrowser(session, filePath) {
|
|
|
172
174
|
protectedStep: Boolean(initialProtectedExposure),
|
|
173
175
|
},
|
|
174
176
|
});
|
|
175
|
-
let browser = null;
|
|
176
|
-
let failureMessage = null;
|
|
177
|
-
let page = null;
|
|
178
177
|
try {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
178
|
+
return await withStickyOwnerBrowser(session, async (browser) => {
|
|
179
|
+
try {
|
|
180
|
+
const resolvedPage = await resolveCurrentPageContext(browser, session);
|
|
181
|
+
pageRef = resolvedPage.pageRef;
|
|
182
|
+
const page = resolvedPage.page;
|
|
183
|
+
const recoveredProtectedExposure = getProtectedExposure(session, pageRef) ?? (!page ? initialProtectedExposure : null);
|
|
184
|
+
if (recoveredProtectedExposure) {
|
|
185
|
+
if (page && pageRef !== initialPageRef) {
|
|
186
|
+
setCurrentPage(session, pageRef);
|
|
187
|
+
}
|
|
188
|
+
return buildScreenshotFailureResult(session, {
|
|
189
|
+
step: screenshotStepHandle,
|
|
190
|
+
...buildProtectedScreenshotBlockedResult(recoveredProtectedExposure),
|
|
191
|
+
runId: session.activeRunId,
|
|
192
|
+
stepId: screenshotStep?.stepId,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
if (!page) {
|
|
196
|
+
throw new Error('no_open_pages');
|
|
197
|
+
}
|
|
198
|
+
await page.screenshot({ path: outputPath });
|
|
199
|
+
const { url, title } = await syncSessionPage(session, pageRef, page);
|
|
200
|
+
setCurrentPage(session, pageRef);
|
|
201
|
+
return buildScreenshotSuccessResult({
|
|
202
|
+
session,
|
|
203
|
+
step: screenshotStepHandle,
|
|
204
|
+
runId: session.activeRunId,
|
|
205
|
+
stepId: screenshotStep?.stepId,
|
|
206
|
+
pageRef,
|
|
207
|
+
path: outputPath,
|
|
208
|
+
url,
|
|
209
|
+
title,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
throw new Error(`screenshot_failed:${error instanceof Error ? error.message : String(error)}`);
|
|
214
|
+
}
|
|
190
215
|
});
|
|
191
216
|
}
|
|
192
|
-
try {
|
|
193
|
-
const resolvedPage = await resolveCurrentPageContext(browser, session);
|
|
194
|
-
pageRef = resolvedPage.pageRef;
|
|
195
|
-
page = resolvedPage.page;
|
|
196
|
-
}
|
|
197
217
|
catch (err) {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
setCurrentPage(session, pageRef);
|
|
204
|
-
}
|
|
205
|
-
if (browser) {
|
|
206
|
-
await disconnectPlaywright(browser);
|
|
207
|
-
browser = null;
|
|
208
|
-
}
|
|
209
|
-
return buildScreenshotFailureResult(session, {
|
|
210
|
-
step: screenshotStepHandle,
|
|
211
|
-
...buildProtectedScreenshotBlockedResult(recoveredProtectedExposure),
|
|
212
|
-
runId: session.activeRunId,
|
|
213
|
-
stepId: screenshotStep?.stepId,
|
|
218
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
219
|
+
const isCommandFailure = reason.startsWith('screenshot_failed:');
|
|
220
|
+
const browserConnectionFailure = describeBrowserConnectionFailure(err, {
|
|
221
|
+
defaultMessage: 'Screenshot capture could not start because AgentBrowse failed to connect to the browser.',
|
|
222
|
+
unrecoverableSessionMessage: 'Screenshot capture could not start because the previous browser session is no longer reachable.',
|
|
214
223
|
});
|
|
215
|
-
}
|
|
216
|
-
try {
|
|
217
|
-
if (!page) {
|
|
218
|
-
throw new Error(failureMessage?.replace(/^Screenshot failed:\s*/, '') ?? 'no_open_pages');
|
|
219
|
-
}
|
|
220
|
-
await page.screenshot({ path: outputPath });
|
|
221
|
-
const { url, title } = await syncSessionPage(session, pageRef, page);
|
|
222
|
-
setCurrentPage(session, pageRef);
|
|
223
|
-
return buildScreenshotSuccessResult({
|
|
224
|
-
session,
|
|
225
|
-
step: screenshotStepHandle,
|
|
226
|
-
runId: session.activeRunId,
|
|
227
|
-
stepId: screenshotStep?.stepId,
|
|
228
|
-
pageRef,
|
|
229
|
-
path: outputPath,
|
|
230
|
-
url,
|
|
231
|
-
title,
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
catch (err) {
|
|
235
224
|
return buildScreenshotContractFailureResult(session, {
|
|
236
225
|
step: screenshotStepHandle,
|
|
237
|
-
error: 'screenshot_failed',
|
|
226
|
+
error: isCommandFailure ? 'screenshot_failed' : 'browser_connection_failed',
|
|
238
227
|
outcomeType: 'blocked',
|
|
239
|
-
message: 'Screenshot capture failed.',
|
|
240
|
-
reason:
|
|
228
|
+
message: isCommandFailure ? 'Screenshot capture failed.' : browserConnectionFailure.message,
|
|
229
|
+
reason: isCommandFailure
|
|
230
|
+
? reason.replace(/^screenshot_failed:/, '')
|
|
231
|
+
: browserConnectionFailure.reason,
|
|
241
232
|
runId: session.activeRunId,
|
|
242
233
|
stepId: screenshotStep?.stepId,
|
|
243
234
|
});
|
|
244
235
|
}
|
|
245
|
-
finally {
|
|
246
|
-
if (browser) {
|
|
247
|
-
await disconnectPlaywright(browser);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
236
|
}
|
|
251
237
|
/** CLI wrapper for `screenshotBrowser(...)` that persists session changes and writes JSON output. */
|
|
252
238
|
export async function screenshot(session, filePath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-semantics.d.ts","sourceRoot":"","sources":["../src/control-semantics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;AAEzE,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAwCtF,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,oBAAoB,GAC1B,mBAAmB,GAAG,SAAS,CAuCjC;AA6LD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAYxE;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,oBAAoB,GAAG,mBAAmB,EAAE,CA4G/F;AAED,wBAAgB,0BAA0B,CACxC,MAAM,CAAC,EAAE,gBAAgB,EACzB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE;IACP,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC1B,GACL,uBAAuB,CAyBzB;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,aAAa,CAAC,mBAAmB,CAAC,GACjD,mBAAmB,GAAG,SAAS,CA0EjC;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,aAAa,CAAC,mBAAmB,CAAC,GACjD,sBAAsB,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"control-semantics.d.ts","sourceRoot":"","sources":["../src/control-semantics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;AAEzE,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAwCtF,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,oBAAoB,GAC1B,mBAAmB,GAAG,SAAS,CAuCjC;AA6LD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAYxE;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,oBAAoB,GAAG,mBAAmB,EAAE,CA4G/F;AAED,wBAAgB,0BAA0B,CACxC,MAAM,CAAC,EAAE,gBAAgB,EACzB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE;IACP,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC1B,GACL,uBAAuB,CAyBzB;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,aAAa,CAAC,mBAAmB,CAAC,GACjD,mBAAmB,GAAG,SAAS,CA0EjC;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,aAAa,CAAC,mBAAmB,CAAC,GACjD,sBAAsB,GAAG,SAAS,CAqDpC"}
|
|
@@ -387,6 +387,7 @@ export function inferAcceptancePolicyFromFacts(facts, allowedActions) {
|
|
|
387
387
|
const states = facts.states;
|
|
388
388
|
const kind = normalizeText(facts.kind);
|
|
389
389
|
const role = normalizeText(facts.role);
|
|
390
|
+
const inputType = normalizeText(facts.inputType);
|
|
390
391
|
const controlFamily = inferControlFamilyFromFacts(facts, allowedActions);
|
|
391
392
|
if (facts.structure?.family === 'structured-grid') {
|
|
392
393
|
return facts.structure.variant === 'date-cell' ? 'date-selection' : 'selection';
|
|
@@ -409,6 +410,10 @@ export function inferAcceptancePolicyFromFacts(facts, allowedActions) {
|
|
|
409
410
|
if (role === 'link' || kind === 'link') {
|
|
410
411
|
return 'navigation';
|
|
411
412
|
}
|
|
413
|
+
if (inputType === 'submit' &&
|
|
414
|
+
(kind === 'button' || role === 'button' || isButtonLikeInputFacts(facts))) {
|
|
415
|
+
return 'submit';
|
|
416
|
+
}
|
|
412
417
|
if (!legacyMethod && SUBMIT_LABEL_RE.test(label)) {
|
|
413
418
|
return 'submit';
|
|
414
419
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type DateValueNormalizationErrorReason = 'ambiguous_date_value' | 'incomplete_date_value' | 'invalid_date_value';
|
|
2
|
+
export type NormalizedDateValueResult = {
|
|
3
|
+
kind: 'normalized';
|
|
4
|
+
iso: string;
|
|
5
|
+
year: string;
|
|
6
|
+
month: string;
|
|
7
|
+
day: string;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'error';
|
|
10
|
+
reason: DateValueNormalizationErrorReason;
|
|
11
|
+
} | {
|
|
12
|
+
kind: 'not_date_like';
|
|
13
|
+
};
|
|
14
|
+
export declare function isDateValueNormalizationErrorReason(value: string): value is DateValueNormalizationErrorReason;
|
|
15
|
+
export declare function normalizeStructuredDateValue(value: string): NormalizedDateValueResult;
|
|
16
|
+
//# sourceMappingURL=date-value-normalization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-value-normalization.d.ts","sourceRoot":"","sources":["../src/date-value-normalization.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iCAAiC,GACzC,sBAAsB,GACtB,uBAAuB,GACvB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,yBAAyB,GACjC;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,iCAAiC,CAAC;CAC3C,GACD;IACE,IAAI,EAAE,eAAe,CAAC;CACvB,CAAC;AAsDN,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,MAAM,GACZ,KAAK,IAAI,iCAAiC,CAM5C;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,yBAAyB,CAuFrF"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
const ISO_DATE_RE = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
2
|
+
const YEAR_FIRST_DATE_RE = /^(\d{4})[./-](\d{1,2})[./-](\d{1,2})$/;
|
|
3
|
+
const DAY_OR_MONTH_FIRST_DATE_RE = /^(\d{1,2})[./-](\d{1,2})[./-](\d{4})$/;
|
|
4
|
+
const PARTIAL_DATE_RE = /^(?:\d{4}[./-]\d{1,2}|\d{1,2}[./-](?:\d{2}|\d{4}))$/;
|
|
5
|
+
function padDatePart(value) {
|
|
6
|
+
return String(value).padStart(2, '0');
|
|
7
|
+
}
|
|
8
|
+
function buildNormalizedDateValue(year, month, day) {
|
|
9
|
+
if (!Number.isInteger(year) ||
|
|
10
|
+
!Number.isInteger(month) ||
|
|
11
|
+
!Number.isInteger(day) ||
|
|
12
|
+
month < 1 ||
|
|
13
|
+
month > 12 ||
|
|
14
|
+
day < 1 ||
|
|
15
|
+
day > 31) {
|
|
16
|
+
return {
|
|
17
|
+
kind: 'error',
|
|
18
|
+
reason: 'invalid_date_value',
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const date = new Date(Date.UTC(year, month - 1, day));
|
|
22
|
+
if (date.getUTCFullYear() !== year ||
|
|
23
|
+
date.getUTCMonth() !== month - 1 ||
|
|
24
|
+
date.getUTCDate() !== day) {
|
|
25
|
+
return {
|
|
26
|
+
kind: 'error',
|
|
27
|
+
reason: 'invalid_date_value',
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const paddedMonth = padDatePart(month);
|
|
31
|
+
const paddedDay = padDatePart(day);
|
|
32
|
+
return {
|
|
33
|
+
kind: 'normalized',
|
|
34
|
+
iso: `${String(year)}-${paddedMonth}-${paddedDay}`,
|
|
35
|
+
year: String(year),
|
|
36
|
+
month: paddedMonth,
|
|
37
|
+
day: paddedDay,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function isDateValueNormalizationErrorReason(value) {
|
|
41
|
+
return (value === 'ambiguous_date_value' ||
|
|
42
|
+
value === 'incomplete_date_value' ||
|
|
43
|
+
value === 'invalid_date_value');
|
|
44
|
+
}
|
|
45
|
+
export function normalizeStructuredDateValue(value) {
|
|
46
|
+
const trimmed = value.trim();
|
|
47
|
+
if (trimmed.length === 0) {
|
|
48
|
+
return {
|
|
49
|
+
kind: 'not_date_like',
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const isoMatch = trimmed.match(ISO_DATE_RE);
|
|
53
|
+
if (isoMatch) {
|
|
54
|
+
return buildNormalizedDateValue(Number(isoMatch[1]), Number(isoMatch[2]), Number(isoMatch[3]));
|
|
55
|
+
}
|
|
56
|
+
const yearFirstMatch = trimmed.match(YEAR_FIRST_DATE_RE);
|
|
57
|
+
if (yearFirstMatch) {
|
|
58
|
+
return buildNormalizedDateValue(Number(yearFirstMatch[1]), Number(yearFirstMatch[2]), Number(yearFirstMatch[3]));
|
|
59
|
+
}
|
|
60
|
+
const dayOrMonthFirstMatch = trimmed.match(DAY_OR_MONTH_FIRST_DATE_RE);
|
|
61
|
+
if (dayOrMonthFirstMatch) {
|
|
62
|
+
const first = Number(dayOrMonthFirstMatch[1]);
|
|
63
|
+
const second = Number(dayOrMonthFirstMatch[2]);
|
|
64
|
+
const year = Number(dayOrMonthFirstMatch[3]);
|
|
65
|
+
const dayFirstCandidate = first >= 1 && first <= 31 && second >= 1 && second <= 12;
|
|
66
|
+
const monthFirstCandidate = first >= 1 && first <= 12 && second >= 1 && second <= 31;
|
|
67
|
+
if (dayFirstCandidate && monthFirstCandidate) {
|
|
68
|
+
const dayFirst = buildNormalizedDateValue(year, second, first);
|
|
69
|
+
const monthFirst = buildNormalizedDateValue(year, first, second);
|
|
70
|
+
if (dayFirst.kind === 'normalized' && monthFirst.kind === 'normalized') {
|
|
71
|
+
if (dayFirst.iso === monthFirst.iso) {
|
|
72
|
+
return dayFirst;
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
kind: 'error',
|
|
76
|
+
reason: 'ambiguous_date_value',
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (dayFirst.kind === 'normalized') {
|
|
80
|
+
return dayFirst;
|
|
81
|
+
}
|
|
82
|
+
if (monthFirst.kind === 'normalized') {
|
|
83
|
+
return monthFirst;
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
kind: 'error',
|
|
87
|
+
reason: 'invalid_date_value',
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (dayFirstCandidate) {
|
|
91
|
+
return buildNormalizedDateValue(year, second, first);
|
|
92
|
+
}
|
|
93
|
+
if (monthFirstCandidate) {
|
|
94
|
+
return buildNormalizedDateValue(year, first, second);
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
kind: 'error',
|
|
98
|
+
reason: 'invalid_date_value',
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
if (PARTIAL_DATE_RE.test(trimmed)) {
|
|
102
|
+
return {
|
|
103
|
+
kind: 'error',
|
|
104
|
+
reason: 'incomplete_date_value',
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const separatorCount = trimmed.split(/[./-]/).length - 1;
|
|
108
|
+
if (separatorCount >= 2 && /\d/.test(trimmed)) {
|
|
109
|
+
return {
|
|
110
|
+
kind: 'error',
|
|
111
|
+
reason: 'invalid_date_value',
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
kind: 'not_date_like',
|
|
116
|
+
};
|
|
117
|
+
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAuOA,iBAAe,IAAI,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoJhE;AAED,OAAO,EAAE,IAAI,EAAE,CAAC;AAEhB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAWzF"}
|
package/dist/index.js
CHANGED
|
@@ -22,14 +22,9 @@ Commands:
|
|
|
22
22
|
close Close browser and clean up
|
|
23
23
|
|
|
24
24
|
Options:
|
|
25
|
-
--compact Launch browser in compact window size (1280x900, default)
|
|
26
|
-
--full Launch browser in full-size window
|
|
27
|
-
--profile <name> Solver profile name for launch (default: "default")
|
|
28
25
|
--proxy [url] Launch through configured proxy, or use one-off override URL
|
|
29
26
|
--provider <name> Optional provider label for attach (for example "browserbase")
|
|
30
|
-
--headful
|
|
31
|
-
--headless Explicit alias for headless browser mode (default)
|
|
32
|
-
--path <file> Output path for screenshot
|
|
27
|
+
--headful Launch a visible browser window
|
|
33
28
|
--help Show this help message`;
|
|
34
29
|
}
|
|
35
30
|
const KNOWN_COMMANDS = new Set([
|
|
@@ -95,33 +90,20 @@ function getPositionals(args, valueFlags = []) {
|
|
|
95
90
|
}
|
|
96
91
|
function parseLaunchArgs(args) {
|
|
97
92
|
let url;
|
|
98
|
-
let compact = true;
|
|
99
93
|
let profile;
|
|
100
94
|
let headless;
|
|
101
95
|
let useProxy = false;
|
|
102
96
|
let proxy;
|
|
103
97
|
for (let i = 0; i < args.length; i++) {
|
|
104
98
|
const arg = args[i];
|
|
105
|
-
if (arg === '--headless') {
|
|
106
|
-
headless = true;
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
99
|
if (arg === '--headful') {
|
|
110
100
|
headless = false;
|
|
111
101
|
continue;
|
|
112
102
|
}
|
|
113
|
-
if (arg === '--compact') {
|
|
114
|
-
compact = true;
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
if (arg === '--full') {
|
|
118
|
-
compact = false;
|
|
119
|
-
continue;
|
|
120
|
-
}
|
|
121
103
|
if (arg === '--profile') {
|
|
122
104
|
const value = args[i + 1];
|
|
123
105
|
if (!value || value.startsWith('--')) {
|
|
124
|
-
outputError(`Usage: ${browseCommand('launch', '[url]', '[--
|
|
106
|
+
outputError(`Usage: ${browseCommand('launch', '[url]', '[--proxy [url]]', '[--headful]')}`);
|
|
125
107
|
}
|
|
126
108
|
profile = value;
|
|
127
109
|
i += 1;
|
|
@@ -130,7 +112,7 @@ function parseLaunchArgs(args) {
|
|
|
130
112
|
if (arg.startsWith('--proxy=')) {
|
|
131
113
|
const value = arg.slice('--proxy='.length).trim();
|
|
132
114
|
if (!value) {
|
|
133
|
-
outputError(`Usage: ${browseCommand('launch', '[url]', '[--
|
|
115
|
+
outputError(`Usage: ${browseCommand('launch', '[url]', '[--proxy [url]]', '[--headful]')}`);
|
|
134
116
|
}
|
|
135
117
|
useProxy = true;
|
|
136
118
|
proxy = value;
|
|
@@ -150,11 +132,11 @@ function parseLaunchArgs(args) {
|
|
|
150
132
|
outputError(`Unknown launch option: ${arg}`);
|
|
151
133
|
}
|
|
152
134
|
if (url) {
|
|
153
|
-
outputError(`Usage: ${browseCommand('launch', '[url]', '[--
|
|
135
|
+
outputError(`Usage: ${browseCommand('launch', '[url]', '[--proxy [url]]', '[--headful]')}`);
|
|
154
136
|
}
|
|
155
137
|
url = arg;
|
|
156
138
|
}
|
|
157
|
-
return { url,
|
|
139
|
+
return { url, profile, headless, useProxy, proxy };
|
|
158
140
|
}
|
|
159
141
|
function parseAttachArgs(args) {
|
|
160
142
|
let cdpUrl;
|
|
@@ -226,7 +208,6 @@ async function main(argv = process.argv) {
|
|
|
226
208
|
await Promise.resolve(close(existingSession)).catch(() => undefined);
|
|
227
209
|
deleteWorkflowContext();
|
|
228
210
|
const launchResult = await launch(launchArgs.url, {
|
|
229
|
-
compact: launchArgs.compact,
|
|
230
211
|
...(launchArgs.profile ? { profile: launchArgs.profile } : {}),
|
|
231
212
|
...(typeof launchArgs.headless === 'boolean' ? { headless: launchArgs.headless } : {}),
|
|
232
213
|
useProxy: launchArgs.useProxy,
|
package/dist/library.d.ts
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
export { createBrowserSessionStore, deleteBrowserSession, getSessionPort, isAttachedSession, isOwnedSession, isSessionAlive, loadBrowserSession, resolveBrowserSessionId, saveBrowserSession, serializeBrowserSession, supportsCaptchaSolve, buildAttachedSession, buildOwnedSession, type BrowserSessionCapabilities, type BrowserSessionStore, type BrowserSessionState, type BrowseSessionIdentity, type BrowseSessionTransport, } from './browser-session-state.js';
|
|
1
|
+
export { createBrowserSessionStore, deleteBrowserSession, getSessionPort, isAttachedSession, isOwnedSession, isSessionAlive, loadBrowserSession, resolveBrowserSessionId, saveBrowserSession, serializeBrowserSession, supportsCaptchaSolve, buildAttachedSession, buildOwnedSession, buildStickyOwnerMetadata, canPersistStickyOwnerMetadata, type BrowserSessionCapabilities, type BrowserSessionStore, type BrowserSessionState, type BrowseSessionIdentity, type BrowseSessionTransport, type StickyOwnerInProcessTransport, type StickyOwnerMetadata, type StickyOwnerPlaywrightBindTransport, type StickyOwnerState, type StickyOwnerTransport, STICKY_OWNER_SCHEMA_VERSION, } from './browser-session-state.js';
|
|
2
2
|
export { attach, ATTACH_ERROR_CODES, ATTACH_OUTCOME_TYPES, type AttachErrorCode, type AttachFailureResult, type AttachOutcomeType, type AttachOptions, type AttachResult, type AttachSuccessResult, } from './commands/attach.js';
|
|
3
3
|
export { AgentbrowseAssistiveRuntimeMissingError, AssistiveStructuredOutputTruncatedError, configureAgentbrowseAssistiveRuntime, resetAgentbrowseAssistiveRuntime, type AgentbrowseAssistiveChatCompletionOptions, type AgentbrowseAssistiveChatCompletionRequest, type AgentbrowseAssistiveChatCompletionResult, type AgentbrowseAssistiveChatMessage, type AgentbrowseAssistiveImageInput, type AgentbrowseAssistiveLlmClient, type AgentbrowseAssistiveLlmUsage, type AgentbrowseAssistiveMessageContentPart, type AgentbrowseAssistiveResponseModel, type AgentbrowseAssistiveRuntime, } from './assistive-runtime.js';
|
|
4
4
|
export { createAgentbrowseClient, type AgentbrowseClient, type AgentbrowseClientOptions, } from './client.js';
|
|
5
5
|
export { configureAgentbrowseDiagnostics, resetAgentbrowseDiagnostics, type DiagnosticArtifactManifest, type DiagnosticArtifactManifestInput, type AgentbrowseDiagnosticsHooks, type DiagnosticChildSpanInput, type DiagnosticLifecycleEventInput, type DiagnosticSnapshotInput, type DiagnosticStepFinishInput, type DiagnosticStepHandle, type DiagnosticStepStartInput, } from './diagnostics.js';
|
|
6
6
|
export { setSolverConfigStoreOverride, type SolverConfigStoreOverride, } from './solver/config.js';
|
|
7
7
|
export type { BrowserCommandSession } from './browser-session-state.js';
|
|
8
|
+
export type { TargetDescriptor } from './runtime-state.js';
|
|
8
9
|
export { browserStatus as status, BROWSER_STATUS_OUTCOME_TYPES, type BrowserStatusAliveResult, type BrowserStatusCurrentPageMismatch, type BrowserStatusNotRunningResult, type BrowserStatusOutcomeType, type BrowserStatusProtectedExposureResult, type BrowserStatusResult, type BrowserStatusRuntimeSummary, } from './commands/browser-status.js';
|
|
9
10
|
export { actBrowser as act, ACT_ERROR_CODES, ACT_OUTCOME_TYPES, isBrowseAction, BROWSE_ACTIONS, type ActErrorCode, type ActExecutionFailureResult, type ActFailureResult, type ActOutcomeType, type ActPreflightFailureResult, type ActResult, type ActSuccessResult, type BrowseAction, } from './commands/act.js';
|
|
10
11
|
export { extractBrowser as extract, EXTRACT_ERROR_CODES, EXTRACT_OUTCOME_TYPES, type ExtractErrorCode, type ExtractFailureResult, type ExtractOutcomeType, type ExtractResult, type ExtractSchemaDescriptor, type ExtractSchemaInput, type ExtractSchemaValue, type ExtractSuccessResult, } from './commands/extract.js';
|
|
11
12
|
export { observeBrowser as observe, OBSERVE_ERROR_CODES, OBSERVE_OUTCOME_TYPES, type ObserveErrorCode, type ObserveExecutionMode, type ObserveFailureResult, type ObserveFillableForm, type ObserveOutcomeType, type ObserveResult, type ObserveScope, type ObserveSuccessResult, type ObserveSignal, type ObserveTarget, } from './commands/observe.js';
|
|
13
|
+
export { classifyObservePageState, shouldSuppressFillableFormsForObserve, type ObservePageState, } from './commands/observe-page-state.js';
|
|
14
|
+
export { resolveObservedField, type ObservedFieldCandidate, type ObservedFieldValueSource, type ObservedFieldValueType, type ResolveObservedFieldOptions, type ResolveObservedFieldResult, } from './secrets/observed-field-resolution.js';
|
|
12
15
|
export { close, CLOSE_ERROR_CODES, CLOSE_OUTCOME_TYPES, type CloseErrorCode, type CloseFailureResult, type CloseOutcomeType, type CloseResult, type CloseSuccessResult, } from './commands/close.js';
|
|
16
|
+
export { restoreBrowserSessionOwner, type RestoreBrowserSessionOwnerResult, } from './sticky-owner.js';
|
|
13
17
|
export { launch, LAUNCH_ERROR_CODES, LAUNCH_OUTCOME_TYPES, type LaunchErrorCode, type LaunchOptions, type LaunchFailureResult, type LaunchOutcomeType, type LaunchResult, type LaunchSuccessResult, } from './commands/launch.js';
|
|
14
18
|
export { navigateBrowser as navigate, NAVIGATE_ERROR_CODES, NAVIGATE_OUTCOME_TYPES, type NavigateErrorCode, type NavigateFailureResult, type NavigateOutcomeType, type NavigateResult, type NavigateSuccessResult, } from './commands/navigate.js';
|
|
15
19
|
export { screenshotBrowser as screenshot, SCREENSHOT_ERROR_CODES, SCREENSHOT_OUTCOME_TYPES, type ScreenshotErrorCode, type ScreenshotFailureResult, type ScreenshotOutcomeType, type ScreenshotResult, type ScreenshotSuccessResult, } from './commands/screenshot.js';
|
package/dist/library.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../src/library.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../src/library.ts"],"names":[],"mappings":"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"}
|
package/dist/library.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { createBrowserSessionStore, deleteBrowserSession, getSessionPort, isAttachedSession, isOwnedSession, isSessionAlive, loadBrowserSession, resolveBrowserSessionId, saveBrowserSession, serializeBrowserSession, supportsCaptchaSolve, buildAttachedSession, buildOwnedSession, } from './browser-session-state.js';
|
|
1
|
+
export { createBrowserSessionStore, deleteBrowserSession, getSessionPort, isAttachedSession, isOwnedSession, isSessionAlive, loadBrowserSession, resolveBrowserSessionId, saveBrowserSession, serializeBrowserSession, supportsCaptchaSolve, buildAttachedSession, buildOwnedSession, buildStickyOwnerMetadata, canPersistStickyOwnerMetadata, STICKY_OWNER_SCHEMA_VERSION, } from './browser-session-state.js';
|
|
2
2
|
export { attach, ATTACH_ERROR_CODES, ATTACH_OUTCOME_TYPES, } from './commands/attach.js';
|
|
3
3
|
export { AgentbrowseAssistiveRuntimeMissingError, AssistiveStructuredOutputTruncatedError, configureAgentbrowseAssistiveRuntime, resetAgentbrowseAssistiveRuntime, } from './assistive-runtime.js';
|
|
4
4
|
export { createAgentbrowseClient, } from './client.js';
|
|
@@ -8,7 +8,10 @@ export { browserStatus as status, BROWSER_STATUS_OUTCOME_TYPES, } from './comman
|
|
|
8
8
|
export { actBrowser as act, ACT_ERROR_CODES, ACT_OUTCOME_TYPES, isBrowseAction, BROWSE_ACTIONS, } from './commands/act.js';
|
|
9
9
|
export { extractBrowser as extract, EXTRACT_ERROR_CODES, EXTRACT_OUTCOME_TYPES, } from './commands/extract.js';
|
|
10
10
|
export { observeBrowser as observe, OBSERVE_ERROR_CODES, OBSERVE_OUTCOME_TYPES, } from './commands/observe.js';
|
|
11
|
+
export { classifyObservePageState, shouldSuppressFillableFormsForObserve, } from './commands/observe-page-state.js';
|
|
12
|
+
export { resolveObservedField, } from './secrets/observed-field-resolution.js';
|
|
11
13
|
export { close, CLOSE_ERROR_CODES, CLOSE_OUTCOME_TYPES, } from './commands/close.js';
|
|
14
|
+
export { restoreBrowserSessionOwner, } from './sticky-owner.js';
|
|
12
15
|
export { launch, LAUNCH_ERROR_CODES, LAUNCH_OUTCOME_TYPES, } from './commands/launch.js';
|
|
13
16
|
export { navigateBrowser as navigate, NAVIGATE_ERROR_CODES, NAVIGATE_OUTCOME_TYPES, } from './commands/navigate.js';
|
|
14
17
|
export { screenshotBrowser as screenshot, SCREENSHOT_ERROR_CODES, SCREENSHOT_OUTCOME_TYPES, } from './commands/screenshot.js';
|
package/dist/protected-fill.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { BrowserSessionState } from './browser-session-state.js';
|
|
2
|
-
import type { FillableFormFieldBinding, FillableFormPresence, ProtectedBindingValueHint, ProtectedFieldPolicy, StoredSecretFieldKey, StoredSecretFieldPolicies } from './secrets/types.js';
|
|
2
|
+
import type { FillableFormFieldBinding, FillableFormPresence, LoginStepKind, ProtectedBindingValueHint, ProtectedFieldPolicy, StoredSecretFieldKey, StoredSecretFieldPolicies } from './secrets/types.js';
|
|
3
3
|
import type { ProtectedExactValueProfile } from './runtime-state.js';
|
|
4
4
|
/** Canonical stored protected field keys supported by AgentBrowse protected fill. */
|
|
5
5
|
export type ProtectedFieldKey = StoredSecretFieldKey;
|
|
@@ -17,6 +17,7 @@ export interface ProtectedFillForm {
|
|
|
17
17
|
pageRef: string;
|
|
18
18
|
scopeRef?: string;
|
|
19
19
|
purpose: string;
|
|
20
|
+
loginStep?: LoginStepKind;
|
|
20
21
|
presence?: ProtectedFillPresence;
|
|
21
22
|
scopeEpoch?: number;
|
|
22
23
|
fields: ProtectedFillFieldBinding[];
|
|
@@ -47,7 +48,7 @@ export type ProtectedFillExecution = {
|
|
|
47
48
|
fieldErrors: ProtectedFieldError[];
|
|
48
49
|
} | {
|
|
49
50
|
kind: 'unexpected_error';
|
|
50
|
-
reason: 'missing_protected_value' | 'unsupported_protected_field_group' | 'deterministic_only_resolution_failed' | 'assisted_value_resolution_failed' | 'action_failed';
|
|
51
|
+
reason: 'missing_protected_value' | 'unsupported_protected_field_group' | 'deterministic_only_resolution_failed' | 'assisted_value_resolution_failed' | 'action_failed' | 'ambiguous_date_value' | 'incomplete_date_value' | 'invalid_date_value';
|
|
51
52
|
};
|
|
52
53
|
export type FillProtectedFormResult = {
|
|
53
54
|
success: true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protected-fill.d.ts","sourceRoot":"","sources":["../src/protected-fill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"protected-fill.d.ts","sourceRoot":"","sources":["../src/protected-fill.ts"],"names":[],"mappings":"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"}
|
package/dist/protected-fill.js
CHANGED
|
@@ -1,13 +1,52 @@
|
|
|
1
|
-
import { fillProtectedFormBrowser, } from './protected-fill-browser.js';
|
|
2
1
|
import { buildProtectedExactValueProfile as buildProtectedExactValueProfileInternal } from './secrets/protected-exact-value-redaction.js';
|
|
2
|
+
import { executeProtectedFill } from './secrets/protected-fill.js';
|
|
3
|
+
import { resolvePageByRef, syncSessionPage } from './playwright-runtime.js';
|
|
4
|
+
import { withStickyOwnerBrowser } from './sticky-owner.js';
|
|
3
5
|
/** Fills a previously observed protected form with caller-provided protected values. */
|
|
4
6
|
export async function fillProtectedForm(params) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
try {
|
|
8
|
+
return await withStickyOwnerBrowser(params.session, async (browser) => {
|
|
9
|
+
try {
|
|
10
|
+
const page = await resolvePageByRef(browser, params.session, params.fillableForm.pageRef).catch((error) => {
|
|
11
|
+
throw new Error(error instanceof Error ? error.message : String(error));
|
|
12
|
+
});
|
|
13
|
+
const { url, title } = await syncSessionPage(params.session, params.fillableForm.pageRef, page);
|
|
14
|
+
const execution = await executeProtectedFill({
|
|
15
|
+
session: params.session,
|
|
16
|
+
page,
|
|
17
|
+
fillableForm: params.fillableForm,
|
|
18
|
+
protectedValues: Object.fromEntries(Object.entries(params.protectedValues).filter((entry) => {
|
|
19
|
+
const value = entry[1];
|
|
20
|
+
return typeof value === 'string' && value.length > 0;
|
|
21
|
+
})),
|
|
22
|
+
fieldPolicies: params.fieldPolicies,
|
|
23
|
+
});
|
|
24
|
+
return {
|
|
25
|
+
success: true,
|
|
26
|
+
pageRef: params.fillableForm.pageRef,
|
|
27
|
+
url,
|
|
28
|
+
title,
|
|
29
|
+
execution,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return {
|
|
34
|
+
success: false,
|
|
35
|
+
error: 'page_resolution_failed',
|
|
36
|
+
message: 'Protected fill could not resolve the target page in the browser.',
|
|
37
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
return {
|
|
44
|
+
success: false,
|
|
45
|
+
error: 'browser_connection_failed',
|
|
46
|
+
message: 'Protected fill could not reach the browser session.',
|
|
47
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
11
50
|
}
|
|
12
51
|
export function buildProtectedExposureArtifacts(params) {
|
|
13
52
|
const filteredProtectedValues = Object.fromEntries(Object.entries(params.protectedValues).filter((entry) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-protected-state.d.ts","sourceRoot":"","sources":["../src/runtime-protected-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAwB,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEtF,OAAO,EAIL,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-protected-state.d.ts","sourceRoot":"","sources":["../src/runtime-protected-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAwB,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEtF,OAAO,EAIL,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAmD5B,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,aAAa,CAAC,qBAAqB,CAAC,GAC1C,qBAAqB,EAAE,CAYzB;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,EAC5D,OAAO,GAAE;IACP,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC9B,GACL,qBAAqB,EAAE,CAgDzB;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,GACd,qBAAqB,EAAE,CAuBzB;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,GACd,qBAAqB,EAAE,CAmBzB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,GACd,qBAAqB,GAAG,IAAI,CAI9B;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,sBAAsB,GAC/B,sBAAsB,CAKxB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,GACd,sBAAsB,GAAG,IAAI,CAG/B;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAS3F"}
|
|
@@ -14,7 +14,14 @@ function fillableFormIdentity(form) {
|
|
|
14
14
|
.map((field) => logicalProtectedBindingKey(field))
|
|
15
15
|
.sort()
|
|
16
16
|
.join('|');
|
|
17
|
-
return [
|
|
17
|
+
return [
|
|
18
|
+
form.pageRef,
|
|
19
|
+
form.scopeRef ?? '',
|
|
20
|
+
form.pageFormSelector ?? '',
|
|
21
|
+
form.purpose,
|
|
22
|
+
form.loginStep ?? '',
|
|
23
|
+
fieldsKey,
|
|
24
|
+
].join('||');
|
|
18
25
|
}
|
|
19
26
|
function normalizeFillableForm(runtime, form) {
|
|
20
27
|
const pageScopeEpoch = runtime.pages[form.pageRef]?.scopeEpoch ?? 0;
|
package/dist/runtime-state.d.ts
CHANGED
|
@@ -62,11 +62,21 @@ export interface TargetValidationEvidence {
|
|
|
62
62
|
message?: string;
|
|
63
63
|
errorStyling?: boolean;
|
|
64
64
|
}
|
|
65
|
+
export interface TargetSelectionItem {
|
|
66
|
+
label: string;
|
|
67
|
+
selected?: true;
|
|
68
|
+
removable?: boolean;
|
|
69
|
+
}
|
|
70
|
+
export interface TargetSelectionState {
|
|
71
|
+
mode: 'single' | 'multiple';
|
|
72
|
+
items: TargetSelectionItem[];
|
|
73
|
+
}
|
|
65
74
|
export interface TargetDescriptor {
|
|
66
75
|
ref: string;
|
|
67
76
|
pageRef: string;
|
|
68
77
|
framePath?: string[];
|
|
69
78
|
frameUrl?: string;
|
|
79
|
+
pageFormSelector?: string;
|
|
70
80
|
kind?: string;
|
|
71
81
|
label?: string;
|
|
72
82
|
displayLabel?: string;
|
|
@@ -78,6 +88,7 @@ export interface TargetDescriptor {
|
|
|
78
88
|
surfaceKind?: string;
|
|
79
89
|
controlsSurfaceSelector?: string;
|
|
80
90
|
validation?: TargetValidationEvidence;
|
|
91
|
+
selection?: TargetSelectionState;
|
|
81
92
|
capability: TargetCapability;
|
|
82
93
|
lifecycle: TargetLifecycle;
|
|
83
94
|
availability: TargetAvailabilityState;
|