node-datachannel 0.11.0 → 0.20.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/.eslintignore +5 -1
  2. package/.eslintrc.json +27 -0
  3. package/.prettierrc +12 -0
  4. package/CMakeLists.txt +13 -13
  5. package/jest.config.ts +14 -0
  6. package/package.json +47 -44
  7. package/rollup.config.mjs +63 -0
  8. package/src/index.ts +10 -0
  9. package/{lib/datachannel-stream.js → src/lib/datachannel-stream.ts} +16 -11
  10. package/src/lib/index.ts +180 -0
  11. package/src/lib/node-datachannel.ts +13 -0
  12. package/src/lib/types.ts +126 -0
  13. package/{lib/websocket-server.js → src/lib/websocket-server.ts} +10 -8
  14. package/src/lib/websocket.ts +26 -0
  15. package/src/polyfill/Events.ts +33 -0
  16. package/src/polyfill/Exception.ts +37 -0
  17. package/src/polyfill/RTCCertificate.ts +17 -0
  18. package/{polyfill/RTCDataChannel.js → src/polyfill/RTCDataChannel.ts} +43 -40
  19. package/src/polyfill/RTCDtlsTransport.ts +47 -0
  20. package/src/polyfill/RTCError.ts +71 -0
  21. package/src/polyfill/RTCIceCandidate.ts +125 -0
  22. package/{polyfill/RTCIceTransport.js → src/polyfill/RTCIceTransport.ts} +22 -20
  23. package/{polyfill/RTCPeerConnection.js → src/polyfill/RTCPeerConnection.ts} +137 -115
  24. package/{polyfill/RTCSctpTransport.js → src/polyfill/RTCSctpTransport.ts} +16 -14
  25. package/{polyfill/RTCSessionDescription.js → src/polyfill/RTCSessionDescription.ts} +7 -12
  26. package/{polyfill/index.js → src/polyfill/index.ts} +12 -9
  27. package/tsconfig.json +20 -13
  28. package/.eslintrc.cjs +0 -8
  29. package/.github/FUNDING.yml +0 -2
  30. package/.github/workflows/build-linux.yml +0 -104
  31. package/.github/workflows/build-mac-m1.yml +0 -38
  32. package/.github/workflows/build-mac-x64.yml +0 -40
  33. package/.github/workflows/build-win.yml +0 -74
  34. package/.github/workflows/lint.yml +0 -20
  35. package/.github/workflows/npm-publish-manual.yml +0 -23
  36. package/.prettierrc.cjs +0 -8
  37. package/build-containers/Dockerfile.alpine +0 -6
  38. package/build-containers/Dockerfile.debian +0 -7
  39. package/cmake/toolchain/ci.cmake +0 -23
  40. package/examples/client-server/README.md +0 -22
  41. package/examples/client-server/client-benchmark.js +0 -230
  42. package/examples/client-server/client-periodic.js +0 -189
  43. package/examples/client-server/client.js +0 -111
  44. package/examples/client-server/package-lock.json +0 -289
  45. package/examples/client-server/package.json +0 -16
  46. package/examples/client-server/signaling-server.js +0 -39
  47. package/examples/electron-demo/README.md +0 -58
  48. package/examples/electron-demo/forge.config.js +0 -49
  49. package/examples/electron-demo/package-lock.json +0 -15933
  50. package/examples/electron-demo/package.json +0 -43
  51. package/examples/electron-demo/src/index.css +0 -7
  52. package/examples/electron-demo/src/index.html +0 -29
  53. package/examples/electron-demo/src/main.js +0 -53
  54. package/examples/electron-demo/src/node-datachannel.js +0 -123
  55. package/examples/electron-demo/src/preload.js +0 -28
  56. package/examples/electron-demo/src/renderer.js +0 -58
  57. package/examples/electron-demo/webpack.main.config.js +0 -11
  58. package/examples/electron-demo/webpack.renderer.config.js +0 -13
  59. package/examples/electron-demo/webpack.rules.js +0 -35
  60. package/examples/media/README.md +0 -34
  61. package/examples/media/main.html +0 -45
  62. package/examples/media/media.js +0 -54
  63. package/examples/simple-peer-usage/main.js +0 -28
  64. package/examples/simple-peer-usage/package-lock.json +0 -317
  65. package/examples/simple-peer-usage/package.json +0 -16
  66. package/examples/websocket/websocket-client.js +0 -20
  67. package/examples/websocket/websocket-server.js +0 -22
  68. package/jest.config.cjs +0 -7
  69. package/lib/index.cjs +0 -194
  70. package/lib/index.d.cts +0 -300
  71. package/lib/index.d.ts +0 -300
  72. package/lib/index.js +0 -58
  73. package/lib/node-datachannel.js +0 -7
  74. package/polyfill/Events.d.ts +0 -9
  75. package/polyfill/Events.js +0 -29
  76. package/polyfill/Exception.js +0 -23
  77. package/polyfill/RTCCertificate.d.ts +0 -7
  78. package/polyfill/RTCCertificate.js +0 -17
  79. package/polyfill/RTCDataChannel.d.ts +0 -35
  80. package/polyfill/RTCDtlsTransport.d.ts +0 -10
  81. package/polyfill/RTCDtlsTransport.js +0 -47
  82. package/polyfill/RTCIceCandidate.d.ts +0 -20
  83. package/polyfill/RTCIceCandidate.js +0 -126
  84. package/polyfill/RTCIceTransport.d.ts +0 -18
  85. package/polyfill/RTCPeerConnection.d.ts +0 -62
  86. package/polyfill/RTCSctpTransport.d.ts +0 -10
  87. package/polyfill/RTCSessionDescription.d.ts +0 -8
  88. package/polyfill/index.cjs +0 -1258
  89. package/polyfill/index.d.cts +0 -37
  90. package/polyfill/index.d.ts +0 -37
  91. package/test/connectivity.js +0 -86
  92. package/test/jest-tests/basic.test.js +0 -37
  93. package/test/jest-tests/multiple-run.test.js +0 -73
  94. package/test/jest-tests/p2p.test.js +0 -99
  95. package/test/jest-tests/polyfill.test.js +0 -10
  96. package/test/jest-tests/streams.test.js +0 -48
  97. package/test/jest-tests/websocket.test.js +0 -69
  98. package/test/polyfill-connectivity.js +0 -89
  99. package/test/websockets.js +0 -50
  100. package/test/wpt-tests/README.md +0 -46
  101. package/test/wpt-tests/chrome-failed-tests.js +0 -42
  102. package/test/wpt-tests/index.js +0 -96
  103. package/test/wpt-tests/last-test-results.md +0 -205
  104. package/test/wpt-tests/package-lock.json +0 -1712
  105. package/test/wpt-tests/package.json +0 -19
  106. package/test/wpt-tests/wpt-test-list.js +0 -137
  107. package/test/wpt-tests/wpt.js +0 -131
  108. /package/src/{data-channel-wrapper.cpp → cpp/data-channel-wrapper.cpp} +0 -0
  109. /package/src/{data-channel-wrapper.h → cpp/data-channel-wrapper.h} +0 -0
  110. /package/src/{main.cpp → cpp/main.cpp} +0 -0
  111. /package/src/{media-audio-wrapper.cpp → cpp/media-audio-wrapper.cpp} +0 -0
  112. /package/src/{media-audio-wrapper.h → cpp/media-audio-wrapper.h} +0 -0
  113. /package/src/{media-direction.cpp → cpp/media-direction.cpp} +0 -0
  114. /package/src/{media-direction.h → cpp/media-direction.h} +0 -0
  115. /package/src/{media-rtcpreceivingsession-wrapper.cpp → cpp/media-rtcpreceivingsession-wrapper.cpp} +0 -0
  116. /package/src/{media-rtcpreceivingsession-wrapper.h → cpp/media-rtcpreceivingsession-wrapper.h} +0 -0
  117. /package/src/{media-track-wrapper.cpp → cpp/media-track-wrapper.cpp} +0 -0
  118. /package/src/{media-track-wrapper.h → cpp/media-track-wrapper.h} +0 -0
  119. /package/src/{media-video-wrapper.cpp → cpp/media-video-wrapper.cpp} +0 -0
  120. /package/src/{media-video-wrapper.h → cpp/media-video-wrapper.h} +0 -0
  121. /package/src/{peer-connection-wrapper.cpp → cpp/peer-connection-wrapper.cpp} +0 -0
  122. /package/src/{peer-connection-wrapper.h → cpp/peer-connection-wrapper.h} +0 -0
  123. /package/src/{rtc-wrapper.cpp → cpp/rtc-wrapper.cpp} +0 -0
  124. /package/src/{rtc-wrapper.h → cpp/rtc-wrapper.h} +0 -0
  125. /package/src/{thread-safe-callback.cpp → cpp/thread-safe-callback.cpp} +0 -0
  126. /package/src/{thread-safe-callback.h → cpp/thread-safe-callback.h} +0 -0
  127. /package/src/{web-socket-server-wrapper.cpp → cpp/web-socket-server-wrapper.cpp} +0 -0
  128. /package/src/{web-socket-server-wrapper.h → cpp/web-socket-server-wrapper.h} +0 -0
  129. /package/src/{web-socket-wrapper.cpp → cpp/web-socket-wrapper.cpp} +0 -0
  130. /package/src/{web-socket-wrapper.h → cpp/web-socket-wrapper.h} +0 -0
  131. /package/{polyfill → src/polyfill}/README.md +0 -0
