@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.
- package/README.md +718 -0
- package/dist/auth.d.ts +14 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +12 -0
- package/dist/auth.js.map +1 -0
- package/dist/beacon/index.d.ts +169 -0
- package/dist/beacon/index.d.ts.map +1 -0
- package/dist/beacon/index.js +537 -0
- package/dist/beacon/index.js.map +1 -0
- package/dist/beacon/navigator.d.ts +141 -0
- package/dist/beacon/navigator.d.ts.map +1 -0
- package/dist/beacon/navigator.js +246 -0
- package/dist/beacon/navigator.js.map +1 -0
- package/dist/beacon/types.d.ts +230 -0
- package/dist/beacon/types.d.ts.map +1 -0
- package/dist/beacon/types.js +2 -0
- package/dist/beacon/types.js.map +1 -0
- package/dist/browser/phpsandbox-sdk.esm.js +4755 -0
- package/dist/browser/phpsandbox-sdk.esm.js.map +7 -0
- package/dist/browser/phpsandbox-sdk.esm.min.js +27 -0
- package/dist/browser/phpsandbox-sdk.esm.min.js.map +7 -0
- package/dist/browser/phpsandbox-sdk.iife.js +4766 -0
- package/dist/browser/phpsandbox-sdk.iife.js.map +7 -0
- package/dist/browser/phpsandbox-sdk.iife.min.js +27 -0
- package/dist/browser/phpsandbox-sdk.iife.min.js.map +7 -0
- package/dist/composer.d.ts +45 -0
- package/dist/composer.d.ts.map +1 -0
- package/dist/composer.js +30 -0
- package/dist/composer.js.map +1 -0
- package/dist/container.d.ts +66 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +56 -0
- package/dist/container.js.map +1 -0
- package/dist/events/index.d.ts +23 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +46 -0
- package/dist/events/index.js.map +1 -0
- package/dist/filesystem.d.ts +483 -0
- package/dist/filesystem.d.ts.map +1 -0
- package/dist/filesystem.js +244 -0
- package/dist/filesystem.js.map +1 -0
- package/dist/git.d.ts +42 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +18 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +167 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +265 -0
- package/dist/index.js.map +1 -0
- package/dist/laravel.d.ts +23 -0
- package/dist/laravel.d.ts.map +1 -0
- package/dist/laravel.js +12 -0
- package/dist/laravel.js.map +1 -0
- package/dist/log.d.ts +13 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +12 -0
- package/dist/log.js.map +1 -0
- package/dist/lsp.d.ts +57 -0
- package/dist/lsp.d.ts.map +1 -0
- package/dist/lsp.js +69 -0
- package/dist/lsp.js.map +1 -0
- package/dist/repl.d.ts +41 -0
- package/dist/repl.d.ts.map +1 -0
- package/dist/repl.js +27 -0
- package/dist/repl.js.map +1 -0
- package/dist/shell.d.ts +29 -0
- package/dist/shell.d.ts.map +1 -0
- package/dist/shell.js +29 -0
- package/dist/shell.js.map +1 -0
- package/dist/socket/index.d.ts +229 -0
- package/dist/socket/index.d.ts.map +1 -0
- package/dist/socket/index.js +825 -0
- package/dist/socket/index.js.map +1 -0
- package/dist/terminal.d.ts +97 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +87 -0
- package/dist/terminal.js.map +1 -0
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/disposable.d.ts +7 -0
- package/dist/utils/disposable.d.ts.map +1 -0
- package/dist/utils/disposable.js +20 -0
- package/dist/utils/disposable.js.map +1 -0
- package/dist/utils/promise.d.ts +13 -0
- package/dist/utils/promise.d.ts.map +1 -0
- package/dist/utils/promise.js +21 -0
- package/dist/utils/promise.js.map +1 -0
- 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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"}
|