@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conformance-docs.js","sourceRoot":"","sources":["../../../src/conformance/.generated/conformance-docs.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,sBAAsB,GAAmC,CAAC,EAAC,MAAM,EAAC,oBAAoB,EAAC,OAAO,EAAC,oBAAoB,EAAC,OAAO,EAAC,oBAAoB,EAAC,UAAU,EAAC,gqQAAgqQ,EAAC,EAAC,EAAC,MAAM,EAAC,YAAY,EAAC,OAAO,EAAC,KAAK,EAAC,OAAO,EAAC,gCAAgC,EAAC,UAAU,EAAC,i2rBAAi2rB,EAAC,EAAC,EAAC,MAAM,EAAC,WAAW,EAAC,OAAO,EAAC,UAAU,EAAC,OAAO,EAAC,+BAA+B,EAAC,UAAU,EAAC,
|
|
1
|
+
{"version":3,"file":"conformance-docs.js","sourceRoot":"","sources":["../../../src/conformance/.generated/conformance-docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-bridge-admin-app-check.d.ts","sourceRoot":"","sources":["../../src/register/app-bridge-admin-app-check.ts"],"names":[],"mappings":"AA0CA,+FAA+F;AAC/F,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE9F"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Production AI mode's App Check verifier for a registered Node process
|
|
3
|
+
* (#1552): firebase-admin's own `verifyToken`, for the tokens the page gets
|
|
4
|
+
* from Firebase.
|
|
5
|
+
*
|
|
6
|
+
* The register installs it behind `pyric.admin.appCheck.firebaseVerifier` in
|
|
7
|
+
* production AI mode only, and loads this module on the first token whose
|
|
8
|
+
* `kid` is not the sandbox's, so a server that never sees one never loads
|
|
9
|
+
* firebase-admin. `firebase-admin/app` and `firebase-admin/app-check` reach
|
|
10
|
+
* the real package from here (`isBypassedBridgeImport`).
|
|
11
|
+
*
|
|
12
|
+
* Each project gets one firebase-admin app whose credential refuses to mint an
|
|
13
|
+
* access token, so the app cannot fall back to Application Default
|
|
14
|
+
* Credentials, the metadata server, or Google's OAuth endpoints. Verifying a
|
|
15
|
+
* token needs none of them: firebase-admin fetches Firebase's public keys from
|
|
16
|
+
* `https://firebaseappcheck.googleapis.com/v1/jwks` without credentials and
|
|
17
|
+
* caches them for six hours. `consume` is never passed here; the mirror
|
|
18
|
+
* records it in the process.
|
|
19
|
+
*
|
|
20
|
+
* The export is typed loosely on purpose: the published declarations of
|
|
21
|
+
* @pyric/cli carry no Firebase SDK edge. pyric-admin types the result.
|
|
22
|
+
*/
|
|
23
|
+
import { initializeApp } from 'firebase-admin/app';
|
|
24
|
+
import { getAppCheck } from 'firebase-admin/app-check';
|
|
25
|
+
const NO_CREDENTIALS = "Pyric's App Check verifier holds no credentials.";
|
|
26
|
+
/** A credential that never mints an access token. */
|
|
27
|
+
const noCredentials = {
|
|
28
|
+
getAccessToken: () => Promise.reject(new Error(NO_CREDENTIALS)),
|
|
29
|
+
};
|
|
30
|
+
const appsByProject = new Map();
|
|
31
|
+
function verifierApp(projectId) {
|
|
32
|
+
const existing = appsByProject.get(projectId);
|
|
33
|
+
if (existing !== undefined)
|
|
34
|
+
return existing;
|
|
35
|
+
const app = initializeApp({ projectId, credential: noCredentials }, `[pyric] app-check verifier ${projectId}`);
|
|
36
|
+
appsByProject.set(projectId, app);
|
|
37
|
+
return app;
|
|
38
|
+
}
|
|
39
|
+
/** firebase-admin's `verifyToken(token)` for an app scoped to `projectId`, with no options. */
|
|
40
|
+
export function verifyFirebaseAppCheckToken(token, projectId) {
|
|
41
|
+
return getAppCheck(verifierApp(projectId)).verifyToken(token);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=app-bridge-admin-app-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-bridge-admin-app-check.js","sourceRoot":"","sources":["../../src/register/app-bridge-admin-app-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,aAAa,EAA6B,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,cAAc,GAAG,kDAAkD,CAAC;AAE1E,qDAAqD;AACrD,MAAM,aAAa,GAAe;IAChC,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;CAChE,CAAC;AAEF,MAAM,aAAa,GAAG,IAAI,GAAG,EAAe,CAAC;AAE7C,SAAS,WAAW,CAAC,SAAiB;IACpC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC5C,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,8BAA8B,SAAS,EAAE,CAAC,CAAC;IAC/G,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAClC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,2BAA2B,CAAC,KAAa,EAAE,SAAiB;IAC1E,OAAO,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `shadowAppOf` throws when the shadow app could not be created, so that
|
|
3
|
+
* cause surfaces here before the SDK would fail on a missing container.
|
|
4
|
+
*/
|
|
1
5
|
export declare function initializeAppCheck(app: {
|
|
2
6
|
name: string;
|
|
3
7
|
} | undefined, options: unknown): unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-bridge-app-check.d.ts","sourceRoot":"","sources":["../../src/register/app-bridge-app-check.ts"],"names":[],"mappings":"AAsBA,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAG/F;AAED,eAAO,MAAM,cAAc,EAAE,OAAqC,CAAC;AACnE,eAAO,MAAM,2BAA2B,EAAE,OAAkD,CAAC;AAC7F,eAAO,MAAM,mBAAmB,EAAE,OAA0C,CAAC;AAC7E,eAAO,MAAM,kBAAkB,EAAE,OAAyC,CAAC;AAC3E,eAAO,MAAM,QAAQ,EAAE,OAA+B,CAAC;AACvD,eAAO,MAAM,cAAc,EAAE,OAAqC,CAAC;AACnE,eAAO,MAAM,0BAA0B,EAAE,OAAiD,CAAC"}
|
|
1
|
+
{"version":3,"file":"app-bridge-app-check.d.ts","sourceRoot":"","sources":["../../src/register/app-bridge-app-check.ts"],"names":[],"mappings":"AAsBA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAG/F;AAED,eAAO,MAAM,cAAc,EAAE,OAAqC,CAAC;AACnE,eAAO,MAAM,2BAA2B,EAAE,OAAkD,CAAC;AAC7F,eAAO,MAAM,mBAAmB,EAAE,OAA0C,CAAC;AAC7E,eAAO,MAAM,kBAAkB,EAAE,OAAyC,CAAC;AAC3E,eAAO,MAAM,QAAQ,EAAE,OAA+B,CAAC;AACvD,eAAO,MAAM,cAAc,EAAE,OAAqC,CAAC;AACnE,eAAO,MAAM,0BAA0B,EAAE,OAAiD,CAAC"}
|
|
@@ -17,6 +17,10 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import * as realAppCheck from 'firebase/app-check';
|
|
19
19
|
import { shadowAppOf } from './app-bridge-shadow.js';
|
|
20
|
+
/**
|
|
21
|
+
* `shadowAppOf` throws when the shadow app could not be created, so that
|
|
22
|
+
* cause surfaces here before the SDK would fail on a missing container.
|
|
23
|
+
*/
|
|
20
24
|
export function initializeAppCheck(app, options) {
|
|
21
25
|
const shadow = app === undefined ? undefined : shadowAppOf(app);
|
|
22
26
|
return realAppCheck.initializeAppCheck(shadow, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-bridge-app-check.js","sourceRoot":"","sources":["../../src/register/app-bridge-app-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAIrD,MAAM,UAAU,kBAAkB,CAAC,GAAiC,EAAE,OAAgB;IACpF,MAAM,MAAM,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAChE,OAAO,YAAY,CAAC,kBAAkB,CAAC,MAAuC,EAAE,OAAwC,CAAC,CAAC;AAC5H,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAY,YAAY,CAAC,cAAc,CAAC;AACnE,MAAM,CAAC,MAAM,2BAA2B,GAAY,YAAY,CAAC,2BAA2B,CAAC;AAC7F,MAAM,CAAC,MAAM,mBAAmB,GAAY,YAAY,CAAC,mBAAmB,CAAC;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAY,YAAY,CAAC,kBAAkB,CAAC;AAC3E,MAAM,CAAC,MAAM,QAAQ,GAAY,YAAY,CAAC,QAAQ,CAAC;AACvD,MAAM,CAAC,MAAM,cAAc,GAAY,YAAY,CAAC,cAAc,CAAC;AACnE,MAAM,CAAC,MAAM,0BAA0B,GAAY,YAAY,CAAC,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"app-bridge-app-check.js","sourceRoot":"","sources":["../../src/register/app-bridge-app-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAIrD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAiC,EAAE,OAAgB;IACpF,MAAM,MAAM,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAChE,OAAO,YAAY,CAAC,kBAAkB,CAAC,MAAuC,EAAE,OAAwC,CAAC,CAAC;AAC5H,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAY,YAAY,CAAC,cAAc,CAAC;AACnE,MAAM,CAAC,MAAM,2BAA2B,GAAY,YAAY,CAAC,2BAA2B,CAAC;AAC7F,MAAM,CAAC,MAAM,mBAAmB,GAAY,YAAY,CAAC,mBAAmB,CAAC;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAY,YAAY,CAAC,kBAAkB,CAAC;AAC3E,MAAM,CAAC,MAAM,QAAQ,GAAY,YAAY,CAAC,QAAQ,CAAC;AACvD,MAAM,CAAC,MAAM,cAAc,GAAY,YAAY,CAAC,cAAc,CAAC;AACnE,MAAM,CAAC,MAAM,0BAA0B,GAAY,YAAY,CAAC,0BAA0B,CAAC"}
|
|
@@ -6,8 +6,10 @@ export interface PyricAppRegistry {
|
|
|
6
6
|
deleteApp(app: FirebaseApp): Promise<void>;
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
|
-
* The shadow Firebase app for a Pyric app, by name.
|
|
10
|
-
*
|
|
9
|
+
* The shadow Firebase app for a Pyric app, by name. When creating it failed,
|
|
10
|
+
* throws an error that names the app and keeps the failure as `cause`. A
|
|
11
|
+
* Firebase app passed in directly, or a Pyric app with no attempt yet, is
|
|
12
|
+
* returned unchanged.
|
|
11
13
|
*/
|
|
12
14
|
export declare function shadowAppOf(app: {
|
|
13
15
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-bridge-shadow.d.ts","sourceRoot":"","sources":["../../src/register/app-bridge-shadow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-bridge-shadow.d.ts","sourceRoot":"","sources":["../../src/register/app-bridge-shadow.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEnF,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,mBAAmB,GAAG,WAAW,CAAC;IAClG,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IACnC,OAAO,IAAI,WAAW,EAAE,CAAC;IACzB,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAwDD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAQzD;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,gBAAgB,CA0BhF"}
|
|
@@ -2,9 +2,24 @@
|
|
|
2
2
|
* Production AI pass-through for canonical `firebase/app` in a registered Node
|
|
3
3
|
* process: each Pyric app gets a shadow real Firebase app whose container the
|
|
4
4
|
* real `firebase/ai` reads. Shared by the in-process adapter
|
|
5
|
-
* (`./app-bridge.ts`)
|
|
5
|
+
* (`./app-bridge.ts`), the Node host client (`./client/app-bridge.ts`), and
|
|
6
|
+
* the served `firebase/app` entry (`serve/entries/app-ai-passthrough.ts`).
|
|
6
7
|
*/
|
|
7
8
|
import * as realApp from 'firebase/app';
|
|
9
|
+
/**
|
|
10
|
+
* Why the shadow app for a name could not be created, kept until a later
|
|
11
|
+
* attempt succeeds or the app is deleted. It sits behind `Symbol.for` so every
|
|
12
|
+
* bundle or module record of this file on a page or in a process shares it.
|
|
13
|
+
*/
|
|
14
|
+
const SHADOW_FAILURES = Symbol.for('pyric.ai.shadowAppFailures');
|
|
15
|
+
const shadowFailures = (globalThis[SHADOW_FAILURES] ??= new Map());
|
|
16
|
+
function causeText(cause) {
|
|
17
|
+
const text = cause instanceof Error ? cause.message : String(cause);
|
|
18
|
+
return text.replace(/\.$/, '');
|
|
19
|
+
}
|
|
20
|
+
function shadowFailedError(name, cause) {
|
|
21
|
+
return new Error(`Pyric could not create the Firebase app that firebase/app-check and firebase/ai attach to in production AI mode, for app "${name}": ${causeText(cause)}.`, { cause });
|
|
22
|
+
}
|
|
8
23
|
function decorateApp(app, options, rawSettings) {
|
|
9
24
|
try {
|
|
10
25
|
let shadow;
|
|
@@ -23,25 +38,33 @@ function decorateApp(app, options, rawSettings) {
|
|
|
23
38
|
shadow = realApp.initializeApp(initOptions, objectSettings);
|
|
24
39
|
}
|
|
25
40
|
}
|
|
41
|
+
shadowFailures.delete(app.name);
|
|
26
42
|
const hasShadowContainer = shadow.container !== undefined && shadow.container !== null;
|
|
27
43
|
if (hasShadowContainer) {
|
|
28
44
|
Object.defineProperty(app, 'container', { value: shadow.container, configurable: true });
|
|
29
45
|
}
|
|
30
46
|
}
|
|
31
|
-
catch {
|
|
32
|
-
//
|
|
47
|
+
catch (error) {
|
|
48
|
+
// Pyric's initializeApp still succeeds; shadowAppOf reports the cause
|
|
49
|
+
// when firebase/app-check or firebase/ai needs the shadow.
|
|
50
|
+
shadowFailures.set(app.name, error);
|
|
33
51
|
}
|
|
34
52
|
return app;
|
|
35
53
|
}
|
|
36
54
|
/**
|
|
37
|
-
* The shadow Firebase app for a Pyric app, by name.
|
|
38
|
-
*
|
|
55
|
+
* The shadow Firebase app for a Pyric app, by name. When creating it failed,
|
|
56
|
+
* throws an error that names the app and keeps the failure as `cause`. A
|
|
57
|
+
* Firebase app passed in directly, or a Pyric app with no attempt yet, is
|
|
58
|
+
* returned unchanged.
|
|
39
59
|
*/
|
|
40
60
|
export function shadowAppOf(app) {
|
|
41
61
|
try {
|
|
42
62
|
return realApp.getApp(app.name);
|
|
43
63
|
}
|
|
44
64
|
catch {
|
|
65
|
+
const hasFailure = shadowFailures.has(app.name);
|
|
66
|
+
if (hasFailure)
|
|
67
|
+
throw shadowFailedError(app.name, shadowFailures.get(app.name));
|
|
45
68
|
return app;
|
|
46
69
|
}
|
|
47
70
|
}
|
|
@@ -58,6 +81,7 @@ export function shadowedAppRegistry(pyricApp) {
|
|
|
58
81
|
return pyricApp.getApps().map((app) => decorateApp(app));
|
|
59
82
|
},
|
|
60
83
|
async deleteApp(app) {
|
|
84
|
+
shadowFailures.delete(app.name);
|
|
61
85
|
try {
|
|
62
86
|
const shadow = realApp.getApp(app.name);
|
|
63
87
|
const hasShadow = shadow !== undefined && shadow !== null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-bridge-shadow.js","sourceRoot":"","sources":["../../src/register/app-bridge-shadow.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"app-bridge-shadow.js","sourceRoot":"","sources":["../../src/register/app-bridge-shadow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/register/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/register/index.ts"],"names":[],"mappings":"AAkOA;;yEAEyE;AACzE,eAAO,IAAI,MAAM,SAAQ,CAAC"}
|
package/dist/register/index.js
CHANGED
|
@@ -38,10 +38,13 @@ import { resolveEsmOnlySubpath } from './esm-exports.js';
|
|
|
38
38
|
import { NET_GUARD_GLOBAL, installNetGuard, parseGuardMode } from './net-guard.js';
|
|
39
39
|
import { emitBeacon } from './beacon.js';
|
|
40
40
|
import { remoteSandbox } from '../remote/index.js';
|
|
41
|
+
import { resolveAiMode } from '../serve/firebase-module-swap.js';
|
|
41
42
|
/** The shared seam with pyric-admin's ambient init: a synchronous factory
|
|
42
43
|
* returning the lazy branded handle. `Symbol.for` so both packages agree
|
|
43
44
|
* without importing each other's types. */
|
|
44
45
|
const SANDBOX_FACTORY = Symbol.for('pyric.remote.sandboxFactory');
|
|
46
|
+
/** The seam with pyric-admin's App Check mirror: firebase-admin's verifier for tokens from Firebase (#1552). */
|
|
47
|
+
const APP_CHECK_FIREBASE_VERIFIER = Symbol.for('pyric.admin.appCheck.firebaseVerifier');
|
|
45
48
|
/** `module.registerHooks` landed in Node 22.15 / 23.5 — feature-detect
|
|
46
49
|
* (typed locally: the repo's ambient node types predate it). */
|
|
47
50
|
const moduleApi = Module;
|
|
@@ -147,6 +150,7 @@ function activate() {
|
|
|
147
150
|
// this project's host. A launcher that sets the url also pins the identity
|
|
148
151
|
// of the host it started, so that url holds from any working directory.
|
|
149
152
|
globalThis[SANDBOX_FACTORY] = (opts) => remoteSandbox({ configuredUrl: opts?.url, instanceId: process.env.PYRIC_SANDBOX_INSTANCE });
|
|
153
|
+
installAppCheckVerifier();
|
|
150
154
|
process.stderr.write(`@pyric/cli/register: active. firebase-admin/firebase imports now resolve to the ` +
|
|
151
155
|
`pyric sandbox (PYRIC_SANDBOX=${process.env.PYRIC_SANDBOX}).\n`);
|
|
152
156
|
// LAST: the handshake beacon, after the guard, the hooks and the factory
|
|
@@ -160,6 +164,23 @@ function activate() {
|
|
|
160
164
|
sandbox: process.env.PYRIC_SANDBOX ?? '',
|
|
161
165
|
});
|
|
162
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Production AI mode only: the page's App Check tokens come from Firebase, so
|
|
169
|
+
* pyric-admin's mirror hands them to firebase-admin's own verifier (#1552).
|
|
170
|
+
* The bridge, and firebase-admin with it, loads on the first such token, so a
|
|
171
|
+
* server that never verifies one never loads firebase-admin. In sandbox AI
|
|
172
|
+
* mode nothing is installed, and the mirror refuses such a token with a
|
|
173
|
+
* message that says why.
|
|
174
|
+
*/
|
|
175
|
+
function installAppCheckVerifier() {
|
|
176
|
+
const isProductionAiMode = resolveAiMode(undefined, process.env) === 'production';
|
|
177
|
+
if (!isProductionAiMode)
|
|
178
|
+
return;
|
|
179
|
+
globalThis[APP_CHECK_FIREBASE_VERIFIER] = async (token, projectId) => {
|
|
180
|
+
const bridge = await import('./app-bridge-admin-app-check.js');
|
|
181
|
+
return bridge.verifyFirebaseAppCheckToken(token, projectId);
|
|
182
|
+
};
|
|
183
|
+
}
|
|
163
184
|
/**
|
|
164
185
|
* The net-guard mode actually in force, for the beacon to report.
|
|
165
186
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/register/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAkB,MAAM,gBAAgB,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/register/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,8 @@ import type { SandboxEvent } from 'pyric/sandbox';
|
|
|
9
9
|
* agent driving `pyric dev` in process therefore saw NOTHING.
|
|
10
10
|
*
|
|
11
11
|
* - `request_rejected`: a bad role, empty `contents`, a missing thought
|
|
12
|
-
* signature,
|
|
12
|
+
* signature, a request without a valid App Check token, or an engine
|
|
13
|
+
* that answered an error envelope.
|
|
13
14
|
* - `response_blocked`: the SILENT refusal. A safety / recitation /
|
|
14
15
|
* blocklist filter answers HTTP 200 with an empty candidate, so nothing
|
|
15
16
|
* throws anywhere and the app simply renders nothing.
|
|
@@ -65,6 +66,8 @@ interface AiRejectionRelayPayload {
|
|
|
65
66
|
code?: number;
|
|
66
67
|
/** The rejection reason: production's own message for shape errors. */
|
|
67
68
|
message: string;
|
|
69
|
+
/** Pyric's guidance beside production's message, such as the App Check gate's. */
|
|
70
|
+
hint?: string;
|
|
68
71
|
}
|
|
69
72
|
/** Shape POSTed for a `response_blocked` event. Carries the wire's own
|
|
70
73
|
* vocabulary, `finishReason` (a candidate was withheld) or `blockReason`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-diagnostics-relay.d.ts","sourceRoot":"","sources":["../../src/serve/ai-diagnostics-relay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD
|
|
1
|
+
{"version":3,"file":"ai-diagnostics-relay.d.ts","sourceRoot":"","sources":["../../src/serve/ai-diagnostics-relay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH;;;oDAGoD;AACpD,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC;CAC7D;AAED;6DAC6D;AAC7D,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,YAAY,GAAG,sBAAsB,CAAC;AAKtF;;4EAE4E;AAC5E,UAAU,uBAAuB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;kEAC8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;iBAIiB;AACjB,UAAU,qBAAqB;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;qEACqE;AACrE,UAAU,+BAA+B;IACvC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,4DAA4D;IAC5D,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,wBAAwB,GAChC,uBAAuB,GACvB,qBAAqB,GACrB,+BAA+B,CAAC;AAsGpC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,wBAAwB,GAAG,IAAI,CAM3F;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,KAAK,GAAG,IAAI,CAgB5F"}
|
|
@@ -34,6 +34,9 @@ function toRejectionPayload(event) {
|
|
|
34
34
|
payload.status = detailText(detail, 'status');
|
|
35
35
|
if (typeof detail.code === 'number')
|
|
36
36
|
payload.code = detail.code;
|
|
37
|
+
const hint = detailText(detail, 'hint');
|
|
38
|
+
if (hint !== undefined)
|
|
39
|
+
payload.hint = hint;
|
|
37
40
|
return payload;
|
|
38
41
|
}
|
|
39
42
|
/** Narrow a `response_blocked` event to its relay payload. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-diagnostics-relay.js","sourceRoot":"","sources":["../../src/serve/ai-diagnostics-relay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-diagnostics-relay.js","sourceRoot":"","sources":["../../src/serve/ai-diagnostics-relay.ts"],"names":[],"mappings":"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"}
|
package/dist/serve/ai-proxy.d.ts
CHANGED
|
@@ -22,6 +22,9 @@ export interface AiDiagnosticThrottle {
|
|
|
22
22
|
export declare const AI_PROXY_DEFAULT_UPSTREAM = "http://localhost:11434/v1";
|
|
23
23
|
/** The route the dev server mounts for OpenAI-compatible traffic. */
|
|
24
24
|
export declare const AI_PROXY_ROUTE = "/__pyric/ai-proxy";
|
|
25
|
+
/** Largest request body the proxy forwards: the hosted method route's limit,
|
|
26
|
+
* which already carries AI requests with inline images. */
|
|
27
|
+
export declare const AI_PROXY_BODY_LIMIT_BYTES: number;
|
|
25
28
|
/** The upstream-failure shapes the proxy surfaces to the terminal. */
|
|
26
29
|
type AiProxyFailure = {
|
|
27
30
|
kind: 'unreachable';
|
|
@@ -91,6 +94,12 @@ export declare function permitAiUpstreams(ai: {
|
|
|
91
94
|
* Responses remain incremental; cancellation stops reading without a warning.
|
|
92
95
|
*/
|
|
93
96
|
export declare function fetchAiUpstream(input: Parameters<typeof fetch>[0], init: RequestInit | undefined, throttle: AiDiagnosticThrottle, logger?: ServeLogger, source?: string): Promise<Response>;
|
|
97
|
+
/**
|
|
98
|
+
* Read an AI proxy request's body, at most {@link AI_PROXY_BODY_LIMIT_BYTES}.
|
|
99
|
+
* Past the limit it answers 413, and on a broken upload 400, and returns
|
|
100
|
+
* null: the caller sends nothing upstream. Both proxy routes read through it.
|
|
101
|
+
*/
|
|
102
|
+
export declare function readAiProxyBody(req: IncomingMessage, res: ServerResponse): Promise<Uint8Array<ArrayBuffer> | null>;
|
|
94
103
|
/**
|
|
95
104
|
* Handle `POST /__pyric/ai-proxy/<suffix>`: a same-origin passthrough to the
|
|
96
105
|
* configured OpenAI-compatible upstream, so the browser openai engine
|
|
@@ -101,7 +110,11 @@ export declare function fetchAiUpstream(input: Parameters<typeof fetch>[0], init
|
|
|
101
110
|
* - POST only (the OpenAI chat-completions surface is POST); 405 otherwise.
|
|
102
111
|
* - the path suffix + query ride through verbatim
|
|
103
112
|
* (`/__pyric/ai-proxy/chat/completions` becomes `<upstream>/chat/completions`).
|
|
104
|
-
* - the
|
|
113
|
+
* - the caller must pass the namespace's loopback guard (Host, and an
|
|
114
|
+
* Origin naming this server when one is sent), which the namespace runs
|
|
115
|
+
* before this handler: the upstream may carry the developer's key.
|
|
116
|
+
* - the request body is forwarded verbatim, up to
|
|
117
|
+
* {@link AI_PROXY_BODY_LIMIT_BYTES} (413 past it); headers minus the
|
|
105
118
|
* origin-sensitive/hop-by-hop set above (`authorization` DOES forward,
|
|
106
119
|
* since upstreams may require a key).
|
|
107
120
|
* - the response body is STREAMED through chunk-by-chunk. SSE passthrough
|
|
@@ -115,5 +128,12 @@ export declare function fetchAiUpstream(input: Parameters<typeof fetch>[0], init
|
|
|
115
128
|
* means dropped silently (same opt-out contract as the denial relay).
|
|
116
129
|
*/
|
|
117
130
|
export declare function handleAiProxy(configuredUpstream: string | undefined, throttle: AiDiagnosticThrottle, req: IncomingMessage, res: ServerResponse, url: URL, logger?: ServeLogger): Promise<void>;
|
|
131
|
+
/**
|
|
132
|
+
* Send an upstream's answer to the caller: its status and content type, then
|
|
133
|
+
* the body chunk by chunk. SSE passthrough must never buffer. A dropped
|
|
134
|
+
* client cancels the upstream read so an abandoned stream doesn't keep the
|
|
135
|
+
* upstream generating.
|
|
136
|
+
*/
|
|
137
|
+
export declare function relayAiUpstream(upstream: Response, res: ServerResponse): Promise<void>;
|
|
118
138
|
export {};
|
|
119
139
|
//# sourceMappingURL=ai-proxy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-proxy.d.ts","sourceRoot":"","sources":["../../src/serve/ai-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-proxy.d.ts","sourceRoot":"","sources":["../../src/serve/ai-proxy.ts"],"names":[],"mappings":"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"}
|
package/dist/serve/ai-proxy.js
CHANGED
|
@@ -2,10 +2,15 @@ import { redactUrl } from 'pyric/ai/internal';
|
|
|
2
2
|
import { sanitizeForTerminal } from './ai-terminal-text.js';
|
|
3
3
|
import { permitGuardHost } from '../register/net-guard.js';
|
|
4
4
|
import { FIREBASE_AI_LOGIC_HOST } from '../google-endpoints.js';
|
|
5
|
+
import { HOSTED_METHOD_BODY_LIMIT } from './hosted/method-protocol.js';
|
|
6
|
+
import { BODY_TOO_LARGE_CODE, collectRawBody } from '../bridge/server/peer.js';
|
|
5
7
|
/** Default upstream: local Ollama's OpenAI-compatible endpoint. */
|
|
6
8
|
export const AI_PROXY_DEFAULT_UPSTREAM = 'http://localhost:11434/v1';
|
|
7
9
|
/** The route the dev server mounts for OpenAI-compatible traffic. */
|
|
8
10
|
export const AI_PROXY_ROUTE = '/__pyric/ai-proxy';
|
|
11
|
+
/** Largest request body the proxy forwards: the hosted method route's limit,
|
|
12
|
+
* which already carries AI requests with inline images. */
|
|
13
|
+
export const AI_PROXY_BODY_LIMIT_BYTES = HOSTED_METHOD_BODY_LIMIT;
|
|
9
14
|
/**
|
|
10
15
|
* Request headers that must NOT be forwarded upstream: origin-sensitive
|
|
11
16
|
* browser context (`origin`/`referer`/`cookie`, since the upstream is a
|
|
@@ -233,6 +238,22 @@ export async function fetchAiUpstream(input, init, throttle, logger, source = 'a
|
|
|
233
238
|
status: upstream.status, statusText: upstream.statusText, headers: upstream.headers,
|
|
234
239
|
});
|
|
235
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* Read an AI proxy request's body, at most {@link AI_PROXY_BODY_LIMIT_BYTES}.
|
|
243
|
+
* Past the limit it answers 413, and on a broken upload 400, and returns
|
|
244
|
+
* null: the caller sends nothing upstream. Both proxy routes read through it.
|
|
245
|
+
*/
|
|
246
|
+
export async function readAiProxyBody(req, res) {
|
|
247
|
+
try {
|
|
248
|
+
return await collectRawBody(req, AI_PROXY_BODY_LIMIT_BYTES);
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
const tooLarge = error.code === BODY_TOO_LARGE_CODE;
|
|
252
|
+
const status = tooLarge ? 413 : 400;
|
|
253
|
+
res.writeHead(status, { 'content-type': 'text/plain' }).end(tooLarge ? 'Payload Too Large' : 'Bad Request');
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
236
257
|
/**
|
|
237
258
|
* Handle `POST /__pyric/ai-proxy/<suffix>`: a same-origin passthrough to the
|
|
238
259
|
* configured OpenAI-compatible upstream, so the browser openai engine
|
|
@@ -243,7 +264,11 @@ export async function fetchAiUpstream(input, init, throttle, logger, source = 'a
|
|
|
243
264
|
* - POST only (the OpenAI chat-completions surface is POST); 405 otherwise.
|
|
244
265
|
* - the path suffix + query ride through verbatim
|
|
245
266
|
* (`/__pyric/ai-proxy/chat/completions` becomes `<upstream>/chat/completions`).
|
|
246
|
-
* - the
|
|
267
|
+
* - the caller must pass the namespace's loopback guard (Host, and an
|
|
268
|
+
* Origin naming this server when one is sent), which the namespace runs
|
|
269
|
+
* before this handler: the upstream may carry the developer's key.
|
|
270
|
+
* - the request body is forwarded verbatim, up to
|
|
271
|
+
* {@link AI_PROXY_BODY_LIMIT_BYTES} (413 past it); headers minus the
|
|
247
272
|
* origin-sensitive/hop-by-hop set above (`authorization` DOES forward,
|
|
248
273
|
* since upstreams may require a key).
|
|
249
274
|
* - the response body is STREAMED through chunk-by-chunk. SSE passthrough
|
|
@@ -264,17 +289,10 @@ export async function handleAiProxy(configuredUpstream, throttle, req, res, url,
|
|
|
264
289
|
const upstreamBase = resolveAiProxyUpstream(configuredUpstream).target;
|
|
265
290
|
const suffix = url.pathname.slice(AI_PROXY_ROUTE.length);
|
|
266
291
|
const target = `${upstreamBase}${suffix}${url.search}`;
|
|
267
|
-
//
|
|
268
|
-
const
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
req.on('end', () => resolve(Buffer.concat(chunks)));
|
|
272
|
-
req.on('error', reject);
|
|
273
|
-
});
|
|
274
|
-
// Copy into a plain-ArrayBuffer view; fetch's BodyInit typing rejects
|
|
275
|
-
// Buffer's ArrayBufferLike backing.
|
|
276
|
-
const body = new Uint8Array(raw.byteLength);
|
|
277
|
-
body.set(raw);
|
|
292
|
+
// The request body is a bounded JSON payload, read once; the RESPONSE streams.
|
|
293
|
+
const body = await readAiProxyBody(req, res);
|
|
294
|
+
if (body === null)
|
|
295
|
+
return;
|
|
278
296
|
const headers = {};
|
|
279
297
|
for (const [key, value] of Object.entries(req.headers)) {
|
|
280
298
|
if (value === undefined)
|
|
@@ -298,6 +316,15 @@ export async function handleAiProxy(configuredUpstream, throttle, req, res, url,
|
|
|
298
316
|
`(default ${AI_PROXY_DEFAULT_UPSTREAM}).`);
|
|
299
317
|
return;
|
|
300
318
|
}
|
|
319
|
+
await relayAiUpstream(upstream, res);
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Send an upstream's answer to the caller: its status and content type, then
|
|
323
|
+
* the body chunk by chunk. SSE passthrough must never buffer. A dropped
|
|
324
|
+
* client cancels the upstream read so an abandoned stream doesn't keep the
|
|
325
|
+
* upstream generating.
|
|
326
|
+
*/
|
|
327
|
+
export async function relayAiUpstream(upstream, res) {
|
|
301
328
|
const responseHeaders = { 'cache-control': 'no-store' };
|
|
302
329
|
const contentType = upstream.headers.get('content-type');
|
|
303
330
|
if (contentType)
|
|
@@ -308,8 +335,6 @@ export async function handleAiProxy(configuredUpstream, throttle, req, res, url,
|
|
|
308
335
|
return;
|
|
309
336
|
}
|
|
310
337
|
res.flushHeaders?.();
|
|
311
|
-
// Chunk-by-chunk passthrough. A dropped client cancels the upstream read
|
|
312
|
-
// so an abandoned SSE stream doesn't keep the upstream generating.
|
|
313
338
|
const reader = upstream.body.getReader();
|
|
314
339
|
res.on('close', () => {
|
|
315
340
|
void reader.cancel().catch(() => { });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-proxy.js","sourceRoot":"","sources":["../../src/serve/ai-proxy.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-proxy.js","sourceRoot":"","sources":["../../src/serve/ai-proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ export interface AiRejectionPayload {
|
|
|
12
12
|
code?: unknown;
|
|
13
13
|
/** The rejection reason: production's own message for shape errors. */
|
|
14
14
|
message?: unknown;
|
|
15
|
+
/** Pyric's guidance beside production's message, such as the App Check gate's. */
|
|
16
|
+
hint?: unknown;
|
|
15
17
|
}
|
|
16
18
|
/** Loosely-typed mirror of the AI blocked-response payload. Unlike a
|
|
17
19
|
* rejection this carries no `message`: a filter block has no error envelope
|
|
@@ -51,10 +53,10 @@ export type AiDiagnosticPayload = AiRejectionPayload & AiBlockedPayload & AiMode
|
|
|
51
53
|
/**
|
|
52
54
|
* Format a relayed AI broker rejection into the compact terminal block, the
|
|
53
55
|
* same ` [pyric] ...` idiom the denial relay and the ai-proxy warning print.
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
* unit tests.
|
|
56
|
+
* The reason production itself gives, then the model (with the resolved
|
|
57
|
+
* engine, since a rejection reads very differently for `scripted` than for a
|
|
58
|
+
* real upstream), then the wire status, then pyric's guidance when the broker
|
|
59
|
+
* gave one (the App Check gate does). Exported for unit tests.
|
|
58
60
|
*/
|
|
59
61
|
export declare function formatAiRejectionBlock(payload: AiRejectionPayload): string;
|
|
60
62
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-terminal-blocks.d.ts","sourceRoot":"","sources":["../../src/serve/ai-terminal-blocks.ts"],"names":[],"mappings":"AAkBA;8DAC8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-terminal-blocks.d.ts","sourceRoot":"","sources":["../../src/serve/ai-terminal-blocks.ts"],"names":[],"mappings":"AAkBA;8DAC8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kFAAkF;IAClF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;mCAGmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8CAA8C;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yEAAyE;IACzE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wDAAwD;IACxD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;yDAEyD;AACzD,MAAM,WAAW,0BAA0B;IACzC,yEAAyE;IACzE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uCAAuC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,2EAA2E;AAC3E,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,0BAA0B,CAAC;AA4BrG;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAgB1E;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAgBtE;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,CAS1F;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAC7C,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC;IACrD,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC;IACrD;;8DAE0D;IAC1D,UAAU,EAAE,OAAO,CAAC;CACrB;AAwBD;+DAC+D;AAC/D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAIxE"}
|