@codexhost/cli-darwin-arm64 0.18.0-beta.3 → 0.18.0-beta.4
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.
- package/README.md +1 -1
- package/app/codexhost-distribution.json +1 -1
- package/app/console-server.mjs +9 -4
- package/app/console-web.js +9 -4
- package/app/desktop-controller.mjs +9 -4
- package/app/host-runtime.mjs +4751 -2746
- package/app/plugins/antigravity/plugin.mjs +9 -4
- package/app/plugins/claude-code/plugin.mjs +129 -58
- package/app/plugins/codebuddy/plugin.mjs +9 -4
- package/app/plugins/codex-usage/plugin.mjs +9 -4
- package/app/plugins/copilot/plugin.mjs +9 -4
- package/app/plugins/cursor-cli/plugin.mjs +9 -4
- package/app/plugins/deepseek-harness/plugin.mjs +9 -4
- package/app/plugins/devin/plugin.mjs +9 -4
- package/app/plugins/grok/plugin.mjs +9 -4
- package/app/plugins/hermes/plugin.mjs +9 -4
- package/app/plugins/kimi-code/plugin.mjs +9 -4
- package/app/plugins/kiro-cli/plugin.mjs +9 -4
- package/app/plugins/omp/plugin.mjs +9 -4
- package/app/plugins/opencode/plugin.mjs +9 -4
- package/app/plugins/pi/plugin.mjs +9 -4
- package/app/plugins/qoder/plugin.mjs +9 -4
- package/app/plugins/qoder-cn/plugin.mjs +9 -4
- package/app/plugins/qwen-code/plugin.mjs +9 -4
- package/app/plugins/workbuddy/plugin.mjs +9 -4
- package/app/plugins/zcode/plugin.mjs +9 -4
- package/app/renderer-extension.js +9 -4
- package/app/web/assets/{index-aKvkfNJN.js → index-D1dOzBMI.js} +2 -2
- package/app/web/codexhost-settings.js +9 -4
- package/app/web/index.html +1 -1
- package/app/web/plugins/deepseek-ai__dsh-api-gateway/client.js +1 -1
- package/app/web/plugins/deepseek-ai__dsh-api-remotes/client.js +1 -1
- package/app/web/plugins/deepseek-ai__dsh-api-session-controller/client.js +3 -3
- package/app/web/plugins/deepseek-ai__dsh-client-connection/client.js +1 -1
- package/app/web/plugins/deepseek-ai__dsh-client-ui-codexhost/client.js +63 -63
- package/app/web/plugins/deepseek-ai__dsh-client-ui-conversation/client.js +8 -8
- package/app/web/plugins/deepseek-ai__dsh-client-ui-layout/client.js +2 -2
- package/app/web/plugins/deepseek-ai__dsh-client-ui-settings/client.js +1 -1
- package/app/web/plugins/deepseek-ai__dsh-client-ui-settings-general/client.js +2 -2
- package/app/web/plugins/deepseek-ai__dsh-client-ui-sidebar/client.js +2 -2
- package/app/web/plugins/deepseek-ai__dsh-client-ui-tool/client.js +1 -1
- package/app/web/plugins/deepseek-ai__dsh-client-ui-workspace/client.js +8 -12
- package/app/web/plugins.json +4 -0
- package/app/web-modules/server.mjs +374 -154
- package/bin/codexhost +0 -0
- package/libexec/codexhost-shim +0 -0
- package/libexec/codexhost-updater +0 -0
- package/package.json +1 -1
|
@@ -15297,13 +15297,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15297
15297
|
});
|
|
15298
15298
|
|
|
15299
15299
|
// ../shared-contracts/dist/thread-catalog.js
|
|
15300
|
-
var threadCatalogReadParamsSchema = external_exports.object({
|
|
15300
|
+
var threadCatalogReadParamsSchema = external_exports.object({
|
|
15301
|
+
includeArchived: external_exports.boolean().optional(),
|
|
15302
|
+
/** Absent means first page; null means this branch is exhausted. Native cursors only. */
|
|
15303
|
+
officialCursor: external_exports.object({ live: external_exports.string().nullable(), archived: external_exports.string().nullable().optional() }).strict().optional()
|
|
15304
|
+
}).strict();
|
|
15301
15305
|
var threadCatalogReadResultSchema = external_exports.object({
|
|
15302
15306
|
threads: external_exports.array(jsonObjectSchema),
|
|
15303
15307
|
ownership: external_exports.array(threadOwnershipSchema),
|
|
15304
15308
|
/** Known archived IDs, including visible local external records even when their rows are
|
|
15305
|
-
* excluded. Native archived IDs
|
|
15306
|
-
archivedThreadIds: external_exports.array(hostThreadIdSchema)
|
|
15309
|
+
* excluded. Native archived IDs describe only the returned page, never a complete set. */
|
|
15310
|
+
archivedThreadIds: external_exports.array(hostThreadIdSchema),
|
|
15311
|
+
officialCursor: external_exports.object({ live: external_exports.string().nullable(), archived: external_exports.string().nullable().optional() }).strict().optional()
|
|
15307
15312
|
}).strict();
|
|
15308
15313
|
|
|
15309
15314
|
// ../shared-contracts/dist/voice.js
|
|
@@ -15543,7 +15548,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15543
15548
|
});
|
|
15544
15549
|
var DEFAULT_IDLE_RELEASE_SETTINGS = Object.freeze({
|
|
15545
15550
|
enabled: false,
|
|
15546
|
-
timeoutMinutes:
|
|
15551
|
+
timeoutMinutes: 10
|
|
15547
15552
|
});
|
|
15548
15553
|
|
|
15549
15554
|
// ../shared-contracts/dist/harness-preferences.js
|
package/app/web/index.html
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
media="(prefers-color-scheme: light)"
|
|
27
27
|
/>
|
|
28
28
|
<title>CodexHost</title>
|
|
29
|
-
<script type="module" crossorigin src="./assets/index-
|
|
29
|
+
<script type="module" crossorigin src="./assets/index-D1dOzBMI.js"></script>
|
|
30
30
|
<link rel="modulepreload" crossorigin href="./assets/vendor-dSL872WO.js">
|
|
31
31
|
<link rel="stylesheet" crossorigin href="./assets/vendor-BNsW4eBh.css">
|
|
32
32
|
<link rel="stylesheet" crossorigin href="./assets/index-C3lniEH1.css">
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
window.__ModuleLoader__.load({id:`@deepseek-ai/dsh-api-gateway`,factory:e=>{var t={exports:{}},n=t.exports;Object.defineProperty(n,Symbol.toStringTag,{value:`Module`});let r=e("@deepseek-ai/cordis");var i=class extends Error{code;details;isDSHRemoteError=!0;constructor(e,t,n,r){super(t,r),this.code=e,this.details=n,this.name=`RemoteError`}};function a(e){if(typeof e==`object`&&e&&e.isDSHRemoteError===!0&&typeof e.code==`string`)return e}let o=Symbol.for(`dsh.typert.owned-value`);function s(e){return typeof e==`object`&&!!e&&o in e&&e[o]===!0}function c(e){return u(e,/* @__PURE__ */ new Set)}function l(e){return e===void 0||c(e)}function u(e,t){if(e===null||typeof e==`string`||typeof e==`boolean`)return!0;if(typeof e==`number`)return Number.isFinite(e)&&!Object.is(e,-0);if(typeof e!=`object`||t.has(e))return!1;t.add(e);try{if(Array.isArray(e)){if(Object.getPrototypeOf(e)!==Array.prototype||Reflect.ownKeys(e).length!==e.length+1)return!1;for(let n=0;n<e.length;n++)if(!Object.hasOwn(e,n)||!u(e[n],t))return!1;return!0}let n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)return!1;for(let n of Reflect.ownKeys(e))if(typeof n!=`string`||Object.getOwnPropertyDescriptor(e,n)?.enumerable!==!0||!u(Reflect.get(e,n),t))return!1;return!0}finally{t.delete(e)}}var d=class{send;failed;timer;pending;sequence=0;lastActivity=Date.now();stopped=!1;interval;timeout;restoreTimeout;visibilityChanged=()=>{document.visibilityState===`hidden`&&(clearTimeout(this.timer),this.pending=void 0)};constructor(e,t,n={}){this.send=e,this.failed=t,this.interval=n.intervalMs??25e3,this.timeout=n.timeoutMs??1e4,this.restoreTimeout=n.restoreTimeoutMs??this.timeout,typeof document<`u`&&document.addEventListener(`visibilitychange`,this.visibilityChanged),this.schedule(this.interval)}received(e){this.stopped||(this.lastActivity=Date.now(),this.pending!==void 0&&e===this.pending&&(this.pending=void 0,this.schedule(this.interval)))}probe(){this.stopped||this.sendProbe(this.restoreTimeout)}stop(){this.stopped=!0,typeof document<`u`&&document.removeEventListener(`visibilitychange`,this.visibilityChanged),clearTimeout(this.timer),this.pending=void 0}schedule(e){clearTimeout(this.timer),this.timer=setTimeout(()=>this.tick(),e)}tick(){if(this.stopped)return;if(typeof document<`u`&&document.visibilityState===`hidden`){this.pending=void 0,this.lastActivity=Date.now(),this.schedule(this.interval);return}if(this.pending!==void 0){this.stop(),this.failed();return}let e=this.interval-(Date.now()-this.lastActivity);e>0?this.schedule(e):this.sendProbe(this.timeout)}sendProbe(e){this.pending=`heartbeat-${String(++this.sequence)}`,this.schedule(e);try{this.send(this.pending)}catch{this.stop(),this.failed()}}};let f={args:{}};function ee(e){let t=typeof e==`object`&&e?e:void 0,n=v(t,`name`)??`Error`,r=v(t,`message`)??String(e),i=v(t,`code`),a=t===void 0?void 0:Reflect.get(t,`details`);return{name:n,message:r,...i===void 0?{}:{code:i},...a===void 0||!c(a)?{}:{details:a}}}function p(e){return typeof e==`string`&&e.length>0}function te(e){return typeof e==`string`&&e.length>0}function ne(e){return typeof e==`string`&&e.length>0}function re(e){return m(e,e=>{if(e.type===`item`&&(g(e,[`type`,`streamId`])||g(e,[`type`,`streamId`,`value`]))&&_(e.streamId)||(e.type===`end`||e.type===`pong`)&&g(e,[`type`,`streamId`])&&_(e.streamId)||e.type===`error`&&g(e,[`type`,`streamId`,`error`])&&_(e.streamId)&&h(e.error)&&g(e.error,[`code`,`message`,`details`])&&typeof e.error.code==`string`&&typeof e.error.message==`string`&&h(e.error.details))return e;throw Error(`api gateway: invalid Remote stream server message`)})}function m(e,t){let n;try{n=JSON.parse(e)}catch(e){throw Error(`api gateway: Remote stream message is not JSON`,{cause:e})}if(!h(n))throw Error(`api gateway: Remote stream message must be an object`);return t(n)}function h(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function g(e,t){return Reflect.ownKeys(e).length===t.length&&t.every(t=>Object.hasOwn(e,t))}function _(e){return typeof e==`string`&&e.length>0}function v(e,t){if(e===void 0)return;let n=Reflect.get(e,t);return typeof n==`string`?n:void 0}var y=class{buffer=Array(16);head=0;count=0;get size(){return this.count}pushBack(e){this.ensureCapacity();let t=this.head+this.count;this.buffer[t<this.buffer.length?t:t-this.buffer.length]=e,this.count+=1}pushFront(e){this.ensureCapacity(),this.head=this.head===0?this.buffer.length-1:this.head-1,this.buffer[this.head]=e,this.count+=1}popFront(){if(this.count===0)return;let e=this.buffer[this.head];return this.buffer[this.head]=void 0,this.head+=1,this.head===this.buffer.length&&(this.head=0),--this.count,this.compact(),e}clear(){this.buffer=Array(16),this.head=0,this.count=0}ensureCapacity(){this.count<this.buffer.length||this.resize(this.buffer.length*2)}compact(){this.count===0?this.head=0:this.buffer.length>16&&this.count<=this.buffer.length/4&&this.resize(Math.max(16,this.buffer.length/2))}resize(e){let t=Array(e),n=this.head;for(let e=0;e<this.count;e+=1)t[e]=this.buffer[n],n+=1,n===this.buffer.length&&(n=0);this.buffer=t,this.head=0}};function b(){let e=globalThis.crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16)),t=Array.from(e,(e,t)=>(t===6?e&15|64:t===8?e&63|128:e).toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}var x=class extends Error{constructor(e,t){super(e,t),this.name=`RemoteStreamCarrierError`}};let S={value:void 0,done:!0};var ie=class{heartbeatOptions;socket;cancelCandidate;keepAlive;revision=0;streams=/* @__PURE__ */ new Map;waiters=/* @__PURE__ */ new Set;running=!1;disposed=!1;heartbeat;constructor(e={}){this.heartbeatOptions=e}start(){if(this.disposed||(this.running=!0,this.socket?.readyState===WebSocket.OPEN))return;let e=this.keepAlive;e===void 0?this.maintain():e.then(()=>{this.maintain()})}reconnect(){if(!this.running||this.disposed)return;let e=new x(`api gateway: Remote stream reconnect requested`),t=this.keepAlive;this.disconnect(e),t===void 0?this.maintain():t.then(()=>{this.maintain()})}probe(){return this.socket?.readyState!==WebSocket.OPEN||this.heartbeat===void 0?!1:(this.heartbeat.probe(),!0)}disconnect(e=new x(`api gateway: connection unavailable`)){this.revision++,this.heartbeat?.stop(),this.heartbeat=void 0,this.cancelCandidate?.(e);let t=this.socket;this.socket=void 0,this.failAll(e),t?.close(4e3,`connection unavailable`)}async*open(e,t,n,r){n.throwIfAborted();let a=b(),o=new ae,s={inbox:o,pump:void 0},c,l=!1,u=!1,d=()=>{o.fail(n.reason)};n.addEventListener(`abort`,d,{once:!0});try{let d=await this.waitForSocket(n);for(n.throwIfAborted(),c=d,this.streams.set(a,s),this.send(d,{type:`open`,streamId:a,endpoint:e,payload:t}),l=!0,r!==void 0&&(s.pump=this.pumpUplink(d,a,r,n,o));;){let e=await o.next();if(n.throwIfAborted(),e.type===`item`)yield e.value;else{if(u=!0,e.type===`error`)throw new i(e.error.code,e.error.message,e.error.details);return}}}finally{n.removeEventListener(`abort`,d),this.streams.delete(a),s.pump?.stop(),l&&!u&&c?.readyState===WebSocket.OPEN&&this.send(c,{type:`cancel`,streamId:a}),s.pump!==void 0&&await s.pump.done}}pumpUplink(e,t,n,r,i){let a,o={value:void 0,done:!0},s=n[Symbol.asyncIterator](),c={stopping:!1,exhausted:!1,released:!1},l=()=>{c.released||c.exhausted||(c.released=!0,n instanceof C&&n.close(),Promise.resolve().then(()=>s.return?.()).catch(()=>void 0))};return{done:(async()=>{try{for(;;){if(c.stopping)return;a=Promise.withResolvers();let n=await Promise.race([s.next(),a.promise]);if(a=void 0,c.stopping||n===o||r.aborted||this.socket!==e)return;if(n.done===!0){c.exhausted=!0;break}this.send(e,{type:`item`,streamId:t,value:n.value})}this.send(e,{type:`end`,streamId:t})}catch(e){i.fail(e)}finally{a=void 0,l()}})(),stop:()=>{c.stopping||(c.stopping=!0,a?.resolve(o),l())}}}async close(){if(!this.disposed){this.disposed=!0,this.running=!1,this.heartbeat?.stop(),this.heartbeat=void 0;let e=/* @__PURE__ */ Error(`api gateway: Remote stream client disposed`);this.failAll(e);for(let t of[...this.waiters])t.reject(e);this.cancelCandidate?.(e);let t=this.socket;this.socket=void 0,t?.close(1e3,`disposed`)}await this.keepAlive}connect(){let e=new WebSocket(oe());return new Promise((t,n)=>{let r=!1,i=t=>{r=!0,e.removeEventListener(`open`,a),e.removeEventListener(`error`,o),e.removeEventListener(`message`,c),e.removeEventListener(`close`,s),this.cancelCandidate=void 0,e.close(),n(t)},a=()=>{r=!0,this.cancelCandidate=void 0,this.socket=e,this.heartbeat=new d(t=>this.send(e,{type:`ping`,streamId:t}),()=>{this.lost(e,new x(`api gateway: heartbeat timed out`)),e.close(4e3,`heartbeat timed out`)},this.heartbeatOptions);for(let t of[...this.waiters])t.resolve(e);t(e)},o=()=>{if(!r){i(new x(`api gateway: Remote stream WebSocket failed to open`));return}let t=new x(`api gateway: Remote stream WebSocket failed`);this.lost(e,t),e.close()},s=()=>{r?this.lost(e):i(new x(`api gateway: Remote stream WebSocket closed before opening`))},c=t=>{this.receive(e,t.data)};this.cancelCandidate=i,e.addEventListener(`open`,a,{once:!0}),e.addEventListener(`error`,o,{once:!0}),e.addEventListener(`message`,c),e.addEventListener(`close`,s,{once:!0})})}waitForSocket(e){return e.throwIfAborted(),this.socket?.readyState===WebSocket.OPEN?Promise.resolve(this.socket):this.disposed?Promise.reject(/* @__PURE__ */ Error(`api gateway: Remote stream client disposed`)):this.running?new Promise((t,n)=>{let r=()=>{a.reject(e.reason)},i=()=>{this.waiters.delete(a),e.removeEventListener(`abort`,r)},a={revision:this.revision,resolve:e=>{i(),t(e)},reject:e=>{i(),n(e)}};this.waiters.add(a),e.addEventListener(`abort`,r,{once:!0})}):Promise.reject(/* @__PURE__ */ Error(`api gateway: Remote stream client not started`))}receive(e,t){if(e===this.socket)try{if(typeof t!=`string`)throw Error(`api gateway: Remote stream WebSocket requires text messages`);let e=re(t);if(this.heartbeat?.received(e.type===`pong`?e.streamId:void 0),e.type===`pong`)return;let n=this.streams.get(e.streamId);if(n===void 0)return;n.inbox.push(e),e.type!==`item`&&n.pump?.stop()}catch(t){let n=new x(`api gateway: invalid Remote stream frame`,{cause:t});this.failAll(n),this.lost(e,n),e.close(4002,`invalid Remote stream frame`)}}lost(e,t=new x(`api gateway: Remote stream WebSocket closed`)){this.socket===e&&(this.heartbeat?.stop(),this.heartbeat=void 0,this.socket=void 0,this.failAll(t))}maintain(){if(!this.running||this.disposed||this.socket?.readyState===WebSocket.OPEN||this.keepAlive!==void 0)return;let e=this.revision,t=this.connect().then(()=>void 0,t=>{if(this.running)for(let n of[...this.waiters])n.revision<=e&&n.reject(t)});this.keepAlive=t,t.then(()=>{this.keepAlive=void 0})}failAll(e){for(let t of this.streams.values())t.inbox.fail(e),t.pump?.stop()}send(e,t){e.send(JSON.stringify(t))}},ae=class{frames=new y;wake;failure;push(e){this.failure===void 0&&(this.frames.pushBack(e),this.wake?.(),this.wake=void 0)}fail(e){this.failure===void 0&&(this.failure=e instanceof Error?e:Error(String(e),{cause:e}),this.frames.clear(),this.wake?.(),this.wake=void 0)}async next(){for(;this.frames.size===0;){if(this.failure!==void 0)throw this.failure;await new Promise(e=>{this.wake=e})}return this.frames.popFront()}},C=class{endpoint;items=new y;ended=!1;closed=!1;wake;constructor(e){this.endpoint=e}push(e){if(this.closed)throw Error(`client api: ${this.endpoint} stream has terminated`);if(this.ended)throw Error(`client api: ${this.endpoint} uplink was ended`);this.items.pushBack(e),this.signal()}end(){this.ended||this.closed||(this.ended=!0,this.signal())}close(){this.closed||(this.closed=!0,this.items.clear(),this.signal())}[Symbol.asyncIterator](){return this}async next(){for(;;){if(this.closed)return S;if(this.items.size>0)return{value:this.items.popFront(),done:!1};if(this.ended)return S;if(this.wake!==void 0)throw Error(`client api: ${this.endpoint} uplink has one pending read`);await new Promise(e=>{this.wake=e})}}return(){return this.close(),Promise.resolve(S)}signal(){let e=this.wake;this.wake=void 0,e?.()}};function oe(){let e=new URL(`api/remote.mux`,globalThis.__DSH_TRANSPORT__?.streamBaseUrl??document.baseURI);return e.protocol=e.protocol===`https:`?`wss:`:`ws:`,e.href}let w=Symbol(`api-gateway.remote-event.next`);var se=class{ownerCtx;connection;openStream;eventPrefix=`internal/api-gateway/remote-event/${b()}/`;unregisterGeneration;activeGeneration;constructor(e,t,n){this.ownerCtx=e,this.connection=t,this.openStream=n,this.unregisterGeneration=t.registerGenerationSource(this.runGeneration)}subscribe(e,t,n){let r=A(e).on(this.eventKey(t),n);return()=>{r()}}async dispose(){this.unregisterGeneration(),await Promise.allSettled([this.activeGeneration])}runGeneration=(e,t)=>{let n=this.pumpEvents(e,t).finally(()=>{this.activeGeneration===n&&(this.activeGeneration=void 0)});return this.activeGeneration=n,n};deliver(e){A(this.ownerCtx).parallel(this.eventKey(e.event),...e.args).catch(t=>{this.reportError(e.event,t)})}async pumpEvents(e,t){let n,r=new AbortController,i=AbortSignal.any([e,r.signal]),a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Set,s=this.openStream(`$events`,f,i),c=!1,l;try{for await(let e of s){if(n===void 0){let r=T(e);n=r.clientId,t(r.host);continue}let s=ce(e);if(s.type===`cancel`){a.get(s.eventId)?.abort(/* @__PURE__ */ Error(`client api: Remote event was cancelled by the Host`));continue}if(s.type===`emit`){this.deliver(s);continue}let c=new AbortController;a.set(s.eventId,c);let l=AbortSignal.any([i,c.signal]),u=this.answer(s,n,l).catch(e=>{l.aborted||r.abort(e)}).finally(()=>{a.delete(s.eventId),o.delete(u)});o.add(u)}}catch(e){c=!0,l=e}finally{for(let e of a.values())e.abort(/* @__PURE__ */ Error(`client api: Remote event generation ended`));await Promise.allSettled(o)}if(r.signal.aborted)throw le(r.signal.reason,`client api: Remote event result delivery failed`);if(!e.aborted)throw c?l:Error(`client api: forwarded Remote event stream ended unexpectedly`)}async answer(e,t,n){let r=this.ownerCtx.typert.contexts.getClient(`agent`),i;try{i=r?.resolve(e.agentId)}catch(t){this.reportError(e.event,t)}let a=s(i)?i:void 0;try{let r=s(i)?i.value:i,a={kind:`next`};if(r!==void 0)try{a=await this.dispatchWaterfall(r,e,n)}catch(e){if(n.aborted)return;a={kind:`rejected`,error:ee(e)}}if(n.aborted)return;let o={clientId:t,eventId:e.eventId,outcome:a.kind===`result`&&a.value===void 0?{kind:`result`}:a},c=await this.connection.rpc.call(`/api`,`$events/result`,{args:o},n);if(!c.ok)throw Error(c.error.message)}finally{a?.[Symbol.dispose]()}}async dispatchWaterfall(e,t,n){let r={...t.request,agent:e,signal:n},i=await A(e).waterfall(e,this.eventKey(t.event),r,()=>Promise.resolve(w));if(i!==w&&i!==void 0&&!c(i))throw TypeError(`Remote event listener result is not lossless JSON data`);return i===w?{kind:`next`}:{kind:`result`,value:i}}eventKey(e){return`${this.eventPrefix}${e}`}reportError(e,t){console.error(`client api: Remote event ${JSON.stringify(e)} listener threw:`,t)}};function T(e){if(!E(e)||!D(e,[`type`,`clientId`,`host`])||e.type!==`ready`||!te(e.clientId)||!E(e.host)||!D(e.host,[`home`])||typeof e.host.home!=`string`)throw TypeError(`client api: forwarded Remote event stream did not begin with ready`);return{clientId:e.clientId,host:{home:e.host.home}}}function ce(e){if(E(e)||k(),e.type===`cancel`&&D(e,[`type`,`eventId`])&&p(e.eventId))return{type:`cancel`,eventId:e.eventId};if(e.type===`emit`&&D(e,[`type`,`event`,`args`])&&O(e.event)&&Array.isArray(e.args)&&c(e.args))return{type:`emit`,event:e.event,args:e.args};if(e.type===`waterfall`&&D(e,[`type`,`event`,`eventId`,`agentId`,`request`])&&O(e.event)&&p(e.eventId)&&ne(e.agentId)&&E(e.request)&&!Object.hasOwn(e.request,`agent`)&&!Object.hasOwn(e.request,`signal`)&&c(e.request))return{type:`waterfall`,event:e.event,eventId:e.eventId,agentId:e.agentId,request:e.request};k()}function E(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function D(e,t){return Reflect.ownKeys(e).length===t.length&&t.every(t=>Object.hasOwn(e,t))}function O(e){return typeof e==`string`&&e.length>0}function k(){throw TypeError(`client api: invalid forwarded Remote event frame`)}function A(e){return e}function le(e,t){return e instanceof Error?e:Error(t,{cause:e})}var j=class{connection;options;lifetime=new AbortController;generationAbort;iterator;closing;revision=0;taken=!1;constructor(e,t){this.connection=e,this.options=t}get signal(){return this.lifetime.signal}restart(){this.lifetime.signal.aborted||(this.revision++,this.generationAbort?.abort(/* @__PURE__ */ Error(`${this.options.name} generation restarted`)))}dispose(){if(this.closing!==void 0)return this.closing;if(!this.lifetime.signal.aborted){let e=/* @__PURE__ */ Error(`${this.options.name} disposed`);this.lifetime.abort(e),this.generationAbort?.abort(e)}let e=this.iterator;if(e===void 0)return Promise.resolve();let t=P(e);return this.closing=t,t}[Symbol.asyncIterator](){if(this.taken)throw Error(`${this.options.name} already has a consumer`);this.taken=!0;let e=this.read();return this.iterator=e,e}async*read(){let e=0,t=0,n=this.revision;try{for(;!N(this.lifetime.signal);){n!==this.revision&&(n=this.revision,e=0);let r=this.revision,i=new AbortController;this.generationAbort=i;let a=AbortSignal.any([this.lifetime.signal,i.signal]),o=++t,s=!1;try{for await(let t of this.options.open(a)){if(N(this.lifetime.signal))return;if(r!==this.revision)break;yield{generation:o,value:t,signal:a,accept:()=>{this.generationAbort===i&&r===this.revision&&(s=!0,e=0)}}}if(N(this.lifetime.signal))return;if(r!==this.revision)continue;throw this.options.ended(s)}catch(t){if(N(this.lifetime.signal))return;if(r!==this.revision)continue;if(!(t instanceof x))throw M(t);if(this.options.carrierFailed?.(t),r!==this.revision)continue;e++;try{await ue(this.connection,e,a)}catch(e){if(N(this.lifetime.signal))return;if(r!==this.revision)continue;throw M(e)}}finally{this.generationAbort=void 0,i.signal.aborted||i.abort(/* @__PURE__ */ Error(`${this.options.name} generation ended`))}}}finally{this.lifetime.signal.aborted||this.lifetime.abort(/* @__PURE__ */ Error(`${this.options.name} consumer closed`)),this.generationAbort?.abort(this.lifetime.signal.reason),this.generationAbort=void 0}}};async function ue(e,t,n){n.throwIfAborted(),e.generation.getSnapshot()===void 0?await new Promise((t,r)=>{let i={finished:!1},a=e=>{i.finished||(i.finished=!0,i.dispose?.(),n.removeEventListener(`abort`,s),e===void 0?t():r(e))},o=()=>{e.generation.getSnapshot()!==void 0&&a()},s=()=>{a(Error(`Remote stream retry aborted`,{cause:n.reason}))},c=e.generation.subscribe(o);i.dispose=c,i.finished&&c(),n.addEventListener(`abort`,s,{once:!0}),n.aborted?s():o()}):await new Promise((e,r)=>{let i=setTimeout(()=>{n.removeEventListener(`abort`,a),e()},Math.min(100*2**Math.min(t-1,5),3e3)),a=()=>{clearTimeout(i),n.removeEventListener(`abort`,a),r(n.reason)};n.addEventListener(`abort`,a,{once:!0}),n.aborted&&a()})}function M(e){return a(e)??new i(`gateway/internal`,e instanceof Error?e.message:String(e),{},{cause:e})}function N(e){return e.aborted}async function P(e){try{await e.return?.()}catch{}}function F(e){return new i(`gateway/internal`,e,{})}var I=class{options;stream;initialRequest;resumeCursor;hasResumeCursor=!1;generation=0;firstCursor;lastCursor;started=!1;opened=!1;disposed=!1;done;closing;pendingNext;constructor(e,t){this.options=t,this.stream=e.$stream({name:t.name,open:e=>this.follow(this.initialRequest,e),ended:e=>e?new x(`${t.name} ended without a terminal result`):F(`${this.hasResumeCursor?`resumed `:``}${t.name} ended before its opening cursor`),...t.carrierFailed===void 0?{}:{carrierFailed:t.carrierFailed}})}get signal(){return this.stream.signal}async open(e){if(this.started)throw Error(`${this.options.name} already opened`);this.started=!0,this.initialRequest=e;let t=this.stream[Symbol.asyncIterator]();try{let e=await this.takeNext(t);if(e.done)throw F(`${this.options.name} ended before its opening cursor`);this.replaceGeneration(e.value,!1),this.opened=!0,this.done=this.consume(t)}catch(e){throw await this.stream.dispose(),e}}async prepend(e){if(!this.opened||this.disposed)throw Error(`${this.options.name} is not open`);let t=await this.readPage(e,this.currentCursor(),this.stream.signal);this.stream.signal.throwIfAborted();let n=this.options.entries(t);this.assertPage(n);let r=this.firstCursor,i=r===void 0?[...n]:n.filter(e=>this.options.compare(this.options.first(e),r)<0),a=i.at(-1);if(a!==void 0&&r!==void 0&&!this.options.follows(this.options.last(a),r))throw this.options.publish({type:`prepend`,page:t,entries:[],hasMore:!1}),F(`${this.options.name} history page is discontinuous`);let o=i[0];o!==void 0&&(this.firstCursor=this.options.first(o)),this.options.publish({type:`prepend`,page:t,entries:i,hasMore:this.options.hasMore(t)})}restart(){this.stream.restart()}dispose(){if(this.closing!==void 0)return this.closing;this.disposed=!0;let e=this.done,t=(async()=>{await this.stream.dispose(),await e})();return this.closing=t,t}async consume(e){try{for(;;){let t=await this.takeNext(e);if(t.done)return;let n=t.value;if(n.generation!==this.generation)this.replaceGeneration(n,!0);else{if(n.value.type===`opened`)throw F(`${this.options.name} emitted more than one opening cursor`);n.value.type===`notification`?this.publishNotification(n.value.notification):await this.acceptEntry(n.value.entry,n,e)}}}catch(e){this.disposed||this.options.failed(e)}}replaceGeneration(e,t){let n=this.opening(e,t);this.replaceFromOpening(n.page,n.cursor)}opening(e,t){if(e.value.type!==`opened`)throw F(`${t?`resumed `:``}${this.options.name} emitted an entry before its opening cursor`);let n=e.value.cursor;if(t&&e.value.reset!==!0&&this.lastCursor!==void 0&&this.options.compare(n,this.lastCursor)<0)throw F(`${this.options.name} resumed at a cursor behind the last applied entry`);return this.generation=e.generation,e.accept(),{cursor:n,page:e.value.page}}replaceFromOpening(e,t){this.assertPageThrough(e,t);let n=[...this.options.entries(e)];this.assertPage(n);let r=n[0];this.firstCursor=r===void 0?void 0:this.options.first(r),this.lastCursor=t,this.setResumeCursor(t),this.options.publish({type:`replace`,page:e,entries:n,hasMore:this.options.hasMore(e)})}async acceptEntry(e,t,n){let{first:r,last:i}=this.entryRange(e),a=this.lastCursor;if(!(this.options.compare(i,a)<=0)){if(this.options.compare(r,a)<=0)throw F(`${this.options.name} emitted a partially overlapping entry`);if(this.options.follows(a,r))this.firstCursor===void 0&&(this.firstCursor=r),this.lastCursor=i,this.setResumeCursor(i),this.options.publish({type:`append`,entry:e});else{let r=this.repairPageRequest(),a=await this.replaceThrough(r,i,t.generation,t.signal,n,[e],[]);a!==void 0&&this.replaceGeneration(a,!0)}}}async replaceThrough(e,t,n,r,i,a,o){let s=await this.readPageWhileFollowing(e,t,n,r,i,a,o);if(s.type===`superseded`)return s.item;let c=s.page;this.assertPageThrough(c,t);let l=this.mergeReplacement(c,a),u=this.maxCursor(t,a);if(l===void 0||this.options.compare(this.tailCursor(l),u)<0){if(s=await this.readPageWhileFollowing(this.repairPageRequest(),u,n,r,i,a,o),s.type===`superseded`)return s.item;c=s.page,this.assertPageThrough(c,u),l=this.mergeReplacement(c,a),u=this.maxCursor(t,a)}if(l===void 0||this.options.compare(this.tailCursor(l),u)<0)throw F(`${this.options.name} page did not reach its opening cursor`);let d=l[0];this.firstCursor=d===void 0?void 0:this.options.first(d),this.lastCursor=this.tailCursor(l),this.setResumeCursor(this.lastCursor),this.options.publish({type:`replace`,page:c,entries:l,hasMore:this.options.hasMore(c)});for(let e of o)this.publishNotification(e)}async readPageWhileFollowing(e,t,n,r,i,a,o){let s=this.readPage(e,t,r).then(e=>({type:`page`,value:e}),e=>({type:`page-error`,error:e}));for(;;){let e=this.nextResult(i),t=e.then(e=>({type:`next`,value:e}),e=>({type:`next-error`,error:e})),c=await Promise.race([s,t]);if(c.type===`page`)return r.throwIfAborted(),{type:`page`,page:c.value};if(c.type===`page-error`){if(!r.aborted||this.stream.signal.aborted)throw c.error;return this.awaitReplacementGeneration(n,i,e)}if(this.releaseNext(),c.type===`next-error`)throw c.error;if(c.value.done)throw r.throwIfAborted(),F(`${this.options.name} ended while reading its replacement page`);let l=c.value.value;if(l.generation!==n)return{type:`superseded`,item:l};if(l.value.type===`opened`)throw F(`${this.options.name} emitted more than one opening cursor`);l.value.type===`notification`?o.push(l.value.notification):a.push(l.value.entry)}}async awaitReplacementGeneration(e,t,n){let r=n;for(;;){let n;try{n=await r}finally{this.releaseNext()}if(n.done)throw this.stream.signal.throwIfAborted(),F(`${this.options.name} ended while replacing an aborted page generation`);let i=n.value;if(i.generation!==e)return{type:`superseded`,item:i};if(i.value.type===`opened`)throw F(`${this.options.name} emitted more than one opening cursor`);r=this.nextResult(t)}}mergeReplacement(e,t){let n=[...this.options.entries(e)];this.assertPage(n);for(let e of t)this.entryRange(e);let r=[...t].sort((e,t)=>this.options.compare(this.options.first(e),this.options.first(t))),i=this.tailCursor(n);for(let e of r){let t=this.options.first(e),r=this.options.last(e);if(!(this.options.compare(r,i)<=0)){if(this.options.compare(t,i)<=0)throw F(`${this.options.name} replacement contains a partially overlapping entry`);if(!this.options.follows(i,t))return;n.push(e),i=r}}return n}maxCursor(e,t){let n=e;for(let e of t){let t=this.options.last(e);this.options.compare(t,n)>0&&(n=t)}return n}nextResult(e){return this.pendingNext??=e.next(),this.pendingNext}async takeNext(e){let t=this.nextResult(e);try{return await t}finally{this.releaseNext()}}releaseNext(){this.pendingNext=void 0}publishNotification(e){this.options.publish({type:`notification`,notification:e})}repairPageRequest(){return this.repairRequest(this.initialRequest)}setResumeCursor(e){this.resumeCursor=e,this.hasResumeCursor=!0}currentCursor(){return this.resumeCursor}tailCursor(e){let t=e.at(-1);return t===void 0?this.options.emptyCursor:this.options.last(t)}assertPage(e){let t=e[Symbol.iterator](),n=t.next();if(n.done)return;let r=this.entryRange(n.value);for(let e of t){let t=this.entryRange(e);if(!this.options.follows(r.last,t.first))throw F(`${this.options.name} page contains discontinuous entries`);r=t}}entryRange(e){let t=this.options.first(e),n=this.options.last(e);if(this.options.compare(t,n)>0)throw F(`${this.options.name} entry has an inverted cursor range`);return{first:t,last:n}}assertPageThrough(e,t){let n=this.tailCursor(this.options.entries(e));if(this.options.compare(n,t)!==0)throw F(`${this.options.name} page did not end at its requested cursor`)}};function L(e){return new i(`gateway/internal`,e,{})}var R=class{stream;options;started=!1;disposed=!1;done;constructor(e,t){this.stream=e,this.options=t}start(){this.started||(this.started=!0,this.done=this.consume())}restart(){this.stream.restart()}async dispose(){this.disposed=!0,await this.stream.dispose(),await this.done}async consume(){let e=0,t=!1;try{for await(let n of this.stream)if(n.generation!==e&&(e=n.generation,t=!1),this.options.isSnapshot(n.value)){if(t)throw L(`${this.options.name} emitted more than one opening snapshot`);this.options.replace(n.value),t=!0,n.accept()}else{if(!t)throw L(`${this.options.name} emitted an update before its opening snapshot`);this.options.update(n.value)}}catch(e){this.disposed||this.options.failed(e)}}};let z=[`typert`,`connection`];function B(e){new V(e)}var V=class extends r.Service{ownerCtx;connection;namespaces=/* @__PURE__ */ new Map;hostFacts;streams=new ie;events;mutations=Promise.resolve();constructor(e){super(e,`remote`),this.ownerCtx=e;let t=e.get(`connection`);this.connection=t,this.events=new se(e,t,(e,t,n)=>this.openRemoteStream(e,t,n)),t.rpc.open===void 0&&this.streams.start();let n=!1,r,i=()=>{n||(t.rpc.open===void 0&&this.streams.start(),r=t.start({onConnected:()=>{this.ownerCtx.emit(`connection/reset`)},onReconnectRequested:()=>{t.rpc.open===void 0&&this.streams.reconnect()},onProbeRequested:()=>t.rpc.open===void 0&&this.streams.probe(),onStateChange:e=>{e!==`connected`&&t.rpc.open===void 0&&this.streams.disconnect()}}))},a=e.get(`loader`);a===void 0?i():a.await().then(i,()=>{}),e.effect(()=>async()=>{n=!0,r?.stop(),await this.events.dispose(),await this.streams.close()},`api-gateway.client.transport`)}$stream(e){return new j(this.connection,e)}get $host(){let e=this.connection.generation.getSnapshot()?.host.home;return(this.hostFacts===void 0||this.hostFacts.home!==e)&&(this.hostFacts={home:e,isLoopback:this.connection.isLoopback}),this.hostFacts}async $mount(e){let t=this.ctx,n=t.effect(async()=>{let n=await this.enqueue(()=>this.mountContribution(t,e));return()=>this.enqueue(n)},`api-gateway.client.$mount(${JSON.stringify(e.package)})`);return await n,async()=>{await n()}}$on(e,t){return this.events.subscribe(this.ctx,e,t)}openRemoteStream(e,t,n,r,i=`client api: ${e} has no active Connection`){let a=this.ownerCtx.get(`connection`);if(a===void 0)throw Error(i);let o=a.rpc.open?.(`/api`,e,t,n,r);return o===void 0?this.streams.open(e,t,n,r):he(o)}enqueue(e){let t=this.mutations.then(e,e);return this.mutations=t.then(()=>void 0,()=>void 0),t}async mountContribution(e,t){this.validateContribution(t);let n=e.typert.remotes.register(t),r=/* @__PURE__ */ new Map;for(let e of t.descriptors){let t=r.get(e.namespace);t===void 0?r.set(e.namespace,[e]):t.push(e)}let i=[];try{for(let[e,t]of r)i.push(await this.installNamespace(e,t))}catch(e){for(let e of i.reverse())await e();throw await n(),e}return async()=>{for(let e of i.reverse())await e();await n()}}validateContribution(e){let t=/* @__PURE__ */ new Map,n=/* @__PURE__ */ new Map,r=(e,t,n)=>{let r=e.get(t.namespace)??/* @__PURE__ */ new Set;if(r.has(t.method))throw Error(`client api: contribution repeats ${n} method ${K(t)}`);if(r.add(t.method),e.set(t.namespace,r),(this.namespaces.get(t.namespace)?.service)?.has(n,t.method)===!0)throw Error(`client api: ${n} method ${K(t)} is already mounted`)};for(let i of e.descriptors)fe(i),i.invocation.kind===`direct`&&r(t,i,`direct`),J(i)!==void 0&&r(n,i,`scoped`);let i=/* @__PURE__ */ new Set([...t.keys(),...n.keys()]);for(let e of i){let r=this.namespaces.get(e)?.service;if(r===void 0){if(e in this)throw Error(`client api: namespace ${JSON.stringify(e)} conflicts with the Remote service`);let t=G(e);if(this.ownerCtx.reflect.props[t]?.type===`accessor`||this.ownerCtx.get(t)!==void 0)throw Error(`client api: namespace ${JSON.stringify(e)} conflicts with an existing Remote namespace`)}for(let i of/* @__PURE__ */ new Set([...t.get(e)??[],...n.get(e)??[]]))r===void 0?U.assertMethodAvailable(e,i):r.assertMethodAvailable(i)}}async installNamespace(e,t){let n=this.namespaces.get(e),r;n===void 0?{namespace:n,installed:r}=await this.createNamespace(e,t):r=W(n.service,t);let i=n;return async()=>{for(let e of[...r].reverse())
|
|
1
|
+
window.__ModuleLoader__.load({id:`@deepseek-ai/dsh-api-gateway`,factory:e=>{var t={exports:{}},n=t.exports;Object.defineProperty(n,Symbol.toStringTag,{value:`Module`});let r=e("@deepseek-ai/cordis");var i=class extends Error{code;details;isDSHRemoteError=!0;constructor(e,t,n,r){super(t,r),this.code=e,this.details=n,this.name=`RemoteError`}};function a(e){if(typeof e==`object`&&e&&e.isDSHRemoteError===!0&&typeof e.code==`string`)return e}let o=Symbol.for(`dsh.typert.owned-value`);function s(e){return typeof e==`object`&&!!e&&o in e&&e[o]===!0}function c(e){return u(e,/* @__PURE__ */ new Set)}function l(e){return e===void 0||c(e)}function u(e,t){if(e===null||typeof e==`string`||typeof e==`boolean`)return!0;if(typeof e==`number`)return Number.isFinite(e)&&!Object.is(e,-0);if(typeof e!=`object`||t.has(e))return!1;t.add(e);try{if(Array.isArray(e)){if(Object.getPrototypeOf(e)!==Array.prototype||Reflect.ownKeys(e).length!==e.length+1)return!1;for(let n=0;n<e.length;n++)if(!Object.hasOwn(e,n)||!u(e[n],t))return!1;return!0}let n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)return!1;for(let n of Reflect.ownKeys(e))if(typeof n!=`string`||Object.getOwnPropertyDescriptor(e,n)?.enumerable!==!0||!u(Reflect.get(e,n),t))return!1;return!0}finally{t.delete(e)}}var d=class{send;failed;timer;pending;sequence=0;lastActivity=Date.now();stopped=!1;interval;timeout;restoreTimeout;visibilityChanged=()=>{document.visibilityState===`hidden`&&(clearTimeout(this.timer),this.pending=void 0)};constructor(e,t,n={}){this.send=e,this.failed=t,this.interval=n.intervalMs??25e3,this.timeout=n.timeoutMs??1e4,this.restoreTimeout=n.restoreTimeoutMs??2500,typeof document<`u`&&document.addEventListener(`visibilitychange`,this.visibilityChanged),this.schedule(this.interval)}received(e){this.stopped||(this.lastActivity=Date.now(),this.pending!==void 0&&e===this.pending&&(this.pending=void 0,this.schedule(this.interval)))}probe(){this.stopped||this.sendProbe(this.restoreTimeout)}stop(){this.stopped=!0,typeof document<`u`&&document.removeEventListener(`visibilitychange`,this.visibilityChanged),clearTimeout(this.timer),this.pending=void 0}schedule(e){clearTimeout(this.timer),this.timer=setTimeout(()=>this.tick(),e)}tick(){if(this.stopped)return;if(typeof document<`u`&&document.visibilityState===`hidden`){this.pending=void 0,this.lastActivity=Date.now(),this.schedule(this.interval);return}if(this.pending!==void 0){this.stop(),this.failed();return}let e=this.interval-(Date.now()-this.lastActivity);e>0?this.schedule(e):this.sendProbe(this.timeout)}sendProbe(e){this.pending=`heartbeat-${String(++this.sequence)}`,this.schedule(e);try{this.send(this.pending)}catch{this.stop(),this.failed()}}};let f={args:{}};function ee(e){let t=typeof e==`object`&&e?e:void 0,n=v(t,`name`)??`Error`,r=v(t,`message`)??String(e),i=v(t,`code`),a=t===void 0?void 0:Reflect.get(t,`details`);return{name:n,message:r,...i===void 0?{}:{code:i},...a===void 0||!c(a)?{}:{details:a}}}function p(e){return typeof e==`string`&&e.length>0}function te(e){return typeof e==`string`&&e.length>0}function ne(e){return typeof e==`string`&&e.length>0}function re(e){return m(e,e=>{if(e.type===`item`&&(g(e,[`type`,`streamId`])||g(e,[`type`,`streamId`,`value`]))&&_(e.streamId)||(e.type===`end`||e.type===`pong`)&&g(e,[`type`,`streamId`])&&_(e.streamId)||e.type===`error`&&g(e,[`type`,`streamId`,`error`])&&_(e.streamId)&&h(e.error)&&g(e.error,[`code`,`message`,`details`])&&typeof e.error.code==`string`&&typeof e.error.message==`string`&&h(e.error.details))return e;throw Error(`api gateway: invalid Remote stream server message`)})}function m(e,t){let n;try{n=JSON.parse(e)}catch(e){throw Error(`api gateway: Remote stream message is not JSON`,{cause:e})}if(!h(n))throw Error(`api gateway: Remote stream message must be an object`);return t(n)}function h(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function g(e,t){return Reflect.ownKeys(e).length===t.length&&t.every(t=>Object.hasOwn(e,t))}function _(e){return typeof e==`string`&&e.length>0}function v(e,t){if(e===void 0)return;let n=Reflect.get(e,t);return typeof n==`string`?n:void 0}var y=class{buffer=Array(16);head=0;count=0;get size(){return this.count}pushBack(e){this.ensureCapacity();let t=this.head+this.count;this.buffer[t<this.buffer.length?t:t-this.buffer.length]=e,this.count+=1}pushFront(e){this.ensureCapacity(),this.head=this.head===0?this.buffer.length-1:this.head-1,this.buffer[this.head]=e,this.count+=1}popFront(){if(this.count===0)return;let e=this.buffer[this.head];return this.buffer[this.head]=void 0,this.head+=1,this.head===this.buffer.length&&(this.head=0),--this.count,this.compact(),e}clear(){this.buffer=Array(16),this.head=0,this.count=0}ensureCapacity(){this.count<this.buffer.length||this.resize(this.buffer.length*2)}compact(){this.count===0?this.head=0:this.buffer.length>16&&this.count<=this.buffer.length/4&&this.resize(Math.max(16,this.buffer.length/2))}resize(e){let t=Array(e),n=this.head;for(let e=0;e<this.count;e+=1)t[e]=this.buffer[n],n+=1,n===this.buffer.length&&(n=0);this.buffer=t,this.head=0}};function b(){let e=globalThis.crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16)),t=Array.from(e,(e,t)=>(t===6?e&15|64:t===8?e&63|128:e).toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}var x=class extends Error{constructor(e,t){super(e,t),this.name=`RemoteStreamCarrierError`}};let S={value:void 0,done:!0};var ie=class{heartbeatOptions;socket;cancelCandidate;keepAlive;revision=0;streams=/* @__PURE__ */ new Map;waiters=/* @__PURE__ */ new Set;running=!1;disposed=!1;heartbeat;constructor(e={}){this.heartbeatOptions=e}start(){if(this.disposed||(this.running=!0,this.socket?.readyState===WebSocket.OPEN))return;let e=this.keepAlive;e===void 0?this.maintain():e.then(()=>{this.maintain()})}reconnect(){if(!this.running||this.disposed)return;let e=new x(`api gateway: Remote stream reconnect requested`),t=this.keepAlive;this.disconnect(e),t===void 0?this.maintain():t.then(()=>{this.maintain()})}probe(){return this.socket?.readyState!==WebSocket.OPEN||this.heartbeat===void 0?!1:(this.heartbeat.probe(),!0)}disconnect(e=new x(`api gateway: connection unavailable`)){this.revision++,this.heartbeat?.stop(),this.heartbeat=void 0,this.cancelCandidate?.(e);let t=this.socket;this.socket=void 0,this.failAll(e),t?.close(4e3,`connection unavailable`)}async*open(e,t,n,r){n.throwIfAborted();let a=b(),o=new ae,s={inbox:o,pump:void 0},c,l=!1,u=!1,d=()=>{o.fail(n.reason)};n.addEventListener(`abort`,d,{once:!0});try{let d=await this.waitForSocket(n);for(n.throwIfAborted(),c=d,this.streams.set(a,s),this.send(d,{type:`open`,streamId:a,endpoint:e,payload:t}),l=!0,r!==void 0&&(s.pump=this.pumpUplink(d,a,r,n,o));;){let e=await o.next();if(n.throwIfAborted(),e.type===`item`)yield e.value;else{if(u=!0,e.type===`error`)throw new i(e.error.code,e.error.message,e.error.details);return}}}finally{n.removeEventListener(`abort`,d),this.streams.delete(a),s.pump?.stop(),l&&!u&&c?.readyState===WebSocket.OPEN&&this.send(c,{type:`cancel`,streamId:a}),s.pump!==void 0&&await s.pump.done}}pumpUplink(e,t,n,r,i){let a,o={value:void 0,done:!0},s=n[Symbol.asyncIterator](),c={stopping:!1,exhausted:!1,released:!1},l=()=>{c.released||c.exhausted||(c.released=!0,n instanceof C&&n.close(),Promise.resolve().then(()=>s.return?.()).catch(()=>void 0))};return{done:(async()=>{try{for(;;){if(c.stopping)return;a=Promise.withResolvers();let n=await Promise.race([s.next(),a.promise]);if(a=void 0,c.stopping||n===o||r.aborted||this.socket!==e)return;if(n.done===!0){c.exhausted=!0;break}this.send(e,{type:`item`,streamId:t,value:n.value})}this.send(e,{type:`end`,streamId:t})}catch(e){i.fail(e)}finally{a=void 0,l()}})(),stop:()=>{c.stopping||(c.stopping=!0,a?.resolve(o),l())}}}async close(){if(!this.disposed){this.disposed=!0,this.running=!1,this.heartbeat?.stop(),this.heartbeat=void 0;let e=/* @__PURE__ */ Error(`api gateway: Remote stream client disposed`);this.failAll(e);for(let t of[...this.waiters])t.reject(e);this.cancelCandidate?.(e);let t=this.socket;this.socket=void 0,t?.close(1e3,`disposed`)}await this.keepAlive}connect(){let e=new WebSocket(oe());return new Promise((t,n)=>{let r=!1,i=t=>{r=!0,e.removeEventListener(`open`,a),e.removeEventListener(`error`,o),e.removeEventListener(`message`,c),e.removeEventListener(`close`,s),this.cancelCandidate=void 0,e.close(),n(t)},a=()=>{r=!0,this.cancelCandidate=void 0,this.socket=e,this.heartbeat=new d(t=>this.send(e,{type:`ping`,streamId:t}),()=>{this.lost(e,new x(`api gateway: heartbeat timed out`)),e.close(4e3,`heartbeat timed out`)},this.heartbeatOptions);for(let t of[...this.waiters])t.resolve(e);t(e)},o=()=>{if(!r){i(new x(`api gateway: Remote stream WebSocket failed to open`));return}let t=new x(`api gateway: Remote stream WebSocket failed`);this.lost(e,t),e.close()},s=()=>{r?this.lost(e):i(new x(`api gateway: Remote stream WebSocket closed before opening`))},c=t=>{this.receive(e,t.data)};this.cancelCandidate=i,e.addEventListener(`open`,a,{once:!0}),e.addEventListener(`error`,o,{once:!0}),e.addEventListener(`message`,c),e.addEventListener(`close`,s,{once:!0})})}waitForSocket(e){return e.throwIfAborted(),this.socket?.readyState===WebSocket.OPEN?Promise.resolve(this.socket):this.disposed?Promise.reject(/* @__PURE__ */ Error(`api gateway: Remote stream client disposed`)):this.running?new Promise((t,n)=>{let r=()=>{a.reject(e.reason)},i=()=>{this.waiters.delete(a),e.removeEventListener(`abort`,r)},a={revision:this.revision,resolve:e=>{i(),t(e)},reject:e=>{i(),n(e)}};this.waiters.add(a),e.addEventListener(`abort`,r,{once:!0})}):Promise.reject(/* @__PURE__ */ Error(`api gateway: Remote stream client not started`))}receive(e,t){if(e===this.socket)try{if(typeof t!=`string`)throw Error(`api gateway: Remote stream WebSocket requires text messages`);let e=re(t);if(this.heartbeat?.received(e.type===`pong`?e.streamId:void 0),e.type===`pong`)return;let n=this.streams.get(e.streamId);if(n===void 0)return;n.inbox.push(e),e.type!==`item`&&n.pump?.stop()}catch(t){let n=new x(`api gateway: invalid Remote stream frame`,{cause:t});this.failAll(n),this.lost(e,n),e.close(4002,`invalid Remote stream frame`)}}lost(e,t=new x(`api gateway: Remote stream WebSocket closed`)){this.socket===e&&(this.heartbeat?.stop(),this.heartbeat=void 0,this.socket=void 0,this.failAll(t))}maintain(){if(!this.running||this.disposed||this.socket?.readyState===WebSocket.OPEN||this.keepAlive!==void 0)return;let e=this.revision,t=this.connect().then(()=>void 0,t=>{if(this.running)for(let n of[...this.waiters])n.revision<=e&&n.reject(t)});this.keepAlive=t,t.then(()=>{this.keepAlive=void 0})}failAll(e){for(let t of this.streams.values())t.inbox.fail(e),t.pump?.stop()}send(e,t){e.send(JSON.stringify(t))}},ae=class{frames=new y;wake;failure;push(e){this.failure===void 0&&(this.frames.pushBack(e),this.wake?.(),this.wake=void 0)}fail(e){this.failure===void 0&&(this.failure=e instanceof Error?e:Error(String(e),{cause:e}),this.frames.clear(),this.wake?.(),this.wake=void 0)}async next(){for(;this.frames.size===0;){if(this.failure!==void 0)throw this.failure;await new Promise(e=>{this.wake=e})}return this.frames.popFront()}},C=class{endpoint;items=new y;ended=!1;closed=!1;wake;constructor(e){this.endpoint=e}push(e){if(this.closed)throw Error(`client api: ${this.endpoint} stream has terminated`);if(this.ended)throw Error(`client api: ${this.endpoint} uplink was ended`);this.items.pushBack(e),this.signal()}end(){this.ended||this.closed||(this.ended=!0,this.signal())}close(){this.closed||(this.closed=!0,this.items.clear(),this.signal())}[Symbol.asyncIterator](){return this}async next(){for(;;){if(this.closed)return S;if(this.items.size>0)return{value:this.items.popFront(),done:!1};if(this.ended)return S;if(this.wake!==void 0)throw Error(`client api: ${this.endpoint} uplink has one pending read`);await new Promise(e=>{this.wake=e})}}return(){return this.close(),Promise.resolve(S)}signal(){let e=this.wake;this.wake=void 0,e?.()}};function oe(){let e=new URL(`api/remote.mux`,globalThis.__DSH_TRANSPORT__?.streamBaseUrl??document.baseURI);return e.protocol=e.protocol===`https:`?`wss:`:`ws:`,e.href}let w=Symbol(`api-gateway.remote-event.next`);var se=class{ownerCtx;connection;openStream;eventPrefix=`internal/api-gateway/remote-event/${b()}/`;unregisterGeneration;activeGeneration;constructor(e,t,n){this.ownerCtx=e,this.connection=t,this.openStream=n,this.unregisterGeneration=t.registerGenerationSource(this.runGeneration)}subscribe(e,t,n){let r=A(e).on(this.eventKey(t),n);return()=>{r()}}async dispose(){this.unregisterGeneration(),await Promise.allSettled([this.activeGeneration])}runGeneration=(e,t)=>{let n=this.pumpEvents(e,t).finally(()=>{this.activeGeneration===n&&(this.activeGeneration=void 0)});return this.activeGeneration=n,n};deliver(e){A(this.ownerCtx).parallel(this.eventKey(e.event),...e.args).catch(t=>{this.reportError(e.event,t)})}async pumpEvents(e,t){let n,r=new AbortController,i=AbortSignal.any([e,r.signal]),a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Set,s=this.openStream(`$events`,f,i),c=!1,l;try{for await(let e of s){if(n===void 0){let r=T(e);n=r.clientId,t(r.host);continue}let s=ce(e);if(s.type===`cancel`){a.get(s.eventId)?.abort(/* @__PURE__ */ Error(`client api: Remote event was cancelled by the Host`));continue}if(s.type===`emit`){this.deliver(s);continue}let c=new AbortController;a.set(s.eventId,c);let l=AbortSignal.any([i,c.signal]),u=this.answer(s,n,l).catch(e=>{l.aborted||r.abort(e)}).finally(()=>{a.delete(s.eventId),o.delete(u)});o.add(u)}}catch(e){c=!0,l=e}finally{for(let e of a.values())e.abort(/* @__PURE__ */ Error(`client api: Remote event generation ended`));await Promise.allSettled(o)}if(r.signal.aborted)throw le(r.signal.reason,`client api: Remote event result delivery failed`);if(!e.aborted)throw c?l:Error(`client api: forwarded Remote event stream ended unexpectedly`)}async answer(e,t,n){let r=this.ownerCtx.typert.contexts.getClient(`agent`),i;try{i=r?.resolve(e.agentId)}catch(t){this.reportError(e.event,t)}let a=s(i)?i:void 0;try{let r=s(i)?i.value:i,a={kind:`next`};if(r!==void 0)try{a=await this.dispatchWaterfall(r,e,n)}catch(e){if(n.aborted)return;a={kind:`rejected`,error:ee(e)}}if(n.aborted)return;let o={clientId:t,eventId:e.eventId,outcome:a.kind===`result`&&a.value===void 0?{kind:`result`}:a},c=await this.connection.rpc.call(`/api`,`$events/result`,{args:o},n);if(!c.ok)throw Error(c.error.message)}finally{a?.[Symbol.dispose]()}}async dispatchWaterfall(e,t,n){let r={...t.request,agent:e,signal:n},i=await A(e).waterfall(e,this.eventKey(t.event),r,()=>Promise.resolve(w));if(i!==w&&i!==void 0&&!c(i))throw TypeError(`Remote event listener result is not lossless JSON data`);return i===w?{kind:`next`}:{kind:`result`,value:i}}eventKey(e){return`${this.eventPrefix}${e}`}reportError(e,t){console.error(`client api: Remote event ${JSON.stringify(e)} listener threw:`,t)}};function T(e){if(!E(e)||!D(e,[`type`,`clientId`,`host`])||e.type!==`ready`||!te(e.clientId)||!E(e.host)||!D(e.host,[`home`])||typeof e.host.home!=`string`)throw TypeError(`client api: forwarded Remote event stream did not begin with ready`);return{clientId:e.clientId,host:{home:e.host.home}}}function ce(e){if(E(e)||k(),e.type===`cancel`&&D(e,[`type`,`eventId`])&&p(e.eventId))return{type:`cancel`,eventId:e.eventId};if(e.type===`emit`&&D(e,[`type`,`event`,`args`])&&O(e.event)&&Array.isArray(e.args)&&c(e.args))return{type:`emit`,event:e.event,args:e.args};if(e.type===`waterfall`&&D(e,[`type`,`event`,`eventId`,`agentId`,`request`])&&O(e.event)&&p(e.eventId)&&ne(e.agentId)&&E(e.request)&&!Object.hasOwn(e.request,`agent`)&&!Object.hasOwn(e.request,`signal`)&&c(e.request))return{type:`waterfall`,event:e.event,eventId:e.eventId,agentId:e.agentId,request:e.request};k()}function E(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function D(e,t){return Reflect.ownKeys(e).length===t.length&&t.every(t=>Object.hasOwn(e,t))}function O(e){return typeof e==`string`&&e.length>0}function k(){throw TypeError(`client api: invalid forwarded Remote event frame`)}function A(e){return e}function le(e,t){return e instanceof Error?e:Error(t,{cause:e})}var j=class{connection;options;lifetime=new AbortController;generationAbort;iterator;closing;revision=0;taken=!1;constructor(e,t){this.connection=e,this.options=t}get signal(){return this.lifetime.signal}restart(){this.lifetime.signal.aborted||(this.revision++,this.generationAbort?.abort(/* @__PURE__ */ Error(`${this.options.name} generation restarted`)))}dispose(){if(this.closing!==void 0)return this.closing;if(!this.lifetime.signal.aborted){let e=/* @__PURE__ */ Error(`${this.options.name} disposed`);this.lifetime.abort(e),this.generationAbort?.abort(e)}let e=this.iterator;if(e===void 0)return Promise.resolve();let t=P(e);return this.closing=t,t}[Symbol.asyncIterator](){if(this.taken)throw Error(`${this.options.name} already has a consumer`);this.taken=!0;let e=this.read();return this.iterator=e,e}async*read(){let e=0,t=0,n=this.revision;try{for(;!N(this.lifetime.signal);){n!==this.revision&&(n=this.revision,e=0);let r=this.revision,i=new AbortController;this.generationAbort=i;let a=AbortSignal.any([this.lifetime.signal,i.signal]),o=++t,s=!1;try{for await(let t of this.options.open(a)){if(N(this.lifetime.signal))return;if(r!==this.revision)break;yield{generation:o,value:t,signal:a,accept:()=>{this.generationAbort===i&&r===this.revision&&(s=!0,e=0)}}}if(N(this.lifetime.signal))return;if(r!==this.revision)continue;throw this.options.ended(s)}catch(t){if(N(this.lifetime.signal))return;if(r!==this.revision)continue;if(!(t instanceof x))throw M(t);if(this.options.carrierFailed?.(t),r!==this.revision)continue;e++;try{await ue(this.connection,e,a)}catch(e){if(N(this.lifetime.signal))return;if(r!==this.revision)continue;throw M(e)}}finally{this.generationAbort=void 0,i.signal.aborted||i.abort(/* @__PURE__ */ Error(`${this.options.name} generation ended`))}}}finally{this.lifetime.signal.aborted||this.lifetime.abort(/* @__PURE__ */ Error(`${this.options.name} consumer closed`)),this.generationAbort?.abort(this.lifetime.signal.reason),this.generationAbort=void 0}}};async function ue(e,t,n){n.throwIfAborted(),e.generation.getSnapshot()===void 0?await new Promise((t,r)=>{let i={finished:!1},a=e=>{i.finished||(i.finished=!0,i.dispose?.(),n.removeEventListener(`abort`,s),e===void 0?t():r(e))},o=()=>{e.generation.getSnapshot()!==void 0&&a()},s=()=>{a(Error(`Remote stream retry aborted`,{cause:n.reason}))},c=e.generation.subscribe(o);i.dispose=c,i.finished&&c(),n.addEventListener(`abort`,s,{once:!0}),n.aborted?s():o()}):await new Promise((e,r)=>{let i=setTimeout(()=>{n.removeEventListener(`abort`,a),e()},Math.min(100*2**Math.min(t-1,5),3e3)),a=()=>{clearTimeout(i),n.removeEventListener(`abort`,a),r(n.reason)};n.addEventListener(`abort`,a,{once:!0}),n.aborted&&a()})}function M(e){return a(e)??new i(`gateway/internal`,e instanceof Error?e.message:String(e),{},{cause:e})}function N(e){return e.aborted}async function P(e){try{await e.return?.()}catch{}}function F(e){return new i(`gateway/internal`,e,{})}var I=class{options;stream;initialRequest;resumeCursor;hasResumeCursor=!1;generation=0;firstCursor;lastCursor;started=!1;opened=!1;disposed=!1;done;closing;pendingNext;constructor(e,t){this.options=t,this.stream=e.$stream({name:t.name,open:e=>this.follow(this.initialRequest,e),ended:e=>e?new x(`${t.name} ended without a terminal result`):F(`${this.hasResumeCursor?`resumed `:``}${t.name} ended before its opening cursor`),...t.carrierFailed===void 0?{}:{carrierFailed:t.carrierFailed}})}get signal(){return this.stream.signal}async open(e){if(this.started)throw Error(`${this.options.name} already opened`);this.started=!0,this.initialRequest=e;let t=this.stream[Symbol.asyncIterator]();try{let e=await this.takeNext(t);if(e.done)throw F(`${this.options.name} ended before its opening cursor`);this.replaceGeneration(e.value,!1),this.opened=!0,this.done=this.consume(t)}catch(e){throw await this.stream.dispose(),e}}async prepend(e){if(!this.opened||this.disposed)throw Error(`${this.options.name} is not open`);let t=await this.readPage(e,this.currentCursor(),this.stream.signal);this.stream.signal.throwIfAborted();let n=this.options.entries(t);this.assertPage(n);let r=this.firstCursor,i=r===void 0?[...n]:n.filter(e=>this.options.compare(this.options.first(e),r)<0),a=i.at(-1);if(a!==void 0&&r!==void 0&&!this.options.follows(this.options.last(a),r))throw this.options.publish({type:`prepend`,page:t,entries:[],hasMore:!1}),F(`${this.options.name} history page is discontinuous`);let o=i[0];o!==void 0&&(this.firstCursor=this.options.first(o)),this.options.publish({type:`prepend`,page:t,entries:i,hasMore:this.options.hasMore(t)})}restart(){this.stream.restart()}dispose(){if(this.closing!==void 0)return this.closing;this.disposed=!0;let e=this.done,t=(async()=>{await this.stream.dispose(),await e})();return this.closing=t,t}async consume(e){try{for(;;){let t=await this.takeNext(e);if(t.done)return;let n=t.value;if(n.generation!==this.generation)this.replaceGeneration(n,!0);else{if(n.value.type===`opened`)throw F(`${this.options.name} emitted more than one opening cursor`);n.value.type===`notification`?this.publishNotification(n.value.notification):await this.acceptEntry(n.value.entry,n,e)}}}catch(e){this.disposed||this.options.failed(e)}}replaceGeneration(e,t){let n=this.opening(e,t);this.replaceFromOpening(n.page,n.cursor)}opening(e,t){if(e.value.type!==`opened`)throw F(`${t?`resumed `:``}${this.options.name} emitted an entry before its opening cursor`);let n=e.value.cursor;if(t&&e.value.reset!==!0&&this.lastCursor!==void 0&&this.options.compare(n,this.lastCursor)<0)throw F(`${this.options.name} resumed at a cursor behind the last applied entry`);return this.generation=e.generation,e.accept(),{cursor:n,page:e.value.page}}replaceFromOpening(e,t){this.assertPageThrough(e,t);let n=[...this.options.entries(e)];this.assertPage(n);let r=n[0];this.firstCursor=r===void 0?void 0:this.options.first(r),this.lastCursor=t,this.setResumeCursor(t),this.options.publish({type:`replace`,page:e,entries:n,hasMore:this.options.hasMore(e)})}async acceptEntry(e,t,n){let{first:r,last:i}=this.entryRange(e),a=this.lastCursor;if(!(this.options.compare(i,a)<=0)){if(this.options.compare(r,a)<=0)throw F(`${this.options.name} emitted a partially overlapping entry`);if(this.options.follows(a,r))this.firstCursor===void 0&&(this.firstCursor=r),this.lastCursor=i,this.setResumeCursor(i),this.options.publish({type:`append`,entry:e});else{let r=this.repairPageRequest(),a=await this.replaceThrough(r,i,t.generation,t.signal,n,[e],[]);a!==void 0&&this.replaceGeneration(a,!0)}}}async replaceThrough(e,t,n,r,i,a,o){let s=await this.readPageWhileFollowing(e,t,n,r,i,a,o);if(s.type===`superseded`)return s.item;let c=s.page;this.assertPageThrough(c,t);let l=this.mergeReplacement(c,a),u=this.maxCursor(t,a);if(l===void 0||this.options.compare(this.tailCursor(l),u)<0){if(s=await this.readPageWhileFollowing(this.repairPageRequest(),u,n,r,i,a,o),s.type===`superseded`)return s.item;c=s.page,this.assertPageThrough(c,u),l=this.mergeReplacement(c,a),u=this.maxCursor(t,a)}if(l===void 0||this.options.compare(this.tailCursor(l),u)<0)throw F(`${this.options.name} page did not reach its opening cursor`);let d=l[0];this.firstCursor=d===void 0?void 0:this.options.first(d),this.lastCursor=this.tailCursor(l),this.setResumeCursor(this.lastCursor),this.options.publish({type:`replace`,page:c,entries:l,hasMore:this.options.hasMore(c)});for(let e of o)this.publishNotification(e)}async readPageWhileFollowing(e,t,n,r,i,a,o){let s=this.readPage(e,t,r).then(e=>({type:`page`,value:e}),e=>({type:`page-error`,error:e}));for(;;){let e=this.nextResult(i),t=e.then(e=>({type:`next`,value:e}),e=>({type:`next-error`,error:e})),c=await Promise.race([s,t]);if(c.type===`page`)return r.throwIfAborted(),{type:`page`,page:c.value};if(c.type===`page-error`){if(!r.aborted||this.stream.signal.aborted)throw c.error;return this.awaitReplacementGeneration(n,i,e)}if(this.releaseNext(),c.type===`next-error`)throw c.error;if(c.value.done)throw r.throwIfAborted(),F(`${this.options.name} ended while reading its replacement page`);let l=c.value.value;if(l.generation!==n)return{type:`superseded`,item:l};if(l.value.type===`opened`)throw F(`${this.options.name} emitted more than one opening cursor`);l.value.type===`notification`?o.push(l.value.notification):a.push(l.value.entry)}}async awaitReplacementGeneration(e,t,n){let r=n;for(;;){let n;try{n=await r}finally{this.releaseNext()}if(n.done)throw this.stream.signal.throwIfAborted(),F(`${this.options.name} ended while replacing an aborted page generation`);let i=n.value;if(i.generation!==e)return{type:`superseded`,item:i};if(i.value.type===`opened`)throw F(`${this.options.name} emitted more than one opening cursor`);r=this.nextResult(t)}}mergeReplacement(e,t){let n=[...this.options.entries(e)];this.assertPage(n);for(let e of t)this.entryRange(e);let r=[...t].sort((e,t)=>this.options.compare(this.options.first(e),this.options.first(t))),i=this.tailCursor(n);for(let e of r){let t=this.options.first(e),r=this.options.last(e);if(!(this.options.compare(r,i)<=0)){if(this.options.compare(t,i)<=0)throw F(`${this.options.name} replacement contains a partially overlapping entry`);if(!this.options.follows(i,t))return;n.push(e),i=r}}return n}maxCursor(e,t){let n=e;for(let e of t){let t=this.options.last(e);this.options.compare(t,n)>0&&(n=t)}return n}nextResult(e){return this.pendingNext??=e.next(),this.pendingNext}async takeNext(e){let t=this.nextResult(e);try{return await t}finally{this.releaseNext()}}releaseNext(){this.pendingNext=void 0}publishNotification(e){this.options.publish({type:`notification`,notification:e})}repairPageRequest(){return this.repairRequest(this.initialRequest)}setResumeCursor(e){this.resumeCursor=e,this.hasResumeCursor=!0}currentCursor(){return this.resumeCursor}tailCursor(e){let t=e.at(-1);return t===void 0?this.options.emptyCursor:this.options.last(t)}assertPage(e){let t=e[Symbol.iterator](),n=t.next();if(n.done)return;let r=this.entryRange(n.value);for(let e of t){let t=this.entryRange(e);if(!this.options.follows(r.last,t.first))throw F(`${this.options.name} page contains discontinuous entries`);r=t}}entryRange(e){let t=this.options.first(e),n=this.options.last(e);if(this.options.compare(t,n)>0)throw F(`${this.options.name} entry has an inverted cursor range`);return{first:t,last:n}}assertPageThrough(e,t){let n=this.tailCursor(this.options.entries(e));if(this.options.compare(n,t)!==0)throw F(`${this.options.name} page did not end at its requested cursor`)}};function L(e){return new i(`gateway/internal`,e,{})}var R=class{stream;options;started=!1;disposed=!1;done;constructor(e,t){this.stream=e,this.options=t}start(){this.started||(this.started=!0,this.done=this.consume())}restart(){this.stream.restart()}async dispose(){this.disposed=!0,await this.stream.dispose(),await this.done}async consume(){let e=0,t=!1;try{for await(let n of this.stream)if(n.generation!==e&&(e=n.generation,t=!1),this.options.isSnapshot(n.value)){if(t)throw L(`${this.options.name} emitted more than one opening snapshot`);this.options.replace(n.value),t=!0,n.accept()}else{if(!t)throw L(`${this.options.name} emitted an update before its opening snapshot`);this.options.update(n.value)}}catch(e){this.disposed||this.options.failed(e)}}};let z=[`typert`,`connection`];function B(e){new V(e)}var V=class extends r.Service{ownerCtx;connection;namespaces=/* @__PURE__ */ new Map;hostFacts;streams=new ie;events;mutations=Promise.resolve();constructor(e){super(e,`remote`),this.ownerCtx=e;let t=e.get(`connection`);this.connection=t,this.events=new se(e,t,(e,t,n)=>this.openRemoteStream(e,t,n)),t.rpc.open===void 0&&this.streams.start();let n=!1,r,i=()=>{n||(t.rpc.open===void 0&&this.streams.start(),r=t.start({onConnected:()=>{this.ownerCtx.emit(`connection/reset`)},onReconnectRequested:()=>{t.rpc.open===void 0&&this.streams.reconnect()},onProbeRequested:()=>t.rpc.open===void 0&&this.streams.probe(),onStateChange:e=>{e!==`connected`&&t.rpc.open===void 0&&this.streams.disconnect()}}))},a=e.get(`loader`);a===void 0?i():a.await().then(i,()=>{}),e.effect(()=>async()=>{n=!0,r?.stop(),await this.events.dispose(),await this.streams.close()},`api-gateway.client.transport`)}$stream(e){return new j(this.connection,e)}get $host(){let e=this.connection.generation.getSnapshot()?.host.home;return(this.hostFacts===void 0||this.hostFacts.home!==e)&&(this.hostFacts={home:e,isLoopback:this.connection.isLoopback}),this.hostFacts}async $mount(e){let t=this.ctx,n=t.effect(async()=>{let n=await this.enqueue(()=>this.mountContribution(t,e));return()=>this.enqueue(n)},`api-gateway.client.$mount(${JSON.stringify(e.package)})`);return await n,async()=>{await n()}}$on(e,t){return this.events.subscribe(this.ctx,e,t)}openRemoteStream(e,t,n,r,i=`client api: ${e} has no active Connection`){let a=this.ownerCtx.get(`connection`);if(a===void 0)throw Error(i);let o=a.rpc.open?.(`/api`,e,t,n,r);return o===void 0?this.streams.open(e,t,n,r):he(o)}enqueue(e){let t=this.mutations.then(e,e);return this.mutations=t.then(()=>void 0,()=>void 0),t}async mountContribution(e,t){this.validateContribution(t);let n=e.typert.remotes.register(t),r=/* @__PURE__ */ new Map;for(let e of t.descriptors){let t=r.get(e.namespace);t===void 0?r.set(e.namespace,[e]):t.push(e)}let i=[];try{for(let[e,t]of r)i.push(await this.installNamespace(e,t))}catch(e){for(let e of i.reverse())await e();throw await n(),e}return async()=>{for(let e of i.reverse())await e();await n()}}validateContribution(e){let t=/* @__PURE__ */ new Map,n=/* @__PURE__ */ new Map,r=(e,t,n)=>{let r=e.get(t.namespace)??/* @__PURE__ */ new Set;if(r.has(t.method))throw Error(`client api: contribution repeats ${n} method ${K(t)}`);if(r.add(t.method),e.set(t.namespace,r),(this.namespaces.get(t.namespace)?.service)?.has(n,t.method)===!0)throw Error(`client api: ${n} method ${K(t)} is already mounted`)};for(let i of e.descriptors)fe(i),i.invocation.kind===`direct`&&r(t,i,`direct`),J(i)!==void 0&&r(n,i,`scoped`);let i=/* @__PURE__ */ new Set([...t.keys(),...n.keys()]);for(let e of i){let r=this.namespaces.get(e)?.service;if(r===void 0){if(e in this)throw Error(`client api: namespace ${JSON.stringify(e)} conflicts with the Remote service`);let t=G(e);if(this.ownerCtx.reflect.props[t]?.type===`accessor`||this.ownerCtx.get(t)!==void 0)throw Error(`client api: namespace ${JSON.stringify(e)} conflicts with an existing Remote namespace`)}for(let i of/* @__PURE__ */ new Set([...t.get(e)??[],...n.get(e)??[]]))r===void 0?U.assertMethodAvailable(e,i):r.assertMethodAvailable(i)}}async installNamespace(e,t){let n=this.namespaces.get(e),r;n===void 0?{namespace:n,installed:r}=await this.createNamespace(e,t):r=W(n.service,t);let i=n;return async()=>{for(let e of[...r].reverse())
|
|
2
2
|
/* v8 ignore next -- Cordis effect disposers are idempotent and invoke this cleanup at most once. */
|
|
3
3
|
e.token.active&&(e.token.active=!1,e.token.abort.abort(),e.scoped&&i.service.remove(`scoped`,e.descriptor.method,e.token),e.direct&&i.service.remove(`direct`,e.descriptor.method,e.token));await this.disposeNamespace(e,i)}}async createNamespace(e,t){let n,r,i=this.ownerCtx.plugin({name:G(e),apply:i=>{n=new U(i,e,(e,t,n,r)=>this.invokeMethod(e,t,n,r)),r=W(n,t)}});try{await i}catch(e){throw await i.dispose(),e}
|
|
4
4
|
/* v8 ignore next 3 -- a settled namespace fiber synchronously constructs its Service and installs the group. */
|