@hyperfrontend/features 0.1.0 → 0.2.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 (159) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/_dependencies/@hyperfrontend/builder/bundle/dependencies/index.cjs.js +1 -0
  3. package/_dependencies/@hyperfrontend/builder/bundle/dependencies/index.esm.js +1 -0
  4. package/_dependencies/@hyperfrontend/builder/bundle/dependencies/worker/index.cjs.js +1 -0
  5. package/_dependencies/@hyperfrontend/builder/bundle/dependencies/worker/index.esm.js +1 -0
  6. package/_dependencies/@hyperfrontend/builder/bundle/index.cjs.js +12 -10
  7. package/_dependencies/@hyperfrontend/builder/bundle/index.esm.js +14 -12
  8. package/_dependencies/@hyperfrontend/builder/bundle/rollup/index.cjs.js +2 -0
  9. package/_dependencies/@hyperfrontend/builder/bundle/rollup/index.esm.js +2 -0
  10. package/_dependencies/@hyperfrontend/builder/bundle/rollup/worker/index.cjs.js +2 -0
  11. package/_dependencies/@hyperfrontend/builder/bundle/rollup/worker/index.esm.js +2 -0
  12. package/_dependencies/@hyperfrontend/builder/index.cjs.js +87 -53
  13. package/_dependencies/@hyperfrontend/builder/index.esm.js +89 -55
  14. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/promise/index.cjs.js +4 -0
  15. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/promise/index.esm.js +3 -1
  16. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/reflect/index.cjs.js +10 -0
  17. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/reflect/index.esm.js +6 -0
  18. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/timers/index.cjs.js +5 -0
  19. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/timers/index.esm.js +5 -1
  20. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/typed-arrays/index.cjs.js +2 -2
  21. package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/typed-arrays/index.esm.js +2 -2
  22. package/_dependencies/@hyperfrontend/network-protocol/browser/channel/index.cjs.js +5 -19
  23. package/_dependencies/@hyperfrontend/network-protocol/browser/channel/index.esm.js +1 -15
  24. package/_dependencies/@hyperfrontend/network-protocol/browser/data/index.cjs.js +15 -23
  25. package/_dependencies/@hyperfrontend/network-protocol/browser/data/index.esm.js +7 -15
  26. package/_dependencies/@hyperfrontend/network-protocol/browser/packet/index.cjs.js +6 -14
  27. package/_dependencies/@hyperfrontend/network-protocol/browser/packet/index.esm.js +7 -15
  28. package/_dependencies/@hyperfrontend/network-protocol/browser/receiver/index.cjs.js +4 -18
  29. package/_dependencies/@hyperfrontend/network-protocol/browser/receiver/index.esm.js +1 -15
  30. package/_dependencies/@hyperfrontend/network-protocol/browser/sender/index.cjs.js +5 -19
  31. package/_dependencies/@hyperfrontend/network-protocol/browser/sender/index.esm.js +2 -16
  32. package/_dependencies/@hyperfrontend/network-protocol/browser/v1/index.cjs.js +16 -24
  33. package/_dependencies/@hyperfrontend/network-protocol/browser/v1/index.esm.js +7 -15
  34. package/_dependencies/@hyperfrontend/network-protocol/browser/v2/index.cjs.js +16 -24
  35. package/_dependencies/@hyperfrontend/network-protocol/browser/v2/index.esm.js +7 -15
  36. package/_dependencies/@hyperfrontend/network-protocol/node/channel/index.cjs.js +3 -17
  37. package/_dependencies/@hyperfrontend/network-protocol/node/channel/index.esm.js +1 -15
  38. package/_dependencies/@hyperfrontend/network-protocol/node/data/index.cjs.js +6 -14
  39. package/_dependencies/@hyperfrontend/network-protocol/node/data/index.esm.js +7 -15
  40. package/_dependencies/@hyperfrontend/network-protocol/node/packet/index.cjs.js +6 -14
  41. package/_dependencies/@hyperfrontend/network-protocol/node/packet/index.esm.js +7 -15
  42. package/_dependencies/@hyperfrontend/network-protocol/node/receiver/index.cjs.js +3 -17
  43. package/_dependencies/@hyperfrontend/network-protocol/node/receiver/index.esm.js +1 -15
  44. package/_dependencies/@hyperfrontend/network-protocol/node/sender/index.cjs.js +2 -16
  45. package/_dependencies/@hyperfrontend/network-protocol/node/sender/index.esm.js +2 -16
  46. package/_dependencies/@hyperfrontend/network-protocol/node/v1/index.cjs.js +6 -14
  47. package/_dependencies/@hyperfrontend/network-protocol/node/v1/index.esm.js +7 -15
  48. package/_dependencies/@hyperfrontend/network-protocol/node/v2/index.cjs.js +6 -14
  49. package/_dependencies/@hyperfrontend/network-protocol/node/v2/index.esm.js +7 -15
  50. package/_dependencies/@hyperfrontend/nexus/index.cjs.js +49 -19
  51. package/_dependencies/@hyperfrontend/nexus/index.esm.js +49 -19
  52. package/_dependencies/@hyperfrontend/project-scope/core/fs/index.cjs.js +62 -0
  53. package/_dependencies/@hyperfrontend/project-scope/core/fs/index.esm.js +60 -2
  54. package/_shared/generators/feature/generate-feature-module/index.esm.js +11 -6
  55. package/_shared/generators/metadata/generate-metadata/index.esm.js +1 -0
  56. package/_shared/shared/control/index.cjs.js +12 -2
  57. package/_shared/shared/control/index.esm.js +12 -2
  58. package/_shared/shared/request/index.cjs.js +91 -0
  59. package/_shared/shared/request/index.esm.js +88 -0
  60. package/_shared/shared/shutdown/index.esm.js +12 -0
  61. package/bin/hf.js +643 -70
  62. package/bundle/host/index.iife.js +290 -4041
  63. package/bundle/host/index.iife.min.js +1 -1
  64. package/bundle/host/index.umd.js +290 -4041
  65. package/bundle/host/index.umd.min.js +1 -1
  66. package/bundle/hostee/index.iife.js +215 -2893
  67. package/bundle/hostee/index.iife.min.js +1 -1
  68. package/bundle/hostee/index.umd.js +215 -2893
  69. package/bundle/hostee/index.umd.min.js +1 -1
  70. package/cli/args.d.ts +2 -0
  71. package/cli/args.d.ts.map +1 -1
  72. package/cli/commands/build.d.ts +8 -5
  73. package/cli/commands/build.d.ts.map +1 -1
  74. package/cli/commands/dev.d.ts +7 -2
  75. package/cli/commands/dev.d.ts.map +1 -1
  76. package/cli/config/resolve.d.ts +3 -1
  77. package/cli/config/resolve.d.ts.map +1 -1
  78. package/cli/index.cjs.js +643 -70
  79. package/cli/index.d.ts +21 -10
  80. package/cli/index.esm.js +591 -60
  81. package/cli/usage.d.ts +1 -1
  82. package/cli/usage.d.ts.map +1 -1
  83. package/generators/feature/generate-feature-module.d.ts.map +1 -1
  84. package/generators/index.cjs.js +435 -42
  85. package/generators/index.d.ts +9 -8
  86. package/generators/index.esm.js +404 -30
  87. package/generators/metadata/generate-metadata.d.ts +4 -4
  88. package/generators/metadata/generate-metadata.d.ts.map +1 -1
  89. package/generators/shell/connector-types.d.ts +19 -0
  90. package/generators/shell/connector-types.d.ts.map +1 -0
  91. package/generators/shell/generate-shell.d.ts +5 -4
  92. package/generators/shell/generate-shell.d.ts.map +1 -1
  93. package/generators/shell/schema-type.d.ts +20 -0
  94. package/generators/shell/schema-type.d.ts.map +1 -0
  95. package/generators/shell/source-literal.d.ts +28 -0
  96. package/generators/shell/source-literal.d.ts.map +1 -1
  97. package/host/create-shell.d.ts +4 -1
  98. package/host/create-shell.d.ts.map +1 -1
  99. package/host/display-modes/dialog.d.ts +1 -1
  100. package/host/display-modes/dialog.d.ts.map +1 -1
  101. package/host/display-modes/embedded.d.ts +1 -1
  102. package/host/display-modes/embedded.d.ts.map +1 -1
  103. package/host/index.cjs.js +150 -30
  104. package/host/index.d.ts +53 -38
  105. package/host/index.d.ts.map +1 -1
  106. package/host/index.esm.js +129 -9
  107. package/host/lifecycle.d.ts.map +1 -1
  108. package/host/plugins.d.ts +1 -34
  109. package/host/plugins.d.ts.map +1 -1
  110. package/host/types.d.ts +49 -0
  111. package/host/types.d.ts.map +1 -1
  112. package/hostee/index.cjs.js +54 -9
  113. package/hostee/index.d.ts +41 -1
  114. package/hostee/index.d.ts.map +1 -1
  115. package/hostee/index.esm.js +51 -6
  116. package/hostee/lifecycle.d.ts.map +1 -1
  117. package/hostee/types.d.ts +40 -0
  118. package/hostee/types.d.ts.map +1 -1
  119. package/index.cjs.js +32 -1
  120. package/index.d.ts +89 -3
  121. package/index.d.ts.map +1 -1
  122. package/index.esm.js +32 -1
  123. package/nx/executors/build/index.cjs.js +14975 -137
  124. package/nx/executors/build/index.esm.js +14935 -115
  125. package/nx/executors/serve/executor.d.ts.map +1 -1
  126. package/nx/executors/serve/index.cjs.js +6594 -80
  127. package/nx/executors/serve/index.esm.js +6529 -44
  128. package/nx/generators/feature/index.cjs.js +8751 -108
  129. package/nx/generators/feature/index.esm.js +8711 -81
  130. package/package.json +15 -5
  131. package/server/debug-ui/index.d.ts +2 -0
  132. package/server/debug-ui/index.d.ts.map +1 -0
  133. package/server/debug-ui/index.html +15 -0
  134. package/server/debug-ui/index.iife.js +427 -0
  135. package/server/debug-ui/index.iife.min.js +1 -0
  136. package/server/dev-server.d.ts.map +1 -1
  137. package/server/index.cjs.js +78 -10
  138. package/server/index.esm.js +78 -11
  139. package/server/module-dir.d.ts +17 -0
  140. package/server/module-dir.d.ts.map +1 -0
  141. package/server/module-dir.stub.d.ts +15 -0
  142. package/server/module-dir.stub.d.ts.map +1 -0
  143. package/shared/contract.d.ts +1 -1
  144. package/shared/contract.d.ts.map +1 -1
  145. package/shared/control.d.ts +4 -0
  146. package/shared/control.d.ts.map +1 -1
  147. package/shared/invert-contract.d.ts +20 -0
  148. package/shared/invert-contract.d.ts.map +1 -0
  149. package/shared/request.d.ts +68 -0
  150. package/shared/request.d.ts.map +1 -0
  151. package/{nx/shared → shared}/shutdown.d.ts +3 -2
  152. package/shared/shutdown.d.ts.map +1 -0
  153. package/shared/types.d.ts +72 -1
  154. package/shared/types.d.ts.map +1 -1
  155. package/_shared/nx/shared/context/index.cjs.js +0 -18
  156. package/_shared/nx/shared/context/index.esm.js +0 -16
  157. package/nx/shared/shutdown.d.ts.map +0 -1
  158. package/server/debug-ui/bootstrap.d.ts +0 -2
  159. package/server/debug-ui/bootstrap.d.ts.map +0 -1
