@braidlabs/core 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/package.json +1 -1
  2. package/src/adapters/compat-adapter.js +51 -4
  3. package/src/adapters/compat-adapter.js.map +1 -1
  4. package/src/compat/database-partition.d.ts +43 -0
  5. package/src/compat/database-partition.js +165 -0
  6. package/src/compat/database-partition.js.map +1 -0
  7. package/src/compat/html-policy.js +10 -5
  8. package/src/compat/html-policy.js.map +1 -1
  9. package/src/compat/script-execution.js +5 -4
  10. package/src/compat/script-execution.js.map +1 -1
  11. package/src/compat/shared-globals.d.ts +1 -1
  12. package/src/compat/shared-globals.js +2 -2
  13. package/src/compat/shared-globals.js.map +1 -1
  14. package/src/config.d.ts +13 -2
  15. package/src/config.js.map +1 -1
  16. package/src/elements/fragment-slot.d.ts +13 -0
  17. package/src/elements/fragment-slot.js +89 -7
  18. package/src/elements/fragment-slot.js.map +1 -1
  19. package/src/elements/leave-guard.d.ts +49 -0
  20. package/src/elements/leave-guard.js +122 -0
  21. package/src/elements/leave-guard.js.map +1 -0
  22. package/src/elements/overlay-layer.d.ts +45 -0
  23. package/src/elements/overlay-layer.js +112 -0
  24. package/src/elements/overlay-layer.js.map +1 -0
  25. package/src/index.d.ts +2 -0
  26. package/src/index.js +13 -0
  27. package/src/index.js.map +1 -1
  28. package/src/realm/realm-manager.js +2 -1
  29. package/src/realm/realm-manager.js.map +1 -1
  30. package/src/realm/sandbox-realm.d.ts +5 -7
  31. package/src/realm/sandbox-realm.js +104 -39
  32. package/src/realm/sandbox-realm.js.map +1 -1
  33. package/src/trusted-types.d.ts +28 -0
  34. package/src/trusted-types.js +58 -0
  35. package/src/trusted-types.js.map +1 -0
  36. package/src/weave/capabilities.d.ts +10 -3
  37. package/src/weave/capabilities.js +19 -3
  38. package/src/weave/capabilities.js.map +1 -1
  39. package/src/weave/context-bridge.d.ts +2 -0
  40. package/src/weave/context-bridge.js +1 -1
  41. package/src/weave/context-bridge.js.map +1 -1
  42. package/src/weave/guest.js +8 -4
  43. package/src/weave/guest.js.map +1 -1
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Top-layer overlays: what a fragment portals to its body, lifted out of the host's box.
3
+ *
4
+ * UI libraries render modals, menus and tooltips by appending to `document.body`, which escapes
5
+ * whatever clips the component that opened them. In a compat realm `document.body` is the
6
+ * fragment's own body — inside the slot — so the escape stops at the host's container: an
7
+ * `overflow: hidden` ancestor clips the modal, and a transformed one becomes its fixed-position
8
+ * frame. Other micro-frontend frameworks answer this by letting fragments write into the host's
9
+ * real body, which gives up the isolation the fragment boundary exists for.
10
+ *
11
+ * With `overlays="top-layer"` the slot instead shows each element the fragment appends to its
12
+ * body after mount as a manual popover. The browser renders popovers in the top layer, above and
13
+ * outside every ancestor's clipping, while the element stays exactly where it was in the DOM:
14
+ * inside the fragment's shadow tree, styled by the fragment's stylesheets, its events handled by
15
+ * the fragment's own listeners. Removing the element closes it; appending it again shows it again.
16
+ *
17
+ * Opt-in, because it changes positioning: a lifted element is laid out against the page rather
18
+ * than the slot (see `OVERLAY_STYLES`), and stacks by the order it was shown, not its `z-index`.
19
+ */
20
+ /** Marks an element the slot lifted, so a popover of the fragment's own is never mistaken for one. */
21
+ export const OVERLAY_ATTRIBUTE = 'data-braid-overlay';
22
+ /**
23
+ * Undoes the browser's popover look (centred, bordered, padded, opaque) so a lifted portal looks as
24
+ * it did in the body, laid out from the page's origin as a body child would be. `inset: auto`
25
+ * rather than zeros, so a portal anchored by `right` or `bottom` alone does not stretch.
26
+ *
27
+ * It must lose to everything of the fragment's: any author rule beats the browser's popover rules,
28
+ * so it only needs to beat those. So it sits in a cascade layer declared first in the slot's
29
+ * stylesheet (the first in its shadow root), below every layer of the fragment's own — Tailwind's
30
+ * utilities, say — and every unlayered rule, and its selector has no specificity. The gateway's
31
+ * slot stylesheet for a pierced slot opens with the same rule.
32
+ */
33
+ export const OVERLAY_STYLES = `@layer braid-overlay-reset { :where([${OVERLAY_ATTRIBUTE}]) { position: absolute; inset: auto; margin: 0; padding: 0; border: 0; ` +
34
+ 'background: none; color: inherit; overflow: visible; width: auto; height: auto; max-width: none; max-height: none; } }';
35
+ /**
36
+ * Body children that are not overlays: they render nothing, a `<dialog>` has the top layer of its
37
+ * own through `showModal()`, and Braid's elements are Braid's.
38
+ */
39
+ const NOT_OVERLAYS = new Set(['script', 'style', 'link', 'template', 'meta', 'noscript', 'dialog']);
40
+ /**
41
+ * Lifts each element appended to the fragment's body from now on. Stops when `signal` aborts (the
42
+ * fragment closes). Does nothing for a fragment with no body (a custom-element fragment) or in a
43
+ * browser without popovers.
44
+ */
45
+ export function liftPortals(contentRoot, signal) {
46
+ // the element the fragment's realm answers `document.body` with (see document-overrides.ts)
47
+ const body = contentRoot.querySelector('braid-body') ?? contentRoot.firstElementChild;
48
+ if (!body || typeof HTMLElement.prototype.showPopover !== 'function')
49
+ return;
50
+ const lift = (node) => {
51
+ if (!(node instanceof HTMLElement) || node.parentNode !== body)
52
+ return;
53
+ if (NOT_OVERLAYS.has(node.localName) || node.localName.startsWith('braid-'))
54
+ return;
55
+ const ours = node.hasAttribute(OVERLAY_ATTRIBUTE);
56
+ // a popover the fragment declared itself is the fragment's to show
57
+ if (node.hasAttribute('popover') && !ours)
58
+ return;
59
+ node.setAttribute('popover', 'manual');
60
+ try {
61
+ node.showPopover();
62
+ node.setAttribute(OVERLAY_ATTRIBUTE, '');
63
+ }
64
+ catch {
65
+ // removed again before this ran, or not showable: leave it as the fragment made it
66
+ node.removeAttribute('popover');
67
+ node.removeAttribute(OVERLAY_ATTRIBUTE);
68
+ }
69
+ };
70
+ /**
71
+ * One the fragment moved out of its body, into its app, is an overlay no longer: left a closed
72
+ * popover, it would never render again.
73
+ */
74
+ const settle = (node) => {
75
+ if (!(node instanceof HTMLElement) || !node.hasAttribute(OVERLAY_ATTRIBUTE))
76
+ return;
77
+ queueMicrotask(() => {
78
+ if (node.isConnected && node.parentNode !== body) {
79
+ node.removeAttribute('popover');
80
+ node.removeAttribute(OVERLAY_ATTRIBUTE);
81
+ }
82
+ });
83
+ };
84
+ // Observed rather than intercepted: it sees every way in, captured native methods included, and
85
+ // its callback runs before the next paint, so nothing renders clipped first. (A synchronous
86
+ // measurement straight after `appendChild` still sees the element where it was appended.)
87
+ const observer = new MutationObserver((records) => {
88
+ for (const record of records) {
89
+ record.removedNodes.forEach(settle);
90
+ record.addedNodes.forEach(lift);
91
+ }
92
+ });
93
+ observer.observe(body, { childList: true });
94
+ signal.addEventListener('abort', () => observer.disconnect(), { once: true });
95
+ }
96
+ /**
97
+ * Shows again what the slot lifted. A move that disconnected the slot closed every open popover in
98
+ * it, and nothing was appended to the body for the observer to notice. (`moveBefore` keeps them
99
+ * open.)
100
+ */
101
+ export function reshowLifted(root) {
102
+ for (const element of root.querySelectorAll(`[${OVERLAY_ATTRIBUTE}]`)) {
103
+ try {
104
+ if (!element.matches(':popover-open'))
105
+ element.showPopover();
106
+ }
107
+ catch {
108
+ // not showable now: it stays as the fragment left it
109
+ }
110
+ }
111
+ }
112
+ //# sourceMappingURL=overlay-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-layer.js","sourceRoot":"","sources":["../../../../../libs/core/src/elements/overlay-layer.ts"],"names":[],"mappings":"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"}
package/src/index.d.ts CHANGED
@@ -27,6 +27,8 @@ export { contractAdapter } from './adapters/contract-adapter.js';
27
27
  export { defineFragment } from './env/define-fragment.js';
