opendevbrowser 0.0.34 → 0.0.35
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 +1 -1
- package/dist/{accessibility-snapshot-VCBXK47S.js → accessibility-snapshot-TAFPVLZN.js} +8 -8
- package/dist/{active-window-7EUN36LZ.js → active-window-MHFMC6NQ.js} +8 -8
- package/dist/{annotate-VLBK7YB6.js → annotate-5ZFRFQ4B.js} +7 -7
- package/dist/{attr-JNANQKM6.js → attr-MBF2UCRF.js} +7 -7
- package/dist/browser/browser-manager.d.ts +6 -1
- package/dist/browser/browser-manager.d.ts.map +1 -1
- package/dist/browser/manager-types.d.ts +48 -0
- package/dist/browser/manager-types.d.ts.map +1 -1
- package/dist/browser/ops-browser-manager.d.ts +2 -1
- package/dist/browser/ops-browser-manager.d.ts.map +1 -1
- package/dist/{canvas-V5LO4JVL.js → canvas-CAMD22YU.js} +7 -7
- package/dist/{capture-desktop-FKVDWTVG.js → capture-desktop-TMZSFA5R.js} +8 -8
- package/dist/{capture-window-QVPM2DN2.js → capture-window-NZDKD2AE.js} +8 -8
- package/dist/{check-V3CWZ56S.js → check-MO33GTQ4.js} +7 -7
- package/dist/{checked-Q27Q6YZN.js → checked-3HDF5X2M.js} +7 -7
- package/dist/{chunk-VX47SJZM.js → chunk-32ZSOZND.js} +2 -2
- package/dist/{chunk-XRDCSHKZ.js → chunk-AHQC4A6P.js} +744 -14
- package/dist/chunk-AHQC4A6P.js.map +1 -0
- package/dist/{chunk-IBIHDGTZ.js → chunk-B5XIJQXO.js} +32 -4
- package/dist/chunk-B5XIJQXO.js.map +1 -0
- package/dist/{chunk-OJAUKABV.js → chunk-BHZLEFXW.js} +2 -2
- package/dist/{chunk-VY47VKXU.js → chunk-FJZY3Z3X.js} +2 -2
- package/dist/{chunk-GC2FWISX.js → chunk-HM4CO3EW.js} +20 -16
- package/dist/chunk-HM4CO3EW.js.map +1 -0
- package/dist/{chunk-Z3HIX2SE.js → chunk-UEAXTWGT.js} +2 -2
- package/dist/{chunk-ZGCTC5YM.js → chunk-UVD34RA2.js} +33 -1
- package/dist/chunk-UVD34RA2.js.map +1 -0
- package/dist/{chunk-5FDXH4CS.js → chunk-WTWSBEBW.js} +5659 -419
- package/dist/chunk-WTWSBEBW.js.map +1 -0
- package/dist/{chunk-NX2XYJP5.js → chunk-XSSPNVMS.js} +3 -3
- package/dist/{chunk-NX2XYJP5.js.map → chunk-XSSPNVMS.js.map} +1 -1
- package/dist/{chunk-QXJDJDSZ.js → chunk-Z3ADLR7I.js} +667 -8
- package/dist/chunk-Z3ADLR7I.js.map +1 -0
- package/dist/cli/commands/inspiredesign.d.ts +12 -1
- package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
- package/dist/cli/daemon-commands.d.ts.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.js +76 -76
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/workflow-message.d.ts.map +1 -1
- package/dist/{click-EQDRSLR3.js → click-SWZPJO2U.js} +7 -7
- package/dist/{clone-component-SISUXTJS.js → clone-component-YTB46YU4.js} +7 -7
- package/dist/{clone-page-MLDPCBOY.js → clone-page-5FMPHQ3A.js} +7 -7
- package/dist/{close-7J7EV237.js → close-22SNMDX3.js} +7 -7
- package/dist/{close-2LQMJVOA.js → close-ORQZCZ2E.js} +7 -7
- package/dist/{connect-JFRSIW5M.js → connect-EWYITNQU.js} +7 -7
- package/dist/{console-poll-NSVVUNEC.js → console-poll-LJR6ZTDK.js} +7 -7
- package/dist/{cookie-import-B7IQTGTN.js → cookie-import-PTAIWPEC.js} +7 -7
- package/dist/{cookie-list-YHG7JCZZ.js → cookie-list-76C35B5B.js} +7 -7
- package/dist/{daemon-ENU4FOV4.js → daemon-UKJMDLCB.js} +6 -6
- package/dist/daemon-fingerprint.json +1 -1
- package/dist/{debug-trace-snapshot-KLGU2AWY.js → debug-trace-snapshot-PQ5FJART.js} +7 -7
- package/dist/{dialog-MUVQIERS.js → dialog-WLJDWJV4.js} +7 -7
- package/dist/{disconnect-KELQJ45J.js → disconnect-FNB4JC2U.js} +7 -7
- package/dist/{enabled-SF6UU5HG.js → enabled-PYMCOQPC.js} +7 -7
- package/dist/{goto-AZQWXYPG.js → goto-UNTEW4VI.js} +7 -7
- package/dist/guidance/context.d.ts +10 -0
- package/dist/guidance/context.d.ts.map +1 -1
- package/dist/guidance/readiness.d.ts.map +1 -1
- package/dist/guidance/recipes/generic.d.ts.map +1 -1
- package/dist/guidance/recipes/pinterest.d.ts.map +1 -1
- package/dist/guidance/types.d.ts +4 -0
- package/dist/guidance/types.d.ts.map +1 -1
- package/dist/{help-B44IBHXL.js → help-QOLCIB3P.js} +8 -7
- package/dist/{help-B44IBHXL.js.map → help-QOLCIB3P.js.map} +1 -1
- package/dist/{hover-MQRAKKVU.js → hover-ZWY4YOM4.js} +7 -7
- package/dist/{html-PLRTU2WS.js → html-M46YBFT3.js} +7 -7
- package/dist/index.js +43 -18
- package/dist/index.js.map +1 -1
- package/dist/{inspector-IY4GBIT6.js → inspector-6YAOI74U.js} +8 -8
- package/dist/{inspector-audit-7MQCRJHD.js → inspector-audit-PF64X6SJ.js} +9 -9
- package/dist/{inspector-plan-ZAUDHBET.js → inspector-plan-IUGTQV3Q.js} +9 -9
- package/dist/inspiredesign/capture-mode.d.ts +8 -0
- package/dist/inspiredesign/capture-mode.d.ts.map +1 -1
- package/dist/inspiredesign/capture.d.ts +36 -1
- package/dist/inspiredesign/capture.d.ts.map +1 -1
- package/dist/inspiredesign/contract.d.ts +24 -0
- package/dist/inspiredesign/contract.d.ts.map +1 -1
- package/dist/inspiredesign/handoff.d.ts +6 -2
- package/dist/inspiredesign/handoff.d.ts.map +1 -1
- package/dist/inspiredesign/media-analysis/analyzer.d.ts +13 -0
- package/dist/inspiredesign/media-analysis/analyzer.d.ts.map +1 -0
- package/dist/inspiredesign/media-analysis/design-guidance.d.ts +11 -0
- package/dist/inspiredesign/media-analysis/design-guidance.d.ts.map +1 -0
- package/dist/inspiredesign/media-analysis/ffmpeg.d.ts +21 -0
- package/dist/inspiredesign/media-analysis/ffmpeg.d.ts.map +1 -0
- package/dist/inspiredesign/media-analysis/ffprobe.d.ts +8 -0
- package/dist/inspiredesign/media-analysis/ffprobe.d.ts.map +1 -0
- package/dist/inspiredesign/media-analysis/index.d.ts +10 -0
- package/dist/inspiredesign/media-analysis/index.d.ts.map +1 -0
- package/dist/inspiredesign/media-analysis/persist.d.ts +6 -0
- package/dist/inspiredesign/media-analysis/persist.d.ts.map +1 -0
- package/dist/inspiredesign/media-analysis/pixel.d.ts +9 -0
- package/dist/inspiredesign/media-analysis/pixel.d.ts.map +1 -0
- package/dist/inspiredesign/media-analysis/types.d.ts +163 -0
- package/dist/inspiredesign/media-analysis/types.d.ts.map +1 -0
- package/dist/inspiredesign/media-analysis/typography-structure.d.ts +3 -0
- package/dist/inspiredesign/media-analysis/typography-structure.d.ts.map +1 -0
- package/dist/inspiredesign/meta-prompt.d.ts.map +1 -1
- package/dist/inspiredesign/motion-evidence.d.ts +73 -0
- package/dist/inspiredesign/motion-evidence.d.ts.map +1 -0
- package/dist/inspiredesign/pinterest-media-classification.d.ts +27 -0
- package/dist/inspiredesign/pinterest-media-classification.d.ts.map +1 -0
- package/dist/inspiredesign/pinterest-pin-media-evidence.d.ts +151 -0
- package/dist/inspiredesign/pinterest-pin-media-evidence.d.ts.map +1 -0
- package/dist/inspiredesign/product-readiness.d.ts +97 -0
- package/dist/inspiredesign/product-readiness.d.ts.map +1 -0
- package/dist/inspiredesign/reference-pattern-board.d.ts +27 -2
- package/dist/inspiredesign/reference-pattern-board.d.ts.map +1 -1
- package/dist/inspiredesign/visual-evidence.d.ts +5 -0
- package/dist/inspiredesign/visual-evidence.d.ts.map +1 -1
- package/dist/{inspiredesign-VHPEO3UK.js → inspiredesign-GZIEXETS.js} +29 -12
- package/dist/inspiredesign-GZIEXETS.js.map +1 -0
- package/dist/{launch-OCTWPTV5.js → launch-I7WNLWLY.js} +7 -7
- package/dist/{list-HUSYADUS.js → list-BAECFJI7.js} +7 -7
- package/dist/{list-JWKAMAUA.js → list-BCF4HZ2K.js} +7 -7
- package/dist/{macro-resolve-WOXMPZDQ.js → macro-resolve-4GNZYHHW.js} +8 -8
- package/dist/{network-poll-WHB62OEF.js → network-poll-DCZ5ZNLP.js} +7 -7
- package/dist/{new-IKZBYBNK.js → new-6KZYJTJG.js} +7 -7
- package/dist/{open-UA2VI6ZP.js → open-JPGEAJHJ.js} +7 -7
- package/dist/opendevbrowser.js +43 -18
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/{perf-DICS3VKH.js → perf-5X367PRP.js} +7 -7
- package/dist/{pointer-down-2XPRZFJC.js → pointer-down-5OAUDDNR.js} +7 -7
- package/dist/{pointer-drag-7NY4BOLH.js → pointer-drag-LIW5PY5P.js} +7 -7
- package/dist/{pointer-move-FWEXMH37.js → pointer-move-7AMURLJD.js} +7 -7
- package/dist/{pointer-up-VU2OHK5D.js → pointer-up-EY652YWL.js} +7 -7
- package/dist/{press-W7IZ3FCX.js → press-UIAE5XEF.js} +7 -7
- package/dist/{product-video-XCZ6CHR5.js → product-video-B6TLS7VC.js} +9 -9
- package/dist/providers/browser-native-discovery.d.ts.map +1 -1
- package/dist/providers/renderer.d.ts +10 -1
- package/dist/providers/renderer.d.ts.map +1 -1
- package/dist/providers/workflows.d.ts +53 -2
- package/dist/providers/workflows.d.ts.map +1 -1
- package/dist/{providers-XCNSU3T6.js → providers-AERTX6X4.js} +5 -3
- package/dist/public-surface/generated-manifest.d.ts +2 -2
- package/dist/public-surface/generated-manifest.d.ts.map +1 -1
- package/dist/public-surface/source.d.ts +2 -2
- package/dist/public-surface/source.d.ts.map +1 -1
- package/dist/{research-AYCKHOWK.js → research-AJH6ECYW.js} +9 -9
- package/dist/{review-PP2UNSMJ.js → review-RN6XF2YB.js} +7 -7
- package/dist/{review-desktop-3JOJFUEJ.js → review-desktop-UJOUS7K2.js} +7 -7
- package/dist/{rpc-7EPTJQQ6.js → rpc-VS5Y5FUT.js} +7 -7
- package/dist/{run-P6UJS3D4.js → run-EVRIQW7S.js} +5 -5
- package/dist/{screencast-start-ZZYNH2HT.js → screencast-start-U6J4FYU4.js} +7 -7
- package/dist/{screencast-stop-Y6ADFOFA.js → screencast-stop-EQUPRGMP.js} +7 -7
- package/dist/{screenshot-CJB7PMAF.js → screenshot-BENYGC36.js} +7 -7
- package/dist/{scroll-BP5MA4ZT.js → scroll-3OALQLX2.js} +7 -7
- package/dist/{scroll-into-view-O3RDWLM2.js → scroll-into-view-SNZKBIVB.js} +7 -7
- package/dist/{select-QLCNRI36.js → select-JDZDDC3Y.js} +7 -7
- package/dist/{serve-OO2MQWGL.js → serve-LOC6ESJ4.js} +6 -6
- package/dist/{shopping-UYHCYPAH.js → shopping-267OAYGM.js} +9 -9
- package/dist/{snapshot-SXYZ3CMC.js → snapshot-ASYI5UFR.js} +7 -7
- package/dist/{status-AL2AHVA5.js → status-47CI4LJX.js} +7 -7
- package/dist/{status-QQW7REK4.js → status-N4O6DJTF.js} +8 -8
- package/dist/{status-capabilities-AVHJYQQQ.js → status-capabilities-C777JZG4.js} +8 -8
- package/dist/{text-B6Z47EOA.js → text-MS2653MW.js} +7 -7
- package/dist/tools/inspiredesign_run.d.ts.map +1 -1
- package/dist/{type-LR3F3SQY.js → type-UMPSDACC.js} +7 -7
- package/dist/{uncheck-5PJEHR7J.js → uncheck-2OZ56D42.js} +7 -7
- package/dist/{upload-HQ3QN2OW.js → upload-CD7PRH54.js} +7 -7
- package/dist/{use-KFZLMRUH.js → use-MO67AGG7.js} +7 -7
- package/dist/{value-TKUFUK5I.js → value-4GI2LRUY.js} +7 -7
- package/dist/{visible-P5Z2N2QR.js → visible-VSUFGRFZ.js} +7 -7
- package/dist/{wait-BYSHJPSC.js → wait-OQYMFENT.js} +7 -7
- package/dist/{windows-6GTD25EU.js → windows-75W2JCW7.js} +8 -8
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
- package/skills/opendevbrowser-best-practices/SKILL.md +41 -30
- package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +12 -8
- package/skills/opendevbrowser-best-practices/artifacts/parity-gates.md +1 -0
- package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +19 -0
- package/skills/opendevbrowser-best-practices/assets/templates/mode-flag-matrix.json +23 -13
- package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +3 -1
- package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +62 -21
- package/skills/opendevbrowser-best-practices/scripts/resolve-odb-cli.sh +28 -0
- package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +15 -0
- package/skills/opendevbrowser-best-practices/scripts/validator-fixture-cli.sh +13 -0
- package/skills/opendevbrowser-design-agent/SKILL.md +2 -0
- package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +15 -13
- package/skills/opendevbrowser-design-agent/artifacts/isolated-preview-validation.md +1 -1
- package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +14 -7
- package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +1 -0
- package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +10 -7
- package/skills/opendevbrowser-motion-design/SKILL.md +1 -1
- package/skills/opendevbrowser-product-presentation-asset/SKILL.md +5 -4
- package/skills/opendevbrowser-product-presentation-asset/scripts/capture-screenshots.sh +1 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/collect-product.sh +1 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/download-images.sh +1 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/validate-skill-assets.sh +4 -0
- package/skills/opendevbrowser-product-presentation-asset/scripts/write-manifest.sh +1 -0
- package/skills/opendevbrowser-research/SKILL.md +1 -0
- package/skills/opendevbrowser-research/scripts/render-output.sh +1 -0
- package/skills/opendevbrowser-research/scripts/run-research.sh +1 -0
- package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +4 -0
- package/skills/opendevbrowser-research/scripts/write-artifacts.sh +1 -0
- package/skills/opendevbrowser-shopping/SKILL.md +1 -0
- package/skills/opendevbrowser-shopping/scripts/normalize-offers.sh +1 -0
- package/skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh +1 -0
- package/skills/opendevbrowser-shopping/scripts/run-shopping.sh +1 -0
- package/skills/opendevbrowser-shopping/scripts/validate-skill-assets.sh +4 -0
- package/dist/chunk-5FDXH4CS.js.map +0 -1
- package/dist/chunk-GC2FWISX.js.map +0 -1
- package/dist/chunk-IBIHDGTZ.js.map +0 -1
- package/dist/chunk-QXJDJDSZ.js.map +0 -1
- package/dist/chunk-XRDCSHKZ.js.map +0 -1
- package/dist/chunk-ZGCTC5YM.js.map +0 -1
- package/dist/inspiredesign-VHPEO3UK.js.map +0 -1
- /package/dist/{accessibility-snapshot-VCBXK47S.js.map → accessibility-snapshot-TAFPVLZN.js.map} +0 -0
- /package/dist/{active-window-7EUN36LZ.js.map → active-window-MHFMC6NQ.js.map} +0 -0
- /package/dist/{annotate-VLBK7YB6.js.map → annotate-5ZFRFQ4B.js.map} +0 -0
- /package/dist/{attr-JNANQKM6.js.map → attr-MBF2UCRF.js.map} +0 -0
- /package/dist/{canvas-V5LO4JVL.js.map → canvas-CAMD22YU.js.map} +0 -0
- /package/dist/{capture-desktop-FKVDWTVG.js.map → capture-desktop-TMZSFA5R.js.map} +0 -0
- /package/dist/{capture-window-QVPM2DN2.js.map → capture-window-NZDKD2AE.js.map} +0 -0
- /package/dist/{check-V3CWZ56S.js.map → check-MO33GTQ4.js.map} +0 -0
- /package/dist/{checked-Q27Q6YZN.js.map → checked-3HDF5X2M.js.map} +0 -0
- /package/dist/{chunk-VX47SJZM.js.map → chunk-32ZSOZND.js.map} +0 -0
- /package/dist/{chunk-OJAUKABV.js.map → chunk-BHZLEFXW.js.map} +0 -0
- /package/dist/{chunk-VY47VKXU.js.map → chunk-FJZY3Z3X.js.map} +0 -0
- /package/dist/{chunk-Z3HIX2SE.js.map → chunk-UEAXTWGT.js.map} +0 -0
- /package/dist/{click-EQDRSLR3.js.map → click-SWZPJO2U.js.map} +0 -0
- /package/dist/{clone-component-SISUXTJS.js.map → clone-component-YTB46YU4.js.map} +0 -0
- /package/dist/{clone-page-MLDPCBOY.js.map → clone-page-5FMPHQ3A.js.map} +0 -0
- /package/dist/{close-7J7EV237.js.map → close-22SNMDX3.js.map} +0 -0
- /package/dist/{close-2LQMJVOA.js.map → close-ORQZCZ2E.js.map} +0 -0
- /package/dist/{connect-JFRSIW5M.js.map → connect-EWYITNQU.js.map} +0 -0
- /package/dist/{console-poll-NSVVUNEC.js.map → console-poll-LJR6ZTDK.js.map} +0 -0
- /package/dist/{cookie-import-B7IQTGTN.js.map → cookie-import-PTAIWPEC.js.map} +0 -0
- /package/dist/{cookie-list-YHG7JCZZ.js.map → cookie-list-76C35B5B.js.map} +0 -0
- /package/dist/{daemon-ENU4FOV4.js.map → daemon-UKJMDLCB.js.map} +0 -0
- /package/dist/{debug-trace-snapshot-KLGU2AWY.js.map → debug-trace-snapshot-PQ5FJART.js.map} +0 -0
- /package/dist/{dialog-MUVQIERS.js.map → dialog-WLJDWJV4.js.map} +0 -0
- /package/dist/{disconnect-KELQJ45J.js.map → disconnect-FNB4JC2U.js.map} +0 -0
- /package/dist/{enabled-SF6UU5HG.js.map → enabled-PYMCOQPC.js.map} +0 -0
- /package/dist/{goto-AZQWXYPG.js.map → goto-UNTEW4VI.js.map} +0 -0
- /package/dist/{hover-MQRAKKVU.js.map → hover-ZWY4YOM4.js.map} +0 -0
- /package/dist/{html-PLRTU2WS.js.map → html-M46YBFT3.js.map} +0 -0
- /package/dist/{inspector-IY4GBIT6.js.map → inspector-6YAOI74U.js.map} +0 -0
- /package/dist/{inspector-audit-7MQCRJHD.js.map → inspector-audit-PF64X6SJ.js.map} +0 -0
- /package/dist/{inspector-plan-ZAUDHBET.js.map → inspector-plan-IUGTQV3Q.js.map} +0 -0
- /package/dist/{launch-OCTWPTV5.js.map → launch-I7WNLWLY.js.map} +0 -0
- /package/dist/{list-HUSYADUS.js.map → list-BAECFJI7.js.map} +0 -0
- /package/dist/{list-JWKAMAUA.js.map → list-BCF4HZ2K.js.map} +0 -0
- /package/dist/{macro-resolve-WOXMPZDQ.js.map → macro-resolve-4GNZYHHW.js.map} +0 -0
- /package/dist/{network-poll-WHB62OEF.js.map → network-poll-DCZ5ZNLP.js.map} +0 -0
- /package/dist/{new-IKZBYBNK.js.map → new-6KZYJTJG.js.map} +0 -0
- /package/dist/{open-UA2VI6ZP.js.map → open-JPGEAJHJ.js.map} +0 -0
- /package/dist/{perf-DICS3VKH.js.map → perf-5X367PRP.js.map} +0 -0
- /package/dist/{pointer-down-2XPRZFJC.js.map → pointer-down-5OAUDDNR.js.map} +0 -0
- /package/dist/{pointer-drag-7NY4BOLH.js.map → pointer-drag-LIW5PY5P.js.map} +0 -0
- /package/dist/{pointer-move-FWEXMH37.js.map → pointer-move-7AMURLJD.js.map} +0 -0
- /package/dist/{pointer-up-VU2OHK5D.js.map → pointer-up-EY652YWL.js.map} +0 -0
- /package/dist/{press-W7IZ3FCX.js.map → press-UIAE5XEF.js.map} +0 -0
- /package/dist/{product-video-XCZ6CHR5.js.map → product-video-B6TLS7VC.js.map} +0 -0
- /package/dist/{providers-XCNSU3T6.js.map → providers-AERTX6X4.js.map} +0 -0
- /package/dist/{research-AYCKHOWK.js.map → research-AJH6ECYW.js.map} +0 -0
- /package/dist/{review-PP2UNSMJ.js.map → review-RN6XF2YB.js.map} +0 -0
- /package/dist/{review-desktop-3JOJFUEJ.js.map → review-desktop-UJOUS7K2.js.map} +0 -0
- /package/dist/{rpc-7EPTJQQ6.js.map → rpc-VS5Y5FUT.js.map} +0 -0
- /package/dist/{run-P6UJS3D4.js.map → run-EVRIQW7S.js.map} +0 -0
- /package/dist/{screencast-start-ZZYNH2HT.js.map → screencast-start-U6J4FYU4.js.map} +0 -0
- /package/dist/{screencast-stop-Y6ADFOFA.js.map → screencast-stop-EQUPRGMP.js.map} +0 -0
- /package/dist/{screenshot-CJB7PMAF.js.map → screenshot-BENYGC36.js.map} +0 -0
- /package/dist/{scroll-BP5MA4ZT.js.map → scroll-3OALQLX2.js.map} +0 -0
- /package/dist/{scroll-into-view-O3RDWLM2.js.map → scroll-into-view-SNZKBIVB.js.map} +0 -0
- /package/dist/{select-QLCNRI36.js.map → select-JDZDDC3Y.js.map} +0 -0
- /package/dist/{serve-OO2MQWGL.js.map → serve-LOC6ESJ4.js.map} +0 -0
- /package/dist/{shopping-UYHCYPAH.js.map → shopping-267OAYGM.js.map} +0 -0
- /package/dist/{snapshot-SXYZ3CMC.js.map → snapshot-ASYI5UFR.js.map} +0 -0
- /package/dist/{status-AL2AHVA5.js.map → status-47CI4LJX.js.map} +0 -0
- /package/dist/{status-QQW7REK4.js.map → status-N4O6DJTF.js.map} +0 -0
- /package/dist/{status-capabilities-AVHJYQQQ.js.map → status-capabilities-C777JZG4.js.map} +0 -0
- /package/dist/{text-B6Z47EOA.js.map → text-MS2653MW.js.map} +0 -0
- /package/dist/{type-LR3F3SQY.js.map → type-UMPSDACC.js.map} +0 -0
- /package/dist/{uncheck-5PJEHR7J.js.map → uncheck-2OZ56D42.js.map} +0 -0
- /package/dist/{upload-HQ3QN2OW.js.map → upload-CD7PRH54.js.map} +0 -0
- /package/dist/{use-KFZLMRUH.js.map → use-MO67AGG7.js.map} +0 -0
- /package/dist/{value-TKUFUK5I.js.map → value-4GI2LRUY.js.map} +0 -0
- /package/dist/{visible-P5Z2N2QR.js.map → visible-VSUFGRFZ.js.map} +0 -0
- /package/dist/{wait-BYSHJPSC.js.map → wait-OQYMFENT.js.map} +0 -0
- /package/dist/{windows-6GTD25EU.js.map → windows-75W2JCW7.js.map} +0 -0
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
readCookiesFromSource,
|
|
8
8
|
resolveBundledProviderRuntime,
|
|
9
9
|
resolveSessionRelayRoute
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-AHQC4A6P.js";
|
|
11
11
|
import {
|
|
12
12
|
loadGlobalConfig,
|
|
13
13
|
resolveConfig
|
|
@@ -17,14 +17,16 @@ import {
|
|
|
17
17
|
} from "./chunk-ASMHEEKY.js";
|
|
18
18
|
import {
|
|
19
19
|
buildMacroResolveSuccessHandoff,
|
|
20
|
+
classifyPinterestCandidate,
|
|
20
21
|
detectSocialSearchShell,
|
|
22
|
+
isCanonicalPinterestPinUrl,
|
|
21
23
|
isChallengeAutomationMode,
|
|
22
24
|
resolveWorkflowArtifactRoot,
|
|
23
25
|
runInspiredesignWorkflow,
|
|
24
26
|
runProductVideoWorkflow,
|
|
25
27
|
runResearchWorkflow,
|
|
26
28
|
runShoppingWorkflow
|
|
27
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-WTWSBEBW.js";
|
|
28
30
|
import {
|
|
29
31
|
buildBlockerArtifacts,
|
|
30
32
|
classifyBlockerSignal,
|
|
@@ -419,15 +421,31 @@ import { mkdir } from "fs/promises";
|
|
|
419
421
|
import { dirname, resolve } from "path";
|
|
420
422
|
var INSPIREDESIGN_CAPTURE_TIMEOUT_MS = 3e4;
|
|
421
423
|
var INSPIREDESIGN_CAPTURE_MAX_CHARS = 12e3;
|
|
424
|
+
var INSPIREDESIGN_MOTION_INTERVAL_MS = 500;
|
|
425
|
+
var INSPIREDESIGN_MOTION_MAX_FRAMES = 3;
|
|
426
|
+
var INSPIREDESIGN_LATE_SCREENCAST_STOP_TIMEOUT_MS = 1e3;
|
|
427
|
+
var INSPIREDESIGN_PIN_MEDIA_CAPTURE_TIMEOUT_MS = 9e4;
|
|
428
|
+
var PINTEREST_PIN_MEDIA_EXTENSION_WARMUP_TIMEOUT_MS = 3e4;
|
|
429
|
+
var PINTEREST_PIN_MEDIA_NETWORK_IDLE_TIMEOUT_MS = 5e3;
|
|
430
|
+
var EXACT_CANONICAL_PINTEREST_PIN_HOST = "www.pinterest.com";
|
|
422
431
|
var ACTIVE_SESSION_COOKIE_REUSE_UNAVAILABLE_MESSAGE = "Deep capture only honors configured provider cookie sources; active session cookies are not reused.";
|
|
423
432
|
var DOM_CAPTURE_HELPER_UNAVAILABLE_MESSAGE = "DOM capture helper unavailable in this execution lane.";
|
|
424
433
|
var VISUAL_CAPTURE_HELPER_UNAVAILABLE_MESSAGE = "Visual evidence screenshot helper unavailable in this execution lane.";
|
|
425
434
|
var VISUAL_CAPTURE_PATH_UNAVAILABLE_MESSAGE = "Visual evidence path was not configured for screenshot capture.";
|
|
426
435
|
var VISUAL_CAPTURE_EMPTY_MESSAGE = "Visual evidence screenshot did not return a file path.";
|
|
436
|
+
var PIN_MEDIA_CAPTURE_HELPER_UNAVAILABLE_MESSAGE = "Pinterest pin media capture helper unavailable in this execution lane.";
|
|
437
|
+
var PIN_MEDIA_CAPTURE_PATH_UNAVAILABLE_MESSAGE = "Pinterest pin media evidence path was not configured.";
|
|
438
|
+
var PIN_MEDIA_CAPTURE_NOT_FOUND_MESSAGE = "Pinterest pin media capture did not find a primary media candidate.";
|
|
439
|
+
var PIN_MEDIA_CAPTURE_PATH_MISMATCH_MESSAGE = "Pinterest pin media evidence temp path did not match the requested artifact path.";
|
|
440
|
+
var PRIMARY_CAPTURE_SESSION_UNAVAILABLE_MESSAGE = "Primary media capture session helper unavailable in this execution lane.";
|
|
441
|
+
var VISUAL_VIEWPORT_PROBE_FAILED_WARNING = "viewport_url_unverified";
|
|
442
|
+
var PINTEREST_VIEWPORT_LOGIN_WARNING = "login_or_challenge_state";
|
|
443
|
+
var PINTEREST_VIEWPORT_CHROME_WARNING = "interface_chrome_shell";
|
|
427
444
|
var SNAPSHOT_CAPTURE_EMPTY_MESSAGE = "Snapshot capture returned empty content.";
|
|
428
445
|
var CLONE_CAPTURE_EMPTY_MESSAGE = "Clone capture returned empty component and CSS previews.";
|
|
429
446
|
var DOM_CAPTURE_EMPTY_MESSAGE = "DOM capture returned empty HTML.";
|
|
430
447
|
var SKIPPED_AFTER_TRANSPORT_TIMEOUT_SUFFIX = "transport timeout.";
|
|
448
|
+
var PINTEREST_VIEWPORT_MEDIA_PROBE_MAX_NODES = 400;
|
|
431
449
|
var createRemainingCaptureTimeout = (timeoutMs) => {
|
|
432
450
|
const startedAtMs = Date.now();
|
|
433
451
|
let firstRead = true;
|
|
@@ -439,10 +457,18 @@ var createRemainingCaptureTimeout = (timeoutMs) => {
|
|
|
439
457
|
return Math.max(1, timeoutMs - Math.max(0, Date.now() - startedAtMs));
|
|
440
458
|
};
|
|
441
459
|
};
|
|
460
|
+
var createCappedRemainingCaptureTimeout = (remainingTimeoutMs, capMs) => {
|
|
461
|
+
const cappedRemainingTimeoutMs = createRemainingCaptureTimeout(capMs);
|
|
462
|
+
return () => Math.min(remainingTimeoutMs(), cappedRemainingTimeoutMs());
|
|
463
|
+
};
|
|
442
464
|
var clampInspiredesignCaptureTimeout = (timeoutMs) => {
|
|
443
465
|
if (typeof timeoutMs !== "number" || !Number.isFinite(timeoutMs)) return INSPIREDESIGN_CAPTURE_TIMEOUT_MS;
|
|
444
466
|
return Math.max(1, Math.min(timeoutMs, INSPIREDESIGN_CAPTURE_TIMEOUT_MS));
|
|
445
467
|
};
|
|
468
|
+
var clampInspiredesignPinMediaCaptureTimeout = (timeoutMs) => {
|
|
469
|
+
if (typeof timeoutMs !== "number" || !Number.isFinite(timeoutMs)) return INSPIREDESIGN_PIN_MEDIA_CAPTURE_TIMEOUT_MS;
|
|
470
|
+
return Math.max(1, Math.min(timeoutMs, INSPIREDESIGN_PIN_MEDIA_CAPTURE_TIMEOUT_MS));
|
|
471
|
+
};
|
|
446
472
|
function sanitizeInspiredesignCaptureText(value) {
|
|
447
473
|
if (value === void 0) return void 0;
|
|
448
474
|
const redacted = redactSensitive(value);
|
|
@@ -476,6 +502,61 @@ var buildSkippedAfterTransportTimeoutAttempt = (label) => {
|
|
|
476
502
|
var hasUsableCaptureText = (value) => {
|
|
477
503
|
return typeof value === "string" && value.trim().length > 0;
|
|
478
504
|
};
|
|
505
|
+
var isPinterestUrl = (value) => {
|
|
506
|
+
if (!value) return false;
|
|
507
|
+
try {
|
|
508
|
+
const hostname = new URL(value).hostname.toLowerCase();
|
|
509
|
+
return hostname === "pinterest.com" || hostname.endsWith(".pinterest.com");
|
|
510
|
+
} catch {
|
|
511
|
+
return false;
|
|
512
|
+
}
|
|
513
|
+
};
|
|
514
|
+
var pinterestViewportClassification = (args) => {
|
|
515
|
+
if (!isPinterestUrl(args.url)) return void 0;
|
|
516
|
+
return classifyPinterestCandidate({
|
|
517
|
+
url: args.url,
|
|
518
|
+
title: args.title,
|
|
519
|
+
content: [
|
|
520
|
+
args.content,
|
|
521
|
+
...args.warnings ?? []
|
|
522
|
+
].filter((value) => typeof value === "string" && value.trim().length > 0).join(" "),
|
|
523
|
+
html: args.html
|
|
524
|
+
});
|
|
525
|
+
};
|
|
526
|
+
var pinterestViewportWarnings = (args) => {
|
|
527
|
+
const quality = pinterestViewportClassification(args)?.sourcePageQuality;
|
|
528
|
+
if (quality === "login_challenge") return [PINTEREST_VIEWPORT_LOGIN_WARNING];
|
|
529
|
+
if (quality === "search_shell" || quality === "chrome_only") return [PINTEREST_VIEWPORT_CHROME_WARNING];
|
|
530
|
+
return [];
|
|
531
|
+
};
|
|
532
|
+
var pinterestViewportPageQuality = (args) => {
|
|
533
|
+
return pinterestViewportClassification(args)?.sourcePageQuality;
|
|
534
|
+
};
|
|
535
|
+
var normalizeMotionSourceUrlForComparison = (value) => {
|
|
536
|
+
if (!value) return void 0;
|
|
537
|
+
try {
|
|
538
|
+
const url = new URL(value);
|
|
539
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") return void 0;
|
|
540
|
+
url.hash = "";
|
|
541
|
+
url.search = "";
|
|
542
|
+
return url.toString();
|
|
543
|
+
} catch {
|
|
544
|
+
return void 0;
|
|
545
|
+
}
|
|
546
|
+
};
|
|
547
|
+
var motionSourceDiagnosticReasons = (startedProbe, endedProbe) => {
|
|
548
|
+
const startedUrl = normalizeMotionSourceUrlForComparison(startedProbe.sourceUrl);
|
|
549
|
+
const endedUrl = normalizeMotionSourceUrlForComparison(endedProbe.sourceUrl);
|
|
550
|
+
if (!startedUrl || !endedUrl) return ["motion_source_unverified"];
|
|
551
|
+
return startedUrl === endedUrl ? [] : ["motion_source_changed"];
|
|
552
|
+
};
|
|
553
|
+
var motionPageQualityDiagnosticReasons = (startedProbe, endedProbe) => {
|
|
554
|
+
const qualities = [
|
|
555
|
+
{ sourceUrl: startedProbe.sourceUrl, quality: startedProbe.pinterestPageQuality },
|
|
556
|
+
{ sourceUrl: endedProbe.sourceUrl, quality: endedProbe.pinterestPageQuality }
|
|
557
|
+
];
|
|
558
|
+
return qualities.some((entry) => isPinterestUrl(entry.sourceUrl) && entry.quality !== "pin_media") ? ["motion_source_page_quality_not_pin_media"] : [];
|
|
559
|
+
};
|
|
479
560
|
var resolveInspiredesignCaptureCookiePolicy = (options) => {
|
|
480
561
|
if (options.cookiePolicyOverride) return options.cookiePolicyOverride;
|
|
481
562
|
return options.useCookies === false ? "off" : "auto";
|
|
@@ -532,6 +613,25 @@ var importConfiguredCaptureCookies = async (manager, sessionId, source, timeoutM
|
|
|
532
613
|
sourceMessage: loaded.message
|
|
533
614
|
};
|
|
534
615
|
};
|
|
616
|
+
var prepareCaptureSessionState = async ({
|
|
617
|
+
manager,
|
|
618
|
+
sessionId,
|
|
619
|
+
url,
|
|
620
|
+
remainingTimeoutMs,
|
|
621
|
+
options
|
|
622
|
+
}) => {
|
|
623
|
+
const cookiePolicy = resolveInspiredesignCaptureCookiePolicy(options);
|
|
624
|
+
const importState = cookiePolicy === "off" ? { sourceConfigured: false, sourceAvailable: false } : await importConfiguredCaptureCookies(
|
|
625
|
+
manager,
|
|
626
|
+
sessionId,
|
|
627
|
+
options.cookieSource,
|
|
628
|
+
remainingTimeoutMs()
|
|
629
|
+
);
|
|
630
|
+
if (cookiePolicy === "required") {
|
|
631
|
+
await verifyRequiredCaptureCookies(manager, sessionId, url, importState, remainingTimeoutMs());
|
|
632
|
+
}
|
|
633
|
+
manager.setSessionChallengeAutomationMode?.(sessionId, options.challengeAutomationMode);
|
|
634
|
+
};
|
|
535
635
|
var captureSnapshotArtifact = async (manager, sessionId, remainingTimeoutMs) => {
|
|
536
636
|
try {
|
|
537
637
|
const snapshot = await withCaptureDeadline(
|
|
@@ -631,15 +731,145 @@ var captureDomArtifact = async (manager, sessionId, remainingTimeoutMs) => {
|
|
|
631
731
|
};
|
|
632
732
|
}
|
|
633
733
|
};
|
|
634
|
-
var buildVisualEvidenceMetadata = (status, detail, warnings = [], tempPath) => ({
|
|
734
|
+
var buildVisualEvidenceMetadata = (status, detail, warnings = [], tempPath, sourceUrl, pinterestPageQuality) => ({
|
|
635
735
|
status,
|
|
636
736
|
kind: "viewport",
|
|
637
737
|
fullPage: false,
|
|
638
738
|
capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
739
|
+
...sourceUrl ? { sourceUrl } : {},
|
|
740
|
+
...pinterestPageQuality ? { pinterestPageQuality } : {},
|
|
639
741
|
...tempPath ? { tempPath } : {},
|
|
640
742
|
warnings,
|
|
641
743
|
...detail ? { failure: sanitizeInspiredesignCaptureText(detail) } : {}
|
|
642
744
|
});
|
|
745
|
+
var collectPinterestPinMediaNotFoundReasons = (result) => {
|
|
746
|
+
const reasons = result.rejectedCandidates.flatMap((candidate) => candidate.reasons);
|
|
747
|
+
return [...new Set(reasons.length > 0 ? reasons : ["pin_media_candidate_not_found"])].map((reason) => sanitizeInspiredesignCaptureText(reason)).filter((reason) => Boolean(reason));
|
|
748
|
+
};
|
|
749
|
+
var buildPinMediaEvidenceMetadata = (status, referenceId, url, detail, options = {}) => ({
|
|
750
|
+
status,
|
|
751
|
+
kind: options.kind ?? "image",
|
|
752
|
+
capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
753
|
+
referenceId,
|
|
754
|
+
url,
|
|
755
|
+
...options.sourceUrl ? { sourceUrl: options.sourceUrl } : {},
|
|
756
|
+
...options.startedSourceUrl ? { startedSourceUrl: options.startedSourceUrl } : {},
|
|
757
|
+
...options.endedSourceUrl ? { endedSourceUrl: options.endedSourceUrl } : {},
|
|
758
|
+
...options.pinterestPageQuality ? { pinterestPageQuality: options.pinterestPageQuality } : {},
|
|
759
|
+
...options.mediaUrl ? { mediaUrl: options.mediaUrl } : {},
|
|
760
|
+
...options.candidateSelector ? { candidateSelector: options.candidateSelector } : {},
|
|
761
|
+
...options.candidateRole ? { candidateRole: options.candidateRole } : {},
|
|
762
|
+
...options.candidateAlt ? { candidateAlt: options.candidateAlt } : {},
|
|
763
|
+
...options.width ? { width: options.width } : {},
|
|
764
|
+
...options.height ? { height: options.height } : {},
|
|
765
|
+
...options.contentType ? { contentType: options.contentType } : {},
|
|
766
|
+
...options.tempPath ? { tempPath: options.tempPath } : {},
|
|
767
|
+
warnings: options.warnings ?? [],
|
|
768
|
+
...detail ? { failure: sanitizeInspiredesignCaptureText(detail) } : {},
|
|
769
|
+
rejectionReasons: options.rejectionReasons ?? []
|
|
770
|
+
});
|
|
771
|
+
var mergePinMediaWarnings = (viewportProbe, result) => [...viewportProbe.warnings, ...result.warnings ?? []];
|
|
772
|
+
var viewportProbeFromPinMediaResult = (result) => ({
|
|
773
|
+
...result.sourceUrl ? { sourceUrl: result.sourceUrl } : {},
|
|
774
|
+
warnings: []
|
|
775
|
+
});
|
|
776
|
+
var hasCapturedPinMediaDirectProof = (result, sourceUrl) => Boolean(sourceUrl && result.mediaUrl && result.path);
|
|
777
|
+
var buildCapturedPinMediaMetadata = (result, referenceId, url, requestedPath, viewportProbe, fallbackPageQuality) => {
|
|
778
|
+
const sourceUrl = result.sourceUrl || viewportProbe.sourceUrl;
|
|
779
|
+
if (!result.path || resolve(result.path) !== resolve(requestedPath)) {
|
|
780
|
+
return buildPinMediaEvidenceMetadata(
|
|
781
|
+
"failed",
|
|
782
|
+
referenceId,
|
|
783
|
+
url,
|
|
784
|
+
PIN_MEDIA_CAPTURE_PATH_MISMATCH_MESSAGE,
|
|
785
|
+
{
|
|
786
|
+
kind: result.kind ?? "image",
|
|
787
|
+
sourceUrl,
|
|
788
|
+
endedSourceUrl: sourceUrl,
|
|
789
|
+
pinterestPageQuality: viewportProbe.pinterestPageQuality ?? fallbackPageQuality,
|
|
790
|
+
warnings: [...mergePinMediaWarnings(viewportProbe, result), "pin_media_temp_path_mismatch"],
|
|
791
|
+
rejectionReasons: ["pin_media_temp_path_mismatch"]
|
|
792
|
+
}
|
|
793
|
+
);
|
|
794
|
+
}
|
|
795
|
+
const pinterestPageQuality = hasCapturedPinMediaDirectProof(result, sourceUrl) ? "pin_media" : viewportProbe.pinterestPageQuality ?? fallbackPageQuality ?? "unknown";
|
|
796
|
+
return buildPinMediaEvidenceMetadata("captured", referenceId, url, void 0, {
|
|
797
|
+
kind: result.kind ?? "image",
|
|
798
|
+
tempPath: requestedPath,
|
|
799
|
+
sourceUrl,
|
|
800
|
+
endedSourceUrl: sourceUrl,
|
|
801
|
+
pinterestPageQuality,
|
|
802
|
+
mediaUrl: result.mediaUrl,
|
|
803
|
+
candidateSelector: result.candidateSelector,
|
|
804
|
+
candidateRole: result.candidateRole,
|
|
805
|
+
candidateAlt: result.alt,
|
|
806
|
+
width: result.naturalWidth ?? result.width,
|
|
807
|
+
height: result.naturalHeight ?? result.height,
|
|
808
|
+
contentType: result.contentType,
|
|
809
|
+
warnings: mergePinMediaWarnings(viewportProbe, result)
|
|
810
|
+
});
|
|
811
|
+
};
|
|
812
|
+
var capturePinterestViewportHtml = async (manager, sessionId, sourceUrl, remainingTimeoutMs) => {
|
|
813
|
+
if (!isPinterestUrl(sourceUrl) || typeof manager.clonePageHtmlWithOptions !== "function") return void 0;
|
|
814
|
+
const timeoutMs = remainingTimeoutMs();
|
|
815
|
+
if (timeoutMs <= 1) return void 0;
|
|
816
|
+
try {
|
|
817
|
+
const clone = await withCaptureDeadline(
|
|
818
|
+
manager.clonePageHtmlWithOptions(
|
|
819
|
+
sessionId,
|
|
820
|
+
void 0,
|
|
821
|
+
{
|
|
822
|
+
maxNodes: PINTEREST_VIEWPORT_MEDIA_PROBE_MAX_NODES,
|
|
823
|
+
inlineStyles: false
|
|
824
|
+
},
|
|
825
|
+
timeoutMs
|
|
826
|
+
),
|
|
827
|
+
timeoutMs,
|
|
828
|
+
"Pinterest viewport media probe"
|
|
829
|
+
);
|
|
830
|
+
return sanitizeInspiredesignCaptureText(clone.html);
|
|
831
|
+
} catch {
|
|
832
|
+
return void 0;
|
|
833
|
+
}
|
|
834
|
+
};
|
|
835
|
+
var captureViewportSourceUrl = async (manager, sessionId, remainingTimeoutMs) => {
|
|
836
|
+
try {
|
|
837
|
+
const snapshot = await withCaptureDeadline(
|
|
838
|
+
manager.snapshot(sessionId, "outline", 1e3, void 0, void 0, remainingTimeoutMs()),
|
|
839
|
+
remainingTimeoutMs(),
|
|
840
|
+
"visual evidence viewport probe"
|
|
841
|
+
);
|
|
842
|
+
const warnings = [
|
|
843
|
+
...snapshot.url ? [] : [VISUAL_VIEWPORT_PROBE_FAILED_WARNING],
|
|
844
|
+
...pinterestViewportWarnings({
|
|
845
|
+
url: snapshot.url,
|
|
846
|
+
title: snapshot.title,
|
|
847
|
+
content: snapshot.content,
|
|
848
|
+
warnings: snapshot.warnings
|
|
849
|
+
})
|
|
850
|
+
];
|
|
851
|
+
const html = await capturePinterestViewportHtml(
|
|
852
|
+
manager,
|
|
853
|
+
sessionId,
|
|
854
|
+
snapshot.url,
|
|
855
|
+
remainingTimeoutMs
|
|
856
|
+
);
|
|
857
|
+
const pinterestPageQuality = pinterestViewportPageQuality({
|
|
858
|
+
url: snapshot.url,
|
|
859
|
+
title: snapshot.title,
|
|
860
|
+
content: snapshot.content,
|
|
861
|
+
html,
|
|
862
|
+
warnings: snapshot.warnings
|
|
863
|
+
});
|
|
864
|
+
return {
|
|
865
|
+
...snapshot.url ? { sourceUrl: snapshot.url } : {},
|
|
866
|
+
...pinterestPageQuality ? { pinterestPageQuality } : {},
|
|
867
|
+
warnings
|
|
868
|
+
};
|
|
869
|
+
} catch {
|
|
870
|
+
return { warnings: [VISUAL_VIEWPORT_PROBE_FAILED_WARNING] };
|
|
871
|
+
}
|
|
872
|
+
};
|
|
643
873
|
var captureVisualEvidenceArtifact = async (manager, sessionId, options, remainingTimeoutMs) => {
|
|
644
874
|
const visualEvidence = options.visualEvidence ?? "off";
|
|
645
875
|
if (visualEvidence === "off") return void 0;
|
|
@@ -657,6 +887,7 @@ var captureVisualEvidenceArtifact = async (manager, sessionId, options, remainin
|
|
|
657
887
|
}
|
|
658
888
|
try {
|
|
659
889
|
await mkdir(dirname(options.visualEvidencePath), { recursive: true });
|
|
890
|
+
const viewportProbe = await captureViewportSourceUrl(manager, sessionId, remainingTimeoutMs);
|
|
660
891
|
const screenshot = await withCaptureDeadline(
|
|
661
892
|
manager.screenshot(sessionId, {
|
|
662
893
|
path: options.visualEvidencePath,
|
|
@@ -671,7 +902,14 @@ var captureVisualEvidenceArtifact = async (manager, sessionId, options, remainin
|
|
|
671
902
|
if (resolve(screenshot.path) !== resolve(options.visualEvidencePath)) {
|
|
672
903
|
return buildVisualEvidenceMetadata("failed", "Visual evidence screenshot path did not match the requested artifact path.");
|
|
673
904
|
}
|
|
674
|
-
return buildVisualEvidenceMetadata(
|
|
905
|
+
return buildVisualEvidenceMetadata(
|
|
906
|
+
"captured",
|
|
907
|
+
void 0,
|
|
908
|
+
[...viewportProbe.warnings, ...screenshot.warnings ?? []],
|
|
909
|
+
options.visualEvidencePath,
|
|
910
|
+
viewportProbe.sourceUrl,
|
|
911
|
+
viewportProbe.pinterestPageQuality
|
|
912
|
+
);
|
|
675
913
|
} catch (error) {
|
|
676
914
|
return buildVisualEvidenceMetadata(
|
|
677
915
|
"failed",
|
|
@@ -718,6 +956,412 @@ var captureInspiredesignArtifacts = async (manager, sessionId, remainingTimeoutM
|
|
|
718
956
|
const visual = await captureVisualEvidenceArtifact(manager, sessionId, options, remainingTimeoutMs);
|
|
719
957
|
return buildCaptureEvidence(snapshot, clone, dom, visual);
|
|
720
958
|
};
|
|
959
|
+
var delay = (ms) => new Promise((resolveDelay) => setTimeout(resolveDelay, ms));
|
|
960
|
+
var shouldForceManagedPrimaryCapture = (browserMode) => browserMode === "managed";
|
|
961
|
+
var exactCanonicalPinterestPinCaptureUrl = (url) => {
|
|
962
|
+
const trimmed = url.trim();
|
|
963
|
+
try {
|
|
964
|
+
const parsed = new URL(trimmed);
|
|
965
|
+
if (parsed.protocol !== "https:" && parsed.protocol !== "http:") return void 0;
|
|
966
|
+
if (!isCanonicalPinterestPinUrl(trimmed)) return void 0;
|
|
967
|
+
const pathSegments = parsed.pathname.split("/").filter(Boolean);
|
|
968
|
+
const pinId = pathSegments[1];
|
|
969
|
+
if (pathSegments[0] !== "pin" || typeof pinId !== "string") return void 0;
|
|
970
|
+
return `https://${EXACT_CANONICAL_PINTEREST_PIN_HOST}/pin/${pinId}/`;
|
|
971
|
+
} catch {
|
|
972
|
+
return void 0;
|
|
973
|
+
}
|
|
974
|
+
};
|
|
975
|
+
var shouldWarmCanonicalPinterestPinInExtension = (url, browserMode) => exactCanonicalPinterestPinCaptureUrl(url) !== void 0 && resolveCanonicalPinterestPinCaptureBrowserMode(url, browserMode) === "extension";
|
|
976
|
+
var captureNetworkIdleWaitTimeout = (remainingTimeoutMs, maxNetworkIdleWaitMs) => {
|
|
977
|
+
const remaining = remainingTimeoutMs();
|
|
978
|
+
if (maxNetworkIdleWaitMs === void 0) return remaining;
|
|
979
|
+
return Math.max(1, Math.min(remaining, maxNetworkIdleWaitMs));
|
|
980
|
+
};
|
|
981
|
+
var resolveCanonicalPinterestPinCaptureBrowserMode = (url, browserMode) => {
|
|
982
|
+
if (exactCanonicalPinterestPinCaptureUrl(url) === void 0) return browserMode;
|
|
983
|
+
return browserMode === "managed" ? "managed" : "extension";
|
|
984
|
+
};
|
|
985
|
+
var warmCanonicalPinterestPinInExtension = async (manager, url, remainingTimeoutMs, options) => {
|
|
986
|
+
if (!shouldWarmCanonicalPinterestPinInExtension(url, options.browserMode)) return;
|
|
987
|
+
const launchTimeoutMs = remainingTimeoutMs();
|
|
988
|
+
const session = await withCaptureDeadline(
|
|
989
|
+
manager.launch({
|
|
990
|
+
headless: false,
|
|
991
|
+
startUrl: "about:blank",
|
|
992
|
+
persistProfile: false,
|
|
993
|
+
noExtension: false
|
|
994
|
+
}, launchTimeoutMs),
|
|
995
|
+
launchTimeoutMs,
|
|
996
|
+
"Pinterest canonical pin extension warmup launch"
|
|
997
|
+
);
|
|
998
|
+
try {
|
|
999
|
+
await prepareCaptureSessionState({
|
|
1000
|
+
manager,
|
|
1001
|
+
sessionId: session.sessionId,
|
|
1002
|
+
url,
|
|
1003
|
+
remainingTimeoutMs,
|
|
1004
|
+
options
|
|
1005
|
+
});
|
|
1006
|
+
const gotoTimeoutMs = remainingTimeoutMs();
|
|
1007
|
+
await withCaptureDeadline(
|
|
1008
|
+
manager.goto(session.sessionId, url, "load", gotoTimeoutMs),
|
|
1009
|
+
gotoTimeoutMs,
|
|
1010
|
+
"Pinterest canonical pin extension warmup navigation"
|
|
1011
|
+
);
|
|
1012
|
+
const waitTimeoutMs = captureNetworkIdleWaitTimeout(remainingTimeoutMs, options.maxNetworkIdleWaitMs);
|
|
1013
|
+
try {
|
|
1014
|
+
await withCaptureDeadline(
|
|
1015
|
+
manager.waitForLoad(session.sessionId, "networkidle", waitTimeoutMs),
|
|
1016
|
+
waitTimeoutMs,
|
|
1017
|
+
"Pinterest canonical pin extension warmup network idle wait"
|
|
1018
|
+
);
|
|
1019
|
+
} catch (error) {
|
|
1020
|
+
if (!isIgnorableNetworkIdleWaitError(error)) throw error;
|
|
1021
|
+
}
|
|
1022
|
+
} finally {
|
|
1023
|
+
await manager.disconnect(session.sessionId, false).catch(() => void 0);
|
|
1024
|
+
}
|
|
1025
|
+
};
|
|
1026
|
+
var launchPrimaryCaptureSession = async (manager, url, remainingTimeoutMs, options) => {
|
|
1027
|
+
const launchTimeoutMs = remainingTimeoutMs();
|
|
1028
|
+
const session = await withCaptureDeadline(
|
|
1029
|
+
manager.launch({
|
|
1030
|
+
headless: options.browserMode !== "extension",
|
|
1031
|
+
startUrl: "about:blank",
|
|
1032
|
+
persistProfile: false,
|
|
1033
|
+
noExtension: shouldForceManagedPrimaryCapture(options.browserMode)
|
|
1034
|
+
}, launchTimeoutMs),
|
|
1035
|
+
launchTimeoutMs,
|
|
1036
|
+
"primary media capture session launch"
|
|
1037
|
+
);
|
|
1038
|
+
try {
|
|
1039
|
+
await prepareCaptureSessionState({
|
|
1040
|
+
manager,
|
|
1041
|
+
sessionId: session.sessionId,
|
|
1042
|
+
url,
|
|
1043
|
+
remainingTimeoutMs,
|
|
1044
|
+
options
|
|
1045
|
+
});
|
|
1046
|
+
const gotoTimeoutMs = remainingTimeoutMs();
|
|
1047
|
+
await withCaptureDeadline(
|
|
1048
|
+
manager.goto(session.sessionId, url, "load", gotoTimeoutMs),
|
|
1049
|
+
gotoTimeoutMs,
|
|
1050
|
+
"primary media capture navigation"
|
|
1051
|
+
);
|
|
1052
|
+
const waitTimeoutMs = captureNetworkIdleWaitTimeout(remainingTimeoutMs, options.maxNetworkIdleWaitMs);
|
|
1053
|
+
try {
|
|
1054
|
+
await withCaptureDeadline(
|
|
1055
|
+
manager.waitForLoad(session.sessionId, "networkidle", waitTimeoutMs),
|
|
1056
|
+
waitTimeoutMs,
|
|
1057
|
+
"primary media capture network idle wait"
|
|
1058
|
+
);
|
|
1059
|
+
} catch (error) {
|
|
1060
|
+
if (!isIgnorableNetworkIdleWaitError(error)) throw error;
|
|
1061
|
+
}
|
|
1062
|
+
} catch (error) {
|
|
1063
|
+
await manager.disconnect(session.sessionId, true).catch(() => void 0);
|
|
1064
|
+
throw error;
|
|
1065
|
+
}
|
|
1066
|
+
return session;
|
|
1067
|
+
};
|
|
1068
|
+
async function captureInspiredesignPrimaryVisualEvidenceFromManager(manager, url, options) {
|
|
1069
|
+
if (typeof manager.launch !== "function") {
|
|
1070
|
+
return buildVisualEvidenceMetadata(
|
|
1071
|
+
"failed",
|
|
1072
|
+
PRIMARY_CAPTURE_SESSION_UNAVAILABLE_MESSAGE,
|
|
1073
|
+
["primary_capture_session_unavailable"]
|
|
1074
|
+
);
|
|
1075
|
+
}
|
|
1076
|
+
const captureTimeoutMs = clampInspiredesignCaptureTimeout(options.timeoutMs);
|
|
1077
|
+
const remainingTimeoutMs = createRemainingCaptureTimeout(captureTimeoutMs);
|
|
1078
|
+
let session;
|
|
1079
|
+
try {
|
|
1080
|
+
session = await launchPrimaryCaptureSession(
|
|
1081
|
+
manager,
|
|
1082
|
+
url,
|
|
1083
|
+
remainingTimeoutMs,
|
|
1084
|
+
options
|
|
1085
|
+
);
|
|
1086
|
+
} catch (error) {
|
|
1087
|
+
return buildVisualEvidenceMetadata(
|
|
1088
|
+
"failed",
|
|
1089
|
+
detailFromCaptureError(error, "Primary visual evidence setup failed."),
|
|
1090
|
+
["primary_capture_setup_failed"]
|
|
1091
|
+
);
|
|
1092
|
+
}
|
|
1093
|
+
try {
|
|
1094
|
+
return await captureVisualEvidenceArtifact(manager, session.sessionId, {
|
|
1095
|
+
visualEvidence: "required",
|
|
1096
|
+
visualEvidencePath: options.visualEvidencePath
|
|
1097
|
+
}, remainingTimeoutMs);
|
|
1098
|
+
} finally {
|
|
1099
|
+
await manager.disconnect(session.sessionId, true).catch(() => void 0);
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
async function captureInspiredesignPrimaryPinMediaEvidenceFromManager(manager, url, options) {
|
|
1103
|
+
if (!options.pinMediaEvidencePath) {
|
|
1104
|
+
return buildPinMediaEvidenceMetadata(
|
|
1105
|
+
"failed",
|
|
1106
|
+
options.referenceId,
|
|
1107
|
+
url,
|
|
1108
|
+
PIN_MEDIA_CAPTURE_PATH_UNAVAILABLE_MESSAGE,
|
|
1109
|
+
{ rejectionReasons: ["pin_media_path_unavailable"] }
|
|
1110
|
+
);
|
|
1111
|
+
}
|
|
1112
|
+
if (typeof manager.launch !== "function") {
|
|
1113
|
+
return buildPinMediaEvidenceMetadata(
|
|
1114
|
+
"failed",
|
|
1115
|
+
options.referenceId,
|
|
1116
|
+
url,
|
|
1117
|
+
PRIMARY_CAPTURE_SESSION_UNAVAILABLE_MESSAGE,
|
|
1118
|
+
{
|
|
1119
|
+
warnings: ["primary_capture_session_unavailable"],
|
|
1120
|
+
rejectionReasons: ["primary_capture_session_unavailable"]
|
|
1121
|
+
}
|
|
1122
|
+
);
|
|
1123
|
+
}
|
|
1124
|
+
if (typeof manager.capturePinterestPinMedia !== "function") {
|
|
1125
|
+
return buildPinMediaEvidenceMetadata(
|
|
1126
|
+
"failed",
|
|
1127
|
+
options.referenceId,
|
|
1128
|
+
url,
|
|
1129
|
+
PIN_MEDIA_CAPTURE_HELPER_UNAVAILABLE_MESSAGE,
|
|
1130
|
+
{
|
|
1131
|
+
warnings: ["pin_media_capture_helper_unavailable"],
|
|
1132
|
+
rejectionReasons: ["pin_media_capture_helper_unavailable"]
|
|
1133
|
+
}
|
|
1134
|
+
);
|
|
1135
|
+
}
|
|
1136
|
+
const captureTimeoutMs = clampInspiredesignPinMediaCaptureTimeout(options.timeoutMs);
|
|
1137
|
+
const captureUrl = exactCanonicalPinterestPinCaptureUrl(url) ?? url;
|
|
1138
|
+
const resolvedBrowserMode = resolveCanonicalPinterestPinCaptureBrowserMode(captureUrl, options.browserMode);
|
|
1139
|
+
const captureOptions = resolvedBrowserMode === options.browserMode ? options : { ...options, browserMode: resolvedBrowserMode };
|
|
1140
|
+
const pinMediaCaptureOptions = {
|
|
1141
|
+
...captureOptions,
|
|
1142
|
+
maxNetworkIdleWaitMs: PINTEREST_PIN_MEDIA_NETWORK_IDLE_TIMEOUT_MS
|
|
1143
|
+
};
|
|
1144
|
+
let session;
|
|
1145
|
+
const remainingTimeoutMs = createRemainingCaptureTimeout(captureTimeoutMs);
|
|
1146
|
+
try {
|
|
1147
|
+
const warmupTimeoutMs = Math.min(captureTimeoutMs, PINTEREST_PIN_MEDIA_EXTENSION_WARMUP_TIMEOUT_MS);
|
|
1148
|
+
await warmCanonicalPinterestPinInExtension(
|
|
1149
|
+
manager,
|
|
1150
|
+
captureUrl,
|
|
1151
|
+
createCappedRemainingCaptureTimeout(remainingTimeoutMs, warmupTimeoutMs),
|
|
1152
|
+
pinMediaCaptureOptions
|
|
1153
|
+
).catch(() => void 0);
|
|
1154
|
+
session = await launchPrimaryCaptureSession(
|
|
1155
|
+
manager,
|
|
1156
|
+
captureUrl,
|
|
1157
|
+
remainingTimeoutMs,
|
|
1158
|
+
pinMediaCaptureOptions
|
|
1159
|
+
);
|
|
1160
|
+
} catch (error) {
|
|
1161
|
+
return buildPinMediaEvidenceMetadata(
|
|
1162
|
+
"failed",
|
|
1163
|
+
options.referenceId,
|
|
1164
|
+
url,
|
|
1165
|
+
detailFromCaptureError(error, "Primary Pinterest pin media evidence setup failed."),
|
|
1166
|
+
{
|
|
1167
|
+
warnings: ["primary_capture_setup_failed"],
|
|
1168
|
+
rejectionReasons: ["primary_capture_setup_failed"]
|
|
1169
|
+
}
|
|
1170
|
+
);
|
|
1171
|
+
}
|
|
1172
|
+
try {
|
|
1173
|
+
await mkdir(dirname(options.pinMediaEvidencePath), { recursive: true });
|
|
1174
|
+
const captureTimeout = remainingTimeoutMs();
|
|
1175
|
+
const result = await withCaptureDeadline(
|
|
1176
|
+
manager.capturePinterestPinMedia(session.sessionId, {
|
|
1177
|
+
path: options.pinMediaEvidencePath,
|
|
1178
|
+
timeoutMs: captureTimeout
|
|
1179
|
+
}),
|
|
1180
|
+
captureTimeout,
|
|
1181
|
+
"Pinterest pin media evidence capture"
|
|
1182
|
+
);
|
|
1183
|
+
const viewportProbe = viewportProbeFromPinMediaResult(result);
|
|
1184
|
+
if (result.status === "not_found") {
|
|
1185
|
+
const sourceUrl = result.sourceUrl || viewportProbe.sourceUrl;
|
|
1186
|
+
return buildPinMediaEvidenceMetadata(
|
|
1187
|
+
"skipped",
|
|
1188
|
+
options.referenceId,
|
|
1189
|
+
url,
|
|
1190
|
+
PIN_MEDIA_CAPTURE_NOT_FOUND_MESSAGE,
|
|
1191
|
+
{
|
|
1192
|
+
sourceUrl,
|
|
1193
|
+
endedSourceUrl: sourceUrl,
|
|
1194
|
+
pinterestPageQuality: viewportProbe.pinterestPageQuality ?? options.pinterestPageQuality ?? "unknown",
|
|
1195
|
+
warnings: mergePinMediaWarnings(viewportProbe, result),
|
|
1196
|
+
rejectionReasons: collectPinterestPinMediaNotFoundReasons(result)
|
|
1197
|
+
}
|
|
1198
|
+
);
|
|
1199
|
+
}
|
|
1200
|
+
return buildCapturedPinMediaMetadata(
|
|
1201
|
+
result,
|
|
1202
|
+
options.referenceId,
|
|
1203
|
+
url,
|
|
1204
|
+
options.pinMediaEvidencePath,
|
|
1205
|
+
viewportProbe,
|
|
1206
|
+
options.pinterestPageQuality
|
|
1207
|
+
);
|
|
1208
|
+
} catch (error) {
|
|
1209
|
+
return buildPinMediaEvidenceMetadata(
|
|
1210
|
+
"failed",
|
|
1211
|
+
options.referenceId,
|
|
1212
|
+
url,
|
|
1213
|
+
detailFromCaptureError(error, "Primary Pinterest pin media evidence capture failed."),
|
|
1214
|
+
{
|
|
1215
|
+
warnings: ["primary_pin_media_capture_failed"],
|
|
1216
|
+
rejectionReasons: ["primary_pin_media_capture_failed"]
|
|
1217
|
+
}
|
|
1218
|
+
);
|
|
1219
|
+
} finally {
|
|
1220
|
+
await manager.disconnect(session.sessionId, true).catch(() => void 0);
|
|
1221
|
+
}
|
|
1222
|
+
}
|
|
1223
|
+
async function captureInspiredesignPrimaryMotionEvidenceFromManager(manager, url, options) {
|
|
1224
|
+
if (!manager.startScreencast || !manager.stopScreencast) {
|
|
1225
|
+
return {
|
|
1226
|
+
status: "failed",
|
|
1227
|
+
kind: "screencast",
|
|
1228
|
+
capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1229
|
+
frameCount: 0,
|
|
1230
|
+
warnings: ["screencast_helper_unavailable"],
|
|
1231
|
+
failure: "Screencast helper unavailable in this execution lane.",
|
|
1232
|
+
diagnostic: true,
|
|
1233
|
+
diagnosticReasons: ["screencast_helper_unavailable"]
|
|
1234
|
+
};
|
|
1235
|
+
}
|
|
1236
|
+
if (typeof manager.launch !== "function") {
|
|
1237
|
+
return {
|
|
1238
|
+
status: "failed",
|
|
1239
|
+
kind: "screencast",
|
|
1240
|
+
capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1241
|
+
frameCount: 0,
|
|
1242
|
+
warnings: ["primary_capture_session_unavailable"],
|
|
1243
|
+
failure: PRIMARY_CAPTURE_SESSION_UNAVAILABLE_MESSAGE,
|
|
1244
|
+
diagnostic: true,
|
|
1245
|
+
diagnosticReasons: ["primary_capture_session_unavailable"]
|
|
1246
|
+
};
|
|
1247
|
+
}
|
|
1248
|
+
const captureTimeoutMs = clampInspiredesignCaptureTimeout(options.timeoutMs);
|
|
1249
|
+
const remainingTimeoutMs = createRemainingCaptureTimeout(captureTimeoutMs);
|
|
1250
|
+
let session;
|
|
1251
|
+
try {
|
|
1252
|
+
session = await launchPrimaryCaptureSession(
|
|
1253
|
+
manager,
|
|
1254
|
+
url,
|
|
1255
|
+
remainingTimeoutMs,
|
|
1256
|
+
options
|
|
1257
|
+
);
|
|
1258
|
+
} catch (error) {
|
|
1259
|
+
return {
|
|
1260
|
+
status: "failed",
|
|
1261
|
+
kind: "screencast",
|
|
1262
|
+
capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1263
|
+
frameCount: 0,
|
|
1264
|
+
warnings: ["primary_capture_setup_failed"],
|
|
1265
|
+
failure: detailFromCaptureError(error, "Primary motion evidence setup failed."),
|
|
1266
|
+
diagnostic: true,
|
|
1267
|
+
diagnosticReasons: ["primary_capture_setup_failed"]
|
|
1268
|
+
};
|
|
1269
|
+
}
|
|
1270
|
+
try {
|
|
1271
|
+
const startedViewportProbe = await captureViewportSourceUrl(manager, session.sessionId, remainingTimeoutMs);
|
|
1272
|
+
const startTimeoutMs = remainingTimeoutMs();
|
|
1273
|
+
let stopLateStart = false;
|
|
1274
|
+
const startScreencast = manager.startScreencast(session.sessionId, {
|
|
1275
|
+
outputDir: options.outputDir,
|
|
1276
|
+
intervalMs: INSPIREDESIGN_MOTION_INTERVAL_MS,
|
|
1277
|
+
maxFrames: INSPIREDESIGN_MOTION_MAX_FRAMES
|
|
1278
|
+
});
|
|
1279
|
+
startScreencast.then(async (screencast2) => {
|
|
1280
|
+
if (stopLateStart) {
|
|
1281
|
+
const lateStop = manager.stopScreencast?.(session.sessionId, screencast2.screencastId);
|
|
1282
|
+
if (lateStop) {
|
|
1283
|
+
await withCaptureDeadline(
|
|
1284
|
+
lateStop,
|
|
1285
|
+
INSPIREDESIGN_LATE_SCREENCAST_STOP_TIMEOUT_MS,
|
|
1286
|
+
"late primary motion capture stop"
|
|
1287
|
+
).catch(() => void 0);
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
}).catch(() => void 0);
|
|
1291
|
+
const screencast = await withCaptureDeadline(
|
|
1292
|
+
startScreencast.catch((error) => {
|
|
1293
|
+
stopLateStart = false;
|
|
1294
|
+
throw error;
|
|
1295
|
+
}),
|
|
1296
|
+
startTimeoutMs,
|
|
1297
|
+
"primary motion capture start"
|
|
1298
|
+
).catch((error) => {
|
|
1299
|
+
stopLateStart = true;
|
|
1300
|
+
throw error;
|
|
1301
|
+
});
|
|
1302
|
+
let result;
|
|
1303
|
+
try {
|
|
1304
|
+
const sampleTimeoutMs = remainingTimeoutMs();
|
|
1305
|
+
if (sampleTimeoutMs <= 1) {
|
|
1306
|
+
throw new Error("Deep capture primary motion capture sampling exceeded timeout budget.");
|
|
1307
|
+
}
|
|
1308
|
+
await withCaptureDeadline(
|
|
1309
|
+
delay(Math.min(INSPIREDESIGN_MOTION_INTERVAL_MS * INSPIREDESIGN_MOTION_MAX_FRAMES, sampleTimeoutMs)),
|
|
1310
|
+
sampleTimeoutMs,
|
|
1311
|
+
"primary motion capture sampling"
|
|
1312
|
+
);
|
|
1313
|
+
} finally {
|
|
1314
|
+
const stopTimeoutMs = remainingTimeoutMs();
|
|
1315
|
+
result = await withCaptureDeadline(
|
|
1316
|
+
manager.stopScreencast(session.sessionId, screencast.screencastId),
|
|
1317
|
+
stopTimeoutMs,
|
|
1318
|
+
"primary motion capture stop"
|
|
1319
|
+
);
|
|
1320
|
+
}
|
|
1321
|
+
if (!result) {
|
|
1322
|
+
throw new Error("Motion evidence screencast did not return stop metadata.");
|
|
1323
|
+
}
|
|
1324
|
+
const endedViewportProbe = await captureViewportSourceUrl(manager, session.sessionId, remainingTimeoutMs);
|
|
1325
|
+
const diagnosticReasons = [
|
|
1326
|
+
...result.frameCount === 0 ? ["zero_frame_capture"] : [],
|
|
1327
|
+
...motionSourceDiagnosticReasons(startedViewportProbe, endedViewportProbe),
|
|
1328
|
+
...motionPageQualityDiagnosticReasons(startedViewportProbe, endedViewportProbe)
|
|
1329
|
+
];
|
|
1330
|
+
const pinterestPageQuality = endedViewportProbe.pinterestPageQuality ?? startedViewportProbe.pinterestPageQuality;
|
|
1331
|
+
return {
|
|
1332
|
+
status: "captured",
|
|
1333
|
+
kind: "screencast",
|
|
1334
|
+
capturedAt: result.endedAt,
|
|
1335
|
+
replay: { tempPath: result.manifestPath },
|
|
1336
|
+
replayHtml: { tempPath: result.replayHtmlPath },
|
|
1337
|
+
...result.previewPath ? { preview: { tempPath: result.previewPath } } : {},
|
|
1338
|
+
outputDir: result.outputDir,
|
|
1339
|
+
frameCount: result.frameCount,
|
|
1340
|
+
warnings: [...startedViewportProbe.warnings, ...endedViewportProbe.warnings, ...result.warnings ?? []],
|
|
1341
|
+
...endedViewportProbe.sourceUrl ?? startedViewportProbe.sourceUrl ? { sourceUrl: endedViewportProbe.sourceUrl ?? startedViewportProbe.sourceUrl } : {},
|
|
1342
|
+
...startedViewportProbe.sourceUrl ? { startedSourceUrl: startedViewportProbe.sourceUrl } : {},
|
|
1343
|
+
...endedViewportProbe.sourceUrl ? { endedSourceUrl: endedViewportProbe.sourceUrl } : {},
|
|
1344
|
+
...pinterestPageQuality ? { pinterestPageQuality } : {},
|
|
1345
|
+
...startedViewportProbe.pinterestPageQuality ? { startedPinterestPageQuality: startedViewportProbe.pinterestPageQuality } : {},
|
|
1346
|
+
...endedViewportProbe.pinterestPageQuality ? { endedPinterestPageQuality: endedViewportProbe.pinterestPageQuality } : {},
|
|
1347
|
+
diagnostic: diagnosticReasons.length > 0,
|
|
1348
|
+
diagnosticReasons
|
|
1349
|
+
};
|
|
1350
|
+
} catch (error) {
|
|
1351
|
+
return {
|
|
1352
|
+
status: "failed",
|
|
1353
|
+
kind: "screencast",
|
|
1354
|
+
capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1355
|
+
frameCount: 0,
|
|
1356
|
+
warnings: ["motion_capture_failed"],
|
|
1357
|
+
failure: detailFromCaptureError(error, "Motion evidence screencast failed."),
|
|
1358
|
+
diagnostic: true,
|
|
1359
|
+
diagnosticReasons: ["motion_capture_failed"]
|
|
1360
|
+
};
|
|
1361
|
+
} finally {
|
|
1362
|
+
await manager.disconnect(session.sessionId, true).catch(() => void 0);
|
|
1363
|
+
}
|
|
1364
|
+
}
|
|
721
1365
|
async function captureInspiredesignReferenceFromManager(manager, url, options = {}) {
|
|
722
1366
|
const cookiePolicy = resolveInspiredesignCaptureCookiePolicy(options);
|
|
723
1367
|
const captureTimeoutMs = clampInspiredesignCaptureTimeout(options.timeoutMs);
|
|
@@ -2230,6 +2874,18 @@ async function handleDaemonCommand(core, request) {
|
|
|
2230
2874
|
captureReference: async (url, options) => captureInspiredesignReferenceFromManager(core.manager, url, {
|
|
2231
2875
|
...options,
|
|
2232
2876
|
cookieSource: core.config.providers?.cookieSource
|
|
2877
|
+
}),
|
|
2878
|
+
captureVisualEvidence: async (url, options) => captureInspiredesignPrimaryVisualEvidenceFromManager(core.manager, url, {
|
|
2879
|
+
...options,
|
|
2880
|
+
cookieSource: core.config.providers?.cookieSource
|
|
2881
|
+
}),
|
|
2882
|
+
captureMotionEvidence: async (url, options) => captureInspiredesignPrimaryMotionEvidenceFromManager(core.manager, url, {
|
|
2883
|
+
...options,
|
|
2884
|
+
cookieSource: core.config.providers?.cookieSource
|
|
2885
|
+
}),
|
|
2886
|
+
capturePinMediaEvidence: async (url, options) => captureInspiredesignPrimaryPinMediaEvidenceFromManager(core.manager, url, {
|
|
2887
|
+
...options,
|
|
2888
|
+
cookieSource: core.config.providers?.cookieSource
|
|
2233
2889
|
})
|
|
2234
2890
|
}
|
|
2235
2891
|
);
|
|
@@ -3061,7 +3717,7 @@ function clampWaitTimeout(timeoutMs) {
|
|
|
3061
3717
|
}
|
|
3062
3718
|
async function waitForRelayHandshake(relay, observedPort, timeoutMs) {
|
|
3063
3719
|
const start = Date.now();
|
|
3064
|
-
let
|
|
3720
|
+
let delay2 = WAIT_MIN_DELAY_MS;
|
|
3065
3721
|
while (Date.now() - start < timeoutMs) {
|
|
3066
3722
|
const relayStatus = relay.status();
|
|
3067
3723
|
if (relayStatus.extensionHandshakeComplete) {
|
|
@@ -3074,8 +3730,8 @@ async function waitForRelayHandshake(relay, observedPort, timeoutMs) {
|
|
|
3074
3730
|
if (observedStatus?.extensionHandshakeComplete) {
|
|
3075
3731
|
return true;
|
|
3076
3732
|
}
|
|
3077
|
-
await new Promise((resolve3) => setTimeout(resolve3,
|
|
3078
|
-
|
|
3733
|
+
await new Promise((resolve3) => setTimeout(resolve3, delay2));
|
|
3734
|
+
delay2 = Math.min(delay2 * 2, WAIT_MAX_DELAY_MS);
|
|
3079
3735
|
}
|
|
3080
3736
|
return false;
|
|
3081
3737
|
}
|
|
@@ -3740,6 +4396,9 @@ function persistDaemonStatusMetadata(base, status, config) {
|
|
|
3740
4396
|
export {
|
|
3741
4397
|
inspectSession,
|
|
3742
4398
|
buildCorrelatedAuditBundle,
|
|
4399
|
+
captureInspiredesignPrimaryVisualEvidenceFromManager,
|
|
4400
|
+
captureInspiredesignPrimaryPinMediaEvidenceFromManager,
|
|
4401
|
+
captureInspiredesignPrimaryMotionEvidenceFromManager,
|
|
3743
4402
|
captureInspiredesignReferenceFromManager,
|
|
3744
4403
|
executeMacroWithRuntime,
|
|
3745
4404
|
fetchWithTimeout,
|
|
@@ -3761,4 +4420,4 @@ export {
|
|
|
3761
4420
|
fetchDaemonStatusFromMetadata,
|
|
3762
4421
|
persistDaemonStatusMetadata
|
|
3763
4422
|
};
|
|
3764
|
-
//# sourceMappingURL=chunk-
|
|
4423
|
+
//# sourceMappingURL=chunk-Z3ADLR7I.js.map
|