easytouch-linux 1.0.7 → 1.0.18
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/LICENSE.txt +201 -0
- package/README.md +33 -314
- package/SKILL.md +366 -0
- package/bin/arm64/et +0 -0
- package/bin/et.js +60 -0
- package/bin/x64/et +0 -0
- package/package.json +19 -37
- package/.playwright/node/LICENSE +0 -2607
- package/.playwright/node/linux-x64/node +0 -0
- package/.playwright/package/README.md +0 -3
- package/.playwright/package/ThirdPartyNotices.txt +0 -1602
- package/.playwright/package/api.json +0 -1
- package/.playwright/package/bin/install_media_pack.ps1 +0 -5
- package/.playwright/package/bin/reinstall_chrome_beta_linux.sh +0 -42
- package/.playwright/package/bin/reinstall_chrome_beta_mac.sh +0 -13
- package/.playwright/package/bin/reinstall_chrome_beta_win.ps1 +0 -24
- package/.playwright/package/bin/reinstall_chrome_stable_linux.sh +0 -42
- package/.playwright/package/bin/reinstall_chrome_stable_mac.sh +0 -12
- package/.playwright/package/bin/reinstall_chrome_stable_win.ps1 +0 -24
- package/.playwright/package/bin/reinstall_msedge_beta_linux.sh +0 -48
- package/.playwright/package/bin/reinstall_msedge_beta_mac.sh +0 -11
- package/.playwright/package/bin/reinstall_msedge_beta_win.ps1 +0 -23
- package/.playwright/package/bin/reinstall_msedge_dev_linux.sh +0 -48
- package/.playwright/package/bin/reinstall_msedge_dev_mac.sh +0 -11
- package/.playwright/package/bin/reinstall_msedge_dev_win.ps1 +0 -23
- package/.playwright/package/bin/reinstall_msedge_stable_linux.sh +0 -48
- package/.playwright/package/bin/reinstall_msedge_stable_mac.sh +0 -11
- package/.playwright/package/bin/reinstall_msedge_stable_win.ps1 +0 -24
- package/.playwright/package/browsers.json +0 -66
- package/.playwright/package/cli.js +0 -18
- package/.playwright/package/index.d.ts +0 -17
- package/.playwright/package/index.js +0 -33
- package/.playwright/package/index.mjs +0 -28
- package/.playwright/package/lib/androidServerImpl.js +0 -69
- package/.playwright/package/lib/browserServerImpl.js +0 -92
- package/.playwright/package/lib/cli/driver.js +0 -95
- package/.playwright/package/lib/cli/program.js +0 -583
- package/.playwright/package/lib/cli/programWithTestStub.js +0 -67
- package/.playwright/package/lib/client/accessibility.js +0 -50
- package/.playwright/package/lib/client/android.js +0 -473
- package/.playwright/package/lib/client/api.js +0 -285
- package/.playwright/package/lib/client/artifact.js +0 -79
- package/.playwright/package/lib/client/browser.js +0 -145
- package/.playwright/package/lib/client/browserContext.js +0 -559
- package/.playwright/package/lib/client/browserType.js +0 -241
- package/.playwright/package/lib/client/cdpSession.js +0 -53
- package/.playwright/package/lib/client/channelOwner.js +0 -215
- package/.playwright/package/lib/client/clientHelper.js +0 -57
- package/.playwright/package/lib/client/clientInstrumentation.js +0 -52
- package/.playwright/package/lib/client/clock.js +0 -68
- package/.playwright/package/lib/client/connection.js +0 -333
- package/.playwright/package/lib/client/consoleMessage.js +0 -55
- package/.playwright/package/lib/client/coverage.js +0 -41
- package/.playwright/package/lib/client/dialog.js +0 -57
- package/.playwright/package/lib/client/download.js +0 -62
- package/.playwright/package/lib/client/electron.js +0 -135
- package/.playwright/package/lib/client/elementHandle.js +0 -321
- package/.playwright/package/lib/client/errors.js +0 -77
- package/.playwright/package/lib/client/eventEmitter.js +0 -314
- package/.playwright/package/lib/client/events.js +0 -94
- package/.playwright/package/lib/client/fetch.js +0 -391
- package/.playwright/package/lib/client/fileChooser.js +0 -45
- package/.playwright/package/lib/client/frame.js +0 -504
- package/.playwright/package/lib/client/harRouter.js +0 -99
- package/.playwright/package/lib/client/input.js +0 -111
- package/.playwright/package/lib/client/jsHandle.js +0 -121
- package/.playwright/package/lib/client/jsonPipe.js +0 -35
- package/.playwright/package/lib/client/localUtils.js +0 -36
- package/.playwright/package/lib/client/locator.js +0 -448
- package/.playwright/package/lib/client/network.js +0 -769
- package/.playwright/package/lib/client/page.js +0 -748
- package/.playwright/package/lib/client/playwright.js +0 -80
- package/.playwright/package/lib/client/selectors.js +0 -67
- package/.playwright/package/lib/client/stream.js +0 -54
- package/.playwright/package/lib/client/tracing.js +0 -147
- package/.playwright/package/lib/client/types.js +0 -24
- package/.playwright/package/lib/client/video.js +0 -51
- package/.playwright/package/lib/client/waiter.js +0 -162
- package/.playwright/package/lib/client/webError.js +0 -37
- package/.playwright/package/lib/client/worker.js +0 -71
- package/.playwright/package/lib/client/writableStream.js +0 -54
- package/.playwright/package/lib/common/socksProxy.js +0 -569
- package/.playwright/package/lib/common/timeoutSettings.js +0 -73
- package/.playwright/package/lib/common/types.js +0 -5
- package/.playwright/package/lib/generated/clockSource.js +0 -7
- package/.playwright/package/lib/generated/consoleApiSource.js +0 -7
- package/.playwright/package/lib/generated/injectedScriptSource.js +0 -7
- package/.playwright/package/lib/generated/pollingRecorderSource.js +0 -7
- package/.playwright/package/lib/generated/utilityScriptSource.js +0 -7
- package/.playwright/package/lib/generated/webSocketMockSource.js +0 -7
- package/.playwright/package/lib/image_tools/colorUtils.js +0 -98
- package/.playwright/package/lib/image_tools/compare.js +0 -108
- package/.playwright/package/lib/image_tools/imageChannel.js +0 -70
- package/.playwright/package/lib/image_tools/stats.js +0 -102
- package/.playwright/package/lib/inProcessFactory.js +0 -56
- package/.playwright/package/lib/inprocess.js +0 -20
- package/.playwright/package/lib/outofprocess.js +0 -67
- package/.playwright/package/lib/protocol/debug.js +0 -27
- package/.playwright/package/lib/protocol/serializers.js +0 -173
- package/.playwright/package/lib/protocol/transport.js +0 -82
- package/.playwright/package/lib/protocol/validator.js +0 -2780
- package/.playwright/package/lib/protocol/validatorPrimitives.js +0 -139
- package/.playwright/package/lib/remote/playwrightConnection.js +0 -275
- package/.playwright/package/lib/remote/playwrightServer.js +0 -111
- package/.playwright/package/lib/server/accessibility.js +0 -62
- package/.playwright/package/lib/server/android/android.js +0 -441
- package/.playwright/package/lib/server/android/backendAdb.js +0 -172
- package/.playwright/package/lib/server/artifact.js +0 -104
- package/.playwright/package/lib/server/bidi/bidiBrowser.js +0 -314
- package/.playwright/package/lib/server/bidi/bidiChromium.js +0 -124
- package/.playwright/package/lib/server/bidi/bidiConnection.js +0 -204
- package/.playwright/package/lib/server/bidi/bidiExecutionContext.js +0 -175
- package/.playwright/package/lib/server/bidi/bidiFirefox.js +0 -104
- package/.playwright/package/lib/server/bidi/bidiInput.js +0 -160
- package/.playwright/package/lib/server/bidi/bidiNetworkManager.js +0 -337
- package/.playwright/package/lib/server/bidi/bidiOverCdp.js +0 -103
- package/.playwright/package/lib/server/bidi/bidiPage.js +0 -518
- package/.playwright/package/lib/server/bidi/bidiPdf.js +0 -140
- package/.playwright/package/lib/server/bidi/third_party/bidiDeserializer.js +0 -93
- package/.playwright/package/lib/server/bidi/third_party/bidiKeyboard.js +0 -240
- package/.playwright/package/lib/server/bidi/third_party/bidiProtocol.js +0 -139
- package/.playwright/package/lib/server/bidi/third_party/bidiSerializer.js +0 -144
- package/.playwright/package/lib/server/bidi/third_party/firefoxPrefs.js +0 -221
- package/.playwright/package/lib/server/browser.js +0 -148
- package/.playwright/package/lib/server/browserContext.js +0 -675
- package/.playwright/package/lib/server/browserType.js +0 -338
- package/.playwright/package/lib/server/chromium/appIcon.png +0 -0
- package/.playwright/package/lib/server/chromium/chromium.js +0 -354
- package/.playwright/package/lib/server/chromium/chromiumSwitches.js +0 -46
- package/.playwright/package/lib/server/chromium/crAccessibility.js +0 -237
- package/.playwright/package/lib/server/chromium/crBrowser.js +0 -516
- package/.playwright/package/lib/server/chromium/crConnection.js +0 -228
- package/.playwright/package/lib/server/chromium/crCoverage.js +0 -246
- package/.playwright/package/lib/server/chromium/crDevTools.js +0 -104
- package/.playwright/package/lib/server/chromium/crDragDrop.js +0 -143
- package/.playwright/package/lib/server/chromium/crExecutionContext.js +0 -132
- package/.playwright/package/lib/server/chromium/crInput.js +0 -182
- package/.playwright/package/lib/server/chromium/crNetworkManager.js +0 -767
- package/.playwright/package/lib/server/chromium/crPage.js +0 -1122
- package/.playwright/package/lib/server/chromium/crPdf.js +0 -153
- package/.playwright/package/lib/server/chromium/crProtocolHelper.js +0 -133
- package/.playwright/package/lib/server/chromium/crServiceWorker.js +0 -112
- package/.playwright/package/lib/server/chromium/defaultFontFamilies.js +0 -145
- package/.playwright/package/lib/server/chromium/videoRecorder.js +0 -155
- package/.playwright/package/lib/server/clock.js +0 -125
- package/.playwright/package/lib/server/codegen/csharp.js +0 -304
- package/.playwright/package/lib/server/codegen/java.js +0 -243
- package/.playwright/package/lib/server/codegen/javascript.js +0 -253
- package/.playwright/package/lib/server/codegen/jsonl.js +0 -47
- package/.playwright/package/lib/server/codegen/language.js +0 -88
- package/.playwright/package/lib/server/codegen/languages.js +0 -30
- package/.playwright/package/lib/server/codegen/python.js +0 -262
- package/.playwright/package/lib/server/codegen/types.js +0 -5
- package/.playwright/package/lib/server/console.js +0 -57
- package/.playwright/package/lib/server/cookieStore.js +0 -185
- package/.playwright/package/lib/server/debugController.js +0 -212
- package/.playwright/package/lib/server/debugger.js +0 -132
- package/.playwright/package/lib/server/deviceDescriptors.js +0 -26
- package/.playwright/package/lib/server/deviceDescriptorsSource.json +0 -1669
- package/.playwright/package/lib/server/dialog.js +0 -71
- package/.playwright/package/lib/server/dispatchers/androidDispatcher.js +0 -204
- package/.playwright/package/lib/server/dispatchers/artifactDispatcher.js +0 -118
- package/.playwright/package/lib/server/dispatchers/browserContextDispatcher.js +0 -357
- package/.playwright/package/lib/server/dispatchers/browserDispatcher.js +0 -170
- package/.playwright/package/lib/server/dispatchers/browserTypeDispatcher.js +0 -55
- package/.playwright/package/lib/server/dispatchers/cdpSessionDispatcher.js +0 -48
- package/.playwright/package/lib/server/dispatchers/debugControllerDispatcher.js +0 -105
- package/.playwright/package/lib/server/dispatchers/dialogDispatcher.js +0 -44
- package/.playwright/package/lib/server/dispatchers/dispatcher.js +0 -395
- package/.playwright/package/lib/server/dispatchers/electronDispatcher.js +0 -93
- package/.playwright/package/lib/server/dispatchers/elementHandlerDispatcher.js +0 -228
- package/.playwright/package/lib/server/dispatchers/frameDispatcher.js +0 -294
- package/.playwright/package/lib/server/dispatchers/jsHandleDispatcher.js +0 -97
- package/.playwright/package/lib/server/dispatchers/jsonPipeDispatcher.js +0 -59
- package/.playwright/package/lib/server/dispatchers/localUtilsDispatcher.js +0 -413
- package/.playwright/package/lib/server/dispatchers/networkDispatchers.js +0 -221
- package/.playwright/package/lib/server/dispatchers/pageDispatcher.js +0 -367
- package/.playwright/package/lib/server/dispatchers/playwrightDispatcher.js +0 -107
- package/.playwright/package/lib/server/dispatchers/selectorsDispatcher.js +0 -36
- package/.playwright/package/lib/server/dispatchers/streamDispatcher.js +0 -62
- package/.playwright/package/lib/server/dispatchers/tracingDispatcher.js +0 -64
- package/.playwright/package/lib/server/dispatchers/webSocketRouteDispatcher.js +0 -188
- package/.playwright/package/lib/server/dispatchers/writableStreamDispatcher.js +0 -58
- package/.playwright/package/lib/server/dom.js +0 -893
- package/.playwright/package/lib/server/download.js +0 -60
- package/.playwright/package/lib/server/electron/electron.js +0 -296
- package/.playwright/package/lib/server/electron/loader.js +0 -57
- package/.playwright/package/lib/server/errors.js +0 -68
- package/.playwright/package/lib/server/fetch.js +0 -663
- package/.playwright/package/lib/server/fileChooser.js +0 -42
- package/.playwright/package/lib/server/fileUploadUtils.js +0 -75
- package/.playwright/package/lib/server/firefox/ffAccessibility.js +0 -216
- package/.playwright/package/lib/server/firefox/ffBrowser.js +0 -462
- package/.playwright/package/lib/server/firefox/ffConnection.js +0 -168
- package/.playwright/package/lib/server/firefox/ffExecutionContext.js +0 -123
- package/.playwright/package/lib/server/firefox/ffInput.js +0 -161
- package/.playwright/package/lib/server/firefox/ffNetworkManager.js +0 -233
- package/.playwright/package/lib/server/firefox/ffPage.js +0 -544
- package/.playwright/package/lib/server/firefox/firefox.js +0 -99
- package/.playwright/package/lib/server/formData.js +0 -75
- package/.playwright/package/lib/server/frameSelectors.js +0 -171
- package/.playwright/package/lib/server/frames.js +0 -1663
- package/.playwright/package/lib/server/har/harRecorder.js +0 -139
- package/.playwright/package/lib/server/har/harTracer.js +0 -542
- package/.playwright/package/lib/server/helper.js +0 -103
- package/.playwright/package/lib/server/index.js +0 -108
- package/.playwright/package/lib/server/input.js +0 -309
- package/.playwright/package/lib/server/instrumentation.js +0 -70
- package/.playwright/package/lib/server/isomorphic/utilityScriptSerializers.js +0 -226
- package/.playwright/package/lib/server/javascript.js +0 -293
- package/.playwright/package/lib/server/launchApp.js +0 -91
- package/.playwright/package/lib/server/macEditingCommands.js +0 -139
- package/.playwright/package/lib/server/network.js +0 -617
- package/.playwright/package/lib/server/page.js +0 -863
- package/.playwright/package/lib/server/pipeTransport.js +0 -85
- package/.playwright/package/lib/server/playwright.js +0 -88
- package/.playwright/package/lib/server/progress.js +0 -99
- package/.playwright/package/lib/server/protocolError.js +0 -49
- package/.playwright/package/lib/server/recorder/chat.js +0 -177
- package/.playwright/package/lib/server/recorder/contextRecorder.js +0 -290
- package/.playwright/package/lib/server/recorder/recorderApp.js +0 -187
- package/.playwright/package/lib/server/recorder/recorderCollection.js +0 -104
- package/.playwright/package/lib/server/recorder/recorderFrontend.js +0 -5
- package/.playwright/package/lib/server/recorder/recorderRunner.js +0 -159
- package/.playwright/package/lib/server/recorder/recorderUtils.js +0 -89
- package/.playwright/package/lib/server/recorder/throttledFile.js +0 -46
- package/.playwright/package/lib/server/recorder.js +0 -367
- package/.playwright/package/lib/server/registry/browserFetcher.js +0 -168
- package/.playwright/package/lib/server/registry/dependencies.js +0 -322
- package/.playwright/package/lib/server/registry/index.js +0 -1165
- package/.playwright/package/lib/server/registry/nativeDeps.js +0 -496
- package/.playwright/package/lib/server/registry/oopDownloadBrowserMain.js +0 -138
- package/.playwright/package/lib/server/screenshotter.js +0 -348
- package/.playwright/package/lib/server/selectors.js +0 -73
- package/.playwright/package/lib/server/socksClientCertificatesInterceptor.js +0 -340
- package/.playwright/package/lib/server/socksInterceptor.js +0 -100
- package/.playwright/package/lib/server/trace/recorder/snapshotter.js +0 -161
- package/.playwright/package/lib/server/trace/recorder/snapshotterInjected.js +0 -518
- package/.playwright/package/lib/server/trace/recorder/tracing.js +0 -596
- package/.playwright/package/lib/server/trace/test/inMemorySnapshotter.js +0 -93
- package/.playwright/package/lib/server/trace/viewer/traceViewer.js +0 -219
- package/.playwright/package/lib/server/transport.js +0 -192
- package/.playwright/package/lib/server/types.js +0 -24
- package/.playwright/package/lib/server/usKeyboardLayout.js +0 -555
- package/.playwright/package/lib/server/webkit/webkit.js +0 -87
- package/.playwright/package/lib/server/webkit/wkAccessibility.js +0 -194
- package/.playwright/package/lib/server/webkit/wkBrowser.js +0 -329
- package/.playwright/package/lib/server/webkit/wkConnection.js +0 -173
- package/.playwright/package/lib/server/webkit/wkExecutionContext.js +0 -131
- package/.playwright/package/lib/server/webkit/wkInput.js +0 -179
- package/.playwright/package/lib/server/webkit/wkInterceptableRequest.js +0 -162
- package/.playwright/package/lib/server/webkit/wkPage.js +0 -1207
- package/.playwright/package/lib/server/webkit/wkProvisionalPage.js +0 -94
- package/.playwright/package/lib/server/webkit/wkWorkers.js +0 -104
- package/.playwright/package/lib/third_party/pixelmatch.js +0 -255
- package/.playwright/package/lib/utils/ascii.js +0 -31
- package/.playwright/package/lib/utils/comparators.js +0 -159
- package/.playwright/package/lib/utils/crypto.js +0 -171
- package/.playwright/package/lib/utils/debug.js +0 -46
- package/.playwright/package/lib/utils/debugLogger.js +0 -93
- package/.playwright/package/lib/utils/env.js +0 -49
- package/.playwright/package/lib/utils/eventsHelper.js +0 -38
- package/.playwright/package/lib/utils/expectUtils.js +0 -33
- package/.playwright/package/lib/utils/fileUtils.js +0 -205
- package/.playwright/package/lib/utils/happy-eyeballs.js +0 -194
- package/.playwright/package/lib/utils/headers.js +0 -52
- package/.playwright/package/lib/utils/hostPlatform.js +0 -145
- package/.playwright/package/lib/utils/httpServer.js +0 -233
- package/.playwright/package/lib/utils/index.js +0 -368
- package/.playwright/package/lib/utils/isomorphic/ariaSnapshot.js +0 -391
- package/.playwright/package/lib/utils/isomorphic/cssParser.js +0 -250
- package/.playwright/package/lib/utils/isomorphic/cssTokenizer.js +0 -979
- package/.playwright/package/lib/utils/isomorphic/locatorGenerators.js +0 -660
- package/.playwright/package/lib/utils/isomorphic/locatorParser.js +0 -185
- package/.playwright/package/lib/utils/isomorphic/locatorUtils.js +0 -62
- package/.playwright/package/lib/utils/isomorphic/mimeType.js +0 -29
- package/.playwright/package/lib/utils/isomorphic/selectorParser.js +0 -397
- package/.playwright/package/lib/utils/isomorphic/stringUtils.js +0 -169
- package/.playwright/package/lib/utils/isomorphic/traceUtils.js +0 -39
- package/.playwright/package/lib/utils/isomorphic/urlMatch.js +0 -122
- package/.playwright/package/lib/utils/linuxUtils.js +0 -78
- package/.playwright/package/lib/utils/manualPromise.js +0 -109
- package/.playwright/package/lib/utils/multimap.js +0 -75
- package/.playwright/package/lib/utils/network.js +0 -160
- package/.playwright/package/lib/utils/processLauncher.js +0 -248
- package/.playwright/package/lib/utils/profiler.js +0 -53
- package/.playwright/package/lib/utils/rtti.js +0 -44
- package/.playwright/package/lib/utils/semaphore.js +0 -51
- package/.playwright/package/lib/utils/sequence.js +0 -64
- package/.playwright/package/lib/utils/spawnAsync.js +0 -45
- package/.playwright/package/lib/utils/stackTrace.js +0 -134
- package/.playwright/package/lib/utils/task.js +0 -58
- package/.playwright/package/lib/utils/time.js +0 -37
- package/.playwright/package/lib/utils/timeoutRunner.js +0 -66
- package/.playwright/package/lib/utils/traceUtils.js +0 -44
- package/.playwright/package/lib/utils/userAgent.js +0 -105
- package/.playwright/package/lib/utils/wsServer.js +0 -128
- package/.playwright/package/lib/utils/zipFile.js +0 -75
- package/.playwright/package/lib/utils/zones.js +0 -69
- package/.playwright/package/lib/utilsBundle.js +0 -81
- package/.playwright/package/lib/utilsBundleImpl/index.js +0 -210
- package/.playwright/package/lib/utilsBundleImpl/xdg-open +0 -1066
- package/.playwright/package/lib/vite/htmlReport/index.html +0 -69
- package/.playwright/package/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +0 -1
- package/.playwright/package/lib/vite/recorder/assets/codeMirrorModule-k-61wZCK.js +0 -24
- package/.playwright/package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/.playwright/package/lib/vite/recorder/assets/index-B70BEW3b.js +0 -184
- package/.playwright/package/lib/vite/recorder/assets/index-eHBmevrY.css +0 -1
- package/.playwright/package/lib/vite/recorder/index.html +0 -29
- package/.playwright/package/lib/vite/recorder/playwright-logo.svg +0 -9
- package/.playwright/package/lib/vite/traceViewer/assets/codeMirrorModule-CyuxU5C-.js +0 -24
- package/.playwright/package/lib/vite/traceViewer/assets/defaultSettingsView-5nVJRt0A.js +0 -243
- package/.playwright/package/lib/vite/traceViewer/assets/xtermModule-c-SNdYZy.js +0 -9
- package/.playwright/package/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +0 -1
- package/.playwright/package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/.playwright/package/lib/vite/traceViewer/defaultSettingsView.2xeEXCXv.css +0 -1
- package/.playwright/package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
- package/.playwright/package/lib/vite/traceViewer/index.html +0 -43
- package/.playwright/package/lib/vite/traceViewer/index.qVn2ZnpC.js +0 -2
- package/.playwright/package/lib/vite/traceViewer/playwright-logo.svg +0 -9
- package/.playwright/package/lib/vite/traceViewer/snapshot.html +0 -21
- package/.playwright/package/lib/vite/traceViewer/sw.bundle.js +0 -3
- package/.playwright/package/lib/vite/traceViewer/uiMode.BatfzHMG.css +0 -1
- package/.playwright/package/lib/vite/traceViewer/uiMode.html +0 -17
- package/.playwright/package/lib/vite/traceViewer/uiMode.m4IPRPOd.js +0 -5
- package/.playwright/package/lib/vite/traceViewer/xtermModule.Beg8tuEN.css +0 -32
- package/.playwright/package/lib/zipBundle.js +0 -25
- package/.playwright/package/lib/zipBundleImpl.js +0 -5
- package/.playwright/package/package.json +0 -44
- package/.playwright/package/protocol.yml +0 -3758
- package/.playwright/package/types/protocol.d.ts +0 -21868
- package/.playwright/package/types/structs.d.ts +0 -45
- package/.playwright/package/types/types.d.ts +0 -22663
- package/et +0 -0
- package/install.js +0 -19
- package/playwright.ps1 +0 -7
- package/scripts/playwright-bridge.js +0 -560
package/et
DELETED
|
Binary file
|
package/install.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
const fs = require('fs');
|
|
4
|
-
const path = require('path');
|
|
5
|
-
|
|
6
|
-
const binaryPath = path.join(__dirname, 'et');
|
|
7
|
-
|
|
8
|
-
try {
|
|
9
|
-
if (!fs.existsSync(binaryPath)) {
|
|
10
|
-
console.error(`❌ EasyTouch binary not found: ${binaryPath}`);
|
|
11
|
-
process.exit(1);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
fs.chmodSync(binaryPath, 0o755);
|
|
15
|
-
console.log(`✓ Set executable permission: ${binaryPath}`);
|
|
16
|
-
} catch (error) {
|
|
17
|
-
console.error(`❌ Failed to set executable permission: ${error.message}`);
|
|
18
|
-
process.exit(1);
|
|
19
|
-
}
|
package/playwright.ps1
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env pwsh
|
|
2
|
-
|
|
3
|
-
$Env:PLAYWRIGHT_DRIVER_SEARCH_PATH = $PSScriptRoot;
|
|
4
|
-
$playwrightLibrary = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, "Microsoft.Playwright.dll"))
|
|
5
|
-
# We load the library via the memory to not keep the .dll file locked/opened.
|
|
6
|
-
[Reflection.Assembly]::Load([System.IO.File]::ReadAllBytes($playwrightLibrary)) | Out-Null
|
|
7
|
-
exit [Microsoft.Playwright.Program]::Main($args)
|
|
@@ -1,560 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
const net = require('net');
|
|
4
|
-
const fs = require('fs');
|
|
5
|
-
const os = require('os');
|
|
6
|
-
const path = require('path');
|
|
7
|
-
const { execSync, spawn } = require('child_process');
|
|
8
|
-
let chromium;
|
|
9
|
-
let firefox;
|
|
10
|
-
let webkit;
|
|
11
|
-
|
|
12
|
-
function loadPlaywright() {
|
|
13
|
-
try {
|
|
14
|
-
return require('playwright');
|
|
15
|
-
} catch {
|
|
16
|
-
try {
|
|
17
|
-
const globalRoot = execSync('npm root -g', {
|
|
18
|
-
encoding: 'utf8',
|
|
19
|
-
windowsHide: true
|
|
20
|
-
}).trim();
|
|
21
|
-
return require(path.join(globalRoot, 'playwright'));
|
|
22
|
-
} catch {
|
|
23
|
-
throw new Error(
|
|
24
|
-
'Playwright package not found. Run: npm install -g playwright && npx playwright install chromium'
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const playwright = loadPlaywright();
|
|
31
|
-
chromium = playwright.chromium;
|
|
32
|
-
firefox = playwright.firefox;
|
|
33
|
-
webkit = playwright.webkit;
|
|
34
|
-
|
|
35
|
-
const DAEMON_FILE = path.join(os.tmpdir(), 'easytouch-playwright-daemon.json');
|
|
36
|
-
const browserTypeMap = {
|
|
37
|
-
chromium,
|
|
38
|
-
chrome: chromium,
|
|
39
|
-
firefox,
|
|
40
|
-
webkit,
|
|
41
|
-
safari: webkit
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
const browsers = new Map();
|
|
45
|
-
|
|
46
|
-
function parseArg(args, key) {
|
|
47
|
-
const idx = args.indexOf(key);
|
|
48
|
-
if (idx >= 0 && idx + 1 < args.length) {
|
|
49
|
-
return args[idx + 1];
|
|
50
|
-
}
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function safeJsonParse(text) {
|
|
55
|
-
try {
|
|
56
|
-
return JSON.parse(text);
|
|
57
|
-
} catch {
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function writeJsonLine(socket, obj) {
|
|
63
|
-
socket.write(JSON.stringify(obj) + '\n');
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
async function ensureDaemon() {
|
|
67
|
-
if (fs.existsSync(DAEMON_FILE)) {
|
|
68
|
-
const existing = safeJsonParse(fs.readFileSync(DAEMON_FILE, 'utf8'));
|
|
69
|
-
if (existing && existing.port) {
|
|
70
|
-
try {
|
|
71
|
-
await sendRequest(existing.port, { command: 'ping', args: [] }, 800);
|
|
72
|
-
return existing;
|
|
73
|
-
} catch {}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const child = spawn(process.execPath, [__filename, 'daemon'], {
|
|
78
|
-
detached: true,
|
|
79
|
-
stdio: 'ignore',
|
|
80
|
-
windowsHide: true
|
|
81
|
-
});
|
|
82
|
-
child.unref();
|
|
83
|
-
|
|
84
|
-
const deadline = Date.now() + 5000;
|
|
85
|
-
while (Date.now() < deadline) {
|
|
86
|
-
if (fs.existsSync(DAEMON_FILE)) {
|
|
87
|
-
const created = safeJsonParse(fs.readFileSync(DAEMON_FILE, 'utf8'));
|
|
88
|
-
if (created && created.port) {
|
|
89
|
-
try {
|
|
90
|
-
await sendRequest(created.port, { command: 'ping', args: [] }, 800);
|
|
91
|
-
return created;
|
|
92
|
-
} catch {}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
await new Promise((r) => setTimeout(r, 100));
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
throw new Error('Failed to start Playwright bridge daemon');
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
function sendRequest(port, payload, timeoutMs = 30000) {
|
|
102
|
-
return new Promise((resolve, reject) => {
|
|
103
|
-
const socket = net.createConnection({ host: '127.0.0.1', port }, () => {
|
|
104
|
-
writeJsonLine(socket, payload);
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
let buffer = '';
|
|
108
|
-
let done = false;
|
|
109
|
-
|
|
110
|
-
const timer = setTimeout(() => {
|
|
111
|
-
if (done) return;
|
|
112
|
-
done = true;
|
|
113
|
-
socket.destroy();
|
|
114
|
-
reject(new Error('Bridge request timeout'));
|
|
115
|
-
}, timeoutMs);
|
|
116
|
-
|
|
117
|
-
socket.on('data', (chunk) => {
|
|
118
|
-
buffer += chunk.toString();
|
|
119
|
-
const lineEnd = buffer.indexOf('\n');
|
|
120
|
-
if (lineEnd === -1) return;
|
|
121
|
-
const line = buffer.slice(0, lineEnd).trim();
|
|
122
|
-
if (!line || done) return;
|
|
123
|
-
done = true;
|
|
124
|
-
clearTimeout(timer);
|
|
125
|
-
socket.end();
|
|
126
|
-
const parsed = safeJsonParse(line);
|
|
127
|
-
if (!parsed) {
|
|
128
|
-
reject(new Error('Invalid bridge response'));
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
resolve(parsed);
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
socket.on('error', (err) => {
|
|
135
|
-
if (done) return;
|
|
136
|
-
done = true;
|
|
137
|
-
clearTimeout(timer);
|
|
138
|
-
reject(err);
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
function getLauncher(type) {
|
|
144
|
-
const launcher = browserTypeMap[(type || 'chromium').toLowerCase()];
|
|
145
|
-
return launcher || chromium;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
async function getPrimaryPage(browser) {
|
|
149
|
-
let context = browser.contexts()[0];
|
|
150
|
-
if (!context) {
|
|
151
|
-
context = await browser.newContext();
|
|
152
|
-
}
|
|
153
|
-
let page = context.pages()[0];
|
|
154
|
-
if (!page) {
|
|
155
|
-
page = await context.newPage();
|
|
156
|
-
}
|
|
157
|
-
return page;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
async function runLaunch(args) {
|
|
161
|
-
const browserId = parseArg(args, '--browser-id');
|
|
162
|
-
if (!browserId) throw new Error('Missing --browser-id');
|
|
163
|
-
|
|
164
|
-
const browserType = (parseArg(args, '--browser') || 'chromium').toLowerCase();
|
|
165
|
-
const headless = args.includes('--headless');
|
|
166
|
-
const executablePath = parseArg(args, '--executable');
|
|
167
|
-
const url = parseArg(args, '--url');
|
|
168
|
-
|
|
169
|
-
const launcher = getLauncher(browserType);
|
|
170
|
-
const browser = await launcher.launch({
|
|
171
|
-
headless,
|
|
172
|
-
...(executablePath ? { executablePath } : {})
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
const page = await getPrimaryPage(browser);
|
|
176
|
-
if (url) {
|
|
177
|
-
await page.goto(url, { waitUntil: 'load', timeout: 30000 });
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
browsers.set(browserId, {
|
|
181
|
-
id: browserId,
|
|
182
|
-
type: browserType,
|
|
183
|
-
browser,
|
|
184
|
-
createdAt: Date.now()
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
return {
|
|
188
|
-
BrowserId: browserId,
|
|
189
|
-
BrowserType: browserType,
|
|
190
|
-
Version: browser.version()
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function getBrowserOrThrow(browserId) {
|
|
195
|
-
const instance = browsers.get(browserId);
|
|
196
|
-
if (!instance) throw new Error(`Browser not found: ${browserId}`);
|
|
197
|
-
return instance;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
async function runNavigate(args) {
|
|
201
|
-
const browserId = parseArg(args, '--browser-id');
|
|
202
|
-
const url = parseArg(args, '--url');
|
|
203
|
-
if (!browserId || !url) throw new Error('Missing --browser-id or --url');
|
|
204
|
-
|
|
205
|
-
const waitUntil = parseArg(args, '--wait-until') || 'load';
|
|
206
|
-
const timeout = Number.parseInt(parseArg(args, '--timeout') || '30000', 10);
|
|
207
|
-
|
|
208
|
-
const instance = getBrowserOrThrow(browserId);
|
|
209
|
-
const page = await getPrimaryPage(instance.browser);
|
|
210
|
-
const response = await page.goto(url, { waitUntil, timeout });
|
|
211
|
-
|
|
212
|
-
return {
|
|
213
|
-
Url: page.url(),
|
|
214
|
-
Title: await page.title(),
|
|
215
|
-
StatusCode: response ? response.status() : 0
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
async function runClick(args) {
|
|
220
|
-
const browserId = parseArg(args, '--browser-id');
|
|
221
|
-
const selector = parseArg(args, '--selector');
|
|
222
|
-
if (!browserId || !selector) throw new Error('Missing --browser-id or --selector');
|
|
223
|
-
|
|
224
|
-
const selectorType = parseArg(args, '--selector-type') || 'css';
|
|
225
|
-
const button = Number.parseInt(parseArg(args, '--button') || '0', 10);
|
|
226
|
-
const clickCount = Number.parseInt(parseArg(args, '--click-count') || '1', 10);
|
|
227
|
-
const timeout = Number.parseInt(parseArg(args, '--timeout') || '30000', 10);
|
|
228
|
-
|
|
229
|
-
const buttonMap = ['left', 'middle', 'right'];
|
|
230
|
-
const instance = getBrowserOrThrow(browserId);
|
|
231
|
-
const page = await getPrimaryPage(instance.browser);
|
|
232
|
-
const locator = getLocator(page, selector, selectorType);
|
|
233
|
-
|
|
234
|
-
await locator.click({
|
|
235
|
-
button: buttonMap[button] || 'left',
|
|
236
|
-
clickCount,
|
|
237
|
-
timeout
|
|
238
|
-
});
|
|
239
|
-
return { Message: 'OK' };
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
async function runFill(args) {
|
|
243
|
-
const browserId = parseArg(args, '--browser-id');
|
|
244
|
-
const selector = parseArg(args, '--selector');
|
|
245
|
-
const value = parseArg(args, '--value') ?? '';
|
|
246
|
-
if (!browserId || !selector) throw new Error('Missing --browser-id or --selector');
|
|
247
|
-
|
|
248
|
-
const selectorType = parseArg(args, '--selector-type') || 'css';
|
|
249
|
-
const timeout = Number.parseInt(parseArg(args, '--timeout') || '30000', 10);
|
|
250
|
-
const noClear = args.includes('--no-clear');
|
|
251
|
-
|
|
252
|
-
const instance = getBrowserOrThrow(browserId);
|
|
253
|
-
const page = await getPrimaryPage(instance.browser);
|
|
254
|
-
const locator = getLocator(page, selector, selectorType);
|
|
255
|
-
|
|
256
|
-
if (!noClear) {
|
|
257
|
-
await locator.clear({ timeout });
|
|
258
|
-
}
|
|
259
|
-
await locator.fill(value, { timeout });
|
|
260
|
-
return { Message: 'OK' };
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
async function runFind(args) {
|
|
264
|
-
const browserId = parseArg(args, '--browser-id');
|
|
265
|
-
const selector = parseArg(args, '--selector');
|
|
266
|
-
if (!browserId || !selector) throw new Error('Missing --browser-id or --selector');
|
|
267
|
-
|
|
268
|
-
const selectorType = parseArg(args, '--selector-type') || 'css';
|
|
269
|
-
const timeout = Number.parseInt(parseArg(args, '--timeout') || '5000', 10);
|
|
270
|
-
|
|
271
|
-
const instance = getBrowserOrThrow(browserId);
|
|
272
|
-
const page = await getPrimaryPage(instance.browser);
|
|
273
|
-
const locator = getLocator(page, selector, selectorType);
|
|
274
|
-
|
|
275
|
-
await locator.first.waitFor({ timeout, state: 'attached' }).catch(() => {});
|
|
276
|
-
const count = await locator.count();
|
|
277
|
-
if (count === 0) return { Found: false };
|
|
278
|
-
|
|
279
|
-
const element = locator.first;
|
|
280
|
-
const tagName = await element.evaluate((el) => el.tagName.toLowerCase());
|
|
281
|
-
const text = await element.textContent();
|
|
282
|
-
const value = await element.inputValue().catch(() => null);
|
|
283
|
-
const bbox = await element.boundingBox();
|
|
284
|
-
|
|
285
|
-
return {
|
|
286
|
-
Found: true,
|
|
287
|
-
TagName: tagName,
|
|
288
|
-
Text: text,
|
|
289
|
-
Value: value,
|
|
290
|
-
BoundingBox: bbox
|
|
291
|
-
? { X: bbox.x, Y: bbox.y, Width: bbox.width, Height: bbox.height }
|
|
292
|
-
: null
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
async function runGetText(args) {
|
|
297
|
-
const browserId = parseArg(args, '--browser-id');
|
|
298
|
-
if (!browserId) throw new Error('Missing --browser-id');
|
|
299
|
-
|
|
300
|
-
const selector = parseArg(args, '--selector');
|
|
301
|
-
const selectorType = parseArg(args, '--selector-type') || 'css';
|
|
302
|
-
|
|
303
|
-
const instance = getBrowserOrThrow(browserId);
|
|
304
|
-
const page = await getPrimaryPage(instance.browser);
|
|
305
|
-
if (!selector) {
|
|
306
|
-
return { Text: await page.content(), Selector: null };
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
const locator = getLocator(page, selector, selectorType);
|
|
310
|
-
return { Text: (await locator.textContent()) || '', Selector: selector };
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
async function runScreenshot(args) {
|
|
314
|
-
const browserId = parseArg(args, '--browser-id');
|
|
315
|
-
if (!browserId) throw new Error('Missing --browser-id');
|
|
316
|
-
|
|
317
|
-
const output = parseArg(args, '--output');
|
|
318
|
-
if (!output) throw new Error('Missing --output');
|
|
319
|
-
|
|
320
|
-
const selector = parseArg(args, '--selector');
|
|
321
|
-
const selectorType = parseArg(args, '--selector-type') || 'css';
|
|
322
|
-
const type = (parseArg(args, '--type') || 'png').toLowerCase();
|
|
323
|
-
const fullPage = args.includes('--full-page');
|
|
324
|
-
const quality = parseArg(args, '--quality');
|
|
325
|
-
|
|
326
|
-
const instance = getBrowserOrThrow(browserId);
|
|
327
|
-
const page = await getPrimaryPage(instance.browser);
|
|
328
|
-
|
|
329
|
-
const options = {
|
|
330
|
-
path: output,
|
|
331
|
-
type: type === 'jpeg' ? 'jpeg' : 'png'
|
|
332
|
-
};
|
|
333
|
-
if (quality && options.type === 'jpeg') {
|
|
334
|
-
options.quality = Number.parseInt(quality, 10);
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
if (selector) {
|
|
338
|
-
const locator = getLocator(page, selector, selectorType);
|
|
339
|
-
await locator.screenshot(options);
|
|
340
|
-
} else {
|
|
341
|
-
await page.screenshot({ ...options, fullPage });
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
return { ImagePath: output, Width: 0, Height: 0 };
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
async function runEvaluate(args) {
|
|
348
|
-
const browserId = parseArg(args, '--browser-id');
|
|
349
|
-
const scriptFile = parseArg(args, '--script-file');
|
|
350
|
-
if (!browserId || !scriptFile) throw new Error('Missing --browser-id or --script-file');
|
|
351
|
-
|
|
352
|
-
const script = fs.readFileSync(scriptFile, 'utf8');
|
|
353
|
-
const instance = getBrowserOrThrow(browserId);
|
|
354
|
-
const page = await getPrimaryPage(instance.browser);
|
|
355
|
-
const result = await page.evaluate(script);
|
|
356
|
-
|
|
357
|
-
return {
|
|
358
|
-
Result: result,
|
|
359
|
-
ResultType: typeof result
|
|
360
|
-
};
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
async function runWaitFor(args) {
|
|
364
|
-
const browserId = parseArg(args, '--browser-id');
|
|
365
|
-
const selector = parseArg(args, '--selector');
|
|
366
|
-
if (!browserId || !selector) throw new Error('Missing --browser-id or --selector');
|
|
367
|
-
|
|
368
|
-
const selectorType = parseArg(args, '--selector-type') || 'css';
|
|
369
|
-
const state = parseArg(args, '--state') || 'visible';
|
|
370
|
-
const timeout = Number.parseInt(parseArg(args, '--timeout') || '30000', 10);
|
|
371
|
-
|
|
372
|
-
const instance = getBrowserOrThrow(browserId);
|
|
373
|
-
const page = await getPrimaryPage(instance.browser);
|
|
374
|
-
const locator = getLocator(page, selector, selectorType);
|
|
375
|
-
await locator.waitFor({ state, timeout });
|
|
376
|
-
|
|
377
|
-
return { Message: 'OK' };
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
async function runList() {
|
|
381
|
-
const list = [];
|
|
382
|
-
for (const [id, instance] of browsers) {
|
|
383
|
-
let currentUrl = '';
|
|
384
|
-
let currentTitle = '';
|
|
385
|
-
let connected = false;
|
|
386
|
-
try {
|
|
387
|
-
connected = instance.browser.isConnected();
|
|
388
|
-
if (connected) {
|
|
389
|
-
const page = await getPrimaryPage(instance.browser);
|
|
390
|
-
currentUrl = page.url();
|
|
391
|
-
currentTitle = await page.title();
|
|
392
|
-
}
|
|
393
|
-
} catch {
|
|
394
|
-
connected = false;
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
list.push({
|
|
398
|
-
Id: id,
|
|
399
|
-
Type: instance.type,
|
|
400
|
-
Version: instance.browser.version(),
|
|
401
|
-
CurrentUrl: currentUrl,
|
|
402
|
-
CurrentTitle: currentTitle,
|
|
403
|
-
IsConnected: connected
|
|
404
|
-
});
|
|
405
|
-
}
|
|
406
|
-
return { Browsers: list };
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
async function runClose(args) {
|
|
410
|
-
const browserId = parseArg(args, '--browser-id');
|
|
411
|
-
if (!browserId) throw new Error('Missing --browser-id');
|
|
412
|
-
|
|
413
|
-
const instance = browsers.get(browserId);
|
|
414
|
-
if (!instance) {
|
|
415
|
-
return { Message: 'OK' };
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
try {
|
|
419
|
-
await instance.browser.close();
|
|
420
|
-
} catch {}
|
|
421
|
-
browsers.delete(browserId);
|
|
422
|
-
return { Message: 'OK' };
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
function getLocator(page, selector, selectorType) {
|
|
426
|
-
switch ((selectorType || 'css').toLowerCase()) {
|
|
427
|
-
case 'xpath':
|
|
428
|
-
return page.locator(`xpath=${selector}`);
|
|
429
|
-
case 'text':
|
|
430
|
-
return page.getByText(selector);
|
|
431
|
-
case 'id':
|
|
432
|
-
return page.locator(`#${selector}`);
|
|
433
|
-
default:
|
|
434
|
-
return page.locator(selector);
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
async function executeCommand(command, args) {
|
|
439
|
-
switch (command) {
|
|
440
|
-
case 'ping':
|
|
441
|
-
return { Message: 'pong' };
|
|
442
|
-
case 'launch':
|
|
443
|
-
return runLaunch(args);
|
|
444
|
-
case 'list':
|
|
445
|
-
return runList();
|
|
446
|
-
case 'navigate':
|
|
447
|
-
return runNavigate(args);
|
|
448
|
-
case 'click':
|
|
449
|
-
return runClick(args);
|
|
450
|
-
case 'fill':
|
|
451
|
-
return runFill(args);
|
|
452
|
-
case 'find':
|
|
453
|
-
return runFind(args);
|
|
454
|
-
case 'get-text':
|
|
455
|
-
return runGetText(args);
|
|
456
|
-
case 'screenshot':
|
|
457
|
-
return runScreenshot(args);
|
|
458
|
-
case 'evaluate':
|
|
459
|
-
return runEvaluate(args);
|
|
460
|
-
case 'wait-for':
|
|
461
|
-
return runWaitFor(args);
|
|
462
|
-
case 'close':
|
|
463
|
-
return runClose(args);
|
|
464
|
-
default:
|
|
465
|
-
throw new Error(`Unknown command: ${command}`);
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
async function runDaemon() {
|
|
470
|
-
const server = net.createServer((socket) => {
|
|
471
|
-
let buffer = '';
|
|
472
|
-
socket.on('data', async (chunk) => {
|
|
473
|
-
buffer += chunk.toString();
|
|
474
|
-
const lineEnd = buffer.indexOf('\n');
|
|
475
|
-
if (lineEnd === -1) return;
|
|
476
|
-
|
|
477
|
-
const line = buffer.slice(0, lineEnd).trim();
|
|
478
|
-
buffer = '';
|
|
479
|
-
const req = safeJsonParse(line);
|
|
480
|
-
if (!req || !req.command) {
|
|
481
|
-
writeJsonLine(socket, { ok: false, error: 'Invalid request' });
|
|
482
|
-
return;
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
try {
|
|
486
|
-
const data = await executeCommand(req.command, req.args || []);
|
|
487
|
-
writeJsonLine(socket, { ok: true, data });
|
|
488
|
-
} catch (err) {
|
|
489
|
-
writeJsonLine(socket, { ok: false, error: err.message || String(err) });
|
|
490
|
-
}
|
|
491
|
-
});
|
|
492
|
-
});
|
|
493
|
-
|
|
494
|
-
server.listen(0, '127.0.0.1', () => {
|
|
495
|
-
const port = server.address().port;
|
|
496
|
-
fs.writeFileSync(DAEMON_FILE, JSON.stringify({ pid: process.pid, port }));
|
|
497
|
-
});
|
|
498
|
-
|
|
499
|
-
const shutdown = async () => {
|
|
500
|
-
for (const instance of browsers.values()) {
|
|
501
|
-
try {
|
|
502
|
-
await instance.browser.close();
|
|
503
|
-
} catch {}
|
|
504
|
-
}
|
|
505
|
-
try {
|
|
506
|
-
fs.unlinkSync(DAEMON_FILE);
|
|
507
|
-
} catch {}
|
|
508
|
-
process.exit(0);
|
|
509
|
-
};
|
|
510
|
-
|
|
511
|
-
process.on('SIGINT', shutdown);
|
|
512
|
-
process.on('SIGTERM', shutdown);
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
async function runClient(command, args) {
|
|
516
|
-
const daemon = await ensureDaemon();
|
|
517
|
-
const result = await sendRequest(daemon.port, { command, args });
|
|
518
|
-
if (!result.ok) {
|
|
519
|
-
throw new Error(result.error || 'Bridge command failed');
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
const data = result.data;
|
|
523
|
-
if (data === undefined || data === null) {
|
|
524
|
-
return;
|
|
525
|
-
}
|
|
526
|
-
if (typeof data === 'string') {
|
|
527
|
-
console.log(data);
|
|
528
|
-
return;
|
|
529
|
-
}
|
|
530
|
-
console.log(JSON.stringify(data));
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
async function main() {
|
|
534
|
-
const args = process.argv.slice(2);
|
|
535
|
-
const command = args[0];
|
|
536
|
-
|
|
537
|
-
if (!command) {
|
|
538
|
-
console.error('ERROR: Missing command');
|
|
539
|
-
process.exit(1);
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
if (command === 'daemon') {
|
|
543
|
-
await runDaemon();
|
|
544
|
-
return;
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
if (command === '--version' || command === '-v') {
|
|
548
|
-
console.log('EasyTouch Playwright Bridge v2.0.0');
|
|
549
|
-
return;
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
try {
|
|
553
|
-
await runClient(command, args.slice(1));
|
|
554
|
-
} catch (err) {
|
|
555
|
-
console.error(`ERROR: ${err.message || String(err)}`);
|
|
556
|
-
process.exit(1);
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
main();
|