@pyric/cli 0.1.0-alpha.30.1 → 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 +4 -0
- package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
- package/dist/assurance/.generated/conformance-verdicts.js +4 -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/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/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/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/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/namespace.d.ts +9 -0
- package/dist/serve/namespace.d.ts.map +1 -1
- package/dist/serve/namespace.js +66 -14
- 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 +20 -1
- package/dist/serve/site-ui/docs/ai-compat.md +21 -0
- package/dist/serve/site-ui/docs/app-check-compat/index.html +8 -8
- package/dist/serve/site-ui/docs/app-check-compat.md +8 -8
- package/dist/serve/site-ui/docs/build/ai-logic/index.html +19 -5
- package/dist/serve/site-ui/docs/build/ai-logic.md +19 -2
- package/dist/serve/site-ui/docs/index.json +10 -0
- package/dist/serve/site-ui/docs/storage-compat/index.html +2 -2
- package/dist/serve/site-ui/docs/storage-compat.md +2 -2
- 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 +4 -0
- package/src/bridge/server/peer.ts +49 -1
- package/src/conformance/.generated/can-i-use.ts +1 -1
- package/src/conformance/.generated/conformance-docs.ts +1 -1
- 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/entries/ai.ts +28 -27
- package/src/serve/gemini-error-redaction.ts +60 -0
- package/src/serve/gemini-proxy.ts +140 -0
- package/src/serve/namespace.ts +69 -14
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-session.js","sourceRoot":"","sources":["../../src/serve/sandbox-session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sandbox-session.js","sourceRoot":"","sources":["../../src/serve/sandbox-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -406,6 +406,25 @@ html{scrollbar-gutter:stable}
|
|
|
406
406
|
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-invalid-debug-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-invalid-debug-token</code></a> (<code>aiRequest</code>, <code>aiGeneration</code>, <code>aiLimitedUseRequest</code>, <code>aiLimitedUseGeneration</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/ai-app-check-passthrough.test.ts#L189" target="_blank" rel="noopener noreferrer"><code>ai-app-check-passthrough.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/ai-production-app-check/scenario.ts#L3" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/ai-production-import-map/scenario.ts#L4" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
407
407
|
</details>
|
|
408
408
|
</div>
|
|
409
|
+
<h2 id="app-check-in-sandbox-ai-mode">App Check in sandbox AI mode</h2>
|
|
410
|
+
<div class="compat-list">
|
|
411
|
+
<details class="compat-row" data-status="ok">
|
|
412
|
+
<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">generateContent from getAI(app) in sandbox AI mode</code><span class="compat-sub"><span class="compat-behavior">An app that never initialized App Check gets the <code>AIError</code> the SDK throws for AI Logic's 403: code <code>fetch-error</code>, <code>customErrorData.status</code> 403, message <code>[403 Forbidden] Firebase AI Logic has been deactivated in this project. ...</code> with the docs link. The broker refuses a missing, malformed, placeholder, tampered or expired token with production's envelope before any engine runs, and answers a sandbox token, including one minted under the debug provider. Pyric's guidance goes to the console once per app and to the dev server terminal, beside the error.</span></span></span></summary>
|
|
413
|
+
<div class="compat-evidence"><div class="compat-probe">captures <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-ai-gate-wire.json" target="_blank" rel="noopener noreferrer"><code>app-check-ai-gate-wire</code></a> (<code>noHeader</code>, <code>malformedHeader</code>, <code>sdkPlaceholderToken</code>, <code>tamperedSignature</code>, <code>validAdminMintedToken</code>) and <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-ai-header.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-ai-header</code></a> (<code>noAppCheck</code>), replayed by the gate suite in process and over the worker port; the app scenario drives the in-page, SharedWorker, Node host and registered Node process planes. On main before #1291 the sandbox answered tokenless requests. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/app-check-gate.test.ts#L8" target="_blank" rel="noopener noreferrer"><code>app-check-gate.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/ai-ops.test.ts#L10" target="_blank" rel="noopener noreferrer"><code>ai-ops.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L2" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
414
|
+
</details>
|
|
415
|
+
<details class="compat-row" data-status="ok">
|
|
416
|
+
<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">initializeAppCheck(app) after getAI(app) in sandbox AI mode</code><span class="compat-sub"><span class="compat-behavior"><code>getAI(app)</code> reads App Check when it builds the handle. <code>initializeAppCheck</code> after it does not throw and <code>getToken</code> works, but that handle's requests carry no token and are refused with the 403.</span></span></span></summary>
|
|
417
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-get-token-before-initialize.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-get-token-before-initialize</code></a> (<code>initializeAfterAi</code>, <code>getTokenAfterLateInitialize</code>, <code>aiRequestAfterLateInitialize</code>, <code>aiGenerationAfterLateInitialize</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/app-check-gate.test.ts#L11" target="_blank" rel="noopener noreferrer"><code>app-check-gate.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/ai-ops.test.ts#L5" target="_blank" rel="noopener noreferrer"><code>ai-ops.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L2" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
418
|
+
</details>
|
|
419
|
+
<details class="compat-row" data-status="ok">
|
|
420
|
+
<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">getAI(app, { useLimitedUseAppCheckTokens: true }) in sandbox AI mode</code><span class="compat-sub"><span class="compat-behavior">Each request carries a fresh limited-use token rather than the cached one, and the sandbox answers.</span></span></span></summary>
|
|
421
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-ai-header.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-ai-header</code></a> (<code>limitedUseModel</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/app-check-gate.test.ts#L9" target="_blank" rel="noopener noreferrer"><code>app-check-gate.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/ai-ops.test.ts#L5" target="_blank" rel="noopener noreferrer"><code>ai-ops.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L11" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
422
|
+
</details>
|
|
423
|
+
<details class="compat-row" data-status="ok">
|
|
424
|
+
<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">generateContentStream and countTokens without App Check in sandbox AI mode</code><span class="compat-sub"><span class="compat-behavior">Streaming and <code>countTokens</code> are refused with the same 403 <code>AIError</code> as <code>generateContent</code>. In process <code>generateContentStream</code> rejects before any chunk; on the SharedWorker and Node host planes the error reaches the caller through the stream and <code>response</code>, as other request errors do there.</span></span></span></summary>
|
|
425
|
+
<div class="compat-evidence"><div class="compat-probe">AI Logic applies App Check to every request (https://firebase.google.com/docs/ai-logic/app-check); the captures cover only <code>generateContent</code>. Unit-backed by the gate suite and the worker protocol suite. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/app-check-gate.test.ts#L193" target="_blank" rel="noopener noreferrer"><code>app-check-gate.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/ai-ops.test.ts#L12" target="_blank" rel="noopener noreferrer"><code>ai-ops.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L40" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
426
|
+
</details>
|
|
427
|
+
</div>
|
|
409
428
|
<h2 id="current-gaps">Current gaps</h2>
|
|
410
429
|
<h3 id="documented-divergences">Documented divergences</h3>
|
|
411
430
|
<p>Known differences between Pyric and production Firebase. Each remains tracked as a non-conforming row.</p>
|
|
@@ -454,4 +473,4 @@ html{scrollbar-gutter:stable}
|
|
|
454
473
|
<div class="compat-evidence"><div class="compat-note"><code>startAudioConversation</code></div>
|
|
455
474
|
<div class="compat-note">disposition:ai.live-api</div></div>
|
|
456
475
|
</details>
|
|
457
|
-
</div> </article> </main> <aside class="doc-toc" aria-label="On this page" data-astro-cid-mw7aashj> <h2 class="doc-toc-heading" data-astro-cid-mw7aashj>On this page</h2> <ul data-astro-cid-mw7aashj> <li data-depth="2" data-astro-cid-mw7aashj> <a href="#status-legend" data-astro-cid-mw7aashj>Status legend</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#getaitarget-and-dispatch" data-astro-cid-mw7aashj>getAI(target) and dispatch</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#generativemodelgeneratecontent-envelope" data-astro-cid-mw7aashj>GenerativeModel.generateContent envelope</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#generatecontentstream-framing-and-aggregation" data-astro-cid-mw7aashj>generateContentStream framing and aggregation</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#chatsession-history-and-streaming-turns" data-astro-cid-mw7aashj>ChatSession history and streaming turns</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#function-calling" data-astro-cid-mw7aashj>Function calling</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#counttokens" data-astro-cid-mw7aashj>countTokens</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#error-envelopes" data-astro-cid-mw7aashj>Error envelopes</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#response-helpers-enhancedgeneratecontentresponse" data-astro-cid-mw7aashj>Response helpers (EnhancedGenerateContentResponse)</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#schema-builders" data-astro-cid-mw7aashj>Schema builders</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#sandbox-answer-engine-scripted" data-astro-cid-mw7aashj>Sandbox answer engine: scripted</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#sandbox-answer-engine-openai-translation" data-astro-cid-mw7aashj>Sandbox answer engine: openai translation</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#client-sdks-in-a-registered-server-process" data-astro-cid-mw7aashj>Client SDKs in a registered server process</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#app-check-on-the-ai-path" data-astro-cid-mw7aashj>App Check on the AI path</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#current-gaps" data-astro-cid-mw7aashj>Current gaps</a> </li><li data-depth="3" data-astro-cid-mw7aashj> <a href="#documented-divergences" data-astro-cid-mw7aashj>Documented divergences</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#reviewed-public-runtime-gaps" data-astro-cid-mw7aashj>Reviewed public-runtime gaps</a> </li> </ul> </aside> </div> <script type="module">const a=document.querySelector("[data-api-symbol-filter]"),d=[...document.querySelectorAll("[data-api-symbol-group]")],n=document.querySelector("[data-api-symbol-empty]");a?.addEventListener("input",()=>{const t=a.value.trim().toLowerCase();let o=0;for(const i of d){let e=0;i.querySelectorAll("[data-api-symbol]").forEach(l=>{const r=!t||(l.dataset.apiSymbol??"").includes(t);l.hidden=!r,r&&e++}),i.hidden=e===0,o+=e}n&&(n.hidden=o>0)});</script> <script type="module">const s=new Map;document.querySelectorAll('.doc-toc a[href^="#"]').forEach(t=>s.set(decodeURIComponent(t.hash.slice(1)),t));if(s.size>0){const t=new Set,n=()=>{let o=null;for(const e of s.keys())if(t.has(e)){o=e;break}s.forEach((e,c)=>e.classList.toggle("active",c===o))},r=new IntersectionObserver(o=>{for(const e of o)e.isIntersecting?t.add(e.target.id):t.delete(e.target.id);n()},{rootMargin:"-72px 0px -60% 0px"});s.forEach((o,e)=>{const c=document.getElementById(e);c&&r.observe(c)})}</script> <script type="module">document.querySelector('.studio__nav [aria-current="page"]')?.scrollIntoView({block:"nearest",inline:"center"});</script> </body></html>
|
|
476
|
+
</div> </article> </main> <aside class="doc-toc" aria-label="On this page" data-astro-cid-mw7aashj> <h2 class="doc-toc-heading" data-astro-cid-mw7aashj>On this page</h2> <ul data-astro-cid-mw7aashj> <li data-depth="2" data-astro-cid-mw7aashj> <a href="#status-legend" data-astro-cid-mw7aashj>Status legend</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#getaitarget-and-dispatch" data-astro-cid-mw7aashj>getAI(target) and dispatch</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#generativemodelgeneratecontent-envelope" data-astro-cid-mw7aashj>GenerativeModel.generateContent envelope</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#generatecontentstream-framing-and-aggregation" data-astro-cid-mw7aashj>generateContentStream framing and aggregation</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#chatsession-history-and-streaming-turns" data-astro-cid-mw7aashj>ChatSession history and streaming turns</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#function-calling" data-astro-cid-mw7aashj>Function calling</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#counttokens" data-astro-cid-mw7aashj>countTokens</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#error-envelopes" data-astro-cid-mw7aashj>Error envelopes</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#response-helpers-enhancedgeneratecontentresponse" data-astro-cid-mw7aashj>Response helpers (EnhancedGenerateContentResponse)</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#schema-builders" data-astro-cid-mw7aashj>Schema builders</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#sandbox-answer-engine-scripted" data-astro-cid-mw7aashj>Sandbox answer engine: scripted</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#sandbox-answer-engine-openai-translation" data-astro-cid-mw7aashj>Sandbox answer engine: openai translation</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#client-sdks-in-a-registered-server-process" data-astro-cid-mw7aashj>Client SDKs in a registered server process</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#app-check-on-the-ai-path" data-astro-cid-mw7aashj>App Check on the AI path</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#app-check-in-sandbox-ai-mode" data-astro-cid-mw7aashj>App Check in sandbox AI mode</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#current-gaps" data-astro-cid-mw7aashj>Current gaps</a> </li><li data-depth="3" data-astro-cid-mw7aashj> <a href="#documented-divergences" data-astro-cid-mw7aashj>Documented divergences</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#reviewed-public-runtime-gaps" data-astro-cid-mw7aashj>Reviewed public-runtime gaps</a> </li> </ul> </aside> </div> <script type="module">const a=document.querySelector("[data-api-symbol-filter]"),d=[...document.querySelectorAll("[data-api-symbol-group]")],n=document.querySelector("[data-api-symbol-empty]");a?.addEventListener("input",()=>{const t=a.value.trim().toLowerCase();let o=0;for(const i of d){let e=0;i.querySelectorAll("[data-api-symbol]").forEach(l=>{const r=!t||(l.dataset.apiSymbol??"").includes(t);l.hidden=!r,r&&e++}),i.hidden=e===0,o+=e}n&&(n.hidden=o>0)});</script> <script type="module">const s=new Map;document.querySelectorAll('.doc-toc a[href^="#"]').forEach(t=>s.set(decodeURIComponent(t.hash.slice(1)),t));if(s.size>0){const t=new Set,n=()=>{let o=null;for(const e of s.keys())if(t.has(e)){o=e;break}s.forEach((e,c)=>e.classList.toggle("active",c===o))},r=new IntersectionObserver(o=>{for(const e of o)e.isIntersecting?t.add(e.target.id):t.delete(e.target.id);n()},{rootMargin:"-72px 0px -60% 0px"});s.forEach((o,e)=>{const c=document.getElementById(e);c&&r.observe(c)})}</script> <script type="module">document.querySelector('.studio__nav [aria-current="page"]')?.scrollIntoView({block:"nearest",inline:"center"});</script> </body></html>
|
|
@@ -434,6 +434,27 @@
|
|
|
434
434
|
</details>
|
|
435
435
|
</div>
|
|
436
436
|
|
|
437
|
+
## App Check in sandbox AI mode
|
|
438
|
+
|
|
439
|
+
<div class="compat-list">
|
|
440
|
+
<details class="compat-row" data-status="ok">
|
|
441
|
+
<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">generateContent from getAI(app) in sandbox AI mode</code><span class="compat-sub"><span class="compat-behavior">An app that never initialized App Check gets the <code>AIError</code> the SDK throws for AI Logic's 403: code <code>fetch-error</code>, <code>customErrorData.status</code> 403, message <code>[403 Forbidden] Firebase AI Logic has been deactivated in this project. ...</code> with the docs link. The broker refuses a missing, malformed, placeholder, tampered or expired token with production's envelope before any engine runs, and answers a sandbox token, including one minted under the debug provider. Pyric's guidance goes to the console once per app and to the dev server terminal, beside the error.</span></span></span></summary>
|
|
442
|
+
<div class="compat-evidence"><div class="compat-probe">captures <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-ai-gate-wire.json" target="_blank" rel="noopener noreferrer"><code>app-check-ai-gate-wire</code></a> (<code>noHeader</code>, <code>malformedHeader</code>, <code>sdkPlaceholderToken</code>, <code>tamperedSignature</code>, <code>validAdminMintedToken</code>) and <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-ai-header.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-ai-header</code></a> (<code>noAppCheck</code>), replayed by the gate suite in process and over the worker port; the app scenario drives the in-page, SharedWorker, Node host and registered Node process planes. On main before #1291 the sandbox answered tokenless requests. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/app-check-gate.test.ts#L8" target="_blank" rel="noopener noreferrer"><code>app-check-gate.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/ai-ops.test.ts#L10" target="_blank" rel="noopener noreferrer"><code>ai-ops.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L2" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
443
|
+
</details>
|
|
444
|
+
<details class="compat-row" data-status="ok">
|
|
445
|
+
<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">initializeAppCheck(app) after getAI(app) in sandbox AI mode</code><span class="compat-sub"><span class="compat-behavior"><code>getAI(app)</code> reads App Check when it builds the handle. <code>initializeAppCheck</code> after it does not throw and <code>getToken</code> works, but that handle's requests carry no token and are refused with the 403.</span></span></span></summary>
|
|
446
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-get-token-before-initialize.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-get-token-before-initialize</code></a> (<code>initializeAfterAi</code>, <code>getTokenAfterLateInitialize</code>, <code>aiRequestAfterLateInitialize</code>, <code>aiGenerationAfterLateInitialize</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/app-check-gate.test.ts#L11" target="_blank" rel="noopener noreferrer"><code>app-check-gate.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/ai-ops.test.ts#L5" target="_blank" rel="noopener noreferrer"><code>ai-ops.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L2" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
447
|
+
</details>
|
|
448
|
+
<details class="compat-row" data-status="ok">
|
|
449
|
+
<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">getAI(app, { useLimitedUseAppCheckTokens: true }) in sandbox AI mode</code><span class="compat-sub"><span class="compat-behavior">Each request carries a fresh limited-use token rather than the cached one, and the sandbox answers.</span></span></span></summary>
|
|
450
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-ai-header.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-ai-header</code></a> (<code>limitedUseModel</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/app-check-gate.test.ts#L9" target="_blank" rel="noopener noreferrer"><code>app-check-gate.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/ai-ops.test.ts#L5" target="_blank" rel="noopener noreferrer"><code>ai-ops.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L11" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
451
|
+
</details>
|
|
452
|
+
<details class="compat-row" data-status="ok">
|
|
453
|
+
<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">generateContentStream and countTokens without App Check in sandbox AI mode</code><span class="compat-sub"><span class="compat-behavior">Streaming and <code>countTokens</code> are refused with the same 403 <code>AIError</code> as <code>generateContent</code>. In process <code>generateContentStream</code> rejects before any chunk; on the SharedWorker and Node host planes the error reaches the caller through the stream and <code>response</code>, as other request errors do there.</span></span></span></summary>
|
|
454
|
+
<div class="compat-evidence"><div class="compat-probe">AI Logic applies App Check to every request (https://firebase.google.com/docs/ai-logic/app-check); the captures cover only <code>generateContent</code>. Unit-backed by the gate suite and the worker protocol suite. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/app-check-gate.test.ts#L193" target="_blank" rel="noopener noreferrer"><code>app-check-gate.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/ai-ops.test.ts#L12" target="_blank" rel="noopener noreferrer"><code>ai-ops.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L40" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
455
|
+
</details>
|
|
456
|
+
</div>
|
|
457
|
+
|
|
437
458
|
## Current gaps
|
|
438
459
|
|
|
439
460
|
### Documented divergences
|
|
@@ -24,7 +24,7 @@ html{scrollbar-gutter:stable}
|
|
|
24
24
|
</details>
|
|
25
25
|
<details class="compat-row" data-status="ok">
|
|
26
26
|
<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">new CustomProvider({ getToken })</code><span class="compat-sub"><span class="compat-behavior">A <code>CustomProvider</code> constructs and is accepted by <code>initializeAppCheck</code>. With a debug token in effect, the SDK never calls it (a provider whose <code>getToken</code> would reject is called zero times).</span></span></span></summary>
|
|
27
|
-
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-debug-get-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-debug-get-token</code></a> (<code>customProviderCalls</code>; the capture initialized App Check with a <code>CustomProvider</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L127" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
27
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-debug-get-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-debug-get-token</code></a> (<code>customProviderCalls</code>; the capture initialized App Check with a <code>CustomProvider</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L127" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
28
28
|
</details>
|
|
29
29
|
<details class="compat-row" data-status="unverified">
|
|
30
30
|
<summary class="compat-line"><span class="compat-dot" data-status="unverified" role="img" aria-label="Unverified" title="Unverified"></span><span class="compat-main"><code class="compat-api">new ReCaptchaV3Provider(siteKey); new ReCaptchaEnterpriseProvider(siteKey)</code><span class="compat-sub"><span class="compat-behavior">Both reCAPTCHA providers construct from a site key and are accepted by <code>initializeAppCheck</code>.</span></span></span></summary>
|
|
@@ -35,19 +35,19 @@ html{scrollbar-gutter:stable}
|
|
|
35
35
|
<div class="compat-list">
|
|
36
36
|
<details class="compat-row" data-status="ok">
|
|
37
37
|
<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">getToken(appCheck) on an app without initializeAppCheck</code><span class="compat-sub"><span class="compat-behavior">Rejects with a <code>FirebaseError</code> with code <code>appCheck/use-before-activation</code>, <code>customData.appName</code>, and the message telling the caller to call <code>initializeAppCheck()</code> first.</span></span></span></summary>
|
|
38
|
-
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-get-token-before-initialize.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-get-token-before-initialize</code></a> (<code>publicGetTokenWithUninitializedApp</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L148" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
38
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-get-token-before-initialize.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-get-token-before-initialize</code></a> (<code>publicGetTokenWithUninitializedApp</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L148" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
39
39
|
</details>
|
|
40
40
|
<details class="compat-row" data-status="ok">
|
|
41
41
|
<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">getToken(appCheck, forceRefresh?): Promise<AppCheckTokenResult></code><span class="compat-sub"><span class="compat-behavior">Resolves <code>{ token }</code> where <code>token</code> is a three-segment JWT: header <code>alg</code> RS256, <code>typ</code> JWT, with a <code>kid</code>; claims <code>aud</code>, <code>exp</code>, <code>iat</code>, <code>iss</code>, <code>jti</code>, <code>provider</code>, <code>sub</code>; <code>iss</code> is <code>https://firebaseappcheck.googleapis.com/<projectNumber></code>, <code>aud</code> is <code>[projects/<projectNumber>, projects/<projectId>]</code>, <code>sub</code> is the app id, and <code>exp - iat</code> is 3600 seconds.</span></span></span></summary>
|
|
42
|
-
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-debug-get-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-debug-get-token</code></a> (<code>first</code>, <code>forced</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L128" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
42
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-debug-get-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-debug-get-token</code></a> (<code>first</code>, <code>forced</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L128" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
43
43
|
</details>
|
|
44
44
|
<details class="compat-row" data-status="ok">
|
|
45
45
|
<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">getToken(appCheck, forceRefresh?)</code><span class="compat-sub"><span class="compat-behavior">A second <code>getToken</code> returns the cached token; <code>getToken(appCheck, true)</code> returns a different, newly minted token.</span></span></span></summary>
|
|
46
|
-
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-debug-get-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-debug-get-token</code></a> (<code>secondEqualsFirst</code>, <code>forceRefreshDiffersFromFirst</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L128" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
46
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-debug-get-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-debug-get-token</code></a> (<code>secondEqualsFirst</code>, <code>forceRefreshDiffersFromFirst</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L128" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
47
47
|
</details>
|
|
48
48
|
<details class="compat-row" data-status="ok">
|
|
49
49
|
<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">getLimitedUseToken(appCheck): Promise<AppCheckTokenResult></code><span class="compat-sub"><span class="compat-behavior">Resolves <code>{ token }</code> with the same JWT shape as <code>getToken</code>, a different token on every call, never the cached token, and leaves the cached <code>getToken</code> token unchanged.</span></span></span></summary>
|
|
50
|
-
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-limited-use-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-limited-use-token</code></a>. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L181" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
50
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-limited-use-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-limited-use-token</code></a>. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L181" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
51
51
|
</details>
|
|
52
52
|
<details class="compat-row" data-status="unsupported">
|
|
53
53
|
<summary class="compat-line"><span class="compat-dot" data-status="unsupported" role="img" aria-label="Not implemented yet" title="Not implemented yet"></span><span class="compat-main"><code class="compat-api">getToken / getLimitedUseToken when attestation fails</code><span class="compat-sub"><span class="compat-behavior">When the exchange is refused (an unregistered debug token), both reject with a <code>FirebaseError</code> with code <code>appCheck/fetch-status-error</code> and <code>customData.httpStatus</code> 403.</span></span></span></summary>
|
|
@@ -58,11 +58,11 @@ html{scrollbar-gutter:stable}
|
|
|
58
58
|
<div class="compat-list">
|
|
59
59
|
<details class="compat-row" data-status="ok">
|
|
60
60
|
<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">onTokenChanged(appCheck, listener | observer): Unsubscribe</code><span class="compat-sub"><span class="compat-behavior">Returns an unsubscribe function. A listener registered after a token exists is not called synchronously; it is called once, asynchronously, with the current cached token.</span></span></span></summary>
|
|
61
|
-
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-on-token-changed.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-on-token-changed</code></a> (<code>unsubscribeType</code>, <code>lateListenerCallsSynchronous</code>, <code>lateListenerCallsWithin500ms</code>, <code>lateListenerTokenSequence</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L205" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
61
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-on-token-changed.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-on-token-changed</code></a> (<code>unsubscribeType</code>, <code>lateListenerCallsSynchronous</code>, <code>lateListenerCallsWithin500ms</code>, <code>lateListenerTokenSequence</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L205" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
62
62
|
</details>
|
|
63
63
|
<details class="compat-row" data-status="diverged">
|
|
64
64
|
<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">onTokenChanged(appCheck, listener | observer)</code><span class="compat-sub"><span class="compat-behavior">Production, debug mode: listeners and observers registered before the first <code>getToken</code> are never called, not by the first token, a forced refresh, or limited-use tokens. Sandbox: they are called once each time the cached token changes (the first token and every forced refresh), never for limited-use tokens, and not after unsubscribing, which is the upstream-documented behavior for an attestation provider.</span></span></span></summary>
|
|
65
|
-
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-on-token-changed.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-on-token-changed</code></a> (every <code>listenerCalls*</code> count is 0). The sandbox side and the attested-provider behavior are pinned in the suite; the attested-provider path is upstream-documented, not captured. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L206" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
65
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-on-token-changed.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-on-token-changed</code></a> (every <code>listenerCalls*</code> count is 0). The sandbox side and the attested-provider behavior are pinned in the suite; the attested-provider path is upstream-documented, not captured. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L206" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
66
66
|
</details>
|
|
67
67
|
<details class="compat-row" data-status="ok">
|
|
68
68
|
<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">setTokenAutoRefreshEnabled(appCheck, isEnabled): void</code><span class="compat-sub"><span class="compat-behavior">Returns <code>undefined</code> and does not throw for either value; <code>getToken</code> still returns the cached token afterwards. Background refresh timing is not captured.</span></span></span></summary>
|
|
@@ -128,7 +128,7 @@ html{scrollbar-gutter:stable}
|
|
|
128
128
|
<p>Known differences between Pyric and production Firebase. Each remains tracked as a non-conforming row.</p>
|
|
129
129
|
<div class="compat-list">
|
|
130
130
|
<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">onTokenChanged(appCheck, listener | observer)</code><span class="compat-sub"><span class="compat-behavior">Production, debug mode: listeners and observers registered before the first <code>getToken</code> are never called, not by the first token, a forced refresh, or limited-use tokens. Sandbox: they are called once each time the cached token changes (the first token and every forced refresh), never for limited-use tokens, and not after unsubscribing, which is the upstream-documented behavior for an attestation provider.</span></span></span></summary>
|
|
131
|
-
<div class="compat-evidence"><div class="compat-note">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-on-token-changed.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-on-token-changed</code></a> (every <code>listenerCalls*</code> count is 0). The sandbox side and the attested-provider behavior are pinned in the suite; the attested-provider path is upstream-documented, not captured. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L206" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
131
|
+
<div class="compat-evidence"><div class="compat-note">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-on-token-changed.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-on-token-changed</code></a> (every <code>listenerCalls*</code> count is 0). The sandbox side and the attested-provider behavior are pinned in the suite; the attested-provider path is upstream-documented, not captured. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L206" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div></details>
|
|
132
132
|
<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">getAppCheck().createToken(unknownAppId)</code><span class="compat-sub"><span class="compat-behavior">Production: an app id the project does not own rejects with <code>app-check/unknown-error</code> and the message <code>App not registered: <appId>.</code> Sandbox: it has no list of the project's registered apps, so it mints a token for any non-empty app id; an empty app id rejects with <code>app-check/invalid-argument</code>.</span></span></span></summary>
|
|
133
133
|
<div class="compat-evidence"><div class="compat-note">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check-admin/app-check-admin-create-token-unknown-app.json" target="_blank" rel="noopener noreferrer"><code>app-check-admin-create-token-unknown-app</code></a>; the sandbox side is pinned in the admin suite. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric-admin/test/app-check/oracle-conformance.test.ts#L113" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>)</div></div></details>
|
|
134
134
|
<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">getAppCheck().verifyToken(firebaseToken) in sandbox AI mode</code><span class="compat-sub"><span class="compat-behavior">Production verifies the App Check tokens Firebase issues. Sandbox: in sandbox AI mode, or in a process not started with <code>@pyric/cli/register</code> in production AI mode, a token whose <code>kid</code> names a key other than the sandbox's rejects with <code>app-check/invalid-argument</code> and Pyric's message, which says the token was not minted by the Pyric sandbox and to start the server in production AI mode (<code>PYRIC_AI_MODE=production</code>). The project check comes first, as in production.</span></span></span></summary>
|
|
@@ -26,7 +26,7 @@ App Check is climbing under Conformance Driven Development. A row below is a tar
|
|
|
26
26
|
</details>
|
|
27
27
|
<details class="compat-row" data-status="ok">
|
|
28
28
|
<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">new CustomProvider({ getToken })</code><span class="compat-sub"><span class="compat-behavior">A <code>CustomProvider</code> constructs and is accepted by <code>initializeAppCheck</code>. With a debug token in effect, the SDK never calls it (a provider whose <code>getToken</code> would reject is called zero times).</span></span></span></summary>
|
|
29
|
-
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-debug-get-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-debug-get-token</code></a> (<code>customProviderCalls</code>; the capture initialized App Check with a <code>CustomProvider</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L127" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
29
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-debug-get-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-debug-get-token</code></a> (<code>customProviderCalls</code>; the capture initialized App Check with a <code>CustomProvider</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L127" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
30
30
|
</details>
|
|
31
31
|
<details class="compat-row" data-status="unverified">
|
|
32
32
|
<summary class="compat-line"><span class="compat-dot" data-status="unverified" role="img" aria-label="Unverified" title="Unverified"></span><span class="compat-main"><code class="compat-api">new ReCaptchaV3Provider(siteKey); new ReCaptchaEnterpriseProvider(siteKey)</code><span class="compat-sub"><span class="compat-behavior">Both reCAPTCHA providers construct from a site key and are accepted by <code>initializeAppCheck</code>.</span></span></span></summary>
|
|
@@ -39,19 +39,19 @@ App Check is climbing under Conformance Driven Development. A row below is a tar
|
|
|
39
39
|
<div class="compat-list">
|
|
40
40
|
<details class="compat-row" data-status="ok">
|
|
41
41
|
<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">getToken(appCheck) on an app without initializeAppCheck</code><span class="compat-sub"><span class="compat-behavior">Rejects with a <code>FirebaseError</code> with code <code>appCheck/use-before-activation</code>, <code>customData.appName</code>, and the message telling the caller to call <code>initializeAppCheck()</code> first.</span></span></span></summary>
|
|
42
|
-
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-get-token-before-initialize.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-get-token-before-initialize</code></a> (<code>publicGetTokenWithUninitializedApp</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L148" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
42
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-get-token-before-initialize.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-get-token-before-initialize</code></a> (<code>publicGetTokenWithUninitializedApp</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L148" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
43
43
|
</details>
|
|
44
44
|
<details class="compat-row" data-status="ok">
|
|
45
45
|
<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">getToken(appCheck, forceRefresh?): Promise<AppCheckTokenResult></code><span class="compat-sub"><span class="compat-behavior">Resolves <code>{ token }</code> where <code>token</code> is a three-segment JWT: header <code>alg</code> RS256, <code>typ</code> JWT, with a <code>kid</code>; claims <code>aud</code>, <code>exp</code>, <code>iat</code>, <code>iss</code>, <code>jti</code>, <code>provider</code>, <code>sub</code>; <code>iss</code> is <code>https://firebaseappcheck.googleapis.com/<projectNumber></code>, <code>aud</code> is <code>[projects/<projectNumber>, projects/<projectId>]</code>, <code>sub</code> is the app id, and <code>exp - iat</code> is 3600 seconds.</span></span></span></summary>
|
|
46
|
-
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-debug-get-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-debug-get-token</code></a> (<code>first</code>, <code>forced</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L128" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
46
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-debug-get-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-debug-get-token</code></a> (<code>first</code>, <code>forced</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L128" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
47
47
|
</details>
|
|
48
48
|
<details class="compat-row" data-status="ok">
|
|
49
49
|
<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">getToken(appCheck, forceRefresh?)</code><span class="compat-sub"><span class="compat-behavior">A second <code>getToken</code> returns the cached token; <code>getToken(appCheck, true)</code> returns a different, newly minted token.</span></span></span></summary>
|
|
50
|
-
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-debug-get-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-debug-get-token</code></a> (<code>secondEqualsFirst</code>, <code>forceRefreshDiffersFromFirst</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L128" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
50
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-debug-get-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-debug-get-token</code></a> (<code>secondEqualsFirst</code>, <code>forceRefreshDiffersFromFirst</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L128" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
51
51
|
</details>
|
|
52
52
|
<details class="compat-row" data-status="ok">
|
|
53
53
|
<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">getLimitedUseToken(appCheck): Promise<AppCheckTokenResult></code><span class="compat-sub"><span class="compat-behavior">Resolves <code>{ token }</code> with the same JWT shape as <code>getToken</code>, a different token on every call, never the cached token, and leaves the cached <code>getToken</code> token unchanged.</span></span></span></summary>
|
|
54
|
-
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-limited-use-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-limited-use-token</code></a>. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L181" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
54
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-limited-use-token.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-limited-use-token</code></a>. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L181" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
55
55
|
</details>
|
|
56
56
|
<details class="compat-row" data-status="unsupported">
|
|
57
57
|
<summary class="compat-line"><span class="compat-dot" data-status="unsupported" role="img" aria-label="Not implemented yet" title="Not implemented yet"></span><span class="compat-main"><code class="compat-api">getToken / getLimitedUseToken when attestation fails</code><span class="compat-sub"><span class="compat-behavior">When the exchange is refused (an unregistered debug token), both reject with a <code>FirebaseError</code> with code <code>appCheck/fetch-status-error</code> and <code>customData.httpStatus</code> 403.</span></span></span></summary>
|
|
@@ -64,11 +64,11 @@ App Check is climbing under Conformance Driven Development. A row below is a tar
|
|
|
64
64
|
<div class="compat-list">
|
|
65
65
|
<details class="compat-row" data-status="ok">
|
|
66
66
|
<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">onTokenChanged(appCheck, listener | observer): Unsubscribe</code><span class="compat-sub"><span class="compat-behavior">Returns an unsubscribe function. A listener registered after a token exists is not called synchronously; it is called once, asynchronously, with the current cached token.</span></span></span></summary>
|
|
67
|
-
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-on-token-changed.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-on-token-changed</code></a> (<code>unsubscribeType</code>, <code>lateListenerCallsSynchronous</code>, <code>lateListenerCallsWithin500ms</code>, <code>lateListenerTokenSequence</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L205" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
67
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-on-token-changed.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-on-token-changed</code></a> (<code>unsubscribeType</code>, <code>lateListenerCallsSynchronous</code>, <code>lateListenerCallsWithin500ms</code>, <code>lateListenerTokenSequence</code>). (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L205" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
68
68
|
</details>
|
|
69
69
|
<details class="compat-row" data-status="diverged">
|
|
70
70
|
<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">onTokenChanged(appCheck, listener | observer)</code><span class="compat-sub"><span class="compat-behavior">Production, debug mode: listeners and observers registered before the first <code>getToken</code> are never called, not by the first token, a forced refresh, or limited-use tokens. Sandbox: they are called once each time the cached token changes (the first token and every forced refresh), never for limited-use tokens, and not after unsubscribing, which is the upstream-documented behavior for an attestation provider.</span></span></span></summary>
|
|
71
|
-
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-on-token-changed.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-on-token-changed</code></a> (every <code>listenerCalls*</code> count is 0). The sandbox side and the attested-provider behavior are pinned in the suite; the attested-provider path is upstream-documented, not captured. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L206" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
71
|
+
<div class="compat-evidence"><div class="compat-probe">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-on-token-changed.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-on-token-changed</code></a> (every <code>listenerCalls*</code> count is 0). The sandbox side and the attested-provider behavior are pinned in the suite; the attested-provider path is upstream-documented, not captured. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L206" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
|
|
72
72
|
</details>
|
|
73
73
|
<details class="compat-row" data-status="ok">
|
|
74
74
|
<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">setTokenAutoRefreshEnabled(appCheck, isEnabled): void</code><span class="compat-sub"><span class="compat-behavior">Returns <code>undefined</code> and does not throw for either value; <code>getToken</code> still returns the cached token afterwards. Background refresh timing is not captured.</span></span></span></summary>
|
|
@@ -142,7 +142,7 @@ Known differences between Pyric and production Firebase. Each remains tracked as
|
|
|
142
142
|
|
|
143
143
|
<div class="compat-list">
|
|
144
144
|
<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">onTokenChanged(appCheck, listener | observer)</code><span class="compat-sub"><span class="compat-behavior">Production, debug mode: listeners and observers registered before the first <code>getToken</code> are never called, not by the first token, a forced refresh, or limited-use tokens. Sandbox: they are called once each time the cached token changes (the first token and every forced refresh), never for limited-use tokens, and not after unsubscribing, which is the upstream-documented behavior for an attestation provider.</span></span></span></summary>
|
|
145
|
-
<div class="compat-evidence"><div class="compat-note">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-on-token-changed.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-on-token-changed</code></a> (every <code>listenerCalls*</code> count is 0). The sandbox side and the attested-provider behavior are pinned in the suite; the attested-provider path is upstream-documented, not captured. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L206" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#
|
|
145
|
+
<div class="compat-evidence"><div class="compat-note">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check/app-check-client-on-token-changed.json" target="_blank" rel="noopener noreferrer"><code>app-check-client-on-token-changed</code></a> (every <code>listenerCalls*</code> count is 0). The sandbox side and the attested-provider behavior are pinned in the suite; the attested-provider path is upstream-documented, not captured. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/app-check/oracle-conformance.test.ts#L206" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L80" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div></details>
|
|
146
146
|
<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">getAppCheck().createToken(unknownAppId)</code><span class="compat-sub"><span class="compat-behavior">Production: an app id the project does not own rejects with <code>app-check/unknown-error</code> and the message <code>App not registered: <appId>.</code> Sandbox: it has no list of the project's registered apps, so it mints a token for any non-empty app id; an empty app id rejects with <code>app-check/invalid-argument</code>.</span></span></span></summary>
|
|
147
147
|
<div class="compat-evidence"><div class="compat-note">capture <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/app-check-admin/app-check-admin-create-token-unknown-app.json" target="_blank" rel="noopener noreferrer"><code>app-check-admin-create-token-unknown-app</code></a>; the sandbox side is pinned in the admin suite. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric-admin/test/app-check/oracle-conformance.test.ts#L113" target="_blank" rel="noopener noreferrer"><code>oracle-conformance.test.ts</code></a>)</div></div></details>
|
|
148
148
|
<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">getAppCheck().verifyToken(firebaseToken) in sandbox AI mode</code><span class="compat-sub"><span class="compat-behavior">Production verifies the App Check tokens Firebase issues. Sandbox: in sandbox AI mode, or in a process not started with <code>@pyric/cli/register</code> in production AI mode, a token whose <code>kid</code> names a key other than the sandbox's rejects with <code>app-check/invalid-argument</code> and Pyric's message, which says the token was not minted by the Pyric sandbox and to start the server in production AI mode (<code>PYRIC_AI_MODE=production</code>). The project check comes first, as in production.</span></span></span></summary>
|