@phpsandbox/sdk 0.0.2

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 (90) hide show
  1. package/README.md +718 -0
  2. package/dist/auth.d.ts +14 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +12 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/beacon/index.d.ts +169 -0
  7. package/dist/beacon/index.d.ts.map +1 -0
  8. package/dist/beacon/index.js +537 -0
  9. package/dist/beacon/index.js.map +1 -0
  10. package/dist/beacon/navigator.d.ts +141 -0
  11. package/dist/beacon/navigator.d.ts.map +1 -0
  12. package/dist/beacon/navigator.js +246 -0
  13. package/dist/beacon/navigator.js.map +1 -0
  14. package/dist/beacon/types.d.ts +230 -0
  15. package/dist/beacon/types.d.ts.map +1 -0
  16. package/dist/beacon/types.js +2 -0
  17. package/dist/beacon/types.js.map +1 -0
  18. package/dist/browser/phpsandbox-sdk.esm.js +4755 -0
  19. package/dist/browser/phpsandbox-sdk.esm.js.map +7 -0
  20. package/dist/browser/phpsandbox-sdk.esm.min.js +27 -0
  21. package/dist/browser/phpsandbox-sdk.esm.min.js.map +7 -0
  22. package/dist/browser/phpsandbox-sdk.iife.js +4766 -0
  23. package/dist/browser/phpsandbox-sdk.iife.js.map +7 -0
  24. package/dist/browser/phpsandbox-sdk.iife.min.js +27 -0
  25. package/dist/browser/phpsandbox-sdk.iife.min.js.map +7 -0
  26. package/dist/composer.d.ts +45 -0
  27. package/dist/composer.d.ts.map +1 -0
  28. package/dist/composer.js +30 -0
  29. package/dist/composer.js.map +1 -0
  30. package/dist/container.d.ts +66 -0
  31. package/dist/container.d.ts.map +1 -0
  32. package/dist/container.js +56 -0
  33. package/dist/container.js.map +1 -0
  34. package/dist/events/index.d.ts +23 -0
  35. package/dist/events/index.d.ts.map +1 -0
  36. package/dist/events/index.js +46 -0
  37. package/dist/events/index.js.map +1 -0
  38. package/dist/filesystem.d.ts +483 -0
  39. package/dist/filesystem.d.ts.map +1 -0
  40. package/dist/filesystem.js +244 -0
  41. package/dist/filesystem.js.map +1 -0
  42. package/dist/git.d.ts +42 -0
  43. package/dist/git.d.ts.map +1 -0
  44. package/dist/git.js +18 -0
  45. package/dist/git.js.map +1 -0
  46. package/dist/index.d.ts +167 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +265 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/laravel.d.ts +23 -0
  51. package/dist/laravel.d.ts.map +1 -0
  52. package/dist/laravel.js +12 -0
  53. package/dist/laravel.js.map +1 -0
  54. package/dist/log.d.ts +13 -0
  55. package/dist/log.d.ts.map +1 -0
  56. package/dist/log.js +12 -0
  57. package/dist/log.js.map +1 -0
  58. package/dist/lsp.d.ts +57 -0
  59. package/dist/lsp.d.ts.map +1 -0
  60. package/dist/lsp.js +69 -0
  61. package/dist/lsp.js.map +1 -0
  62. package/dist/repl.d.ts +41 -0
  63. package/dist/repl.d.ts.map +1 -0
  64. package/dist/repl.js +27 -0
  65. package/dist/repl.js.map +1 -0
  66. package/dist/shell.d.ts +29 -0
  67. package/dist/shell.d.ts.map +1 -0
  68. package/dist/shell.js +29 -0
  69. package/dist/shell.js.map +1 -0
  70. package/dist/socket/index.d.ts +229 -0
  71. package/dist/socket/index.d.ts.map +1 -0
  72. package/dist/socket/index.js +825 -0
  73. package/dist/socket/index.js.map +1 -0
  74. package/dist/terminal.d.ts +97 -0
  75. package/dist/terminal.d.ts.map +1 -0
  76. package/dist/terminal.js +87 -0
  77. package/dist/terminal.js.map +1 -0
  78. package/dist/types.d.ts +16 -0
  79. package/dist/types.d.ts.map +1 -0
  80. package/dist/types.js +16 -0
  81. package/dist/types.js.map +1 -0
  82. package/dist/utils/disposable.d.ts +7 -0
  83. package/dist/utils/disposable.d.ts.map +1 -0
  84. package/dist/utils/disposable.js +20 -0
  85. package/dist/utils/disposable.js.map +1 -0
  86. package/dist/utils/promise.d.ts +13 -0
  87. package/dist/utils/promise.d.ts.map +1 -0
  88. package/dist/utils/promise.js +21 -0
  89. package/dist/utils/promise.js.map +1 -0
  90. package/package.json +67 -0
