@phystack/hub-client 4.5.19-dev → 4.5.21-dev

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 (119) hide show
  1. package/dist/index.d.ts +22 -28
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +252 -378
  4. package/dist/index.js.map +1 -1
  5. package/dist/peripheral-twin.d.ts +34 -0
  6. package/dist/peripheral-twin.d.ts.map +1 -0
  7. package/dist/peripheral-twin.js +234 -0
  8. package/dist/peripheral-twin.js.map +1 -0
  9. package/dist/services/phyhub-connection.service.d.ts +1 -0
  10. package/dist/services/phyhub-connection.service.d.ts.map +1 -1
  11. package/dist/services/phyhub-connection.service.js +17 -0
  12. package/dist/services/phyhub-connection.service.js.map +1 -1
  13. package/dist/services/phyhub-direct-connection.service.d.ts +21 -0
  14. package/dist/services/phyhub-direct-connection.service.d.ts.map +1 -0
  15. package/dist/services/phyhub-direct-connection.service.js +101 -0
  16. package/dist/services/phyhub-direct-connection.service.js.map +1 -0
  17. package/dist/services/webrtc/data-channel-handler.d.ts +45 -0
  18. package/dist/services/webrtc/data-channel-handler.d.ts.map +1 -0
  19. package/dist/services/webrtc/data-channel-handler.js +260 -0
  20. package/dist/services/webrtc/data-channel-handler.js.map +1 -0
  21. package/dist/services/webrtc/index.d.ts +8 -0
  22. package/dist/services/webrtc/index.d.ts.map +1 -0
  23. package/dist/services/webrtc/index.js +18 -0
  24. package/dist/services/webrtc/index.js.map +1 -0
  25. package/dist/services/webrtc/media-stream-handler.d.ts +57 -0
  26. package/dist/services/webrtc/media-stream-handler.d.ts.map +1 -0
  27. package/dist/services/webrtc/media-stream-handler.js +383 -0
  28. package/dist/services/webrtc/media-stream-handler.js.map +1 -0
  29. package/dist/services/webrtc/peer-connection-manager.d.ts +40 -0
  30. package/dist/services/webrtc/peer-connection-manager.d.ts.map +1 -0
  31. package/dist/services/webrtc/peer-connection-manager.js +336 -0
  32. package/dist/services/webrtc/peer-connection-manager.js.map +1 -0
  33. package/dist/services/webrtc/types.d.ts +134 -0
  34. package/dist/services/webrtc/types.d.ts.map +1 -0
  35. package/dist/services/webrtc/types.js +12 -0
  36. package/dist/services/webrtc/types.js.map +1 -0
  37. package/dist/services/webrtc/webrtc-globals.d.ts +4 -0
  38. package/dist/services/webrtc/webrtc-globals.d.ts.map +1 -0
  39. package/dist/services/webrtc/webrtc-globals.js +72 -0
  40. package/dist/services/webrtc/webrtc-globals.js.map +1 -0
  41. package/dist/services/webrtc/webrtc-manager.d.ts +35 -0
  42. package/dist/services/webrtc/webrtc-manager.d.ts.map +1 -0
  43. package/dist/services/webrtc/webrtc-manager.js +274 -0
  44. package/dist/services/webrtc/webrtc-manager.js.map +1 -0
  45. package/dist/test/communication-comprehensive-test.d.ts +8 -0
  46. package/dist/test/communication-comprehensive-test.d.ts.map +1 -0
  47. package/dist/test/communication-comprehensive-test.js +356 -0
  48. package/dist/test/communication-comprehensive-test.js.map +1 -0
  49. package/dist/test/webrtc-channel-names-test.d.ts +2 -0
  50. package/dist/test/webrtc-channel-names-test.d.ts.map +1 -0
  51. package/dist/test/webrtc-channel-names-test.js +177 -0
  52. package/dist/test/webrtc-channel-names-test.js.map +1 -0
  53. package/dist/test/webrtc-comprehensive-test.d.ts +2 -0
  54. package/dist/test/webrtc-comprehensive-test.d.ts.map +1 -0
  55. package/dist/test/webrtc-comprehensive-test.js +328 -0
  56. package/dist/test/webrtc-comprehensive-test.js.map +1 -0
  57. package/dist/test/webrtc-reconnect-test.d.ts +4 -0
  58. package/dist/test/webrtc-reconnect-test.d.ts.map +1 -0
  59. package/dist/test/webrtc-reconnect-test.js +244 -0
  60. package/dist/test/webrtc-reconnect-test.js.map +1 -0
  61. package/dist/test/webrtc-test-harness.d.ts +4 -0
  62. package/dist/test/webrtc-test-harness.d.ts.map +1 -0
  63. package/dist/test/webrtc-test-harness.js +169 -0
  64. package/dist/test/webrtc-test-harness.js.map +1 -0
  65. package/dist/twin-messaging.d.ts +20 -0
  66. package/dist/twin-messaging.d.ts.map +1 -0
  67. package/dist/twin-messaging.js +94 -0
  68. package/dist/twin-messaging.js.map +1 -0
  69. package/dist/twin-registry.d.ts +9 -0
  70. package/dist/twin-registry.d.ts.map +1 -0
  71. package/dist/twin-registry.js +26 -0
  72. package/dist/twin-registry.js.map +1 -0
  73. package/dist/types/index.d.ts +4 -0
  74. package/dist/types/index.d.ts.map +1 -0
  75. package/dist/types/index.js +20 -0
  76. package/dist/types/index.js.map +1 -0
  77. package/dist/types/twin.types.d.ts +62 -14
  78. package/dist/types/twin.types.d.ts.map +1 -1
  79. package/dist/types/twin.types.js +8 -1
  80. package/dist/types/twin.types.js.map +1 -1
  81. package/docs/webrtc-howto.md +398 -0
  82. package/docs/webrtc-test.md +330 -0
  83. package/package.json +3 -3
  84. package/scripts/webrtc-test.sh +401 -0
  85. package/src/index.ts +378 -568
  86. package/src/peripheral-twin.ts +337 -0
  87. package/src/services/phyhub-connection.service.ts +24 -0
  88. package/src/services/phyhub-direct-connection.service.ts +159 -0
  89. package/src/services/webrtc/data-channel-handler.ts +362 -0
  90. package/src/services/webrtc/index.ts +36 -0
  91. package/src/services/webrtc/media-stream-handler.ts +536 -0
  92. package/src/services/webrtc/peer-connection-manager.ts +467 -0
  93. package/src/services/webrtc/types.ts +273 -0
  94. package/src/services/webrtc/webrtc-globals.ts +108 -0
  95. package/src/services/webrtc/webrtc-manager.ts +490 -0
  96. package/src/test/communication-comprehensive-test.ts +533 -0
  97. package/src/test/webrtc-channel-names-test.ts +266 -0
  98. package/src/test/webrtc-comprehensive-test.ts +494 -0
  99. package/src/test/webrtc-reconnect-test.ts +345 -0
  100. package/src/test/webrtc-test-harness.ts +254 -0
  101. package/src/twin-messaging.ts +184 -0
  102. package/src/twin-registry.ts +39 -0
  103. package/src/types/index.ts +3 -0
  104. package/src/types/twin.types.ts +80 -14
  105. package/dist/services/webrtc/datachannel.d.ts +0 -10
  106. package/dist/services/webrtc/datachannel.d.ts.map +0 -1
  107. package/dist/services/webrtc/datachannel.js +0 -290
  108. package/dist/services/webrtc/datachannel.js.map +0 -1
  109. package/dist/services/webrtc/mediastream.d.ts +0 -10
  110. package/dist/services/webrtc/mediastream.d.ts.map +0 -1
  111. package/dist/services/webrtc/mediastream.js +0 -396
  112. package/dist/services/webrtc/mediastream.js.map +0 -1
  113. package/dist/services/webrtc/peer-connection-ice.d.ts +0 -32
  114. package/dist/services/webrtc/peer-connection-ice.d.ts.map +0 -1
  115. package/dist/services/webrtc/peer-connection-ice.js +0 -483
  116. package/dist/services/webrtc/peer-connection-ice.js.map +0 -1
  117. package/src/services/webrtc/datachannel.ts +0 -421
  118. package/src/services/webrtc/mediastream.ts +0 -602
  119. package/src/services/webrtc/peer-connection-ice.ts +0 -689