@@ -1,19 +0,0 @@
1
- {
2
- "name": "wpt-tests",
3
- "version": "1.0.0",
4
- "description": "git clone https://github.com/web-platform-tests/wpt.git cd wpt ./wpt make-hosts-file | sudo tee -a /etc/hosts ./wpt serve",
5
- "type": "module",
6
- "main": "wpt.js",
7
- "scripts": {
8
- "test": "npm run run:wpt & (sleep 8 && (npm run run:test > last-test-results.md) )",
9
- "run:wpt": "cd wpt && ./wpt serve",
10
- "run:test": "node index.js"
11
- },
12
- "keywords": [],
13
- "author": "",
14
- "license": "ISC",
15
- "devDependencies": {
16
- "jsdom": "^24.1.0",
17
- "puppeteer": "^22.12.1"
18
- }
19
- }
@@ -1,137 +0,0 @@
1
- export default [
2
- '/webrtc/getstats.html',
3
- '/webrtc/historical.html',
4
- '/webrtc/no-media-call.html',
5
- '/webrtc/promises-call.html',
6
- '/webrtc/receiver-track-live.https.html',
7
- '/webrtc/recvonly-transceiver-can-become-sendrecv.https.html',
8
- '/webrtc/RollbackEvents.https.html',
9
- '/webrtc/RTCCertificate.html',
10
- // // '/webrtc/RTCCertificate-postMessage.html', // SKIP, iframe
11
- '/webrtc/RTCConfiguration-bundlePolicy.html',
12
- '/webrtc/RTCConfiguration-iceCandidatePoolSize.html',
13
- '/webrtc/RTCConfiguration-iceServers.html',
14
- '/webrtc/RTCConfiguration-iceTransportPolicy.html',
15
- '/webrtc/RTCConfiguration-rtcpMuxPolicy.html',
16
- '/webrtc/RTCConfiguration-validation.html',
17
- '/webrtc/RTCDataChannel-bufferedAmount.html',
18
- // '/webrtc/RTCDataChannel-close.html', // Not ending
19
- '/webrtc/RTCDataChannelEvent-constructor.html',
20
- // '/webrtc/RTCDataChannel-GC.html', // Not ending
21
- '/webrtc/RTCDataChannel-iceRestart.html',
22
- '/webrtc/RTCDataChannel-id.html',
23
- '/webrtc/RTCDataChannel-send-blob-order.html',
24
- // '/webrtc/RTCDataChannel-send-close.html',
25
- // '/webrtc/RTCDataChannel-send.html',
26
- // '/webrtc/RTCDtlsTransport-getRemoteCertificates.html',
27
- // '/webrtc/RTCDtlsTransport-state.html',
28
- // '/webrtc/RTCDTMFSender-insertDTMF.https.html',
29
- // '/webrtc/RTCDTMFSender-ontonechange.https.html',
30
- // '/webrtc/RTCDTMFSender-ontonechange-long.https.html',
31
- // '/webrtc/RTCError.html',
32
- // '/webrtc/RTCIceCandidate-constructor.html',
33
- // '/webrtc/RTCIceConnectionState-candidate-pair.https.html',
34
- // '/webrtc/RTCIceTransport.html',
35
- // '/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html',
36
- '/webrtc/RTCPeerConnection-addIceCandidate.html',
37
- // '/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html',
38
- '/webrtc/RTCPeerConnection-addTcpIceCandidate.html',
39
- // '/webrtc/RTCPeerConnection-addTrack.https.html',
40
- // '/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html',
41
- // '/webrtc/RTCPeerConnection-addTransceiver.https.html',
42
- // '/webrtc/RTCPeerConnection-candidate-in-sdp.https.html',
43
- // '/webrtc/RTCPeerConnection-canTrickleIceCandidates.html',
44
- // '/webrtc/RTCPeerConnection-capture-video.https.html',
45
- // '/webrtc/RTCPeerConnection-connectionState.https.html',
46
- // '/webrtc/RTCPeerConnection-constructor.html',
47
- // '/webrtc/RTCPeerConnection-createAnswer.html',
48
- // '/webrtc/RTCPeerConnection-createDataChannel.html',
49
- // '/webrtc/RTCPeerConnection-createOffer.html',
50
- // '/webrtc/RTCPeerConnection-description-attributes-timing.https.html',
51
- // '/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html',
52
- // '/webrtc/RTCPeerConnection-GC.https.html',
53
- // '/webrtc/RTCPeerConnection-generateCertificate.html',
54
- // '/webrtc/RTCPeerConnection-getStats.https.html',
55
- // '/webrtc/RTCPeerConnection-getTransceivers.html',
56
- // '/webrtc/RTCPeerConnection-helper-test.html',
57
- // '/webrtc/RTCPeerConnection-iceConnectionState-disconnected.https.html',
58
- // '/webrtc/RTCPeerConnection-iceConnectionState.https.html',
59
- // '/webrtc/RTCPeerConnectionIceErrorEvent.html',
60
- // '/webrtc/RTCPeerConnectionIceEvent-constructor.html',
61
- // '/webrtc/RTCPeerConnection-iceGatheringState.html',
62
- // '/webrtc/RTCPeerConnection-mandatory-getStats.https.html',
63
- // '/webrtc/RTCPeerConnection-ondatachannel.html',
64
- // '/webrtc/RTCPeerConnection-onicecandidateerror.https.html',
65
- // '/webrtc/RTCPeerConnection-onnegotiationneeded.html',
66
- // '/webrtc/RTCPeerConnection-onsignalingstatechanged.https.html',
67
- // '/webrtc/RTCPeerConnection-ontrack.https.html',
68
- // '/webrtc/RTCPeerConnection-operations.https.html',
69
- // '/webrtc/RTCPeerConnection-perfect-negotiation.https.html',
70
- // '/webrtc/RTCPeerConnection-perfect-negotiation-stress-glare.https.html',
71
- // '/webrtc/RTCPeerConnection-perfect-negotiation-stress-glare-linear.https.html',
72
- // '/webrtc/RTCPeerConnection-plan-b-is-not-supported.html',
73
- // '/webrtc/RTCPeerConnection-relay-canvas.https.html',
74
- // '/webrtc/RTCPeerConnection-remote-track-mute.https.html',
75
- // '/webrtc/RTCPeerConnection-removeTrack.https.html',
76
- // '/webrtc/RTCPeerConnection-restartIce.https.html',
77
- // '/webrtc/RTCPeerConnection-restartIce-onnegotiationneeded.https.html',
78
- // '/webrtc/RTCPeerConnection-setDescription-transceiver.html',
79
- // '/webrtc/RTCPeerConnection-setLocalDescription-answer.html',
80
- // '/webrtc/RTCPeerConnection-setLocalDescription.html',
81
- // '/webrtc/RTCPeerConnection-setLocalDescription-offer.html',
82
- // '/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html',
83
- // '/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html',
84
- // '/webrtc/RTCPeerConnection-setLocalDescription-rollback.html',
85
- // '/webrtc/RTCPeerConnection-setRemoteDescription-answer.html',
86
- // '/webrtc/RTCPeerConnection-setRemoteDescription.html',
87
- // '/webrtc/RTCPeerConnection-setRemoteDescription-nomsid.html',
88
- // '/webrtc/RTCPeerConnection-setRemoteDescription-offer.html',
89
- // '/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html',
90
- // '/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html',
91
- // '/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html',
92
- // '/webrtc/RTCPeerConnection-setRemoteDescription-simulcast.https.html',
93
- // '/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html',
94
- // '/webrtc/RTCPeerConnection-SLD-SRD-timing.https.html',
95
- // '/webrtc/RTCPeerConnection-transceivers.https.html',
96
- // '/webrtc/RTCPeerConnection-transport-stats.https.html',
97
- // '/webrtc/RTCPeerConnection-videoDetectorTest.html',
98
- // '/webrtc/RTCRtpParameters-codecs.html',
99
- // '/webrtc/RTCRtpParameters-encodings.html',
100
- // '/webrtc/RTCRtpParameters-headerExtensions.html',
101
- // '/webrtc/RTCRtpParameters-maxFramerate.html',
102
- // '/webrtc/RTCRtpParameters-rtcp.html',
103
- // '/webrtc/RTCRtpParameters-transactionId.html',
104
- // '/webrtc/RTCRtpReceiver-audio-jitterBufferTarget-stats.https.html',
105
- // '/webrtc/RTCRtpReceiver-getCapabilities.html',
106
- // '/webrtc/RTCRtpReceiver-getContributingSources.https.html',
107
- // '/webrtc/RTCRtpReceiver-getParameters.html',
108
- // '/webrtc/RTCRtpReceiver-getStats.https.html',
109
- // '/webrtc/RTCRtpReceiver-getSynchronizationSources.https.html',
110
- // '/webrtc/RTCRtpReceiver.https.html',
111
- // '/webrtc/RTCRtpReceiver-jitterBufferTarget.html',
112
- // '/webrtc/RTCRtpReceiver-video-jitterBufferTarget-stats.html',
113
- // '/webrtc/RTCRtpSender-encode-same-track-twice.https.html',
114
- // '/webrtc/RTCRtpSender-getCapabilities.html',
115
- // '/webrtc/RTCRtpSender-getParameters.html',
116
- // '/webrtc/RTCRtpSender-getStats.https.html',
117
- // '/webrtc/RTCRtpSender.https.html',
118
- // '/webrtc/RTCRtpSender-replaceTrack.https.html',
119
- // '/webrtc/RTCRtpSender-setParameters.html',
120
- // '/webrtc/RTCRtpSender-setParameters-keyFrame.html',
121
- // '/webrtc/RTCRtpSender-setStreams.https.html',
122
- // '/webrtc/RTCRtpSender-transport.https.html',
123
- // '/webrtc/RTCRtpTransceiver-direction.html',
124
- // '/webrtc/RTCRtpTransceiver.https.html',
125
- // '/webrtc/RTCRtpTransceiver-setCodecPreferences.html',
126
- // '/webrtc/RTCRtpTransceiver-stop.html',
127
- // '/webrtc/RTCRtpTransceiver-stopping.https.html',
128
- // '/webrtc/RTCSctpTransport-constructor.html',
129
- // '/webrtc/RTCSctpTransport-events.html',
130
- // '/webrtc/RTCSctpTransport-maxChannels.html',
131
- // '/webrtc/RTCSctpTransport-maxMessageSize.html',
132
- // '/webrtc/RTCTrackEvent-constructor.html',
133
- // '/webrtc/RTCTrackEvent-fire.html',
134
- // '/webrtc/simplecall.https.html',
135
- // '/webrtc/simplecall-no-ssrcs.https.html',
136
- // '/webrtc/toJSON.html',
137
- ];
@@ -1,131 +0,0 @@
1
- // Run WPT manually before calling this script
2
-
3
- import { JSDOM, VirtualConsole } from 'jsdom';
4
- import { TextEncoder, TextDecoder } from 'util';
5
- import puppeteer from 'puppeteer';
6
- import ndcPolyfill from '../../polyfill/index.js';
7
-
8
- export async function runWptTests(wptTestList, _forChrome = false, _wptServerUrl = 'http://web-platform.test:8000') {
9
- let browser;
10
- let results = [];
11
-
12
- if (_forChrome)
13
- browser = await puppeteer.launch({
14
- headless: true,
15
- devtools: true,
16
- });
17
-
18
- // call runTest for each test path
19
- for (let i = 0; i < wptTestList.length; i++) {
20
- console.log(`Running test: ${wptTestList[i]} `);
21
- const path = `${_wptServerUrl}${wptTestList[i]}`;
22
- const result = _forChrome ? await runTestForChrome(browser, path) : await runTestForLibrary(path);
23
- results.push({ test: wptTestList[i], result });
24
-
25
- // sleep for 1 second
26
- // await new Promise((resolve) => setTimeout(resolve, 1000));
27
- }
28
-
29
- // close the client
30
- if (_forChrome) await browser.close();
31
-
32
- return results;
33
- }
34
-
35
- function runTestForLibrary(filePath) {
36
- // return new promise
37
- return new Promise((resolve, reject) => {
38
- const virtualConsole = new VirtualConsole();
39
- virtualConsole.sendTo(console);
40
-
41
- JSDOM.fromURL(filePath, {
42
- runScripts: 'dangerously',
43
- resources: 'usable',
44
- pretendToBeVisual: true,
45
- virtualConsole,
46
- beforeParse(window) {
47
- // Assign the polyfill to the window object
48
- Object.assign(window, ndcPolyfill);
49
-
50
- // Overwrite the DOMException object
51
- window.DOMException = DOMException;
52
- window.TypeError = TypeError;
53
- window.TextEncoder = TextEncoder;
54
- window.TextDecoder = TextDecoder;
55
- window.Uint8Array = Uint8Array;
56
- window.ArrayBuffer = ArrayBuffer;
57
- },
58
- }).then((dom) => {
59
- // Get the window object from the DOM
60
- const { window } = dom;
61
- window.addEventListener('load', () => {
62
- window.add_completion_callback((results) => {
63
- window.close();
64
-
65
- // Meaning of status
66
- // 0: PASS (test passed)
67
- // 1: FAIL (test failed)
68
- // 2: TIMEOUT (test timed out)
69
- // 3: PRECONDITION_FAILED (test skipped)
70
- const returnObject = [];
71
- for (let i = 0; i < results.length; i++) {
72
- returnObject.push({
73
- name: results[i].name,
74
- message: results[i].message,
75
- status: results[i].status,
76
- });
77
- }
78
- return resolve(returnObject);
79
- });
80
- });
81
- });
82
- });
83
- }
84
-
85
- async function runTestForChrome(browser, filePath) {
86
- const page = await browser.newPage();
87
- // Evaluate the script in the page context
88
- await page.evaluateOnNewDocument(() => {
89
- function createDeferredPromise() {
90
- let resolve, reject;
91
-
92
- let promise = new Promise(function (_resolve, _reject) {
93
- resolve = _resolve;
94
- reject = _reject;
95
- });
96
-
97
- promise.resolve = resolve;
98
- promise.reject = reject;
99
- return promise;
100
- }
101
-
102
- window.addEventListener('load', () => {
103
- window.resultPromise = createDeferredPromise();
104
- window.add_completion_callback((results) => {
105
- // window.returnTestResults.push({ name: test.name, message: test.message, status: test.status });
106
- let returnTestResults = [];
107
- for (let i = 0; i < results.length; i++) {
108
- returnTestResults.push({
109
- name: results[i].name,
110
- message: results[i].message,
111
- status: results[i].status,
112
- });
113
- }
114
- window.resultPromise.resolve(returnTestResults);
115
- });
116
- });
117
- });
118
-
119
- // Navigate to the specified URL
120
- await page.goto(filePath, { waitUntil: 'load' });
121
-
122
- // get the results
123
- const results = await page.evaluate(() => {
124
- return window.resultPromise;
125
- });
126
-
127
- // close the page
128
- await page.close();
129
-
130
- return results;
131
- }
File without changes
File without changes
File without changes
File without changes