@pyric/cli 0.1.0-alpha.30 → 0.1.0-alpha.30.2
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/dist/assurance/.generated/conformance-verdicts.d.ts +8 -0
- package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
- package/dist/assurance/.generated/conformance-verdicts.js +8 -0
- package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
- package/dist/bridge/server/peer.d.ts +10 -0
- package/dist/bridge/server/peer.d.ts.map +1 -1
- package/dist/bridge/server/peer.js +46 -1
- package/dist/bridge/server/peer.js.map +1 -1
- package/dist/cli/serve.d.ts +2 -0
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +13 -2
- package/dist/cli/serve.js.map +1 -1
- package/dist/conformance/.generated/can-i-use-browser.js +2 -2
- package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
- package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
- package/dist/conformance/.generated/can-i-use.js +1 -1
- package/dist/conformance/.generated/can-i-use.js.map +1 -1
- package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -1
- package/dist/conformance/.generated/conformance-docs.js +1 -1
- package/dist/conformance/.generated/conformance-docs.js.map +1 -1
- package/dist/register/app-bridge-admin-app-check.d.ts +3 -0
- package/dist/register/app-bridge-admin-app-check.d.ts.map +1 -0
- package/dist/register/app-bridge-admin-app-check.js +43 -0
- package/dist/register/app-bridge-admin-app-check.js.map +1 -0
- package/dist/register/app-bridge-app-check.d.ts +4 -0
- package/dist/register/app-bridge-app-check.d.ts.map +1 -1
- package/dist/register/app-bridge-app-check.js +4 -0
- package/dist/register/app-bridge-app-check.js.map +1 -1
- package/dist/register/app-bridge-shadow.d.ts +4 -2
- package/dist/register/app-bridge-shadow.d.ts.map +1 -1
- package/dist/register/app-bridge-shadow.js +29 -5
- package/dist/register/app-bridge-shadow.js.map +1 -1
- package/dist/register/index.d.ts.map +1 -1
- package/dist/register/index.js +21 -0
- package/dist/register/index.js.map +1 -1
- package/dist/serve/ai-diagnostics-relay.d.ts +4 -1
- package/dist/serve/ai-diagnostics-relay.d.ts.map +1 -1
- package/dist/serve/ai-diagnostics-relay.js +3 -0
- package/dist/serve/ai-diagnostics-relay.js.map +1 -1
- package/dist/serve/ai-proxy.d.ts +21 -1
- package/dist/serve/ai-proxy.d.ts.map +1 -1
- package/dist/serve/ai-proxy.js +39 -14
- package/dist/serve/ai-proxy.js.map +1 -1
- package/dist/serve/ai-terminal-blocks.d.ts +6 -4
- package/dist/serve/ai-terminal-blocks.d.ts.map +1 -1
- package/dist/serve/ai-terminal-blocks.js +7 -4
- package/dist/serve/ai-terminal-blocks.js.map +1 -1
- package/dist/serve/ai-terminal-text.d.ts +8 -0
- package/dist/serve/ai-terminal-text.d.ts.map +1 -1
- package/dist/serve/ai-terminal-text.js +10 -0
- package/dist/serve/ai-terminal-text.js.map +1 -1
- package/dist/serve/bundler.d.ts +40 -0
- package/dist/serve/bundler.d.ts.map +1 -1
- package/dist/serve/bundler.js +133 -2
- package/dist/serve/bundler.js.map +1 -1
- package/dist/serve/entries/ai.d.ts.map +1 -1
- package/dist/serve/entries/ai.js +28 -26
- package/dist/serve/entries/ai.js.map +1 -1
- package/dist/serve/entries/app-ai-passthrough.d.ts +4 -4
- package/dist/serve/entries/app-ai-passthrough.d.ts.map +1 -1
- package/dist/serve/entries/app-ai-passthrough.js +8 -52
- package/dist/serve/entries/app-ai-passthrough.js.map +1 -1
- package/dist/serve/firebase-module-swap.d.ts +22 -0
- package/dist/serve/firebase-module-swap.d.ts.map +1 -1
- package/dist/serve/firebase-module-swap.js +51 -3
- package/dist/serve/firebase-module-swap.js.map +1 -1
- package/dist/serve/gemini-error-redaction.d.ts +6 -0
- package/dist/serve/gemini-error-redaction.d.ts.map +1 -0
- package/dist/serve/gemini-error-redaction.js +61 -0
- package/dist/serve/gemini-error-redaction.js.map +1 -0
- package/dist/serve/gemini-proxy.d.ts +40 -0
- package/dist/serve/gemini-proxy.d.ts.map +1 -0
- package/dist/serve/gemini-proxy.js +105 -0
- package/dist/serve/gemini-proxy.js.map +1 -0
- package/dist/serve/hosted/method-protocol.d.ts +4 -4
- package/dist/serve/html-injection.d.ts +2 -0
- package/dist/serve/html-injection.d.ts.map +1 -1
- package/dist/serve/html-injection.js +4 -2
- package/dist/serve/html-injection.js.map +1 -1
- package/dist/serve/namespace.d.ts +9 -0
- package/dist/serve/namespace.d.ts.map +1 -1
- package/dist/serve/namespace.js +71 -15
- package/dist/serve/namespace.js.map +1 -1
- package/dist/serve/sandbox-session.d.ts +3 -0
- package/dist/serve/sandbox-session.d.ts.map +1 -1
- package/dist/serve/sandbox-session.js +1 -0
- package/dist/serve/sandbox-session.js.map +1 -1
- package/dist/serve/site-ui/docs/ai-compat/index.html +29 -10
- package/dist/serve/site-ui/docs/ai-compat.md +30 -9
- package/dist/serve/site-ui/docs/app-check-compat/index.html +42 -18
- package/dist/serve/site-ui/docs/app-check-compat.md +42 -18
- package/dist/serve/site-ui/docs/auth-compat/index.html +4 -4
- package/dist/serve/site-ui/docs/auth-compat.md +4 -4
- package/dist/serve/site-ui/docs/build/ai-logic/index.html +21 -5
- package/dist/serve/site-ui/docs/build/ai-logic.md +23 -2
- package/dist/serve/site-ui/docs/database-compat/index.html +4 -4
- package/dist/serve/site-ui/docs/database-compat.md +4 -4
- package/dist/serve/site-ui/docs/firestore-compat/index.html +4 -4
- package/dist/serve/site-ui/docs/firestore-compat.md +4 -4
- package/dist/serve/site-ui/docs/index.json +10 -0
- package/dist/serve/site-ui/docs/messaging-compat/index.html +4 -4
- package/dist/serve/site-ui/docs/messaging-compat.md +4 -4
- package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +4 -0
- package/dist/serve/site-ui/docs/pyric-admin-app-reference-api.md +5 -0
- package/dist/serve/site-ui/docs/pyric-cli-register-app-bridge-app-check-reference-api/index.html +2 -0
- package/dist/serve/site-ui/docs/pyric-cli-register-app-bridge-app-check-reference-api.md +3 -0
- package/dist/serve/site-ui/docs/storage-compat/index.html +5 -5
- package/dist/serve/site-ui/docs/storage-compat.md +5 -5
- package/dist/serve/site-ui/docs/tutorial/index.html +11 -1
- package/dist/serve/site-ui/docs/tutorial.md +12 -1
- package/dist/serve/site-ui/examples/chess/index.html +1 -1
- package/dist/serve/vite-sandbox-generation.d.ts.map +1 -1
- package/dist/serve/vite-sandbox-generation.js +2 -0
- package/dist/serve/vite-sandbox-generation.js.map +1 -1
- package/dist/serve/worker/ai-proxy-paths.d.ts +32 -0
- package/dist/serve/worker/ai-proxy-paths.d.ts.map +1 -0
- package/dist/serve/worker/ai-proxy-paths.js +20 -0
- package/dist/serve/worker/ai-proxy-paths.js.map +1 -0
- package/dist/serve/worker/client/ai.d.ts +3 -1
- package/dist/serve/worker/client/ai.d.ts.map +1 -1
- package/dist/serve/worker/client/ai.js +3 -0
- package/dist/serve/worker/client/ai.js.map +1 -1
- package/dist/serve/worker/entry.js +2 -0
- package/dist/serve/worker/entry.js.map +1 -1
- package/dist/serve/worker/host-ai.d.ts +4 -5
- package/dist/serve/worker/host-ai.d.ts.map +1 -1
- package/dist/serve/worker/host-ai.js +19 -23
- package/dist/serve/worker/host-ai.js.map +1 -1
- package/dist/serve/worker/host-context.d.ts +13 -4
- package/dist/serve/worker/host-context.d.ts.map +1 -1
- package/dist/serve/worker/host-context.js.map +1 -1
- package/dist/serve/worker/inbound-validation/operation-arguments.d.ts.map +1 -1
- package/dist/serve/worker/inbound-validation/operation-arguments.js +11 -0
- package/dist/serve/worker/inbound-validation/operation-arguments.js.map +1 -1
- package/dist/serve/worker/protocol.d.ts +13 -0
- package/dist/serve/worker/protocol.d.ts.map +1 -1
- package/dist/serve/worker/protocol.js.map +1 -1
- package/package.json +4 -4
- package/src/assurance/.generated/conformance-verdicts.ts +8 -0
- package/src/bridge/server/peer.ts +49 -1
- package/src/cli/serve.ts +14 -2
- package/src/conformance/.generated/can-i-use-browser.ts +2 -2
- package/src/conformance/.generated/can-i-use.ts +1 -1
- package/src/conformance/.generated/conformance-docs.ts +1 -1
- package/src/register/app-bridge-admin-app-check.ts +46 -0
- package/src/register/app-bridge-app-check.ts +4 -0
- package/src/register/app-bridge-shadow.ts +35 -5
- package/src/register/index.ts +23 -0
- package/src/serve/ai-diagnostics-relay.ts +6 -1
- package/src/serve/ai-proxy.ts +43 -14
- package/src/serve/ai-terminal-blocks.ts +8 -4
- package/src/serve/ai-terminal-text.ts +11 -0
- package/src/serve/bundler.ts +163 -2
- package/src/serve/entries/ai.ts +28 -27
- package/src/serve/entries/app-ai-passthrough.ts +8 -58
- package/src/serve/firebase-module-swap.ts +52 -3
- package/src/serve/gemini-error-redaction.ts +60 -0
- package/src/serve/gemini-proxy.ts +140 -0
- package/src/serve/html-injection.ts +4 -2
- package/src/serve/namespace.ts +74 -15
- package/src/serve/sandbox-session.ts +4 -0
- package/src/serve/vite-sandbox-generation.ts +2 -0
- package/src/serve/worker/ai-proxy-paths.ts +35 -0
- package/src/serve/worker/client/ai.ts +6 -1
- package/src/serve/worker/entry.ts +2 -0
- package/src/serve/worker/host-ai.ts +23 -23
- package/src/serve/worker/host-context.ts +13 -3
- package/src/serve/worker/inbound-validation/operation-arguments.ts +11 -0
- package/src/serve/worker/protocol.ts +14 -2
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
</details>
|
|
81
81
|
<details class="compat-row" data-status="ok">
|
|
82
82
|
<summary class="compat-line"><span class="compat-dot" data-status="ok" role="img" aria-label="Conforming" title="Conforming"></span><span class="compat-main"><code class="compat-api">getStorage(app, bucketUrl?)<code> / </code>getStorageSandbox(target, options?)</code><span class="compat-sub"><span class="compat-behavior">The served <code>firebase/storage</code> entry accepts bare <code>getStorage()</code> and returns the page's shared sandbox handle</span></span></span></summary>
|
|
83
|
-
<div class="compat-evidence"><div class="compat-probe">The canonical served entry supplies the page sandbox when the app argument is omitted; the entry-path and bundler suites execute the public package shape. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/entry-path/storage.ts#L16" target="_blank" rel="noopener noreferrer"><code>storage.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/bundler.test.ts#
|
|
83
|
+
<div class="compat-evidence"><div class="compat-probe">The canonical served entry supplies the page sandbox when the app argument is omitted; the entry-path and bundler suites execute the public package shape. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/entry-path/storage.ts#L16" target="_blank" rel="noopener noreferrer"><code>storage.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/bundler.test.ts#L546" target="_blank" rel="noopener noreferrer"><code>bundler.test.ts</code></a>)</div></div>
|
|
84
84
|
</details>
|
|
85
85
|
</div>
|
|
86
86
|
|
|
@@ -608,7 +608,7 @@ A server process started with `node --import @pyric/cli/register` and `PYRIC_SAN
|
|
|
608
608
|
<div class="compat-list">
|
|
609
609
|
<details class="compat-row" data-status="diverged">
|
|
610
610
|
<summary class="compat-line"><span class="compat-dot" data-status="diverged" role="img" aria-label="Diverged (documented)" title="Diverged (documented)"></span><span class="compat-main"><code class="compat-api">getStorage(app) in a registered server process</code><span class="compat-sub"><span class="compat-behavior">Under a remote register activation on the Node host, <code>firebase/storage</code> in a server process uploads and reads the host's objects under its rules, over the host's byte route. An upload issued before the process's connection has attached waits for the attachment, keeps its place in the call order, and never sends its bytes as frames to a host that takes them only over the route; it fails as a held call does if the connection is not restored within 10 seconds. A finished upload does not keep the process up. When the host is not the Node host, every call fails with <code>failed-precondition</code> and a message naming the Node host (<code>pyric sandbox --hosted</code> or <code>pyric({ hosted: true })</code>); when no host is found, with the discovery error <code>pyric-admin</code> gets. No call falls back to an in-process sandbox.</span></span></span></summary>
|
|
611
|
-
<div class="compat-evidence"><div class="compat-probe">App scenario <code>test/apps/client-sdk-under-register</code> runs the client SDKs under <code>node --import @pyric/cli/register</code> against a hosted Vite dev server, reads back with <code>firebase-admin</code> and a page, and asserts an upload issued as the process's first call that firebase-admin downloads, its HTTP download URL, and that a finished upload does not hold the process. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/storage-byte-route-settled.test.ts#L11" target="_blank" rel="noopener noreferrer"><code>storage-byte-route-settled.test.ts</code></a> pins the wait, the call order and the deadline. On main (942cb175) it failed: the calls ran against a private in-process sandbox, so an upload returned a <a href="https://github.com/davideast/pyric/blob/main/test/apps/client-sdk-under-register/scenario.ts#L1" target="_blank" rel="noopener noreferrer"><code>data:</code></a> URL and firebase-admin read nothing they wrote. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/node-origin.test.ts#L2" target="_blank" rel="noopener noreferrer"><code>packages/cli/test/register/node-origin.test.ts</code></a> runs the served surfaces under a Node origin whose host is not the Node host, or cannot be found, and asserts every call fails, <code>useWorker</code> stays true, the served app entry's placeholder sandbox stays empty, and a <code>pyric/*</code> mirror resolved from the app refuses. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/mapping.test.ts#
|
|
611
|
+
<div class="compat-evidence"><div class="compat-probe">App scenario <code>test/apps/client-sdk-under-register</code> runs the client SDKs under <code>node --import @pyric/cli/register</code> against a hosted Vite dev server, reads back with <code>firebase-admin</code> and a page, and asserts an upload issued as the process's first call that firebase-admin downloads, its HTTP download URL, and that a finished upload does not hold the process. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/storage-byte-route-settled.test.ts#L11" target="_blank" rel="noopener noreferrer"><code>storage-byte-route-settled.test.ts</code></a> pins the wait, the call order and the deadline. On main (942cb175) it failed: the calls ran against a private in-process sandbox, so an upload returned a <a href="https://github.com/davideast/pyric/blob/main/test/apps/client-sdk-under-register/scenario.ts#L1" target="_blank" rel="noopener noreferrer"><code>data:</code></a> URL and firebase-admin read nothing they wrote. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/node-origin.test.ts#L2" target="_blank" rel="noopener noreferrer"><code>packages/cli/test/register/node-origin.test.ts</code></a> runs the served surfaces under a Node origin whose host is not the Node host, or cannot be found, and asserts every call fails, <code>useWorker</code> stays true, the served app entry's placeholder sandbox stays empty, and a <code>pyric/*</code> mirror resolved from the app refuses. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/mapping.test.ts#L80" target="_blank" rel="noopener noreferrer"><code>mapping.test.ts</code></a> pins the mapping per activation value.. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/register-child.test.ts#L596" target="_blank" rel="noopener noreferrer"><code>register-child.test.ts</code></a>)</div>
|
|
612
612
|
<div class="compat-note">a resumable upload issued before the connection attaches reports its progress in one step on a byte-route host</div></div>
|
|
613
613
|
</details>
|
|
614
614
|
</div>
|
|
@@ -620,7 +620,7 @@ Modules Vite loads for server rendering under `vite dev` with `pyric()` (`server
|
|
|
620
620
|
<div class="compat-list">
|
|
621
621
|
<details class="compat-row" data-status="diverged">
|
|
622
622
|
<summary class="compat-line"><span class="compat-dot" data-status="diverged" role="img" aria-label="Diverged (documented)" title="Diverged (documented)"></span><span class="compat-main"><code class="compat-api">getStorage(app) in a server-rendered module under vite dev</code><span class="compat-sub"><span class="compat-behavior">On a hosted dev server, <code>firebase/storage</code> in a server-rendered module uploads and reads the host's objects under its rules as the SSR session's user, over the host's byte route: an upload to another user's path fails with <code>storage/unauthorized</code>, and a download URL names the host's byte route. On a SharedWorker dev server every call fails with <code>failed-precondition</code> and a message naming <code>pyric({ hosted: true })</code>. No call reaches production or an in-process sandbox.</span></span></span></summary>
|
|
623
|
-
<div class="compat-evidence"><div class="compat-probe">App scenario <code>test/apps/vite-ssr-client-sdk</code> uploads to the SSR user's own path, reads its download URL, is denied another user's path, and downloads the object with <code>firebase-admin</code> in a process on the host. On main (ba2c0bf0a) the scenario failed: SSR sign-in rejected with <code>auth/network-request-failed</code> from the network guard, and the RTDB, Firestore and Storage writes did not settle, because the imports loaded the real SDK. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/vite-module-swap.test.ts#
|
|
623
|
+
<div class="compat-evidence"><div class="compat-probe">App scenario <code>test/apps/vite-ssr-client-sdk</code> uploads to the SSR user's own path, reads its download URL, is denied another user's path, and downloads the object with <code>firebase-admin</code> in a process on the host. On main (ba2c0bf0a) the scenario failed: SSR sign-in rejected with <code>auth/network-request-failed</code> from the network guard, and the RTDB, Firestore and Storage writes did not settle, because the imports loaded the real SDK. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/vite-module-swap.test.ts#L4" target="_blank" rel="noopener noreferrer"><code>vite-module-swap.test.ts</code></a> pins the routing per specifier, AI mode and environment (Vite 5's <code>ssr</code> option, a runnable environment, a non-runnable one), <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/vite-ssr-activation.test.ts#L1" target="_blank" rel="noopener noreferrer"><code>vite-ssr-activation.test.ts</code></a> the host, the restart hand-over and the SharedWorker refusal, and <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/vite-plugin-firestore.test.ts#L14" target="_blank" rel="noopener noreferrer"><code>vite-plugin-firestore.test.ts</code></a> runs Vite with <code>firebase</code> installed, so it takes the externalized path. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/test/apps/vite-ssr-client-sdk/scenario.ts#L1" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div>
|
|
624
624
|
<div class="compat-note">one SSR session per dev server process, as one Node server process has one auth state; per-request identity (<code>initializeServerApp</code>) is unsupported</div></div>
|
|
625
625
|
</details>
|
|
626
626
|
</div>
|
|
@@ -667,9 +667,9 @@ Known differences between Pyric and production Firebase. Each remains tracked as
|
|
|
667
667
|
<details class="compat-row" data-status="diverged"><summary class="compat-line"><span class="compat-dot" data-status="diverged" role="img" aria-label="Diverged (documented)" title="Diverged (documented)"></span><span class="compat-main"><code class="compat-api">Operations in flight at a hosted connection drop (web hosted client)</code><span class="compat-sub"><span class="compat-behavior">A Storage operation (<code>getMetadata</code>, <code>deleteObject</code>, <code>list</code>, or an upload step) the web hosted client's socket had taken when it dropped fails once with <code>unavailable</code> and the message "The hosted sandbox connection was lost. Requests already sent may have completed; check state before retrying." It is not sent again. In production the Storage Web SDK retries a request that fails on the network with exponential backoff, for up to 2 minutes for an operation and 10 minutes for an upload, and then fails it with <code>storage/retry-limit-exceeded</code>.</span></span></span></summary>
|
|
668
668
|
<div class="compat-evidence"><div class="compat-note">Production behavior read from <code>@firebase/storage</code> 0.14.3 <code>dist/index.esm.js</code>: <code>DEFAULT_MAX_OPERATION_RETRY_TIME</code> (2 minutes), <code>DEFAULT_MAX_UPLOAD_RETRY_TIME</code> (10 minutes), and <code>retryLimitExceeded()</code> in the request retry loop. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/hosted-reconnect-hold.test.ts#L412" target="_blank" rel="noopener noreferrer"><code>packages/cli/test/serve/worker/hosted-reconnect-hold.test.ts</code></a> drops a real loopback socket with <code>storage.getMetadata</code> and <code>storage.deleteObject</code> in flight and asserts each fails once with that message and reaches the host once.</div></div></details>
|
|
669
669
|
<details class="compat-row" data-status="diverged"><summary class="compat-line"><span class="compat-dot" data-status="diverged" role="img" aria-label="Diverged (documented)" title="Diverged (documented)"></span><span class="compat-main"><code class="compat-api">getStorage(app) in a registered server process</code><span class="compat-sub"><span class="compat-behavior">Under a remote register activation on the Node host, <code>firebase/storage</code> in a server process uploads and reads the host's objects under its rules, over the host's byte route. An upload issued before the process's connection has attached waits for the attachment, keeps its place in the call order, and never sends its bytes as frames to a host that takes them only over the route; it fails as a held call does if the connection is not restored within 10 seconds. A finished upload does not keep the process up. When the host is not the Node host, every call fails with <code>failed-precondition</code> and a message naming the Node host (<code>pyric sandbox --hosted</code> or <code>pyric({ hosted: true })</code>); when no host is found, with the discovery error <code>pyric-admin</code> gets. No call falls back to an in-process sandbox.</span></span></span></summary>
|
|
670
|
-
<div class="compat-evidence"><div class="compat-note">App scenario <code>test/apps/client-sdk-under-register</code> runs the client SDKs under <code>node --import @pyric/cli/register</code> against a hosted Vite dev server, reads back with <code>firebase-admin</code> and a page, and asserts an upload issued as the process's first call that firebase-admin downloads, its HTTP download URL, and that a finished upload does not hold the process. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/storage-byte-route-settled.test.ts#L11" target="_blank" rel="noopener noreferrer"><code>storage-byte-route-settled.test.ts</code></a> pins the wait, the call order and the deadline. On main (942cb175) it failed: the calls ran against a private in-process sandbox, so an upload returned a <a href="https://github.com/davideast/pyric/blob/main/test/apps/client-sdk-under-register/scenario.ts#L1" target="_blank" rel="noopener noreferrer"><code>data:</code></a> URL and firebase-admin read nothing they wrote. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/node-origin.test.ts#L2" target="_blank" rel="noopener noreferrer"><code>packages/cli/test/register/node-origin.test.ts</code></a> runs the served surfaces under a Node origin whose host is not the Node host, or cannot be found, and asserts every call fails, <code>useWorker</code> stays true, the served app entry's placeholder sandbox stays empty, and a <code>pyric/*</code> mirror resolved from the app refuses. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/mapping.test.ts#
|
|
670
|
+
<div class="compat-evidence"><div class="compat-note">App scenario <code>test/apps/client-sdk-under-register</code> runs the client SDKs under <code>node --import @pyric/cli/register</code> against a hosted Vite dev server, reads back with <code>firebase-admin</code> and a page, and asserts an upload issued as the process's first call that firebase-admin downloads, its HTTP download URL, and that a finished upload does not hold the process. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/storage-byte-route-settled.test.ts#L11" target="_blank" rel="noopener noreferrer"><code>storage-byte-route-settled.test.ts</code></a> pins the wait, the call order and the deadline. On main (942cb175) it failed: the calls ran against a private in-process sandbox, so an upload returned a <a href="https://github.com/davideast/pyric/blob/main/test/apps/client-sdk-under-register/scenario.ts#L1" target="_blank" rel="noopener noreferrer"><code>data:</code></a> URL and firebase-admin read nothing they wrote. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/node-origin.test.ts#L2" target="_blank" rel="noopener noreferrer"><code>packages/cli/test/register/node-origin.test.ts</code></a> runs the served surfaces under a Node origin whose host is not the Node host, or cannot be found, and asserts every call fails, <code>useWorker</code> stays true, the served app entry's placeholder sandbox stays empty, and a <code>pyric/*</code> mirror resolved from the app refuses. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/mapping.test.ts#L80" target="_blank" rel="noopener noreferrer"><code>mapping.test.ts</code></a> pins the mapping per activation value.. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/register-child.test.ts#L596" target="_blank" rel="noopener noreferrer"><code>register-child.test.ts</code></a>)</div></div></details>
|
|
671
671
|
<details class="compat-row" data-status="diverged"><summary class="compat-line"><span class="compat-dot" data-status="diverged" role="img" aria-label="Diverged (documented)" title="Diverged (documented)"></span><span class="compat-main"><code class="compat-api">getStorage(app) in a server-rendered module under vite dev</code><span class="compat-sub"><span class="compat-behavior">On a hosted dev server, <code>firebase/storage</code> in a server-rendered module uploads and reads the host's objects under its rules as the SSR session's user, over the host's byte route: an upload to another user's path fails with <code>storage/unauthorized</code>, and a download URL names the host's byte route. On a SharedWorker dev server every call fails with <code>failed-precondition</code> and a message naming <code>pyric({ hosted: true })</code>. No call reaches production or an in-process sandbox.</span></span></span></summary>
|
|
672
|
-
<div class="compat-evidence"><div class="compat-note">App scenario <code>test/apps/vite-ssr-client-sdk</code> uploads to the SSR user's own path, reads its download URL, is denied another user's path, and downloads the object with <code>firebase-admin</code> in a process on the host. On main (ba2c0bf0a) the scenario failed: SSR sign-in rejected with <code>auth/network-request-failed</code> from the network guard, and the RTDB, Firestore and Storage writes did not settle, because the imports loaded the real SDK. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/vite-module-swap.test.ts#
|
|
672
|
+
<div class="compat-evidence"><div class="compat-note">App scenario <code>test/apps/vite-ssr-client-sdk</code> uploads to the SSR user's own path, reads its download URL, is denied another user's path, and downloads the object with <code>firebase-admin</code> in a process on the host. On main (ba2c0bf0a) the scenario failed: SSR sign-in rejected with <code>auth/network-request-failed</code> from the network guard, and the RTDB, Firestore and Storage writes did not settle, because the imports loaded the real SDK. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/vite-module-swap.test.ts#L4" target="_blank" rel="noopener noreferrer"><code>vite-module-swap.test.ts</code></a> pins the routing per specifier, AI mode and environment (Vite 5's <code>ssr</code> option, a runnable environment, a non-runnable one), <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/vite-ssr-activation.test.ts#L1" target="_blank" rel="noopener noreferrer"><code>vite-ssr-activation.test.ts</code></a> the host, the restart hand-over and the SharedWorker refusal, and <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/vite-plugin-firestore.test.ts#L14" target="_blank" rel="noopener noreferrer"><code>vite-plugin-firestore.test.ts</code></a> runs Vite with <code>firebase</code> installed, so it takes the externalized path. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/test/apps/vite-ssr-client-sdk/scenario.ts#L1" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div></details>
|
|
673
673
|
</div>
|
|
674
674
|
|
|
675
675
|
### Not implemented yet
|
|
@@ -39,18 +39,28 @@ html{scrollbar-gutter:stable}
|
|
|
39
39
|
<h2 id="add-the-vite-plugin">Add the Vite plugin</h2>
|
|
40
40
|
<p>Add the Vite plugin to an existing Firebase application:</p>
|
|
41
41
|
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#61AFEF">npm</span><span style="color:#98C379"> install</span><span style="color:#D19A66"> --save-dev</span><span style="color:#98C379"> @pyric/cli</span></span></code></pre>
|
|
42
|
-
<p>Keep the Firebase imports in the application:</p>
|
|
42
|
+
<p>Keep the Firebase imports in the application. AI Logic requires App Check from November 2, 2026, and <code>getAI</code> reads App Check when it starts, so initialize App Check first:</p>
|
|
43
43
|
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">import</span><span style="color:#ABB2BF"> { </span><span style="color:#E06C75">getAI</span><span style="color:#ABB2BF"> } </span><span style="color:#C678DD">from</span><span style="color:#98C379"> 'firebase/ai'</span><span style="color:#ABB2BF">;</span></span>
|
|
44
|
+
<span class="line"><span style="color:#C678DD">import</span><span style="color:#ABB2BF"> { </span><span style="color:#E06C75">initializeAppCheck</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75">ReCaptchaV3Provider</span><span style="color:#ABB2BF"> } </span><span style="color:#C678DD">from</span><span style="color:#98C379"> 'firebase/app-check'</span><span style="color:#ABB2BF">;</span></span>
|
|
44
45
|
<span class="line"><span style="color:#C678DD">import</span><span style="color:#ABB2BF"> { </span><span style="color:#E06C75">getAuth</span><span style="color:#ABB2BF"> } </span><span style="color:#C678DD">from</span><span style="color:#98C379"> 'firebase/auth'</span><span style="color:#ABB2BF">;</span></span>
|
|
45
46
|
<span class="line"><span style="color:#C678DD">import</span><span style="color:#ABB2BF"> { </span><span style="color:#E06C75">getDatabase</span><span style="color:#ABB2BF"> } </span><span style="color:#C678DD">from</span><span style="color:#98C379"> 'firebase/database'</span><span style="color:#ABB2BF">;</span></span>
|
|
46
47
|
<span class="line"><span style="color:#C678DD">import</span><span style="color:#ABB2BF"> { </span><span style="color:#E06C75">getFirestore</span><span style="color:#ABB2BF"> } </span><span style="color:#C678DD">from</span><span style="color:#98C379"> 'firebase/firestore'</span><span style="color:#ABB2BF">;</span></span>
|
|
47
48
|
<span class="line"><span style="color:#C678DD">import</span><span style="color:#ABB2BF"> { </span><span style="color:#E06C75">getStorage</span><span style="color:#ABB2BF"> } </span><span style="color:#C678DD">from</span><span style="color:#98C379"> 'firebase/storage'</span><span style="color:#ABB2BF">;</span></span>
|
|
48
49
|
<span class="line"></span>
|
|
50
|
+
<span class="line"><span style="color:#C678DD">if</span><span style="color:#ABB2BF"> (</span><span style="color:#C678DD">import</span><span style="color:#ABB2BF">.</span><span style="color:#E06C75">meta</span><span style="color:#ABB2BF">.</span><span style="color:#E5C07B">env</span><span style="color:#ABB2BF">.</span><span style="color:#E06C75">DEV</span><span style="color:#ABB2BF">) {</span></span>
|
|
51
|
+
<span class="line"><span style="color:#E5C07B"> self</span><span style="color:#ABB2BF">.</span><span style="color:#E06C75">FIREBASE_APPCHECK_DEBUG_TOKEN</span><span style="color:#56B6C2"> =</span><span style="color:#D19A66"> true</span><span style="color:#ABB2BF">;</span></span>
|
|
52
|
+
<span class="line"><span style="color:#ABB2BF">}</span></span>
|
|
53
|
+
<span class="line"><span style="color:#61AFEF">initializeAppCheck</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75">firebaseApp</span><span style="color:#ABB2BF">, {</span></span>
|
|
54
|
+
<span class="line"><span style="color:#E06C75"> provider</span><span style="color:#ABB2BF">: </span><span style="color:#C678DD">new</span><span style="color:#61AFEF"> ReCaptchaV3Provider</span><span style="color:#ABB2BF">(</span><span style="color:#98C379">'your-recaptcha-v3-site-key'</span><span style="color:#ABB2BF">),</span></span>
|
|
55
|
+
<span class="line"><span style="color:#E06C75"> isTokenAutoRefreshEnabled</span><span style="color:#ABB2BF">: </span><span style="color:#D19A66">true</span><span style="color:#ABB2BF">,</span></span>
|
|
56
|
+
<span class="line"><span style="color:#ABB2BF">});</span></span>
|
|
57
|
+
<span class="line"></span>
|
|
49
58
|
<span class="line"><span style="color:#C678DD">export</span><span style="color:#C678DD"> const</span><span style="color:#E5C07B"> auth</span><span style="color:#56B6C2"> =</span><span style="color:#61AFEF"> getAuth</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75">firebaseApp</span><span style="color:#ABB2BF">);</span></span>
|
|
50
59
|
<span class="line"><span style="color:#C678DD">export</span><span style="color:#C678DD"> const</span><span style="color:#E5C07B"> db</span><span style="color:#56B6C2"> =</span><span style="color:#61AFEF"> getFirestore</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75">firebaseApp</span><span style="color:#ABB2BF">);</span></span>
|
|
51
60
|
<span class="line"><span style="color:#C678DD">export</span><span style="color:#C678DD"> const</span><span style="color:#E5C07B"> rtdb</span><span style="color:#56B6C2"> =</span><span style="color:#61AFEF"> getDatabase</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75">firebaseApp</span><span style="color:#ABB2BF">);</span></span>
|
|
52
61
|
<span class="line"><span style="color:#C678DD">export</span><span style="color:#C678DD"> const</span><span style="color:#E5C07B"> storage</span><span style="color:#56B6C2"> =</span><span style="color:#61AFEF"> getStorage</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75">firebaseApp</span><span style="color:#ABB2BF">);</span></span>
|
|
53
62
|
<span class="line"><span style="color:#C678DD">export</span><span style="color:#C678DD"> const</span><span style="color:#E5C07B"> ai</span><span style="color:#56B6C2"> =</span><span style="color:#61AFEF"> getAI</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75">firebaseApp</span><span style="color:#ABB2BF">);</span></span></code></pre>
|
|
63
|
+
<p>The debug provider stands in for reCAPTCHA during development. The <a href="../build/ai-logic/#initialize-app-check-before-getai">AI Logic guide</a> covers the debug token and the site key.</p>
|
|
54
64
|
<p>Then add Pyric to Vite:</p>
|
|
55
65
|
<pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#7F848E;font-style:italic">// vite.config.ts</span></span>
|
|
56
66
|
<span class="line"><span style="color:#C678DD">import</span><span style="color:#ABB2BF"> { </span><span style="color:#E06C75">defineConfig</span><span style="color:#ABB2BF"> } </span><span style="color:#C678DD">from</span><span style="color:#98C379"> 'vite'</span><span style="color:#ABB2BF">;</span></span>
|
|
@@ -68,15 +68,24 @@ Add the Vite plugin to an existing Firebase application:
|
|
|
68
68
|
npm install --save-dev @pyric/cli
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
Keep the Firebase imports in the application:
|
|
71
|
+
Keep the Firebase imports in the application. AI Logic requires App Check from November 2, 2026, and `getAI` reads App Check when it starts, so initialize App Check first:
|
|
72
72
|
|
|
73
73
|
```ts
|
|
74
74
|
import { getAI } from 'firebase/ai';
|
|
75
|
+
import { initializeAppCheck, ReCaptchaV3Provider } from 'firebase/app-check';
|
|
75
76
|
import { getAuth } from 'firebase/auth';
|
|
76
77
|
import { getDatabase } from 'firebase/database';
|
|
77
78
|
import { getFirestore } from 'firebase/firestore';
|
|
78
79
|
import { getStorage } from 'firebase/storage';
|
|
79
80
|
|
|
81
|
+
if (import.meta.env.DEV) {
|
|
82
|
+
self.FIREBASE_APPCHECK_DEBUG_TOKEN = true;
|
|
83
|
+
}
|
|
84
|
+
initializeAppCheck(firebaseApp, {
|
|
85
|
+
provider: new ReCaptchaV3Provider('your-recaptcha-v3-site-key'),
|
|
86
|
+
isTokenAutoRefreshEnabled: true,
|
|
87
|
+
});
|
|
88
|
+
|
|
80
89
|
export const auth = getAuth(firebaseApp);
|
|
81
90
|
export const db = getFirestore(firebaseApp);
|
|
82
91
|
export const rtdb = getDatabase(firebaseApp);
|
|
@@ -84,6 +93,8 @@ export const storage = getStorage(firebaseApp);
|
|
|
84
93
|
export const ai = getAI(firebaseApp);
|
|
85
94
|
```
|
|
86
95
|
|
|
96
|
+
The debug provider stands in for reCAPTCHA during development. The [AI Logic guide](./build/ai-logic.md#initialize-app-check-before-getai) covers the debug token and the site key.
|
|
97
|
+
|
|
87
98
|
Then add Pyric to Vite:
|
|
88
99
|
|
|
89
100
|
```ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"><title>Play chess against Security Rules</title><link rel="icon" type="image/svg+xml" href="/__pyric/ui/pyric-logo.svg"><link rel="preconnect" href="https://use.typekit.net" crossorigin><link rel="stylesheet" href="https://use.typekit.net/jwb3ycu.css"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet"><style>html{scrollbar-gutter:stable}
|
|
2
2
|
</style>
|
|
3
3
|
<link rel="stylesheet" href="/__pyric/ui/_astro/_example_.B9DG9HLJ.css">
|
|
4
|
-
<link rel="stylesheet" href="/__pyric/ui/_astro/app.8TtSeQQX.css"></head> <body> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style><script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).only=e;window.dispatchEvent(new Event("astro:only"));})();</script><script>(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>1/0*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script><astro-island uid="
|
|
4
|
+
<link rel="stylesheet" href="/__pyric/ui/_astro/app.8TtSeQQX.css"></head> <body> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style><script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).only=e;window.dispatchEvent(new Event("astro:only"));})();</script><script>(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>1/0*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script><astro-island uid="2gRAvb" component-url="/__pyric/ui/_astro/chess-showcase.CVhCNUi_.js" component-export="ChessShowcase" renderer-url="/__pyric/ui/_astro/client.D2ORs4B-.js" props="{}" ssr client="only" opts="{"name":"ChessShowcase","value":"react"}"></astro-island> </body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-sandbox-generation.d.ts","sourceRoot":"","sources":["../../src/serve/vite-sandbox-generation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAC;AAE9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,kCAAkC,EACvC,KAAK,+BAA+B,EACrC,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"vite-sandbox-generation.d.ts","sourceRoot":"","sources":["../../src/serve/vite-sandbox-generation.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ import { attachViteFunctionsDevelopment, } from './vite-functions-development.js
|
|
|
12
12
|
import { resolveAvatarsConfig } from './avatars-config.js';
|
|
13
13
|
import { resolveViteRulesConfig } from './vite-rules-source.js';
|
|
14
14
|
import { viteWorkerEpochSalt } from './vite-ai-config.js';
|
|
15
|
+
import { geminiProxyConfig } from './gemini-proxy.js';
|
|
15
16
|
import { attachViteGenerationBridge, createViteGenerationBridge, } from './vite-generation-bridge.js';
|
|
16
17
|
import { attachViteGenerationFunctions, resolveViteGenerationFunctions, } from './vite-generation-functions.js';
|
|
17
18
|
import { attachViteGenerationMiddleware } from './vite-generation-middleware.js';
|
|
@@ -194,6 +195,7 @@ export async function createViteSandboxGeneration(input, dependencyOverrides = {
|
|
|
194
195
|
ai: aiOptions,
|
|
195
196
|
avatars: avatarsConfig,
|
|
196
197
|
aiProxyUpstream: ai.proxyUpstream,
|
|
198
|
+
aiGemini: geminiProxyConfig(ai.engineWire),
|
|
197
199
|
activity: (incident) => server.config.logger.warn(formatActivityWarning(incident)),
|
|
198
200
|
logger: {
|
|
199
201
|
info: (message) => server.config.logger.info(message),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-sandbox-generation.js","sourceRoot":"","sources":["../../src/serve/vite-sandbox-generation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vite-sandbox-generation.js","sourceRoot":"","sources":["../../src/serve/vite-sandbox-generation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The dev server's AI proxy routes, as the browser engines name them, and
|
|
3
|
+
* the gemini engine a browser page or SharedWorker runs.
|
|
4
|
+
*
|
|
5
|
+
* Browser-safe: the worker host and the served `firebase/ai` entry import
|
|
6
|
+
* this, so it imports nothing from node.
|
|
7
|
+
*/
|
|
8
|
+
import type { AiEngineConfigWire } from './protocol.js';
|
|
9
|
+
/** The serve proxy route the browser openai engine defaults to (#98.2). */
|
|
10
|
+
export declare const AI_PROXY_PATH = "/__pyric/ai-proxy";
|
|
11
|
+
/** The serve route a browser gemini engine sends through. The server sends
|
|
12
|
+
* each request on to Gemini with the key from its own environment (#1584). */
|
|
13
|
+
export declare const GEMINI_PROXY_PATH = "/__pyric/ai-proxy/gemini";
|
|
14
|
+
type GeminiWire = Extract<AiEngineConfigWire, {
|
|
15
|
+
kind: 'gemini';
|
|
16
|
+
}>;
|
|
17
|
+
/** A browser gemini engine config: the wire shape, plus the flag that tells
|
|
18
|
+
* the engine the dev server attaches the credentials. */
|
|
19
|
+
export type BrowserGeminiEngine = GeminiWire & {
|
|
20
|
+
serverAttachesAuth?: true;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* The gemini engine config for a browser. The browser has no server
|
|
24
|
+
* environment, so a config without its own `apiKey` sends through the dev
|
|
25
|
+
* server's {@link GEMINI_PROXY_PATH}, which attaches the key and sends to
|
|
26
|
+
* the server's configured base URL: the key never reaches the browser. A
|
|
27
|
+
* config with an `apiKey` already holds its key in the browser, so it keeps
|
|
28
|
+
* its own target.
|
|
29
|
+
*/
|
|
30
|
+
export declare function browserGeminiEngine(wire: GeminiWire): BrowserGeminiEngine;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=ai-proxy-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-proxy-paths.d.ts","sourceRoot":"","sources":["../../../src/serve/worker/ai-proxy-paths.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,2EAA2E;AAC3E,eAAO,MAAM,aAAa,sBAAsB,CAAC;AAEjD;+EAC+E;AAC/E,eAAO,MAAM,iBAAiB,6BAA4B,CAAC;AAE3D,KAAK,UAAU,GAAG,OAAO,CAAC,kBAAkB,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAElE;0DAC0D;AAC1D,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG;IAAE,kBAAkB,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAE7E;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAIzE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** The serve proxy route the browser openai engine defaults to (#98.2). */
|
|
2
|
+
export const AI_PROXY_PATH = '/__pyric/ai-proxy';
|
|
3
|
+
/** The serve route a browser gemini engine sends through. The server sends
|
|
4
|
+
* each request on to Gemini with the key from its own environment (#1584). */
|
|
5
|
+
export const GEMINI_PROXY_PATH = `${AI_PROXY_PATH}/gemini`;
|
|
6
|
+
/**
|
|
7
|
+
* The gemini engine config for a browser. The browser has no server
|
|
8
|
+
* environment, so a config without its own `apiKey` sends through the dev
|
|
9
|
+
* server's {@link GEMINI_PROXY_PATH}, which attaches the key and sends to
|
|
10
|
+
* the server's configured base URL: the key never reaches the browser. A
|
|
11
|
+
* config with an `apiKey` already holds its key in the browser, so it keeps
|
|
12
|
+
* its own target.
|
|
13
|
+
*/
|
|
14
|
+
export function browserGeminiEngine(wire) {
|
|
15
|
+
const holdsItsOwnKey = wire.apiKey !== undefined;
|
|
16
|
+
if (holdsItsOwnKey)
|
|
17
|
+
return { ...wire };
|
|
18
|
+
return { kind: 'gemini', baseUrl: GEMINI_PROXY_PATH, serverAttachesAuth: true };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ai-proxy-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-proxy-paths.js","sourceRoot":"","sources":["../../../src/serve/worker/ai-proxy-paths.ts"],"names":[],"mappings":"AASA,2EAA2E;AAC3E,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAEjD;+EAC+E;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,aAAa,SAAS,CAAC;AAQ3D;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAgB;IAClD,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;IACjD,IAAI,cAAc;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;IACvC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;AAClF,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* AI ops over the worker port — the served firebase/ai entry plugs these in
|
|
3
3
|
* as the mirror AnswerEngine on the worker path (see entries/ai.ts).
|
|
4
4
|
*/
|
|
5
|
-
import type { AiEngineConfigWire } from '../protocol.js';
|
|
5
|
+
import type { AiAppCheckWire, AiEngineConfigWire } from '../protocol.js';
|
|
6
6
|
import type { ClientDb } from './handles.js';
|
|
7
7
|
/** Parameters shared by the three AI ops. */
|
|
8
8
|
export interface AiOpParams {
|
|
@@ -12,6 +12,8 @@ export interface AiOpParams {
|
|
|
12
12
|
request: Record<string, unknown>;
|
|
13
13
|
/** First-op engine config — see {@link AiEngineConfigWire}. */
|
|
14
14
|
engine?: AiEngineConfigWire;
|
|
15
|
+
/** The App Check claim an app-backed handle attaches — see {@link AiAppCheckWire}. */
|
|
16
|
+
appCheck?: AiAppCheckWire;
|
|
15
17
|
}
|
|
16
18
|
/** Unary `generateContent` against the worker's broker. Resolves with the
|
|
17
19
|
* complete WireResponse envelope; rejects with an Error carrying `.code`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../../src/serve/worker/client/ai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAkB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../../src/serve/worker/client/ai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAkB,MAAM,gBAAgB,CAAC;AAEzF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAa7C,6CAA6C;AAC7C,MAAM,WAAW,UAAU;IACzB,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;0EAE0E;AAC1E,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAUlC;AAED,uEAAuE;AACvE,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAUlC;AAED;;;;;;;GAOG;AACH,wBAAuB,uBAAuB,CAC5C,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,UAAU,GACjB,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAmDzC"}
|
|
@@ -14,6 +14,7 @@ export async function aiGenerateContent(db, params) {
|
|
|
14
14
|
model: params.model,
|
|
15
15
|
request: params.request,
|
|
16
16
|
...(params.engine !== undefined ? { engine: params.engine } : {}),
|
|
17
|
+
...(params.appCheck !== undefined ? { appCheck: params.appCheck } : {}),
|
|
17
18
|
}));
|
|
18
19
|
}
|
|
19
20
|
/** Unary `countTokens` against the worker's broker (deterministic). */
|
|
@@ -25,6 +26,7 @@ export async function aiCountTokens(db, params) {
|
|
|
25
26
|
model: params.model,
|
|
26
27
|
request: params.request,
|
|
27
28
|
...(params.engine !== undefined ? { engine: params.engine } : {}),
|
|
29
|
+
...(params.appCheck !== undefined ? { appCheck: params.appCheck } : {}),
|
|
28
30
|
}));
|
|
29
31
|
}
|
|
30
32
|
/**
|
|
@@ -61,6 +63,7 @@ export async function* aiStreamGenerateContent(db, params) {
|
|
|
61
63
|
model: params.model,
|
|
62
64
|
request: params.request,
|
|
63
65
|
...(params.engine !== undefined ? { engine: params.engine } : {}),
|
|
66
|
+
...(params.appCheck !== undefined ? { appCheck: params.appCheck } : {}),
|
|
64
67
|
});
|
|
65
68
|
if (!opened)
|
|
66
69
|
push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../../../src/serve/worker/client/ai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,wBAAwB,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../../../src/serve/worker/client/ai.ts"],"names":[],"mappings":"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"}
|
|
@@ -98,6 +98,8 @@ async function buildCtx() {
|
|
|
98
98
|
? (url) => new EventSource(url)
|
|
99
99
|
: null,
|
|
100
100
|
});
|
|
101
|
+
// This worker runs in the browser: the gemini engine sends through the dev server.
|
|
102
|
+
ctx.aiRunsInBrowser = true;
|
|
101
103
|
return ctx;
|
|
102
104
|
}
|
|
103
105
|
// ─── SharedWorker connect handler ─────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../../../src/serve/worker/entry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../../../src/serve/worker/entry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { type OpMessage, type AiStreamSubMessage, type AiEngineConfigWire } from './protocol.js';
|
|
2
2
|
import { type HostCtx, type PortLike, type AiBrokerLike } from './host-context.js';
|
|
3
|
-
|
|
4
|
-
export declare const AI_PROXY_PATH = "/__pyric/ai-proxy";
|
|
3
|
+
export { AI_PROXY_PATH } from './ai-proxy-paths.js';
|
|
5
4
|
/** Is this op an AI op (routed here instead of handleOp)? */
|
|
6
5
|
export declare function isAiOp(method: OpMessage['method']): boolean;
|
|
7
6
|
/**
|
|
@@ -25,9 +24,9 @@ export declare function handleAiOp(ctx: HostCtx, port: PortLike, msg: OpMessage)
|
|
|
25
24
|
* (sub handling is synchronous, like the other sub handlers); a client
|
|
26
25
|
* `unsub` mid-stream flips the registered cancel and delivery stops.
|
|
27
26
|
*
|
|
28
|
-
*
|
|
29
|
-
* iteration) — either way a throw lands as
|
|
30
|
-
* convention, terminal for this sub.
|
|
27
|
+
* The App Check gate runs first, then broker validation runs eagerly inside
|
|
28
|
+
* `streamGenerateContent` (before iteration) — either way a throw lands as
|
|
29
|
+
* the shared `{ __error }` snap convention, terminal for this sub.
|
|
31
30
|
*/
|
|
32
31
|
export declare function handleAiSub(ctx: HostCtx, port: PortLike, msg: AiStreamSubMessage): void;
|
|
33
32
|
//# sourceMappingURL=host-ai.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-ai.d.ts","sourceRoot":"","sources":["../../../src/serve/worker/host-ai.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"host-ai.d.ts","sourceRoot":"","sources":["../../../src/serve/worker/host-ai.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAkB,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACjH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAGnG,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,6DAA6D;AAC7D,wBAAgB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,OAAO,CAE3D;AA4CD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAaxF;AAED,4EAA4E;AAC5E,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,kBAAkB,GAAG,IAAI,CA8CvF"}
|
|
@@ -10,7 +10,9 @@ import { packAiEvidence, setAiEvidence } from 'pyric/ai/internal';
|
|
|
10
10
|
* 2. The openai engine's default base URL in this (browser) context is the
|
|
11
11
|
* same-origin `/__pyric/ai-proxy` route, so a localhost upstream (Ollama)
|
|
12
12
|
* needs no CORS setup. Relative URLs resolve against the worker script's
|
|
13
|
-
* origin, so the plain path works from inside the SharedWorker.
|
|
13
|
+
* origin, so the plain path works from inside the SharedWorker. The
|
|
14
|
+
* gemini engine sends through `/__pyric/ai-proxy/gemini`, where the
|
|
15
|
+
* server attaches the key, so the key never enters the browser.
|
|
14
16
|
* 3. `ai.generateContent` / `ai.countTokens` are unary ops exactly like
|
|
15
17
|
* `rtdb.*` / `auth.*`; `ai.streamGenerateContent` is a FINITE
|
|
16
18
|
* subscription that delivers `{ chunk }` snaps in order, then a terminal
|
|
@@ -29,8 +31,8 @@ import { packAiEvidence, setAiEvidence } from 'pyric/ai/internal';
|
|
|
29
31
|
import { getAI, TARGET_SYMBOL } from 'pyric/ai';
|
|
30
32
|
import { serializeError } from './protocol.js';
|
|
31
33
|
import { post, ok, fail } from './host-context.js';
|
|
32
|
-
|
|
33
|
-
export
|
|
34
|
+
import { AI_PROXY_PATH, browserGeminiEngine } from './ai-proxy-paths.js';
|
|
35
|
+
export { AI_PROXY_PATH } from './ai-proxy-paths.js';
|
|
34
36
|
/** Is this op an AI op (routed here instead of handleOp)? */
|
|
35
37
|
export function isAiOp(method) {
|
|
36
38
|
return method.startsWith('ai.');
|
|
@@ -42,7 +44,7 @@ export function isAiOp(method) {
|
|
|
42
44
|
* plain authoring shapes; predicate matchers never made it across the port —
|
|
43
45
|
* structured clone rejects functions loudly at send time).
|
|
44
46
|
*/
|
|
45
|
-
function resolveEngineConfig(wire, upstream) {
|
|
47
|
+
function resolveEngineConfig(wire, upstream, runsInBrowser) {
|
|
46
48
|
if (wire.kind === 'openai') {
|
|
47
49
|
const configuredUrl = wire.baseUrl ?? AI_PROXY_PATH;
|
|
48
50
|
const usesProxy = configuredUrl.replace(/\/$/, '') === AI_PROXY_PATH;
|
|
@@ -57,18 +59,10 @@ function resolveEngineConfig(wire, upstream) {
|
|
|
57
59
|
}
|
|
58
60
|
const isGeminiWire = wire.kind === 'gemini';
|
|
59
61
|
if (isGeminiWire) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
if (hasBaseUrl) {
|
|
65
|
-
result.baseUrl = wire.baseUrl;
|
|
66
|
-
}
|
|
67
|
-
const hasApiKey = wire.apiKey !== undefined;
|
|
68
|
-
if (hasApiKey) {
|
|
69
|
-
result.apiKey = wire.apiKey;
|
|
70
|
-
}
|
|
71
|
-
return result;
|
|
62
|
+
// Node reads the key from its own environment. A browser worker has
|
|
63
|
+
// none, so it sends through the dev server's gemini proxy.
|
|
64
|
+
const config = runsInBrowser ? browserGeminiEngine(wire) : wire;
|
|
65
|
+
return { ...config };
|
|
72
66
|
}
|
|
73
67
|
return {
|
|
74
68
|
kind: 'scripted',
|
|
@@ -92,7 +86,7 @@ export function ensureAiBroker(ctx, opEngine) {
|
|
|
92
86
|
if (ctx.aiBroker)
|
|
93
87
|
return ctx.aiBroker;
|
|
94
88
|
const wire = ctx.aiEngine ?? opEngine;
|
|
95
|
-
const ai = getAI(ctx.sandbox, wire ? { engine: resolveEngineConfig(wire, ctx.aiUpstream) } : undefined);
|
|
89
|
+
const ai = getAI(ctx.sandbox, wire ? { engine: resolveEngineConfig(wire, ctx.aiUpstream, ctx.aiRunsInBrowser === true) } : undefined);
|
|
96
90
|
const target = ai[TARGET_SYMBOL];
|
|
97
91
|
if (!target?.broker) {
|
|
98
92
|
// Unreachable for a real Sandbox ctx; guards a mis-wired embedding host.
|
|
@@ -112,14 +106,14 @@ export async function handleAiOp(ctx, port, msg) {
|
|
|
112
106
|
observation.identity(identity);
|
|
113
107
|
switch (aiMsg.method) {
|
|
114
108
|
case 'ai.generateContent': {
|
|
115
|
-
const response = await broker.generateContent(aiMsg.request, aiMsg.model);
|
|
109
|
+
const response = await broker.generateContent(aiMsg.request, aiMsg.model, aiMsg.appCheck);
|
|
116
110
|
observation.response(response);
|
|
117
111
|
observation.finish('completed');
|
|
118
112
|
ok(port, aiMsg.id, packAiEvidence(response));
|
|
119
113
|
break;
|
|
120
114
|
}
|
|
121
115
|
case 'ai.countTokens': {
|
|
122
|
-
const response = await broker.countTokens(aiMsg.request, aiMsg.model);
|
|
116
|
+
const response = await broker.countTokens(aiMsg.request, aiMsg.model, aiMsg.appCheck);
|
|
123
117
|
observation.response(response);
|
|
124
118
|
observation.finish('completed');
|
|
125
119
|
ok(port, aiMsg.id, packAiEvidence(response));
|
|
@@ -146,9 +140,9 @@ export async function handleAiOp(ctx, port, msg) {
|
|
|
146
140
|
* (sub handling is synchronous, like the other sub handlers); a client
|
|
147
141
|
* `unsub` mid-stream flips the registered cancel and delivery stops.
|
|
148
142
|
*
|
|
149
|
-
*
|
|
150
|
-
* iteration) — either way a throw lands as
|
|
151
|
-
* convention, terminal for this sub.
|
|
143
|
+
* The App Check gate runs first, then broker validation runs eagerly inside
|
|
144
|
+
* `streamGenerateContent` (before iteration) — either way a throw lands as
|
|
145
|
+
* the shared `{ __error }` snap convention, terminal for this sub.
|
|
152
146
|
*/
|
|
153
147
|
export function handleAiSub(ctx, port, msg) {
|
|
154
148
|
let portSubs = ctx.subs.get(port);
|
|
@@ -171,7 +165,9 @@ export function handleAiSub(ctx, port, msg) {
|
|
|
171
165
|
const broker = ensureAiBroker(ctx, msg.engine);
|
|
172
166
|
identity = broker.observationIdentity?.(msg.model);
|
|
173
167
|
observation.identity(identity);
|
|
174
|
-
|
|
168
|
+
// The App Check gate answers before any chunk, as AI Logic answers 403 before a stream.
|
|
169
|
+
await broker.admitAppCheck(msg.model, msg.appCheck);
|
|
170
|
+
for await (const chunk of broker.streamGenerateContent(msg.request, msg.model, msg.appCheck)) {
|
|
175
171
|
if (cancelled)
|
|
176
172
|
return;
|
|
177
173
|
observation.response(chunk, true);
|