@xeonr/renderer-sdk 1.0.5 → 1.3.0

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 (44) hide show
  1. package/dist/client.d.ts +62 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +150 -2
  4. package/dist/client.js.map +1 -1
  5. package/dist/index.d.ts +2 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/protocol.d.ts +65 -1
  10. package/dist/protocol.d.ts.map +1 -1
  11. package/dist/protocol.js +91 -0
  12. package/dist/protocol.js.map +1 -1
  13. package/dist/react/RendererErrorBoundary.d.ts +60 -0
  14. package/dist/react/RendererErrorBoundary.d.ts.map +1 -0
  15. package/dist/react/RendererErrorBoundary.js +37 -0
  16. package/dist/react/RendererErrorBoundary.js.map +1 -0
  17. package/dist/react/dom.d.ts +23 -0
  18. package/dist/react/dom.d.ts.map +1 -0
  19. package/dist/react/dom.js +36 -0
  20. package/dist/react/dom.js.map +1 -0
  21. package/dist/react/index.d.ts +3 -0
  22. package/dist/react/index.d.ts.map +1 -1
  23. package/dist/react/index.js +2 -0
  24. package/dist/react/index.js.map +1 -1
  25. package/dist/react/useRendererClient.d.ts +9 -0
  26. package/dist/react/useRendererClient.d.ts.map +1 -1
  27. package/dist/react/useRendererClient.js +80 -18
  28. package/dist/react/useRendererClient.js.map +1 -1
  29. package/dist/react/useReportFatalError.d.ts +37 -0
  30. package/dist/react/useReportFatalError.d.ts.map +1 -0
  31. package/dist/react/useReportFatalError.js +71 -0
  32. package/dist/react/useReportFatalError.js.map +1 -0
  33. package/dist/types.d.ts +40 -0
  34. package/dist/types.d.ts.map +1 -1
  35. package/package.json +12 -2
  36. package/src/client.ts +166 -2
  37. package/src/index.ts +4 -0
  38. package/src/protocol.ts +143 -1
  39. package/src/react/RendererErrorBoundary.tsx +95 -0
  40. package/src/react/dom.ts +53 -0
  41. package/src/react/index.ts +3 -0
  42. package/src/react/useRendererClient.ts +95 -21
  43. package/src/react/useReportFatalError.tsx +71 -0
  44. package/src/types.ts +40 -0
package/dist/client.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { RendererCrashKind } from './protocol.js';
1
2
  import type { InitPayload, RendererApiAdapter, RendererConfig, RendererScope, RenderingType } from './types.js';
2
3
  export interface RendererClientOptions {
3
4
  /**
@@ -6,6 +7,15 @@ export interface RendererClientOptions {
6
7
  * If omitted, all origins are accepted (suitable for local dev).
7
8
  */
8
9
  targetOrigin?: string;
10
+ /**
11
+ * How long after init to wait for `signalReady()` before auto-acking
12
+ * anyway, in milliseconds. Only honored when the renderer's
13
+ * `config.json` has `deferReady: true`. Default 30000 (30s).
14
+ * Matches the host bridge's 10s init-timeout × ~3 — enough headroom
15
+ * for slow data fetches without leaving the user staring at a
16
+ * loading overlay indefinitely.
17
+ */
18
+ readyTimeoutMs?: number;
9
19
  }
10
20
  type InitCallback = (payload: InitPayload) => void;
11
21
  type ThemeCallback = (theme: 'light' | 'dark') => void;