28
28
  export type { FragmentDefinition } from './env/define-fragment.js';
29
29
  export { FragmentSlot, prefetchFragment } from './elements/fragment-slot.js';
30
+ export { clearBraidDatabases } from './compat/database-partition.js';
31
+ export { dirtySlots, leaveConfirmed, type ConfirmLeave, type DirtySlot } from './elements/leave-guard.js';
30
32
  export { clearPrefetchedFragments } from './elements/prefetch.js';
31
33
  export type { FragmentSlotState } from './elements/fragment-slot.js';
32
34
  export { braidContext, createContextBus } from './context/context-bus.js';
package/src/index.js CHANGED
@@ -19,6 +19,8 @@ import { customElementAdapter } from './adapters/custom-element-adapter.js';
19
19
  import { contractAdapter } from './adapters/contract-adapter.js';
20
20
  import { FragmentSlot } from './elements/fragment-slot.js';
21
21
  import { BraidLate, BraidLateEnd } from './elements/late-content.js';
22
+ import { claimBraidPolicy } from './trusted-types.js';
23
+ import { installLeaveGuard } from './elements/leave-guard.js';
22
24
  export { BraidError } from './errors.js';
23
25
  export { NotEntitledError } from './elements/prerequisites.js';
24
26
  export { BRAID_FRAGMENT_REPORTER, braidFragmentReporter } from './weave/messages.js';
@@ -27,6 +29,8 @@ export { customElementAdapter } from './adapters/custom-element-adapter.js';
27
29
  export { contractAdapter } from './adapters/contract-adapter.js';
28
30
  export { defineFragment } from './env/define-fragment.js';
29
31
  export { FragmentSlot, prefetchFragment } from './elements/fragment-slot.js';
