Commit Graph

28 Commits

Author SHA1 Message Date
Ryan Manuel 954847c613 internal: (studio) add manifest for all of the cloud delivered files (#31923)
* internal: (studio) add manifest for all of the cloud delivered files

* fix tests and environment variables

* update strategy

* fix tests

* rework

* Apply suggestions from code review

* require manifest

* require manifest

* clean up

* refactor

* Update packages/server/lib/cloud/studio/StudioLifecycleManager.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* refactor

* just use the string

* try and fix test

* try and fix test

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-01 22:21:39 -05:00
Tim Griesser ed8e7ea8a4 chore: continuing with request to axios changes (#31915) 2025-06-27 17:18:12 -04:00
Tim Griesser 31c3455b6d chore: normalize options passed via axios to the agent layer (#31905)
* fix: normalize options passed via axios to the agent layer

* improvements to testing, using debugging-proxy

* clean up & add test cases for authorization

* add follow-redirects as explicit dependency
2025-06-23 14:52:46 -04:00
Ryan Manuel fed81d47c8 internal: (studio) set up hot reloading for the studio bundle (#31796)
* internal: (studio) set up hot reloading for the studio bundle

* fix types

* floating promise

* Update packages/server/test/unit/cloud/get_cloud_metadata_spec.ts

* fix tests

* index on ryanm/internal/hot-reloading: b6a9137258 Update packages/server/test/unit/cloud/get_cloud_metadata_spec.ts

* index on ryanm/internal/hot-reloading: b6a9137258 Update packages/server/test/unit/cloud/get_cloud_metadata_spec.ts

* index on ryanm/internal/hot-reloading: b6a9137258 Update packages/server/test/unit/cloud/get_cloud_metadata_spec.ts

* fix tests

* fix binary

* fix tests

* minor tweaks

* code cleanup

* update guide

* PR comments

---------

Co-authored-by: cypress-bot[bot] <+cypress-bot[bot]@users.noreply.github.com>
2025-05-30 13:38:42 -05:00
Adam Stone-Lord 6d1d2d1336 internal: show loading and error statuses in studio panel, add download timeout (#31633)
Co-authored-by: Ryan Manuel <ryanm@cypress.io>
2025-05-13 15:42:50 -04:00
Ryan Manuel e3a7994ba4 internal: (studio) quality of life improvements for the studio lifecycle (#31663)
* internal: (studio) quality of life improvements for the studio lifecycle

* disable studio error reporting for cypress in cypress
2025-05-09 15:44:52 -05:00
renovate[bot] 6ac467a692 chore(deps): update dependency chai to v3 (#31558)
* chore(deps): update dependency chai to v3

* empty commit

* update some tests to new syntax

* update tests + bump cache

* update system test expect

* update more chai usage

* update more chai usage

* cleanup

* fix some leftover empty functions

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jennifer Shehane <jennifer@cypress.io>
Co-authored-by: Jennifer Shehane <shehane.jennifer@gmail.com>
2025-05-08 13:29:51 -04:00
Ryan Manuel ad353fcc0f internal: (studio) add network agent to the studio session call (#31617)
* internal: (studio) add network agent to the studio session call

* Update packages/server/lib/cloud/api/studio/post_studio_session.ts

Co-authored-by: Matt Schile <mschile@cypress.io>

---------

Co-authored-by: Matt Schile <mschile@cypress.io>
2025-04-30 21:25:34 -05:00
Ryan Manuel 602ff2aa77 internal: (studio) when errors occur in development, log them and do not throw and do not send to Sentry (#31614)
* chore: (studio) when errors occur in development, log them and do not throw and do not send to Sentry

* Update packages/server/lib/cloud/api/studio/report_studio_error.ts

* chore: (studio) when errors occur in development, log them and do not throw and do not send to Sentry

* chore: (studio) when errors occur in development, log them and do not throw and do not send to Sentry
2025-04-30 13:56:06 -05:00
Ryan Manuel d435ddaac3 internal: rework studio handshake to allow better caching (#31599)
* feat: (studio) Capture telemetry for studio initialization

* fixes

* revert type changes

* add studio lifecycle manager

* fix studio router

* finish lifecycle manager, add test coverage

* fix types

* fix types for real

* fix types actually

* fix lint

* fix routes spec

* fix lint, add try/catch

* remove work to capture telemetry

* didn't mean to remove this part

* fix types

* remove test for other branch

* feedback

* fix test

* encapsulate more logic into studio lifecycle manager

* feedback

* fix tests

* blank

* feedback

* Update packages/app/src/runner/event-manager.ts

Co-authored-by: Matt Schile <mschile@cypress.io>

* fix lint

* fix hiding runner ui

* update test

* re-work lifecycle manager implementation to not use EventEmitter

* fix listener registration logic

* ensure that studio still loads even when cloud bundle doesn't

* feedback

* feedback

* use getter for isProtocolEnabled, report studio manager initialization errors, remove references for isStudioProtocolEnabled

* clean up listeners when initialization errors

* Update packages/server/lib/StudioLifecycleManager.ts

Co-authored-by: Matt Schile <mschile@cypress.io>

* Update packages/server/lib/StudioLifecycleManager.ts

Co-authored-by: Matt Schile <mschile@cypress.io>

* Update packages/server/lib/StudioLifecycleManager.ts

Co-authored-by: Matt Schile <mschile@cypress.io>

* feedback

* fix: rework studio handshake to allow better caching

* merge conflict

* slight refactor

* update types

* Update packages/server/lib/cloud/api/studio/post_studio_session.ts

* Apply suggestions from code review

* fix test

* PR comment

---------

Co-authored-by: astone123 <adams@cypress.io>
Co-authored-by: Matt Schile <mschile@cypress.io>
2025-04-30 13:33:02 -05:00
Adam Stone-Lord a5ba8c497c internal: (studio) initialize cloud studio asynchronously (#31469)
Co-authored-by: Ryan Manuel <ryanm@cypress.io>
Co-authored-by: Matt Schile <mschile@cypress.io>
2025-04-29 09:37:44 -04:00
Ryan Manuel 38f980e0c4 internal: (studio) improve error reporting (#31546)
* internal: (studio) improvements to how studio can access the protocol database

* fix

* fix build

* refactor due to downstream changes

* feat: capture errors with studio

* types

* add tests

* fix types

* fix typescript

* strip path

* fix tests
2025-04-23 15:54:30 -05:00
Cacie Prins a50012b892 perf: reduce the initial timeout for proxy connections, make configurable (#31283)
* use cached preflight response on subsequent cloud requests that require a preflight

* introduce env var to skip initial proxy-api request

* rename env to CYPRESS_INTERNAL prefix

* change noproxy timeout default to 5 seconds

* fix

* rm internal

* changelog

* Update packages/server/test/unit/cloud/api/api_spec.js

Co-authored-by: Jennifer Shehane <jennifer@cypress.io>

* Update packages/server/lib/cloud/api/index.ts

Co-authored-by: Bill Glesias <bglesias@gmail.com>

* fix ts

---------

Co-authored-by: Jennifer Shehane <jennifer@cypress.io>
Co-authored-by: Bill Glesias <bglesias@gmail.com>
2025-04-17 10:00:46 -04:00
Cacie Prins ab98b4940e fix: Back out of axios switchover for the createInstance cloud API request (#31486)
* use old create instance method for proxy support

* changelog

* conform legacy createInstance to the newer signature

* link to proxy env issue as todo

* changelog

* system test snapshots

* fix snap
2025-04-16 14:45:19 -04:00
Jennifer Shehane 6b28356878 chore: convert cache.js file within server to TypeScript (#31471)
* chore: convert cache.js file within server to TypeScript

* update cache calls and await them

* updates to imports and switching cache calls to await

* remove Partial from Allowed State

* change cache calls back to not await

* Remove dead code

* update memo.push return
2025-04-10 15:02:58 -04:00
Ryan Manuel 9201d3280a chore: ensure that studio AI logic is disabled on non chromium based browsers (#31272)
* update url with studio params

* updates

* spec updates

* adding tests

* updating changelog

* skip adding visit log during start

* update url support

* cy origin tests

* fix tests

* updates

* update origin test

* chore: support studio lifecycle in protocol

* merge changes

* fix types

* fix tests

* fix tests

* fix tests

* fix more tests

* fix more tests

* fix more tests

* fix test

* fix bugs

* fix tests

* attempt to fix test

* further fixes

* improve cloud studio enablement

* refactoring

* remove new dom link

* fix last test

* Update packages/app/cypress/e2e/studio/studio.cy.ts

* Update packages/server/lib/project-base.ts

* chore: ensure that studio llm logic is disabled on non chromium based browsers

* use canAccessStudioLLM in the component

* fix types

* fix types

* fix types

* PR comments

* fix types

* fix types

* revert type stuff

* refactor

* import type

* fix types

---------

Co-authored-by: Matthew Schile <mschile@cypress.io>
Co-authored-by: Jennifer Shehane <jennifer@cypress.io>
2025-03-14 14:20:40 -05:00
Ryan Manuel 0daf7e639f chore: support studio lifecycle in protocol (#31239)
* update url with studio params

* updates

* spec updates

* adding tests

* updating changelog

* skip adding visit log during start

* update url support

* cy origin tests

* fix tests

* updates

* update origin test

* chore: support studio lifecycle in protocol

* merge changes

* fix types

* fix tests

* fix tests

* fix tests

* fix more tests

* fix more tests

* fix more tests

* fix test

* fix bugs

* fix tests

* attempt to fix test

* further fixes

* improve cloud studio enablement

* refactoring

* remove new dom link

* fix last test

* Update packages/app/cypress/e2e/studio/studio.cy.ts

* Update packages/server/lib/project-base.ts

* Update packages/proxy/lib/http/request-middleware.ts

Co-authored-by: Matt Schile <mschile@cypress.io>

* PR comments

* fix build

* fix build

* update

* Update packages/server/lib/project-base.ts

Co-authored-by: Matt Schile <mschile@cypress.io>

* fix unit test

* rework save logic

---------

Co-authored-by: Matthew Schile <mschile@cypress.io>
Co-authored-by: Jennifer Shehane <jennifer@cypress.io>
2025-03-13 20:30:29 -05:00
Cacie Prins bbd7efc0dd refactor: begin to use axios for cloud api requests (#31041)
* patch axios for v8 snapshots

* export httpsAgent and httpAgent discretely

* set up axios interceptors for logging and error response transformation

* use unified error transform fn

* create instance api reqs, timeouts, tests

* move axios middleware to its own dir & refactor

* refactor error handling, enable retries in createInstance

* fix invocation of createInstance - not caught by ts because record.js is js

* retry on 500 - according to system test, this is expected behavior

* resolve snapshots, report retries to stdout

* fix cdp connection usage of shouldRetry due to newly unknown error type

* axios doesnt fully follow RequestOptions shape when adding request to https agent

* note why uri is treated as optional

* hail mary on getting axios to work with v8 snapshots

* update lockfile, force no-rewrite on more axios files

* attempt to fix v8 snapshots

* add verbose debugging to api request logging

* enable verbose api debugging on server unit tests

* fix nock pattern for createInstance

* remove request logging unit test - sinon/mocha does not assert correctly

* fix a few unit tests

* use runAllAsync rather than waiting an arbitrary time for sinon fake timer

* move create_instance spec to ts file, remove redundant test

* rm debug on ci

* clarify comment on change inpackages/network

* correct .uri property on patched RequestOptions to be optional

* rm unused log_requests.ts, DRY error messages

* resolve types with record.ts migration

---------

Co-authored-by: Ryan Manuel <ryanm@cypress.io>
2025-03-10 10:58:09 -04:00
Ryan Manuel bd4774fb57 chore: pass file preprocesor override to protocol as debug data (#31171)
* chore: set up sharing of react via module federation in studio

* chore: add ability to load types from the studio bundle

* fix build

* fix build

* fix build

* chore: pass file preprocesor override to protocol as debug data

* fix tests

* PR comments

* PR comment

* update types
2025-03-03 12:52:01 -06:00
Ryan Manuel ffcc6387ef chore: add ability to load types from the studio bundle (#31153)
* chore: set up sharing of react via module federation in studio

* chore: add ability to load types from the studio bundle

* fix build

* fix build

* fix build

* PR comments

* Update guides/studio-development.md

Co-authored-by: Matt Schile <mschile@cypress.io>

* fix test

---------

Co-authored-by: Matt Schile <mschile@cypress.io>
2025-02-28 16:30:45 -06:00
Ryan Manuel 2dce6d5831 chore: add logic to dynamically load studio functionality (#31033)
* chore: add logic to dynamically load new studio functionality

* fix types

* fix tests

* fix

* fix tests

* fix tests

* additional changes to lock things down

* clean up code

* Update guides/studio-development.md

Co-authored-by: Jennifer Shehane <jennifer@cypress.io>

* Update protocol-development.md

* additional headers

* PR comments

* Update packages/server/lib/cloud/api/get_app_studio.ts

Co-authored-by: Matt Schile <mschile@cypress.io>

* Update packages/app/vite.config.mjs

* update studio/protocol development guides

---------

Co-authored-by: Jennifer Shehane <jennifer@cypress.io>
Co-authored-by: Matt Schile <mschile@cypress.io>
2025-02-14 14:54:15 -06:00
Ryan Manuel 0975b2f07f feat: update the protocol to be able to flex logic based on project config (#30594)
* feat: update the protocol to be able to flex logic based on project config

* slight refactor

* Update cli/CHANGELOG.md

* Update packages/types/src/protocol.ts

* fix ts
2024-11-13 15:42:11 -06:00
Cacie Prins 1d845323d4 feat: Improve UX when Test Replay upload fails due to slow upload (#30235)
* new error message for stream stall upload failures

* new unknown error msg, extract printProtocolUploadError for testing, consolidatd args for stream stall msg

* rename env more appropriately, add sampling interval param to putProtocolArtifact

* default to 5000, override with app capture protocol value, override that with env var

* update snapshots

* fix math in upload stall error msg

* changelog

* update gql schema w/ new error msg, fix protocol tscheck

* update test to use fn for app capture supplied interval

* increase default stream stall interval to 10 seconds

* typos

* snapshots

* rename env var

* do not use user-supplied interval if it parses to NaN

* use the more standard makeErr for unknown/uncategorized upload error in visual snapshots

* rearrange upload stall error message

* fix typo

* changelog

---------

Co-authored-by: Jennifer Shehane <jennifer@cypress.io>
2024-09-25 11:39:28 -05:00
Matt Schile 1b1a39e9c2 feat: (protocol) setup protocol with projectId and cloud api (#30066) 2024-08-22 09:45:59 -06:00
Cacie Prins eecaaf72b8 fix: Stream monitor behavior on failed and stalled upload attempts (#29959)
* fix: rethrow stalled network request error correctly

* no longer timeout from stream monitor on failure to start - allow OS to handle

* changelog

* fix system error detection

* fix test for system error throw

* Update cli/CHANGELOG.md

* Update packages/server/test/unit/cloud/network/put_fetch_spec.ts

Co-authored-by: Bill Glesias <bglesias@gmail.com>

* rm noop try-catch

---------

Co-authored-by: Bill Glesias <bglesias@gmail.com>
2024-08-07 10:05:56 -04:00
Cacie Prins 5f2236e6cc fix: do not re-use readstreams when retry an upload of the test replay recording (#29745)
* custom async retry for any async fn

* "proxied" fetch for PUT, throwing http errors

* cleans up put_fetch return types & parsing

* move protocol upload logic to put_protocol_artifact, rm upload_stream

* changelog

* changelog

* manually fix wsp in snapshot

* reorganizes a little, properly tests retryable logic

* removes 408 as a non-retriable error in unit test

* make expectation to be resolved more clear

* rm unnecessary type coercion

* changelog

* Update cli/CHANGELOG.md

* asyncRetry only throws Aggregate errors if there is more than one attempt

* Update packages/server/test/unit/cloud/network/is_retryable_error_spec.ts

Co-authored-by: Matt Schile <mschile@cypress.io>

* Update packages/server/test/unit/cloud/network/is_retryable_error_spec.ts

---------

Co-authored-by: Matt Schile <mschile@cypress.io>
2024-07-08 09:30:05 -04:00
Cacie Prins 79a267c7f8 refactor: extract artifact upload process from lib/modes/record.js (#29240)
* refactor record.js to extract upload logic into ts
- streamlines the main uploadArtifact fn
- extracts artifact specific logic to artifact classes
- fully defines types for upload processing and reporting

* tweak refactors so system tests produce same snapshots

* some todos, fixes exports/imports from api/index.ts

* fix api export so it can be imported by ts files

* cleans up types

* extracting artifact metadata from options logs to debug but does not throw if errors are encountered

* fix type imports in print-run

* fix debug formatting for artifacts

* fix reporting successful protocol uploads

* change inheritence to strategy

* rm empty file

* Update packages/server/lib/cloud/artifacts/upload_artifacts.ts

* makes protocolManager optional to uploadArtifacts, fixes conditional accessor in protocol fatal error report

* missed a potentially undef

* convert to frozen object / keyof instead of string composition for artifact kinds

---------

Co-authored-by: Ryan Manuel <ryanm@cypress.io>
Co-authored-by: Jennifer Shehane <jennifer@cypress.io>
2024-04-12 09:20:54 -04:00
Cacie Prins 3a739f3f4f perf: improve replay upload resiliency (#29174)
* tbd

* workable templated filestream uploader

* clean up async assertions

* upload stream uses activity monitor to detect start timeouts and stalls

* makes uploadStream retryable

* filesize detection, enoent errors, and testable retry delays

* extract fs logic to putProtocolArtifact, impl putProtocolArtifact

* aggregate errors for retryable upload streams

* fixes imports from moving api.ts, uses new upload mechanism in protocol.ts

* use spec_helper in StreamActivityMonitor_spec due to global sinon clock changes

* fix putProtocolArtifact specs when run as a part of the unit test suite

* fix return type of ProtocolManager.uploadCaptureArtifact

* convert from whatwg streams back to node streams

* extract HttpError

* ensure system test snapshots

* changelog

* more changelog

* fix unit tests

* fix api ref in integration test

* fix refs to api in snapshotting and after-pack

* small edits

* Update packages/server/lib/cloud/api/HttpError.ts

Co-authored-by: Bill Glesias <bglesias@gmail.com>

* Update packages/server/lib/cloud/upload/uploadStream.ts

Co-authored-by: Bill Glesias <bglesias@gmail.com>

* camelcase -> snakeCase filenames

* improve docs for StreamActivityMonitor

* added documentation to: upload_stream, put_protocol_artifact_spec

* move stream activity monitor params to consts - no magic numbers. docs.

* Update packages/server/lib/cloud/api/http_error.ts

Co-authored-by: Bill Glesias <bglesias@gmail.com>

* Update packages/server/test/unit/cloud/api/put_protocol_artifact_spec.ts

Co-authored-by: Bill Glesias <bglesias@gmail.com>

* fix check-ts

* fix imports in put_protocol_artifact_spec

* Update packages/server/test/unit/cloud/upload/stream_activity_monitor_spec.ts

Co-authored-by: Ryan Manuel <ryanm@cypress.io>

* api.ts -> index.ts

* fix comment style, remove confusingly inapplicable comment about whatwg streams

---------

Co-authored-by: Bill Glesias <bglesias@gmail.com>
Co-authored-by: Ryan Manuel <ryanm@cypress.io>
2024-03-29 12:22:57 -04:00