@@ -1 +1 @@
1
- var HyperfrontendFeaturesHostee=function(e){"use strict";const t=globalThis.Error,n=globalThis.Reflect,r=(e,r)=>n.construct(t,[e,r]),o=globalThis.Object,i=globalThis.Reflect,c=o.prototype.hasOwnProperty,s=o.freeze,a=o.keys,u=o.entries,d=o.defineProperty,l=o.setPrototypeOf,f=(e,t)=>i.apply(c,e,[t]),g=globalThis.Math,p=g.abs,m=g.random;function y(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*m()|0;return("x"===e?t:3&t|8).toString(16)})}const h="nexus",v={INVALID_REQUEST:`[${h}] invalid-request`,REQUEST_CONNECTION:`[${h}] connection-request`,CANCEL_CONNECTION:`[${h}] connection-request-cancelled`,CANCEL_CONNECTION_ACKNOWLEDGED:`[${h}] connection-request-cancelled-acknowledged`,ACCEPT_CONNECTION:`[${h}] connection-request-accepted`,DENY_CONNECTION:`[${h}] connection-request-denied`,CLOSE_CONNECTION:`[${h}] connection-closed`,CLOSE_CONNECTION_ACKNOWLEDGED:`[${h}] connection-closed-acknowledged`,DESTROY_CONNECTION:`[${h}] connection-destroyed`,OPEN_CONNECTION:`[${h}] connection-opened`,NEW_MESSAGE:`[${h}] new-message`},b=e=>"contract"in e,C=e=>(t,n)=>{const r={type:v.ACCEPT_CONNECTION,processId:t,senderId:e.getBrokerId(),contract:e.getContract()};return s(n?{...r,security:n}:r)},N=e=>t=>s({type:v.CANCEL_CONNECTION,processId:t,senderId:e.getBrokerId()}),E=e=>t=>s({type:v.CLOSE_CONNECTION,processId:t,senderId:e.getBrokerId()}),S=e=>(t,n)=>s({type:v.DENY_CONNECTION,processId:t,senderId:e.getBrokerId(),error:n}),$=e=>()=>s({type:v.DESTROY_CONNECTION,senderId:e.getBrokerId()}),I=e=>(t,n)=>s({type:v.INVALID_REQUEST,processId:t,senderId:e.getBrokerId(),error:n}),O=e=>t=>s({type:v.NEW_MESSAGE,senderId:e.getBrokerId(),data:t}),T=e=>(t,n)=>{const r={type:v.OPEN_CONNECTION,processId:t,senderId:e.getBrokerId()};return s(n?{...r,security:n}:r)},A=e=>(t,n)=>{const r={type:v.REQUEST_CONNECTION,processId:t,senderId:e.getBrokerId(),contract:e.getContract()};return s(n?{...r,security:n}:r)},w=globalThis.Map,x=globalThis.Reflect,L=e=>x.construct(w,e?[e]:[]),P=e=>()=>{e.clear()},R=e=>t=>{const n=y();return e.set(n,t),n},M=e=>t=>e.get(t),k=e=>t=>{e.delete(t)},_=globalThis.Array,q=_.isArray,j=_.from,D=globalThis.Set,B=globalThis.Reflect,U=e=>B.construct(D,e?[e]:[]),G=globalThis.WeakMap,W=globalThis.Reflect,F=e=>W.construct(G,e?[e]:[]);function V(e){if(!e)throw r("Contract cannot be null or undefined");if(null===(t=e)||"object"!=typeof t||q(t))throw r("Contract must be an object");var t;const n=e;if((q(n.emitted)?n.emitted.length:0)+(q(n.accepted)?n.accepted.length:0)===0)throw r("Contract must contain at least one accepted or emitted action");if(q(n.emitted))for(const e of n.emitted)if(!e||"string"!=typeof e.type||""===e.type.toString().trim())throw r("Contract action types must be non-empty strings");if(q(n.accepted))for(const e of n.accepted)if(!e||"string"!=typeof e.type||""===e.type.toString().trim())throw r("Contract action types must be non-empty strings")}const z=["none","error","warn","log","info","debug"],K={error:4,warn:3,log:2,info:1,debug:0};function Y(e){return z.includes(e)}const Q=[],Z=[{classRef:Array,instantiate:()=>[],getKeys:e=>a(e),read:(e,t)=>e[t],write:(e,t,n)=>e[n]=t,remove:(e,t)=>e.splice(t,1)},{classRef:Object,instantiate:()=>({}),getKeys:e=>a(e),read:(e,t)=>e[t],write:(e,t,n)=>e[n]=t,remove:(e,t)=>delete e[t]}],J=e=>{if(null===e)return"null";const t=typeof e;if("object"===t){if(q(e))return"array";for(const t of Q)if(e instanceof t)return t.name}return t},H=e=>Z.map(({classRef:e})=>{const t=e.name;return t===Object.name?"object":t===Array.name?"array":t}).includes(e),X=globalThis.Date,ee=globalThis.Reflect;const te=X.now,ne=X.parse,re=X.UTC;const oe=(...e)=>{};function ie(e,t=oe,n=oe,o=oe,i=oe){if(ae(e))throw r(ue("error"));if(ae(t))throw r(ue("warn"));if(ae(n))throw r(ue("log"));if(ae(o))throw r(ue("info"));if(ae(i))throw r(ue("debug"));const{setLogLevel:c,getLogLevel:a,shouldLog:u}=function(e="error"){if(!Y(e))throw r("Cannot create log level configuration with a valid default log level");const t={level:e};return s({getLogLevel:()=>t.level,setLogLevel:e=>{if(!Y(e))throw r(`Cannot set value '${e}' level. Expected levels are ${z}.`);t.level=e},shouldLog:e=>!("none"===t.level||"none"===e||!Y(e))&&K[e]>=K[t.level]})}(),d=(e,t)=>{if(e===oe)return e;return function(e,t){return function(...n){if(t())return e(...n)}}((n=e,function(...e){try{n(...e)}catch{}}),()=>u(t));var n};return ce({error:d(e,"error"),warn:d(t,"warn"),log:d(n,"log"),info:d(o,"info"),debug:d(i,"debug"),setLogLevel:c,getLogLevel:a},"")}function ce(e,t){const n=t?`[${t}]`:"",r=e=>n?(...t)=>e(n,...t):e,o=s({error:r(e.error),warn:r(e.warn),log:r(e.log),info:r(e.info),debug:r(e.debug),setLogLevel:e.setLogLevel,getLogLevel:e.getLogLevel,channel:n=>ce(e,t?`${t}:${n}`:n),timed:(e,t)=>function(e,t,n){const r=te();try{const o=n(),i=te()-r;return e.debug(`${t} completed in ${i}ms`),o}catch(n){const o=te()-r;throw e.error(`${t} failed after ${o}ms: ${se(n)}`),n}}(o,e,t),timedAsync:(e,t)=>async function(e,t,n){const r=te();try{const o=await n(),i=te()-r;return e.debug(`${t} completed in ${i}ms`),o}catch(n){const o=te()-r;throw e.error(`${t} failed after ${o}ms: ${se(n)}`),n instanceof Error&&n.stack&&e.debug(`Stack trace:\n${n.stack}`),n}}(o,e,t)});return o}function se(e){return e instanceof Error?e.message:String(e)}function ae(e){return"function"!==J(e)&&e!==oe}function ue(e){return`Cannot create a logger when ${e} is not a function`}const de=globalThis.console,le=de.log.bind(de),fe=de.warn.bind(de),ge=de.error.bind(de),pe=de.info.bind(de),me=de.debug.bind(de);de.trace.bind(de),de.dir.bind(de),de.table.bind(de),de.assert.bind(de),de.clear.bind(de),de.count.bind(de),de.countReset.bind(de),de.group.bind(de),de.groupCollapsed.bind(de),de.groupEnd.bind(de),de.time.bind(de),de.timeEnd.bind(de),de.timeLog.bind(de);const ye=ie(ge,fe,le,pe,me),he="[nexus]";const ve=e=>{const{level:t="error",prefix:n=he,customLogger:r}=e;if(r)return r;ye.setLogLevel("debug");const o=ie((...e)=>ye.error(n,...e),(...e)=>ye.warn(n,...e),(...e)=>ye.log(n,...e),(...e)=>ye.info(n,...e),(...e)=>ye.debug(n,...e));return o.setLogLevel(t),o},be=globalThis.WeakSet,Ce=globalThis.Reflect;function Ne(e,t){if(!H(J(e)))return!1;const n=e;if(t.has(n))return!0;t.add(n);const r=((e,t)=>{"array"===t&&(t=Array.name),"object"===t&&(t=Object.name);const n=Z.find(({classRef:e})=>t===e.name);return void 0===n?[]:n.getKeys(e)})(e,J(e));for(const n of r)if(Ne(e[n],t))return!0;return!1}function Ee(e,t){if(Ne(e,Ce.construct(be,n?[n]:[])))throw r(`Circular reference detected in parameter "${t}"`);var n}const Se=s({origin:"*",queueMessages:!0,debug:!1,contract:void 0});function $e(e,t=!0){if(e.getState().active){if(e.updateState({active:!1}),t){const t=e.createProcess(),n=e.actions.closeConnection(t);e.sendAction(n)}e.notifyEvent("close")}}function Ie(e,t){const n=function(e,t){return s({...e,queuedMessages:s([...e.queuedMessages,t])})}(e.getState(),t);e.updateState(n)}const Oe=U([v.REQUEST_CONNECTION,v.ACCEPT_CONNECTION,v.DENY_CONNECTION,v.CANCEL_CONNECTION,v.CANCEL_CONNECTION_ACKNOWLEDGED,v.OPEN_CONNECTION]);function Te(e,t){const n=e.getState();if(!t||"string"!=typeof t.type)throw r("Action must contain a 'type' property that is a non-empty string.");const o=n.securityTransport,i=Oe.has(t.type);o&&o.isReady()&&!i?o.send(t):n.target.postMessage(t,"*")}function Ae(e,t){const n=e.getState();if(!n.active){if(n.queueMessages)return void Ie(e,t);throw r(`Cannot send message. Channel ${n.name} is not open.`)}const o=n.securityTransport,i=n.negotiatedProtocol;if(o&&"none"!==i&&!o.isReady()){if(n.queueMessages)return void Ie(e,t);throw r(`Cannot send message. Security transport for channel ${n.name} is not ready.`)}if(!(n.contract?.emitted.map(e=>e.type)??[]).includes(t.type))throw r(`Cannot send message to ${n.name} channel. Message type '${t.type}' is not in the emitted actions of channel contract.`);const c=e.actions.newMessage(t.data);Te(e,c),e.notifyMessage(t)}function we(e){const t=e.getState();for(const n of t.queuedMessages)try{Ae(e,n)}catch(e){t.logger&&t.logger.error("Failed to send queued message:",e)}const n=function(e){return s({...e,queuedMessages:s([])})}(t);e.updateState(n)}function xe(e,t,n){let o;if("string"==typeof t&&"function"==typeof n){const e=t,r=n;o=(t,n,o)=>{t===e&&r(n,o)}}else{if("function"!=typeof t)throw r("Expected callback function.");o=t}if("function"!=typeof o)throw r("Expected callback function.");const i=[...e.getState().eventSubscriptions,o];return e.updateState({eventSubscriptions:i}),()=>{const t=e.getState().eventSubscriptions.filter(e=>e!==o);e.updateState({eventSubscriptions:t})}}function Le(e,t,n){const r=e.getState();r.logger&&function(e,t,n){e.debug("Channel event:",t,n)}(r.logger,t,n);const o={id:r.id,name:r.name,active:r.active,origin:r.origin,connectTimestamp:r.connectTimestamp,contract:r.contract,queuedMessagesCount:r.queuedMessages.length};for(const e of r.eventSubscriptions)try{e(t,n,o)}catch(e){r.logger&&r.logger.error(`Error in event handler for '${t}' event:`,e)}}function Pe(e,t){const n=e.getState();for(const e of n.messageSubscriptions)try{e(t)}catch(e){n.logger&&n.logger.error(`Error in message handler for '${t.type}' message:`,e)}}function Re(e,t){Ee(e.settings,"config.settings");const n={...Se,...e.settings};let o=function(e,t,n){return s({id:y(),name:e,target:t,origin:null,active:!1,connectTimestamp:null,contract:n.contract??null,acceptedActions:s([]),queuedMessages:s([]),eventSubscriptions:s([]),messageSubscriptions:s([]),scheduledActivation:null,queueMessages:n.queueMessages??!0,logger:n.logger??null,brokerManaged:n.brokerManaged??!1,readyToConnect:!1,negotiatedProtocol:null,securityReady:!1,securityTransport:null,pendingSecurityRequest:null})}(e.name,e.target,n);const i={getState:()=>o,updateState:e=>{o={...o,...e}},sendAction:e=>{Te(i,e)},createProcess:()=>t.processManager.create(i),removeProcess:e=>{t.processManager.remove(e)},notifyEvent:(e,t)=>{Le(i,e,t)},notifyMessage:e=>{Pe(i,e)},actions:t.actions,cleanup:t.cleanup},c={id:o.id,name:o.name,target:o.target,getId:()=>o.id,getName:()=>o.name,getTarget:()=>o.target,isActive:()=>o.active,toJSON:()=>({id:o.id,name:o.name,active:o.active,origin:o.origin,connectTimestamp:o.connectTimestamp,contract:o.contract,queuedMessagesCount:o.queuedMessages.length}),connect:()=>function(e){const t=e.getState();if(t.active)return;if(t.readyToConnect||e.updateState({readyToConnect:!0}),t.connectTimestamp||e.updateState({connectTimestamp:te()}),t.scheduledActivation){const[n,r,o,i]=t.scheduledActivation;e.updateState({id:n,origin:r,contract:o,acceptedActions:o.accepted.map(e=>e.type),active:!0,scheduledActivation:null});const c=e.actions.acceptConnection(i);return e.sendAction(c),void e.notifyEvent("open",{id:n,origin:r})}if(t.brokerManaged&&t.contract)return e.updateState({origin:"*",active:!0,acceptedActions:t.contract.accepted.map(e=>e.type)}),e.notifyEvent("open",{id:t.id,origin:"*"}),void we(e);const n=e.createProcess(),r=e.actions.requestConnection(n);e.sendAction(r)}(i),disconnect:e=>$e(i,e),cancel:e=>function(e,t=!0){if(e.getState().active)$e(e,t);else{if(t){const t=e.createProcess(),n=e.actions.cancelConnection(t);e.sendAction(n)}e.notifyEvent("cancel")}}(i,e),destroy:e=>function(e,t=!0){if(e.updateState({active:!1}),t){const t=e.actions.destroyConnection();e.sendAction(t)}e.cleanup&&e.cleanup()}(i,e),send:(e,t)=>Ae(i,{type:e,data:t}),sendAction:e=>Te(i,e),on:(e,t)=>"string"==typeof e&&"function"==typeof t?xe(i,e,t):xe(i,e),onMessage:e=>function(e,t){if("function"!=typeof t)throw r("Expected callback function.");const n=[...e.getState().messageSubscriptions,t];return e.updateState({messageSubscriptions:n}),()=>{const n=e.getState().messageSubscriptions.filter(e=>e!==t);e.updateState({messageSubscriptions:n})}}(i,e),activate:(e,t)=>{const n=function(e,t,n){const r=(n.accepted||[]).map(e=>e.type);return s({...e,origin:t,active:!0,connectTimestamp:te(),contract:n,acceptedActions:s(r),scheduledActivation:null})}(o,e,t);i.updateState(n)},isReadyToConnect:()=>o.readyToConnect||o.brokerManaged,scheduleActivation:(e,t,n,r)=>{i.updateState({scheduledActivation:[e,t,n,r]})},notifyEvent:(e,t)=>{Le(i,e,t)},notifyMessage:e=>{Pe(i,e)},setPendingSecurityRequest:e=>{i.updateState({pendingSecurityRequest:e})},getPendingSecurityRequest:()=>o.pendingSecurityRequest,setNegotiatedProtocol:e=>{i.updateState({negotiatedProtocol:e})},getNegotiatedProtocol:()=>o.negotiatedProtocol,setSecurityTransport:e=>{i.updateState({securityTransport:e})},getSecurityTransport:()=>o.securityTransport,setSecurityReady:e=>{i.updateState({securityReady:e})},isSecurityReady:()=>o.securityReady};return s(c)}function Me(e,t){return e.getByWindow(t)}function ke(e,t){e.remove(t)}function _e(e,t,n,r,o,i,c={}){Ee(c,"settings");const s=Me(t,i);if(s)return s;const a=Re({name:o,target:i,settings:{...c,contract:e.contract,logger:e.logger,brokerManaged:!0}},{actions:r,processManager:n,cleanup:()=>{ke(t,a)}});return function(e,t){e.add(t)}(t,a),a}function qe(e,t){return e.getById(t)}function je(e,t){if("object"==typeof t&&null!==t){return Me(e,t)??null}if("string"==typeof t){const n=qe(e,t)??function(e,t){return e.getByName(t)}(e,t);return n??null}return null}function De(e){return e.getAll()}function Be(e){return De(e).map(e=>e.toJSON())}const Ue=s({whitelist:s([]),blacklist:s([]),contractExtension:!1,logLevel:"error"});function Ge(e,t,n){try{const n=e(t);return Boolean(n)}catch(e){return n.error("Security policy threw an error:",e),!1}}function We(e,t){const{state:n,processManager:r,logger:o}=e,i=t.data;if(!b(i))return;const c=i.processId,s=i.contract,a=i.security,u=r.get(c);if(!u)return;if(u.isActive())return;try{V(s)}catch{return void u.sendAction({type:"[nexus] connection-request-cancelled",processId:c,senderId:n.id})}if(n.settings.securityPolicy){if(!Ge(n.settings.securityPolicy,t,o))return void u.sendAction({type:"[nexus] connection-request-cancelled",processId:c,senderId:n.id})}let d;if(a){const e=a.negotiated;u.setNegotiatedProtocol(e),o.info(`${n.name} accepted security protocol: ${e}`),"none"===e&&u.setSecurityReady(!0),d={active:"none"!==e,protocol:e}}u.activate(t.origin,s),u.sendAction({type:"[nexus] connection-opened",processId:c,senderId:n.id,...d&&{security:d}}),r.remove(c),u.notifyEvent("open",{origin:t.origin,contract:s})}function Fe(e,t){const{state:n,registry:r,processManager:o}=e,i=t.data,c=i.senderId,s=i.processId,a=qe(r,c)||o.get(s);a&&(a.cancel(!1),a.sendAction({type:"[nexus] connection-request-cancelled-acknowledged",processId:s,senderId:n.id}),o.remove(s),a.notifyEvent("cancel",{notify:!0}))}function Ve(e,t){const{processManager:n}=e,r=t.data.processId,o=n.get(r);o&&(n.remove(r),o.notifyEvent("cancel",{notify:!1}))}function ze(e,t){const{state:n,registry:r,processManager:o}=e,i=t.data,c=i.senderId;if(!("processId"in i))return;const s=i.processId,a=qe(r,c);a&&a.isActive()&&(a.disconnect(!1),a.sendAction({type:"[nexus] connection-closed-acknowledged",processId:s,senderId:n.id}),o.remove(s),a.notifyEvent("close",{notify:!0}))}function Ke(e,t){const{processManager:n}=e,r=t.data.processId,o=n.get(r);o&&(n.remove(r),o.notifyEvent("close",{notify:!1}))}function Ye(e,t){const{processManager:n}=e,r=t.data,o=r.processId,i=r.error,c=n.get(o);c&&(n.remove(o),c.notifyEvent("deny",{error:i,origin:t.origin}))}function Qe(e,t){const{registry:n}=e,r=qe(n,t.data.senderId);r&&r.destroy(!1)}function Ze(e,t){const{processManager:n}=e,r=t.data;if(!(e=>"processId"in e)(r))return;const o=r.processId,i=n.get(o);if(!i)return;const c=r.error;i.notifyEvent("invalid",{reason:c,origin:t.origin})}var Je={$schema:"http://json-schema.org/draft-07/schema#",title:"Message",type:"object",required:["type"],properties:{type:{type:"string",minLength:1},data:{description:"Arbitrary message payload"},timestamp:{type:"number"}},additionalProperties:!0};const He=globalThis.JSON.stringify,Xe=globalThis.Number,et=globalThis.parseInt,tt=globalThis.isNaN,nt=globalThis.isFinite,rt=Xe.isInteger,ot=et,it=tt,ct=nt;function st(e,t,n=!0,r=!1,o){const i=L();if(e.definitions)for(const[t,n]of u(e.definitions))i.set(`#/definitions/${t}`,n);return{path:"",errors:[],rootSchema:e,definitions:i,collectAllErrors:n,strictPatterns:r,patternSafetyChecker:o,validate:t}}function at(e,t){const n=String(t).replace(/~/g,"~0").replace(/\//g,"~1");return{...e,path:`${e.path}/${n}`}}function ut(e,t,n,r,o){e.errors.push({message:t,path:e.path||"/",instance:n,code:r,params:o})}function dt(e){return e.collectAllErrors||0===e.errors.length}function lt(e,t){if(e===t)return!0;if(null===e||null===t)return!1;if(typeof e!=typeof t)return!1;if("object"==typeof e){if(q(e)&&q(t)){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!lt(e[n],t[n]))return!1;return!0}if(q(e)||q(t))return!1;const n=a(e),r=a(t);if(n.length!==r.length)return!1;for(const r of n){if(!f(t,r))return!1;if(!lt(e[r],t[r]))return!1}return!0}return!1}const ft=globalThis.RegExp,gt=globalThis.Reflect,pt=(e,t)=>gt.construct(ft,[e,t]),mt=globalThis.URL,yt=globalThis.Reflect,ht=(e,t)=>yt.construct(mt,[e,t]);"function"==typeof mt.createObjectURL&&mt.createObjectURL.bind(mt),"function"==typeof mt.revokeObjectURL&&mt.revokeObjectURL.bind(mt);const vt={"date-time":e=>{if(!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/.test(e))return!1;const t=ne(e);return!it(t)},date:e=>{if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;const[t,n,r]=e.split("-").map(Number),o=function(...e){return ee.construct(X,e)}(re(t,n-1,r));return o.getUTCFullYear()===t&&o.getUTCMonth()===n-1&&o.getUTCDate()===r},time:e=>{const t=e.match(/^(\d{2}):(\d{2}):(\d{2})/);if(!t)return!1;const n=Number(t[1]),r=Number(t[2]),o=Number(t[3]);if(n>23||r>59||o>59)return!1;const i=e.slice(8);return""===i||(!!i.match(/^\.\d{1,9}$/)||(!!i.match(/^(Z|[+-]\d{2}:\d{2})$/)||!!i.match(/^\.\d{1,9}(Z|[+-]\d{2}:\d{2})$/)))},email:e=>/^[^\s@]+@[^\s@.]+\.[^\s@.]+$/.test(e),hostname:e=>{if(e.length>253||0===e.length)return!1;const t=e.split(".");for(const e of t){if(0===e.length||e.length>63)return!1;if(!/^[a-zA-Z0-9]$/.test(e[0]))return!1;if(e.length>1&&!/^[a-zA-Z0-9]$/.test(e[e.length-1]))return!1;for(let t=1;t<e.length-1;t++)if(!/^[a-zA-Z0-9-]$/.test(e[t]))return!1}return!0},ipv4:e=>{const t=e.split(".");return 4===t.length&&t.every(e=>{const t=ot(e,10);return!it(t)&&t>=0&&t<=255&&e===String(t)})},ipv6:e=>{if("::"===e)return!0;if(!e.includes("::")){const t=e.split(":");if(8!==t.length)return!1;const n=/^[0-9a-fA-F]{1,4}$/;return t.every(e=>n.test(e))}const t=e.split("::");if(2!==t.length)return!1;const n=t[0]?t[0].split(":").filter(Boolean):[],r=t[1]?t[1].split(":").filter(Boolean):[];if(n.length+r.length>7)return!1;const o=/^[0-9a-fA-F]{1,4}$/;return n.every(e=>o.test(e))&&r.every(e=>o.test(e))},uri:e=>{try{return ht(e),!0}catch{return!1}},"uri-reference":e=>{try{return ht(e,"http://example.com"),!0}catch{return!1}},uuid:e=>/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(e),regex:e=>{try{return pt(e),!0}catch{return!1}},"json-pointer":e=>{if(""===e)return!0;if(!e.startsWith("/"))return!1;const t=e.slice(1).split("/"),n=/^([^/~]|~[01])*$/;return t.every(e=>n.test(e))}};function bt(e,t,n){const r=t.items;if(void 0===r)return!0;let o=!0;if(q(r)){for(let t=0;t<r.length&&t<e.length;t++){const i=r[t];if(!i)continue;const c=at(n,t);if(!n.validate(e[t],i,c)&&(o=!1,!dt(n)))return!1}e.length>r.length&&(function(e,t,n,r){const o=t.additionalItems;if(void 0===o)return!0;let i=!0;if(!1===o)e.length>r&&(ut(n,`Array has too many items. Expected at most ${r}, got ${e.length}`,e,"additionalItems",{limit:r,actual:e.length}),i=!1);else if("object"==typeof o)for(let t=r;t<e.length;t++){const r=at(n,t);if(!n.validate(e[t],o,r)&&(i=!1,!dt(n)))return!1}return i}(e,t,n,r.length)||(o=!1))}else for(let t=0;t<e.length;t++){const i=at(n,t);if(!n.validate(e[t],r,i)&&(o=!1,!dt(n)))return!1}return o}const Ct={string:e=>"string"==typeof e,number:e=>"number"==typeof e&&ct(e),integer:e=>"number"==typeof e&&ct(e)&&rt(e),boolean:e=>"boolean"==typeof e,array:e=>q(e),object:e=>null!==e&&"object"==typeof e&&!q(e),null:e=>null===e};function Nt(e,t,n){const r=t.type;if(void 0===r)return!0;const o=q(r)?r:[r];for(const t of o){const n=Ct[t];if(n&&n(e))return!0;if("number"===t&&Ct.integer?.(e))return!0}const i=function(e){if(null===e)return"null";if(q(e))return"array";const t=typeof e;if("number"===t){const t=e;return ct(t)&&rt(t)?"integer":"number"}return t}(e);return ut(n,`Expected type ${o.join(" or ")} but got ${i}`,e,"type",{expected:o,actual:i}),!1}function Et(e,t,n){if(t.$ref){const r=function(e,t){const n=t.definitions.get(e);if(n)return n;if(!e.startsWith("#"))return;if("#"===e)return t.rootSchema;const r=e.slice(1);if(!r.startsWith("/"))return;const o=r.split("/").slice(1).map(e=>e.replace(/~1/g,"/").replace(/~0/g,"~"));let i=t.rootSchema;for(const e of o){if(null===i||"object"!=typeof i)return;i=i[e]}if(i&&"object"==typeof i){const n=i;return t.definitions.set(e,n),n}}(t.$ref,n);return!r||Et(e,r,n)}let r=!0;if(!Nt(e,t,n)&&(r=!1,!dt(n)))return!1;if(!function(e,t,n){if(!t.enum)return!0;for(const n of t.enum)if(lt(e,n))return!0;return ut(n,`Value must be one of: ${t.enum.map(e=>He(e)).join(", ")}`,e,"enum",{allowedValues:t.enum}),!1}(e,t,n)&&(r=!1,!dt(n)))return!1;if("string"==typeof e){if(!function(e,t,n){let r=!0;if(void 0!==t.minLength&&e.length<t.minLength&&(ut(n,`String must be at least ${t.minLength} characters, got ${e.length}`,e,"minLength",{limit:t.minLength,actual:e.length}),r=!1,!dt(n)))return!1;if(void 0!==t.maxLength&&e.length>t.maxLength&&(ut(n,`String must be at most ${t.maxLength} characters, got ${e.length}`,e,"maxLength",{limit:t.maxLength,actual:e.length}),r=!1,!dt(n)))return!1;if(void 0!==t.pattern){if(n.patternSafetyChecker){const o=n.patternSafetyChecker(t.pattern);if(!o.safe)return ut(n,`Unsafe regex pattern: ${o.reason??"Pattern may cause ReDoS"}`,e,"pattern",{pattern:t.pattern,reason:o.reason}),r=!1,!!dt(n)&&r}try{if(!pt(t.pattern).test(e)&&(ut(n,`String does not match pattern: ${t.pattern}`,e,"pattern",{pattern:t.pattern}),r=!1,!dt(n)))return!1}catch(o){if(n.strictPatterns&&(ut(n,`Invalid regex pattern: ${t.pattern}`,e,"pattern",{pattern:t.pattern,error:o instanceof Error?o.message:"Invalid regex"}),r=!1,!dt(n)))return!1}}return r}(e,t,n)&&(r=!1,!dt(n)))return!1;if(!function(e,t,n){if(!t.format)return!0;const r=vt[t.format];return!r||!!r(e)||(ut(n,`String does not match format '${t.format}'`,e,"format",{format:t.format}),!1)}(e,t,n)&&(r=!1,!dt(n)))return!1}if("number"==typeof e&&!function(e,t,n){let r=!0;if(void 0!==t.minimum){const o=!0===t.exclusiveMinimum;if((o?e<=t.minimum:e<t.minimum)&&(ut(n,`Number must be ${o?"greater than":"at least"} ${t.minimum}, got ${e}`,e,"minimum",{limit:t.minimum,exclusive:o,actual:e}),r=!1,!dt(n)))return!1}if(void 0!==t.maximum){const o=!0===t.exclusiveMaximum;if((o?e>=t.maximum:e>t.maximum)&&(ut(n,`Number must be ${o?"less than":"at most"} ${t.maximum}, got ${e}`,e,"maximum",{limit:t.maximum,exclusive:o,actual:e}),r=!1,!dt(n)))return!1}if(void 0!==t.multipleOf&&t.multipleOf>0){const o=p(e%t.multipleOf),i=1e-10;if(o>i&&t.multipleOf-o>i&&(ut(n,`Number must be a multiple of ${t.multipleOf}, got ${e}`,e,"multipleOf",{multipleOf:t.multipleOf,actual:e}),r=!1,!dt(n)))return!1}return r}(e,t,n)&&(r=!1,!dt(n)))return!1;if(q(e)){if(!bt(e,t,n)&&(r=!1,!dt(n)))return!1;if(!function(e,t,n){let r=!0;if(void 0!==t.minItems&&e.length<t.minItems&&(ut(n,`Array must have at least ${t.minItems} items, got ${e.length}`,e,"minItems",{limit:t.minItems,actual:e.length}),r=!1,!dt(n)))return!1;if(void 0!==t.maxItems&&e.length>t.maxItems&&(ut(n,`Array must have at most ${t.maxItems} items, got ${e.length}`,e,"maxItems",{limit:t.maxItems,actual:e.length}),r=!1,!dt(n)))return!1;if(!0===t.uniqueItems)for(let t=0;t<e.length;t++)for(let o=t+1;o<e.length;o++)if(lt(e[t],e[o])&&(ut(n,`Array items must be unique. Duplicate found at indices ${t} and ${o}`,e,"uniqueItems"),r=!1,!dt(n)))return!1;return r}(e,t,n)&&(r=!1,!dt(n)))return!1}if(null!==e&&"object"==typeof e&&!q(e)){const o=e;if(!function(e,t,n){if(!t.properties)return!0;let r=!0;for(const[o,i]of u(t.properties))if(f(e,o)){const t=at(n,o);if(!n.validate(e[o],i,t)&&(r=!1,!dt(n)))return!1}return r}(o,t,n)&&(r=!1,!dt(n)))return!1;if(!function(e,t,n){if(!t.required)return!0;let r=!0;for(const o of t.required)if(!f(e,o)&&(ut(n,`Missing required property: ${o}`,void 0,"required",{missing:o}),r=!1,!dt(n)))return!1;return r}(o,t,n)&&(r=!1,!dt(n)))return!1;if(!function(e,t,n){if(!t.patternProperties)return!0;let r=!0;const o=[];for(const[i,c]of u(t.patternProperties)){if(n.patternSafetyChecker){const t=n.patternSafetyChecker(i);if(!t.safe){if(ut(n,`Unsafe regex pattern in patternProperties: ${t.reason??"Pattern may cause ReDoS"}`,e,"patternProperties",{pattern:i,reason:t.reason}),r=!1,!dt(n))return!1;continue}}try{o.push({regex:pt(i),schema:c})}catch(t){if(n.strictPatterns&&(ut(n,`Invalid regex pattern in patternProperties: ${i}`,e,"patternProperties",{pattern:i,error:t instanceof Error?t.message:"Invalid regex"}),r=!1,!dt(n)))return!1}}for(const t of a(e))for(const{regex:i,schema:c}of o)if(i.test(t)){const o=at(n,t);if(!n.validate(e[t],c,o)&&(r=!1,!dt(n)))return!1}return r}(o,t,n)&&(r=!1,!dt(n)))return!1;if(!function(e,t,n){const r=t.additionalProperties;if(void 0===r)return!0;const o=U();if(t.properties)for(const e of a(t.properties))o.add(e);const i=[];if(t.patternProperties)for(const e of a(t.patternProperties))if(!n.patternSafetyChecker||n.patternSafetyChecker(e).safe)try{i.push(pt(e))}catch{}let c=!0;for(const t of a(e))if(!o.has(t)&&!i.some(e=>e.test(t)))if(!1===r){if(ut(n,`Additional property not allowed: ${t}`,e[t],"additionalProperties",{property:t}),c=!1,!dt(n))return!1}else if("object"==typeof r){const o=at(n,t);if(!n.validate(e[t],r,o)&&(c=!1,!dt(n)))return!1}return c}(o,t,n)&&(r=!1,!dt(n)))return!1;if(!function(e,t,n){let r=!0;const o=a(e).length;return!(void 0!==t.minProperties&&o<t.minProperties&&(ut(n,`Object must have at least ${t.minProperties} properties, got ${o}`,e,"minProperties",{limit:t.minProperties,actual:o}),r=!1,!dt(n)))&&!(void 0!==t.maxProperties&&o>t.maxProperties&&(ut(n,`Object must have at most ${t.maxProperties} properties, got ${o}`,e,"maxProperties",{limit:t.maxProperties,actual:o}),r=!1,!dt(n)))&&r}(o,t,n)&&(r=!1,!dt(n)))return!1;if(!function(e,t,n){if(!t.dependencies)return!0;let r=!0;for(const[o,i]of u(t.dependencies))if(f(e,o))if(q(i)){for(const t of i)if(!f(e,t)&&(ut(n,`Property '${o}' requires property '${t}' to also be present`,e,"dependencies",{property:o,required:t}),r=!1,!dt(n)))return!1}else if(!n.validate(e,i,n)&&(r=!1,!dt(n)))return!1;return r}(o,t,n)&&(r=!1,!dt(n)))return!1}return!(!function(e,t,n){const r=t.allOf;if(!r||0===r.length)return!0;let o=!0;for(let t=0;t<r.length;t++){const i=r[t];if(i&&!n.validate(e,i,n)&&(o=!1,!dt(n)))return!1}return o}(e,t,n)&&(r=!1,!dt(n)))&&(!(!function(e,t,n){const r=t.anyOf;if(!r||0===r.length)return!0;for(const t of r){const r=st(n.rootSchema,n.validate,!1);if(d(r,"path",{value:n.path,writable:!1}),n.validate(e,t,r))return!0}return ut(n,"Value does not match any of the allowed schemas (anyOf)",e,"anyOf"),!1}(e,t,n)&&(r=!1,!dt(n)))&&(!(!function(e,t,n){const r=t.oneOf;if(!r||0===r.length)return!0;let o=0;for(const t of r){const r=st(n.rootSchema,n.validate,!1);if(d(r,"path",{value:n.path,writable:!1}),n.validate(e,t,r)&&(o++,o>1))break}return 1===o||(0===o?ut(n,"Value does not match any of the schemas (oneOf)",e,"oneOf"):ut(n,`Value matches ${o} schemas but must match exactly one (oneOf)`,e,"oneOf",{matches:o}),!1)}(e,t,n)&&(r=!1,!dt(n)))&&(!(!function(e,t,n){const r=t.not;if(!r)return!0;const o=st(n.rootSchema,n.validate,!1);return d(o,"path",{value:n.path,writable:!1}),!n.validate(e,r,o)||(ut(n,"Value should NOT match the schema",e,"not"),!1)}(e,t,n)&&(r=!1,!dt(n)))&&r)))}function St(e,t){return t=>function(e,t){const n=st(t,Et,!0,!1,void 0);return{valid:Et(e,t,n),errors:n.errors}}(t,e)}const $t=function(e){const t=St(e);return e=>{const n=t(e);return{valid:n.valid,errors:n.errors.map(e=>({message:e.message,path:e.path,value:e.instance}))}}}(Je);function It(e,t){const{state:n,registry:r,logger:o}=e,i=t.data,c=i.senderId;if(!(e=>"data"in e)(i))return;const s=i.data,a=qe(r,c);if(!a||!a.isActive())return;const u=function(e){return $t(e)}(s);u.valid?a.notifyMessage(s):o.info(`${n.name} ignored message from ${a.getName()}`)}function Ot(e,t){const{state:n,processManager:r,logger:o}=e,i=t.data,c=i.processId,s=i.security,a=r.get(c);a&&(r.remove(c),s?(a.getNegotiatedProtocol()||a.setNegotiatedProtocol(s.protocol),a.setSecurityReady(!0),o.info(`${n.name} security ready: protocol=${s.protocol}, active=${s.active}`),a.notifyEvent("security-ready",{protocol:s.protocol,active:s.active})):a.setSecurityReady(!0),a.notifyEvent("open",{origin:t.origin}))}function Tt(e,t){for(const n of e.supported)if(t.includes(n))return{negotiated:n,isPreferred:n===e.preferred};return{negotiated:"none",isPreferred:"none"===e.preferred}}function At(e,t){return s({negotiated:e})}const wt=["none"];function xt(e,t){const{state:n,registry:r,processManager:o,actions:i,logger:c}=e,s=t.data,a=s.senderId;if(!b(s))return;const u=s.processId,d=s.contract,l=s.security;let f,g=qe(r,a);if(g||(g=_e(n,r,o,i,a,t.source,{})),o.create(g),g.isActive())if(a===g.id){const e=l?At(Tt(l,wt).negotiated):void 0;g.sendAction({type:"[nexus] connection-request-accepted",processId:u,senderId:n.id,contract:n.contract,...e&&{security:e}})}else c.info(`${n.name} detected channel [${g.getName()}] reloaded.`);else{try{V(d)}catch{return g.sendAction({type:"[nexus] connection-request-denied",processId:u,senderId:n.id,error:"Invalid contract."}),void o.remove(u)}if(n.settings.securityPolicy){if(!Ge(n.settings.securityPolicy,t,c))return g.sendAction({type:"[nexus] connection-request-denied",processId:u,senderId:n.id,error:"Not accepted."}),void o.remove(u)}if(l&&g.setPendingSecurityRequest(l),!g.isReadyToConnect())return g.scheduleActivation(a,t.origin,d,u),void c.info(`${n.name} scheduled activation for channel ${g.getName()}`);if(l){const e=Tt(l,wt);g.setNegotiatedProtocol(e.negotiated),f=At(e.negotiated),c.info(`${n.name} negotiated security protocol: ${e.negotiated}`)}g.activate(t.origin,d),g.sendAction({type:"[nexus] connection-request-accepted",processId:u,senderId:n.id,contract:n.contract,...f&&{security:f}})}}class Lt extends Error{code;originalCause;constructor(e,t,n){super(e),this.name="SecurityError",this.code=t,this.originalCause=n,l(this,Lt.prototype)}}function Pt(e,t,n){const{state:r,registry:o,logger:i}=e,c=n?.origin,s=n?.data;if(!(s instanceof Uint8Array))return void i.warn("routeEncryptedMessage called with non-Uint8Array payload");const a=function(e,t){const n=De(e);for(const e of n){const n=e;if(!n.isActive||"function"!=typeof n.isActive)continue;if(!n.isActive())continue;if(n.toJSON().origin===t)return n}return}(o,c);if(!a)return void i.info(`${r.name} ignored encrypted message - no channel for origin ${c}`);const u=a.getSecurityTransport();if(!u)return void i.warn(`${r.name} received encrypted message but channel has no security transport`);if(!u.isReady())return void i.warn(`${r.name} received encrypted message but security transport not ready`);const d=u;if("function"==typeof d.handleReceive)try{d.handleReceive(s)}catch(e){const t=function(e){if(e instanceof Lt)return{message:e.message,code:e.code,cause:e.originalCause};if(e instanceof Error){const t=function(e){const t=e.message.toLowerCase();return t.includes("decrypt")||t.includes("invalid key")||t.includes("corrupted")||t.includes("cipher")?"decryption_failed":t.includes("deobfuscat")||t.includes("time window")||t.includes("clock skew")||t.includes("timestamp")?"deobfuscation_failed":t.includes("transport")||t.includes("connection")||t.includes("network")?"transport_error":"unknown"}(e);return{message:e.message,code:t,cause:e}}return{message:String(e),code:"unknown"}}(e);!function(e,t,n){const r=`${t} security error:`;"unknown"===n.code?e.error(r,n.message,n.cause):e.warn(r,`[${n.code}]`,n.message)}(i,a.getName(),t),a.notifyEvent("security-error",t)}else i.error("Security transport missing handleReceive method")}function Rt(e){Ee(e.contract,"config.contract"),Ee(e.settings,"config.settings"),function(e){if(null==e)throw r("Name cannot be null or undefined");if("string"!=typeof e)throw r("Name must be a string");if(0===e.trim().length)throw r("Name cannot be empty")}(e.name),V(e.contract);const t={...Ue,...e.settings,contract:e.contract},n=function(e={}){return ve(e)}({level:t.logLevel??"error",customLogger:t.logger}),o={id:y(),name:e.name,window:window,contract:e.contract,settings:t,logger:n},i=function(){const e=F(),t=L(),n=L(),o=U();return s({add:i=>{if(!(i&&i.id&&i.name&&i.target))throw r("Invalid channel: must have id, name, and target properties");o.add(i),e.set(i.target,i),t.set(i.id,i),n.set(i.name,i)},remove:r=>{r&&(o.delete(r),r.target&&e.delete(r.target),r.id&&t.delete(r.id),r.name&&n.delete(r.name))},getByWindow:t=>e.get(t),getById:e=>t.get(e),getByName:e=>n.get(e),getAll:()=>j(o),clear:()=>{o.clear(),t.clear(),n.clear()}})}(),c=(()=>{const e=L();return s({create:R(e),get:M(e),remove:k(e),clear:P(e),track:(t,n)=>{e.set(t,n)},has:t=>e.has(t)})})(),a=function(){const e=L();return s({register:(t,n)=>{if(!n)throw r(`Cannot register null/undefined provider for ${t}`);e.set(t,n)},unregister:t=>{e.delete(t)},get:t=>{if("none"!==t)return e.get(t)},has:t=>"none"===t||e.has(t),getSupportedVersions:()=>{const t=["none"];return e.has("v1")&&t.unshift("v1"),e.has("v2")&&t.unshift("v2"),t}})}();if(e.settings?.security?.protocols){const t=e.settings.security.protocols;t.v1&&a.register("v1",t.v1),t.v2&&a.register("v2",t.v2)}const d=s({requestConnection:A(l={getBrokerId:()=>o.id,getContract:()=>o.contract}),acceptConnection:C(l),denyConnection:S(l),cancelConnection:N(l),openConnection:T(l),closeConnection:E(l),destroyConnection:$(l),newMessage:O(l),invalidRequest:I(l)});var l;const f=function(e){const t=L();return u(e).forEach(([e,n])=>{t.set(e,n)}),t}({[v.REQUEST_CONNECTION]:xt,[v.ACCEPT_CONNECTION]:We,[v.DENY_CONNECTION]:Ye,[v.CANCEL_CONNECTION]:Fe,[v.CANCEL_CONNECTION_ACKNOWLEDGED]:Ve,[v.CLOSE_CONNECTION]:ze,[v.CLOSE_CONNECTION_ACKNOWLEDGED]:Ke,[v.OPEN_CONNECTION]:Ot,[v.DESTROY_CONNECTION]:Qe,[v.NEW_MESSAGE]:It,[v.INVALID_REQUEST]:Ze}),g={state:o,registry:i,processManager:c,actions:d,logger:n},p=e=>{const t=e?.origin;!function(e,t=[],n=[]){return t&&t.length>0?t.includes(e):!(n&&n.length>0&&n.includes(e))}(t,o.settings.whitelist,o.settings.blacklist)?n.info(`${o.name} ignored message from ${t}`):e.data instanceof Uint8Array?Pt(g,0,e):function(e,t,n){const{logger:r}=t;try{const o=n?.data,i=o?.type;if(!i)return void r.warn("Received message without action type");!function(e,t,n){e.debug(`Action ${n}:`,t.type,t)}(r,o,"received");const c=e.get(i);if(!c)return void r.warn(`No handler for action type: ${i}`);c(t,n)}catch(e){r.error("Error routing message:",e)}}(f,g,e)};"undefined"!=typeof window&&window.addEventListener("message",p);const m={id:o.id,name:o.name,settings:o.settings,get contract(){return o.contract},get channels(){return Be(i)},get acceptedActionTypes(){return o.contract.accepted.map(e=>e.type)},addChannel:(e,t,n)=>_e(o,i,c,d,e,t,n??{}),getChannel:e=>je(i,e),removeChannel(e){const t=je(i,e);t&&function(e,t){t.destroy(!1),ke(e,t)}(i,t)},setSecurityPolicy:e=>(function(e){if("function"!=typeof e)throw r("Security policy must be a function that returns true or false.")}(e),o.settings.securityPolicy=e,m),extendContract(e){if(!o.settings.contractExtension)throw r("Original contract cannot be extended.");return V(e),o.contract=function(...e){const t={accepted:[],emitted:[]};return e.forEach(e=>{e&&e.accepted&&e.emitted&&(e.accepted.forEach(e=>{t.accepted.some(t=>t.type===e.type)||t.accepted.push(e)}),e.emitted.forEach(e=>{t.emitted.some(t=>t.type===e.type)||t.emitted.push(e)}))}),s({accepted:s(t.accepted),emitted:s(t.emitted)})}(o.contract,e),m},toJSON:()=>({id:o.id,name:o.name,settings:o.settings,acceptedActionTypes:o.contract.accepted.map(e=>e.type),channels:Be(i)}),registerProtocol:(e,t)=>(a.register(e,t),m),unregisterProtocol:e=>(a.unregister(e),m),hasProtocol:e=>a.has(e),getSupportedProtocols:()=>a.getSupportedVersions(),get logger(){return o.logger}};return s(m)}function Mt(e){return"object"==typeof e&&null!==e&&!q(e)}function kt(e,t,n){q(e)?e.forEach((e,r)=>{Mt(e)?"string"==typeof e.type&&0!==e.type.length||n.push(`"${t}[${r}]" must have a non-empty string "type".`):n.push(`"${t}[${r}]" must be an object, but got ${_t(e)}.`)}):n.push(`"${t}" must be an array.`)}function _t(e){return null===e?"null":q(e)?"an array":"a "+typeof e}Rt({name:"default-broker",contract:s({emitted:s([{type:"MESSAGE",description:"Generic message"},{type:"DATA",description:"Generic data transfer"},{type:"EVENT",description:"Generic event"}]),accepted:s([{type:"MESSAGE",description:"Generic message"},{type:"DATA",description:"Generic data transfer"},{type:"EVENT",description:"Generic event"},{type:"ACK",description:"Acknowledgment"}])})});const qt=s({Beat:"__hf:beat",Size:"__hf:size"});const jt=globalThis.Promise,Dt=globalThis.Reflect;jt.resolve.bind(jt),jt.reject.bind(jt),jt.all.bind(jt),jt.race.bind(jt),jt.allSettled.bind(jt),jt.any.bind(jt),jt.withResolvers?.bind(jt);const Bt=globalThis.setInterval,Ut=globalThis.clearInterval;function Gt(e){let t;return{start(){void 0===t&&(t=((e,t,...n)=>Bt(e,t,...n))(()=>e(qt.Beat),1e3))},stop(){Ut(t),t=void 0}}}function Wt(e,t){if(!function(e){try{return document.createDocumentFragment().querySelector(e),!0}catch{return!1}}(e))throw r("A valid css select must be provided");if("object"===J(t)&&(t=function(e){const t=[],n=u(e).reduce((e,[n,r])=>{try{return`${e}${n.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}: ${""===r?"''":r}; `}catch(r){return t.push(`Failed to convert property "${n}". Error: ${r.message}`),e}},"");return t.length>0&&ye.warn("Some properties failed to convert:\n"+t.join("\n")),n}(t).trim()),"string"!==J(t)||0===t.length)throw r("A valid string value must be provided to add in styleesheet.");return`${e}{${t}}`}const Ft=U(),Vt=U(),zt=L(),Kt=F();function Yt(e,t){var n;if("object"===J(e)&&(e="object"!==J(n=e)?"":u(n).map(([e,t])=>Wt(e,t)).join("\n")),"string"!==J(e)||0===e.length)throw r("A valid string or StyleMap must be provided to add in styleesheet.");const o=document.createElement("style");o.textContent=e,document.head.appendChild(o),Ft.add(o);return[o,()=>function(e){let t,n;"string"===J(e)?(n=e,t=zt.get(n)):(t=e,n=Kt.get(t));try{document.head.removeChild(t),Ft.delete(t)}catch{}try{Vt.delete(n),zt.delete(n),Kt.delete(t)}catch{}}(o)]}function Qt(e){let t;const n=()=>e(qt.Size,{width:document.body.scrollWidth,height:document.body.scrollHeight});return{start(){t||(n(),t=function(e,t){const n=new ResizeObserver(e=>{for(const n of e)r||t(n.contentRect)});let r=!1;return n.observe(e),()=>{r=!0,n.unobserve(e)}}(document.body,n))},stop(){t&&(t(),t=void 0)}}}function Zt(e,t,n){let r=null,o=!1;if(t){const i=e.addChannel("host",t);r=i;const c=Gt(e=>i.send(e)),s=Qt((e,t)=>i.send(e,t));i.on("open",()=>{o=!0,n.emit("open"),c.start(),s.start()}),i.on("close",()=>{o=!1,n.emit("close"),c.stop(),s.stop()}),i.on("deny",e=>n.emit("error",e)),i.on("invalid",e=>n.emit("error",e)),i.onMessage(e=>n.emit(e.type,e.data)),i.connect()}return s({send:(e,t)=>r?.send(e,t),on:n.on,ready:()=>{return e=e=>{o?e():n.on("open",()=>e())},Dt.construct(jt,[e]);var e},close:()=>r?.disconnect()})}return e.createFeature=function(e){const t=function(e){return{emitted:[...e.emitted,{type:qt.Beat},{type:qt.Size}],accepted:[...e.accepted,{type:qt.Beat},{type:qt.Size}]}}(function(e){if(!Mt(e))throw r(`Invalid contract: expected an object with "emitted" and "accepted" arrays, but got ${_t(e)}.`);const t=[];if(kt(e.emitted,"emitted",t),kt(e.accepted,"accepted",t),t.length>0)throw r(`Invalid contract:\n${t.map(e=>` - ${e}`).join("\n")}`);return{emitted:e.emitted,accepted:e.accepted}}(e.contract)),n=function(){const e={};return s({on:(t,n)=>{const r=e[t]??(e[t]=[]);return r.push(n),()=>{e[t]=r.filter(e=>e!==n)}},emit:(t,n)=>{e[t]?.forEach(e=>e(n))}})}(),o=Rt({name:e.name,contract:t});return!1!==e.resetBody&&Yt("html,body{margin:0;padding:0;background:transparent}"),Zt(o,(i=window).parent!==i?i.parent:i.opener?i.opener:null,n);var i},e}({});
1
+ var HyperfrontendFeaturesHostee=function(e){"use strict";const t=globalThis.Error,n=globalThis.Reflect,r=(e,r)=>n.construct(t,[e,r]),o=globalThis.Object,i=globalThis.Reflect,s=o.prototype.hasOwnProperty,c=o.freeze,a=o.keys,u=o.entries,d=o.values,l=o.defineProperty,f=o.setPrototypeOf,g=(e,t)=>i.apply(s,e,[t]),p=globalThis.Math,m=p.abs,y=p.random;function h(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*y()|0;return("x"===e?t:3&t|8).toString(16)})}const v="nexus",b={INVALID_REQUEST:`[${v}] invalid-request`,REQUEST_CONNECTION:`[${v}] connection-request`,CANCEL_CONNECTION:`[${v}] connection-request-cancelled`,CANCEL_CONNECTION_ACKNOWLEDGED:`[${v}] connection-request-cancelled-acknowledged`,ACCEPT_CONNECTION:`[${v}] connection-request-accepted`,DENY_CONNECTION:`[${v}] connection-request-denied`,CLOSE_CONNECTION:`[${v}] connection-closed`,CLOSE_CONNECTION_ACKNOWLEDGED:`[${v}] connection-closed-acknowledged`,DESTROY_CONNECTION:`[${v}] connection-destroyed`,OPEN_CONNECTION:`[${v}] connection-opened`,NEW_MESSAGE:`[${v}] new-message`},C=e=>"contract"in e,N=e=>(t,n)=>{const r={type:b.ACCEPT_CONNECTION,processId:t,senderId:e.getBrokerId(),contract:e.getContract()};return c(n?{...r,security:n}:r)},E=e=>t=>c({type:b.CANCEL_CONNECTION,processId:t,senderId:e.getBrokerId()}),$=e=>t=>c({type:b.CLOSE_CONNECTION,processId:t,senderId:e.getBrokerId()}),S=e=>(t,n)=>c({type:b.DENY_CONNECTION,processId:t,senderId:e.getBrokerId(),error:n}),I=e=>()=>c({type:b.DESTROY_CONNECTION,senderId:e.getBrokerId()}),T=e=>(t,n)=>c({type:b.INVALID_REQUEST,processId:t,senderId:e.getBrokerId(),error:n}),O=e=>t=>c({type:b.NEW_MESSAGE,senderId:e.getBrokerId(),data:t}),w=e=>(t,n)=>{const r={type:b.OPEN_CONNECTION,processId:t,senderId:e.getBrokerId()};return c(n?{...r,security:n}:r)},A=e=>(t,n)=>{const r={type:b.REQUEST_CONNECTION,processId:t,senderId:e.getBrokerId(),contract:e.getContract()};return c(n?{...r,security:n}:r)},x=globalThis.Map,P=globalThis.Reflect,R=e=>P.construct(x,e?[e]:[]),L=e=>()=>{e.clear()},q=e=>t=>{const n=h();return e.set(n,t),n},M=e=>t=>e.get(t),k=e=>t=>{e.delete(t)},_=globalThis.Array,j=_.isArray,D=_.from,B=globalThis.Set,W=globalThis.Reflect,U=e=>W.construct(B,e?[e]:[]),G=globalThis.WeakMap,F=globalThis.Reflect,V=e=>F.construct(G,e?[e]:[]);function K(e){if(!e)throw r("Contract cannot be null or undefined");if(null===(t=e)||"object"!=typeof t||j(t))throw r("Contract must be an object");var t;const n=e;if((j(n.emitted)?n.emitted.length:0)+(j(n.accepted)?n.accepted.length:0)===0)throw r("Contract must contain at least one accepted or emitted action");if(j(n.emitted))for(const e of n.emitted)if(!e||"string"!=typeof e.type||""===e.type.toString().trim())throw r("Contract action types must be non-empty strings");if(j(n.accepted))for(const e of n.accepted)if(!e||"string"!=typeof e.type||""===e.type.toString().trim())throw r("Contract action types must be non-empty strings")}const z=["none","error","warn","log","info","debug"],Y={error:4,warn:3,log:2,info:1,debug:0};function Q(e){return z.includes(e)}const Z=[],J=[{classRef:Array,instantiate:()=>[],getKeys:e=>a(e),read:(e,t)=>e[t],write:(e,t,n)=>e[n]=t,remove:(e,t)=>e.splice(t,1)},{classRef:Object,instantiate:()=>({}),getKeys:e=>a(e),read:(e,t)=>e[t],write:(e,t,n)=>e[n]=t,remove:(e,t)=>delete e[t]}],H=e=>{if(null===e)return"null";const t=typeof e;if("object"===t){if(j(e))return"array";for(const t of Z)if(e instanceof t)return t.name}return t},X=e=>J.map(({classRef:e})=>{const t=e.name;return t===Object.name?"object":t===Array.name?"array":t}).includes(e),ee=globalThis.Date,te=globalThis.Reflect;const ne=ee.now,re=ee.parse,oe=ee.UTC;const ie=(...e)=>{};function se(e,t=ie,n=ie,o=ie,i=ie){if(ue(e))throw r(de("error"));if(ue(t))throw r(de("warn"));if(ue(n))throw r(de("log"));if(ue(o))throw r(de("info"));if(ue(i))throw r(de("debug"));const{setLogLevel:s,getLogLevel:a,shouldLog:u}=function(e="error"){if(!Q(e))throw r("Cannot create log level configuration with a valid default log level");const t={level:e};return c({getLogLevel:()=>t.level,setLogLevel:e=>{if(!Q(e))throw r(`Cannot set value '${e}' level. Expected levels are ${z}.`);t.level=e},shouldLog:e=>!("none"===t.level||"none"===e||!Q(e))&&Y[e]>=Y[t.level]})}(),d=(e,t)=>{if(e===ie)return e;return function(e,t){return function(...n){if(t())return e(...n)}}((n=e,function(...e){try{n(...e)}catch{}}),()=>u(t));var n};return ce({error:d(e,"error"),warn:d(t,"warn"),log:d(n,"log"),info:d(o,"info"),debug:d(i,"debug"),setLogLevel:s,getLogLevel:a},"")}function ce(e,t){const n=t?`[${t}]`:"",r=e=>n?(...t)=>e(n,...t):e,o=c({error:r(e.error),warn:r(e.warn),log:r(e.log),info:r(e.info),debug:r(e.debug),setLogLevel:e.setLogLevel,getLogLevel:e.getLogLevel,channel:n=>ce(e,t?`${t}:${n}`:n),timed:(e,t)=>function(e,t,n){const r=ne();try{const o=n(),i=ne()-r;return e.debug(`${t} completed in ${i}ms`),o}catch(n){const o=ne()-r;throw e.error(`${t} failed after ${o}ms: ${ae(n)}`),n}}(o,e,t),timedAsync:(e,t)=>async function(e,t,n){const r=ne();try{const o=await n(),i=ne()-r;return e.debug(`${t} completed in ${i}ms`),o}catch(n){const o=ne()-r;throw e.error(`${t} failed after ${o}ms: ${ae(n)}`),n instanceof Error&&n.stack&&e.debug(`Stack trace:\n${n.stack}`),n}}(o,e,t)});return o}function ae(e){return e instanceof Error?e.message:String(e)}function ue(e){return"function"!==H(e)&&e!==ie}function de(e){return`Cannot create a logger when ${e} is not a function`}const le=globalThis.console,fe=le.log.bind(le),ge=le.warn.bind(le),pe=le.error.bind(le),me=le.info.bind(le),ye=le.debug.bind(le);le.trace.bind(le),le.dir.bind(le),le.table.bind(le),le.assert.bind(le),le.clear.bind(le),le.count.bind(le),le.countReset.bind(le),le.group.bind(le),le.groupCollapsed.bind(le),le.groupEnd.bind(le),le.time.bind(le),le.timeEnd.bind(le),le.timeLog.bind(le);const he=se(pe,ge,fe,me,ye),ve="[nexus]";const be=e=>{const{level:t="error",prefix:n=ve,customLogger:r}=e;if(r)return r;he.setLogLevel("debug");const o=se((...e)=>he.error(n,...e),(...e)=>he.warn(n,...e),(...e)=>he.log(n,...e),(...e)=>he.info(n,...e),(...e)=>he.debug(n,...e));return o.setLogLevel(t),o},Ce=globalThis.WeakSet,Ne=globalThis.Reflect;function Ee(e,t){if(!X(H(e)))return!1;const n=e;if(t.has(n))return!0;t.add(n);const r=((e,t)=>{"array"===t&&(t=Array.name),"object"===t&&(t=Object.name);const n=J.find(({classRef:e})=>t===e.name);return void 0===n?[]:n.getKeys(e)})(e,H(e));for(const n of r)if(Ee(e[n],t))return!0;return!1}function $e(e,t){if(Ee(e,Ne.construct(Ce,n?[n]:[])))throw r(`Circular reference detected in parameter "${t}"`);var n}const Se=c({origin:"*",queueMessages:!0,debug:!1,contract:void 0});function Ie(e,t=!0){if(e.getState().active){if(e.updateState({active:!1}),t){const t=e.createProcess(),n=e.actions.closeConnection(t);e.sendAction(n)}e.notifyEvent("close")}}function Te(e,t){const n=function(e,t){return c({...e,queuedMessages:c([...e.queuedMessages,t])})}(e.getState(),t);e.updateState(n)}const Oe=U([b.REQUEST_CONNECTION,b.ACCEPT_CONNECTION,b.DENY_CONNECTION,b.CANCEL_CONNECTION,b.CANCEL_CONNECTION_ACKNOWLEDGED,b.OPEN_CONNECTION]);function we(e,t){const n=e.getState();if(!t||"string"!=typeof t.type)throw r("Action must contain a 'type' property that is a non-empty string.");const o=n.securityTransport,i=Oe.has(t.type);o&&o.isReady()&&!i?o.send(t):n.target.postMessage(t,"*")}function Ae(e,t){const n=e.getState();if(!n.active){if(n.queueMessages)return void Te(e,t);throw r(`Cannot send message. Channel ${n.name} is not open.`)}const o=n.securityTransport,i=n.negotiatedProtocol;if(o&&"none"!==i&&!o.isReady()){if(n.queueMessages)return void Te(e,t);throw r(`Cannot send message. Security transport for channel ${n.name} is not ready.`)}if(!(n.contract?.emitted.map(e=>e.type)??[]).includes(t.type))throw r(`Cannot send message to ${n.name} channel. Message type '${t.type}' is not in the emitted actions of channel contract.`);const s=e.actions.newMessage(t);we(e,s),e.notifyMessage(t)}function xe(e){const t=e.getState();for(const n of t.queuedMessages)try{Ae(e,n)}catch(e){t.logger&&t.logger.error("Failed to send queued message:",e)}const n=function(e){return c({...e,queuedMessages:c([])})}(t);e.updateState(n)}function Pe(e,t,n){let o;if("string"==typeof t&&"function"==typeof n){const e=t,r=n;o=(t,n,o)=>{t===e&&r(n,o)}}else{if("function"!=typeof t)throw r("Expected callback function.");o=t}if("function"!=typeof o)throw r("Expected callback function.");const i=[...e.getState().eventSubscriptions,o];return e.updateState({eventSubscriptions:i}),()=>{const t=e.getState().eventSubscriptions.filter(e=>e!==o);e.updateState({eventSubscriptions:t})}}function Re(e,t,n){const r=e.getState();r.logger&&function(e,t,n){e.debug("Channel event:",t,n)}(r.logger,t,n);const o={id:r.id,name:r.name,active:r.active,origin:r.origin,connectTimestamp:r.connectTimestamp,contract:r.contract,queuedMessagesCount:r.queuedMessages.length};for(const e of r.eventSubscriptions)try{e(t,n,o)}catch(e){r.logger&&r.logger.error(`Error in event handler for '${t}' event:`,e)}}function Le(e,t){const n=e.getState();for(const e of n.messageSubscriptions)try{e(t)}catch(e){n.logger&&n.logger.error(`Error in message handler for '${t.type}' message:`,e)}}function qe(e,t){$e(e.settings,"config.settings");const n={...Se,...e.settings};let o=function(e,t,n){return c({id:h(),name:e,target:t,origin:null,active:!1,connectTimestamp:null,contract:n.contract??null,acceptedActions:c([]),queuedMessages:c([]),eventSubscriptions:c([]),messageSubscriptions:c([]),scheduledActivation:null,queueMessages:n.queueMessages??!0,logger:n.logger??null,brokerManaged:n.brokerManaged??!1,readyToConnect:!1,negotiatedProtocol:null,securityReady:!1,securityTransport:null,pendingSecurityRequest:null})}(e.name,e.target,n);const i={getState:()=>o,updateState:e=>{o={...o,...e}},sendAction:e=>{we(i,e)},createProcess:()=>t.processManager.create(i),removeProcess:e=>{t.processManager.remove(e)},notifyEvent:(e,t)=>{Re(i,e,t)},notifyMessage:e=>{Le(i,e)},actions:t.actions,cleanup:t.cleanup},s={id:o.id,name:o.name,target:o.target,getId:()=>o.id,getName:()=>o.name,getTarget:()=>o.target,isActive:()=>o.active,getAcceptedTypes:()=>o.acceptedActions,toJSON:()=>({id:o.id,name:o.name,active:o.active,origin:o.origin,connectTimestamp:o.connectTimestamp,contract:o.contract,queuedMessagesCount:o.queuedMessages.length}),connect:()=>function(e){const t=e.getState();if(t.active)return;if(t.readyToConnect||e.updateState({readyToConnect:!0}),t.connectTimestamp||e.updateState({connectTimestamp:ne()}),t.scheduledActivation){const[n,r,o,i]=t.scheduledActivation;e.updateState({id:n,origin:r,contract:o,acceptedActions:o.accepted.map(e=>e.type),active:!0,scheduledActivation:null});const s=e.actions.acceptConnection(i);return e.sendAction(s),void e.notifyEvent("open",{id:n,origin:r})}if(t.brokerManaged&&t.contract)return e.updateState({origin:"*",active:!0,acceptedActions:t.contract.accepted.map(e=>e.type)}),e.notifyEvent("open",{id:t.id,origin:"*"}),void xe(e);const n=e.createProcess(),r=e.actions.requestConnection(n);e.sendAction(r)}(i),disconnect:e=>Ie(i,e),cancel:e=>function(e,t=!0){if(e.getState().active)Ie(e,t);else{if(t){const t=e.createProcess(),n=e.actions.cancelConnection(t);e.sendAction(n)}e.notifyEvent("cancel")}}(i,e),destroy:e=>function(e,t=!0){if(e.updateState({active:!1}),t){const t=e.actions.destroyConnection();e.sendAction(t)}e.cleanup&&e.cleanup()}(i,e),send:(e,t)=>Ae(i,{type:e,data:t}),sendAction:e=>we(i,e),on:(e,t)=>"string"==typeof e&&"function"==typeof t?Pe(i,e,t):Pe(i,e),onMessage:e=>function(e,t){if("function"!=typeof t)throw r("Expected callback function.");const n=[...e.getState().messageSubscriptions,t];return e.updateState({messageSubscriptions:n}),()=>{const n=e.getState().messageSubscriptions.filter(e=>e!==t);e.updateState({messageSubscriptions:n})}}(i,e),activate:(e,t)=>{const n=function(e,t,n){const r=(n.accepted||[]).map(e=>e.type);return c({...e,origin:t,active:!0,connectTimestamp:ne(),contract:n,acceptedActions:c(r),scheduledActivation:null})}(o,e,t);i.updateState(n)},isReadyToConnect:()=>o.readyToConnect||o.brokerManaged,scheduleActivation:(e,t,n,r)=>{i.updateState({scheduledActivation:[e,t,n,r]})},notifyEvent:(e,t)=>{Re(i,e,t)},notifyMessage:e=>{Le(i,e)},setPendingSecurityRequest:e=>{i.updateState({pendingSecurityRequest:e})},getPendingSecurityRequest:()=>o.pendingSecurityRequest,setNegotiatedProtocol:e=>{i.updateState({negotiatedProtocol:e})},getNegotiatedProtocol:()=>o.negotiatedProtocol,setSecurityTransport:e=>{i.updateState({securityTransport:e})},getSecurityTransport:()=>o.securityTransport,setSecurityReady:e=>{i.updateState({securityReady:e})},isSecurityReady:()=>o.securityReady};return c(s)}function Me(e,t){return e.getByWindow(t)}function ke(e,t){e.remove(t)}function _e(e,t,n,r,o,i,s={}){$e(s,"settings");const c=Me(t,i);if(c)return c;const a=qe({name:o,target:i,settings:{...s,contract:e.contract,logger:e.logger,brokerManaged:!0}},{actions:r,processManager:n,cleanup:()=>{ke(t,a)}});return function(e,t){e.add(t)}(t,a),a}function je(e,t){return e.getById(t)}function De(e,t){if("object"==typeof t&&null!==t){return Me(e,t)??null}if("string"==typeof t){const n=je(e,t)??function(e,t){return e.getByName(t)}(e,t);return n??null}return null}function Be(e){return e.getAll()}function We(e){return Be(e).map(e=>e.toJSON())}const Ue=c({whitelist:c([]),blacklist:c([]),contractExtension:!1,logLevel:"error"});function Ge(e,t,n){try{const n=e(t);return Boolean(n)}catch(e){return n.error("Security policy threw an error:",e),!1}}function Fe(e,t){const{state:n,processManager:r,logger:o}=e,i=t.data;if(!C(i))return;const s=i.processId,c=i.contract,a=i.security,u=r.get(s);if(!u)return;if(u.isActive())return;try{K(c)}catch{return void u.sendAction({type:"[nexus] connection-request-cancelled",processId:s,senderId:n.id})}if(n.settings.securityPolicy){if(!Ge(n.settings.securityPolicy,t,o))return void u.sendAction({type:"[nexus] connection-request-cancelled",processId:s,senderId:n.id})}let d;if(a){const e=a.negotiated;u.setNegotiatedProtocol(e),o.info(`${n.name} accepted security protocol: ${e}`),"none"===e&&u.setSecurityReady(!0),d={active:"none"!==e,protocol:e}}u.activate(t.origin,c),u.sendAction({type:"[nexus] connection-opened",processId:s,senderId:n.id,...d&&{security:d}}),r.remove(s),u.notifyEvent("open",{origin:t.origin,contract:c})}function Ve(e,t){const n=t.source;if(n){const t=e.getByWindow(n);if(t)return t}return e.getById(t.data.senderId)}function Ke(e,t){const{state:n,registry:r,processManager:o}=e,i=t.data.processId,s=Ve(r,t)||o.get(i);s&&(s.cancel(!1),s.sendAction({type:"[nexus] connection-request-cancelled-acknowledged",processId:i,senderId:n.id}),o.remove(i),s.notifyEvent("cancel",{notify:!0}))}function ze(e,t){const{processManager:n}=e,r=t.data.processId,o=n.get(r);o&&(n.remove(r),o.notifyEvent("cancel",{notify:!1}))}function Ye(e,t){const{state:n,registry:r,processManager:o}=e,i=t.data;if(!("processId"in i))return;const s=i.processId,c=Ve(r,t);c&&c.isActive()&&(c.disconnect(!1),c.sendAction({type:"[nexus] connection-closed-acknowledged",processId:s,senderId:n.id}),o.remove(s),c.notifyEvent("close",{notify:!0}))}function Qe(e,t){const{processManager:n}=e,r=t.data.processId,o=n.get(r);o&&(n.remove(r),o.notifyEvent("close",{notify:!1}))}function Ze(e,t){const{processManager:n}=e,r=t.data,o=r.processId,i=r.error,s=n.get(o);s&&(n.remove(o),s.notifyEvent("deny",{error:i,origin:t.origin}))}function Je(e,t){const{registry:n}=e,r=Ve(n,t);r&&r.destroy(!1)}function He(e,t){const{processManager:n}=e,r=t.data;if(!(e=>"processId"in e)(r))return;const o=r.processId,i=n.get(o);if(!i)return;const s=r.error;i.notifyEvent("invalid",{reason:s,origin:t.origin})}var Xe={$schema:"http://json-schema.org/draft-07/schema#",title:"Message",type:"object",required:["type"],properties:{type:{type:"string",minLength:1},data:{description:"Arbitrary message payload"},timestamp:{type:"number"}},additionalProperties:!0};const et=globalThis.JSON.stringify,tt=globalThis.Number,nt=globalThis.parseInt,rt=globalThis.isNaN,ot=globalThis.isFinite,it=tt.isInteger,st=nt,ct=rt,at=ot;function ut(e,t,n=!0,r=!1,o){const i=R();if(e.definitions)for(const[t,n]of u(e.definitions))i.set(`#/definitions/${t}`,n);return{path:"",errors:[],rootSchema:e,definitions:i,collectAllErrors:n,strictPatterns:r,patternSafetyChecker:o,validate:t}}function dt(e,t){const n=String(t).replace(/~/g,"~0").replace(/\//g,"~1");return{...e,path:`${e.path}/${n}`}}function lt(e,t,n,r,o){e.errors.push({message:t,path:e.path||"/",instance:n,code:r,params:o})}function ft(e){return e.collectAllErrors||0===e.errors.length}function gt(e,t){if(e===t)return!0;if(null===e||null===t)return!1;if(typeof e!=typeof t)return!1;if("object"==typeof e){if(j(e)&&j(t)){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!gt(e[n],t[n]))return!1;return!0}if(j(e)||j(t))return!1;const n=a(e),r=a(t);if(n.length!==r.length)return!1;for(const r of n){if(!g(t,r))return!1;if(!gt(e[r],t[r]))return!1}return!0}return!1}const pt=globalThis.RegExp,mt=globalThis.Reflect,yt=(e,t)=>mt.construct(pt,[e,t]),ht=globalThis.URL,vt=globalThis.Reflect,bt=(e,t)=>vt.construct(ht,[e,t]);"function"==typeof ht.createObjectURL&&ht.createObjectURL.bind(ht),"function"==typeof ht.revokeObjectURL&&ht.revokeObjectURL.bind(ht);const Ct={"date-time":e=>{if(!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/.test(e))return!1;const t=re(e);return!ct(t)},date:e=>{if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;const[t,n,r]=e.split("-").map(Number),o=function(...e){return te.construct(ee,e)}(oe(t,n-1,r));return o.getUTCFullYear()===t&&o.getUTCMonth()===n-1&&o.getUTCDate()===r},time:e=>{const t=e.match(/^(\d{2}):(\d{2}):(\d{2})/);if(!t)return!1;const n=Number(t[1]),r=Number(t[2]),o=Number(t[3]);if(n>23||r>59||o>59)return!1;const i=e.slice(8);return""===i||(!!i.match(/^\.\d{1,9}$/)||(!!i.match(/^(Z|[+-]\d{2}:\d{2})$/)||!!i.match(/^\.\d{1,9}(Z|[+-]\d{2}:\d{2})$/)))},email:e=>/^[^\s@]+@[^\s@.]+\.[^\s@.]+$/.test(e),hostname:e=>{if(e.length>253||0===e.length)return!1;const t=e.split(".");for(const e of t){if(0===e.length||e.length>63)return!1;if(!/^[a-zA-Z0-9]$/.test(e[0]))return!1;if(e.length>1&&!/^[a-zA-Z0-9]$/.test(e[e.length-1]))return!1;for(let t=1;t<e.length-1;t++)if(!/^[a-zA-Z0-9-]$/.test(e[t]))return!1}return!0},ipv4:e=>{const t=e.split(".");return 4===t.length&&t.every(e=>{const t=st(e,10);return!ct(t)&&t>=0&&t<=255&&e===String(t)})},ipv6:e=>{if("::"===e)return!0;if(!e.includes("::")){const t=e.split(":");if(8!==t.length)return!1;const n=/^[0-9a-fA-F]{1,4}$/;return t.every(e=>n.test(e))}const t=e.split("::");if(2!==t.length)return!1;const n=t[0]?t[0].split(":").filter(Boolean):[],r=t[1]?t[1].split(":").filter(Boolean):[];if(n.length+r.length>7)return!1;const o=/^[0-9a-fA-F]{1,4}$/;return n.every(e=>o.test(e))&&r.every(e=>o.test(e))},uri:e=>{try{return bt(e),!0}catch{return!1}},"uri-reference":e=>{try{return bt(e,"http://example.com"),!0}catch{return!1}},uuid:e=>/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(e),regex:e=>{try{return yt(e),!0}catch{return!1}},"json-pointer":e=>{if(""===e)return!0;if(!e.startsWith("/"))return!1;const t=e.slice(1).split("/"),n=/^([^/~]|~[01])*$/;return t.every(e=>n.test(e))}};function Nt(e,t,n){const r=t.items;if(void 0===r)return!0;let o=!0;if(j(r)){for(let t=0;t<r.length&&t<e.length;t++){const i=r[t];if(!i)continue;const s=dt(n,t);if(!n.validate(e[t],i,s)&&(o=!1,!ft(n)))return!1}e.length>r.length&&(function(e,t,n,r){const o=t.additionalItems;if(void 0===o)return!0;let i=!0;if(!1===o)e.length>r&&(lt(n,`Array has too many items. Expected at most ${r}, got ${e.length}`,e,"additionalItems",{limit:r,actual:e.length}),i=!1);else if("object"==typeof o)for(let t=r;t<e.length;t++){const r=dt(n,t);if(!n.validate(e[t],o,r)&&(i=!1,!ft(n)))return!1}return i}(e,t,n,r.length)||(o=!1))}else for(let t=0;t<e.length;t++){const i=dt(n,t);if(!n.validate(e[t],r,i)&&(o=!1,!ft(n)))return!1}return o}const Et={string:e=>"string"==typeof e,number:e=>"number"==typeof e&&at(e),integer:e=>"number"==typeof e&&at(e)&&it(e),boolean:e=>"boolean"==typeof e,array:e=>j(e),object:e=>null!==e&&"object"==typeof e&&!j(e),null:e=>null===e};function $t(e,t,n){const r=t.type;if(void 0===r)return!0;const o=j(r)?r:[r];for(const t of o){const n=Et[t];if(n&&n(e))return!0;if("number"===t&&Et.integer?.(e))return!0}const i=function(e){if(null===e)return"null";if(j(e))return"array";const t=typeof e;if("number"===t){const t=e;return at(t)&&it(t)?"integer":"number"}return t}(e);return lt(n,`Expected type ${o.join(" or ")} but got ${i}`,e,"type",{expected:o,actual:i}),!1}function St(e,t,n){if(t.$ref){const r=function(e,t){const n=t.definitions.get(e);if(n)return n;if(!e.startsWith("#"))return;if("#"===e)return t.rootSchema;const r=e.slice(1);if(!r.startsWith("/"))return;const o=r.split("/").slice(1).map(e=>e.replace(/~1/g,"/").replace(/~0/g,"~"));let i=t.rootSchema;for(const e of o){if(null===i||"object"!=typeof i)return;i=i[e]}if(i&&"object"==typeof i){const n=i;return t.definitions.set(e,n),n}}(t.$ref,n);return!r||St(e,r,n)}let r=!0;if(!$t(e,t,n)&&(r=!1,!ft(n)))return!1;if(!function(e,t,n){if(!t.enum)return!0;for(const n of t.enum)if(gt(e,n))return!0;return lt(n,`Value must be one of: ${t.enum.map(e=>et(e)).join(", ")}`,e,"enum",{allowedValues:t.enum}),!1}(e,t,n)&&(r=!1,!ft(n)))return!1;if("string"==typeof e){if(!function(e,t,n){let r=!0;if(void 0!==t.minLength&&e.length<t.minLength&&(lt(n,`String must be at least ${t.minLength} characters, got ${e.length}`,e,"minLength",{limit:t.minLength,actual:e.length}),r=!1,!ft(n)))return!1;if(void 0!==t.maxLength&&e.length>t.maxLength&&(lt(n,`String must be at most ${t.maxLength} characters, got ${e.length}`,e,"maxLength",{limit:t.maxLength,actual:e.length}),r=!1,!ft(n)))return!1;if(void 0!==t.pattern){if(n.patternSafetyChecker){const o=n.patternSafetyChecker(t.pattern);if(!o.safe)return lt(n,`Unsafe regex pattern: ${o.reason??"Pattern may cause ReDoS"}`,e,"pattern",{pattern:t.pattern,reason:o.reason}),r=!1,!!ft(n)&&r}try{if(!yt(t.pattern).test(e)&&(lt(n,`String does not match pattern: ${t.pattern}`,e,"pattern",{pattern:t.pattern}),r=!1,!ft(n)))return!1}catch(o){if(n.strictPatterns&&(lt(n,`Invalid regex pattern: ${t.pattern}`,e,"pattern",{pattern:t.pattern,error:o instanceof Error?o.message:"Invalid regex"}),r=!1,!ft(n)))return!1}}return r}(e,t,n)&&(r=!1,!ft(n)))return!1;if(!function(e,t,n){if(!t.format)return!0;const r=Ct[t.format];return!r||!!r(e)||(lt(n,`String does not match format '${t.format}'`,e,"format",{format:t.format}),!1)}(e,t,n)&&(r=!1,!ft(n)))return!1}if("number"==typeof e&&!function(e,t,n){let r=!0;if(void 0!==t.minimum){const o=!0===t.exclusiveMinimum;if((o?e<=t.minimum:e<t.minimum)&&(lt(n,`Number must be ${o?"greater than":"at least"} ${t.minimum}, got ${e}`,e,"minimum",{limit:t.minimum,exclusive:o,actual:e}),r=!1,!ft(n)))return!1}if(void 0!==t.maximum){const o=!0===t.exclusiveMaximum;if((o?e>=t.maximum:e>t.maximum)&&(lt(n,`Number must be ${o?"less than":"at most"} ${t.maximum}, got ${e}`,e,"maximum",{limit:t.maximum,exclusive:o,actual:e}),r=!1,!ft(n)))return!1}if(void 0!==t.multipleOf&&t.multipleOf>0){const o=m(e%t.multipleOf),i=1e-10;if(o>i&&t.multipleOf-o>i&&(lt(n,`Number must be a multiple of ${t.multipleOf}, got ${e}`,e,"multipleOf",{multipleOf:t.multipleOf,actual:e}),r=!1,!ft(n)))return!1}return r}(e,t,n)&&(r=!1,!ft(n)))return!1;if(j(e)){if(!Nt(e,t,n)&&(r=!1,!ft(n)))return!1;if(!function(e,t,n){let r=!0;if(void 0!==t.minItems&&e.length<t.minItems&&(lt(n,`Array must have at least ${t.minItems} items, got ${e.length}`,e,"minItems",{limit:t.minItems,actual:e.length}),r=!1,!ft(n)))return!1;if(void 0!==t.maxItems&&e.length>t.maxItems&&(lt(n,`Array must have at most ${t.maxItems} items, got ${e.length}`,e,"maxItems",{limit:t.maxItems,actual:e.length}),r=!1,!ft(n)))return!1;if(!0===t.uniqueItems)for(let t=0;t<e.length;t++)for(let o=t+1;o<e.length;o++)if(gt(e[t],e[o])&&(lt(n,`Array items must be unique. Duplicate found at indices ${t} and ${o}`,e,"uniqueItems"),r=!1,!ft(n)))return!1;return r}(e,t,n)&&(r=!1,!ft(n)))return!1}if(null!==e&&"object"==typeof e&&!j(e)){const o=e;if(!function(e,t,n){if(!t.properties)return!0;let r=!0;for(const[o,i]of u(t.properties))if(g(e,o)){const t=dt(n,o);if(!n.validate(e[o],i,t)&&(r=!1,!ft(n)))return!1}return r}(o,t,n)&&(r=!1,!ft(n)))return!1;if(!function(e,t,n){if(!t.required)return!0;let r=!0;for(const o of t.required)if(!g(e,o)&&(lt(n,`Missing required property: ${o}`,void 0,"required",{missing:o}),r=!1,!ft(n)))return!1;return r}(o,t,n)&&(r=!1,!ft(n)))return!1;if(!function(e,t,n){if(!t.patternProperties)return!0;let r=!0;const o=[];for(const[i,s]of u(t.patternProperties)){if(n.patternSafetyChecker){const t=n.patternSafetyChecker(i);if(!t.safe){if(lt(n,`Unsafe regex pattern in patternProperties: ${t.reason??"Pattern may cause ReDoS"}`,e,"patternProperties",{pattern:i,reason:t.reason}),r=!1,!ft(n))return!1;continue}}try{o.push({regex:yt(i),schema:s})}catch(t){if(n.strictPatterns&&(lt(n,`Invalid regex pattern in patternProperties: ${i}`,e,"patternProperties",{pattern:i,error:t instanceof Error?t.message:"Invalid regex"}),r=!1,!ft(n)))return!1}}for(const t of a(e))for(const{regex:i,schema:s}of o)if(i.test(t)){const o=dt(n,t);if(!n.validate(e[t],s,o)&&(r=!1,!ft(n)))return!1}return r}(o,t,n)&&(r=!1,!ft(n)))return!1;if(!function(e,t,n){const r=t.additionalProperties;if(void 0===r)return!0;const o=U();if(t.properties)for(const e of a(t.properties))o.add(e);const i=[];if(t.patternProperties)for(const e of a(t.patternProperties))if(!n.patternSafetyChecker||n.patternSafetyChecker(e).safe)try{i.push(yt(e))}catch{}let s=!0;for(const t of a(e))if(!o.has(t)&&!i.some(e=>e.test(t)))if(!1===r){if(lt(n,`Additional property not allowed: ${t}`,e[t],"additionalProperties",{property:t}),s=!1,!ft(n))return!1}else if("object"==typeof r){const o=dt(n,t);if(!n.validate(e[t],r,o)&&(s=!1,!ft(n)))return!1}return s}(o,t,n)&&(r=!1,!ft(n)))return!1;if(!function(e,t,n){let r=!0;const o=a(e).length;return!(void 0!==t.minProperties&&o<t.minProperties&&(lt(n,`Object must have at least ${t.minProperties} properties, got ${o}`,e,"minProperties",{limit:t.minProperties,actual:o}),r=!1,!ft(n)))&&!(void 0!==t.maxProperties&&o>t.maxProperties&&(lt(n,`Object must have at most ${t.maxProperties} properties, got ${o}`,e,"maxProperties",{limit:t.maxProperties,actual:o}),r=!1,!ft(n)))&&r}(o,t,n)&&(r=!1,!ft(n)))return!1;if(!function(e,t,n){if(!t.dependencies)return!0;let r=!0;for(const[o,i]of u(t.dependencies))if(g(e,o))if(j(i)){for(const t of i)if(!g(e,t)&&(lt(n,`Property '${o}' requires property '${t}' to also be present`,e,"dependencies",{property:o,required:t}),r=!1,!ft(n)))return!1}else if(!n.validate(e,i,n)&&(r=!1,!ft(n)))return!1;return r}(o,t,n)&&(r=!1,!ft(n)))return!1}return!(!function(e,t,n){const r=t.allOf;if(!r||0===r.length)return!0;let o=!0;for(let t=0;t<r.length;t++){const i=r[t];if(i&&!n.validate(e,i,n)&&(o=!1,!ft(n)))return!1}return o}(e,t,n)&&(r=!1,!ft(n)))&&(!(!function(e,t,n){const r=t.anyOf;if(!r||0===r.length)return!0;for(const t of r){const r=ut(n.rootSchema,n.validate,!1);if(l(r,"path",{value:n.path,writable:!1}),n.validate(e,t,r))return!0}return lt(n,"Value does not match any of the allowed schemas (anyOf)",e,"anyOf"),!1}(e,t,n)&&(r=!1,!ft(n)))&&(!(!function(e,t,n){const r=t.oneOf;if(!r||0===r.length)return!0;let o=0;for(const t of r){const r=ut(n.rootSchema,n.validate,!1);if(l(r,"path",{value:n.path,writable:!1}),n.validate(e,t,r)&&(o++,o>1))break}return 1===o||(0===o?lt(n,"Value does not match any of the schemas (oneOf)",e,"oneOf"):lt(n,`Value matches ${o} schemas but must match exactly one (oneOf)`,e,"oneOf",{matches:o}),!1)}(e,t,n)&&(r=!1,!ft(n)))&&(!(!function(e,t,n){const r=t.not;if(!r)return!0;const o=ut(n.rootSchema,n.validate,!1);return l(o,"path",{value:n.path,writable:!1}),!n.validate(e,r,o)||(lt(n,"Value should NOT match the schema",e,"not"),!1)}(e,t,n)&&(r=!1,!ft(n)))&&r)))}function It(e,t){return t=>function(e,t){const n=ut(t,St,!0,!1,void 0);return{valid:St(e,t,n),errors:n.errors}}(t,e)}const Tt=function(e){const t=It(e);return e=>{const n=t(e);return{valid:n.valid,errors:n.errors.map(e=>({message:e.message,path:e.path,value:e.instance}))}}}(Xe);function Ot(e,t){const{state:n,registry:r,logger:o}=e,i=t.data;if(!(e=>"data"in e)(i))return;const s=i.data,c=Ve(r,t);if(!c||!c.isActive())return;const a=function(e){return Tt(e)}(s);a.valid?c.getAcceptedTypes().includes(s.type)?c.notifyMessage(s):o.info(`${n.name} dropped message type '${s.type}' not accepted by the ${c.getName()} channel contract`):o.info(`${n.name} ignored message from ${c.getName()}`)}function wt(e,t){const{state:n,processManager:r,logger:o}=e,i=t.data,s=i.processId,c=i.security,a=r.get(s);a&&(r.remove(s),c?(a.getNegotiatedProtocol()||a.setNegotiatedProtocol(c.protocol),a.setSecurityReady(!0),o.info(`${n.name} security ready: protocol=${c.protocol}, active=${c.active}`),a.notifyEvent("security-ready",{protocol:c.protocol,active:c.active})):a.setSecurityReady(!0),a.notifyEvent("open",{origin:t.origin}))}function At(e,t){for(const n of e.supported)if(t.includes(n))return{negotiated:n,isPreferred:n===e.preferred};return{negotiated:"none",isPreferred:"none"===e.preferred}}function xt(e,t){return c({negotiated:e})}const Pt=["none"];function Rt(e,t){const{state:n,registry:r,processManager:o,actions:i,logger:s}=e,c=t.data,a=c.senderId;if(!C(c))return;const u=c.processId,d=c.contract,l=c.security;let f,g=je(r,a);if(g||(g=_e(n,r,o,i,a,t.source,{})),o.create(g),g.isActive())if(a===g.id){const e=l?xt(At(l,Pt).negotiated):void 0;g.sendAction({type:"[nexus] connection-request-accepted",processId:u,senderId:n.id,contract:n.contract,...e&&{security:e}})}else s.info(`${n.name} detected channel [${g.getName()}] reloaded.`);else{try{K(d)}catch{return g.sendAction({type:"[nexus] connection-request-denied",processId:u,senderId:n.id,error:"Invalid contract."}),void o.remove(u)}if(n.settings.securityPolicy){if(!Ge(n.settings.securityPolicy,t,s))return g.sendAction({type:"[nexus] connection-request-denied",processId:u,senderId:n.id,error:"Not accepted."}),void o.remove(u)}if(l&&g.setPendingSecurityRequest(l),!g.isReadyToConnect())return g.scheduleActivation(a,t.origin,d,u),void s.info(`${n.name} scheduled activation for channel ${g.getName()}`);if(l){const e=At(l,Pt);g.setNegotiatedProtocol(e.negotiated),f=xt(e.negotiated),s.info(`${n.name} negotiated security protocol: ${e.negotiated}`)}g.activate(t.origin,d),g.sendAction({type:"[nexus] connection-request-accepted",processId:u,senderId:n.id,contract:n.contract,...f&&{security:f}})}}class Lt extends Error{code;originalCause;constructor(e,t,n){super(e),this.name="SecurityError",this.code=t,this.originalCause=n,f(this,Lt.prototype)}}function qt(e,t,n){const{state:r,registry:o,logger:i}=e,s=n?.origin,c=n?.data;if(!(c instanceof Uint8Array))return void i.warn("routeEncryptedMessage called with non-Uint8Array payload");const a=function(e,t){const n=Be(e);for(const e of n){const n=e;if(!n.isActive||"function"!=typeof n.isActive)continue;if(!n.isActive())continue;if(n.toJSON().origin===t)return n}return}(o,s);if(!a)return void i.info(`${r.name} ignored encrypted message - no channel for origin ${s}`);const u=a.getSecurityTransport();if(!u)return void i.warn(`${r.name} received encrypted message but channel has no security transport`);if(!u.isReady())return void i.warn(`${r.name} received encrypted message but security transport not ready`);const d=u;if("function"==typeof d.handleReceive)try{d.handleReceive(c)}catch(e){const t=function(e){if(e instanceof Lt)return{message:e.message,code:e.code,cause:e.originalCause};if(e instanceof Error){const t=function(e){const t=e.message.toLowerCase();return t.includes("decrypt")||t.includes("invalid key")||t.includes("corrupted")||t.includes("cipher")?"decryption_failed":t.includes("deobfuscat")||t.includes("time window")||t.includes("clock skew")||t.includes("timestamp")?"deobfuscation_failed":t.includes("transport")||t.includes("connection")||t.includes("network")?"transport_error":"unknown"}(e);return{message:e.message,code:t,cause:e}}return{message:String(e),code:"unknown"}}(e);!function(e,t,n){const r=`${t} security error:`;"unknown"===n.code?e.error(r,n.message,n.cause):e.warn(r,`[${n.code}]`,n.message)}(i,a.getName(),t),a.notifyEvent("security-error",t)}else i.error("Security transport missing handleReceive method")}function Mt(e){$e(e.contract,"config.contract"),$e(e.settings,"config.settings"),function(e){if(null==e)throw r("Name cannot be null or undefined");if("string"!=typeof e)throw r("Name must be a string");if(0===e.trim().length)throw r("Name cannot be empty")}(e.name),K(e.contract);const t=e.window??("undefined"!=typeof window?window:void 0);if(!t)throw r("Cannot create broker: no window is available. Pass an explicit `window` in the broker config when running outside a browser environment.");const n={...Ue,...e.settings,contract:e.contract},o=function(e={}){return be(e)}({level:n.logLevel??"error",customLogger:n.logger}),i={id:h(),name:e.name,window:t,contract:e.contract,settings:n,logger:o},s=function(){const e=V(),t=R(),n=R(),o=U();return c({add:i=>{if(!(i&&i.id&&i.name&&i.target))throw r("Invalid channel: must have id, name, and target properties");o.add(i),e.set(i.target,i),t.set(i.id,i),n.set(i.name,i)},remove:r=>{r&&(o.delete(r),r.target&&e.delete(r.target),r.id&&t.delete(r.id),r.name&&n.delete(r.name))},getByWindow:t=>e.get(t),getById:e=>t.get(e),getByName:e=>n.get(e),getAll:()=>D(o),clear:()=>{o.clear(),t.clear(),n.clear()}})}(),a=(()=>{const e=R();return c({create:q(e),get:M(e),remove:k(e),clear:L(e),track:(t,n)=>{e.set(t,n)},has:t=>e.has(t)})})(),d=function(){const e=R();return c({register:(t,n)=>{if(!n)throw r(`Cannot register null/undefined provider for ${t}`);e.set(t,n)},unregister:t=>{e.delete(t)},get:t=>{if("none"!==t)return e.get(t)},has:t=>"none"===t||e.has(t),getSupportedVersions:()=>{const t=["none"];return e.has("v1")&&t.unshift("v1"),e.has("v2")&&t.unshift("v2"),t}})}();if(e.settings?.security?.protocols){const t=e.settings.security.protocols;t.v1&&d.register("v1",t.v1),t.v2&&d.register("v2",t.v2)}const l=c({requestConnection:A(f={getBrokerId:()=>i.id,getContract:()=>i.contract}),acceptConnection:N(f),denyConnection:S(f),cancelConnection:E(f),openConnection:w(f),closeConnection:$(f),destroyConnection:I(f),newMessage:O(f),invalidRequest:T(f)});var f;const g=function(e){const t=R();return u(e).forEach(([e,n])=>{t.set(e,n)}),t}({[b.REQUEST_CONNECTION]:Rt,[b.ACCEPT_CONNECTION]:Fe,[b.DENY_CONNECTION]:Ze,[b.CANCEL_CONNECTION]:Ke,[b.CANCEL_CONNECTION_ACKNOWLEDGED]:ze,[b.CLOSE_CONNECTION]:Ye,[b.CLOSE_CONNECTION_ACKNOWLEDGED]:Qe,[b.OPEN_CONNECTION]:wt,[b.DESTROY_CONNECTION]:Je,[b.NEW_MESSAGE]:Ot,[b.INVALID_REQUEST]:He}),p={state:i,registry:s,processManager:a,actions:l,logger:o};t.addEventListener("message",e=>{const t=e?.origin;!function(e,t=[],n=[]){return t&&t.length>0?t.includes(e):!(n&&n.length>0&&n.includes(e))}(t,i.settings.whitelist,i.settings.blacklist)?o.info(`${i.name} ignored message from ${t}`):e.data instanceof Uint8Array?qt(p,0,e):function(e,t,n){const{logger:r}=t;try{const o=n?.data,i=o?.type;if(!i)return void r.warn("Received message without action type");!function(e,t,n){e.debug(`Action ${n}:`,t.type,t)}(r,o,"received");const s=e.get(i);if(!s)return void r.warn(`No handler for action type: ${i}`);s(t,n)}catch(e){r.error("Error routing message:",e)}}(g,p,e)});const m={id:i.id,name:i.name,settings:i.settings,get contract(){return i.contract},get channels(){return We(s)},get acceptedActionTypes(){return i.contract.accepted.map(e=>e.type)},addChannel:(e,t,n)=>_e(i,s,a,l,e,t,n??{}),getChannel:e=>De(s,e),removeChannel(e){const t=De(s,e);t&&function(e,t){t.destroy(!1),ke(e,t)}(s,t)},setSecurityPolicy:e=>(function(e){if("function"!=typeof e)throw r("Security policy must be a function that returns true or false.")}(e),i.settings.securityPolicy=e,m),extendContract(e){if(!i.settings.contractExtension)throw r("Original contract cannot be extended.");return K(e),i.contract=function(...e){const t={accepted:[],emitted:[]};return e.forEach(e=>{e&&e.accepted&&e.emitted&&(e.accepted.forEach(e=>{t.accepted.some(t=>t.type===e.type)||t.accepted.push(e)}),e.emitted.forEach(e=>{t.emitted.some(t=>t.type===e.type)||t.emitted.push(e)}))}),c({accepted:c(t.accepted),emitted:c(t.emitted)})}(i.contract,e),m},toJSON:()=>({id:i.id,name:i.name,settings:i.settings,acceptedActionTypes:i.contract.accepted.map(e=>e.type),channels:We(s)}),registerProtocol:(e,t)=>(d.register(e,t),m),unregisterProtocol:e=>(d.unregister(e),m),hasProtocol:e=>d.has(e),getSupportedProtocols:()=>d.getSupportedVersions(),get logger(){return i.logger}};return c(m)}const kt=c({emitted:c([{type:"MESSAGE",description:"Generic message"},{type:"DATA",description:"Generic data transfer"},{type:"EVENT",description:"Generic event"}]),accepted:c([{type:"MESSAGE",description:"Generic message"},{type:"DATA",description:"Generic data transfer"},{type:"EVENT",description:"Generic event"},{type:"ACK",description:"Acknowledgment"}])}),_t=globalThis.Reflect,jt=_t.get,Dt=_t.has,Bt=_t.ownKeys,Wt=_t.getOwnPropertyDescriptor;let Ut=null;function Gt(){return Ut||(Ut=Mt({name:"default-broker",contract:kt})),Ut}function Ft(e){return"object"==typeof e&&null!==e&&!j(e)}function Vt(e,t,n){j(e)?e.forEach((e,r)=>{Ft(e)?("string"==typeof e.type&&0!==e.type.length||n.push(`"${t}[${r}]" must have a non-empty string "type".`),void 0===e.respondsWith||"string"==typeof e.respondsWith&&0!==e.respondsWith.length||n.push(`"${t}[${r}]" has a "respondsWith" that must be a non-empty string.`)):n.push(`"${t}[${r}]" must be an object, but got ${zt(e)}.`)}):n.push(`"${t}" must be an array.`)}function Kt(e,t,n,r,o){e.forEach((e,i)=>{void 0!==e.respondsWith&&(n.some(t=>t.type===e.respondsWith)||o.push(`"${t}[${i}]" responds with "${e.respondsWith}", but "${r}" has no action of that type.`))})}function zt(e){return null===e?"null":j(e)?"an array":"a "+typeof e}new Proxy({},{get:(e,t)=>jt(Gt(),t),has:(e,t)=>Dt(Gt(),t),ownKeys:()=>Bt(Gt()),getOwnPropertyDescriptor:(e,t)=>{const n=Wt(Gt(),t);return n?{...n,configurable:!0}:void 0}});const Yt=c({Beat:"__hf:beat",Size:"__hf:size",Request:"__hf:request",Response:"__hf:response"});const Qt=globalThis.Promise,Zt=globalThis.Reflect,Jt=e=>Zt.construct(Qt,[e]),Ht=Qt.resolve.bind(Qt),Xt=Qt.reject.bind(Qt);Qt.all.bind(Qt),Qt.race.bind(Qt),Qt.allSettled.bind(Qt),Qt.any.bind(Qt),Qt.withResolvers?.bind(Qt);const en=globalThis.setTimeout,tn=globalThis.setInterval,nn=globalThis.clearTimeout,rn=globalThis.clearInterval,on=e=>{nn(e)};function sn(e,t){let n={};const o={};let i=0;const s=(n,r)=>t(Yt.Response,{correlationId:n.correlationId,from:e,innerType:n.innerType,...r}),a=e=>{const t=(e=>{const t=n[e];return t&&(on(t.timer),delete n[e]),t})(e.correlationId);t&&(e.ok?t.resolve(e.payload):t.reject(r(e.error??`Request '${e.innerType}' failed.`)))};return c({request:(o,s,c)=>Jt((a,u)=>{const d=c?.timeoutMs??3e4,l=`${e}-${i+=1}`,f=((e,t,...n)=>en(e,t,...n))(()=>{delete n[l],u(r(`Request '${o}' timed out after ${d}ms.`))},d);n[l]={resolve:a,reject:u,timer:f},t(Yt.Request,{correlationId:l,from:e,innerType:o,payload:s})}),handle:(e,t)=>{if(o[e])throw r(`A handler for '${e}' is already registered.`);return o[e]=t,()=>{o[e]===t&&delete o[e]}},dispatch:(t,n)=>{const r="object"==typeof n?n:null;r&&r.from!==e&&(t!==Yt.Request?t===Yt.Response&&a(r):(e=>{const t=o[e.innerType];t?Ht().then(()=>t(e.payload)).then(t=>s(e,{ok:!0,payload:t}),t=>s(e,{ok:!1,error:t instanceof Error?t.message:`${t}`})):s(e,{ok:!1,error:`No handler is registered for '${e.innerType}'.`})})(r))},rejectAll:e=>{const t=d(n);n={};for(const n of t)on(n.timer),n.reject(r(e))}})}function cn(e){let t;return{start(){void 0===t&&(t=((e,t,...n)=>tn(e,t,...n))(()=>e(Yt.Beat),1e3))},stop(){rn(t),t=void 0}}}function an(e,t){if(!function(e){try{return document.createDocumentFragment().querySelector(e),!0}catch{return!1}}(e))throw r("A valid css select must be provided");if("object"===H(t)&&(t=function(e){const t=[],n=u(e).reduce((e,[n,r])=>{try{return`${e}${n.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}: ${""===r?"''":r}; `}catch(r){return t.push(`Failed to convert property "${n}". Error: ${r.message}`),e}},"");return t.length>0&&he.warn("Some properties failed to convert:\n"+t.join("\n")),n}(t).trim()),"string"!==H(t)||0===t.length)throw r("A valid string value must be provided to add in styleesheet.");return`${e}{${t}}`}const un=U(),dn=U(),ln=R(),fn=V();function gn(e,t){var n;if("object"===H(e)&&(e="object"!==H(n=e)?"":u(n).map(([e,t])=>an(e,t)).join("\n")),"string"!==H(e)||0===e.length)throw r("A valid string or StyleMap must be provided to add in styleesheet.");const o=document.createElement("style");o.textContent=e,document.head.appendChild(o),un.add(o);return[o,()=>function(e){let t,n;"string"===H(e)?(n=e,t=ln.get(n)):(t=e,n=fn.get(t));try{document.head.removeChild(t),un.delete(t)}catch{}try{dn.delete(n),ln.delete(n),fn.delete(t)}catch{}}(o)]}function pn(e){let t;const n=()=>e(Yt.Size,{width:document.body.scrollWidth,height:document.body.scrollHeight});return{start(){t||(n(),t=function(e,t){const n=new ResizeObserver(e=>{for(const n of e)r||t(n.contentRect)});let r=!1;return n.observe(e),()=>{r=!0,n.unobserve(e)}}(document.body,n))},stop(){t&&(t(),t=void 0)}}}return e.createFeature=function(e){const t=function(e){const t=()=>[{type:Yt.Beat},{type:Yt.Size},{type:Yt.Request},{type:Yt.Response}];return{emitted:[...e.emitted,...t()],accepted:[...e.accepted,...t()]}}(function(e){if(!Ft(e))throw r(`Invalid contract: expected an object with "emitted" and "accepted" arrays, but got ${zt(e)}.`);const t=[];if(Vt(e.emitted,"emitted",t),Vt(e.accepted,"accepted",t),0===t.length){const n=e.emitted,r=e.accepted;Kt(n,"emitted",r,"accepted",t),Kt(r,"accepted",n,"emitted",t)}if(t.length>0)throw r(`Invalid contract:\n${t.map(e=>` - ${e}`).join("\n")}`);return{emitted:e.emitted,accepted:e.accepted}}(e.contract)),n=function(){const e={};return c({on:(t,n)=>{const r=e[t]??(e[t]=[]);return r.push(n),()=>{e[t]=r.filter(e=>e!==n)}},emit:(t,n)=>{e[t]?.forEach(e=>e(n))}})}(),o=Mt({name:e.name,contract:t});return!1!==e.resetBody&&gn("html,body{margin:0;padding:0;background:transparent}"),function(e,t,n){let o=null,i=!1;const s=sn("feature",(e,t)=>o?.send(e,t));if(t){const r=e.addChannel("host",t);o=r;const c=cn(e=>r.send(e)),a=pn((e,t)=>r.send(e,t));r.on("open",()=>{i=!0,n.emit("open"),c.start(),a.start()}),r.on("close",()=>{i=!1,n.emit("close"),c.stop(),a.stop(),s.rejectAll("The host channel closed before the host responded.")}),r.on("deny",e=>n.emit("error",e)),r.on("invalid",e=>n.emit("error",e)),r.onMessage(e=>{!function(e){return e.startsWith("__hf:")}(e.type)?n.emit(e.type,e.data):s.dispatch(e.type,e.data)}),r.connect()}return c({send:(e,t)=>o?.send(e,t),request:(e,t,n)=>o?s.request(e,t,n):Xt(r(`Cannot send request '${e}': the feature is not connected to a host.`)),handle:s.handle,on:n.on,ready:()=>Jt(e=>{i?e():n.on("open",()=>e())}),close:()=>o?.disconnect()})}(o,(i=window).parent!==i?i.parent:i.opener?i.opener:null,n);var i},e}({});