@@ -44,9 +54,17 @@ export declare class RendererClient {
44
54
  private currentConfig;
45
55
  private currentTheme;
46
56
  private currentApiBaseUrl;
57
+ private currentEntrypoint;
47
58
  private currentPath;
59
+ private currentConnected;
48
60
  private listener;
61
+ private errorListener;
62
+ private rejectionListener;
49
63
  private hashChangeListener;
64
+ private ackDeferred;
65
+ private ackSent;
66
+ private readyTimeoutMs;
67
+ private readyTimeoutHandle;
50
68
  private readyRetryInterval;
51
69
  private readyRetryTimeout;
52
70
  private historyPatched;
@@ -104,6 +122,14 @@ export declare class RendererClient {
104
122
  getTheme(): 'light' | 'dark';
105
123
  /** Get the current hash path (e.g. '/settings/advanced'). */
106
124
  getPath(): string;
125
+ /** Has the init message been processed? Late subscribers (e.g. a
126
+ * second `useRendererClient` mount after init landed) read this to
127
+ * seed their initial state without waiting for the next onInit. */
128
+ isConnected(): boolean;
129
+ /** Which HTML entrypoint was loaded (dashboard or portal). */
130
+ getEntrypoint(): 'dashboard' | 'portal' | null;
131
+ /** Base URL for upl.im API calls, as supplied by the host. */
132
+ getApiBaseUrl(): string | null;
107
133
  /**
108
134
  * Returns an API adapter compatible with `getUploadClientWithEnv()` from `@xeonr/uploads-sdk`.
109
135
  * Handles authentication and automatic token refresh via the host bridge.
@@ -123,6 +149,15 @@ export declare class RendererClient {
123
149
  private stopReadyRetry;
124
150
  private handleMessage;
125
151
  private handleInit;
152
+ /**
153
+ * Post the deferred ack so the host overlay dismisses. No-op once
154
+ * the ack has been sent (the host-side bridge tolerates duplicates
155
+ * but we suppress them here for cleanliness). When `deferReady` was
156
+ * not set on construction this is also a no-op — the SDK already
157
+ * acked synchronously on init.
158
+ */
159
+ signalReady(): void;
160
+ private sendAck;
126
161
  private handleThemeUpdate;
127
162
  private handleTokenRefresh;
128
163
  private handleGenerateTokenResult;
@@ -130,6 +165,33 @@ export declare class RendererClient {
130
165
  private onHashChanged;
131
166
  private setupHashTracking;
132
167
  private postToHost;
168
+ /**
169
+ * Install window-level crash hooks the moment the client is constructed
170
+ * (i.e. as soon as a renderer touches the SDK). We deliberately do this
171
+ * here — not in a React-only entry point — so that even renderers that
172
+ * forget to wrap their root in `<RendererErrorBoundary>` still report
173
+ * async / global failures to the host.
174
+ *
175
+ * The two hooks cover the failure modes a React boundary can't see:
176
+ * - `window.error` — synchronous throws outside React's tree (raw
177
+ * <script> bugs, event-handler exceptions, image onerror handlers).
178
+ * - `unhandledrejection` — Promise chains with no `.catch()`, which
179
+ * are surprisingly common in fetch-heavy renderers.
180
+ *
181
+ * Both fire-and-forget via `postCrashToHost`; the host decides whether
182
+ * to render the overlay (a single render-time crash usually warrants
183
+ * it, a stray unhandled rejection may not).
184
+ */
185
+ private installCrashHooks;
186
+ /**
187
+ * Forward a crash to the host. Called by the global hooks and by
188
+ * `<RendererErrorBoundary>`; renderers may also call it explicitly if
189
+ * they catch something themselves and want it surfaced (e.g. data-load
190
+ * failure that wipes the UI even though no exception escaped).
191
+ *
192
+ * No-throw: telemetry must never make the underlying crash worse.
193
+ */
194
+ reportCrash(kind: RendererCrashKind, thrown: unknown): void;
133
195
  }
134
196
  export {};
135
197
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -1,4 +1,4 @@
1
- import { isHostMessage } from './protocol.js';
1
+ import { buildCrashMessage, isHostMessage, postCrashToHost } from './protocol.js';
2
2
  /**
3
3
  * Client SDK for custom renderers running inside a sandboxed iframe.
4
4
  *
@@ -32,9 +32,20 @@ export class RendererClient {
32
32
  currentConfig = null;
33
33
  currentTheme = 'light';
34
34
  currentApiBaseUrl = null;
35
+ currentEntrypoint = null;
35
36
  currentPath = '/';
37
+ currentConnected = false;
36
38
  listener = null;
39
+ errorListener = null;
40
+ rejectionListener = null;
37
41
  hashChangeListener = null;
42
+ // `signalReady` machinery — see `deferReady` in RendererClientOptions.
43
+ // `ackDeferred` is set at construction; `ackSent` flips when we
44
+ // actually post the ack so signalReady stays idempotent.
45
+ ackDeferred = false;
46
+ ackSent = false;
47
+ readyTimeoutMs = 30_000;
48
+ readyTimeoutHandle = null;
38
49
  readyRetryInterval = null;
39
50
  readyRetryTimeout = null;
40
51
  historyPatched = false;
@@ -47,6 +58,13 @@ export class RendererClient {
47
58
  apiAdapter = null;
48
59
  constructor(options) {
49
60
  this.targetOrigin = options?.targetOrigin ?? '*';
61
+ // `ackDeferred` is decided by config.json (read in handleInit)
62
+ // rather than the constructor — the SDK can't know which mode
63
+ // the renderer wants until init lands, but that's fine because
64
+ // the ack itself only fires after init anyway.
65
+ if (typeof options?.readyTimeoutMs === 'number' && options.readyTimeoutMs > 0) {
66
+ this.readyTimeoutMs = options.readyTimeoutMs;
67
+ }
50
68
  this.setup();
51
69
  }
52
70
  // ---------------------------------------------------------------------------
@@ -159,6 +177,20 @@ export class RendererClient {
159
177
  getPath() {
160
178
  return this.currentPath;
161
179
  }
180
+ /** Has the init message been processed? Late subscribers (e.g. a
181
+ * second `useRendererClient` mount after init landed) read this to
182
+ * seed their initial state without waiting for the next onInit. */
183
+ isConnected() {
184
+ return this.currentConnected;
185
+ }
186
+ /** Which HTML entrypoint was loaded (dashboard or portal). */
187
+ getEntrypoint() {
188
+ return this.currentEntrypoint;
189
+ }
190
+ /** Base URL for upl.im API calls, as supplied by the host. */
191
+ getApiBaseUrl() {
192
+ return this.currentApiBaseUrl;
193
+ }
162
194
  /**
163
195
  * Returns an API adapter compatible with `getUploadClientWithEnv()` from `@xeonr/uploads-sdk`.
164
196
  * Handles authentication and automatic token refresh via the host bridge.
@@ -195,10 +227,22 @@ export class RendererClient {
195
227
  destroy() {
196
228
  this.destroyed = true;
197
229
  this.stopReadyRetry();
230
+ if (this.readyTimeoutHandle) {
231
+ clearTimeout(this.readyTimeoutHandle);
232
+ this.readyTimeoutHandle = null;
233
+ }
198
234
  if (this.listener) {
199
235
  window.removeEventListener('message', this.listener);
200
236
  this.listener = null;
201
237
  }
238
+ if (this.errorListener) {
239
+ window.removeEventListener('error', this.errorListener);
240
+ this.errorListener = null;
241
+ }
242
+ if (this.rejectionListener) {
243
+ window.removeEventListener('unhandledrejection', this.rejectionListener);
244
+ this.rejectionListener = null;
245
+ }
202
246
  if (this.hashChangeListener) {
203
247
  window.removeEventListener('hashchange', this.hashChangeListener);
204
248
  this.hashChangeListener = null;
@@ -236,6 +280,7 @@ export class RendererClient {
236
280
  this.handleMessage(event.data);
237
281
  };
238
282
  window.addEventListener('message', this.listener);
283
+ this.installCrashHooks();
239
284
  // Tell the host we're ready. We retry on an interval because a fast iframe can
240
285
  // post 'ready' before the host has attached its message listener — the first
241
286
  // ping is lost, the host times out, and the user has to click retry. Pinging
@@ -293,6 +338,8 @@ export class RendererClient {
293
338
  this.currentConfig = payload.config;
294
339
  this.currentTheme = payload.theme;
295
340
  this.currentApiBaseUrl = payload.apiBaseUrl;
341
+ this.currentEntrypoint = payload.entrypoint;
342
+ this.currentConnected = true;
296
343
  // Apply initial path from host URL fragment
297
344
  if (payload.initialPath) {
298
345
  this.suppressHashChange = true;
@@ -308,7 +355,48 @@ export class RendererClient {
308
355
  for (const cb of this.initCallbacks) {
309
356
  cb(payload);
310
357
  }
311
- // Tell the host we've processed init and are ready to be displayed
358
+ // Ack semantics driven by the renderer's config.json
359
+ // (`deferReady` field). Declaring it in config rather than as a
360
+ // constructor option keeps all renderer metadata in one place
361
+ // (alongside permissions / sandbox / connectHosts / buildHash)
362
+ // and avoids a code-vs-config-disagreement footgun.
363
+ this.ackDeferred = payload.config?.deferReady === true;
364
+ if (!this.ackDeferred) {
365
+ this.sendAck();
366
+ }
367
+ else {
368
+ this.readyTimeoutHandle = setTimeout(() => {
369
+ if (this.destroyed || this.ackSent)
370
+ return;
371
+ // Best-effort log so an operator can spot the late ack
372
+ // in dev tools; production console noise is acceptable
373
+ // here because this only fires when something is wrong.
374
+ console.warn('[uplim] signalReady() not called within ' +
375
+ this.readyTimeoutMs + 'ms — auto-acking so the host overlay can dismiss.');
376
+ this.sendAck();
377
+ }, this.readyTimeoutMs);
378
+ }
379
+ }
380
+ /**
381
+ * Post the deferred ack so the host overlay dismisses. No-op once
382
+ * the ack has been sent (the host-side bridge tolerates duplicates
383
+ * but we suppress them here for cleanliness). When `deferReady` was
384
+ * not set on construction this is also a no-op — the SDK already
385
+ * acked synchronously on init.
386
+ */
387
+ signalReady() {
388
+ if (this.destroyed || this.ackSent || !this.ackDeferred)
389
+ return;
390
+ this.sendAck();
391
+ }
392
+ sendAck() {
393
+ if (this.ackSent)
394
+ return;
395
+ this.ackSent = true;
396
+ if (this.readyTimeoutHandle) {
397
+ clearTimeout(this.readyTimeoutHandle);
398
+ this.readyTimeoutHandle = null;
399
+ }
312
400
  this.postToHost({ type: 'uplim:ack' });
313
401
  }
314
402
  handleThemeUpdate(message) {
@@ -385,5 +473,65 @@ export class RendererClient {
385
473
  return;
386
474
  window.parent.postMessage(message, this.targetOrigin);
387
475
  }
476
+ /**
477
+ * Install window-level crash hooks the moment the client is constructed
478
+ * (i.e. as soon as a renderer touches the SDK). We deliberately do this
479
+ * here — not in a React-only entry point — so that even renderers that
480
+ * forget to wrap their root in `<RendererErrorBoundary>` still report
481
+ * async / global failures to the host.
482
+ *
483
+ * The two hooks cover the failure modes a React boundary can't see:
484
+ * - `window.error` — synchronous throws outside React's tree (raw
485
+ * <script> bugs, event-handler exceptions, image onerror handlers).
486
+ * - `unhandledrejection` — Promise chains with no `.catch()`, which
487
+ * are surprisingly common in fetch-heavy renderers.
488
+ *
489
+ * Both fire-and-forget via `postCrashToHost`; the host decides whether
490
+ * to render the overlay (a single render-time crash usually warrants
491
+ * it, a stray unhandled rejection may not).
492
+ */
493
+ installCrashHooks() {
494
+ if (typeof window === 'undefined')
495
+ return;
496
+ this.errorListener = (event) => {
497
+ if (this.destroyed)
498
+ return;
499
+ // Prefer event.error for the real stack; fall back to a synthetic
500
+ // shape when the browser only gave us message/filename/lineno
501
+ // (cross-origin scripts strip event.error to null).
502
+ const thrown = event.error ?? {
503
+ name: 'ErrorEvent',
504
+ message: event.message || 'Uncaught error',
505
+ stack: event.filename
506
+ ? `at ${event.filename}:${event.lineno ?? '?'}:${event.colno ?? '?'}`
507
+ : '',
508
+ };
509
+ this.reportCrash('error', thrown);
510
+ };
511
+ window.addEventListener('error', this.errorListener);
512
+ this.rejectionListener = (event) => {
513
+ if (this.destroyed)
514
+ return;
515
+ this.reportCrash('unhandled-rejection', event.reason);
516
+ };
517
+ window.addEventListener('unhandledrejection', this.rejectionListener);
518
+ }
519
+ /**
520
+ * Forward a crash to the host. Called by the global hooks and by
521
+ * `<RendererErrorBoundary>`; renderers may also call it explicitly if
522
+ * they catch something themselves and want it surfaced (e.g. data-load
523
+ * failure that wipes the UI even though no exception escaped).
524
+ *
525
+ * No-throw: telemetry must never make the underlying crash worse.
526
+ */
527
+ reportCrash(kind, thrown) {
528
+ try {
529
+ const msg = buildCrashMessage(kind, thrown);
530
+ postCrashToHost(msg, this.targetOrigin);
531
+ }
532
+ catch {
533
+ // Swallowed on purpose — see above.
534
+ }
535
+ }
388
536
  }
389
537
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAiB9C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,cAAc;IAClB,YAAY,CAAS;IACrB,aAAa,GAAmB,EAAE,CAAC;IACnC,cAAc,GAAoB,EAAE,CAAC;IACrC,cAAc,GAAoB,EAAE,CAAC;IACrC,iBAAiB,GAAuB,EAAE,CAAC;IAE3C,YAAY,GAAkB,IAAI,CAAC;IACnC,qBAAqB,GAAkB,IAAI,CAAC;IAC5C,YAAY,GAAyB,IAAI,CAAC;IAC1C,oBAAoB,GAAyB,IAAI,CAAC;IAClD,aAAa,GAA0B,IAAI,CAAC;IAC5C,YAAY,GAAqB,OAAO,CAAC;IACzC,iBAAiB,GAAkB,IAAI,CAAC;IACxC,WAAW,GAAW,GAAG,CAAC;IAE1B,QAAQ,GAA2C,IAAI,CAAC;IACxD,kBAAkB,GAAwB,IAAI,CAAC;IAC/C,kBAAkB,GAA0C,IAAI,CAAC;IACjE,iBAAiB,GAAyC,IAAI,CAAC;IAC/D,cAAc,GAAG,KAAK,CAAC;IACvB,iBAAiB,GAAoC,IAAI,CAAC;IAC1D,oBAAoB,GAAuC,IAAI,CAAC;IAChE,SAAS,GAAG,KAAK,CAAC;IAClB,kBAAkB,GAAG,KAAK,CAAC;IAC3B,qBAAqB,GAAkE,EAAE,CAAC;IAC1F,6BAA6B,GAAsG,IAAI,GAAG,EAAE,CAAC;IAC7I,UAAU,GAA8B,IAAI,CAAC;IAErD,YAAY,OAA+B;QAC1C,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,GAAG,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;IAED,8EAA8E;IAC9E,YAAY;IACZ,8EAA8E;IAE9E,oEAAoE;IACpE,MAAM,CAAC,EAAgB;QACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO,GAAG,EAAE;YACX,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,oBAAoB;IACpB,8EAA8E;IAE9E,kDAAkD;IAClD,aAAa,CAAC,EAAiB;QAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACX,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,cAAc,CAAC,EAAiB;QAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACX,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,UAAU,CAAC,EAAoB;QAC9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,GAAG,EAAE;YACX,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,eAAe;IACf,8EAA8E;IAE9E,kDAAkD;IAClD,UAAU,CAAC,QAAgB;QAC1B,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,8DAA8D;IAC9D,YAAY;QACX,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,uDAAuD;IACvD,iBAAiB;QAChB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,4DAA4D;IAC5D,KAAK;QACJ,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,IAAsD;QACnE,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,UAAU,CAAC;gBACf,IAAI,EAAE,qBAAqB;gBAC3B,SAAS;gBACT,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACvB,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,UAAU;IACV,8EAA8E;IAE9E,gDAAgD;IAChD,QAAQ;QACP,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IAED,qDAAqD;IACrD,iBAAiB;QAChB,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACnC,CAAC;IAED,6EAA6E;IAC7E,cAAc;QACb,IAAI,CAAC,IAAI,CAAC,qBAAqB;YAAE,OAAO,IAAI,CAAC;QAC7C,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC;IAC1D,CAAC;IAED,6BAA6B;IAC7B,QAAQ;QACP,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IAED,sCAAsC;IACtC,gBAAgB;QACf,OAAO,IAAI,CAAC,oBAAoB,CAAC;IAClC,CAAC;IAED,gDAAgD;IAChD,SAAS;QACR,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IAED,6BAA6B;IAC7B,QAAQ;QACP,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IAED,6DAA6D;IAC7D,OAAO;QACN,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,aAAa;QACZ,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAE5C,wEAAwE;QACxE,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG;YACjB,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAAC,CAAC,CAAC;YAC9D,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY;YAC1C,uBAAuB,EAAE,KAAK,EAAE,UAAkB,EAAE,EAAE;gBACrD,IAAI,UAAU,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC9C,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YACvB,CAAC;SACD,CAAC;QAEF,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IAED,8EAA8E;IAC9E,UAAU;IACV,8EAA8E;IAE9E,gDAAgD;IAChD,OAAO;QACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAClE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,iBAAiB;gBAAE,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC;YAC9E,IAAI,IAAI,CAAC,oBAAoB;gBAAE,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC;YACvF,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,6BAA6B,EAAE,CAAC;YAC9D,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,CAAC;IAC5C,CAAC;IAED,8EAA8E;IAC9E,WAAW;IACX,8EAA8E;IAEtE,KAAK;QACZ,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAmB,EAAE,EAAE;YACvC,IAAI,IAAI,CAAC,SAAS;gBAAE,OAAO;YAC3B,IAAI,IAAI,CAAC,YAAY,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY;gBAAE,OAAO;YAC5E,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,OAAO;YAEvC,yEAAyE;YACzE,0CAA0C;YAC1C,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElD,+EAA+E;QAC/E,6EAA6E;QAC7E,6EAA6E;QAC7E,0EAA0E;QAC1E,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC,GAAG,EAAE;YAC1C,IAAI,IAAI,CAAC,SAAS;gBAAE,OAAO;YAC3B,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAC1C,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,8EAA8E;QAC9E,yCAAyC;QACzC,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,GAAG,EAAE;YACxC,IAAI,CAAC,cAAc,EAAE,CAAC;QACvB,CAAC,EAAE,IAAI,CAAC,CAAC;IACV,CAAC;IAEO,cAAc;QACrB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACvC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACrC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC/B,CAAC;IACF,CAAC;IAEO,aAAa,CAAC,OAAoB;QACzC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACtB,KAAK,YAAY;gBAChB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACzB,MAAM;YACP,KAAK,aAAa;gBACjB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAChC,MAAM;YACP,KAAK,aAAa;gBACjB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACjC,MAAM;YACP,KAAK,2BAA2B;gBAC/B,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;gBACxC,MAAM;YACP,KAAK,mBAAmB;gBACvB,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACtB,MAAM;YACP,KAAK,sBAAsB;gBAC1B,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACzB,MAAM;QACR,CAAC;IACF,CAAC;IAEO,UAAU,CAAC,OAAwB;QAC1C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC;QACpD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;QAClD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;QAE5C,4CAA4C;QAC5C,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;YAC3C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;YACvC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QACjC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,EAAE,CAAC,OAAO,CAAC,CAAC;QACb,CAAC;QAED,mEAAmE;QACnE,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IACxC,CAAC;IAEO,iBAAiB,CAAC,OAA+B;QACxD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;QAClC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACF,CAAC;IAEO,kBAAkB,CAAC,OAAgC;QAC1D,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC;QAEpD,gDAAgD;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAC7C,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QAC3C,CAAC;IACF,CAAC;IAEO,yBAAyB,CAAC,OAAuC;QACxE,MAAM,OAAO,GAAG,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7D,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;IAEO,WAAW;QAClB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,GAAG,CAAC;QACtC,gDAAgD;QAChD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEO,aAAa,CAAC,MAAe;QACpC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB;YAAE,OAAO;QAEtD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,OAAO,KAAK,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAE3B,MAAM,GAAG,GAA2D,MAAM;YACzE,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE;YAC9C,CAAC,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzC,EAAE,CAAC,OAAO,CAAC,CAAC;QACb,CAAC;IACF,CAAC;IAEO,iBAAiB;QACxB,IAAI,IAAI,CAAC,kBAAkB;YAAE,OAAO;QAEpC,wFAAwF;QACxF,IAAI,CAAC,kBAAkB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAE/D,2EAA2E;QAC3E,iEAAiE;QACjE,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvE,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE7E,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,UAAU,GAAG,IAA0C;YACjF,IAAI,CAAC,iBAAkB,CAAC,GAAG,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,UAAU,GAAG,IAA6C;YACvF,IAAI,CAAC,oBAAqB,CAAC,GAAG,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC5B,CAAC;IAEO,UAAU,CAAC,OAAe;QACjC,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACvD,CAAC;CACD"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { RendererClient } from './client.js';
2
2
  export type { RendererClientOptions } from './client.js';
3
3
  export type { RendererConfig, RendererPermission, RendererScope, RendererBucketScope, RendererFolderScope, RendererUploadScope, RendererVirtualFileScope, RenderingType, InitPayload, RendererApiAdapter, } from './types.js';
4
- export { MESSAGE_PREFIX, PROTOCOL_VERSION, isRendererMessage, isHostMessage, isIframeMessage, } from './protocol.js';
5
- export type { HostMessage, HostInitMessage, HostThemeUpdateMessage, HostTokenRefreshMessage, HostGenerateTokenResultMessage, HostHistoryBackMessage, HostHistoryForwardMessage, IframeMessage, IframeReadyMessage, IframeOpenUploadMessage, IframeTokenRequestMessage, IframeCloseMessage, IframeInitAckMessage, IframeGenerateTokenMessage, IframeHistoryPushMessage, IframeHistoryReplaceMessage, RendererMessage, } from './protocol.js';
4
+ export { MESSAGE_PREFIX, PROTOCOL_VERSION, isRendererMessage, isHostMessage, isIframeMessage, buildCrashMessage, postCrashToHost, } from './protocol.js';
5
+ export type { HostMessage, HostInitMessage, HostThemeUpdateMessage, HostTokenRefreshMessage, HostGenerateTokenResultMessage, HostHistoryBackMessage, HostHistoryForwardMessage, IframeMessage, IframeReadyMessage, IframeOpenUploadMessage, IframeTokenRequestMessage, IframeCloseMessage, IframeInitAckMessage, IframeGenerateTokenMessage, IframeHistoryPushMessage, IframeHistoryReplaceMessage, IframeCrashMessage, RendererCrashKind, RendererMessage, } from './protocol.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,YAAY,EACX,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,WAAW,EACX,kBAAkB,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,eAAe,GACf,MAAM,eAAe,CAAC;AAEvB,YAAY,EACX,WAAW,EACX,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,8BAA8B,EAC9B,sBAAsB,EACtB,yBAAyB,EACzB,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,eAAe,GACf,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,YAAY,EACX,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,WAAW,EACX,kBAAkB,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,eAAe,GACf,MAAM,eAAe,CAAC;AAEvB,YAAY,EACX,WAAW,EACX,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,8BAA8B,EAC9B,sBAAsB,EACtB,yBAAyB,EACzB,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GACf,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export { RendererClient } from './client.js';
2
- export { MESSAGE_PREFIX, PROTOCOL_VERSION, isRendererMessage, isHostMessage, isIframeMessage, } from './protocol.js';
2
+ export { MESSAGE_PREFIX, PROTOCOL_VERSION, isRendererMessage, isHostMessage, isIframeMessage, buildCrashMessage, postCrashToHost, } from './protocol.js';
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAgB7C,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,eAAe,GACf,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAgB7C,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,eAAe,GACf,MAAM,eAAe,CAAC"}
@@ -70,9 +70,73 @@ export interface IframeHistoryReplaceMessage {
70
70
  type: 'uplim:historyReplace';
71
71
  path: string;
72
72
  }
73
- export type IframeMessage = IframeReadyMessage | IframeOpenUploadMessage | IframeTokenRequestMessage | IframeCloseMessage | IframeInitAckMessage | IframeGenerateTokenMessage | IframeHistoryPushMessage | IframeHistoryReplaceMessage;
73
+ /**
74
+ * Which SDK code path observed the failure. Maps directly to the host's
75
+ * `RendererCrashKind` enum so the wire schema and the telemetry shape
76
+ * stay in sync.
77
+ *
78
+ * - `render` — React tree threw during render/commit; caught by the
79
+ * SDK's mandatory ErrorBoundary at the renderer root. The UI is gone.
80
+ * - `error` — `window.onerror`: synchronous uncaught exception outside
81
+ * React (event handler, top-level script). UI may or may not still
82
+ * be visible.
83
+ * - `unhandled-rejection` — `window.onunhandledrejection`: a Promise
84
+ * rejected with no `.catch()`. Almost always async, often non-fatal,
85
+ * but a useful signal that something is wrong.
86
+ */
87
+ export type RendererCrashKind = 'render' | 'error' | 'unhandled-rejection';
88
+ /**
89
+ * Tells the host the renderer just hit an unhandled exception. The host
90
+ * decides what to render in response (typically an overlay with reload
91
+ * and fallback options); the renderer never paints its own crash screen
92
+ * because (a) styling would be inconsistent with the host UI and (b) a
93
+ * render-time crash may have left the renderer's CSS / DOM unusable.
94
+ *
95
+ * Fields are deliberately string-bounded on the proto side (see
96
+ * `ReportRendererCrashRequest`) — keep payloads under those limits
97
+ * before posting.
98
+ */
99
+ export interface IframeCrashMessage {
100
+ type: 'uplim:crash';
101
+ kind: RendererCrashKind;
102
+ /** Error.name (e.g. `TypeError`). Empty when the source threw a non-Error. */
103
+ name: string;
104
+ /** Error.message — user-facing description of the failure. */
105
+ message: string;
106
+ /** Stack trace if the browser exposed one. May be minified in prod builds. */
107
+ stack: string;
108
+ /** `window.location.href` at the time of the crash, for narrowing down the route. */
109
+ rendererLocation?: string;
110
+ /** Iframe-side wall-clock millis when the crash was observed. */
111
+ reportedAtMs: number;
112
+ }
113
+ export type IframeMessage = IframeReadyMessage | IframeOpenUploadMessage | IframeTokenRequestMessage | IframeCloseMessage | IframeInitAckMessage | IframeGenerateTokenMessage | IframeHistoryPushMessage | IframeHistoryReplaceMessage | IframeCrashMessage;
74
114
  export type RendererMessage = HostMessage | IframeMessage;
75
115
  export declare function isRendererMessage(data: unknown): data is RendererMessage;
76
116
  export declare function isHostMessage(data: unknown): data is HostMessage;
117
+ /**
118
+ * Build an `IframeCrashMessage` from an unknown thrown value. Centralised so
119
+ * the React boundary and the global `error` / `unhandledrejection` hooks all
120
+ * produce identically-shaped payloads regardless of what JS threw at them
121
+ * (strings, objects, DOMExceptions, real Errors, …).
122
+ *
123
+ * Only includes what the iframe is the sole source-of-truth for —
124
+ * `name`, `message`, `stack`, `rendererLocation`, `kind`. UA, viewport,
125
+ * buildHash are deliberately omitted: the parent observes them directly
126
+ * (and trusting the iframe to self-report those opens a small but
127
+ * pointless spoof surface).
128
+ */
129
+ export declare function buildCrashMessage(kind: RendererCrashKind, thrown: unknown): IframeCrashMessage;
130
+ /**
131
+ * Fire-and-forget post of a crash message to the host. Used by both the SDK's
132
+ * global hooks and the React boundary. Falls back silently when called outside
133
+ * an iframe (e.g. SSR tests) so the SDK never throws on `window.parent` being
134
+ * `undefined`.
135
+ *
136
+ * `targetOrigin` defaults to `'*'` — at crash time we deliberately do not
137
+ * filter, because the renderer may have lost the host origin context (e.g.
138
+ * if the crash happened before `init` arrived).
139
+ */
140
+ export declare function postCrashToHost(message: IframeCrashMessage, targetOrigin?: string): void;
77
141
  export declare function isIframeMessage(data: unknown): data is IframeMessage;
78
142
  //# sourceMappingURL=protocol.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,eAAO,MAAM,cAAc,EAAG,QAAiB,CAAC;AAChD,eAAO,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAM3C,kGAAkG;AAClG,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;CACrB;AAED,wCAAwC;AACxC,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;CACxB;AAED,0DAA0D;AAC1D,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACvB;AAED,mEAAmE;AACnE,MAAM,WAAW,8BAA8B;IAC9C,IAAI,EAAE,2BAA2B,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,iDAAiD;AACjD,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,mBAAmB,CAAC;CAC1B;AAED,oDAAoD;AACpD,MAAM,WAAW,yBAAyB;IACzC,IAAI,EAAE,sBAAsB,CAAC;CAC7B;AAED,MAAM,MAAM,WAAW,GACpB,eAAe,GACf,sBAAsB,GACtB,uBAAuB,GACvB,8BAA8B,GAC9B,sBAAsB,GACtB,yBAAyB,CAAC;AAM7B,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,aAAa,CAAC;CACpB;AAED,4EAA4E;AAC5E,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,mFAAmF;AACnF,MAAM,WAAW,yBAAyB;IACzC,IAAI,EAAE,oBAAoB,CAAC;CAC3B;AAED,wEAAwE;AACxE,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,aAAa,CAAC;CACpB;AAED,0FAA0F;AAC1F,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,WAAW,CAAC;CAClB;AAED,0EAA0E;AAC1E,MAAM,WAAW,0BAA0B;IAC1C,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAC;CAC7B;AAED,sEAAsE;AACtE,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACb;AAED,wEAAwE;AACxE,MAAM,WAAW,2BAA2B;IAC3C,IAAI,EAAE,sBAAsB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,aAAa,GACtB,kBAAkB,GAClB,uBAAuB,GACvB,yBAAyB,GACzB,kBAAkB,GAClB,oBAAoB,GACpB,0BAA0B,GAC1B,wBAAwB,GACxB,2BAA2B,CAAC;AAK/B,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,aAAa,CAAC;AAK1D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,eAAe,CAQxE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,WAAW,CAIhE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,aAAa,CAGpE"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
package/dist/protocol.js CHANGED
@@ -19,6 +19,97 @@ export function isHostMessage(data) {
19
19
  const t = data.type;
20
20
  return t === 'uplim:init' || t === 'uplim:theme' || t === 'uplim:token' || t === 'uplim:generateTokenResult' || t === 'uplim:historyBack' || t === 'uplim:historyForward';
21
21
  }
22
+ // Proto-side limits (see ReportRendererCrashRequest) — clamp before sending so
23
+ // we don't get truncated mid-string by buf.validate and miss the crash entirely.
24
+ const CRASH_NAME_MAX = 256;
25
+ const CRASH_MESSAGE_MAX = 4096;
26
+ const CRASH_STACK_MAX = 32768;
27
+ const CRASH_LOCATION_MAX = 2048;
28
+ function clampString(value, max) {
29
+ if (value.length <= max)
30
+ return value;
31
+ // Reserve a marker so it's obvious in telemetry that we truncated.
32
+ const suffix = '…[truncated]';
33
+ return value.slice(0, max - suffix.length) + suffix;
34
+ }
35
+ /**
36
+ * Build an `IframeCrashMessage` from an unknown thrown value. Centralised so
37
+ * the React boundary and the global `error` / `unhandledrejection` hooks all
38
+ * produce identically-shaped payloads regardless of what JS threw at them
39
+ * (strings, objects, DOMExceptions, real Errors, …).
40
+ *
41
+ * Only includes what the iframe is the sole source-of-truth for —
42
+ * `name`, `message`, `stack`, `rendererLocation`, `kind`. UA, viewport,
43
+ * buildHash are deliberately omitted: the parent observes them directly
44
+ * (and trusting the iframe to self-report those opens a small but
45
+ * pointless spoof surface).
46
+ */
47
+ export function buildCrashMessage(kind, thrown) {
48
+ let name = '';
49
+ let message = '';
50
+ let stack = '';
51
+ if (thrown instanceof Error) {
52
+ name = thrown.name || 'Error';
53
+ message = thrown.message || String(thrown);
54
+ stack = thrown.stack ?? '';
55
+ }
56
+ else if (typeof thrown === 'string') {
57
+ name = 'StringError';
58
+ message = thrown;
59
+ }
60
+ else if (thrown && typeof thrown === 'object') {
61
+ const obj = thrown;
62
+ name = typeof obj.name === 'string' ? obj.name : 'UnknownError';
63
+ message = typeof obj.message === 'string' ? obj.message : safeStringify(thrown);
64
+ stack = typeof obj.stack === 'string' ? obj.stack : '';
65
+ }
66
+ else {
67
+ name = 'UnknownError';
68
+ message = String(thrown);
69
+ }
70
+ let rendererLocation;
71
+ if (typeof window !== 'undefined' && window.location) {
72
+ rendererLocation = clampString(window.location.href, CRASH_LOCATION_MAX);
73
+ }
74
+ return {
75
+ type: 'uplim:crash',
76
+ kind,
77
+ name: clampString(name, CRASH_NAME_MAX),
78
+ message: clampString(message, CRASH_MESSAGE_MAX),
79
+ stack: clampString(stack, CRASH_STACK_MAX),
80
+ rendererLocation,
81
+ reportedAtMs: Date.now(),
82
+ };
83
+ }
84
+ function safeStringify(value) {
85
+ try {
86
+ return JSON.stringify(value);
87
+ }
88
+ catch {
89
+ return String(value);
90
+ }
91
+ }
92
+ /**
93
+ * Fire-and-forget post of a crash message to the host. Used by both the SDK's
94
+ * global hooks and the React boundary. Falls back silently when called outside
95
+ * an iframe (e.g. SSR tests) so the SDK never throws on `window.parent` being
96
+ * `undefined`.
97
+ *
98
+ * `targetOrigin` defaults to `'*'` — at crash time we deliberately do not
99
+ * filter, because the renderer may have lost the host origin context (e.g.
100
+ * if the crash happened before `init` arrived).
101
+ */
102
+ export function postCrashToHost(message, targetOrigin = '*') {
103
+ if (typeof window === 'undefined' || !window.parent || window.parent === window)
104
+ return;
105
+ try {
106
+ window.parent.postMessage(message, targetOrigin);
107
+ }
108
+ catch {
109
+ // postMessage can throw on some browsers if the target origin is bad
110
+ // (cross-origin frame missing). Telemetry is best-effort.
111
+ }
112
+ }
22
113
  export function isIframeMessage(data) {
23
114
  if (!isRendererMessage(data))
24
115
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,mDAAmD;AACnD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,cAAc,GAAG,QAAiB,CAAC;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAU,CAAC;AAmH3C,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAC9E,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC9C,OAAO,CACN,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,MAAM,IAAI,IAAI;QACd,OAAQ,IAA0B,CAAC,IAAI,KAAK,QAAQ;QACnD,IAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAC1D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAa;IAC1C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IACpB,OAAO,CAAC,KAAK,YAAY,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,2BAA2B,IAAI,CAAC,KAAK,mBAAmB,IAAI,CAAC,KAAK,sBAAsB,CAAC;AAC3K,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAa;IAC5C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,mDAAmD;AACnD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,cAAc,GAAG,QAAiB,CAAC;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAU,CAAC;AAmK3C,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAC9E,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC9C,OAAO,CACN,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,MAAM,IAAI,IAAI;QACd,OAAQ,IAA0B,CAAC,IAAI,KAAK,QAAQ;QACnD,IAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAC1D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAa;IAC1C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IACpB,OAAO,CAAC,KAAK,YAAY,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,2BAA2B,IAAI,CAAC,KAAK,mBAAmB,IAAI,CAAC,KAAK,sBAAsB,CAAC;AAC3K,CAAC;AAED,+EAA+E;AAC/E,iFAAiF;AACjF,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,eAAe,GAAG,KAAK,CAAC;AAC9B,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,SAAS,WAAW,CAAC,KAAa,EAAE,GAAW;IAC9C,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC;IACtC,mEAAmE;IACnE,MAAM,MAAM,GAAG,cAAc,CAAC;IAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAChC,IAAuB,EACvB,MAAe;IAEf,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;QAC7B,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC;QAC9B,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IAC5B,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACvC,IAAI,GAAG,aAAa,CAAC;QACrB,OAAO,GAAG,MAAM,CAAC;IAClB,CAAC;SAAM,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,MAAgE,CAAC;QAC7E,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;QAChE,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAChF,KAAK,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,CAAC;SAAM,CAAC;QACP,IAAI,GAAG,cAAc,CAAC;QACtB,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,gBAAoC,CAAC;IACzC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtD,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO;QACN,IAAI,EAAE,aAAa;QACnB,IAAI;QACJ,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC;QACvC,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,iBAAiB,CAAC;QAChD,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,eAAe,CAAC;QAC1C,gBAAgB;QAChB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;KACxB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACpC,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,OAA2B,EAAE,eAAuB,GAAG;IACtF,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO;IACxF,IAAI,CAAC;QACJ,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACR,qEAAqE;QACrE,0DAA0D;IAC3D,CAAC;AACF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAa;IAC5C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}