// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
"use strict";(()=>{var A=["invalid-frame","invalid-payload","payload-too-large","unsupported-version","schema-mismatch","permission-denied","unknown-method","receiver-unavailable","not-ready","overloaded","cancelled","deadline-exceeded","navigated","closed","transport","handler"],r=class extends Error{constructor(d,a=d,i="Check the connection and the generated contract.",p){super(a);this.code=d;this.help=i;this.applicationCode=p;this.name="IpcError"}code;help;applicationCode};function R(e){return A.includes(e)?e:"transport"}function x(e,c="transport"){if(e instanceof r)return e;if(e&&typeof e=="object"){let d=Object.getOwnPropertyDescriptor(e,"name")?.value,a=Object.getOwnPropertyDescriptor(e,"code")?.value;if(d==="IpcError"&&A.includes(a))return new r(a)}return new r(c)}var k=Object.freeze({maxFrameBytes:1048576,maxNativeControlBytes:4096,maxPendingCallsPerDirection:64,maxOutstandingNotificationsPerDirection:64,maxQueuedFramesPerDirection:128,maxQueuedBytesPerDirection:8388608,maxAdmittedInputBytesPerFrame:8388608,maxRetainedBytesPerFrame:16777216,maxWorkerTasksPerFrameIncludingRetiredDocuments:128,maxCallbacksPerEvent:16,maxCallbacksPerDocument:128,maxCallbackTasksPerDocument:128,maxCollectionEntriesPerMessage:16384,maxSchemaDepth:16,maxReadinessWaiters:16,defaultTimeoutMs:3e4,maxTimeoutMs:3e5,notificationAcceptTimeoutMs:3e4,handshakeTimeoutMs:5e3,maxErrorTextBytesTotal:2048,reservedControlFramesPerDirection:128});function M(e){for(let c of Object.keys(k))if(!Number.isSafeInteger(e[c])||e[c]<=0)throw new r("invalid-frame",`Invalid IPC limit: ${c}`);if(e.maxFrameBytes>16*1048576||e.maxNativeControlBytes>65536||e.maxPendingCallsPerDirection>4096||e.maxCallbacksPerDocument>1024||e.maxQueuedBytesPerDirection>64*1048576||e.maxFrameBytes>e.maxQueuedBytesPerDirection||e.defaultTimeoutMs>e.maxTimeoutMs||e.maxTimeoutMs>3e5||e.maxOutstandingNotificationsPerDirection>4096||e.maxCallbacksPerEvent>e.maxCallbacksPerDocument||e.maxSchemaDepth>16||e.maxReadinessWaiters>16||e.notificationAcceptTimeoutMs>e.maxTimeoutMs||e.maxWorkerTasksPerFrameIncludingRetiredDocuments>4096||e.maxCallbackTasksPerDocument>4096||e.maxQueuedFramesPerDirection>8192||e.reservedControlFramesPerDirection>8192||e.maxCollectionEntriesPerMessage>1048576||e.maxErrorTextBytesTotal>2048||e.handshakeTimeoutMs>5e3||e.maxFrameBytes<e.maxErrorTextBytesTotal+128)throw new r("invalid-frame","Inconsistent IPC limits.");if(e.maxAdmittedInputBytesPerFrame>64*1048576||e.maxRetainedBytesPerFrame>128*1048576||e.maxAdmittedInputBytesPerFrame<e.maxFrameBytes||e.maxRetainedBytesPerFrame<e.maxAdmittedInputBytesPerFrame)throw new r("invalid-frame","Inconsistent IPC byte budgets.")}function j(e){return{wireVersion:e.wireVersion,contractName:e.contractName,contractMajor:e.contractMajor,schemaHash:e.schemaHash}}function E(e,c){if(typeof e!="string"||e.length!==c)return!1;for(let d=0;d<e.length;d++){let a=e.charCodeAt(d);if(!(a>=48&&a<=57)&&!(a>=97&&a<=102))return!1}return!0}function _(e,c=!1){if(typeof e!="string"||e.length===0||e.length>20)return!1;try{let d=BigInt(e);return d>=(c?0n:1n)&&d<=0xffffffffffffffffn&&String(d)===e}catch{return!1}}function h(e){if(!e||typeof e!="object"||Array.isArray(e))throw new r("invalid-frame");let c=JSON.stringify(e);if(c.length>k.maxNativeControlBytes||new TextEncoder().encode(c).byteLength>k.maxNativeControlBytes)throw new r("invalid-frame");return e}function V(e,c,d=0n){let a="";for(let t of crypto.getRandomValues(new Uint8Array(16)))a+=t.toString(16).padStart(2,"0");let i,p,s,g=!1,o=!1,f,v=!1,C=d,l,D="1",b=e.subscribe(T);function P(t){try{Promise.resolve(e.postMessage({kind:"disconnect",generation:t.generation,token:t.token})).catch(()=>{})}catch{}}function N(){if(!f)return;let t=f;f=void 0,v=!1,P(t)}function B(t,n){return t.kind==="helloResult"&&t.callId===D&&t.navigation===n.navigation&&t.documentNonce===n.documentNonce&&t.challenge===n.challenge}function O(t,n){try{let m=h(t);B(m,n)&&!m.error&&_(m.generation)&&E(m.token,32)&&P({generation:m.generation,token:m.token})}catch{}}function w(t){if(!l)return;let n=l;l=void 0,p=void 0,i=void 0,clearTimeout(n.timer),o=!0,b.close(),s=void 0,N(),n.reject(t)}function T(t){if(!o)try{let n=h(t);if(n.kind==="ready"||n.kind==="closed"){if(!_(n.generation))throw new r("invalid-frame");if(BigInt(n.generation)<=d)return;if(n.kind==="ready")s?.({kind:"ready",generation:n.generation});else{let u=R(n.code);s?.({kind:"closed",generation:n.generation,code:u}),(!f||n.generation===f.generation)&&w(new r(u))}return}if(!l||!i||!B(n,i))return;if(n.error){let u=h(n.error);w(new r(R(u.code)));return}if(!_(n.generation))throw new r("invalid-frame");if(!E(n.token,32))throw new r("invalid-frame");f={generation:n.generation,token:n.token};let m=i.nativeCarrierVersion;if(m===1?n.nativeCarrierVersion!==1:n.nativeCarrierVersion!==void 0)throw new r("unsupported-version");if(BigInt(n.generation)<=d)throw new r("navigated");C=BigInt(n.generation);let y=h(n.limits);M(y),v=m===1;let I=l;l=void 0,clearTimeout(I.timer),I.resolve({generation:n.generation,token:n.token,limits:Object.freeze({...y}),...v?{nativeCarrierVersion:1}:{}})}catch(n){w(x(n,"invalid-frame"))}}return{bootstrap:Object.freeze({documentNonce:a,activate(t){if(o||!t||t.documentNonce!==a||!_(t.navigation,!0)||!E(t.challenge,32)||t.nativeCarrierVersion!==void 0&&(t.nativeCarrierVersion!==1||!c))return!1;if(i)return i.navigation===t.navigation&&i.challenge===t.challenge&&i.nativeCarrierVersion===t.nativeCarrierVersion;i=Object.freeze({navigation:t.navigation,documentNonce:a,challenge:t.challenge,...t.nativeCarrierVersion===1?{nativeCarrierVersion:1}:{}});let n=p;return p=void 0,n?.(),!0},hello(t){if(g||o)return Promise.reject(new r("not-ready"));g=!0;try{if(t=j(t),t.wireVersion!==3||!t.contractName||t.contractName.length>1024||!Number.isSafeInteger(t.contractMajor)||t.contractMajor<=0||t.contractMajor>4294967295||!E(t.schemaHash,64))throw new r("invalid-payload")}catch(n){return o=!0,b.close(),s=void 0,Promise.reject(x(n,"invalid-payload"))}return new Promise((n,m)=>{l={resolve:n,reject:m,timer:setTimeout(()=>{w(new r("deadline-exceeded","Native IPC admission timed out.")),o=!0,b.close(),s=void 0},k.handshakeTimeoutMs)};let y=()=>{if(!i)return;let I=i;Promise.resolve().then(()=>{if(!l||o)return;let u={...t,...I,kind:"hello",callId:D};return h(u),e.postMessage(u)}).then(u=>{u!==void 0&&(o?O(u,I):T(u))}).catch(u=>w(x(u)))};i?y():p=y})},subscribeControl(t){if(o)throw new r("closed");if(s)throw new r("invalid-frame","A transport already owns this document.");return s=t,{close(){s===t&&(s=void 0)}}},disconnect(t,n){if(!o){if(f){if(t!==f.generation||n!==f.token)return}else if(t!=="0"||n!=="")return;o=!0,p=void 0,i=void 0,w(new r("closed")),b.close(),s=void 0,N()}},get nativeData(){return!o&&v?c:void 0}}),get generation(){return C},retire(){let t=l,n=s,m=f?.generation??"0";o=!0,l=void 0,v=!1,s=void 0,i=void 0,p=void 0,t&&clearTimeout(t.timer),b.close(),N(),t?.reject(new r("navigated")),n?.({kind:"closed",generation:m,code:"navigated"})}}}function L(e,c,d,a){if("__webuiDesktopIpcV2"in e)throw new r("invalid-frame","Conflicting IPC bootstrap.");if(!Object.isExtensible(e))throw new r("invalid-frame","IPC bootstrap target is not extensible.");let i=V(c,a),p=Object.freeze({get documentNonce(){return i.bootstrap.documentNonce},activate:s=>i.bootstrap.activate(s),hello:s=>i.bootstrap.hello(s),subscribeControl:s=>i.bootstrap.subscribeControl(s),disconnect:(s,g)=>i.bootstrap.disconnect(s,g),get nativeData(){return i.bootstrap.nativeData}});return Object.defineProperty(e,"__webuiDesktopIpcV2",{value:p,writable:!1,configurable:!1}),d?.(s=>{let g=i;try{g.retire()}finally{s&&(i=V(c,a,g.generation))}}),p}function W(e){if(e!==e.top)return;let c=e.webkit?.messageHandlers?.webuiDesktopIpc,d=void 0,a=e.chrome?.webview;if(!c&&!a)return;let i,p,s={postMessage:o=>c?c.postMessage(o):a.postMessage(o),subscribe(o){i=o;let f=C=>{let l=C.data;o(l)},v=!0;return a&&a.addEventListener("message",f),{close(){v&&(v=!1,i===o&&(i=void 0),a&&a.removeEventListener("message",f))}}}},g=void 0;if("__webuiDesktopIpcReceiveV2"in e)throw new r("invalid-frame","Conflicting native IPC control receiver.");Object.defineProperty(e,"__webuiDesktopIpcReceiveV2",{value:Object.freeze(o=>i?.(o)),writable:!1,configurable:!1}),L(e,s,o=>{e.addEventListener("pagehide",f=>{f.isTrusted&&o(f.persisted)})},g)}W(window);})();