@@ -0,0 +1,401 @@
1
+ #!/bin/bash
2
+ #
3
+ # WebRTC Two-Host Test Runner
4
+ #
5
+ # This script automates testing WebRTC connections between two hosts:
6
+ # - Local machine runs as initiator
7
+ # - Remote Linux host runs as responder
8
+ #
9
+ # Usage:
10
+ # ./scripts/webrtc-test.sh setup # Configure credentials
11
+ # ./scripts/webrtc-test.sh run # Run the test
12
+ # ./scripts/webrtc-test.sh clean # Clean up remote host
13
+ #
14
+
15
+ set -e
16
+
17
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
18
+ PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
19
+ ENV_FILE="$PROJECT_DIR/.env.webrtc-test"
20
+ REMOTE_LOG="/tmp/webrtc-responder.log"
21
+ LOCAL_LOG="/tmp/webrtc-initiator.log"
22
+
23
+ # Colors for output
24
+ RED='\033[0;31m'
25
+ GREEN='\033[0;32m'
26
+ YELLOW='\033[1;33m'
27
+ BLUE='\033[0;34m'
28
+ NC='\033[0m' # No Color
29
+
30
+ log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
31
+ log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
32
+ log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
33
+ log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
34
+
35
+ # Load environment file
36
+ load_env() {
37
+ if [[ ! -f "$ENV_FILE" ]]; then
38
+ log_error "Environment file not found: $ENV_FILE"
39
+ log_info "Run './scripts/webrtc-test.sh setup' to create it"
40
+ exit 1
41
+ fi
42
+ source "$ENV_FILE"
43
+
44
+ # Validate required variables
45
+ local missing=()
46
+ [[ -z "$DEVICE_A_ID" ]] && missing+=("DEVICE_A_ID")
47
+ [[ -z "$DEVICE_A_KEY" ]] && missing+=("DEVICE_A_KEY")
48
+ [[ -z "$DEVICE_A_TWIN_ID" ]] && missing+=("DEVICE_A_TWIN_ID")
49
+ [[ -z "$DEVICE_B_ID" ]] && missing+=("DEVICE_B_ID")
50
+ [[ -z "$DEVICE_B_KEY" ]] && missing+=("DEVICE_B_KEY")
51
+ [[ -z "$DEVICE_B_TWIN_ID" ]] && missing+=("DEVICE_B_TWIN_ID")
52
+ [[ -z "$REMOTE_HOST" ]] && missing+=("REMOTE_HOST")
53
+
54
+ if [[ ${#missing[@]} -gt 0 ]]; then
55
+ log_error "Missing required variables: ${missing[*]}"
56
+ exit 1
57
+ fi
58
+
59
+ # Set defaults
60
+ REMOTE_PATH="${REMOTE_PATH:-/tmp/hub-client-test}"
61
+ PHYHUB_REGION="${PHYHUB_REGION:-eu}"
62
+ }
63
+
64
+ # Setup wizard
65
+ cmd_setup() {
66
+ log_info "WebRTC Test Setup Wizard"
67
+ echo ""
68
+
69
+ # Load existing values if file exists
70
+ if [[ -f "$ENV_FILE" ]]; then
71
+ source "$ENV_FILE"
72
+ log_info "Loading existing configuration from $ENV_FILE"
73
+ fi
74
+
75
+ echo "Enter credentials for Device A (local initiator):"
76
+ read -p " Device A ID [${DEVICE_A_ID:-}]: " input
77
+ DEVICE_A_ID="${input:-$DEVICE_A_ID}"
78
+
79
+ read -p " Device A Access Key [${DEVICE_A_KEY:+****}]: " input
80
+ DEVICE_A_KEY="${input:-$DEVICE_A_KEY}"
81
+
82
+ read -p " Device A Twin ID [${DEVICE_A_TWIN_ID:-}]: " input
83
+ DEVICE_A_TWIN_ID="${input:-$DEVICE_A_TWIN_ID}"
84
+
85
+ echo ""
86
+ echo "Enter credentials for Device B (remote responder):"
87
+ read -p " Device B ID [${DEVICE_B_ID:-}]: " input
88
+ DEVICE_B_ID="${input:-$DEVICE_B_ID}"
89
+
90
+ read -p " Device B Access Key [${DEVICE_B_KEY:+****}]: " input
91
+ DEVICE_B_KEY="${input:-$DEVICE_B_KEY}"
92
+
93
+ read -p " Device B Twin ID [${DEVICE_B_TWIN_ID:-}]: " input
94
+ DEVICE_B_TWIN_ID="${input:-$DEVICE_B_TWIN_ID}"
95
+
96
+ echo ""
97
+ echo "Enter remote host configuration:"
98
+ read -p " Remote Host (user@host) [${REMOTE_HOST:-}]: " input
99
+ REMOTE_HOST="${input:-$REMOTE_HOST}"
100
+
101
+ read -p " Remote Path [${REMOTE_PATH:-/tmp/hub-client-test}]: " input
102
+ REMOTE_PATH="${input:-${REMOTE_PATH:-/tmp/hub-client-test}}"
103
+
104
+ read -p " PhyHub Region (eu/us) [${PHYHUB_REGION:-eu}]: " input
105
+ PHYHUB_REGION="${input:-${PHYHUB_REGION:-eu}}"
106
+
107
+ # Write environment file
108
+ cat > "$ENV_FILE" << EOF
109
+ # WebRTC Test Configuration
110
+ # Generated by webrtc-test.sh setup
111
+
112
+ # Device A (local initiator)
113
+ DEVICE_A_ID=$DEVICE_A_ID
114
+ DEVICE_A_KEY=$DEVICE_A_KEY
115
+ DEVICE_A_TWIN_ID=$DEVICE_A_TWIN_ID
116
+
117
+ # Device B (remote responder)
118
+ DEVICE_B_ID=$DEVICE_B_ID
119
+ DEVICE_B_KEY=$DEVICE_B_KEY
120
+ DEVICE_B_TWIN_ID=$DEVICE_B_TWIN_ID
121
+
122
+ # Remote host configuration
123
+ REMOTE_HOST=$REMOTE_HOST
124
+ REMOTE_PATH=$REMOTE_PATH
125
+
126
+ # PhyHub configuration
127
+ PHYHUB_REGION=$PHYHUB_REGION
128
+ EOF
129
+
130
+ chmod 600 "$ENV_FILE"
131
+ log_success "Configuration saved to $ENV_FILE"
132
+
133
+ # Add to gitignore if not already there
134
+ GITIGNORE="$PROJECT_DIR/.gitignore"
135
+ if ! grep -q ".env.webrtc-test" "$GITIGNORE" 2>/dev/null; then
136
+ echo ".env.webrtc-test" >> "$GITIGNORE"
137
+ log_info "Added .env.webrtc-test to .gitignore"
138
+ fi
139
+ }
140
+
141
+ # Build locally
142
+ build_local() {
143
+ log_info "Building project locally..."
144
+ cd "$PROJECT_DIR"
145
+ yarn build
146
+ log_success "Build complete"
147
+ }
148
+
149
+ # Sync code to remote host
150
+ sync_to_remote() {
151
+ log_info "Syncing code to $REMOTE_HOST:$REMOTE_PATH..."
152
+
153
+ # Create remote directory
154
+ ssh "$REMOTE_HOST" "mkdir -p $REMOTE_PATH"
155
+
156
+ # Sync project files (including dist, excluding node_modules)
157
+ rsync -avz --delete \
158
+ --exclude 'node_modules' \
159
+ --exclude '.git' \
160
+ --exclude '*.log' \
161
+ --exclude '.env.webrtc-test' \
162
+ "$PROJECT_DIR/" "$REMOTE_HOST:$REMOTE_PATH/"
163
+
164
+ log_success "Code synced to remote host"
165
+ }
166
+
167
+ # Remote shell prefix to ensure proper PATH
168
+ REMOTE_SHELL_PREFIX="source ~/.nvm/nvm.sh 2>/dev/null; source ~/.bashrc 2>/dev/null || source ~/.zshrc 2>/dev/null || source ~/.profile 2>/dev/null;"
169
+
170
+ # Install dependencies on remote
171
+ install_remote_deps() {
172
+ log_info "Installing dependencies on remote host..."
173
+
174
+ ssh "$REMOTE_HOST" "$REMOTE_SHELL_PREFIX cd $REMOTE_PATH && yarn install 2>&1" || {
175
+ log_warn "yarn install had warnings, continuing..."
176
+ }
177
+
178
+ log_success "Dependencies installed on remote"
179
+ }
180
+
181
+ # Start responder on remote host
182
+ # Usage: start_remote_responder [test-script]
183
+ # test-script: optional, defaults to webrtc-test-harness.js
184
+ start_remote_responder() {
185
+ local test_script="${1:-webrtc-test-harness.js}"
186
+ log_info "Starting responder on remote host (test: $test_script)..."
187
+
188
+ # Kill any existing responder process (disable errexit for this)
189
+ set +e
190
+ ssh "$REMOTE_HOST" "pkill -f 'webrtc-test-harness\|webrtc-channel-names-test\|communication-comprehensive-test' 2>/dev/null" || true
191
+ set -e
192
+ sleep 1
193
+
194
+ # Create a wrapper script locally and copy to remote
195
+ local tmp_script="/tmp/run-responder-$$.sh"
196
+ cat > "$tmp_script" << EOF
197
+ #!/bin/bash
198
+ source ~/.nvm/nvm.sh 2>/dev/null
199
+ source ~/.bashrc 2>/dev/null || source ~/.zshrc 2>/dev/null || source ~/.profile 2>/dev/null
200
+ cd $REMOTE_PATH
201
+ export PHYHUB_DIRECT=true
202
+ export DEVICE_ID='$DEVICE_B_ID'
203
+ export ACCESS_KEY='$DEVICE_B_KEY'
204
+ export PEER_TWIN_ID='$DEVICE_A_TWIN_ID'
205
+ export PHYHUB_REGION='$PHYHUB_REGION'
206
+ export ROLE=responder
207
+ node dist/test/$test_script
208
+ EOF
209
+ scp -q "$tmp_script" "$REMOTE_HOST:$REMOTE_PATH/run-responder.sh"
210
+ rm -f "$tmp_script"
211
+
212
+ ssh "$REMOTE_HOST" "chmod +x $REMOTE_PATH/run-responder.sh"
213
+
214
+ # Start responder in background using nohup with proper detachment
215
+ ssh -f "$REMOTE_HOST" "nohup bash $REMOTE_PATH/run-responder.sh > $REMOTE_LOG 2>&1 &"
216
+
217
+ # Wait for responder to be ready
218
+ log_info "Waiting for responder to be ready..."
219
+ sleep 8
220
+
221
+ # Check remote log for connection
222
+ if ssh "$REMOTE_HOST" "grep -q 'Connected' $REMOTE_LOG 2>/dev/null"; then
223
+ log_success "Responder connected and ready"
224
+ elif ssh "$REMOTE_HOST" "grep -q 'Connecting to PhyHub' $REMOTE_LOG 2>/dev/null"; then
225
+ log_info "Responder is connecting..."
226
+ sleep 5
227
+ else
228
+ log_warn "Responder may not be ready yet, continuing anyway..."
229
+ log_info "Current remote log:"
230
+ ssh "$REMOTE_HOST" "tail -20 $REMOTE_LOG 2>/dev/null || echo 'No log yet'"
231
+ fi
232
+ }
233
+
234
+ # Run initiator locally
235
+ # Usage: run_local_initiator [test-script]
236
+ # test-script: optional, defaults to webrtc-test-harness.js
237
+ run_local_initiator() {
238
+ local test_script="${1:-webrtc-test-harness.js}"
239
+ log_info "Running initiator locally (test: $test_script)..."
240
+
241
+ cd "$PROJECT_DIR"
242
+
243
+ PHYHUB_DIRECT=true \
244
+ DEVICE_ID="$DEVICE_A_ID" \
245
+ ACCESS_KEY="$DEVICE_A_KEY" \
246
+ PEER_TWIN_ID="$DEVICE_B_TWIN_ID" \
247
+ PHYHUB_REGION="$PHYHUB_REGION" \
248
+ ROLE=initiator \
249
+ node "dist/test/$test_script" 2>&1 | tee "$LOCAL_LOG"
250
+ }
251
+
252
+ # Collect and display results
253
+ collect_results() {
254
+ echo ""
255
+ log_info "Test completed. Collecting results..."
256
+ echo ""
257
+
258
+ echo "=== Remote Responder Log ==="
259
+ ssh "$REMOTE_HOST" "cat $REMOTE_LOG 2>/dev/null || echo 'No log available'"
260
+ echo ""
261
+
262
+ echo "=== Local Initiator Log ==="
263
+ cat "$LOCAL_LOG" 2>/dev/null || echo "No log available"
264
+ echo ""
265
+ }
266
+
267
+ # Clean up
268
+ cleanup() {
269
+ log_info "Cleaning up..."
270
+
271
+ # Kill remote responder
272
+ ssh "$REMOTE_HOST" "pkill -f 'webrtc-test-harness\|communication-comprehensive-test' 2>/dev/null || true"
273
+
274
+ # Clean remote logs
275
+ ssh "$REMOTE_HOST" "rm -f $REMOTE_LOG 2>/dev/null || true"
276
+
277
+ # Clean local logs
278
+ rm -f "$LOCAL_LOG" 2>/dev/null || true
279
+
280
+ log_success "Cleanup complete"
281
+ }
282
+
283
+ # Clean remote installation
284
+ cmd_clean() {
285
+ load_env
286
+
287
+ log_info "Cleaning up remote host..."
288
+
289
+ ssh "$REMOTE_HOST" "pkill -f 'webrtc-test-harness\|communication-comprehensive-test' 2>/dev/null || true"
290
+ ssh "$REMOTE_HOST" "rm -rf $REMOTE_PATH 2>/dev/null || true"
291
+ ssh "$REMOTE_HOST" "rm -f $REMOTE_LOG 2>/dev/null || true"
292
+
293
+ log_success "Remote host cleaned"
294
+ }
295
+
296
+ # Run the test
297
+ # Usage: cmd_run [test-type]
298
+ # test-type: basic (default) or channels
299
+ cmd_run() {
300
+ local test_type="${1:-basic}"
301
+ local test_script
302
+
303
+ case "$test_type" in
304
+ basic)
305
+ test_script="webrtc-test-harness.js"
306
+ ;;
307
+ channels)
308
+ test_script="webrtc-channel-names-test.js"
309
+ ;;
310
+ comprehensive|all)
311
+ test_script="webrtc-comprehensive-test.js"
312
+ ;;
313
+ reconnect)
314
+ test_script="webrtc-reconnect-test.js"
315
+ ;;
316
+ communication|comm)
317
+ test_script="communication-comprehensive-test.js"
318
+ ;;
319
+ *)
320
+ log_error "Unknown test type: $test_type"
321
+ log_info "Available: basic, channels, comprehensive, reconnect, communication"
322
+ exit 1
323
+ ;;
324
+ esac
325
+
326
+ load_env
327
+
328
+ echo ""
329
+ log_info "WebRTC Two-Host Test ($test_type)"
330
+ echo "=============================================="
331
+ echo " Test: $test_script"
332
+ echo " Local (Initiator): Device A - Twin $DEVICE_A_TWIN_ID"
333
+ echo " Remote (Responder): Device B - Twin $DEVICE_B_TWIN_ID @ $REMOTE_HOST"
334
+ echo " PhyHub Region: $PHYHUB_REGION"
335
+ echo "=============================================="
336
+ echo ""
337
+
338
+ # Set up trap for cleanup
339
+ trap cleanup EXIT
340
+
341
+ # Build and sync
342
+ build_local
343
+ sync_to_remote
344
+ install_remote_deps
345
+
346
+ # Start responder on remote
347
+ start_remote_responder "$test_script"
348
+
349
+ # Run initiator locally
350
+ run_local_initiator "$test_script"
351
+
352
+ # Collect results
353
+ collect_results
354
+ }
355
+
356
+ # Show usage
357
+ cmd_help() {
358
+ echo "Communication Two-Host Test Runner"
359
+ echo ""
360
+ echo "Usage: $0 <command> [options]"
361
+ echo ""
362
+ echo "Commands:"
363
+ echo " setup Configure test credentials and remote host"
364
+ echo " run [type] Run a communication test"
365
+ echo " types: basic, channels, all, reconnect, communication"
366
+ echo " clean Clean up remote host installation"
367
+ echo " help Show this help message"
368
+ echo ""
369
+ echo "Test Types:"
370
+ echo " basic Basic WebRTC DataChannel test (default)"
371
+ echo " channels Named DataChannel test"
372
+ echo " all WebRTC comprehensive test (DataChannels + MediaStreams)"
373
+ echo " reconnect WebRTC reconnection test"
374
+ echo " communication Full test: Events + Actions + DataChannels + MediaStreams"
375
+ echo ""
376
+ echo "Examples:"
377
+ echo " $0 setup # First time setup"
378
+ echo " $0 run # Run basic test (default channel)"
379
+ echo " $0 run communication # Run full communication test suite"
380
+ echo " $0 run all # Run WebRTC comprehensive test"
381
+ }
382
+
383
+ # Main
384
+ case "${1:-}" in
385
+ setup)
386
+ cmd_setup
387
+ ;;
388
+ run)
389
+ cmd_run "${2:-basic}"
390
+ ;;
391
+ clean)
392
+ cmd_clean
393
+ ;;
394
+ help|--help|-h)
395
+ cmd_help
396
+ ;;
397
+ *)
398
+ cmd_help
399
+ exit 1
400
+ ;;
401
+ esac