@@ -0,0 +1,537 @@
1
+ import EventManager from '../events/index.js';
2
+ import { timeout } from '../utils/promise.js';
3
+ import retry from 'async-retry';
4
+ import { Navigator } from './navigator.js';
5
+ export * from './types.js';
6
+ export { Navigator } from './navigator.js';
7
+ /**
8
+ * Browser environment check
9
+ */
10
+ function ensureBrowserEnvironment() {
11
+ if (typeof window === 'undefined') {
12
+ throw new Error('Beacon SDK can only be used in a browser environment');
13
+ }
14
+ }
15
+ /**
16
+ * BeaconError for beacon-specific errors
17
+ */
18
+ export class BeaconError extends Error {
19
+ constructor(message, code) {
20
+ super(message);
21
+ this.code = code;
22
+ this.name = 'BeaconError';
23
+ }
24
+ }
25
+ /**
26
+ * BeaconTimeoutError for timeout-specific errors
27
+ */
28
+ export class BeaconTimeoutError extends BeaconError {
29
+ constructor(operation, timeoutMs) {
30
+ super(`Beacon operation '${operation}' timed out after ${timeoutMs}ms`);
31
+ this.code = 'TIMEOUT';
32
+ }
33
+ }
34
+ /**
35
+ * BeaconConnectionError for connection-specific errors
36
+ */
37
+ export class BeaconConnectionError extends BeaconError {
38
+ constructor(message) {
39
+ super(`Beacon connection error: ${message}`);
40
+ this.code = 'CONNECTION_ERROR';
41
+ }
42
+ }
43
+ /**
44
+ * Beacon SDK for communicating with beacon instances in iframes
45
+ */
46
+ export class Beacon {
47
+ constructor(iframe, options = {}) {
48
+ this.messageHandlers = new Map();
49
+ this.isBeaconReady = false;
50
+ this.readyPromise = null;
51
+ this.isStarted = false;
52
+ this.disposables = [];
53
+ // MessagePort communication
54
+ this.messageChannel = null;
55
+ this.port = null;
56
+ this.channelEstablished = false;
57
+ ensureBrowserEnvironment();
58
+ this.iframe = iframe;
59
+ // Set up default retry options
60
+ const defaultRetryOptions = {
61
+ retries: 3,
62
+ minTimeout: 1000,
63
+ maxTimeout: 5000,
64
+ factor: 2,
65
+ randomize: true,
66
+ };
67
+ this.options = {
68
+ timeout: 10000,
69
+ targetOrigin: '*',
70
+ debug: false,
71
+ retry: {
72
+ ...defaultRetryOptions,
73
+ ...options.retry,
74
+ },
75
+ ...options,
76
+ };
77
+ this.eventEmitter = EventManager.make();
78
+ this.setupMessageChannel();
79
+ this.navigator = new Navigator(this.eventEmitter.listen.bind(this.eventEmitter), this.eventEmitter.once.bind(this.eventEmitter), this);
80
+ }
81
+ /**
82
+ * Setup communication channel using MessagePort
83
+ */
84
+ setupMessageChannel() {
85
+ // Listen for beacon ready message via postMessage
86
+ const readyHandler = (event) => {
87
+ try {
88
+ // Verify message source
89
+ if (event.source !== this.iframe.contentWindow) {
90
+ return;
91
+ }
92
+ const message = event.data;
93
+ if (!message || typeof message !== 'object' || !message.type) {
94
+ return;
95
+ }
96
+ // Handle beacon ready - this means beacon is ready to receive channel establishment
97
+ if (message.type === 'beacon:ready-for-channel') {
98
+ this.establishChannel().catch((error) => {
99
+ if (this.options.debug) {
100
+ console.error('[Beacon SDK] Channel establishment failed:', error);
101
+ }
102
+ });
103
+ }
104
+ // Handle channel confirmation
105
+ if (message.type === 'beacon:channel-established') {
106
+ this.channelEstablished = true;
107
+ this.isBeaconReady = true;
108
+ this.emit('ready', message.payload);
109
+ if (this.options.debug) {
110
+ console.log('[Beacon SDK] Channel established and beacon ready');
111
+ }
112
+ }
113
+ }
114
+ catch (error) {
115
+ if (this.options.debug) {
116
+ console.error('[Beacon SDK] Message parsing error:', error);
117
+ }
118
+ }
119
+ };
120
+ window.addEventListener('message', readyHandler);
121
+ // Add to disposables for cleanup
122
+ this.disposables.push({
123
+ dispose: () => window.removeEventListener('message', readyHandler),
124
+ });
125
+ }
126
+ /**
127
+ * Establish MessagePort communication channel
128
+ */
129
+ async establishChannel() {
130
+ if (!this.iframe.contentWindow) {
131
+ throw new BeaconConnectionError('Iframe contentWindow not available');
132
+ }
133
+ // Create the message channel
134
+ this.messageChannel = new MessageChannel();
135
+ this.port = this.messageChannel.port1;
136
+ // Set up port message listener
137
+ this.port.onmessage = (event) => {
138
+ this.handleBeaconMessage(event.data);
139
+ };
140
+ // Handle port errors
141
+ this.port.onmessageerror = (event) => {
142
+ if (this.options.debug) {
143
+ console.error('[Beacon SDK] Port message error:', event);
144
+ }
145
+ };
146
+ // Start the port
147
+ this.port.start();
148
+ // Transfer port2 to the iframe
149
+ const establishMessage = {
150
+ type: 'beacon:establish-channel',
151
+ timestamp: Date.now(),
152
+ id: this.generateId(),
153
+ };
154
+ this.iframe.contentWindow.postMessage(establishMessage, '*', // Safe for channel establishment
155
+ [this.messageChannel.port2] // Transfer the port
156
+ );
157
+ if (this.options.debug) {
158
+ console.log('[Beacon SDK] Channel establishment message sent');
159
+ }
160
+ // Wait for channel to be established (beacon will send confirmation via postMessage)
161
+ return new Promise((resolve, reject) => {
162
+ const timeoutId = setTimeout(() => {
163
+ reject(new BeaconConnectionError('Channel establishment timeout'));
164
+ }, this.options.timeout);
165
+ const checkReady = () => {
166
+ if (this.channelEstablished && this.isBeaconReady) {
167
+ clearTimeout(timeoutId);
168
+ resolve();
169
+ }
170
+ else {
171
+ setTimeout(checkReady, 100);
172
+ }
173
+ };
174
+ checkReady();
175
+ });
176
+ }
177
+ /**
178
+ * Handle incoming beacon messages
179
+ */
180
+ handleBeaconMessage(message) {
181
+ if (this.options.debug) {
182
+ console.log('[Beacon SDK] Received message:', message.type, message.payload);
183
+ }
184
+ // Emit the event (remove 'beacon:' prefix for cleaner API)
185
+ const eventType = message.type.replace('beacon:', '');
186
+ this.emit(eventType, message.payload);
187
+ // Call registered message handlers
188
+ const handlers = this.messageHandlers.get(message.type);
189
+ if (handlers) {
190
+ handlers.forEach((handler) => {
191
+ try {
192
+ handler(message.payload);
193
+ }
194
+ catch (error) {
195
+ if (this.options.debug) {
196
+ console.error('[Beacon SDK] Message handler error:', error);
197
+ }
198
+ }
199
+ });
200
+ }
201
+ }
202
+ /**
203
+ * Wait for beacon to be ready - simplified approach
204
+ */
205
+ waitForBeaconReady() {
206
+ return retry(async () => {
207
+ return new Promise((resolve, reject) => {
208
+ if (this.isBeaconReady && this.channelEstablished) {
209
+ resolve();
210
+ return;
211
+ }
212
+ const timeoutMs = this.options.timeout;
213
+ const timeoutId = setTimeout(() => {
214
+ reject(new BeaconTimeoutError('beacon ready', timeoutMs));
215
+ }, timeoutMs);
216
+ // Listen for beacon ready signal
217
+ const unsubscribe = this.on('ready', () => {
218
+ clearTimeout(timeoutId);
219
+ unsubscribe.dispose();
220
+ resolve();
221
+ });
222
+ });
223
+ }, {
224
+ retries: this.options.retry?.retries || 3,
225
+ minTimeout: this.options.retry?.minTimeout || 1000,
226
+ maxTimeout: this.options.retry?.maxTimeout || 5000,
227
+ factor: this.options.retry?.factor || 2,
228
+ randomize: this.options.retry?.randomize || true,
229
+ onRetry: (error, attempt) => {
230
+ if (this.options.debug) {
231
+ const errorMessage = error instanceof Error ? error.message : String(error);
232
+ console.warn(`[Beacon SDK] Beacon ready retry attempt ${attempt}:`, errorMessage);
233
+ }
234
+ // Reset ready state for retry
235
+ this.isBeaconReady = false;
236
+ this.channelEstablished = false;
237
+ },
238
+ });
239
+ }
240
+ /**
241
+ * Send a message to the beacon via MessagePort
242
+ */
243
+ sendMessage(type, payload = {}) {
244
+ if (!this.port) {
245
+ throw new BeaconConnectionError('MessagePort not available - channel not established');
246
+ }
247
+ const message = {
248
+ type: `beacon:${type}`,
249
+ payload,
250
+ timestamp: Date.now(),
251
+ source: 'parent',
252
+ id: this.generateId(),
253
+ };
254
+ try {
255
+ // Direct port communication - no need for origin or cloning
256
+ this.port.postMessage(message);
257
+ if (this.options.debug) {
258
+ console.log('[Beacon SDK] Sent message via port:', message.type, message.payload);
259
+ }
260
+ }
261
+ catch (error) {
262
+ throw new BeaconConnectionError(`Failed to send message via port: ${error instanceof Error ? error.message : String(error)}`);
263
+ }
264
+ }
265
+ /**
266
+ * Send a message and wait for a specific response with retry logic
267
+ */
268
+ async sendAndWaitFor(sendType, responseType, payload = {}, timeoutMs) {
269
+ await this.ready();
270
+ return retry(async (bail) => {
271
+ return new Promise((resolve, reject) => {
272
+ const actualTimeout = timeoutMs || this.options.timeout;
273
+ const timeoutId = setTimeout(() => {
274
+ unsubscribe.dispose();
275
+ // Reject timeout to trigger retry (will only bail on final attempt)
276
+ const error = new BeaconTimeoutError(sendType, actualTimeout);
277
+ reject(error);
278
+ }, actualTimeout);
279
+ const unsubscribe = this.eventEmitter.listen(responseType, (data) => {
280
+ clearTimeout(timeoutId);
281
+ unsubscribe.dispose();
282
+ resolve(data);
283
+ });
284
+ try {
285
+ this.sendMessage(sendType, payload);
286
+ }
287
+ catch (error) {
288
+ clearTimeout(timeoutId);
289
+ unsubscribe.dispose();
290
+ // Retry on connection errors, bail on other types of errors
291
+ if (error instanceof BeaconConnectionError) {
292
+ reject(error); // Will trigger retry
293
+ }
294
+ else {
295
+ bail(error); // Don't retry for other types of errors
296
+ }
297
+ }
298
+ });
299
+ }, {
300
+ retries: this.options.retry?.retries || 3,
301
+ minTimeout: this.options.retry?.minTimeout || 1000,
302
+ maxTimeout: this.options.retry?.maxTimeout || 5000,
303
+ factor: this.options.retry?.factor || 2,
304
+ randomize: this.options.retry?.randomize || true,
305
+ onRetry: (error, attempt) => {
306
+ if (this.options.debug) {
307
+ const errorMessage = error instanceof Error ? error.message : String(error);
308
+ console.warn(`[Beacon SDK] Retry attempt ${attempt} for ${sendType}:`, errorMessage);
309
+ }
310
+ },
311
+ });
312
+ }
313
+ /**
314
+ * Generate a unique ID for messages
315
+ */
316
+ generateId() {
317
+ return `sdk_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
318
+ }
319
+ /**
320
+ * Event emitter methods (both private and public for navigator access)
321
+ */
322
+ emit(event, payload) {
323
+ this.eventEmitter.emit(event, payload);
324
+ }
325
+ /**
326
+ * Start the beacon initialization process
327
+ */
328
+ start() {
329
+ if (this.isStarted) {
330
+ return this.readyPromise || Promise.resolve();
331
+ }
332
+ this.isStarted = true;
333
+ this.readyPromise = this.waitForBeaconReady();
334
+ return this.readyPromise;
335
+ }
336
+ /**
337
+ * Wait for the beacon to be ready
338
+ */
339
+ async ready() {
340
+ if (!this.isStarted) {
341
+ throw new BeaconError('Beacon has not been started. Call start() first.');
342
+ }
343
+ if (!this.readyPromise) {
344
+ throw new BeaconError('Beacon ready promise is not available');
345
+ }
346
+ return timeout(this.readyPromise, this.options.timeout);
347
+ }
348
+ /**
349
+ * Check if beacon is ready
350
+ */
351
+ get isReady() {
352
+ return this.isBeaconReady;
353
+ }
354
+ /**
355
+ * Listen for beacon events
356
+ */
357
+ on(event, handler) {
358
+ return this.eventEmitter.listen(event, handler);
359
+ }
360
+ /**
361
+ * Listen for beacon events (one-time)
362
+ */
363
+ once(event, handler) {
364
+ this.eventEmitter.once(event, handler);
365
+ }
366
+ /**
367
+ * Ping the beacon to check if it's responsive
368
+ */
369
+ async ping() {
370
+ try {
371
+ await this.sendAndWaitFor('ping', 'pong', { timestamp: Date.now() });
372
+ return true;
373
+ }
374
+ catch (error) {
375
+ if (this.options.debug) {
376
+ console.warn('[Beacon SDK] Ping failed:', error);
377
+ }
378
+ return false;
379
+ }
380
+ }
381
+ /**
382
+ * Get debug information from the beacon
383
+ */
384
+ async getDebugInfo() {
385
+ return this.sendAndWaitFor('getDebugInfo', 'debugInfo');
386
+ }
387
+ /**
388
+ * Get console events from the beacon
389
+ */
390
+ async getConsoleEvents() {
391
+ return this.sendAndWaitFor('getConsoleEvents', 'consoleEvents');
392
+ }
393
+ /**
394
+ * Get error events from the beacon
395
+ */
396
+ async getErrorEvents() {
397
+ return this.sendAndWaitFor('getErrorEvents', 'errorEvents');
398
+ }
399
+ /**
400
+ * Clear console events in the beacon
401
+ */
402
+ async clearConsole() {
403
+ await this.ready();
404
+ this.sendMessage('clearConsole');
405
+ }
406
+ /**
407
+ * Clear error events in the beacon
408
+ */
409
+ async clearErrors() {
410
+ await this.ready();
411
+ this.sendMessage('clearErrors');
412
+ }
413
+ /**
414
+ * Execute code in the beacon context
415
+ */
416
+ async executeCode(code) {
417
+ return this.sendAndWaitFor('executeCode', 'codeExecutionResult', { code });
418
+ }
419
+ /**
420
+ * Inspect an element in the beacon context
421
+ */
422
+ async inspectElement(selector) {
423
+ return this.sendAndWaitFor('inspectElement', 'elementInspectionResult', { selector });
424
+ }
425
+ /**
426
+ * Fetch a URL in the beacon context
427
+ */
428
+ async fetch(request) {
429
+ return this.sendAndWaitFor('fetch', 'fetchResult', request);
430
+ }
431
+ /**
432
+ * Debug a page (navigate and capture debug information). It loads
433
+ * the page fresh in the IFRAME so that we can capture the latest state.
434
+ */
435
+ async debug(request, waitSeconds) {
436
+ // First, navigate the iframe if the path is different from current URL
437
+ const targetUrl = new URL(request.path, this.iframe.src || window.location.origin).href;
438
+ if (this.iframe.src !== targetUrl) {
439
+ // Navigate the iframe from parent side
440
+ this.navigator.visit(targetUrl);
441
+ // Wait for beacon to be ready after navigation
442
+ await this.ready();
443
+ }
444
+ /**
445
+ * Let's wait for 2 seconds for page to finish rendering.
446
+ * Errors, that might occur during this time will be captured.
447
+ */
448
+ waitSeconds && (await this.wait(waitSeconds));
449
+ // Now request debug capture from the beacon (without navigation)
450
+ const timeoutMs = (request.options?.timeout || 30000) + 5000; // Add 5s buffer
451
+ return this.sendAndWaitFor('debug', 'debugResult', request, timeoutMs);
452
+ }
453
+ async wait(forSeconds) {
454
+ return new Promise((resolve) => setTimeout(resolve, forSeconds * 1000));
455
+ }
456
+ /**
457
+ * Navigate the iframe to a new URL
458
+ */
459
+ navigate(url) {
460
+ if (!this.iframe) {
461
+ throw new BeaconConnectionError('Iframe not available');
462
+ }
463
+ try {
464
+ const targetUrl = new URL(url, this.iframe.src || window.location.origin);
465
+ this.iframe.src = targetUrl.href;
466
+ // Reset state since we're navigating
467
+ this.isBeaconReady = false;
468
+ this.channelEstablished = false;
469
+ // Close existing port if any
470
+ if (this.port) {
471
+ this.port.close();
472
+ this.port = null;
473
+ }
474
+ if (this.messageChannel) {
475
+ this.messageChannel = null;
476
+ }
477
+ // Only create new ready promise if beacon was already started
478
+ if (this.isStarted) {
479
+ this.readyPromise = this.waitForBeaconReady();
480
+ }
481
+ }
482
+ catch (error) {
483
+ throw new BeaconConnectionError(`Invalid URL: ${url}`);
484
+ }
485
+ }
486
+ /**
487
+ * Get current iframe URL
488
+ */
489
+ get url() {
490
+ return this.iframe.src;
491
+ }
492
+ /**
493
+ * Get the iframe element
494
+ */
495
+ get element() {
496
+ return this.iframe;
497
+ }
498
+ /**
499
+ * Dispose of all resources
500
+ */
501
+ dispose() {
502
+ // Clean up MessagePort
503
+ if (this.port) {
504
+ this.port.close();
505
+ this.port = null;
506
+ }
507
+ if (this.messageChannel) {
508
+ this.messageChannel = null;
509
+ }
510
+ this.disposables.forEach((disposable) => disposable.dispose());
511
+ this.disposables = [];
512
+ this.messageHandlers.clear();
513
+ this.isBeaconReady = false;
514
+ this.channelEstablished = false;
515
+ this.isStarted = false;
516
+ this.readyPromise = null;
517
+ }
518
+ }
519
+ /**
520
+ * Factory function to create a beacon instance for an iframe
521
+ */
522
+ export function createBeacon(iframe, options) {
523
+ return new Beacon(iframe, options);
524
+ }
525
+ /**
526
+ * Check if the current environment supports the Beacon SDK
527
+ */
528
+ export function isBeaconSupported() {
529
+ try {
530
+ ensureBrowserEnvironment();
531
+ return true;
532
+ }
533
+ catch {
534
+ return false;
535
+ }
536
+ }
537
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/beacon/index.ts"],"names":[],"mappings":"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"}