32
+ export { clearBraidDatabases } from './compat/database-partition.js';
33
+ export { dirtySlots, leaveConfirmed } from './elements/leave-guard.js';
30
34
  export { clearPrefetchedFragments } from './elements/prefetch.js';
31
35
  export { braidContext, createContextBus } from './context/context-bus.js';
32
36
  export { registerBraidServiceWorker } from './compat/register-worker.js';
@@ -49,8 +53,17 @@ export function initBraid(options = {}) {
49
53
  customElements.define('braid-late', BraidLate);
50
54
  customElements.define('braid-late-end', BraidLateEnd);
51
55
  }
56
+ // before any slot boots: the policy name the host's directive grants must be Braid's first
57
+ claimBraidPolicy();
52
58
  if (!customElements.get('fragment-slot')) {
53
59
  customElements.define('fragment-slot', FragmentSlot);
54
60
  }
61
+ // Once per page, like the elements. A later initBraid that names `confirmLeave` replaces the
62
+ // question (null or undefined removes it); one that does not leaves it, as config merges.
63
+ if ('confirmLeave' in options) {
64
+ removeLeaveGuard?.();
65
+ removeLeaveGuard = options.confirmLeave ? installLeaveGuard(options.confirmLeave) : undefined;
66
+ }
55
67
  }
68
+ let removeLeaveGuard;
56
69
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/core/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAgB,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAA8B,MAAM,qBAAqB,CAAC;AAEjH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAc1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAGzE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAE/H,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AAEvB;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,UAAwB,EAAE;IAClD,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,cAAc,CAAC,aAAa,CAAC,CAAC;IAC9B,cAAc,CAAC,oBAAoB,CAAC,CAAC;IACrC,cAAc,CAAC,eAAe,CAAC,CAAC;IAEhC,iGAAiG;IACjG,6DAA6D;IAC7D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAC/C,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;QACzC,cAAc,CAAC,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/core/src/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { BraidError } from '../errors.js';
2
2
  import { getBraidConfig, isDevMode } from '../config.js';
3
3
  import { BRAID_ADAPTER_META, BRAID_ADAPTER_OPTIONS_META, BRAID_PROTOCOL_META, BRAID_PROTOCOL_VERSION, braidFragmentUrl, braidRealmUrl, } from '../protocol.js';
