@opendatalabs/personal-server-ts-server 1.9.0 → 1.10.1
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/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +34 -6
- package/dist/bootstrap.js.map +1 -1
- package/dist/ui/ps-lite-debug.js +684 -76
- package/package.json +3 -3
package/dist/bootstrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,2CAA2C,CAAC;AAEvG,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAMnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAKhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAMlF,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAMrF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAKjC,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AAGpE,OAAO,
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,2CAA2C,CAAC;AAEvG,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAMnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAKhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAMlF,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAMrF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAKjC,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AAGpE,OAAO,EAKL,KAAK,iBAAiB,EAEvB,MAAM,mDAAmD,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,OAAO,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACjD,sBAAsB,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,uBAAuB,CAAC,EAAE,qCAAqC,CAAC;IAChE;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;CAC/C;AA0BD,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,CAAC,CAooBxB"}
|
package/dist/bootstrap.js
CHANGED
|
@@ -27,7 +27,7 @@ import { createTokenStore } from "./token-store.js";
|
|
|
27
27
|
import { TunnelManager, ensureFrpcBinary } from "./tunnel/index.js";
|
|
28
28
|
import { createNodeDataStorage } from "./storage/node-data-storage.js";
|
|
29
29
|
import { createSqliteQuestionStore } from "./storage/question-store.js";
|
|
30
|
-
import { computeQuestion, createOpenAiCompatibleInferenceProvider, createRecomputeScheduler, } from "@opendatalabs/personal-server-ts-core/derivatives";
|
|
30
|
+
import { computeQuestion, createOpenAiCompatibleInferenceProvider, createPhalaE2eeEncryption, createRecomputeScheduler, } from "@opendatalabs/personal-server-ts-core/derivatives";
|
|
31
31
|
const DEFAULT_LOCAL_APPROVAL_PORT = 34127;
|
|
32
32
|
function resolveLocalApprovalPort(serverPort) {
|
|
33
33
|
const raw = process.env.LOCAL_AUTH_PORT;
|
|
@@ -160,10 +160,15 @@ export async function createServer(config, options) {
|
|
|
160
160
|
// Derivative data: the gateway lineage client signs lineage reads with the
|
|
161
161
|
// server key (the gateway treats a registered server as the owner's) and
|
|
162
162
|
// registers derivatives with their lineage. Needs the server account.
|
|
163
|
-
|
|
163
|
+
// The one server-key request signer: lineage reads, and the inference
|
|
164
|
+
// relay calls below, authenticate to the gateway with the same scheme.
|
|
165
|
+
const requestSigner = serverAccount
|
|
166
|
+
? createRequestSigner(serverAccount)
|
|
167
|
+
: undefined;
|
|
168
|
+
const lineageGateway = requestSigner
|
|
164
169
|
? createGatewayLineageClient({
|
|
165
170
|
gatewayUrl: config.gateway.url,
|
|
166
|
-
requestSigner
|
|
171
|
+
requestSigner,
|
|
167
172
|
})
|
|
168
173
|
: undefined;
|
|
169
174
|
// --- Sync engine setup ---
|
|
@@ -183,13 +188,36 @@ export async function createServer(config, options) {
|
|
|
183
188
|
// The scheduler exists before the sync manager so downloads can mark
|
|
184
189
|
// questions stale; it reaches the sync manager lazily to upload results.
|
|
185
190
|
const questionStore = createSqliteQuestionStore(db);
|
|
191
|
+
const inferenceBaseUrl = process.env.INFERENCE_BASE_URL ?? config.inference.baseUrl;
|
|
192
|
+
// E2EE to the Phala gateway is on unless config or INFERENCE_E2EE=false
|
|
193
|
+
// turns it off (local development against a provider without ACI).
|
|
194
|
+
const inferenceE2ee = process.env.INFERENCE_E2EE !== undefined
|
|
195
|
+
? process.env.INFERENCE_E2EE !== "false"
|
|
196
|
+
: config.inference.e2ee;
|
|
197
|
+
// Local development only: production relays hold the provider key. A key
|
|
198
|
+
// means the base URL is a provider, not the relay, so nothing is signed.
|
|
199
|
+
const inferenceApiKey = process.env.INFERENCE_API_KEY;
|
|
200
|
+
// The Vana inference relay only forwards requests signed by the owner or
|
|
201
|
+
// by one of the owner's active registered servers; this is the same
|
|
202
|
+
// server-key signer the lineage reads use.
|
|
203
|
+
const inferenceSigner = inferenceApiKey ? undefined : requestSigner;
|
|
186
204
|
const inferenceProvider = options?.inferenceProvider ??
|
|
187
205
|
createOpenAiCompatibleInferenceProvider({
|
|
188
|
-
baseUrl:
|
|
206
|
+
baseUrl: inferenceBaseUrl,
|
|
189
207
|
model: process.env.INFERENCE_MODEL ?? config.inference.model,
|
|
190
|
-
|
|
191
|
-
|
|
208
|
+
apiKey: inferenceApiKey,
|
|
209
|
+
requestSigner: inferenceSigner,
|
|
210
|
+
encryption: inferenceE2ee
|
|
211
|
+
? createPhalaE2eeEncryption({
|
|
212
|
+
baseUrl: inferenceBaseUrl,
|
|
213
|
+
requestSigner: inferenceSigner,
|
|
214
|
+
logger,
|
|
215
|
+
})
|
|
216
|
+
: undefined,
|
|
192
217
|
});
|
|
218
|
+
if (!inferenceE2ee) {
|
|
219
|
+
logger.warn({ baseUrl: inferenceBaseUrl }, "Inference E2EE is disabled: prompts and answers travel as plaintext over TLS");
|
|
220
|
+
}
|
|
193
221
|
const derivativeScheduler = createRecomputeScheduler({
|
|
194
222
|
store: questionStore,
|
|
195
223
|
debounceMs: config.inference.recomputeDebounceMs,
|
package/dist/bootstrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAG9D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,kBAAkB,GAEnB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EACL,eAAe,EACf,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,+CAA+C,CAAC;AAEvD,OAAO,EACL,0BAA0B,GAE3B,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,GAElB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,wDAAwD,CAAC;AAChE,OAAO,EAAE,kCAAkC,EAAE,MAAM,6BAA6B,CAAC;AAEjF,OAAO,EAAE,SAAS,EAAqB,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAmB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EACL,eAAe,EACf,uCAAuC,EACvC,wBAAwB,GAGzB,MAAM,mDAAmD,CAAC;AAuD3D,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAE1C,SAAS,wBAAwB,CAAC,UAAkB;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACxC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,IACE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YACxB,MAAM,IAAI,CAAC;YACX,MAAM,IAAI,KAAK;YACf,MAAM,KAAK,UAAU,EACrB,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,GAAG,CAAC,CAAC;IACpC,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;QAC1B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,2BAA2B,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAoB,EACpB,OAA6B;IAE7B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAE7B,MAAM,WAAW,GAAG,eAAe,CACjC,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,SAAS,IAAI,iBAAiB,CAC7D,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAC7D,MAAM,wBAAwB,GAAG,IAAI,CACnC,WAAW,EACX,6BAA6B,CAC9B,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAEpD,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,MAAM,EAAE,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,iBAAiB,CAAC;QACtB,WAAW;QACX,OAAO;QACP,UAAU;QACV,cAAc;QACd,UAAU;QACV,EAAE;QACF,MAAM;KACP,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,gBAAgB,GAA4B,EAAE,OAAO,EAAE,CAAC;IAC9D,MAAM,WAAW,GAAG,qBAAqB,CAAC,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAE9E,MAAM,aAAa,GACjB,OAAO,EAAE,aAAa,IAAI,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpE,yEAAyE;IACzE,2EAA2E;IAC3E,wEAAwE;IACxE,wEAAwE;IACxE,8DAA8D;IAC9D,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAChE,CAAC;IAED,6DAA6D;IAC7D,MAAM,kBAAkB,GACtB,OAAO,EAAE,cAAc;QACtB,OAAO,CAAC,GAAG,CAAC,yBAAuD,CAAC;IACvE,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,sBACT,CAAC;IAC5B,MAAM,iBAAiB,GAAG,eAAe;QACvC,CAAC,CAAC,mBAAmB,CACjB,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC;YAC9B,CAAC,CAAC,eAAe;YACjB,CAAC,CAAE,KAAK,eAAe,EAAoB,CAC9C;QACH,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,WAAsC,CAAC;IAE3C,IAAI,aAAwC,CAAC;IAC7C,IAAI,YAAsC,CAAC;IAC3C,IAAI,QAAkC,CAAC;IAEvC,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,oBAAoB,GAAG,MAAM,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;QAC1E,WAAW,GAAG,oBAAoB,CAAC;QACnC,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC,4BAA4B;QACjE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,sCAAsC,CAAC,CAAC;QAC5E,IACE,iBAAiB;YACjB,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE;gBACrC,oBAAoB,CAAC,WAAW,EAAE,EACpC,CAAC;YACD,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;QACJ,CAAC;QAED,0CAA0C;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC9C,aAAa,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CACT,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,EAC5D,+BAA+B,CAChC,CAAC;QAEF,YAAY,GAAG,kBAAkB,CAAC,aAAa,EAAE;YAC/C,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO;YAC/B,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;SACpC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,QAAQ,GAAG;YACT,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,SAAS,EAAE,aAAa,CAAC,SAAS;YAClC,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CACT,gFAAgF,CACjF,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,iEAAiE;IACjE,IAAI,WAAW,GAAuB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAClE,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,KAAK,CAC7B,wFAAwF,EACxF;gBACE,OAAO,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE;gBACxC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,CACF,CAAC;YACF,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,WAAW,GAAG,KAAK,CAAC;oBACpB,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,KAAK,CACV,8DAA8D,CAC/D,CAAC;QACJ,CAAC;IACH,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CACT,gEAAgE,CACjE,CAAC;IACJ,CAAC;IAED,uFAAuF;IACvF,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,cAAc,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE;gBACnD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aAC/B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,kDAAkD,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,yEAAyE;IACzE,sEAAsE;IACtE,MAAM,cAAc,GAAmC,aAAa;QAClE,CAAC,CAAC,0BAA0B,CAAC;YACzB,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG;YAC9B,aAAa,EAAE,mBAAmB,CAAC,aAAa,CAAC;SAClD,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IAEd,4BAA4B;IAC5B,IAAI,WAAW,GAAuB,IAAI,CAAC;IAC3C,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,aAAa,GACjB,OAAO,EAAE,aAAa;QACtB,0BAA0B,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACjE,yEAAyE;IACzE,4DAA4D;IAC5D,MAAM,cAAc,GAAG,0BAA0B,CAAC;QAChD,IAAI,EAAE,aAAa;QACnB,WAAW;QACX,MAAM;KACP,CAAC,CAAC;IAEH,sDAAsD;IACtD,qEAAqE;IACrE,yEAAyE;IACzE,MAAM,aAAa,GAAG,yBAAyB,CAAC,EAAE,CAAC,CAAC;IACpD,MAAM,iBAAiB,GACrB,OAAO,EAAE,iBAAiB;QAC1B,uCAAuC,CAAC;YACtC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO;YACnE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK;YAC5D,mEAAmE;YACnE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;SACtC,CAAC,CAAC;IACL,MAAM,mBAAmB,GAAuB,wBAAwB,CAAC;QACvE,KAAK,EAAE,aAAa;QACpB,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,mBAAmB;QAChD,WAAW;QACX,MAAM;QACN,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE,CACtB,eAAe,CAAC,UAAU,EAAE;YAC1B,iEAAiE;YACjE,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC1B,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE;gBACjD,cAAc,EAAE,KAAK,CAAC,cAAc;aACrC,CAAC;YACJ,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,iBAAiB;YAC3B,WAAW;YACX,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,cAAc;YAC/C,WAAW,EAAE;gBACX,aAAa,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE;aAClD;YACD,cAAc;YACd,gBAAgB,EAAE;gBAChB,mBAAmB,EAAE,aAAa;gBAClC,aAAa,EAAE,aAAa;aAC7B;YACD,MAAM;SACP,CAAC;KACL,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG;QACxB,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,mBAAmB;KAC/B,CAAC;IAEF,IACE,MAAM,CAAC,IAAI,CAAC,OAAO;QACnB,kBAAkB;QAClB,WAAW;QACX,aAAa;QACb,YAAY,EACZ,CAAC;QACD,MAAM,SAAS,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC;QAEtD,MAAM,cAAc,GAAG,4BAA4B,CAAC;YAClD,MAAM;YACN,WAAW;YACX,aAAa;SACd,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,gBAAgB,CAAC,cAAc,EAAE;YAC9C,gBAAgB,EAAE,UAAU;SAC7B,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,WAAW;YACpB,cAAc;YACd,OAAO,EAAE,aAAa;YACtB,MAAM,EAAE,YAAY;YACpB,SAAS;YACT,WAAW;YACX,MAAM;YACN,cAAc;YACd,aAAa;YACb,cAAc;SACf,CAAC;QAEF,MAAM,YAAY,GAAG;YACnB,OAAO,EAAE,WAAW;YACpB,cAAc;YACd,OAAO,EAAE,aAAa;YACtB,MAAM;YACN,SAAS;YACT,WAAW;YACX,MAAM;YACN,aAAa;YACb,cAAc;YACd,kBAAkB,EAAE,CAAC,KAGpB,EAAE,EAAE,CACH,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE;gBACjD,cAAc,EAAE,KAAK,CAAC,cAAc;aACrC,CAAC;SACL,CAAC;QAEF,kEAAkE;QAClE,uEAAuE;QACvE,gEAAgE;QAChE,MAAM,UAAU,GAAG,2BAA2B,CAAC;YAC7C,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG;YAC9B,aAAa;YACb,WAAW;YACX,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE;gBACP,QAAQ,EAAE,0BAA0B,CAAC,MAAM,CAAC;gBAC5C,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO;gBAC/B,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC;aAC7D;SACF,CAAC,CAAC;QACH,MAAM,oBAAoB,GAAG,kCAAkC,CAC7D,wBAAwB,CACzB,CAAC;QAEF,WAAW,GAAG,iBAAiB,CAAC,UAAU,EAAE,YAAY,EAAE;YACxD,UAAU;YACV,oBAAoB;YACpB,KAAK,CAAC,OAAO;gBACX,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,SAAS,CAC9C,aAAa,CAAC,OAAO,CACtB,CAAC;oBACF,QAAS,CAAC,QAAQ,GAAG,UAAU,EAAE,EAAE,IAAI,IAAI,CAAC;oBAC5C,IAAI,UAAU,EAAE,EAAE;wBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;oBACxC,OAAO;wBACL,EAAE,EAAE,KAAK;wBACT,MAAM,EAAE,cAAc;wBACtB,OAAO,EAAE,+CAA+C;qBACzD,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,+CAA+C,CAAC,CAAC;oBACtE,OAAO;wBACL,EAAE,EAAE,KAAK;wBACT,MAAM,EAAE,2BAA2B;wBACnC,OAAO,EAAE,sDAAsD;qBAChE,CAAC;gBACJ,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QACH,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CACT,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAEvD,qDAAqD;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvE,2DAA2D;IAC3D,MAAM,UAAU,GAAe,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,CAAC;IACpD,MAAM,iBAAiB,GAAG,SAAS;QACjC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEjD,0EAA0E;IAC1E,IAAI,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3C,IAAI,4BAAgD,CAAC;IAErD,+DAA+D;IAC/D,IAAI,aAAwC,CAAC;IAE7C,oEAAoE;IACpE,yEAAyE;IACzE,qEAAqE;IACrE,uDAAuD;IACvD,IAAI,sBAAsB,GAAsC,GAAG,EAAE,GAAE,CAAC,CAAC;IACzE,IAAI,qBAAqB,GAAyC,IAAI,CAAC;IACvE,0EAA0E;IAC1E,0EAA0E;IAC1E,wEAAwE;IACxE,yEAAyE;IACzE,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,MAAM,qBAAqB,GAAG,GAAG,EAAE;QACjC,IAAI,qBAAqB,EAAE,CAAC;YAC1B,YAAY,CAAC,qBAAqB,CAAC,CAAC;YACpC,qBAAqB,GAAG,IAAI,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,SAAS,CAAC;QACpB,MAAM;QACN,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS;QACT,YAAY;QACZ,gBAAgB;QAChB,YAAY,EAAE,GAAG,EAAE,CAAC,eAAe;QACnC,mBAAmB,EAAE,GAAG,EAAE,CAAC,4BAA4B;QACvD,WAAW;QACX,QAAQ;QACR,OAAO,EAAE,aAAa;QACtB,aAAa,EAAE,MAAM,CAAC,OAAO;QAC7B,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO;QACtC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG;QAC9B,cAAc;QACd,iBAAiB;QACjB,MAAM;QACN,eAAe;QACf,eAAe;QACf,uBAAuB,EAAE,OAAO,EAAE,uBAAuB;QACzD,WAAW;QACX,cAAc;QACd,SAAS;QACT,QAAQ;QACR,cAAc,EAAE,kBAAkB;QAClC,eAAe;QACf,WAAW;QACX,UAAU;QACV,UAAU;QACV,WAAW;QACX,YAAY;QACZ,eAAe,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,IAAI;QACzD,mBAAmB,EAAE,OAAO,EAAE,mBAAmB;QACjD,kBAAkB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,sBAAsB,CAAC,QAAQ,CAAC;KACnE,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,gBAAgB,GAAG,IAAI,CAAC;QACxB,qBAAqB,EAAE,CAAC;QACxB,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;QACD,YAAY,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAkB;QAC7B,GAAG;QACH,MAAM;QACN,MAAM;QACN,SAAS;QACT,YAAY;QACZ,aAAa;QACb,eAAe;QACf,aAAa;QACb,YAAY;QACZ,WAAW;QACX,aAAa;QACb,SAAS,EAAE,SAAS;QACpB,kBAAkB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACrD,iBAAiB;QACjB,sBAAsB,EAAE,GAAG,EAAE,CAAC,4BAA4B;QAC1D,sBAAsB,EAAE,CAAC,MAAe,EAAE,EAAE;YAC1C,4BAA4B,GAAG,MAAM,CAAC;QACxC,CAAC;QACD,QAAQ;QACR,uBAAuB,EAAE,KAAK,IAAI,EAAE;YAClC,uDAAuD;YACvD,IAAI,aAAa,IAAI,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,SAAS,CAC9C,aAAa,CAAC,OAAO,CACtB,CAAC;oBACF,QAAQ,CAAC,QAAQ,GAAG,UAAU,EAAE,EAAE,IAAI,IAAI,CAAC;gBAC7C,CAAC;gBAAC,MAAM,CAAC;oBACP,8CAA8C;gBAChD,CAAC;gBAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;oBACtB,MAAM,CAAC,IAAI,CACT,4DAA4D,CAC7D,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CACT;wBACE,aAAa,EAAE,aAAa,CAAC,OAAO;wBACpC,SAAS,EAAE,aAAa,CAAC,SAAS;qBACnC,EACD,wFAAwF,CACzF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,+CAA+C;YAC/C,IACE,MAAM,CAAC,MAAM,CAAC,OAAO;gBACrB,WAAW;gBACX,aAAa;gBACb,cAAc,EACd,CAAC;gBACD,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;gBAC/C,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;gBAEtC,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;gBAE3B,IAAI,oBAAoB,GAAG,KAAK,CAAC;gBACjC,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;oBAC/B,MAAM,OAAO,GAAG,aAAa,CAAC;oBAC9B,IAAI,CAAC,OAAO,IAAI,oBAAoB,IAAI,gBAAgB,EAAE,CAAC;wBACzD,OAAO;oBACT,CAAC;oBACD,oBAAoB,GAAG,IAAI,CAAC;oBAC5B,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;wBACpC,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;wBACzC,IAAI,YAAY,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;4BACxC,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;wBACxD,CAAC;6BAAM,CAAC;4BACN,MAAM,CAAC,IAAI,CACT,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,EACjD,oDAAoD,CACrD,CAAC;wBACJ,CAAC;oBACH,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,CAAC,IAAI,CACT,EAAE,GAAG,EAAE,EACP,8DAA8D,CAC/D,CAAC;wBACF,aAAa,GAAG,SAAS,CAAC;wBAC1B,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;wBAClC,gEAAgE;wBAChE,8DAA8D;wBAC9D,mDAAmD;wBACnD,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;wBACvC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;oBAChC,CAAC;gBACH,CAAC,CAAC;gBAEF,+DAA+D;gBAC/D,oEAAoE;gBACpE,0CAA0C;gBAC1C,MAAM,wBAAwB,GAAG,GAAG,EAAE;oBACpC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACjC,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;wBACtB,qBAAqB,GAAG,IAAI,CAAC;wBAC7B,IAAI,gBAAgB,EAAE,CAAC;4BACrB,OAAO;wBACT,CAAC;wBACD,IAAI,CAAC;4BACH,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,SAAS,CAC9C,aAAa,CAAC,OAAO,CACtB,CAAC;4BACF,IAAI,UAAU,EAAE,EAAE,EAAE,CAAC;gCACnB,IAAI,QAAQ,EAAE,CAAC;oCACb,QAAQ,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC;gCACpC,CAAC;gCACD,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;gCAC9D,MAAM,aAAa,EAAE,CAAC;gCACtB,OAAO;4BACT,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC;4BACP,sCAAsC;wBACxC,CAAC;wBACD,IAAI,gBAAgB,EAAE,CAAC;4BACrB,OAAO;wBACT,CAAC;wBACD,MAAM,QAAQ,GACZ,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;wBAC3D,qBAAqB,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;wBAChE,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC;oBAClC,CAAC,CAAC;oBACF,qBAAqB,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;oBAC7D,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC;gBAClC,CAAC,CAAC;gBAEF,sBAAsB,GAAG,CAAC,QAAQ,EAAE,EAAE;oBACpC,IAAI,gBAAgB,EAAE,CAAC;wBACrB,OAAO;oBACT,CAAC;oBACD,IAAI,QAAQ,EAAE,CAAC;wBACb,IAAI,QAAQ,EAAE,CAAC;4BACb,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;wBAC/B,CAAC;wBACD,iEAAiE;wBACjE,0DAA0D;wBAC1D,wCAAwC;wBACxC,qBAAqB,EAAE,CAAC;oBAC1B,CAAC;oBACD,KAAK,aAAa,EAAE,CAAC;gBACvB,CAAC,CAAC;gBAEF,IAAI,CAAC;oBACH,+DAA+D;oBAC/D,+DAA+D;oBAC/D,wDAAwD;oBACxD,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAC/B;wBACE,aAAa,EAAE,aAAa,CAAC,OAAO;wBACpC,YAAY,EAAE,WAAW;wBACzB,aAAa,EAAE,aAAa;wBAC5B,YAAY,EAAE,iBAAiB;4BAC7B,CAAC,CAAC;gCACE,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CACvB,iBAAiB,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;6BAC7C;4BACH,CAAC,CAAC,SAAS;wBACb,KAAK;wBACL,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;wBACpC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;wBACpC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;qBAC9B,EACD,cAAc,CACf,CAAC;oBACF,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC;oBACxB,mEAAmE;oBACnE,6DAA6D;oBAC7D,sCAAsC;oBACtC,eAAe,GAAG,GAAG,CAAC;oBAEtB,IAAI,QAAQ,EAAE,QAAQ,EAAE,CAAC;wBACvB,MAAM,aAAa,EAAE,CAAC;oBACxB,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,IAAI,CACT,EAAE,SAAS,EAAE,GAAG,EAAE,EAClB,8EAA8E,CAC/E,CAAC;wBACF,wBAAwB,EAAE,CAAC;oBAC7B,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CACT,EAAE,GAAG,EAAE,EACP,4DAA4D,CAC7D,CAAC;oBACF,aAAa,GAAG,SAAS,CAAC;oBAC1B,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;gBACpC,CAAC;YACH,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAC7D,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CACT,kFAAkF,CACnF,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO;KACR,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/ps-lite-debug.js
CHANGED
|
@@ -4404,7 +4404,7 @@ function weierstrass(curveDef) {
|
|
|
4404
4404
|
function prepSig(msgHash, privateKey, opts = defaultSigOpts) {
|
|
4405
4405
|
if (["recovered", "canonical"].some((k10) => k10 in opts))
|
|
4406
4406
|
throw new Error("sign() legacy options not supported");
|
|
4407
|
-
const { hash: hash2, randomBytes:
|
|
4407
|
+
const { hash: hash2, randomBytes: randomBytes5 } = CURVE4;
|
|
4408
4408
|
let { lowS, prehash, extraEntropy: ent } = opts;
|
|
4409
4409
|
if (lowS == null)
|
|
4410
4410
|
lowS = true;
|
|
@@ -4416,7 +4416,7 @@ function weierstrass(curveDef) {
|
|
|
4416
4416
|
const d10 = normPrivateKeyToScalar(privateKey);
|
|
4417
4417
|
const seedArgs = [int2octets(d10), int2octets(h1int)];
|
|
4418
4418
|
if (ent != null && ent !== false) {
|
|
4419
|
-
const e10 = ent === true ?
|
|
4419
|
+
const e10 = ent === true ? randomBytes5(Fp2.BYTES) : ent;
|
|
4420
4420
|
seedArgs.push(ensureBytes("extraEntropy", e10));
|
|
4421
4421
|
}
|
|
4422
4422
|
const seed = concatBytes3(...seedArgs);
|
|
@@ -109756,6 +109756,10 @@ var DEFAULTS = {
|
|
|
109756
109756
|
// provider key) or straight at a provider for local development.
|
|
109757
109757
|
baseUrl: "https://inference.phala.com/v1",
|
|
109758
109758
|
model: "z-ai/glm-5.2",
|
|
109759
|
+
// End to end encryption of prompt and answer to the Phala gateway
|
|
109760
|
+
// (E2EE v2): the relay only sees ciphertext. Set false only for local
|
|
109761
|
+
// development against a provider without ACI attestation.
|
|
109762
|
+
e2ee: true,
|
|
109759
109763
|
// Newest-first items kept per source scope when a prompt is assembled.
|
|
109760
109764
|
maxSourceItems: 50,
|
|
109761
109765
|
// Quiet period after a source scope changes before a recompute starts.
|
|
@@ -109817,6 +109821,7 @@ var ServerConfigSchema = external_exports.object({
|
|
|
109817
109821
|
inference: external_exports.object({
|
|
109818
109822
|
baseUrl: external_exports.url().default(DEFAULTS.inference.baseUrl),
|
|
109819
109823
|
model: external_exports.string().min(1).default(DEFAULTS.inference.model),
|
|
109824
|
+
e2ee: external_exports.boolean().default(DEFAULTS.inference.e2ee),
|
|
109820
109825
|
maxSourceItems: external_exports.number().int().min(1).max(1e4).default(DEFAULTS.inference.maxSourceItems),
|
|
109821
109826
|
recomputeDebounceMs: external_exports.number().int().min(0).max(36e5).default(DEFAULTS.inference.recomputeDebounceMs)
|
|
109822
109827
|
}).default(DEFAULTS.inference)
|
|
@@ -113910,10 +113915,19 @@ var DEFAULT_INFERENCE_REQUEST_FIELDS = {
|
|
|
113910
113915
|
};
|
|
113911
113916
|
var InferenceRequestError = class extends Error {
|
|
113912
113917
|
status;
|
|
113913
|
-
|
|
113918
|
+
/** OpenAI-style `error.type` of the rejection, when the body had one. */
|
|
113919
|
+
errorType;
|
|
113920
|
+
/**
|
|
113921
|
+
* Explicit retry hint. When undefined the compute layer falls back to the
|
|
113922
|
+
* status: no response, 429 or 5xx are retried.
|
|
113923
|
+
*/
|
|
113924
|
+
retryable;
|
|
113925
|
+
constructor(message, status2, options = {}) {
|
|
113914
113926
|
super(message);
|
|
113915
113927
|
this.status = status2;
|
|
113916
113928
|
this.name = "InferenceRequestError";
|
|
113929
|
+
this.errorType = options.errorType ?? null;
|
|
113930
|
+
this.retryable = options.retryable;
|
|
113917
113931
|
}
|
|
113918
113932
|
};
|
|
113919
113933
|
function isRecord6(value) {
|
|
@@ -113936,80 +113950,147 @@ function readContent(body) {
|
|
|
113936
113950
|
const first = body.choices[0];
|
|
113937
113951
|
if (!isRecord6(first) || !isRecord6(first.message))
|
|
113938
113952
|
return null;
|
|
113953
|
+
const index = typeof first.index === "number" ? first.index : 0;
|
|
113954
|
+
const field = `choices.${index}.message.content`;
|
|
113955
|
+
const id2 = typeof body.id === "string" ? body.id : "";
|
|
113939
113956
|
const content = first.message.content;
|
|
113940
113957
|
if (typeof content === "string")
|
|
113941
|
-
return content;
|
|
113958
|
+
return { content, field, id: id2 };
|
|
113942
113959
|
if (Array.isArray(content)) {
|
|
113943
113960
|
const text = content.map((part) => isRecord6(part) && typeof part.text === "string" ? part.text : "").join("");
|
|
113944
|
-
return text;
|
|
113961
|
+
return { content: text, field, id: id2 };
|
|
113945
113962
|
}
|
|
113946
113963
|
return null;
|
|
113947
113964
|
}
|
|
113965
|
+
async function readErrorType(response) {
|
|
113966
|
+
try {
|
|
113967
|
+
const body = await response.json();
|
|
113968
|
+
if (isRecord6(body) && isRecord6(body.error)) {
|
|
113969
|
+
return typeof body.error.type === "string" ? body.error.type : null;
|
|
113970
|
+
}
|
|
113971
|
+
} catch {
|
|
113972
|
+
}
|
|
113973
|
+
return null;
|
|
113974
|
+
}
|
|
113975
|
+
async function signOrThrow(signer, params) {
|
|
113976
|
+
try {
|
|
113977
|
+
return await signer.signRequest(params);
|
|
113978
|
+
} catch (err2) {
|
|
113979
|
+
const name = err2 instanceof Error ? err2.name : "Error";
|
|
113980
|
+
throw new InferenceRequestError(`inference request could not be signed (${name})`, null, { errorType: "relay_signing_failed", retryable: false });
|
|
113981
|
+
}
|
|
113982
|
+
}
|
|
113948
113983
|
function createOpenAiCompatibleInferenceProvider(options = {}) {
|
|
113949
113984
|
const base = (options.baseUrl ?? DEFAULT_INFERENCE_BASE_URL).replace(/\/+$/, "");
|
|
113950
113985
|
const defaultModel = options.model ?? DEFAULT_INFERENCE_MODEL;
|
|
113951
113986
|
const timeoutMs = options.timeoutMs ?? DEFAULT_INFERENCE_TIMEOUT_MS;
|
|
113952
113987
|
const doFetch = options.fetch ?? fetch;
|
|
113953
113988
|
const requestFields = options.requestFields ?? DEFAULT_INFERENCE_REQUEST_FIELDS;
|
|
113954
|
-
|
|
113955
|
-
|
|
113956
|
-
|
|
113957
|
-
|
|
113958
|
-
|
|
113959
|
-
|
|
113960
|
-
}
|
|
113961
|
-
|
|
113962
|
-
|
|
113963
|
-
|
|
113964
|
-
|
|
113965
|
-
|
|
113966
|
-
|
|
113967
|
-
|
|
113968
|
-
const body = {
|
|
113969
|
-
...requestFields,
|
|
113970
|
-
model: input.model || defaultModel,
|
|
113989
|
+
const encryption = options.encryption;
|
|
113990
|
+
const requestSigner = options.apiKey ? void 0 : options.requestSigner;
|
|
113991
|
+
const chatUrl = new URL(`${base}/chat/completions`);
|
|
113992
|
+
async function send(input) {
|
|
113993
|
+
const headers = new Headers({ "Content-Type": "application/json" });
|
|
113994
|
+
if (options.apiKey) {
|
|
113995
|
+
headers.set("Authorization", `Bearer ${options.apiKey}`);
|
|
113996
|
+
}
|
|
113997
|
+
const model = input.model || defaultModel;
|
|
113998
|
+
let messages = input.messages;
|
|
113999
|
+
let encrypted = null;
|
|
114000
|
+
if (encryption) {
|
|
114001
|
+
encrypted = await encryption.encryptRequest({
|
|
114002
|
+
model,
|
|
113971
114003
|
messages,
|
|
113972
|
-
|
|
113973
|
-
};
|
|
113974
|
-
|
|
113975
|
-
|
|
113976
|
-
|
|
113977
|
-
|
|
113978
|
-
|
|
113979
|
-
|
|
113980
|
-
|
|
113981
|
-
|
|
113982
|
-
|
|
113983
|
-
|
|
113984
|
-
|
|
113985
|
-
|
|
113986
|
-
|
|
113987
|
-
|
|
113988
|
-
|
|
113989
|
-
|
|
113990
|
-
|
|
113991
|
-
|
|
113992
|
-
|
|
113993
|
-
|
|
113994
|
-
|
|
113995
|
-
|
|
113996
|
-
|
|
113997
|
-
|
|
113998
|
-
}
|
|
113999
|
-
|
|
114000
|
-
|
|
114001
|
-
|
|
114002
|
-
|
|
114003
|
-
|
|
114004
|
-
|
|
114005
|
-
const
|
|
114006
|
-
|
|
114004
|
+
headers
|
|
114005
|
+
});
|
|
114006
|
+
messages = encrypted.messages;
|
|
114007
|
+
}
|
|
114008
|
+
const body = {
|
|
114009
|
+
...requestFields,
|
|
114010
|
+
model,
|
|
114011
|
+
messages,
|
|
114012
|
+
max_tokens: input.maxTokens ?? DEFAULT_INFERENCE_MAX_TOKENS
|
|
114013
|
+
};
|
|
114014
|
+
const payload = JSON.stringify(body);
|
|
114015
|
+
if (requestSigner) {
|
|
114016
|
+
headers.set("Authorization", await signOrThrow(requestSigner, {
|
|
114017
|
+
aud: chatUrl.origin,
|
|
114018
|
+
method: "POST",
|
|
114019
|
+
uri: `${chatUrl.pathname}${chatUrl.search}`,
|
|
114020
|
+
body: new TextEncoder().encode(payload)
|
|
114021
|
+
}));
|
|
114022
|
+
}
|
|
114023
|
+
let response;
|
|
114024
|
+
try {
|
|
114025
|
+
response = await doFetch(chatUrl.toString(), {
|
|
114026
|
+
method: "POST",
|
|
114027
|
+
headers,
|
|
114028
|
+
body: payload,
|
|
114029
|
+
signal: AbortSignal.timeout(timeoutMs)
|
|
114030
|
+
});
|
|
114031
|
+
} catch (err2) {
|
|
114032
|
+
const name = err2 instanceof Error ? err2.name : "Error";
|
|
114033
|
+
throw new InferenceRequestError(`inference request failed before a response (${name})`, null);
|
|
114034
|
+
}
|
|
114035
|
+
if (!response.ok) {
|
|
114036
|
+
const errorType = await readErrorType(response);
|
|
114037
|
+
const retry = await encryption?.onRejected?.({
|
|
114038
|
+
status: response.status,
|
|
114039
|
+
errorType,
|
|
114040
|
+
headers: response.headers
|
|
114041
|
+
}) === true;
|
|
114007
114042
|
return {
|
|
114043
|
+
ok: false,
|
|
114044
|
+
retry,
|
|
114045
|
+
error: new InferenceRequestError(`inference request failed with status ${response.status}${errorType ? ` (${errorType})` : ""}`, response.status, { errorType })
|
|
114046
|
+
};
|
|
114047
|
+
}
|
|
114048
|
+
let parsed;
|
|
114049
|
+
try {
|
|
114050
|
+
parsed = await response.json();
|
|
114051
|
+
} catch {
|
|
114052
|
+
throw new InferenceRequestError("inference response was not JSON", response.status);
|
|
114053
|
+
}
|
|
114054
|
+
const choice = readContent(parsed);
|
|
114055
|
+
if (choice === null) {
|
|
114056
|
+
throw new InferenceRequestError("inference response carried no assistant content", response.status);
|
|
114057
|
+
}
|
|
114058
|
+
let content = choice.content;
|
|
114059
|
+
if (encrypted) {
|
|
114060
|
+
content = await encrypted.decryptResponse({
|
|
114061
|
+
content,
|
|
114062
|
+
field: choice.field,
|
|
114063
|
+
id: choice.id,
|
|
114064
|
+
headers: response.headers
|
|
114065
|
+
});
|
|
114066
|
+
}
|
|
114067
|
+
if (content.trim() === "") {
|
|
114068
|
+
throw new InferenceRequestError("inference response carried no assistant content", response.status);
|
|
114069
|
+
}
|
|
114070
|
+
const receiptId = response.headers.get("x-receipt-id") ?? void 0;
|
|
114071
|
+
const aciIdentity = response.headers.get("x-aci-identity") ?? void 0;
|
|
114072
|
+
return {
|
|
114073
|
+
ok: true,
|
|
114074
|
+
result: {
|
|
114008
114075
|
content,
|
|
114009
114076
|
usage: readUsage(isRecord6(parsed) ? parsed.usage : void 0),
|
|
114010
114077
|
...receiptId ? { receiptId } : {},
|
|
114011
114078
|
...aciIdentity ? { aciIdentity } : {}
|
|
114012
|
-
}
|
|
114079
|
+
}
|
|
114080
|
+
};
|
|
114081
|
+
}
|
|
114082
|
+
return {
|
|
114083
|
+
defaultModel,
|
|
114084
|
+
async chat(input) {
|
|
114085
|
+
const first = await send(input);
|
|
114086
|
+
if (first.ok)
|
|
114087
|
+
return first.result;
|
|
114088
|
+
if (!first.retry)
|
|
114089
|
+
throw first.error;
|
|
114090
|
+
const second = await send(input);
|
|
114091
|
+
if (second.ok)
|
|
114092
|
+
return second.result;
|
|
114093
|
+
throw second.error;
|
|
114013
114094
|
}
|
|
114014
114095
|
};
|
|
114015
114096
|
}
|
|
@@ -114017,7 +114098,11 @@ function createOpenAiCompatibleInferenceProvider(options = {}) {
|
|
|
114017
114098
|
// ../core/dist/derivatives/compute.js
|
|
114018
114099
|
var DEFAULT_RETRY_DELAYS_MS = [1e3, 4e3];
|
|
114019
114100
|
function isRetryableInferenceError(err2) {
|
|
114020
|
-
|
|
114101
|
+
if (!(err2 instanceof InferenceRequestError))
|
|
114102
|
+
return false;
|
|
114103
|
+
if (err2.retryable !== void 0)
|
|
114104
|
+
return err2.retryable;
|
|
114105
|
+
return err2.status === null || err2.status === 429 || err2.status >= 500;
|
|
114021
114106
|
}
|
|
114022
114107
|
async function withRetries(deps, attempt, retryable) {
|
|
114023
114108
|
const delays = deps.retryDelaysMs ?? DEFAULT_RETRY_DELAYS_MS;
|
|
@@ -114616,6 +114701,515 @@ async function handlePersonalServerDerivativesRequest(request2, deps, options =
|
|
|
114616
114701
|
}
|
|
114617
114702
|
}
|
|
114618
114703
|
|
|
114704
|
+
// ../core/dist/derivatives/e2ee/jcs.js
|
|
114705
|
+
function canonicalizeJson(value) {
|
|
114706
|
+
if (value === null)
|
|
114707
|
+
return "null";
|
|
114708
|
+
switch (typeof value) {
|
|
114709
|
+
case "boolean":
|
|
114710
|
+
return value ? "true" : "false";
|
|
114711
|
+
case "number":
|
|
114712
|
+
if (!Number.isFinite(value)) {
|
|
114713
|
+
throw new TypeError("JCS: non-finite number");
|
|
114714
|
+
}
|
|
114715
|
+
return JSON.stringify(value);
|
|
114716
|
+
case "string":
|
|
114717
|
+
return JSON.stringify(value);
|
|
114718
|
+
case "object": {
|
|
114719
|
+
if (Array.isArray(value)) {
|
|
114720
|
+
return `[${value.map((item) => canonicalizeJson(item)).join(",")}]`;
|
|
114721
|
+
}
|
|
114722
|
+
const record2 = value;
|
|
114723
|
+
const keys = Object.keys(record2).sort();
|
|
114724
|
+
const members = [];
|
|
114725
|
+
for (const key of keys) {
|
|
114726
|
+
const member = record2[key];
|
|
114727
|
+
if (member === void 0) {
|
|
114728
|
+
throw new TypeError(`JCS: undefined member "${key}"`);
|
|
114729
|
+
}
|
|
114730
|
+
members.push(`${JSON.stringify(key)}:${canonicalizeJson(member)}`);
|
|
114731
|
+
}
|
|
114732
|
+
return `{${members.join(",")}}`;
|
|
114733
|
+
}
|
|
114734
|
+
default:
|
|
114735
|
+
throw new TypeError(`JCS: unsupported value of type ${typeof value}`);
|
|
114736
|
+
}
|
|
114737
|
+
}
|
|
114738
|
+
var encoder3 = new TextEncoder();
|
|
114739
|
+
function canonicalJsonBytes(value) {
|
|
114740
|
+
return encoder3.encode(canonicalizeJson(value));
|
|
114741
|
+
}
|
|
114742
|
+
|
|
114743
|
+
// ../core/dist/derivatives/e2ee/aad.js
|
|
114744
|
+
var E2EE_REQUEST_AAD_PURPOSE = "aci.e2ee.request.v2";
|
|
114745
|
+
var E2EE_RESPONSE_AAD_PURPOSE = "aci.e2ee.response.v2";
|
|
114746
|
+
function requestFieldAad(context, field) {
|
|
114747
|
+
return canonicalJsonBytes({
|
|
114748
|
+
purpose: E2EE_REQUEST_AAD_PURPOSE,
|
|
114749
|
+
algo: context.algo,
|
|
114750
|
+
model: context.model,
|
|
114751
|
+
field,
|
|
114752
|
+
nonce: context.nonce,
|
|
114753
|
+
ts: context.ts
|
|
114754
|
+
});
|
|
114755
|
+
}
|
|
114756
|
+
function responseFieldAad(context, field, id2) {
|
|
114757
|
+
return canonicalJsonBytes({
|
|
114758
|
+
purpose: E2EE_RESPONSE_AAD_PURPOSE,
|
|
114759
|
+
algo: context.algo,
|
|
114760
|
+
model: context.model,
|
|
114761
|
+
id: id2,
|
|
114762
|
+
field,
|
|
114763
|
+
nonce: context.nonce,
|
|
114764
|
+
ts: context.ts
|
|
114765
|
+
});
|
|
114766
|
+
}
|
|
114767
|
+
|
|
114768
|
+
// ../core/dist/derivatives/e2ee/suite.js
|
|
114769
|
+
var E2EE_ALGO_X25519 = "x25519-aes-256-gcm-hkdf-sha256";
|
|
114770
|
+
var E2EE_HKDF_INFO_X25519 = "aci.e2ee.v2.x25519";
|
|
114771
|
+
var X25519_PUBLIC_KEY_BYTES = 32;
|
|
114772
|
+
var AES_GCM_NONCE_BYTES = 12;
|
|
114773
|
+
var AES_GCM_TAG_BYTES = 16;
|
|
114774
|
+
var E2eeCipherError = class extends Error {
|
|
114775
|
+
constructor(message) {
|
|
114776
|
+
super(message);
|
|
114777
|
+
this.name = "E2eeCipherError";
|
|
114778
|
+
}
|
|
114779
|
+
};
|
|
114780
|
+
function subtle() {
|
|
114781
|
+
const api = globalThis.crypto?.subtle;
|
|
114782
|
+
if (!api)
|
|
114783
|
+
throw new E2eeCipherError("WebCrypto is not available");
|
|
114784
|
+
return api;
|
|
114785
|
+
}
|
|
114786
|
+
function randomBytes4(length) {
|
|
114787
|
+
const bytes2 = new Uint8Array(length);
|
|
114788
|
+
globalThis.crypto.getRandomValues(bytes2);
|
|
114789
|
+
return bytes2;
|
|
114790
|
+
}
|
|
114791
|
+
function bytesToHex6(bytes2) {
|
|
114792
|
+
let out = "";
|
|
114793
|
+
for (const byte of bytes2)
|
|
114794
|
+
out += byte.toString(16).padStart(2, "0");
|
|
114795
|
+
return out;
|
|
114796
|
+
}
|
|
114797
|
+
function hexToBytes4(hex3) {
|
|
114798
|
+
const clean2 = hex3.startsWith("0x") || hex3.startsWith("0X") ? hex3.slice(2) : hex3;
|
|
114799
|
+
if (clean2.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(clean2)) {
|
|
114800
|
+
throw new E2eeCipherError("malformed hex");
|
|
114801
|
+
}
|
|
114802
|
+
const out = new Uint8Array(clean2.length / 2);
|
|
114803
|
+
for (let i10 = 0; i10 < out.length; i10 += 1) {
|
|
114804
|
+
out[i10] = parseInt(clean2.slice(i10 * 2, i10 * 2 + 2), 16);
|
|
114805
|
+
}
|
|
114806
|
+
return out;
|
|
114807
|
+
}
|
|
114808
|
+
function parseX25519PublicKey(hex3) {
|
|
114809
|
+
const bytes2 = hexToBytes4(hex3);
|
|
114810
|
+
if (bytes2.length !== X25519_PUBLIC_KEY_BYTES) {
|
|
114811
|
+
throw new E2eeCipherError("X25519 public key must be 32 bytes");
|
|
114812
|
+
}
|
|
114813
|
+
return bytes2;
|
|
114814
|
+
}
|
|
114815
|
+
function concat2(...parts) {
|
|
114816
|
+
const total = parts.reduce((sum, part) => sum + part.length, 0);
|
|
114817
|
+
const out = new Uint8Array(total);
|
|
114818
|
+
let offset = 0;
|
|
114819
|
+
for (const part of parts) {
|
|
114820
|
+
out.set(part, offset);
|
|
114821
|
+
offset += part.length;
|
|
114822
|
+
}
|
|
114823
|
+
return out;
|
|
114824
|
+
}
|
|
114825
|
+
function toBuffer(bytes2) {
|
|
114826
|
+
const out = new ArrayBuffer(bytes2.byteLength);
|
|
114827
|
+
new Uint8Array(out).set(bytes2);
|
|
114828
|
+
return out;
|
|
114829
|
+
}
|
|
114830
|
+
async function generateX25519KeyPair() {
|
|
114831
|
+
const pair = await subtle().generateKey({ name: "X25519" }, false, [
|
|
114832
|
+
"deriveBits"
|
|
114833
|
+
]);
|
|
114834
|
+
const raw = await subtle().exportKey("raw", pair.publicKey);
|
|
114835
|
+
return { privateKey: pair.privateKey, publicKey: new Uint8Array(raw) };
|
|
114836
|
+
}
|
|
114837
|
+
async function deriveFieldKey(privateKey, peerPublicKey, usage) {
|
|
114838
|
+
const api = subtle();
|
|
114839
|
+
const peer = await api.importKey("raw", toBuffer(peerPublicKey), { name: "X25519" }, false, []);
|
|
114840
|
+
const shared = await api.deriveBits({ name: "X25519", public: peer }, privateKey, X25519_PUBLIC_KEY_BYTES * 8);
|
|
114841
|
+
const ikm = await api.importKey("raw", shared, "HKDF", false, ["deriveKey"]);
|
|
114842
|
+
return api.deriveKey({
|
|
114843
|
+
name: "HKDF",
|
|
114844
|
+
hash: "SHA-256",
|
|
114845
|
+
salt: new Uint8Array(0),
|
|
114846
|
+
info: new TextEncoder().encode(E2EE_HKDF_INFO_X25519)
|
|
114847
|
+
}, ikm, { name: "AES-GCM", length: 256 }, false, [usage]);
|
|
114848
|
+
}
|
|
114849
|
+
async function encryptField(input) {
|
|
114850
|
+
const ephemeral = input.ephemeral ?? await generateX25519KeyPair();
|
|
114851
|
+
const nonce = input.nonce ?? randomBytes4(AES_GCM_NONCE_BYTES);
|
|
114852
|
+
if (nonce.length !== AES_GCM_NONCE_BYTES) {
|
|
114853
|
+
throw new E2eeCipherError("AES-GCM nonce must be 12 bytes");
|
|
114854
|
+
}
|
|
114855
|
+
const key = await deriveFieldKey(ephemeral.privateKey, input.recipientPublicKey, "encrypt");
|
|
114856
|
+
const sealed = await subtle().encrypt({
|
|
114857
|
+
name: "AES-GCM",
|
|
114858
|
+
iv: toBuffer(nonce),
|
|
114859
|
+
additionalData: toBuffer(input.aad),
|
|
114860
|
+
tagLength: AES_GCM_TAG_BYTES * 8
|
|
114861
|
+
}, key, new TextEncoder().encode(input.plaintext));
|
|
114862
|
+
return bytesToHex6(concat2(ephemeral.publicKey, nonce, new Uint8Array(sealed)));
|
|
114863
|
+
}
|
|
114864
|
+
async function decryptField(input) {
|
|
114865
|
+
let bytes2;
|
|
114866
|
+
try {
|
|
114867
|
+
bytes2 = hexToBytes4(input.wire);
|
|
114868
|
+
} catch {
|
|
114869
|
+
throw new E2eeCipherError("ciphertext is not hex");
|
|
114870
|
+
}
|
|
114871
|
+
const minimum = X25519_PUBLIC_KEY_BYTES + AES_GCM_NONCE_BYTES + AES_GCM_TAG_BYTES;
|
|
114872
|
+
if (bytes2.length < minimum) {
|
|
114873
|
+
throw new E2eeCipherError("ciphertext is too short");
|
|
114874
|
+
}
|
|
114875
|
+
const ephemeralPublicKey = bytes2.subarray(0, X25519_PUBLIC_KEY_BYTES);
|
|
114876
|
+
const nonce = bytes2.subarray(X25519_PUBLIC_KEY_BYTES, X25519_PUBLIC_KEY_BYTES + AES_GCM_NONCE_BYTES);
|
|
114877
|
+
const sealed = bytes2.subarray(X25519_PUBLIC_KEY_BYTES + AES_GCM_NONCE_BYTES);
|
|
114878
|
+
let key;
|
|
114879
|
+
try {
|
|
114880
|
+
key = await deriveFieldKey(input.privateKey, ephemeralPublicKey, "decrypt");
|
|
114881
|
+
} catch {
|
|
114882
|
+
throw new E2eeCipherError("key agreement failed");
|
|
114883
|
+
}
|
|
114884
|
+
let opened;
|
|
114885
|
+
try {
|
|
114886
|
+
opened = await subtle().decrypt({
|
|
114887
|
+
name: "AES-GCM",
|
|
114888
|
+
iv: toBuffer(nonce),
|
|
114889
|
+
additionalData: toBuffer(input.aad),
|
|
114890
|
+
tagLength: AES_GCM_TAG_BYTES * 8
|
|
114891
|
+
}, key, toBuffer(sealed));
|
|
114892
|
+
} catch {
|
|
114893
|
+
throw new E2eeCipherError("authentication failed");
|
|
114894
|
+
}
|
|
114895
|
+
return new TextDecoder().decode(opened);
|
|
114896
|
+
}
|
|
114897
|
+
|
|
114898
|
+
// ../core/dist/derivatives/e2ee/attestation.js
|
|
114899
|
+
var ACI_API_VERSION = "aci/1";
|
|
114900
|
+
var ACI_REPORT_DATA_PURPOSE = "aci.report_data.v1";
|
|
114901
|
+
var E2EE_VERSION = "2";
|
|
114902
|
+
var PHALA_GATEWAY_BASE_URL = "https://inference.phala.com/v1";
|
|
114903
|
+
var MAX_KEYSET_LIFETIME_S = 400 * 24 * 3600;
|
|
114904
|
+
var DEFAULT_FETCH_TIMEOUT_MS = 15e3;
|
|
114905
|
+
var E2eeAttestationError = class extends Error {
|
|
114906
|
+
code;
|
|
114907
|
+
constructor(code, message) {
|
|
114908
|
+
super(message);
|
|
114909
|
+
this.code = code;
|
|
114910
|
+
this.name = "E2eeAttestationError";
|
|
114911
|
+
}
|
|
114912
|
+
};
|
|
114913
|
+
function isRecord7(value) {
|
|
114914
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
114915
|
+
}
|
|
114916
|
+
async function sha256Hex2(bytes2) {
|
|
114917
|
+
const buffer = new ArrayBuffer(bytes2.byteLength);
|
|
114918
|
+
new Uint8Array(buffer).set(bytes2);
|
|
114919
|
+
const digest = await globalThis.crypto.subtle.digest("SHA-256", buffer);
|
|
114920
|
+
return bytesToHex6(new Uint8Array(digest));
|
|
114921
|
+
}
|
|
114922
|
+
async function workloadKeysetDigest(keyset) {
|
|
114923
|
+
return `sha256:${await sha256Hex2(canonicalJsonBytes(keyset))}`;
|
|
114924
|
+
}
|
|
114925
|
+
async function reportDataFor(keysetDigest, nonce) {
|
|
114926
|
+
const nonceJson = nonce === null ? "null" : `"${nonce}"`;
|
|
114927
|
+
const statement = `{"keyset_digest":"${keysetDigest}","nonce":${nonceJson},"purpose":"${ACI_REPORT_DATA_PURPOSE}"}`;
|
|
114928
|
+
return sha256Hex2(new TextEncoder().encode(statement));
|
|
114929
|
+
}
|
|
114930
|
+
function parseReport(body) {
|
|
114931
|
+
if (!isRecord7(body) || typeof body.api_version !== "string" || typeof body.workload_keyset_digest !== "string" || !isRecord7(body.attestation) || typeof body.attestation.tee_type !== "string" || typeof body.attestation.report_data !== "string" || !isRecord7(body.attestation.workload_keyset)) {
|
|
114932
|
+
throw new E2eeAttestationError("malformed_report", "attestation report is missing required fields");
|
|
114933
|
+
}
|
|
114934
|
+
const keyset = body.attestation.workload_keyset;
|
|
114935
|
+
if (typeof keyset.not_after !== "number" || !Array.isArray(keyset.e2ee_public_keys)) {
|
|
114936
|
+
throw new E2eeAttestationError("malformed_report", "workload keyset is missing not_after or e2ee_public_keys");
|
|
114937
|
+
}
|
|
114938
|
+
return body;
|
|
114939
|
+
}
|
|
114940
|
+
async function verifyAciReportBinding(report, nonce, nowSeconds) {
|
|
114941
|
+
if (report.api_version !== ACI_API_VERSION) {
|
|
114942
|
+
throw new E2eeAttestationError("malformed_report", `unsupported attestation api_version ${report.api_version}`);
|
|
114943
|
+
}
|
|
114944
|
+
if (report.attestation.tee_type !== "tdx") {
|
|
114945
|
+
throw new E2eeAttestationError("malformed_report", `unsupported tee_type ${report.attestation.tee_type}`);
|
|
114946
|
+
}
|
|
114947
|
+
const versions = report.service_capabilities?.supported_e2ee_versions;
|
|
114948
|
+
if (!Array.isArray(versions) || !versions.includes(E2EE_VERSION)) {
|
|
114949
|
+
throw new E2eeAttestationError("e2ee_unsupported", "service does not advertise E2EE version 2");
|
|
114950
|
+
}
|
|
114951
|
+
const keyset = report.attestation.workload_keyset;
|
|
114952
|
+
const digest = await workloadKeysetDigest(keyset);
|
|
114953
|
+
if (digest !== report.workload_keyset_digest) {
|
|
114954
|
+
throw new E2eeAttestationError("keyset_digest_mismatch", "workload_keyset_digest does not match the embedded keyset");
|
|
114955
|
+
}
|
|
114956
|
+
const expectedReportData = await reportDataFor(digest, nonce);
|
|
114957
|
+
const reportData = report.attestation.report_data.toLowerCase();
|
|
114958
|
+
if (reportData !== expectedReportData) {
|
|
114959
|
+
throw new E2eeAttestationError("report_data_mismatch", "report_data does not bind the keyset digest and our nonce");
|
|
114960
|
+
}
|
|
114961
|
+
const quoteReportData = report.attestation.evidence?.quote_report_data;
|
|
114962
|
+
if (typeof quoteReportData === "string") {
|
|
114963
|
+
const slot = quoteReportData.toLowerCase();
|
|
114964
|
+
if (slot.length !== 128 || !slot.startsWith(reportData) || !/^0+$/.test(slot.slice(64))) {
|
|
114965
|
+
throw new E2eeAttestationError("report_data_mismatch", "quote report-data slot does not carry report_data zero-padded");
|
|
114966
|
+
}
|
|
114967
|
+
}
|
|
114968
|
+
if (!(nowSeconds < keyset.not_after)) {
|
|
114969
|
+
throw new E2eeAttestationError("keyset_expired", "workload keyset has expired");
|
|
114970
|
+
}
|
|
114971
|
+
if (keyset.not_after - nowSeconds > MAX_KEYSET_LIFETIME_S) {
|
|
114972
|
+
throw new E2eeAttestationError("keyset_expired", "workload keyset not_after is implausibly far in the future");
|
|
114973
|
+
}
|
|
114974
|
+
return digest;
|
|
114975
|
+
}
|
|
114976
|
+
function selectX25519Key(keyset, expectedKeyId) {
|
|
114977
|
+
for (const entry of keyset.e2ee_public_keys) {
|
|
114978
|
+
if (!isRecord7(entry) || entry.algo !== E2EE_ALGO_X25519)
|
|
114979
|
+
continue;
|
|
114980
|
+
if (typeof entry.public_key !== "string")
|
|
114981
|
+
continue;
|
|
114982
|
+
if (expectedKeyId !== void 0 && entry.key_id !== expectedKeyId) {
|
|
114983
|
+
continue;
|
|
114984
|
+
}
|
|
114985
|
+
let publicKey;
|
|
114986
|
+
try {
|
|
114987
|
+
publicKey = parseX25519PublicKey(entry.public_key);
|
|
114988
|
+
} catch {
|
|
114989
|
+
throw new E2eeAttestationError("no_e2ee_key", "the X25519 E2EE key in the keyset is malformed");
|
|
114990
|
+
}
|
|
114991
|
+
return { entry, publicKey };
|
|
114992
|
+
}
|
|
114993
|
+
throw new E2eeAttestationError("no_e2ee_key", expectedKeyId ? `keyset has no ${E2EE_ALGO_X25519} key with key_id ${expectedKeyId}` : `keyset has no ${E2EE_ALGO_X25519} key`);
|
|
114994
|
+
}
|
|
114995
|
+
function attestationUrl(baseUrl, nonce) {
|
|
114996
|
+
return `${baseUrl.replace(/\/+$/, "")}/aci/attestation?nonce=${nonce}`;
|
|
114997
|
+
}
|
|
114998
|
+
async function authorizationFor(signer, url2) {
|
|
114999
|
+
try {
|
|
115000
|
+
return await signer.signRequest({
|
|
115001
|
+
aud: url2.origin,
|
|
115002
|
+
method: "GET",
|
|
115003
|
+
// The nonce lives in the query string, so the query is part of the
|
|
115004
|
+
// signed uri: a captured header cannot be replayed for another nonce.
|
|
115005
|
+
uri: `${url2.pathname}${url2.search}`
|
|
115006
|
+
});
|
|
115007
|
+
} catch (err2) {
|
|
115008
|
+
const name = err2 instanceof Error ? err2.name : "Error";
|
|
115009
|
+
throw new E2eeAttestationError("request_signing_failed", `attestation request could not be signed (${name})`);
|
|
115010
|
+
}
|
|
115011
|
+
}
|
|
115012
|
+
async function fetchReport(doFetch, url2, timeoutMs, requestSigner) {
|
|
115013
|
+
const headers = { Accept: "application/json" };
|
|
115014
|
+
if (requestSigner) {
|
|
115015
|
+
headers.Authorization = await authorizationFor(requestSigner, new URL(url2));
|
|
115016
|
+
}
|
|
115017
|
+
let response;
|
|
115018
|
+
try {
|
|
115019
|
+
response = await doFetch(url2, {
|
|
115020
|
+
method: "GET",
|
|
115021
|
+
headers,
|
|
115022
|
+
signal: AbortSignal.timeout(timeoutMs)
|
|
115023
|
+
});
|
|
115024
|
+
} catch (err2) {
|
|
115025
|
+
const name = err2 instanceof Error ? err2.name : "Error";
|
|
115026
|
+
throw new E2eeAttestationError("fetch_failed", `attestation fetch failed before a response (${name})`);
|
|
115027
|
+
}
|
|
115028
|
+
if (!response.ok) {
|
|
115029
|
+
return { status: response.status, body: null };
|
|
115030
|
+
}
|
|
115031
|
+
try {
|
|
115032
|
+
return { status: response.status, body: await response.json() };
|
|
115033
|
+
} catch {
|
|
115034
|
+
throw new E2eeAttestationError("malformed_report", "attestation response was not JSON");
|
|
115035
|
+
}
|
|
115036
|
+
}
|
|
115037
|
+
async function fetchGatewayE2eeKey(options) {
|
|
115038
|
+
const doFetch = options.fetch ?? fetch;
|
|
115039
|
+
const clock = options.clock ?? Date.now;
|
|
115040
|
+
const random = options.random ?? randomBytes4;
|
|
115041
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_FETCH_TIMEOUT_MS;
|
|
115042
|
+
const nonce = bytesToHex6(random(32));
|
|
115043
|
+
const fallback = options.fallbackBaseUrl === void 0 ? PHALA_GATEWAY_BASE_URL : options.fallbackBaseUrl;
|
|
115044
|
+
let source = options.baseUrl;
|
|
115045
|
+
let fetched = await fetchReport(doFetch, attestationUrl(source, nonce), timeoutMs, options.requestSigner);
|
|
115046
|
+
if ((fetched.status === 404 || fetched.status === 405) && fallback !== null && fallback.replace(/\/+$/, "") !== source.replace(/\/+$/, "")) {
|
|
115047
|
+
source = fallback;
|
|
115048
|
+
fetched = await fetchReport(doFetch, attestationUrl(source, nonce), timeoutMs);
|
|
115049
|
+
}
|
|
115050
|
+
if (fetched.body === null) {
|
|
115051
|
+
throw new E2eeAttestationError("fetch_failed", `attestation fetch failed with status ${fetched.status}`);
|
|
115052
|
+
}
|
|
115053
|
+
const report = parseReport(fetched.body);
|
|
115054
|
+
const nowSeconds = Math.floor(clock() / 1e3);
|
|
115055
|
+
const keysetDigest = await verifyAciReportBinding(report, nonce, nowSeconds);
|
|
115056
|
+
const { entry, publicKey } = selectX25519Key(report.attestation.workload_keyset, options.expectedKeyId);
|
|
115057
|
+
if (options.verifyEvidence) {
|
|
115058
|
+
try {
|
|
115059
|
+
await options.verifyEvidence(report);
|
|
115060
|
+
} catch (err2) {
|
|
115061
|
+
const reason = err2 instanceof Error ? err2.message : String(err2);
|
|
115062
|
+
throw new E2eeAttestationError("evidence_rejected", `attestation evidence rejected: ${reason}`);
|
|
115063
|
+
}
|
|
115064
|
+
}
|
|
115065
|
+
return {
|
|
115066
|
+
algo: entry.algo,
|
|
115067
|
+
keyId: entry.key_id,
|
|
115068
|
+
publicKey,
|
|
115069
|
+
publicKeyHex: entry.public_key,
|
|
115070
|
+
keysetDigest,
|
|
115071
|
+
notAfter: report.attestation.workload_keyset.not_after,
|
|
115072
|
+
source,
|
|
115073
|
+
report
|
|
115074
|
+
};
|
|
115075
|
+
}
|
|
115076
|
+
|
|
115077
|
+
// ../core/dist/derivatives/e2ee/phala.js
|
|
115078
|
+
var E2EE_HEADER_VERSION = "X-E2EE-Version";
|
|
115079
|
+
var E2EE_HEADER_CLIENT_PUB_KEY = "X-Client-Pub-Key";
|
|
115080
|
+
var E2EE_HEADER_MODEL_PUB_KEY = "X-Model-Pub-Key";
|
|
115081
|
+
var E2EE_HEADER_NONCE = "X-E2EE-Nonce";
|
|
115082
|
+
var E2EE_HEADER_TIMESTAMP = "X-E2EE-Timestamp";
|
|
115083
|
+
var ACI_HEADER_KEYSET_DIGEST = "X-ACI-Keyset-Digest";
|
|
115084
|
+
var DEFAULT_E2EE_KEY_TTL_MS = 5 * 6e4;
|
|
115085
|
+
function keyFetchError(err2) {
|
|
115086
|
+
if (err2 instanceof E2eeAttestationError) {
|
|
115087
|
+
return new InferenceRequestError(`e2ee key fetch failed (${err2.code}): ${err2.message}`, null, {
|
|
115088
|
+
errorType: `e2ee_attestation_${err2.code}`,
|
|
115089
|
+
retryable: err2.code === "fetch_failed"
|
|
115090
|
+
});
|
|
115091
|
+
}
|
|
115092
|
+
const name = err2 instanceof Error ? err2.name : "Error";
|
|
115093
|
+
return new InferenceRequestError(`e2ee key fetch failed (${name})`, null, {
|
|
115094
|
+
retryable: false
|
|
115095
|
+
});
|
|
115096
|
+
}
|
|
115097
|
+
function createPhalaE2eeEncryption(options) {
|
|
115098
|
+
const clock = options.clock ?? Date.now;
|
|
115099
|
+
const ttlMs = options.keyTtlMs ?? DEFAULT_E2EE_KEY_TTL_MS;
|
|
115100
|
+
let cached2 = null;
|
|
115101
|
+
let inFlight = null;
|
|
115102
|
+
const fetchKey = async () => {
|
|
115103
|
+
const key = await fetchGatewayE2eeKey({
|
|
115104
|
+
baseUrl: options.baseUrl,
|
|
115105
|
+
requestSigner: options.requestSigner,
|
|
115106
|
+
fetch: options.fetch,
|
|
115107
|
+
clock,
|
|
115108
|
+
expectedKeyId: options.expectedKeyId,
|
|
115109
|
+
verifyEvidence: options.verifyEvidence,
|
|
115110
|
+
fallbackBaseUrl: options.fallbackAttestationBaseUrl
|
|
115111
|
+
});
|
|
115112
|
+
options.logger?.info?.({
|
|
115113
|
+
keyId: key.keyId,
|
|
115114
|
+
algo: key.algo,
|
|
115115
|
+
keysetDigest: key.keysetDigest,
|
|
115116
|
+
notAfter: key.notAfter,
|
|
115117
|
+
source: key.source,
|
|
115118
|
+
evidenceVerified: Boolean(options.verifyEvidence)
|
|
115119
|
+
}, "E2EE gateway key verified");
|
|
115120
|
+
return key;
|
|
115121
|
+
};
|
|
115122
|
+
const getKey = async () => {
|
|
115123
|
+
const now = clock();
|
|
115124
|
+
if (cached2 && now - cached2.fetchedAt < ttlMs && Math.floor(now / 1e3) < cached2.key.notAfter) {
|
|
115125
|
+
return cached2.key;
|
|
115126
|
+
}
|
|
115127
|
+
if (!inFlight) {
|
|
115128
|
+
inFlight = fetchKey().then((key) => {
|
|
115129
|
+
cached2 = { key, fetchedAt: clock() };
|
|
115130
|
+
return key;
|
|
115131
|
+
}).finally(() => {
|
|
115132
|
+
inFlight = null;
|
|
115133
|
+
});
|
|
115134
|
+
}
|
|
115135
|
+
try {
|
|
115136
|
+
return await inFlight;
|
|
115137
|
+
} catch (err2) {
|
|
115138
|
+
throw keyFetchError(err2);
|
|
115139
|
+
}
|
|
115140
|
+
};
|
|
115141
|
+
const invalidateKey = () => {
|
|
115142
|
+
cached2 = null;
|
|
115143
|
+
};
|
|
115144
|
+
return {
|
|
115145
|
+
invalidateKey,
|
|
115146
|
+
currentKey: () => cached2?.key ?? null,
|
|
115147
|
+
async encryptRequest({ model, messages, headers }) {
|
|
115148
|
+
if (typeof model !== "string" || model === "") {
|
|
115149
|
+
throw new InferenceRequestError("e2ee requires a non-empty request model", null, { errorType: "e2ee_invalid_payload_model", retryable: false });
|
|
115150
|
+
}
|
|
115151
|
+
const gatewayKey = await getKey();
|
|
115152
|
+
const client = await generateX25519KeyPair();
|
|
115153
|
+
const context = {
|
|
115154
|
+
algo: gatewayKey.algo,
|
|
115155
|
+
model,
|
|
115156
|
+
nonce: bytesToHex6(randomBytes4(32)),
|
|
115157
|
+
ts: Math.floor(clock() / 1e3)
|
|
115158
|
+
};
|
|
115159
|
+
headers.set(E2EE_HEADER_VERSION, "2");
|
|
115160
|
+
headers.set(E2EE_HEADER_CLIENT_PUB_KEY, bytesToHex6(client.publicKey));
|
|
115161
|
+
headers.set(E2EE_HEADER_MODEL_PUB_KEY, gatewayKey.publicKeyHex);
|
|
115162
|
+
headers.set(E2EE_HEADER_NONCE, context.nonce);
|
|
115163
|
+
headers.set(E2EE_HEADER_TIMESTAMP, String(context.ts));
|
|
115164
|
+
const encrypted = [];
|
|
115165
|
+
for (let index = 0; index < messages.length; index += 1) {
|
|
115166
|
+
const message = messages[index];
|
|
115167
|
+
let content;
|
|
115168
|
+
try {
|
|
115169
|
+
content = await encryptField({
|
|
115170
|
+
plaintext: message.content,
|
|
115171
|
+
recipientPublicKey: gatewayKey.publicKey,
|
|
115172
|
+
aad: requestFieldAad(context, `messages.${index}.content`)
|
|
115173
|
+
});
|
|
115174
|
+
} catch (err2) {
|
|
115175
|
+
const name = err2 instanceof Error ? err2.name : "Error";
|
|
115176
|
+
throw new InferenceRequestError(`e2ee request encryption failed (${name})`, null, { retryable: false });
|
|
115177
|
+
}
|
|
115178
|
+
encrypted.push({ ...message, content });
|
|
115179
|
+
}
|
|
115180
|
+
const request2 = {
|
|
115181
|
+
messages: encrypted,
|
|
115182
|
+
async decryptResponse({ content, field, id: id2, headers: response }) {
|
|
115183
|
+
const served = response.get(ACI_HEADER_KEYSET_DIGEST);
|
|
115184
|
+
if (served && served !== gatewayKey.keysetDigest) {
|
|
115185
|
+
options.logger?.warn?.({ pinned: gatewayKey.keysetDigest, served }, "E2EE keyset digest changed; refetching the attestation report");
|
|
115186
|
+
invalidateKey();
|
|
115187
|
+
}
|
|
115188
|
+
try {
|
|
115189
|
+
return await decryptField({
|
|
115190
|
+
wire: content,
|
|
115191
|
+
privateKey: client.privateKey,
|
|
115192
|
+
aad: responseFieldAad(context, field, id2)
|
|
115193
|
+
});
|
|
115194
|
+
} catch (err2) {
|
|
115195
|
+
const detail = err2 instanceof E2eeCipherError ? err2.message : "unexpected error";
|
|
115196
|
+
throw new InferenceRequestError(`e2ee response decryption failed for ${field} (${detail})`, null, { errorType: "e2ee_decryption_failed", retryable: false });
|
|
115197
|
+
}
|
|
115198
|
+
}
|
|
115199
|
+
};
|
|
115200
|
+
return request2;
|
|
115201
|
+
},
|
|
115202
|
+
async onRejected({ errorType }) {
|
|
115203
|
+
if (errorType === "e2ee_model_key_mismatch") {
|
|
115204
|
+
options.logger?.warn?.({ keyId: cached2?.key.keyId ?? null }, "E2EE model key rejected by the gateway; refetching the attestation report");
|
|
115205
|
+
invalidateKey();
|
|
115206
|
+
return true;
|
|
115207
|
+
}
|
|
115208
|
+
return false;
|
|
115209
|
+
}
|
|
115210
|
+
};
|
|
115211
|
+
}
|
|
115212
|
+
|
|
114619
115213
|
// ../core/dist/mcp/store.js
|
|
114620
115214
|
function createInMemoryMcpOAuthAuthorizationStore() {
|
|
114621
115215
|
const byId = /* @__PURE__ */ new Map();
|
|
@@ -127963,7 +128557,7 @@ var WebStandardStreamableHTTPServerTransport = class {
|
|
|
127963
128557
|
* Only sends if eventStore is configured (opt-in for resumability) and
|
|
127964
128558
|
* the client's protocol version supports empty SSE data (>= 2025-11-25).
|
|
127965
128559
|
*/
|
|
127966
|
-
async writePrimingEvent(controller,
|
|
128560
|
+
async writePrimingEvent(controller, encoder4, streamId, protocolVersion) {
|
|
127967
128561
|
if (!this._eventStore) {
|
|
127968
128562
|
return;
|
|
127969
128563
|
}
|
|
@@ -127982,7 +128576,7 @@ data:
|
|
|
127982
128576
|
|
|
127983
128577
|
`;
|
|
127984
128578
|
}
|
|
127985
|
-
controller.enqueue(
|
|
128579
|
+
controller.enqueue(encoder4.encode(primingEvent));
|
|
127986
128580
|
}
|
|
127987
128581
|
/**
|
|
127988
128582
|
* Handles GET requests for SSE stream
|
|
@@ -128011,7 +128605,7 @@ data:
|
|
|
128011
128605
|
this.onerror?.(new Error("Conflict: Only one SSE stream is allowed per session"));
|
|
128012
128606
|
return this.createJsonErrorResponse(409, -32e3, "Conflict: Only one SSE stream is allowed per session");
|
|
128013
128607
|
}
|
|
128014
|
-
const
|
|
128608
|
+
const encoder4 = new TextEncoder();
|
|
128015
128609
|
let streamController;
|
|
128016
128610
|
const readable = new ReadableStream({
|
|
128017
128611
|
start: (controller) => {
|
|
@@ -128031,7 +128625,7 @@ data:
|
|
|
128031
128625
|
}
|
|
128032
128626
|
this._streamMapping.set(this._standaloneSseStreamId, {
|
|
128033
128627
|
controller: streamController,
|
|
128034
|
-
encoder:
|
|
128628
|
+
encoder: encoder4,
|
|
128035
128629
|
cleanup: () => {
|
|
128036
128630
|
this._streamMapping.delete(this._standaloneSseStreamId);
|
|
128037
128631
|
try {
|
|
@@ -128072,7 +128666,7 @@ data:
|
|
|
128072
128666
|
if (this.sessionId !== void 0) {
|
|
128073
128667
|
headers["mcp-session-id"] = this.sessionId;
|
|
128074
128668
|
}
|
|
128075
|
-
const
|
|
128669
|
+
const encoder4 = new TextEncoder();
|
|
128076
128670
|
let streamController;
|
|
128077
128671
|
const readable = new ReadableStream({
|
|
128078
128672
|
start: (controller) => {
|
|
@@ -128083,7 +128677,7 @@ data:
|
|
|
128083
128677
|
});
|
|
128084
128678
|
const replayedStreamId = await this._eventStore.replayEventsAfter(lastEventId, {
|
|
128085
128679
|
send: async (eventId, message) => {
|
|
128086
|
-
const success2 = this.writeSSEEvent(streamController,
|
|
128680
|
+
const success2 = this.writeSSEEvent(streamController, encoder4, message, eventId);
|
|
128087
128681
|
if (!success2) {
|
|
128088
128682
|
this.onerror?.(new Error("Failed replay events"));
|
|
128089
128683
|
try {
|
|
@@ -128095,7 +128689,7 @@ data:
|
|
|
128095
128689
|
});
|
|
128096
128690
|
this._streamMapping.set(replayedStreamId, {
|
|
128097
128691
|
controller: streamController,
|
|
128098
|
-
encoder:
|
|
128692
|
+
encoder: encoder4,
|
|
128099
128693
|
cleanup: () => {
|
|
128100
128694
|
this._streamMapping.delete(replayedStreamId);
|
|
128101
128695
|
try {
|
|
@@ -128113,7 +128707,7 @@ data:
|
|
|
128113
128707
|
/**
|
|
128114
128708
|
* Writes an event to an SSE stream via controller with proper formatting
|
|
128115
128709
|
*/
|
|
128116
|
-
writeSSEEvent(controller,
|
|
128710
|
+
writeSSEEvent(controller, encoder4, message, eventId) {
|
|
128117
128711
|
try {
|
|
128118
128712
|
let eventData = `event: message
|
|
128119
128713
|
`;
|
|
@@ -128124,7 +128718,7 @@ data:
|
|
|
128124
128718
|
eventData += `data: ${JSON.stringify(message)}
|
|
128125
128719
|
|
|
128126
128720
|
`;
|
|
128127
|
-
controller.enqueue(
|
|
128721
|
+
controller.enqueue(encoder4.encode(eventData));
|
|
128128
128722
|
return true;
|
|
128129
128723
|
} catch (error51) {
|
|
128130
128724
|
this.onerror?.(error51);
|
|
@@ -128246,7 +128840,7 @@ data:
|
|
|
128246
128840
|
}
|
|
128247
128841
|
});
|
|
128248
128842
|
}
|
|
128249
|
-
const
|
|
128843
|
+
const encoder4 = new TextEncoder();
|
|
128250
128844
|
let streamController;
|
|
128251
128845
|
const readable = new ReadableStream({
|
|
128252
128846
|
start: (controller) => {
|
|
@@ -128268,7 +128862,7 @@ data:
|
|
|
128268
128862
|
if (isJSONRPCRequest(message)) {
|
|
128269
128863
|
this._streamMapping.set(streamId, {
|
|
128270
128864
|
controller: streamController,
|
|
128271
|
-
encoder:
|
|
128865
|
+
encoder: encoder4,
|
|
128272
128866
|
cleanup: () => {
|
|
128273
128867
|
this._streamMapping.delete(streamId);
|
|
128274
128868
|
try {
|
|
@@ -128280,7 +128874,7 @@ data:
|
|
|
128280
128874
|
this._requestToStreamMapping.set(message.id, streamId);
|
|
128281
128875
|
}
|
|
128282
128876
|
}
|
|
128283
|
-
await this.writePrimingEvent(streamController,
|
|
128877
|
+
await this.writePrimingEvent(streamController, encoder4, streamId, clientProtocolVersion);
|
|
128284
128878
|
for (const message of messages) {
|
|
128285
128879
|
let closeSSEStream;
|
|
128286
128880
|
let closeStandaloneSSEStream;
|
|
@@ -131788,14 +132382,25 @@ function psLiteInferenceConfigured(config2) {
|
|
|
131788
132382
|
return config2.inference.baseUrl.replace(/\/+$/, "") !== DEFAULT_INFERENCE_BASE_URL.replace(/\/+$/, "");
|
|
131789
132383
|
}
|
|
131790
132384
|
function createPsLiteDerivativeCompute(options) {
|
|
131791
|
-
const provider = options.provider ?? createOpenAiCompatibleInferenceProvider({
|
|
131792
|
-
baseUrl: options.config.inference.baseUrl,
|
|
131793
|
-
model: options.config.inference.model
|
|
131794
|
-
});
|
|
131795
132385
|
const logger = options.logger ? {
|
|
131796
132386
|
info: (payload, message) => options.logger?.info(payload, message),
|
|
131797
132387
|
warn: (payload, message) => options.logger?.warn(payload, message)
|
|
131798
132388
|
} : void 0;
|
|
132389
|
+
const provider = options.provider ?? createOpenAiCompatibleInferenceProvider({
|
|
132390
|
+
baseUrl: options.config.inference.baseUrl,
|
|
132391
|
+
model: options.config.inference.model,
|
|
132392
|
+
// PS-Lite holds no provider key: it always talks to the Vana relay,
|
|
132393
|
+
// which forwards only requests signed as the owner's server.
|
|
132394
|
+
requestSigner: options.requestSigner,
|
|
132395
|
+
// E2EE v2 to the Phala gateway (WebCrypto only, so it runs in the
|
|
132396
|
+
// browser): the relay sees ciphertext. `inference.e2ee: false` turns
|
|
132397
|
+
// it off for local development against a provider without ACI.
|
|
132398
|
+
encryption: options.config.inference.e2ee ? createPhalaE2eeEncryption({
|
|
132399
|
+
baseUrl: options.config.inference.baseUrl,
|
|
132400
|
+
requestSigner: options.requestSigner,
|
|
132401
|
+
logger
|
|
132402
|
+
}) : void 0
|
|
132403
|
+
});
|
|
131799
132404
|
const scheduler = createRecomputeScheduler({
|
|
131800
132405
|
store: options.store,
|
|
131801
132406
|
debounceMs: options.config.inference.recomputeDebounceMs,
|
|
@@ -131881,9 +132486,10 @@ async function createIndexedDbPsLiteRuntime(options) {
|
|
|
131881
132486
|
contracts: config2.gateway.contracts
|
|
131882
132487
|
});
|
|
131883
132488
|
const diagnostics = options.diagnostics ?? new DiagnosticsRecorder();
|
|
132489
|
+
const requestSigner = createRequestSigner(identity.account);
|
|
131884
132490
|
const lineageGateway = createGatewayLineageClient({
|
|
131885
132491
|
gatewayUrl: config2.gateway.url,
|
|
131886
|
-
requestSigner
|
|
132492
|
+
requestSigner
|
|
131887
132493
|
});
|
|
131888
132494
|
let syncManager = options.syncManager ?? null;
|
|
131889
132495
|
let scopeDeletions = options.scopeDeletions;
|
|
@@ -131905,6 +132511,8 @@ async function createIndexedDbPsLiteRuntime(options) {
|
|
|
131905
132511
|
isAvailable: () => runtimeRef?.isAvailable() ?? Boolean(options.active)
|
|
131906
132512
|
},
|
|
131907
132513
|
provider: options.inferenceProvider,
|
|
132514
|
+
// The relay forwards only requests signed as the owner's server.
|
|
132515
|
+
requestSigner,
|
|
131908
132516
|
logger: options.logger
|
|
131909
132517
|
});
|
|
131910
132518
|
} else if (derivatives === null && options.derivatives === void 0) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opendatalabs/personal-server-ts-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.10.1",
|
|
4
4
|
"description": "Hono HTTP server for the Vana Personal Server — routes, middleware, composition root",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@hono/node-server": "^1.19.13",
|
|
47
|
-
"@opendatalabs/personal-server-ts-core": "1.
|
|
48
|
-
"@opendatalabs/personal-server-ts-lite": "1.
|
|
47
|
+
"@opendatalabs/personal-server-ts-core": "1.10.1",
|
|
48
|
+
"@opendatalabs/personal-server-ts-lite": "1.10.1",
|
|
49
49
|
"@opendatalabs/vana-sdk": "3.14.0",
|
|
50
50
|
"better-sqlite3": "^12.11.1",
|
|
51
51
|
"hono": "^4.12.27",
|