@opendatalabs/personal-server-ts-lite 0.0.1-canary.01ca694
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/bridge.d.ts +23 -0
- package/dist/bridge.d.ts.map +1 -0
- package/dist/bridge.js +53 -0
- package/dist/bridge.js.map +1 -0
- package/dist/browser-runtime.d.ts +31 -0
- package/dist/browser-runtime.d.ts.map +1 -0
- package/dist/browser-runtime.js +109 -0
- package/dist/browser-runtime.js.map +1 -0
- package/dist/browser-tls-rustls/browser_tls_rustls.d.ts +49 -0
- package/dist/browser-tls-rustls/browser_tls_rustls.js +401 -0
- package/dist/browser-tls-rustls/browser_tls_rustls_bg.wasm +0 -0
- package/dist/client.d.ts +22 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +376 -0
- package/dist/client.js.map +1 -0
- package/dist/diagnostics.d.ts +166 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +265 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-store.d.ts +35 -0
- package/dist/mcp-store.d.ts.map +1 -0
- package/dist/mcp-store.js +177 -0
- package/dist/mcp-store.js.map +1 -0
- package/dist/owner-binding.d.ts +7 -0
- package/dist/owner-binding.d.ts.map +1 -0
- package/dist/owner-binding.js +18 -0
- package/dist/owner-binding.js.map +1 -0
- package/dist/relay-tls.d.ts +19 -0
- package/dist/relay-tls.d.ts.map +1 -0
- package/dist/relay-tls.js +226 -0
- package/dist/relay-tls.js.map +1 -0
- package/dist/relay.d.ts +70 -0
- package/dist/relay.d.ts.map +1 -0
- package/dist/relay.js +368 -0
- package/dist/relay.js.map +1 -0
- package/dist/runtime.d.ts +95 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +991 -0
- package/dist/runtime.js.map +1 -0
- package/dist/state.d.ts +62 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +296 -0
- package/dist/state.js.map +1 -0
- package/dist/storage-utils.d.ts +8 -0
- package/dist/storage-utils.d.ts.map +1 -0
- package/dist/storage-utils.js +67 -0
- package/dist/storage-utils.js.map +1 -0
- package/dist/storage.d.ts +57 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +575 -0
- package/dist/storage.js.map +1 -0
- package/dist/sync.d.ts +28 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +158 -0
- package/dist/sync.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PS Lite one-shot diagnostics — v1
|
|
3
|
+
*
|
|
4
|
+
* Produces a bounded, plain-JSON diagnostic snapshot that the web MCP approval
|
|
5
|
+
* page can copy verbatim when it is stuck waiting for scopes. No payload bodies
|
|
6
|
+
* or secrets are ever included.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const recorder = new DiagnosticsRecorder();
|
|
10
|
+
* recorder.push({ phase: "indexing", detail: "scope=drive" });
|
|
11
|
+
* // … pass recorder into createPsLiteRuntime({ diagnostics: recorder, … })
|
|
12
|
+
* // GET /v1/diagnostics returns recorder.snapshot(syncStatus, storage)
|
|
13
|
+
*/
|
|
14
|
+
export const DIAGNOSTICS_VERSION = 1;
|
|
15
|
+
const MAX_EVENTS = 100;
|
|
16
|
+
const DIAG_TIMEOUT_MS = 3_000;
|
|
17
|
+
/**
|
|
18
|
+
* Lightweight thread-safe (single-threaded JS) recorder.
|
|
19
|
+
*
|
|
20
|
+
* Instantiate once per PS Lite runtime; pass it into createPsLiteRuntime and
|
|
21
|
+
* call recorder.push() from sync, storage, and indexing code paths.
|
|
22
|
+
*/
|
|
23
|
+
export class DiagnosticsRecorder {
|
|
24
|
+
events = [];
|
|
25
|
+
currentPhase = "booting";
|
|
26
|
+
activeOp = null;
|
|
27
|
+
lastNetwork = null;
|
|
28
|
+
scopeMap = new Map();
|
|
29
|
+
repairCounts = {};
|
|
30
|
+
push(options) {
|
|
31
|
+
const event = {
|
|
32
|
+
at: new Date().toISOString(),
|
|
33
|
+
phase: options.phase,
|
|
34
|
+
...(options.detail !== undefined ? { detail: options.detail } : {}),
|
|
35
|
+
...(options.scope !== undefined ? { scope: options.scope } : {}),
|
|
36
|
+
...(options.fileId !== undefined ? { fileId: options.fileId } : {}),
|
|
37
|
+
...(options.error ? { error: true } : {}),
|
|
38
|
+
};
|
|
39
|
+
this.events.push(event);
|
|
40
|
+
if (this.events.length > MAX_EVENTS) {
|
|
41
|
+
this.events.splice(0, this.events.length - MAX_EVENTS);
|
|
42
|
+
}
|
|
43
|
+
this.currentPhase = options.phase;
|
|
44
|
+
if (options.scope) {
|
|
45
|
+
const existing = this.scopeMap.get(options.scope) ?? {
|
|
46
|
+
scope: options.scope,
|
|
47
|
+
status: "unknown",
|
|
48
|
+
};
|
|
49
|
+
const next = {
|
|
50
|
+
...existing,
|
|
51
|
+
scope: options.scope,
|
|
52
|
+
lastActivityAt: event.at,
|
|
53
|
+
...(options.fileId ? { lastFileId: options.fileId } : {}),
|
|
54
|
+
...(options.error && options.detail
|
|
55
|
+
? { lastError: options.detail }
|
|
56
|
+
: {}),
|
|
57
|
+
status: nextScopeStatus(existing.status, options.phase, options.error),
|
|
58
|
+
};
|
|
59
|
+
this.scopeMap.set(options.scope, next);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** Call when an async operation starts (e.g. a download or index run). */
|
|
63
|
+
beginOperation(phase, scope, fileId) {
|
|
64
|
+
this.activeOp = { phase, startedAt: Date.now(), scope, fileId };
|
|
65
|
+
this.currentPhase = phase;
|
|
66
|
+
}
|
|
67
|
+
/** Call when the async operation completes or fails. */
|
|
68
|
+
endOperation() {
|
|
69
|
+
this.activeOp = null;
|
|
70
|
+
}
|
|
71
|
+
/** Record a network or storage operation result without payload. */
|
|
72
|
+
recordNetworkOp(operationClass, status, elapsedMs, statusOrError) {
|
|
73
|
+
this.lastNetwork = {
|
|
74
|
+
operationClass,
|
|
75
|
+
status,
|
|
76
|
+
elapsedMs,
|
|
77
|
+
...(statusOrError !== undefined ? { statusOrError } : {}),
|
|
78
|
+
at: new Date().toISOString(),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/** Increment the repair loop counter for a scope. */
|
|
82
|
+
recordRepair(scope) {
|
|
83
|
+
this.repairCounts[scope] = (this.repairCounts[scope] ?? 0) + 1;
|
|
84
|
+
const existing = this.scopeMap.get(scope) ?? {
|
|
85
|
+
scope,
|
|
86
|
+
status: "unknown",
|
|
87
|
+
};
|
|
88
|
+
this.scopeMap.set(scope, {
|
|
89
|
+
...existing,
|
|
90
|
+
repairCount: this.repairCounts[scope],
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/** Update per-scope readiness explicitly. */
|
|
94
|
+
setScopeStatus(scope, status, extra) {
|
|
95
|
+
const existing = this.scopeMap.get(scope) ?? { scope, status };
|
|
96
|
+
this.scopeMap.set(scope, { ...existing, ...extra, scope, status });
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Mark a scope as ready after a successful index pass, unless an earlier
|
|
100
|
+
* phase found that the bounded read sidecar is missing or corrupt.
|
|
101
|
+
*/
|
|
102
|
+
setScopeReadyAfterIndex(scope) {
|
|
103
|
+
const existing = this.scopeMap.get(scope);
|
|
104
|
+
if (existing && isBlockingScopeStatus(existing.status)) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
this.setScopeStatus(scope, "ready");
|
|
108
|
+
}
|
|
109
|
+
/** Mark a successful block-manifest write and clear any stale manifest error. */
|
|
110
|
+
setScopeManifestBuilt(scope) {
|
|
111
|
+
const existing = this.scopeMap.get(scope) ?? {
|
|
112
|
+
scope,
|
|
113
|
+
status: "indexing",
|
|
114
|
+
};
|
|
115
|
+
const { lastError: _lastError, ...withoutError } = existing;
|
|
116
|
+
this.scopeMap.set(scope, {
|
|
117
|
+
...withoutError,
|
|
118
|
+
scope,
|
|
119
|
+
status: "indexing",
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Assemble a snapshot. Optionally accepts sync status and storage port to
|
|
124
|
+
* enrich the result. Runs with a hard timeout so it can never block.
|
|
125
|
+
*/
|
|
126
|
+
snapshot(options) {
|
|
127
|
+
const now = new Date().toISOString();
|
|
128
|
+
const activeOperation = this.activeOp
|
|
129
|
+
? {
|
|
130
|
+
phase: this.activeOp.phase,
|
|
131
|
+
startedAt: new Date(this.activeOp.startedAt).toISOString(),
|
|
132
|
+
elapsedMs: Date.now() - this.activeOp.startedAt,
|
|
133
|
+
...(this.activeOp.scope ? { scope: this.activeOp.scope } : {}),
|
|
134
|
+
...(this.activeOp.fileId ? { fileId: this.activeOp.fileId } : {}),
|
|
135
|
+
}
|
|
136
|
+
: null;
|
|
137
|
+
const sync = buildSyncDiagnostics(options?.syncStatus);
|
|
138
|
+
const storage = buildStorageDiagnostics(options?.storage);
|
|
139
|
+
const scopes = Array.from(this.scopeMap.values());
|
|
140
|
+
return {
|
|
141
|
+
diagnosticVersion: DIAGNOSTICS_VERSION,
|
|
142
|
+
capturedAt: now,
|
|
143
|
+
runtimeActive: options?.runtimeActive ?? "unknown",
|
|
144
|
+
currentPhase: this.currentPhase,
|
|
145
|
+
activeOperation,
|
|
146
|
+
recentEvents: [...this.events],
|
|
147
|
+
scopes,
|
|
148
|
+
sync,
|
|
149
|
+
storage,
|
|
150
|
+
lastNetworkOperation: this.lastNetwork,
|
|
151
|
+
repairCounts: { ...this.repairCounts },
|
|
152
|
+
partial: false,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function phaseToScopeStatus(phase, error) {
|
|
157
|
+
if (error) {
|
|
158
|
+
if (phase === "downloading")
|
|
159
|
+
return "downloadFailed";
|
|
160
|
+
if (phase === "decrypting")
|
|
161
|
+
return "decryptFailed";
|
|
162
|
+
if (phase === "indexing")
|
|
163
|
+
return "indexFailed";
|
|
164
|
+
if (phase === "buildingManifest" || phase === "repairingManifest")
|
|
165
|
+
return "manifestMissing";
|
|
166
|
+
return "unknown";
|
|
167
|
+
}
|
|
168
|
+
switch (phase) {
|
|
169
|
+
case "ready":
|
|
170
|
+
return "ready";
|
|
171
|
+
case "indexing":
|
|
172
|
+
return "indexing";
|
|
173
|
+
case "downloading":
|
|
174
|
+
return "waitingForPayload";
|
|
175
|
+
case "buildingManifest":
|
|
176
|
+
case "repairingManifest":
|
|
177
|
+
return "indexing";
|
|
178
|
+
default:
|
|
179
|
+
return "unknown";
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function nextScopeStatus(existingStatus, phase, error) {
|
|
183
|
+
if (!error && isBlockingScopeStatus(existingStatus)) {
|
|
184
|
+
return existingStatus;
|
|
185
|
+
}
|
|
186
|
+
return phaseToScopeStatus(phase, error);
|
|
187
|
+
}
|
|
188
|
+
function isBlockingScopeStatus(status) {
|
|
189
|
+
return (status === "manifestMissing" ||
|
|
190
|
+
status === "downloadFailed" ||
|
|
191
|
+
status === "decryptFailed" ||
|
|
192
|
+
status === "indexFailed");
|
|
193
|
+
}
|
|
194
|
+
function buildSyncDiagnostics(status) {
|
|
195
|
+
if (!status)
|
|
196
|
+
return null;
|
|
197
|
+
return {
|
|
198
|
+
enabled: status.enabled,
|
|
199
|
+
running: status.running,
|
|
200
|
+
syncing: status.syncing,
|
|
201
|
+
blocked: status.blocked ?? null,
|
|
202
|
+
lastSync: status.lastSync,
|
|
203
|
+
lastProcessedTimestamp: status.lastProcessedTimestamp,
|
|
204
|
+
pendingFiles: status.pendingFiles,
|
|
205
|
+
recentErrors: status.errors.map((e) => ({
|
|
206
|
+
fileId: e.fileId,
|
|
207
|
+
scope: e.scope,
|
|
208
|
+
message: e.message,
|
|
209
|
+
timestamp: e.timestamp,
|
|
210
|
+
})),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function buildStorageDiagnostics(storage) {
|
|
214
|
+
if (!storage)
|
|
215
|
+
return null;
|
|
216
|
+
try {
|
|
217
|
+
const scopeResult = storage.listScopes({ limit: 1000 });
|
|
218
|
+
const unsynced = storage.findUnsynced({ limit: 1000 });
|
|
219
|
+
return {
|
|
220
|
+
indexedDbAvailable: typeof indexedDB !== "undefined",
|
|
221
|
+
persistenceBackend: storage.kind,
|
|
222
|
+
scopeCount: scopeResult.total,
|
|
223
|
+
unsyncedCount: unsynced.length,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
return {
|
|
228
|
+
indexedDbAvailable: typeof indexedDB !== "undefined",
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Collect a diagnostic snapshot with a hard timeout so it can never block the
|
|
234
|
+
* approval page. Returns a partial snapshot if the timeout fires.
|
|
235
|
+
*/
|
|
236
|
+
export async function collectDiagnosticsWithTimeout(recorder, options, timeoutMs = DIAG_TIMEOUT_MS) {
|
|
237
|
+
return new Promise((resolve) => {
|
|
238
|
+
const tid = setTimeout(() => {
|
|
239
|
+
resolve({ ...recorder.snapshot(options), partial: true });
|
|
240
|
+
}, timeoutMs);
|
|
241
|
+
try {
|
|
242
|
+
const snap = recorder.snapshot(options);
|
|
243
|
+
clearTimeout(tid);
|
|
244
|
+
resolve(snap);
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
clearTimeout(tid);
|
|
248
|
+
resolve({
|
|
249
|
+
diagnosticVersion: DIAGNOSTICS_VERSION,
|
|
250
|
+
capturedAt: new Date().toISOString(),
|
|
251
|
+
runtimeActive: options?.runtimeActive ?? "unknown",
|
|
252
|
+
currentPhase: "unknown",
|
|
253
|
+
activeOperation: null,
|
|
254
|
+
recentEvents: [],
|
|
255
|
+
scopes: [],
|
|
256
|
+
sync: null,
|
|
257
|
+
storage: null,
|
|
258
|
+
lastNetworkOperation: null,
|
|
259
|
+
repairCounts: {},
|
|
260
|
+
partial: true,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { createIndexedDbPsLiteRuntime, type IndexedDbPsLiteRuntime, type IndexedDbPsLiteRuntimeOptions, } from "./browser-runtime.js";
|
|
2
|
+
export { startPersonalServer, type StartPersonalServerLiteOptions, type StartPersonalServerLiteRelayOptions, } from "./client.js";
|
|
3
|
+
export type { PersonalServerHandle, PersonalServerClientErrorBody, PersonalServerDataVersion, PersonalServerHealthRegistration, PersonalServerIdentity, PersonalServerInfo, PersonalServerAuthRequestOptions, PersonalServerListDataOptions, PersonalServerListDataResult, PersonalServerListVersionsOptions, PersonalServerListVersionsResult, PersonalServerReadDataOptions, PersonalServerRegistrationRequest, PersonalServerStatus, PersonalServerSyncTriggerResult, PersonalServerUrls, } from "@opendatalabs/personal-server-ts-core/client";
|
|
4
|
+
export { PersonalServerClientError, dataListPath, dataReadPath, dataVersionsPath, parsePersonalServerJsonResponse, } from "@opendatalabs/personal-server-ts-core/client";
|
|
5
|
+
export { handlePsLiteBridgeRequest, type PsLiteBridgeRequest, type PsLiteBridgeResponse, } from "./bridge.js";
|
|
6
|
+
export { createIndexedDbPsLitePersistence, createOpfsPsLiteDataFileStore, createPersistentPsLiteStorage, isOpfsAvailable, type IndexedDbPsLitePersistenceOptions, type PsLiteDataFileStore, type PsLiteFileStorageKind, type PsLitePersistedStorageState, type PsLitePersistenceAdapter, } from "./storage.js";
|
|
7
|
+
export { createIndexedDbPsLiteAccessLogStore, createIndexedDbPsLiteStateStore, createIndexedDbPsLiteTokenStore, loadOrCreatePsLiteConfig, loadOrCreatePsLiteServerIdentity, loadPsLiteRelayState, savePsLiteConfig, savePsLiteRelayState, type IndexedDbPsLiteAccessLogStoreOptions, type IndexedDbPsLiteStateStoreOptions, type IndexedDbPsLiteTokenStoreOptions, type PsLiteEncryptedPrivateKey, type PsLiteEncryptedServerIdentity, type PsLiteRelayState, type PsLiteStateKey, type PsLiteStateStore, type PsLiteUnlockedServerIdentity, } from "./state.js";
|
|
8
|
+
export { createPsLiteSyncCursor, createPsLiteSyncManager, type PsLiteSyncOptions, } from "./sync.js";
|
|
9
|
+
export { resolvePsLiteOwner, type PsLiteOwnerBindingInput, } from "./owner-binding.js";
|
|
10
|
+
export { createBearerTokenPsLiteAuth, createPsLiteRuntime, createWeb3SignedPsLiteAuth, type BearerTokenPsLiteAuthOptions, type PsLiteAuthAdapter, type PsLiteReadAuthInput, type PsLiteRuntime, type PsLiteRuntimeOptions, type PsLiteStorageAdapter, type PsLiteTokenStore, type Web3SignedPsLiteAuthOptions, } from "./runtime.js";
|
|
11
|
+
export { createIndexedDbMcpConnectionStore, createIndexedDbMcpOAuthAuthorizationStore, type IndexedDbMcpConnectionStoreOptions, type IndexedDbMcpOAuthAuthorizationStoreOptions, } from "./mcp-store.js";
|
|
12
|
+
export { DiagnosticsRecorder, collectDiagnosticsWithTimeout, DIAGNOSTICS_VERSION, type ActiveOperation, type DiagnosticsEvent, type DiagnosticsPhase, type LastNetworkOperation, type PsLiteDiagnosticsSnapshot, type RecordEventOptions, type ScopeDiagnostics, type ScopeReadinessStatus, type StorageHealthSummary, type SyncDiagnostics, } from "./diagnostics.js";
|
|
13
|
+
export { decodeDataFrame, encodeDataFrame, psLiteRelayControlUrl, psLiteRelayPublicUrl, startPsLiteRelayClient, type PsLiteRelayClient, type PsLiteRelayClientOptions, type PsLiteRelayStatus, type PsLiteRelayTlsFactory, type PsLiteRelayTlsPrepareInput, type PsLiteRelayTlsStep, type PsLiteRelayTlsStream, type PsLiteRelayTlsStreamInput, type PsLiteRelayWebSocket, type PsLiteRelayWebSocketFactory, } from "./relay.js";
|
|
14
|
+
export { createRustlsPsLiteRelayTlsFactory, psLiteRelayPublicHost, psLiteRelayPublicUrl as psLiteRelayTlsPublicUrl, type PsLiteRelayTlsIdentity, type RustlsPsLiteRelayTlsOptions, } from "./relay-tls.js";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { createIndexedDbPsLiteRuntime, } from "./browser-runtime.js";
|
|
2
|
+
export { startPersonalServer, } from "./client.js";
|
|
3
|
+
export { PersonalServerClientError, dataListPath, dataReadPath, dataVersionsPath, parsePersonalServerJsonResponse, } from "@opendatalabs/personal-server-ts-core/client";
|
|
4
|
+
export { handlePsLiteBridgeRequest, } from "./bridge.js";
|
|
5
|
+
export { createIndexedDbPsLitePersistence, createOpfsPsLiteDataFileStore, createPersistentPsLiteStorage, isOpfsAvailable, } from "./storage.js";
|
|
6
|
+
export { createIndexedDbPsLiteAccessLogStore, createIndexedDbPsLiteStateStore, createIndexedDbPsLiteTokenStore, loadOrCreatePsLiteConfig, loadOrCreatePsLiteServerIdentity, loadPsLiteRelayState, savePsLiteConfig, savePsLiteRelayState, } from "./state.js";
|
|
7
|
+
export { createPsLiteSyncCursor, createPsLiteSyncManager, } from "./sync.js";
|
|
8
|
+
export { resolvePsLiteOwner, } from "./owner-binding.js";
|
|
9
|
+
export { createBearerTokenPsLiteAuth, createPsLiteRuntime, createWeb3SignedPsLiteAuth, } from "./runtime.js";
|
|
10
|
+
export { createIndexedDbMcpConnectionStore, createIndexedDbMcpOAuthAuthorizationStore, } from "./mcp-store.js";
|
|
11
|
+
export { DiagnosticsRecorder, collectDiagnosticsWithTimeout, DIAGNOSTICS_VERSION, } from "./diagnostics.js";
|
|
12
|
+
export { decodeDataFrame, encodeDataFrame, psLiteRelayControlUrl, psLiteRelayPublicUrl, startPsLiteRelayClient, } from "./relay.js";
|
|
13
|
+
export { createRustlsPsLiteRelayTlsFactory, psLiteRelayPublicHost, psLiteRelayPublicUrl as psLiteRelayTlsPublicUrl, } from "./relay-tls.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,GAG7B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,GAGpB,MAAM,aAAa,CAAC;AAmBrB,OAAO,EACL,yBAAyB,EACzB,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,+BAA+B,GAChC,MAAM,8CAA8C,CAAC;AAEtD,OAAO,EACL,yBAAyB,GAG1B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gCAAgC,EAChC,6BAA6B,EAC7B,6BAA6B,EAC7B,eAAe,GAMhB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,mCAAmC,EACnC,+BAA+B,EAC/B,+BAA+B,EAC/B,wBAAwB,EACxB,gCAAgC,EAChC,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,GAUrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,uBAAuB,GAExB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,kBAAkB,GAEnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,0BAA0B,GAS3B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iCAAiC,EACjC,yCAAyC,GAG1C,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,mBAAmB,GAWpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,GAWvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iCAAiC,EACjC,qBAAqB,EACrB,oBAAoB,IAAI,uBAAuB,GAGhD,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IndexedDB-backed `McpConnectionStore` for Web PS Lite.
|
|
3
|
+
*
|
|
4
|
+
* Phase 1 trade-off: persists the per-connection grantee private key in
|
|
5
|
+
* PLAINTEXT in IndexedDB. The owner-derived AES-GCM wrap used for the PS Lite
|
|
6
|
+
* server identity is not yet applied to grantee keys — that's the Phase 2
|
|
7
|
+
* "encrypt grantee private keys at rest" task in
|
|
8
|
+
* `260604-PLAN-vana-mcp-personal-server.md`. The risk is bounded by:
|
|
9
|
+
*
|
|
10
|
+
* 1. The browser same-origin policy — only code running on the PS Lite tab's
|
|
11
|
+
* origin (e.g. app-dev.vana.org) can read this store.
|
|
12
|
+
* 2. Grantee keys are scoped per-connection and revocable. A leaked key only
|
|
13
|
+
* lets the holder read the grants that connection already approved; any
|
|
14
|
+
* revoke removes both the grant and the connection's lookup record.
|
|
15
|
+
* 3. There are no write tools — leaked grantee keys cannot mutate user data.
|
|
16
|
+
*
|
|
17
|
+
* Persistent storage is strongly preferred over in-memory because:
|
|
18
|
+
* - app-dev page reloads are routine in a browser app;
|
|
19
|
+
* - Claude's MCP URL is meant to live in the Claude config across sessions;
|
|
20
|
+
* - the alternative (re-create on every boot) would silently invalidate every
|
|
21
|
+
* prior Claude connection on every reload, indistinguishable from a real
|
|
22
|
+
* revoke from the user's perspective.
|
|
23
|
+
*/
|
|
24
|
+
import type { McpConnectionStore, McpOAuthAuthorizationStore } from "@opendatalabs/personal-server-ts-core/mcp";
|
|
25
|
+
export interface IndexedDbMcpConnectionStoreOptions {
|
|
26
|
+
dbName?: string;
|
|
27
|
+
storeName?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface IndexedDbMcpOAuthAuthorizationStoreOptions {
|
|
30
|
+
dbName?: string;
|
|
31
|
+
storeName?: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function createIndexedDbMcpConnectionStore(options?: IndexedDbMcpConnectionStoreOptions): McpConnectionStore;
|
|
34
|
+
export declare function createIndexedDbMcpOAuthAuthorizationStore(options?: IndexedDbMcpOAuthAuthorizationStoreOptions): McpOAuthAuthorizationStore;
|
|
35
|
+
//# sourceMappingURL=mcp-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-store.d.ts","sourceRoot":"","sources":["../src/mcp-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAEV,kBAAkB,EAElB,0BAA0B,EAC3B,MAAM,2CAA2C,CAAC;AAqBnD,MAAM,WAAW,kCAAkC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0CAA0C;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8GD,wBAAgB,iCAAiC,CAC/C,OAAO,GAAE,kCAAuC,GAC/C,kBAAkB,CA2EpB;AAED,wBAAgB,yCAAyC,CACvD,OAAO,GAAE,0CAA+C,GACvD,0BAA0B,CA0E5B"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IndexedDB-backed `McpConnectionStore` for Web PS Lite.
|
|
3
|
+
*
|
|
4
|
+
* Phase 1 trade-off: persists the per-connection grantee private key in
|
|
5
|
+
* PLAINTEXT in IndexedDB. The owner-derived AES-GCM wrap used for the PS Lite
|
|
6
|
+
* server identity is not yet applied to grantee keys — that's the Phase 2
|
|
7
|
+
* "encrypt grantee private keys at rest" task in
|
|
8
|
+
* `260604-PLAN-vana-mcp-personal-server.md`. The risk is bounded by:
|
|
9
|
+
*
|
|
10
|
+
* 1. The browser same-origin policy — only code running on the PS Lite tab's
|
|
11
|
+
* origin (e.g. app-dev.vana.org) can read this store.
|
|
12
|
+
* 2. Grantee keys are scoped per-connection and revocable. A leaked key only
|
|
13
|
+
* lets the holder read the grants that connection already approved; any
|
|
14
|
+
* revoke removes both the grant and the connection's lookup record.
|
|
15
|
+
* 3. There are no write tools — leaked grantee keys cannot mutate user data.
|
|
16
|
+
*
|
|
17
|
+
* Persistent storage is strongly preferred over in-memory because:
|
|
18
|
+
* - app-dev page reloads are routine in a browser app;
|
|
19
|
+
* - Claude's MCP URL is meant to live in the Claude config across sessions;
|
|
20
|
+
* - the alternative (re-create on every boot) would silently invalidate every
|
|
21
|
+
* prior Claude connection on every reload, indistinguishable from a real
|
|
22
|
+
* revoke from the user's perspective.
|
|
23
|
+
*/
|
|
24
|
+
const DEFAULT_DB_NAME = "personal-server-lite";
|
|
25
|
+
const DEFAULT_STORE_NAME = "mcpConnections";
|
|
26
|
+
const DEFAULT_AUTHORIZATION_STORE_NAME = "mcpOAuthAuthorizations";
|
|
27
|
+
const TOKEN_HASH_INDEX = "tokenHash";
|
|
28
|
+
const AUTHORIZATION_CODE_HASH_INDEX = "authorizationCodeHash";
|
|
29
|
+
const DB_VERSION = 2;
|
|
30
|
+
const CONNECTION_INDEXES = [
|
|
31
|
+
{ name: TOKEN_HASH_INDEX, keyPath: "tokenHash", unique: true },
|
|
32
|
+
];
|
|
33
|
+
const AUTHORIZATION_INDEXES = [
|
|
34
|
+
{
|
|
35
|
+
name: AUTHORIZATION_CODE_HASH_INDEX,
|
|
36
|
+
keyPath: "authorizationCodeHash",
|
|
37
|
+
unique: true,
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
const DEFAULT_CONNECTION_OPTIONS = {
|
|
41
|
+
dbName: DEFAULT_DB_NAME,
|
|
42
|
+
storeName: DEFAULT_STORE_NAME,
|
|
43
|
+
};
|
|
44
|
+
const DEFAULT_AUTHORIZATION_OPTIONS = {
|
|
45
|
+
dbName: DEFAULT_DB_NAME,
|
|
46
|
+
storeName: DEFAULT_AUTHORIZATION_STORE_NAME,
|
|
47
|
+
};
|
|
48
|
+
function ensureObjectStore(db, transaction, opts, indexes) {
|
|
49
|
+
const store = db.objectStoreNames.contains(opts.storeName)
|
|
50
|
+
? transaction?.objectStore(opts.storeName)
|
|
51
|
+
: db.createObjectStore(opts.storeName, { keyPath: "id" });
|
|
52
|
+
if (!store)
|
|
53
|
+
return;
|
|
54
|
+
for (const index of indexes) {
|
|
55
|
+
if (!store.indexNames.contains(index.name)) {
|
|
56
|
+
store.createIndex(index.name, index.keyPath, { unique: index.unique });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function openDb(opts, indexes) {
|
|
61
|
+
if (typeof indexedDB === "undefined") {
|
|
62
|
+
throw new Error("IndexedDB is not available in this runtime");
|
|
63
|
+
}
|
|
64
|
+
return new Promise((resolve, reject) => {
|
|
65
|
+
const request = indexedDB.open(opts.dbName, DB_VERSION);
|
|
66
|
+
request.onupgradeneeded = () => {
|
|
67
|
+
const db = request.result;
|
|
68
|
+
ensureObjectStore(db, request.transaction, opts, indexes);
|
|
69
|
+
ensureObjectStore(db, request.transaction, DEFAULT_CONNECTION_OPTIONS, CONNECTION_INDEXES);
|
|
70
|
+
ensureObjectStore(db, request.transaction, DEFAULT_AUTHORIZATION_OPTIONS, AUTHORIZATION_INDEXES);
|
|
71
|
+
};
|
|
72
|
+
request.onsuccess = () => resolve(request.result);
|
|
73
|
+
request.onerror = () => reject(request.error);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
function runTx(opts, mode, indexes, fn) {
|
|
77
|
+
return openDb(opts, indexes).then((db) => new Promise((resolve, reject) => {
|
|
78
|
+
const transaction = db.transaction(opts.storeName, mode);
|
|
79
|
+
const store = transaction.objectStore(opts.storeName);
|
|
80
|
+
const request = fn(store);
|
|
81
|
+
request.onsuccess = () => resolve(request.result);
|
|
82
|
+
request.onerror = () => reject(request.error);
|
|
83
|
+
transaction.oncomplete = () => db.close();
|
|
84
|
+
transaction.onerror = () => {
|
|
85
|
+
db.close();
|
|
86
|
+
reject(transaction.error);
|
|
87
|
+
};
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
function runIndexQuery(opts, indexName, indexes, fn) {
|
|
91
|
+
return openDb(opts, indexes).then((db) => new Promise((resolve, reject) => {
|
|
92
|
+
const transaction = db.transaction(opts.storeName, "readonly");
|
|
93
|
+
const store = transaction.objectStore(opts.storeName);
|
|
94
|
+
const request = fn(store.index(indexName));
|
|
95
|
+
request.onsuccess = () => resolve(request.result);
|
|
96
|
+
request.onerror = () => reject(request.error);
|
|
97
|
+
transaction.oncomplete = () => db.close();
|
|
98
|
+
transaction.onerror = () => {
|
|
99
|
+
db.close();
|
|
100
|
+
reject(transaction.error);
|
|
101
|
+
};
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
export function createIndexedDbMcpConnectionStore(options = {}) {
|
|
105
|
+
const resolved = {
|
|
106
|
+
dbName: options.dbName ?? DEFAULT_DB_NAME,
|
|
107
|
+
storeName: options.storeName ?? DEFAULT_STORE_NAME,
|
|
108
|
+
};
|
|
109
|
+
return {
|
|
110
|
+
async create(record) {
|
|
111
|
+
const existing = await runTx(resolved, "readonly", CONNECTION_INDEXES, (store) => store.get(record.id));
|
|
112
|
+
if (existing) {
|
|
113
|
+
throw new Error(`mcp connection ${record.id} already exists`);
|
|
114
|
+
}
|
|
115
|
+
await runTx(resolved, "readwrite", CONNECTION_INDEXES, (store) => store.put({ ...record }));
|
|
116
|
+
},
|
|
117
|
+
async list() {
|
|
118
|
+
const all = await runTx(resolved, "readonly", CONNECTION_INDEXES, (store) => store.getAll());
|
|
119
|
+
return all.map((r) => ({ ...r }));
|
|
120
|
+
},
|
|
121
|
+
async getById(id) {
|
|
122
|
+
const record = await runTx(resolved, "readonly", CONNECTION_INDEXES, (store) => store.get(id));
|
|
123
|
+
return record ? { ...record } : null;
|
|
124
|
+
},
|
|
125
|
+
async getByTokenHash(tokenHash) {
|
|
126
|
+
const record = await runIndexQuery(resolved, TOKEN_HASH_INDEX, CONNECTION_INDEXES, (index) => index.get(tokenHash));
|
|
127
|
+
if (!record)
|
|
128
|
+
return null;
|
|
129
|
+
if (record.status !== "approved")
|
|
130
|
+
return null;
|
|
131
|
+
return { ...record };
|
|
132
|
+
},
|
|
133
|
+
async update(id, patch) {
|
|
134
|
+
const existing = await runTx(resolved, "readonly", CONNECTION_INDEXES, (store) => store.get(id));
|
|
135
|
+
if (!existing)
|
|
136
|
+
return null;
|
|
137
|
+
const updated = { ...existing, ...patch };
|
|
138
|
+
await runTx(resolved, "readwrite", CONNECTION_INDEXES, (store) => store.put(updated));
|
|
139
|
+
return { ...updated };
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
export function createIndexedDbMcpOAuthAuthorizationStore(options = {}) {
|
|
144
|
+
const resolved = {
|
|
145
|
+
dbName: options.dbName ?? DEFAULT_DB_NAME,
|
|
146
|
+
storeName: options.storeName ?? DEFAULT_AUTHORIZATION_STORE_NAME,
|
|
147
|
+
};
|
|
148
|
+
return {
|
|
149
|
+
async create(record) {
|
|
150
|
+
const existing = await runTx(resolved, "readonly", AUTHORIZATION_INDEXES, (store) => store.get(record.id));
|
|
151
|
+
if (existing) {
|
|
152
|
+
throw new Error(`mcp oauth authorization ${record.id} already exists`);
|
|
153
|
+
}
|
|
154
|
+
await runTx(resolved, "readwrite", AUTHORIZATION_INDEXES, (store) => store.put({ ...record }));
|
|
155
|
+
},
|
|
156
|
+
async getById(id) {
|
|
157
|
+
const record = await runTx(resolved, "readonly", AUTHORIZATION_INDEXES, (store) => store.get(id));
|
|
158
|
+
return record ? { ...record } : null;
|
|
159
|
+
},
|
|
160
|
+
async getByCodeHash(authorizationCodeHash) {
|
|
161
|
+
const record = await runIndexQuery(resolved, AUTHORIZATION_CODE_HASH_INDEX, AUTHORIZATION_INDEXES, (index) => index.get(authorizationCodeHash));
|
|
162
|
+
return record ? { ...record } : null;
|
|
163
|
+
},
|
|
164
|
+
async update(id, patch) {
|
|
165
|
+
const existing = await runTx(resolved, "readonly", AUTHORIZATION_INDEXES, (store) => store.get(id));
|
|
166
|
+
if (!existing)
|
|
167
|
+
return null;
|
|
168
|
+
const updated = { ...existing, ...patch };
|
|
169
|
+
await runTx(resolved, "readwrite", AUTHORIZATION_INDEXES, (store) => store.put(updated));
|
|
170
|
+
return { ...updated };
|
|
171
|
+
},
|
|
172
|
+
async delete(id) {
|
|
173
|
+
await runTx(resolved, "readwrite", AUTHORIZATION_INDEXES, (store) => store.delete(id));
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=mcp-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-store.js","sourceRoot":"","sources":["../src/mcp-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Address } from "viem";
|
|
2
|
+
export interface PsLiteOwnerBindingInput {
|
|
3
|
+
ownerAddress?: Address;
|
|
4
|
+
ownerSignature: `0x${string}`;
|
|
5
|
+
}
|
|
6
|
+
export declare function resolvePsLiteOwner(input: PsLiteOwnerBindingInput): Promise<Address>;
|
|
7
|
+
//# sourceMappingURL=owner-binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-binding.d.ts","sourceRoot":"","sources":["../src/owner-binding.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqC,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAEvE,MAAM,WAAW,uBAAuB;IACtC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,KAAK,MAAM,EAAE,CAAC;CAC/B;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAclB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { recoverServerOwner } from "@opendatalabs/vana-sdk/browser";
|
|
2
|
+
import { buildPersonalServerLiteOwnerBindingMessage } from "@opendatalabs/vana-sdk/protocol/personal-server-lite-owner-binding";
|
|
3
|
+
import { getAddress, recoverMessageAddress } from "viem";
|
|
4
|
+
export async function resolvePsLiteOwner(input) {
|
|
5
|
+
if (!input.ownerAddress) {
|
|
6
|
+
return recoverServerOwner(input.ownerSignature);
|
|
7
|
+
}
|
|
8
|
+
const expected = getAddress(input.ownerAddress);
|
|
9
|
+
const recovered = await recoverMessageAddress({
|
|
10
|
+
message: buildPersonalServerLiteOwnerBindingMessage(expected),
|
|
11
|
+
signature: input.ownerSignature,
|
|
12
|
+
});
|
|
13
|
+
if (recovered.toLowerCase() !== expected.toLowerCase()) {
|
|
14
|
+
throw new Error("PS Lite owner signature does not match ownerAddress");
|
|
15
|
+
}
|
|
16
|
+
return expected;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=owner-binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-binding.js","sourceRoot":"","sources":["../src/owner-binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,0CAA0C,EAAE,MAAM,oEAAoE,CAAC;AAChI,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAgB,MAAM,MAAM,CAAC;AAOvE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAA8B;IAE9B,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,kBAAkB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC;QAC5C,OAAO,EAAE,0CAA0C,CAAC,QAAQ,CAAC;QAC7D,SAAS,EAAE,KAAK,CAAC,cAAc;KAChC,CAAC,CAAC;IACH,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PsLiteRelayTlsFactory } from "./relay.js";
|
|
2
|
+
export interface RustlsPsLiteRelayTlsOptions {
|
|
3
|
+
controlUrl: string;
|
|
4
|
+
publicSuffix?: string;
|
|
5
|
+
certIssuerUrl?: string;
|
|
6
|
+
storage?: Storage;
|
|
7
|
+
logger?: (line: string) => void;
|
|
8
|
+
}
|
|
9
|
+
export interface PsLiteRelayTlsIdentity {
|
|
10
|
+
certPem: string;
|
|
11
|
+
keyPem: string;
|
|
12
|
+
hostname: string;
|
|
13
|
+
source: "acme" | "self-signed" | "cached-acme";
|
|
14
|
+
trusted: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function createRustlsPsLiteRelayTlsFactory(options: RustlsPsLiteRelayTlsOptions): PsLiteRelayTlsFactory;
|
|
17
|
+
export declare function psLiteRelayPublicHost(sessionId: string, publicSuffix?: string): string;
|
|
18
|
+
export declare function psLiteRelayPublicUrl(sessionId: string, publicSuffix?: string): string;
|
|
19
|
+
//# sourceMappingURL=relay-tls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-tls.d.ts","sourceRoot":"","sources":["../src/relay-tls.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,qBAAqB,EAKtB,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,aAAa,CAAC;IAC/C,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,2BAA2B,GACnC,qBAAqB,CAgBvB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,YAAY,SAAwB,GACnC,MAAM,CAER;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,YAAY,SAAwB,GACnC,MAAM,CAER"}
|