4
+ import { trustedScript } from '../trusted-types.js';
4
5
  export async function createRealm(kind, init) {
5
6
  switch (kind) {
6
7
  case 'compat-http':
@@ -134,7 +135,7 @@ function createRealmHandle(kind, iframe, realmWindow, realmDocument, manifestAda
134
135
  script.type = 'module';
135
136
  // import declarations are hoisted, so appending the completion call after the fragment's
136
137
  // own source is valid regardless of what the source imports
137
- script.textContent = `${source}\n;window.${callbackName}?.();`;
138
+ script.textContent = trustedScript(`${source}\n;window.${callbackName}?.();`, realmWindow);
138
139
  const onError = (event) => reject(new BraidError(`module evaluation failed in the fragment's realm: ${event.message}`, {
139
140
  fragmentId: init.fragmentId,
140
141
  stage: 'adapter-mount',
@@ -1 +1 @@
1
- {"version":3,"file":"realm-manager.js","sourceRoot":"","sources":["../../../../../libs/core/src/realm/realm-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,GACd,MAAM,gBAAgB,CAAC;AA2ExB,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAe,EAAE,IAAe;IAChE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa;YAChB,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,eAAe;YAClB,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACvC,KAAK,SAAS;YACZ;;;;;eAKG;YACH,MAAM,IAAI,UAAU,CAAC,2DAA2D,EAAE;gBAChF,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,KAAK,EAAE,YAAY;gBACnB,OAAO,EAAE,sGAAsG;aAChH,CAAC,CAAC;QACL;YACE,MAAM,IAAI,UAAU,CAAC,uBAAuB,IAAI,GAAG,EAAE;gBACnD,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,KAAK,EAAE,YAAY;aACpB,CAAC,CAAC;IACP,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,KAAK,UAAU,uBAAuB,CAAC,IAAe;IACpD,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAEvC,0FAA0F;IAC1F,6CAA6C;IAC7C,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;IAEnH,MAAM,iBAAiB,GACrB,4DAA4D,UAAU,CAAC,UAAU,CAAC,UAAU;QAC5F,eAAe,mBAAmB,cAAc,sBAAsB,IAAI;QAC1E,eAAe,UAAU,CAAC,QAAQ,CAAC,IAAI;QACvC,CAAC,SAAS,CAAC,CAAC,CAAC,4BAA4B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEtF,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAE1F,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC;IACrB,MAAM,CAAC,IAAI,GAAG,SAAS,UAAU,EAAE,CAAC;IAEpC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,aAAa,EAAQ,CAAC;IAExG,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,MAAM,CAAC,gBAAgB,CACrB,OAAO,EACP,GAAG,EAAE,CACH,YAAY,CACV,IAAI,UAAU,CAAC,4CAA4C,EAAE;QAC3D,UAAU;QACV,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,kEAAkE;KAC5E,CAAC,CACH,EACH,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IAEF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC;IACf,CAAC;YAAS,CAAC;QACT,4EAA4E;QAC5E,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,aAAoD,CAAC;IAChF,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;IAE7C,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,MAAM,IAAI,UAAU,CAAC,0DAA0D,EAAE;YAC/E,UAAU;YACV,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,kEAAkE;SAC5E,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAEtG,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,4BAA4B,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,UAAU,UAAU,6BAA6B,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,aAAuB,EAAE,UAAkB;IACrE,MAAM,GAAG,GAAG,aAAa;SACtB,aAAa,CAAC,cAAc,0BAA0B,IAAI,CAAC;QAC5D,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAE5B,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAkC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,UAAU,UAAU,8DAA8D,CAAC,CAAC;QACjG,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CACxB,IAAe,EACf,MAAyB,EACzB,WAAuC,EACvC,aAAuB,EACvB,eAA8B,EAC9B,cAAiD,EACjD,IAAe;IAEf,4FAA4F;IAC5F,MAAM,mBAAmB,GAAG,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAA8B,CAAC;IAC9G,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC;IAErC,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAE1B,KAAK,UAAU,cAAc,CAAC,MAAc;QAC1C,MAAM,YAAY,GAAG,oBAAoB,iBAAiB,EAAE,IAAI,CAAC;QACjE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAW,CAAC;QAEtE,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE;YAC/C,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;QACvB,yFAAyF;QACzF,4DAA4D;QAC5D,MAAM,CAAC,WAAW,GAAG,GAAG,MAAM,aAAa,YAAY,OAAO,CAAC;QAE/D,MAAM,OAAO,GAAG,CAAC,KAAiB,EAAE,EAAE,CACpC,MAAM,CACJ,IAAI,UAAU,CAAC,qDAAqD,KAAK,CAAC,OAAO,EAAE,EAAE;YACnF,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CACH,CAAC;QAEJ,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAwB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CACpC,MAAM,CACJ,IAAI,UAAU,CAAC,sDAAsD,EAAE;YACrE,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,eAAe;YACtB,OAAO,EAAE,kEAAkE;SAC5E,CAAC,CACH,CACF,CAAC;QAEF,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE9B,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC;QACvB,CAAC;gBAAS,CAAC;YACT,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAwB,CAAC,CAAC;YACnE,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI;QACJ,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,aAAa;QACvB,eAAe;QACf,cAAc;QACd,cAAc;QACd,KAAK,CAAC,QAAQ,CAAC,QAAgB;YAC7B,+EAA+E;YAC/E,MAAM,cAAc,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnG,CAAC;QACD,OAAO;YACL,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,4BAA4B,CAAC,aAAuB,EAAE,UAAkB;IAC/E,MAAM,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC/D,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,iBAAiB,EAAE;QACjD,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;YAC5B,IAAI,CAAC,MAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACvE,MAAM,GAAG,IAAI,CAAC;gBACd,OAAO,CAAC,IAAI,CACV,UAAU,UAAU,6CAA6C,QAAQ,qBAAqB;oBAC5F,kFAAkF;oBAClF,0GAA0G,CAC7G,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,IAAe;IAClD,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAExD,IAAI,WAAW,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3C,MAAM,IAAI,UAAU,CAAC,cAAc,QAAQ,yCAAyC,EAAE;YACpF,UAAU;YACV,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,wGAAwG;SAClH,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,+FAA+F;IAC/F,iGAAiG;IACjG,gGAAgG;IAChG,yCAAyC;IACzC,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC3E,MAAM,CAAC,IAAI,GAAG,SAAS,UAAU,EAAE,CAAC;IAEpC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,aAAa,EAAQ,CAAC;IAExG,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,yBAAyB,GAAkB,IAAI,CAAC;IAEpD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;QACnC,IAAI,aAAa,EAAE,CAAC;YAClB,iFAAiF;YACjF,IAAI,KAAK,EAAE,CAAC;gBACV,gFAAgF;gBAChF,oFAAoF;gBACpF,8EAA8E;gBAC9E,kFAAkF;gBAClF,IAAI,yBAAyB,EAAE,CAAC;oBAC9B,QAAQ,CAAC,IAAI,GAAG,yBAAyB,CAAC;gBAC5C,CAAC;qBAAM,CAAC;oBACN,yBAAyB,GAAG,MAAM,CAAC,aAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAChE,MAAM,CAAC,aAAc,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;gBACtD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,UAAU,UAAU,gEAAgE,CAAC,CAAC;YACrG,CAAC;YACD,OAAO;QACT,CAAC;QACD,aAAa,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC;YACH,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACpC,gBAAgB,CACd,MAAM,CAAC,eAAgB,EACvB,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,QAAQ,CAAC,CAClF,CAAC;YACF,oFAAoF;YACpF,uFAAuF;YACvF,iFAAiF;YACjF,mCAAmC;YACnC,MAAM,CAAC,aAAc,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YAChG,sBAAsB,CAAC,MAAM,CAAC,eAAgB,EAAE,UAAU,CAAC,CAAC;YAC5D,aAAa,EAAE,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,MAAM,CAAC;IAEb,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,UAAU,UAAU,2BAA2B,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAC9B,aAAa,EACb,MAAM,EACN,MAAM,CAAC,aAA2C,EAClD,MAAM,CAAC,eAAgB,EACvB,MAAM,CAAC,eAAgB,CAAC,aAAa,CAAC,cAAc,kBAAkB,IAAI,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,IAAI,EAC5G,kBAAkB,CAAC,MAAM,CAAC,eAAgB,EAAE,UAAU,CAAC,EACvD,IAAI,CACL,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,sBAAsB,CAAC,aAAuB,EAAE,UAAkB;IACzE,aAAa,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,EAAE;QAClE,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,+FAA+F;QAC/F,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;QACD,OAAO,CAAC,IAAI,CACV,UAAU,UAAU,wBAAwB,IAAI,iBAAiB,MAAM,KAAK,KAAK,CAAC,kBAAkB,MAAM;YACxG,iFAAiF,CACpF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAsB,EAAE,IAAY;IACnE,IAAI,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC1C,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,MAAyB,EAAE,UAAkB;IACpE,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;IAE5C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,UAAU,CAAC,2BAA2B,MAAM,CAAC,GAAG,qBAAqB,EAAE;YAC/E,UAAU;YACV,KAAK,EAAE,YAAY;YACnB,OAAO,EACL,iHAAiH;SACpH,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,CAAC,cAAc,mBAAmB,IAAI,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAE5G,IAAI,QAAQ,KAAK,sBAAsB,EAAE,CAAC;QACxC,MAAM,IAAI,UAAU,CAClB,QAAQ;YACN,CAAC,CAAC,kCAAkC,QAAQ,6BAA6B,sBAAsB,GAAG;YAClG,CAAC,CAAC,6BAA6B,MAAM,CAAC,GAAG,6BAA6B,EACxE;YACE,UAAU;YACV,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,QAAQ;gBACf,CAAC,CAAC,4EAA4E;gBAC9E,CAAC,CAAC,2GAA2G,UAAU,KAAK;oBAC1H,iEAAiE;SACtE,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"realm-manager.js","sourceRoot":"","sources":["../../../../../libs/core/src/realm/realm-manager.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@
15
15
  * | --- | --- | --- |
16
16
  * | isolation | namespace, not security | browser-enforced |
17
17
  * | DOM | projected into the host document | stays in its own document |
18
- * | cookies/storage | the host's | its own, partitioned |
18
+ * | cookies/storage | the host's | none: an opaque origin has no cookies, Web Storage or IndexedDB |
19
19
  * | composition | gateway namespaces, piercing, compat facade | none of it applies |
20
20
  *
21
21
  * **Why this is not a `RealmHandle`.** That interface exposes `window`, `document`, `evaluate()`
@@ -65,7 +65,7 @@ export interface SandboxRealm {
65
65
  readonly fragmentId: string;
66
66
  /** The frame element, so a host can size it. Its contents are not reachable from here. */
67
67
  readonly frame: HTMLIFrameElement;
68
- /** The fragment's origin, for pinning every message that crosses. */
68
+ /** The origin the fragment's src names. The frame itself runs in an opaque origin, never this one. */
69
69
  readonly origin: string;
70
70
  /** The host end of the message channel. */
71
71
  readonly port: MessagePort;
@@ -86,10 +86,8 @@ export declare function resolveSandboxTokens(requested: readonly string[] | unde
86
86
  /**
87
87
  * Creates the frame, waits for it to load, and establishes the message channel.
88
88
  *
89
- * The connect handshake is deliberately tolerant of ordering. The frame's `load` event and the
90
- * guest's own script registering its listener race, and which wins depends on cache state — so the
91
- * host posts on load *and* answers a guest that announces itself, and the guest announces itself
92
- * whether or not it has already been posted to. Either order converges; neither has to be the fast
93
- * one.
89
+ * The guest announces itself and the host answers that window with the port. The host listens
90
+ * before the frame is attached, so there is no ordering to race: however fast the guest's script
91
+ * runs, its announcement finds a listener.
94
92
  */
95
93
  export declare function createSandboxRealm(init: SandboxRealmInit): Promise<SandboxRealm>;
@@ -16,7 +16,7 @@ import { BraidError } from '../errors.js';
16
16
  * | --- | --- | --- |
17
17
  * | isolation | namespace, not security | browser-enforced |
18
18
  * | DOM | projected into the host document | stays in its own document |
19
- * | cookies/storage | the host's | its own, partitioned |
19
+ * | cookies/storage | the host's | none: an opaque origin has no cookies, Web Storage or IndexedDB |
20
20
  * | composition | gateway namespaces, piercing, compat facade | none of it applies |
21
21
  *
22
22
  * **Why this is not a `RealmHandle`.** That interface exposes `window`, `document`, `evaluate()`
@@ -45,7 +45,51 @@ export const DEFAULT_SANDBOX_TOKENS = ['allow-scripts', 'allow-forms'];
45
45
  * grant if you need it, and it must be granted deliberately rather than inherited from a broad
46
46
  * "let this fragment navigate" instinct.
47
47
  */
48
- const REFUSED_SANDBOX_TOKENS = new Set(['allow-top-navigation']);
48
+ const TOP_NAVIGATION_HINT = 'use "allow-top-navigation-by-user-activation" if the fragment genuinely needs to navigate the page';
49
+ const REFUSED_SANDBOX_TOKENS = new Map([
50
+ ['allow-top-navigation', TOP_NAVIGATION_HINT],
51
+ ['allow-top-navigation-to-custom-protocols', TOP_NAVIGATION_HINT],
52
+ /**
53
+ * The same navigation by another door: a popup that escapes the sandbox can set
54
+ * `window.opener.top.location` and swap the host page for a lookalike.
55
+ */
56
+ [
57
+ 'allow-popups-to-escape-sandbox',
58
+ '"allow-popups" alone lets the fragment open windows; they stay sandboxed, which is the point',
59
+ ],
60
+ /**
61
+ * The token that turns the sandbox off. With it the frame keeps a real origin: a `javascript:`
62
+ * src, or a navigation to a URL on the host's origin, then runs with the host's own authority.
63
+ * The handshake works without it, so nothing on this tier needs it.
64
+ */
65
+ [
66
+ 'allow-same-origin',
67
+ 'leave it out: the untrusted tier connects from an opaque origin, which is what keeps it isolated',
68
+ ],
69
+ ]);
70
+ /**
71
+ * Every token the HTML standard defines. Anything else is refused rather than passed through: the
72
+ * browser ignores a token it does not know, so a typo would silently grant less than intended — or,
73
+ * as browsers add tokens, silently grant something nobody reviewed.
74
+ */
75
+ const KNOWN_SANDBOX_TOKENS = new Set([
76
+ 'allow-downloads',
77
+ 'allow-forms',
78
+ 'allow-modals',
79
+ 'allow-orientation-lock',
80
+ 'allow-pointer-lock',
81
+ 'allow-popups',
82
+ 'allow-popups-to-escape-sandbox',
83
+ 'allow-presentation',
84
+ 'allow-same-origin',
85
+ 'allow-scripts',
86
+ 'allow-storage-access-by-user-activation',
87
+ 'allow-top-navigation',
88
+ 'allow-top-navigation-by-user-activation',
89
+ 'allow-top-navigation-to-custom-protocols',
90
+ ]);
91
+ /** Loopback hosts, where plain `http:` is how local development serves a second origin. */
92
+ const LOOPBACK_HOSTS = new Set(['localhost', '127.0.0.1', '[::1]']);
49
93
  const LOAD_TIMEOUT_MS = 15_000;
50
94
  /**
51
95
  * Refuses a same-origin URL for the untrusted tier.
@@ -69,6 +113,20 @@ export function assertCrossOrigin(src, fragmentId) {
69
113
  fixHint: 'untrusted fragments are addressed by absolute url, e.g. src="https://vendor.example.com/widget"',
70
114
  });
71
115
  }
116
+ /**
117
+ * Only a network scheme can name another origin. `javascript:`, `data:` and `blob:` have an
118
+ * opaque origin, which never equals the host's, so the comparison below would wave them through
119
+ * — and a `javascript:` src in a frame granted `allow-same-origin` runs in the host's origin.
120
+ */
121
+ const secure = url.protocol === 'https:';
122
+ const loopback = url.protocol === 'http:' && LOOPBACK_HOSTS.has(url.hostname);
123
+ if (!secure && !loopback) {
124
+ throw new BraidError(`the untrusted tier loads fragments over https, and "${src}" is not an https url`, {
125
+ fragmentId,
126
+ stage: 'slot-config',
127
+ fixHint: 'serve the fragment from its own https origin; plain http is accepted only on localhost',
128
+ });
129
+ }
72
130
  if (url.origin === location.origin) {
73
131
  throw new BraidError(`the untrusted tier requires a cross-origin url, and "${url.origin}" is this host's origin`, {
74
132
  fragmentId,
@@ -82,12 +140,23 @@ export function assertCrossOrigin(src, fragmentId) {
82
140
  /** Resolves the sandbox token list, refusing the ones that would undo the sandbox. */
83
141
  export function resolveSandboxTokens(requested = [], fragmentId) {
84
142
  const tokens = new Set(DEFAULT_SANDBOX_TOKENS);
85
- for (const token of requested) {
86
- if (REFUSED_SANDBOX_TOKENS.has(token)) {
143
+ // The browser splits the attribute on whitespace and matches tokens case-insensitively, so this
144
+ // must too — or "ALLOW-TOP-NAVIGATION" and "allow-popups allow-top-navigation" slip past.
145
+ const normalized = requested.flatMap((entry) => String(entry).toLowerCase().split(/\s+/).filter(Boolean));
146
+ for (const token of normalized) {
147
+ if (!KNOWN_SANDBOX_TOKENS.has(token)) {
148
+ throw new BraidError(`"${token}" is not a sandbox token`, {
149
+ fragmentId,
150
+ stage: 'slot-config',
151
+ fixHint: 'sandbox tokens are the allow-* keywords the HTML standard defines, e.g. "allow-popups"',
152
+ });
153
+ }
154
+ const refusal = REFUSED_SANDBOX_TOKENS.get(token);
155
+ if (refusal !== undefined) {
87
156
  throw new BraidError(`the sandbox token "${token}" is never granted to an untrusted fragment`, {
88
157
  fragmentId,
89
158
  stage: 'slot-config',
90
- fixHint: `use "${token}-by-user-activation" if the fragment genuinely needs to navigate the page`,
159
+ fixHint: refusal,
91
160
  });
92
161
  }
93
162
  tokens.add(token);
@@ -97,11 +166,9 @@ export function resolveSandboxTokens(requested = [], fragmentId) {
97
166
  /**
98
167
  * Creates the frame, waits for it to load, and establishes the message channel.
99
168
  *
100
- * The connect handshake is deliberately tolerant of ordering. The frame's `load` event and the
101
- * guest's own script registering its listener race, and which wins depends on cache state — so the
102
- * host posts on load *and* answers a guest that announces itself, and the guest announces itself
103
- * whether or not it has already been posted to. Either order converges; neither has to be the fast
104
- * one.
169
+ * The guest announces itself and the host answers that window with the port. The host listens
170
+ * before the frame is attached, so there is no ordering to race: however fast the guest's script
171
+ * runs, its announcement finds a listener.
105
172
  */
106
173
  export async function createSandboxRealm(init) {
107
174
  const { fragmentId, src, container, signal } = init;
@@ -109,7 +176,9 @@ export async function createSandboxRealm(init) {
109
176
  const tokens = resolveSandboxTokens(init.sandboxTokens, fragmentId);
110
177
  const instance = `${fragmentId}:${Date.now().toString(36)}`;
111
178
  const frame = document.createElement('iframe');
112
- frame.src = src;
179
+ // The absolute URL that was checked, not the string: `src` would resolve against
180
+ // `document.baseURI`, which a `<base>` element can point somewhere `location.href` does not.
181
+ frame.src = new URL(src, location.href).href;
113
182
  frame.setAttribute('sandbox', tokens.join(' '));
114
183
  frame.setAttribute('part', 'frame');
115
184
  frame.style.cssText = 'display:block;border:0;width:100%;height:100%';
@@ -125,53 +194,50 @@ export async function createSandboxRealm(init) {
125
194
  if ('credentialless' in HTMLIFrameElement.prototype) {
126
195
  frame.setAttribute('credentialless', '');
127
196
  }
128
- container.append(frame);
129
197
  const channel = new MessageChannel();
130
198
  const dispose = () => {
131
199
  channel.port1.close();
132
200
  frame.remove();
133
201
  };
134
202
  signal.addEventListener('abort', dispose, { once: true });
135
- const post = () => {
136
- const message = { braid: SANDBOX_CONNECT, v: 1, fragmentId, instance };
137
- /**
138
- * The target origin is the fragment's exact origin, never `'*'`.
139
- *
140
- * With `'*'` the port would be delivered to whatever document happens to occupy the frame — and
141
- * an untrusted fragment that navigated itself elsewhere between load and this call would hand a
142
- * live channel into the host to a document nobody vetted.
143
- */
144
- frame.contentWindow?.postMessage(message, origin, [channel.port2]);
145
- };
146
203
  const { promise, resolve, reject } = Promise.withResolvers();
147
204
  let connected = false;
205
+ /**
206
+ * The guest speaks first, and the host answers that window and no other.
207
+ *
208
+ * A sandboxed frame without `allow-same-origin` has an opaque origin. A message targeted at the
209
+ * fragment's origin is never delivered to it, and its own messages arrive with origin `"null"`.
210
+ * The origin cannot identify it, so the window does: `event.source` is set by the browser, and
211
+ * only this frame's window can be `frame.contentWindow`. The reply goes to that window with `'*'`,
212
+ * the only target an opaque origin accepts. It reaches whichever document the frame holds when it
213
+ * arrives, which is the one that asked unless the frame navigated in between. Only the frame
214
+ * itself can navigate it, so any document it lands on is the vendor's choice and as trusted as the
215
+ * vendor.
216
+ */
148
217
  const onWindowMessage = (event) => {
149
- // Origin-pinned inbound as well as outbound: a `braid:ready` from any other origin is some
150
- // other page on the tab talking, and must not cause the host to hand out a port.
151
- if (event.origin !== origin)
218
+ if (event.source === null || event.source !== frame.contentWindow)
219
+ return;
220
+ if (event.origin !== 'null')
152
221
  return;
153
222
  if (event.data?.braid !== SANDBOX_READY)
154
223
  return;
155
224
  if (connected)
156
225
  return;
157
226
  connected = true;
158
- post();
227
+ const message = { braid: SANDBOX_CONNECT, v: 1, fragmentId, instance };
228
+ event.source.postMessage(message, '*', [channel.port2]);
159
229
  resolve();
160
230
  };
231
+ // Listening before the frame exists, so a guest that announces itself at once is not missed.
161
232
  window.addEventListener('message', onWindowMessage);
162
- const onLoad = () => {
163
- if (connected)
164
- return;
165
- connected = true;
166
- post();
167
- resolve();
168
- };
169
- frame.addEventListener('load', onLoad, { once: true });
233
+ container.append(frame);
170
234
  const timeout = setTimeout(() => {
171
- reject(new BraidError(`the untrusted fragment at "${src}" did not load within ${init.loadTimeoutMs ?? LOAD_TIMEOUT_MS}ms`, {
235
+ reject(new BraidError(`the untrusted fragment at "${src}" did not connect within ${init.loadTimeoutMs ?? LOAD_TIMEOUT_MS}ms`, {
172
236
  fragmentId,
173
- stage: 'realm-boot',
174
- fixHint: 'check the url, and that the fragment origin does not refuse framing via X-Frame-Options or CSP frame-ancestors',
237
+ stage: 'handshake',
238
+ fixHint: `the fragment must call connectToBraidHost({ hostOrigin: '${location.origin}' }). Its frame runs in an opaque ` +
239
+ 'origin, so its module scripts need Access-Control-Allow-Origin. Also check that its origin does not refuse ' +
240
+ 'framing via X-Frame-Options or CSP frame-ancestors',
175
241
  }));
176
242
  }, init.loadTimeoutMs ?? LOAD_TIMEOUT_MS);
177
243
  try {
@@ -180,7 +246,6 @@ export async function createSandboxRealm(init) {
180
246
  finally {
181
247
  clearTimeout(timeout);
182
248
  window.removeEventListener('message', onWindowMessage);
183
- frame.removeEventListener('load', onLoad);
184
249
  }
185
250
  return {
186
251
  kind: 'sandbox',
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox-realm.js","sourceRoot":"","sources":["../../../../../libs/core/src/realm/sandbox-realm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sandbox-realm.js","sourceRoot":"","sources":["../../../../../libs/core/src/realm/sandbox-realm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Braid's own writes into the sinks Trusted Types guards, for a host page that enforces them
3
+ * (`require-trusted-types-for 'script'`).
4
+ *
5
+ * The runtime writes to a handful of sinks itself: it parses the markup the gateway prepared, it
6
+ * marks a script as already started by giving it a line of text, and the opt-in HTML policy
7
+ * parses a fragment's write into an inert document before cleaning it. Under enforcement each of
8
+ * those needs a trusted value, so they go through one policy, named `braid`, which a host lists in
9
+ * its `trusted-types` directive.
10
+ *
11
+ * The policy passes values through unchanged, which is why it is never exported: only these call
12
+ * sites can reach it, and each one either writes something Braid authored or parses into a
13
+ * document where nothing runs. Everything a fragment writes itself still meets the host's own
14
+ * enforcement — which is the point of turning it on.
15
+ *
16
+ * Created on first use, in whichever realm the write happens: a realm document inherits the host's
17
+ * policy, and a trusted value is checked against the realm that writes it.
18
+ */
19
+ /** Markup Braid parses: the gateway's prepared document, or a write it is about to clean. */
20
+ export declare function trustedHTML(markup: string, realm?: object): string;
21
+ /** Script text Braid writes itself. */
22
+ export declare function trustedScript(source: string, realm?: object): string;
23
+ /**
24
+ * Creates the host's policy now, if the page has Trusted Types. Called by `initBraid`, before any
25
+ * fragment code runs: what the host's directive grants is the name `braid`, so it must be Braid's
26
+ * before anything else on the page can create it.
27
+ */
28
+ export declare function claimBraidPolicy(): void;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Braid's own writes into the sinks Trusted Types guards, for a host page that enforces them
3
+ * (`require-trusted-types-for 'script'`).
4
+ *
5
+ * The runtime writes to a handful of sinks itself: it parses the markup the gateway prepared, it
6
+ * marks a script as already started by giving it a line of text, and the opt-in HTML policy
7
+ * parses a fragment's write into an inert document before cleaning it. Under enforcement each of
8
+ * those needs a trusted value, so they go through one policy, named `braid`, which a host lists in
9
+ * its `trusted-types` directive.
10
+ *
11
+ * The policy passes values through unchanged, which is why it is never exported: only these call
12
+ * sites can reach it, and each one either writes something Braid authored or parses into a
13
+ * document where nothing runs. Everything a fragment writes itself still meets the host's own
14
+ * enforcement — which is the point of turning it on.
15
+ *
16
+ * Created on first use, in whichever realm the write happens: a realm document inherits the host's
17
+ * policy, and a trusted value is checked against the realm that writes it.
18
+ */
19
+ const POLICY_NAME = 'braid';
20
+ const policies = new WeakMap();
21
+ function policyFor(realm) {
22
+ if (policies.has(realm))
23
+ return policies.get(realm) ?? null;
24
+ const factory = realm.trustedTypes;
25
+ let policy = null;
26
+ if (factory) {
27
+ try {
28
+ const same = (input) => input;
29
+ policy = factory.createPolicy(POLICY_NAME, { createHTML: same, createScript: same });
30
+ }
31
+ catch (error) {
32
+ // Not listed in the host's `trusted-types` directive, or the name already taken — by a second
33
+ // copy of the runtime, or by script that ran first. Writes go as plain strings and enforcement
34
+ // reports them; the warning says which.
35
+ console.warn(`[braid] could not create the "${POLICY_NAME}" Trusted Types policy: ${error?.message ?? error}`);
36
+ policy = null;
37
+ }
38
+ }
39
+ policies.set(realm, policy);
40
+ return policy;
41
+ }
42
+ /** Markup Braid parses: the gateway's prepared document, or a write it is about to clean. */
43
+ export function trustedHTML(markup, realm = globalThis) {
44
+ return policyFor(realm)?.createHTML(markup) ?? markup;
45
+ }
46
+ /** Script text Braid writes itself. */
47
+ export function trustedScript(source, realm = globalThis) {
48
+ return policyFor(realm)?.createScript(source) ?? source;
49
+ }
50
+ /**
51
+ * Creates the host's policy now, if the page has Trusted Types. Called by `initBraid`, before any
52
+ * fragment code runs: what the host's directive grants is the name `braid`, so it must be Braid's
53
+ * before anything else on the page can create it.
54
+ */
55
+ export function claimBraidPolicy() {
56
+ policyFor(globalThis);
57
+ }
58
+ //# sourceMappingURL=trusted-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trusted-types.js","sourceRoot":"","sources":["../../../../libs/core/src/trusted-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAWH,MAAM,WAAW,GAAG,OAAO,CAAC;AAC5B,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAoC,CAAC;AAEjE,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAC5D,MAAM,OAAO,GAAI,KAA4B,CAAC,YAAY,CAAC;IAC3D,IAAI,MAAM,GAA6B,IAAI,CAAC;IAC5C,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC;YACtC,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACvF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,8FAA8F;YAC9F,+FAA+F;YAC/F,wCAAwC;YACxC,OAAO,CAAC,IAAI,CAAC,iCAAiC,WAAW,2BAA4B,KAAe,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;YAC1H,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,QAAgB,UAAU;IACpE,OAAQ,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,MAAM,CAAwB,IAAI,MAAM,CAAC;AAChF,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,QAAgB,UAAU;IACtE,OAAQ,SAAS,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,MAAM,CAAwB,IAAI,MAAM,CAAC;AAClF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAC9B,SAAS,CAAC,UAAU,CAAC,CAAC;AACxB,CAAC"}