@braidlabs/core 0.6.0 → 0.7.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 (75) hide show
  1. package/package.json +1 -1
  2. package/src/adapters/adapter.d.ts +11 -0
  3. package/src/adapters/adapter.js.map +1 -1
  4. package/src/adapters/compat-adapter.js +2 -2
  5. package/src/adapters/compat-adapter.js.map +1 -1
  6. package/src/compat/born-inert-scripts.d.ts +2 -0
  7. package/src/compat/born-inert-scripts.js +39 -0
  8. package/src/compat/born-inert-scripts.js.map +1 -1
  9. package/src/compat/cookie-partition.d.ts +25 -0
  10. package/src/compat/cookie-partition.js +79 -0
  11. package/src/compat/cookie-partition.js.map +1 -0
  12. package/src/compat/document-member-classification.js +3 -2
  13. package/src/compat/document-member-classification.js.map +1 -1
  14. package/src/compat/document-overrides.d.ts +6 -6
  15. package/src/compat/document-overrides.js +23 -0
  16. package/src/compat/document-overrides.js.map +1 -1
  17. package/src/compat/fragment-boundary.d.ts +5 -0
  18. package/src/compat/fragment-boundary.js +291 -36
  19. package/src/compat/fragment-boundary.js.map +1 -1
  20. package/src/compat/html-policy.d.ts +50 -0
  21. package/src/compat/html-policy.js +155 -0
  22. package/src/compat/html-policy.js.map +1 -0
  23. package/src/compat/realm-patches.d.ts +2 -1
  24. package/src/compat/realm-patches.js +117 -3
  25. package/src/compat/realm-patches.js.map +1 -1
  26. package/src/compat/script-execution.d.ts +24 -0
  27. package/src/compat/script-execution.js +177 -10
  28. package/src/compat/script-execution.js.map +1 -1
  29. package/src/compat/storage-partition.d.ts +47 -0
  30. package/src/compat/storage-partition.js +291 -0
  31. package/src/compat/storage-partition.js.map +1 -0
  32. package/src/compat/subresource-urls.d.ts +41 -0
  33. package/src/compat/subresource-urls.js +133 -0
  34. package/src/compat/subresource-urls.js.map +1 -0
  35. package/src/config.d.ts +28 -0
  36. package/src/config.js +24 -0
  37. package/src/config.js.map +1 -1
  38. package/src/elements/boot-gate.d.ts +47 -0
  39. package/src/elements/boot-gate.js +207 -0
  40. package/src/elements/boot-gate.js.map +1 -0
  41. package/src/elements/fragment-slot.d.ts +62 -15
  42. package/src/elements/fragment-slot.js +388 -26
  43. package/src/elements/fragment-slot.js.map +1 -1
  44. package/src/elements/late-content.d.ts +44 -0
  45. package/src/elements/late-content.js +107 -0
  46. package/src/elements/late-content.js.map +1 -0
  47. package/src/elements/prefetch.d.ts +27 -0
  48. package/src/elements/prefetch.js +100 -0
  49. package/src/elements/prefetch.js.map +1 -0
  50. package/src/elements/prerequisites.d.ts +42 -0
  51. package/src/elements/prerequisites.js +133 -0
  52. package/src/elements/prerequisites.js.map +1 -0
  53. package/src/elements/recovery.d.ts +46 -0
  54. package/src/elements/recovery.js +59 -0
  55. package/src/elements/recovery.js.map +1 -0
  56. package/src/env/create-env.js +2 -1
  57. package/src/env/create-env.js.map +1 -1
  58. package/src/env/fragment-env.d.ts +6 -0
  59. package/src/errors.d.ts +4 -1
  60. package/src/errors.js +2 -0
  61. package/src/errors.js.map +1 -1
  62. package/src/index.d.ts +5 -1
  63. package/src/index.js +11 -1
  64. package/src/index.js.map +1 -1
  65. package/src/realm/realm-manager.js +23 -0
  66. package/src/realm/realm-manager.js.map +1 -1
  67. package/src/weave/capabilities.d.ts +35 -7
  68. package/src/weave/capabilities.js +17 -0
  69. package/src/weave/capabilities.js.map +1 -1
  70. package/src/weave/guest.d.ts +2 -0
  71. package/src/weave/guest.js +2 -1
  72. package/src/weave/guest.js.map +1 -1
  73. package/src/weave/messages.d.ts +24 -0
  74. package/src/weave/messages.js +22 -0
  75. package/src/weave/messages.js.map +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@braidlabs/core",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
4
4
  "description": "Braid client runtime — compose independently deployed frontend apps into one page. This build ships the compat adapter (the contained web-fragments-style emulation layer) as the default adapter.",
5
5
  "keywords": [
6
6
  "micro-frontends",
@@ -1,3 +1,4 @@
1
+ import type { HtmlPolicyMode } from '../compat/html-policy.js';
1
2
  import { FragmentEnv } from '../env/fragment-env.js';
2
3
  import { RealmHandle, RealmKind } from '../realm/realm-manager.js';
3
4
  /**
@@ -57,6 +58,16 @@ export interface AdapterBootContext {
57
58
  * sharing needs a same-origin realm, and the contract adapter's host API is the contract itself.
58
59
  */
59
60
  sharedGlobals?: readonly string[];
61
+ /**
62
+ * The Web Storage partition this fragment reads and writes, already resolved from its
63
+ * capabilities; absent for the shared, host-origin store. Read by the compat adapter only.
64
+ */
65
+ storagePartition?: string;
66
+ /**
67
+ * The fragment's HTML sink policy, already resolved from its capabilities; absent for none. Read
68
+ * by the compat adapter only.
69
+ */
70
+ htmlPolicy?: HtmlPolicyMode;
60
71
  /**
61
72
  * Values the host's `realmGlobals` hook gave this fragment, already resolved. Installed by the
62
73
  * compat and custom-element adapters before the fragment's code runs.
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../../libs/core/src/adapters/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AA+F1C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AAExC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA4B,CAAC;AAE9D,MAAM,UAAU,cAAc,CAAC,OAAyB;IACtD,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAA+B,EAAE,UAAkB;IAChF,MAAM,WAAW,GAAG,IAAI,IAAI,eAAe,CAAC;IAC5C,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,UAAU,CAAC,qBAAqB,WAAW,+BAA+B,EAAE;YACpF,UAAU;YACV,KAAK,EAAE,oBAAoB;YAC3B,OAAO,EACL,WAAW,KAAK,eAAe;gBAC7B,CAAC,CAAC,kGAAkG;gBACpG,CAAC,CAAC,2MAA2M,WAAW,GAAG;SAChO,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,sBAAsB;IACpC,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../../libs/core/src/adapters/adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAyG1C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AAExC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA4B,CAAC;AAE9D,MAAM,UAAU,cAAc,CAAC,OAAyB;IACtD,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAA+B,EAAE,UAAkB;IAChF,MAAM,WAAW,GAAG,IAAI,IAAI,eAAe,CAAC;IAC5C,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,UAAU,CAAC,qBAAqB,WAAW,+BAA+B,EAAE;YACpF,UAAU;YACV,KAAK,EAAE,oBAAoB;YAC3B,OAAO,EACL,WAAW,KAAK,eAAe;gBAC7B,CAAC,CAAC,kGAAkG;gBACpG,CAAC,CAAC,2MAA2M,WAAW,GAAG;SAChO,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,sBAAsB;IACpC,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC5B,CAAC"}
@@ -21,7 +21,7 @@ export const compatAdapter = {
21
21
  realmKind: 'compat-http',
22
22
  installsRealmGlobals: true,
23
23
  async boot(ctx) {
24
- const { fragmentId, shadowRoot, contentRoot, realm, html, pierced, bound, sharedGlobals, realmGlobals, signal } = ctx;
24
+ const { fragmentId, shadowRoot, contentRoot, realm, html, pierced, bound, sharedGlobals, storagePartition, htmlPolicy, realmGlobals, signal } = ctx;
25
25
  const fragmentShadowRoot = Object.assign(shadowRoot, {
26
26
  [compatMetadataSymbol]: { documentReadyState: 'loading' },
27
27
  });
@@ -41,7 +41,7 @@ export const compatAdapter = {
41
41
  signal.addEventListener('abort', () => fragmentAbortController.abort(), { once: true });
42
42
  // Install the full compat illusion onto the realm (window patches, document facade,
43
43
  // boundary stamping, born-inert scripts).
44
- const realmContext = initializeRealmContext(realm, fragmentShadowRoot, contentRoot, bound, fragmentAbortController, sharedGlobals ?? []);
44
+ const realmContext = initializeRealmContext(realm, fragmentShadowRoot, contentRoot, bound, fragmentAbortController, sharedGlobals ?? [], storagePartition, htmlPolicy);
45
45
  // after the realm patches, so a name they define is not replaced; before any fragment script
46
46
  if (realmGlobals)
47
47
  installRealmGlobals(realm.window, realmGlobals, fragmentId);
@@ -1 +1 @@
1
- {"version":3,"file":"compat-adapter.js","sourceRoot":"","sources":["../../../../../libs/core/src/adapters/compat-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compat-adapter.js","sourceRoot":"","sources":["../../../../../libs/core/src/adapters/compat-adapter.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,8 @@
12
12
  * `data-script-type` attribute (the same attribute the gateway uses when neutralizing SSR
13
13
  * content). The shadowing own-properties are removed before the script is activated.
14
14
  */
15
+ export declare function markRunnable(script: HTMLScriptElement): void;
16
+ export declare function isRunnable(script: HTMLScriptElement): boolean;
15
17
  export declare function makeScriptBornInert(script: HTMLScriptElement): void;
16
18
  export declare function isBornInertScript(script: HTMLScriptElement): boolean;
17
19
  /**
@@ -16,9 +16,36 @@ const nativeSetAttribute = Element.prototype.setAttribute;
16
16
  const nativeGetAttribute = Element.prototype.getAttribute;
17
17
  const nativeRemoveAttribute = Element.prototype.removeAttribute;
18
18
  const bornInertScripts = new WeakSet();
19
+ /**
20
+ * The scripts that may run in a fragment's realm at all: provenance, not markers.
21
+ *
22
+ * A marker — `type="inert"`, `data-script-type` — is an attribute, and markup can forge attributes.
23
+ * And a `<script>` that markup produced through any parser sink (`innerHTML`, `outerHTML`,
24
+ * `setHTMLUnsafe`, a template's content, `DOMParser`) is one the browser never runs. So a script
25
+ * runs only if one of these made it:
26
+ *
27
+ * - the fragment's own `document.createElement('script')`, which makes it born inert;
28
+ * - the gateway, whose prepared content is in the fragment's DOM when its boundary is created;
29
+ * - a clone, through the boundary, of one of these that has not run yet.
30
+ *
31
+ * Everything else stays neutralized, however it reaches the DOM. Membership outlives the born-inert
32
+ * shadowing, which is removed when the script is activated.
33
+ */
34
+ const runnableScripts = new WeakSet();
35
+ export function markRunnable(script) {
36
+ runnableScripts.add(script);
37
+ }
38
+ export function isRunnable(script) {
39
+ return runnableScripts.has(script);
40
+ }
19
41
  export function makeScriptBornInert(script) {
20
42
  nativeSetAttribute.call(script, 'type', 'inert');
21
43
  bornInertScripts.add(script);
44
+ runnableScripts.add(script);
45
+ shadowType(script);
46
+ }
47
+ /** Reads and writes of `type` go to `data-script-type`, so the element itself stays inert. */
48
+ function shadowType(script) {
22
49
  Object.defineProperties(script, {
23
50
  type: {
24
51
  configurable: true,
@@ -44,6 +71,13 @@ export function makeScriptBornInert(script) {
44
71
  return nativeGetAttribute.call(this, String(name).toLowerCase() === 'type' ? 'data-script-type' : name);
45
72
  },
46
73
  },
74
+ removeAttribute: {
75
+ configurable: true,
76
+ writable: true,
77
+ value: function removeAttribute(name) {
78
+ return nativeRemoveAttribute.call(this, String(name).toLowerCase() === 'type' ? 'data-script-type' : name);
79
+ },
80
+ },
47
81
  });
48
82
  }
49
83
  export function isBornInertScript(script) {
@@ -61,7 +95,12 @@ export function removeBornInertShadowing(script) {
61
95
  delete script.type;
62
96
  delete script.setAttribute;
63
97
  delete script.getAttribute;
98
+ delete script.removeAttribute;
64
99
  bornInertScripts.delete(script);
100
+ // A script whose own code set its type to `inert` (a library copying attributes from a script it
101
+ // found) is a data block that only looks like Braid's marker: it never runs, as natively.
102
+ if (nativeGetAttribute.call(script, 'data-script-type')?.trim().toLowerCase() === 'inert')
103
+ runnableScripts.delete(script);
65
104
  }
66
105
  /**
67
106
  * Fully reverts a born-inert script to the live form the application intended (real `type`
@@ -1 +1 @@
1
- {"version":3,"file":"born-inert-scripts.js","sourceRoot":"","sources":["../../../../../libs/core/src/compat/born-inert-scripts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC;AAC1D,MAAM,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC;AAC1D,MAAM,qBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC;AAEhE,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAqB,CAAC;AAE1D,MAAM,UAAU,mBAAmB,CAAC,MAAyB;IAC3D,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE7B,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE;QAC9B,IAAI,EAAE;YACJ,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,IAAI;YAChB,GAAG;gBACD,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE,CAAC;YACjE,CAAC;YACD,GAAG,CAAC,KAAa;gBACf,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,CAAC;SACF;QACD,YAAY,EAAE;YACZ,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,SAAS,YAAY,CAAC,IAAY,EAAE,KAAa;gBACtD,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACjH,CAAC;SACF;QACD,YAAY,EAAE;YACZ,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,SAAS,YAAY,CAAC,IAAY;gBACvC,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1G,CAAC;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,OAAO,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAyB;IAChE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO;IAC1C,OAAQ,MAAc,CAAC,IAAI,CAAC;IAC5B,OAAQ,MAAc,CAAC,YAAY,CAAC;IACpC,OAAQ,MAAc,CAAC,YAAY,CAAC;IACpC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAyB;IACnE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO;IAC1C,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACrE,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACvD,IAAI,QAAQ,EAAE,CAAC;QACb,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"born-inert-scripts.js","sourceRoot":"","sources":["../../../../../libs/core/src/compat/born-inert-scripts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * `document.cookie` for a partitioned fragment: the realm's view of the cookies the gateway scopes.
3
+ *
4
+ * The gateway renames a partitioned fragment's cookies on the way out (`session` becomes
5
+ * `braid$<partition>$session`) and back on the way in — see `@braidlabs/gateway`'s
6
+ * `cookie-scope.ts`, which this mirrors. Without the same view here, a script-readable cookie the
7
+ * fragment's backend set (a CSRF token the fragment echoes in a header, an OIDC client's
8
+ * cookie-mode state) would show up renamed and be lost to the fragment's own code; and a cookie the
9
+ * fragment writes from script would land unscoped, where every other fragment can read and
10
+ * overwrite it.
11
+ *
12
+ * Reads return the partition's cookies under their own names plus the host's unscoped ones; writes
13
+ * go into the partition. Another partition's cookies are never visible. The encoding is duplicated
14
+ * from the gateway (the two packages share no modules); e2e/cookie-scope.e2e.ts holds them together.
15
+ */
16
+ /** `braid$<partition>$`, percent-encoded into a cookie-name token. Same as the gateway's. */
17
+ export declare function cookieScopePrefix(partition: string): string;
18
+ export interface CookieAccessor {
19
+ get(): string;
20
+ set(value: string): void;
21
+ }
22
+ /** Wraps the realm document's native cookie accessor in the partition's view. */
23
+ export declare function partitionCookie(native: CookieAccessor, partition: string): CookieAccessor;
24
+ /** The realm document's own `cookie` accessor, captured before the facade replaces its prototype. */
25
+ export declare function nativeCookieAccessor(realmDocument: Document): CookieAccessor;
@@ -0,0 +1,79 @@
1
+ /**
2
+ * `document.cookie` for a partitioned fragment: the realm's view of the cookies the gateway scopes.
3
+ *
4
+ * The gateway renames a partitioned fragment's cookies on the way out (`session` becomes
5
+ * `braid$<partition>$session`) and back on the way in — see `@braidlabs/gateway`'s
6
+ * `cookie-scope.ts`, which this mirrors. Without the same view here, a script-readable cookie the
7
+ * fragment's backend set (a CSRF token the fragment echoes in a header, an OIDC client's
8
+ * cookie-mode state) would show up renamed and be lost to the fragment's own code; and a cookie the
9
+ * fragment writes from script would land unscoped, where every other fragment can read and
10
+ * overwrite it.
11
+ *
12
+ * Reads return the partition's cookies under their own names plus the host's unscoped ones; writes
13
+ * go into the partition. Another partition's cookies are never visible. The encoding is duplicated
14
+ * from the gateway (the two packages share no modules); e2e/cookie-scope.e2e.ts holds them together.
15
+ */
16
+ const SCOPE_MARK = 'braid$';
17
+ const BROWSER_PREFIXES = ['__Host-', '__Secure-'];
18
+ /** `braid$<partition>$`, percent-encoded into a cookie-name token. Same as the gateway's. */
19
+ export function cookieScopePrefix(partition) {
20
+ const encoded = encodeURIComponent(partition).replace(/[()]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
21
+ return `${SCOPE_MARK}${encoded}$`;
22
+ }
23
+ /** Splits off a `__Host-`/`__Secure-` prefix, matched without regard to case as browsers do. */
24
+ function splitBrowserPrefix(name) {
25
+ const prefix = BROWSER_PREFIXES.find((candidate) => name.toLowerCase().startsWith(candidate.toLowerCase()));
26
+ return prefix ? [name.slice(0, prefix.length), name.slice(prefix.length)] : ['', name];
27
+ }
28
+ /** Wraps the realm document's native cookie accessor in the partition's view. */
29
+ export function partitionCookie(native, partition) {
30
+ const own = cookieScopePrefix(partition);
31
+ return {
32
+ get() {
33
+ const mine = [];
34
+ const mineNames = new Set();
35
+ const host = [];
36
+ for (const part of native.get().split(';')) {
37
+ const cookie = part.trim();
38
+ if (!cookie)
39
+ continue;
40
+ const separator = cookie.indexOf('=');
41
+ const rawName = separator === -1 ? cookie : cookie.slice(0, separator);
42
+ const rest = separator === -1 ? '' : cookie.slice(separator);
43
+ const [browserPrefix, name] = splitBrowserPrefix(rawName);
44
+ if (name.startsWith(own)) {
45
+ const ownName = `${browserPrefix}${name.slice(own.length)}`;
46
+ mine.push(`${ownName}${rest}`);
47
+ mineNames.add(ownName);
48
+ }
49
+ else if (!name.startsWith(SCOPE_MARK)) {
50
+ host.push({ name: rawName, cookie });
51
+ }
52
+ }
53
+ // the fragment's own cookie wins over a host cookie of the same name, as at its backend
54
+ return [...mine, ...host.filter(({ name }) => !mineNames.has(name)).map(({ cookie }) => cookie)].join('; ');
55
+ },
56
+ set(value) {
57
+ const [pair, ...attributes] = String(value).split(';');
58
+ const separator = pair.indexOf('=');
59
+ if (separator <= 0)
60
+ return;
61
+ const [browserPrefix, name] = splitBrowserPrefix(pair.slice(0, separator).trim());
62
+ const kept = attributes
63
+ .map((attribute) => attribute.trim())
64
+ .filter((attribute) => attribute !== '' && !/^(domain|path)\s*(=|$)/i.test(attribute));
65
+ native.set([`${browserPrefix}${own}${name}=${pair.slice(separator + 1)}`, 'Path=/', ...kept].join('; '));
66
+ },
67
+ };
68
+ }
69
+ /** The realm document's own `cookie` accessor, captured before the facade replaces its prototype. */
70
+ export function nativeCookieAccessor(realmDocument) {
71
+ for (let object = realmDocument; object; object = Object.getPrototypeOf(object)) {
72
+ const descriptor = Object.getOwnPropertyDescriptor(object, 'cookie');
73
+ if (descriptor?.get && descriptor.set) {
74
+ return { get: () => descriptor.get.call(realmDocument), set: (value) => descriptor.set.call(realmDocument, value) };
75
+ }
76
+ }
77
+ throw new Error('braid: this browser has no document.cookie');
78
+ }
79
+ //# sourceMappingURL=cookie-partition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie-partition.js","sourceRoot":"","sources":["../../../../../libs/core/src/compat/cookie-partition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,UAAU,GAAG,QAAQ,CAAC;AAC5B,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,WAAW,CAAU,CAAC;AAE3D,6FAA6F;AAC7F,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACxH,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,CAAC;AACpC,CAAC;AAED,gGAAgG;AAChG,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC5G,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACzF,CAAC;AAOD,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAAC,MAAsB,EAAE,SAAiB;IACvE,MAAM,GAAG,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAEzC,OAAO;QACL,GAAG;YACD,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;YACpC,MAAM,IAAI,GAAuC,EAAE,CAAC;YACpD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC3B,IAAI,CAAC,MAAM;oBAAE,SAAS;gBACtB,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,OAAO,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBACvE,MAAM,IAAI,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC7D,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,GAAG,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5D,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC;oBAC/B,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC;qBAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBACxC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YACD,wFAAwF;YACxF,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9G,CAAC;QAED,GAAG,CAAC,KAAK;YACP,MAAM,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,SAAS,IAAI,CAAC;gBAAE,OAAO;YAC3B,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAClF,MAAM,IAAI,GAAG,UAAU;iBACpB,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;iBACpC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACzF,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3G,CAAC;KACF,CAAC;AACJ,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,oBAAoB,CAAC,aAAuB;IAC1D,KAAK,IAAI,MAAM,GAAkB,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/F,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrE,IAAI,UAAU,EAAE,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;YACtC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,GAAI,CAAC,IAAI,CAAC,aAAa,CAAW,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,GAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;QAClI,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;AAChE,CAAC"}
@@ -44,9 +44,10 @@ export const documentMemberClassification = {
44
44
  createRange: 'virtualized',
45
45
  createTextNode: 'virtualized',
46
46
  createTreeWalker: 'virtualized',
47
+ // the realm is same-origin, so it shares the cookie jar; a partitioned fragment (capabilities.storage)
48
+ // gets a scoped view of it instead (cookie-partition.ts), and a shared one the native jar
49
+ cookie: 'virtualized',
47
50
  // --- native: audited, the realm document's native behavior is correct for fragments ---
48
- // the compat realm iframe is same-origin with the main document, so it shares the cookie jar
49
- cookie: 'native',
50
51
  // fragments must see the fragment's window (the realm iframe's window), not the main window
51
52
  defaultView: 'native',
52
53
  // the realm iframe's src is set to the fragment's url, so url-related members are correct natively
@@ -1 +1 @@
1
- {"version":3,"file":"document-member-classification.js","sourceRoot":"","sources":["../../../../../libs/core/src/compat/document-member-classification.ts"],"names":[],"mappings":"AA8BA,MAAM,CAAC,MAAM,4BAA4B,GAA2D;IAClG,qFAAqF;IAErF,8BAA8B;IAC9B,KAAK,EAAE,aAAa;IACpB,UAAU,EAAE,aAAa;IACzB,aAAa,EAAE,aAAa;IAC5B,aAAa,EAAE,aAAa;IAE5B,SAAS;IACT,WAAW,EAAE,aAAa;IAC1B,kBAAkB,EAAE,aAAa;IAEjC,+GAA+G;IAC/G,eAAe,EAAE,aAAa;IAC9B,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,aAAa;IACnB,QAAQ,EAAE,aAAa;IACvB,iBAAiB,EAAE,aAAa;IAChC,iBAAiB,EAAE,aAAa;IAChC,gBAAgB,EAAE,aAAa;IAC/B,UAAU,EAAE,aAAa;IACzB,SAAS,EAAE,aAAa;IACxB,aAAa,EAAE,aAAa;IAE5B,WAAW;IACX,aAAa,EAAE,aAAa;IAC5B,gBAAgB,EAAE,aAAa;IAC/B,cAAc,EAAE,aAAa;IAC7B,sBAAsB,EAAE,aAAa;IACrC,iBAAiB,EAAE,aAAa;IAChC,oBAAoB,EAAE,aAAa;IACnC,sBAAsB,EAAE,aAAa;IAErC,wGAAwG;IACxG,aAAa,EAAE,aAAa;IAE5B,2GAA2G;IAC3G,aAAa,EAAE,aAAa;IAC5B,eAAe,EAAE,aAAa;IAC9B,iBAAiB,EAAE,aAAa;IAChC,kBAAkB,EAAE,aAAa;IACjC,aAAa,EAAE,aAAa;IAC5B,sBAAsB,EAAE,aAAa;IACrC,WAAW,EAAE,aAAa;IAC1B,gBAAgB,EAAE,aAAa;IAC/B,gBAAgB,EAAE,aAAa;IAC/B,kBAAkB,EAAE,aAAa;IACjC,2BAA2B,EAAE,aAAa;IAC1C,WAAW,EAAE,aAAa;IAC1B,cAAc,EAAE,aAAa;IAC7B,gBAAgB,EAAE,aAAa;IAE/B,yFAAyF;IAEzF,6FAA6F;IAC7F,MAAM,EAAE,QAAQ;IAEhB,4FAA4F;IAC5F,WAAW,EAAE,QAAQ;IAErB,mGAAmG;IACnG,GAAG,EAAE,QAAQ;IACb,WAAW,EAAE,QAAQ;IAErB,yFAAyF;IACzF,UAAU,EAAE,QAAQ;IACpB,YAAY,EAAE,QAAQ;IACtB,OAAO,EAAE,QAAQ;IACjB,aAAa,EAAE,QAAQ;IACvB,WAAW,EAAE,QAAQ;IAErB,yGAAyG;IACzG,UAAU,EAAE,QAAQ;CACrB,CAAC"}
1
+ {"version":3,"file":"document-member-classification.js","sourceRoot":"","sources":["../../../../../libs/core/src/compat/document-member-classification.ts"],"names":[],"mappings":"AA8BA,MAAM,CAAC,MAAM,4BAA4B,GAA2D;IAClG,qFAAqF;IAErF,8BAA8B;IAC9B,KAAK,EAAE,aAAa;IACpB,UAAU,EAAE,aAAa;IACzB,aAAa,EAAE,aAAa;IAC5B,aAAa,EAAE,aAAa;IAE5B,SAAS;IACT,WAAW,EAAE,aAAa;IAC1B,kBAAkB,EAAE,aAAa;IAEjC,+GAA+G;IAC/G,eAAe,EAAE,aAAa;IAC9B,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,aAAa;IACnB,QAAQ,EAAE,aAAa;IACvB,iBAAiB,EAAE,aAAa;IAChC,iBAAiB,EAAE,aAAa;IAChC,gBAAgB,EAAE,aAAa;IAC/B,UAAU,EAAE,aAAa;IACzB,SAAS,EAAE,aAAa;IACxB,aAAa,EAAE,aAAa;IAE5B,WAAW;IACX,aAAa,EAAE,aAAa;IAC5B,gBAAgB,EAAE,aAAa;IAC/B,cAAc,EAAE,aAAa;IAC7B,sBAAsB,EAAE,aAAa;IACrC,iBAAiB,EAAE,aAAa;IAChC,oBAAoB,EAAE,aAAa;IACnC,sBAAsB,EAAE,aAAa;IAErC,wGAAwG;IACxG,aAAa,EAAE,aAAa;IAE5B,2GAA2G;IAC3G,aAAa,EAAE,aAAa;IAC5B,eAAe,EAAE,aAAa;IAC9B,iBAAiB,EAAE,aAAa;IAChC,kBAAkB,EAAE,aAAa;IACjC,aAAa,EAAE,aAAa;IAC5B,sBAAsB,EAAE,aAAa;IACrC,WAAW,EAAE,aAAa;IAC1B,gBAAgB,EAAE,aAAa;IAC/B,gBAAgB,EAAE,aAAa;IAC/B,kBAAkB,EAAE,aAAa;IACjC,2BAA2B,EAAE,aAAa;IAC1C,WAAW,EAAE,aAAa;IAC1B,cAAc,EAAE,aAAa;IAC7B,gBAAgB,EAAE,aAAa;IAC/B,uGAAuG;IACvG,0FAA0F;IAC1F,MAAM,EAAE,aAAa;IAErB,yFAAyF;IAEzF,4FAA4F;IAC5F,WAAW,EAAE,QAAQ;IAErB,mGAAmG;IACnG,GAAG,EAAE,QAAQ;IACb,WAAW,EAAE,QAAQ;IAErB,yFAAyF;IACzF,UAAU,EAAE,QAAQ;IACpB,YAAY,EAAE,QAAQ;IACtB,OAAO,EAAE,QAAQ;IACjB,aAAa,EAAE,QAAQ;IACvB,WAAW,EAAE,QAAQ;IAErB,yGAAyG;IACzG,UAAU,EAAE,QAAQ;CACrB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { FacadeOverrides } from './document-facade.js';
2
+ import { type CookieAccessor } from './cookie-partition.js';
2
3
  /**
3
4
  * Hooks provided by the fragment boundary. Nodes created via the facade are stamped with the
4
5
  * fragment's boundary prototype, and scripts are neutralized at creation ("born inert").
@@ -7,12 +8,6 @@ export interface DocumentBoundaryHooks {
7
8
  stampNode(node: Node): void;
8
9
  makeScriptBornInert(script: HTMLScriptElement): void;
9
10
  }
10
- /**
11
- * Everything the document overrides need from the surrounding compat context.
12
- *
13
- * All dependencies are injected so that this module stays free of imports with side effects and
14
- * can be exercised by unit tests outside of a browser.
15
- */
16
11
  export interface DocumentOverridesContext {
17
12
  /** The document of the fragment's hidden realm iframe. */
18
13
  realmDocument: Document;
@@ -30,6 +25,11 @@ export interface DocumentOverridesContext {
30
25
  getCurrentScript: () => HTMLScriptElement | undefined;
31
26
  /** Boundary hooks; absent only in unit tests that exercise the overrides in isolation. */
32
27
  boundary?: DocumentBoundaryHooks;
28
+ /**
29
+ * `document.cookie` for a partitioned fragment (cookie-partition.ts). Absent for a shared one,
30
+ * which reads and writes the origin's jar natively.
31
+ */
32
+ cookie?: CookieAccessor;
33
33
  }
34
34
  /**
35
35
  * Creates the facade overrides that virtualize the Document API surface for a compat fragment.
@@ -1,4 +1,20 @@
1
1
  import { rewriteQuerySelector } from '../utils/selector-helpers.js';
2
+ import { nativeCookieAccessor } from './cookie-partition.js';
3
+ /**
4
+ * Everything the document overrides need from the surrounding compat context.
5
+ *
6
+ * All dependencies are injected so that this module stays free of imports with side effects and
7
+ * can be exercised by unit tests outside of a browser.
8
+ */
9
+ /** The realm document's native `cookie` accessor, if the engine has one where we can find it. */
10
+ function findNativeCookie(realmDocument) {
11
+ try {
12
+ return nativeCookieAccessor(realmDocument);
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ }
2
18
  /**
3
19
  * Creates the facade overrides that virtualize the Document API surface for a compat fragment.
4
20
  *
@@ -25,7 +41,14 @@ export function createDocumentOverrides(ctx) {
25
41
  }
26
42
  return element;
27
43
  }
44
+ // the realm is same-origin, so the native accessor is the host origin's jar; captured before the
45
+ // facade swaps the document's prototype, which is the only reason it is an override at all
46
+ const nativeCookie = ctx.cookie ? null : findNativeCookie(realmDocument);
28
47
  return {
48
+ cookie: {
49
+ get: () => (ctx.cookie ? ctx.cookie.get() : (nativeCookie?.get() ?? '')),
50
+ set: (value) => (ctx.cookie ? ctx.cookie.set(value) : nativeCookie?.set(value)),
51
+ },
29
52
  title: {
30
53
  get: function () {
31
54
  return (
@@ -1 +1 @@
1
- {"version":3,"file":"document-overrides.js","sourceRoot":"","sources":["../../../../../libs/core/src/compat/document-overrides.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document-overrides.js","sourceRoot":"","sources":["../../../../../libs/core/src/compat/document-overrides.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,11 @@
1
+ import type { HtmlPolicy } from './html-policy.js';
1
2
  export interface FragmentBoundary {
2
3
  /** Stamps a single element with the fragment's boundary prototype. */
3
4
  stampNode(node: Node): void;
4
5
  /** Stamps an element (or DocumentFragment contents) and all its element descendants. */
5
6
  stampTree(root: Node): void;
7
+ /** Gives a copy of fragment DOM the provenance of what it copies (see `inheritProvenance`). */
8
+ inheritProvenance(source: Node, copy: Node, deep: boolean): void;
6
9
  /** Disconnects the boundary observer. Called when the fragment is destroyed. */
7
10
  disconnect(): void;
8
11
  }
@@ -11,4 +14,6 @@ export declare function createFragmentBoundary(options: {
11
14
  shadowRoot: ShadowRoot;
12
15
  braidDocumentElement: HTMLElement;
13
16
  abortSignal: AbortSignal;
17
+ /** Applied to the fragment's `innerHTML` and `insertAdjacentHTML` writes; see `html-policy.ts`. */
18
+ htmlPolicy?: HtmlPolicy;
14
19
  }): FragmentBoundary;