@opendatalabs/personal-server-ts-lite 0.0.1-canary.eee90fe → 0.0.1-canary.eefd1bc
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/browser-runtime.d.ts +4 -0
- package/dist/browser-runtime.d.ts.map +1 -1
- package/dist/browser-runtime.js +32 -3
- package/dist/browser-runtime.js.map +1 -1
- package/dist/client.d.ts +22 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +399 -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 +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- 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 +12 -0
- package/dist/relay-tls.d.ts.map +1 -1
- package/dist/relay-tls.js +142 -73
- package/dist/relay-tls.js.map +1 -1
- package/dist/relay.d.ts +69 -2
- package/dist/relay.d.ts.map +1 -1
- package/dist/relay.js +305 -22
- package/dist/relay.js.map +1 -1
- package/dist/runtime.d.ts +30 -17
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +677 -350
- package/dist/runtime.js.map +1 -1
- package/dist/state.d.ts +4 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +49 -2
- package/dist/state.js.map +1 -1
- package/dist/storage-utils.d.ts +2 -1
- package/dist/storage-utils.d.ts.map +1 -1
- package/dist/storage-utils.js +1 -0
- package/dist/storage-utils.js.map +1 -1
- package/dist/storage.d.ts +21 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +426 -14
- package/dist/storage.js.map +1 -1
- package/dist/sync.d.ts +5 -0
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +110 -5
- package/dist/sync.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ServerConfig } from "@opendatalabs/personal-server-ts-core/schemas";
|
|
2
|
+
import type { Logger } from "@opendatalabs/personal-server-ts-core/logger";
|
|
2
3
|
import type { AccessLogReader } from "@opendatalabs/personal-server-ts-core/logging/access-reader";
|
|
3
4
|
import type { AccessLogWriter } from "@opendatalabs/personal-server-ts-core/logging/access-log";
|
|
4
5
|
import type { DataStoragePort } from "@opendatalabs/personal-server-ts-core/ports";
|
|
@@ -6,14 +7,17 @@ import { type PsLiteDataFileStore } from "./storage.js";
|
|
|
6
7
|
import { type PsLiteStateStore, type PsLiteUnlockedServerIdentity } from "./state.js";
|
|
7
8
|
import { type PsLiteRuntime, type PsLiteRuntimeOptions } from "./runtime.js";
|
|
8
9
|
export interface IndexedDbPsLiteRuntimeOptions extends Omit<PsLiteRuntimeOptions, "accessLogReader" | "accessLogWriter" | "config" | "identity" | "saveConfig" | "stateCapabilities" | "storage" | "tokenStore"> {
|
|
10
|
+
ownerAddress?: `0x${string}`;
|
|
9
11
|
ownerSignature: `0x${string}`;
|
|
10
12
|
dbName?: string;
|
|
11
13
|
stateStoreName?: string;
|
|
12
14
|
storageDbName?: string;
|
|
13
15
|
storageStoreName?: string;
|
|
14
16
|
storageKey?: string;
|
|
17
|
+
runtimeOrigin?: string;
|
|
15
18
|
configDefaults?: Partial<ServerConfig>;
|
|
16
19
|
dataFileStore?: PsLiteDataFileStore;
|
|
20
|
+
logger?: Logger;
|
|
17
21
|
}
|
|
18
22
|
export interface IndexedDbPsLiteRuntime {
|
|
19
23
|
runtime: PsLiteRuntime;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-runtime.d.ts","sourceRoot":"","sources":["../src/browser-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-runtime.d.ts","sourceRoot":"","sources":["../src/browser-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8CAA8C,CAAC;AAE3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AACnG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0DAA0D,CAAC;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAEnF,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAOL,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EAClC,MAAM,YAAY,CAAC;AACpB,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAC1B,MAAM,cAAc,CAAC;AAKtB,MAAM,WAAW,6BAA8B,SAAQ,IAAI,CACzD,oBAAoB,EAClB,iBAAiB,GACjB,iBAAiB,GACjB,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,mBAAmB,GACnB,SAAS,GACT,YAAY,CACf;IACC,YAAY,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,KAAK,MAAM,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,4BAA4B,CAAC;IACvC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,OAAO,EAAE,eAAe,CAAC;IACzB,UAAU,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAC/C,cAAc,EAAE,eAAe,GAAG,eAAe,CAAC;IAClD,WAAW,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;CAClD;AAED,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,sBAAsB,CAAC,CAiHjC"}
|
package/dist/browser-runtime.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { createServerSigner } from "@opendatalabs/personal-server-ts-core/signing";
|
|
2
|
-
import { createGatewayClient
|
|
2
|
+
import { createGatewayClient } from "@opendatalabs/vana-sdk/browser";
|
|
3
3
|
import { createIndexedDbPsLitePersistence, createPersistentPsLiteStorage, } from "./storage.js";
|
|
4
4
|
import { createIndexedDbPsLiteAccessLogStore, createIndexedDbPsLiteStateStore, createIndexedDbPsLiteTokenStore, loadOrCreatePsLiteConfig, loadOrCreatePsLiteServerIdentity, savePsLiteConfig, } from "./state.js";
|
|
5
|
-
import { createPsLiteRuntime, } from "./runtime.js";
|
|
5
|
+
import { createWeb3SignedPsLiteAuth, createPsLiteRuntime, } from "./runtime.js";
|
|
6
6
|
import { createPsLiteSyncManager } from "./sync.js";
|
|
7
|
+
import { resolvePsLiteOwner } from "./owner-binding.js";
|
|
8
|
+
import { DiagnosticsRecorder } from "./diagnostics.js";
|
|
7
9
|
export async function createIndexedDbPsLiteRuntime(options) {
|
|
8
10
|
const dbName = options.dbName ?? "personal-server-lite";
|
|
9
11
|
const stateStore = createIndexedDbPsLiteStateStore({
|
|
@@ -29,12 +31,18 @@ export async function createIndexedDbPsLiteRuntime(options) {
|
|
|
29
31
|
key: options.storageKey ?? "data-storage-v1",
|
|
30
32
|
}), options.dataFileStore);
|
|
31
33
|
const gateway = options.gateway ?? createGatewayClient(config.gateway.url);
|
|
32
|
-
const serverOwner = await
|
|
34
|
+
const serverOwner = await resolvePsLiteOwner({
|
|
35
|
+
ownerAddress: options.ownerAddress,
|
|
36
|
+
ownerSignature: options.ownerSignature,
|
|
37
|
+
});
|
|
33
38
|
const serverSigner = options.serverSigner ??
|
|
34
39
|
createServerSigner(identity.account, {
|
|
35
40
|
chainId: config.gateway.chainId,
|
|
36
41
|
contracts: config.gateway.contracts,
|
|
37
42
|
});
|
|
43
|
+
// Create (or reuse) a shared diagnostics recorder before the sync manager so
|
|
44
|
+
// both share the same recorder instance and events appear in /v1/diagnostics.
|
|
45
|
+
const diagnostics = options.diagnostics ?? new DiagnosticsRecorder();
|
|
38
46
|
let syncManager = options.syncManager ?? null;
|
|
39
47
|
if (!syncManager && config.sync.enabled) {
|
|
40
48
|
syncManager = (await createPsLiteSyncManager({
|
|
@@ -42,12 +50,31 @@ export async function createIndexedDbPsLiteRuntime(options) {
|
|
|
42
50
|
stateStore,
|
|
43
51
|
storage,
|
|
44
52
|
ownerSignature: options.ownerSignature,
|
|
53
|
+
ownerAddress: options.ownerAddress,
|
|
45
54
|
serverAccount: identity.account,
|
|
46
55
|
gateway,
|
|
56
|
+
diagnostics,
|
|
57
|
+
logger: options.logger,
|
|
47
58
|
})).syncManager;
|
|
48
59
|
}
|
|
60
|
+
let runtimeRef = null;
|
|
61
|
+
const auth = options.auth ??
|
|
62
|
+
createWeb3SignedPsLiteAuth({
|
|
63
|
+
origin: () => options.runtimeOrigin ?? config.server.origin,
|
|
64
|
+
ownerAddress: serverOwner,
|
|
65
|
+
accessToken: options.accessToken,
|
|
66
|
+
tokenStore,
|
|
67
|
+
dataReadPolicyPorts: {
|
|
68
|
+
authSessionVerifier: gateway,
|
|
69
|
+
grantVerifier: gateway,
|
|
70
|
+
runtimeAvailability: {
|
|
71
|
+
isAvailable: () => runtimeRef?.isAvailable() ?? Boolean(options.active),
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
});
|
|
49
75
|
const runtime = createPsLiteRuntime({
|
|
50
76
|
...options,
|
|
77
|
+
auth,
|
|
51
78
|
storage,
|
|
52
79
|
config,
|
|
53
80
|
identity: {
|
|
@@ -58,6 +85,7 @@ export async function createIndexedDbPsLiteRuntime(options) {
|
|
|
58
85
|
serverOwner,
|
|
59
86
|
serverSigner,
|
|
60
87
|
syncManager,
|
|
88
|
+
diagnostics,
|
|
61
89
|
saveConfig: async (nextConfig) => {
|
|
62
90
|
const saved = await savePsLiteConfig(stateStore, nextConfig);
|
|
63
91
|
Object.assign(config, saved);
|
|
@@ -67,6 +95,7 @@ export async function createIndexedDbPsLiteRuntime(options) {
|
|
|
67
95
|
accessLogReader: accessLogStore,
|
|
68
96
|
accessLogWriter: accessLogStore,
|
|
69
97
|
});
|
|
98
|
+
runtimeRef = runtime;
|
|
70
99
|
return {
|
|
71
100
|
runtime,
|
|
72
101
|
config,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-runtime.js","sourceRoot":"","sources":["../src/browser-runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browser-runtime.js","sourceRoot":"","sources":["../src/browser-runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type PersonalServerHandle, type PersonalServerStatus } from "@opendatalabs/personal-server-ts-core/client";
|
|
2
|
+
import { type GatewayClient } from "@opendatalabs/vana-sdk/browser";
|
|
3
|
+
import { type IndexedDbPsLiteRuntimeOptions } from "./browser-runtime.js";
|
|
4
|
+
import { type PsLiteRelayClientOptions } from "./relay.js";
|
|
5
|
+
import type { PsLiteRuntime } from "./runtime.js";
|
|
6
|
+
import { type PsLiteStateStore } from "./state.js";
|
|
7
|
+
export interface StartPersonalServerLiteRelayOptions extends Omit<PsLiteRelayClientOptions, "runtime" | "onStatus" | "sessionId"> {
|
|
8
|
+
sessionId?: string;
|
|
9
|
+
onStatus?: PsLiteRelayClientOptions["onStatus"];
|
|
10
|
+
}
|
|
11
|
+
export interface StartPersonalServerLiteOptions extends Omit<IndexedDbPsLiteRuntimeOptions, "ownerSignature" | "active"> {
|
|
12
|
+
ownerSignature?: `0x${string}`;
|
|
13
|
+
active?: boolean;
|
|
14
|
+
runtime?: PsLiteRuntime;
|
|
15
|
+
localOrigin?: string;
|
|
16
|
+
relay?: false | StartPersonalServerLiteRelayOptions;
|
|
17
|
+
relayStateStore?: PsLiteStateStore;
|
|
18
|
+
gateway?: GatewayClient;
|
|
19
|
+
onStatus?: (status: PersonalServerStatus) => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function startPersonalServer(options: StartPersonalServerLiteOptions): Promise<PersonalServerHandle>;
|
|
22
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAeL,KAAK,oBAAoB,EAgBzB,KAAK,oBAAoB,EAG1B,MAAM,8CAA8C,CAAC;AAEtD,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAKL,KAAK,wBAAwB,EAE9B,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,mCAAoC,SAAQ,IAAI,CAC/D,wBAAwB,EACxB,SAAS,GAAG,UAAU,GAAG,WAAW,CACrC;IACC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,wBAAwB,CAAC,UAAU,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,8BAA+B,SAAQ,IAAI,CAC1D,6BAA6B,EAC7B,gBAAgB,GAAG,QAAQ,CAC5B;IACC,cAAc,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,GAAG,mCAAmC,CAAC;IACpD,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;CACnD;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,oBAAoB,CAAC,CAsa/B"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
import { accessLogsListPath, createOwnerSignedPersonalServerRequest, createPersonalServerInfoFromHealth, createPersonalServerRegistrationRequest, dataListPath, dataReadPath, dataVersionsPath, grantRevokePath, parsePersonalServerJsonResponse, requestPath, submitPersonalServerRegistration, } from "@opendatalabs/personal-server-ts-core/client";
|
|
2
|
+
import { createGatewayClient, } from "@opendatalabs/vana-sdk/browser";
|
|
3
|
+
import { createIndexedDbPsLiteRuntime, } from "./browser-runtime.js";
|
|
4
|
+
import { createRelayDrainGatedReadFulfillmentReporter, psLiteRelayPublicUrl, startPsLiteRelayClient, } from "./relay.js";
|
|
5
|
+
import { createIndexedDbPsLiteStateStore, loadPsLiteRelayState, savePsLiteRelayState, } from "./state.js";
|
|
6
|
+
const DEFAULT_LITE_ORIGIN = "https://ps-lite.local";
|
|
7
|
+
export async function startPersonalServer(options) {
|
|
8
|
+
const localOrigin = options.localOrigin ?? DEFAULT_LITE_ORIGIN;
|
|
9
|
+
const relayOptions = options.relay || undefined;
|
|
10
|
+
const relayStateStore = relayOptions
|
|
11
|
+
? (options.relayStateStore ??
|
|
12
|
+
(options.runtime
|
|
13
|
+
? undefined
|
|
14
|
+
: createIndexedDbPsLiteStateStore({
|
|
15
|
+
dbName: options.dbName ?? "personal-server-lite",
|
|
16
|
+
storeName: options.stateStoreName ?? "state",
|
|
17
|
+
})))
|
|
18
|
+
: undefined;
|
|
19
|
+
const savedRelayState = relayStateStore
|
|
20
|
+
? await loadPsLiteRelayState(relayStateStore).catch(() => null)
|
|
21
|
+
: null;
|
|
22
|
+
const resolvedRelayOptions = relayOptions
|
|
23
|
+
? {
|
|
24
|
+
...relayOptions,
|
|
25
|
+
sessionId: relayOptions.sessionId ??
|
|
26
|
+
savedRelaySessionId(savedRelayState, relayOptions) ??
|
|
27
|
+
randomSessionId(),
|
|
28
|
+
}
|
|
29
|
+
: undefined;
|
|
30
|
+
const initialPublicUrl = resolvedRelayOptions
|
|
31
|
+
? psLiteRelayPublicUrl(resolvedRelayOptions.sessionId, resolvedRelayOptions.publicSuffix)
|
|
32
|
+
: null;
|
|
33
|
+
const runtimeOrigin = initialPublicUrl ?? localOrigin;
|
|
34
|
+
// Late-bound relay handle for the drain-gated fulfillment reporter: the
|
|
35
|
+
// runtime needs the (wrapped) reporter at construction time, but the relay
|
|
36
|
+
// client only starts further down. Until it exists, reports pass through.
|
|
37
|
+
let relayClientForDrain;
|
|
38
|
+
const readFulfillmentReporter = options.readFulfillmentReporter && resolvedRelayOptions
|
|
39
|
+
? createRelayDrainGatedReadFulfillmentReporter(options.readFulfillmentReporter, () => relayClientForDrain)
|
|
40
|
+
: options.readFulfillmentReporter;
|
|
41
|
+
const runtimeBundle = options.runtime
|
|
42
|
+
? null
|
|
43
|
+
: await createIndexedDbPsLiteRuntime({
|
|
44
|
+
...options,
|
|
45
|
+
readFulfillmentReporter,
|
|
46
|
+
ownerSignature: requiredOwnerSignature(options.ownerSignature),
|
|
47
|
+
active: options.active ?? true,
|
|
48
|
+
runtimeOrigin,
|
|
49
|
+
configDefaults: configDefaultsWithOrigin(options.configDefaults, runtimeOrigin),
|
|
50
|
+
});
|
|
51
|
+
const runtime = options.runtime ?? runtimeBundle.runtime;
|
|
52
|
+
if (options.active ?? true) {
|
|
53
|
+
runtime.activate();
|
|
54
|
+
}
|
|
55
|
+
let status = "ready";
|
|
56
|
+
let relayStatus = "closed";
|
|
57
|
+
let relayClient;
|
|
58
|
+
let publicUrl = null;
|
|
59
|
+
let lastInfo = null;
|
|
60
|
+
let lastPreparedRegistration = null;
|
|
61
|
+
const gateway = options.gateway;
|
|
62
|
+
const setStatus = (nextStatus) => {
|
|
63
|
+
status = nextStatus;
|
|
64
|
+
options.onStatus?.(nextStatus);
|
|
65
|
+
};
|
|
66
|
+
if (resolvedRelayOptions) {
|
|
67
|
+
relayStatus = "connecting";
|
|
68
|
+
publicUrl = initialPublicUrl;
|
|
69
|
+
relayClient = startPsLiteRelayClient({
|
|
70
|
+
...resolvedRelayOptions,
|
|
71
|
+
runtime,
|
|
72
|
+
origin: runtimeOrigin,
|
|
73
|
+
onStatus(nextRelayStatus) {
|
|
74
|
+
relayStatus = nextRelayStatus;
|
|
75
|
+
if (nextRelayStatus === "error")
|
|
76
|
+
setStatus("error");
|
|
77
|
+
resolvedRelayOptions.onStatus?.(nextRelayStatus);
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
relayClientForDrain = relayClient;
|
|
81
|
+
}
|
|
82
|
+
async function info() {
|
|
83
|
+
if (status === "stopped" && lastInfo) {
|
|
84
|
+
return { ...lastInfo, status: "stopped" };
|
|
85
|
+
}
|
|
86
|
+
const response = await runtime.fetch(new Request(`${localOrigin}/health`));
|
|
87
|
+
const body = await response.json();
|
|
88
|
+
lastInfo = createPersonalServerInfoFromHealth({
|
|
89
|
+
kind: "lite",
|
|
90
|
+
status,
|
|
91
|
+
health: {
|
|
92
|
+
...body,
|
|
93
|
+
relay: { status: relayStatus, publicUrl },
|
|
94
|
+
},
|
|
95
|
+
localUrl: localOrigin,
|
|
96
|
+
publicUrl,
|
|
97
|
+
});
|
|
98
|
+
return lastInfo;
|
|
99
|
+
}
|
|
100
|
+
async function prepareRegistration(prepareOptions = {}) {
|
|
101
|
+
const current = await info();
|
|
102
|
+
const serverUrl = prepareOptions.serverUrl ?? current.urls.registration;
|
|
103
|
+
if (!current.ownerAddress || !current.server || !serverUrl) {
|
|
104
|
+
throw new Error("Personal Server identity and URL are required");
|
|
105
|
+
}
|
|
106
|
+
if (!current.gatewayConfig) {
|
|
107
|
+
throw new Error("Personal Server gateway config is required");
|
|
108
|
+
}
|
|
109
|
+
const request = createPersonalServerRegistrationRequest({
|
|
110
|
+
gatewayConfig: current.gatewayConfig,
|
|
111
|
+
ownerAddress: current.ownerAddress,
|
|
112
|
+
serverAddress: current.server.address,
|
|
113
|
+
publicKey: current.server.publicKey,
|
|
114
|
+
serverUrl,
|
|
115
|
+
});
|
|
116
|
+
lastPreparedRegistration = request;
|
|
117
|
+
return request;
|
|
118
|
+
}
|
|
119
|
+
async function submitRegistration(submitOptions) {
|
|
120
|
+
const request = submitOptions.request ??
|
|
121
|
+
(submitOptions.serverUrl
|
|
122
|
+
? await prepareRegistration({ serverUrl: submitOptions.serverUrl })
|
|
123
|
+
: (lastPreparedRegistration ?? (await prepareRegistration())));
|
|
124
|
+
const gatewayClient = gateway ?? createGatewayClient(requiredGatewayUrl(await info()));
|
|
125
|
+
return submitPersonalServerRegistration({
|
|
126
|
+
gateway: gatewayClient,
|
|
127
|
+
request,
|
|
128
|
+
signature: submitOptions.signature,
|
|
129
|
+
}).then(async (result) => {
|
|
130
|
+
await rememberRegisteredRelay(request.candidate.serverUrl);
|
|
131
|
+
return result;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
async function callFetch(input, init) {
|
|
135
|
+
const origin = (await info()).urls.apiOrigin ?? localOrigin;
|
|
136
|
+
return runtime.fetch(await toRuntimeRequest(input, origin, init));
|
|
137
|
+
}
|
|
138
|
+
async function postData(scope, body, postOptions) {
|
|
139
|
+
const current = await info();
|
|
140
|
+
const origin = requiredApiOrigin(current);
|
|
141
|
+
const path = `/v1/data/${encodeURIComponent(scope)}`;
|
|
142
|
+
const request = await createOwnerRequest({
|
|
143
|
+
origin,
|
|
144
|
+
path,
|
|
145
|
+
method: "POST",
|
|
146
|
+
body,
|
|
147
|
+
authOptions: postOptions,
|
|
148
|
+
headers: {
|
|
149
|
+
"Content-Type": "application/json",
|
|
150
|
+
...postOptions.headers,
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "data write");
|
|
154
|
+
}
|
|
155
|
+
async function listData(listOptions = {}) {
|
|
156
|
+
const current = await info();
|
|
157
|
+
const request = await createOwnerRequest({
|
|
158
|
+
origin: requiredApiOrigin(current),
|
|
159
|
+
path: dataListPath(listOptions),
|
|
160
|
+
method: "GET",
|
|
161
|
+
authOptions: listOptions,
|
|
162
|
+
headers: listOptions.headers,
|
|
163
|
+
});
|
|
164
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "data list");
|
|
165
|
+
}
|
|
166
|
+
async function listAccessLogs(accessLogOptions = {}) {
|
|
167
|
+
const current = await info();
|
|
168
|
+
const request = await createOwnerRequest({
|
|
169
|
+
origin: requiredApiOrigin(current),
|
|
170
|
+
path: accessLogsListPath(accessLogOptions),
|
|
171
|
+
method: "GET",
|
|
172
|
+
authOptions: accessLogOptions,
|
|
173
|
+
headers: accessLogOptions.headers,
|
|
174
|
+
});
|
|
175
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "access logs list");
|
|
176
|
+
}
|
|
177
|
+
async function listVersions(scope, versionOptions = {}) {
|
|
178
|
+
const current = await info();
|
|
179
|
+
const request = await createOwnerRequest({
|
|
180
|
+
origin: requiredApiOrigin(current),
|
|
181
|
+
path: dataVersionsPath(scope, versionOptions),
|
|
182
|
+
method: "GET",
|
|
183
|
+
authOptions: versionOptions,
|
|
184
|
+
headers: versionOptions.headers,
|
|
185
|
+
});
|
|
186
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "data versions list");
|
|
187
|
+
}
|
|
188
|
+
async function readData(scope, readOptions = {}) {
|
|
189
|
+
const current = await info();
|
|
190
|
+
const request = await createOwnerRequest({
|
|
191
|
+
origin: requiredApiOrigin(current),
|
|
192
|
+
path: dataReadPath(scope, readOptions),
|
|
193
|
+
method: "GET",
|
|
194
|
+
authOptions: readOptions,
|
|
195
|
+
headers: readOptions.headers,
|
|
196
|
+
});
|
|
197
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "data read");
|
|
198
|
+
}
|
|
199
|
+
async function syncStatus(syncOptions = {}) {
|
|
200
|
+
const current = await info();
|
|
201
|
+
const request = await createOwnerRequest({
|
|
202
|
+
origin: requiredApiOrigin(current),
|
|
203
|
+
path: "/v1/sync/status",
|
|
204
|
+
method: "GET",
|
|
205
|
+
authOptions: syncOptions,
|
|
206
|
+
headers: syncOptions.headers,
|
|
207
|
+
});
|
|
208
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "sync status");
|
|
209
|
+
}
|
|
210
|
+
async function createGrant(grantOptions) {
|
|
211
|
+
const current = await info();
|
|
212
|
+
const request = await createOwnerRequest({
|
|
213
|
+
origin: requiredApiOrigin(current),
|
|
214
|
+
path: "/v1/grants",
|
|
215
|
+
method: "POST",
|
|
216
|
+
body: {
|
|
217
|
+
granteeAddress: grantOptions.granteeAddress,
|
|
218
|
+
scopes: grantOptions.scopes,
|
|
219
|
+
...(grantOptions.expiresAt === undefined
|
|
220
|
+
? {}
|
|
221
|
+
: { expiresAt: grantOptions.expiresAt }),
|
|
222
|
+
...(grantOptions.grantVersion === undefined
|
|
223
|
+
? {}
|
|
224
|
+
: { grantVersion: grantOptions.grantVersion }),
|
|
225
|
+
},
|
|
226
|
+
authOptions: grantOptions,
|
|
227
|
+
headers: {
|
|
228
|
+
"Content-Type": "application/json",
|
|
229
|
+
...grantOptions.headers,
|
|
230
|
+
},
|
|
231
|
+
});
|
|
232
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "grant create");
|
|
233
|
+
}
|
|
234
|
+
async function listGrants(grantOptions = {}) {
|
|
235
|
+
const current = await info();
|
|
236
|
+
const request = await createOwnerRequest({
|
|
237
|
+
origin: requiredApiOrigin(current),
|
|
238
|
+
path: "/v1/grants",
|
|
239
|
+
method: "GET",
|
|
240
|
+
authOptions: grantOptions,
|
|
241
|
+
headers: grantOptions.headers,
|
|
242
|
+
});
|
|
243
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "grant list");
|
|
244
|
+
}
|
|
245
|
+
async function revokeGrant(grantId, grantOptions = {}) {
|
|
246
|
+
const current = await info();
|
|
247
|
+
const request = await createOwnerRequest({
|
|
248
|
+
origin: requiredApiOrigin(current),
|
|
249
|
+
path: grantRevokePath(grantId),
|
|
250
|
+
method: "DELETE",
|
|
251
|
+
authOptions: grantOptions,
|
|
252
|
+
headers: grantOptions.headers,
|
|
253
|
+
});
|
|
254
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "grant revoke");
|
|
255
|
+
}
|
|
256
|
+
async function syncNow(syncOptions = {}) {
|
|
257
|
+
const current = await info();
|
|
258
|
+
const request = await createOwnerRequest({
|
|
259
|
+
origin: requiredApiOrigin(current),
|
|
260
|
+
path: "/v1/sync/trigger",
|
|
261
|
+
method: "POST",
|
|
262
|
+
authOptions: syncOptions,
|
|
263
|
+
headers: syncOptions.headers,
|
|
264
|
+
});
|
|
265
|
+
return parsePersonalServerJsonResponse(await callFetch(request), "sync trigger");
|
|
266
|
+
}
|
|
267
|
+
async function rememberRegisteredRelay(serverUrl) {
|
|
268
|
+
if (!resolvedRelayOptions || !relayStateStore)
|
|
269
|
+
return;
|
|
270
|
+
await savePsLiteRelayState(relayStateStore, {
|
|
271
|
+
sessionId: resolvedRelayOptions.sessionId,
|
|
272
|
+
controlUrl: resolvedRelayOptions.controlUrl,
|
|
273
|
+
publicSuffix: resolvedRelayOptions.publicSuffix,
|
|
274
|
+
publicUrl: serverUrl,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
async function createOwnerRequest(params) {
|
|
278
|
+
const encoded = params.body === undefined
|
|
279
|
+
? undefined
|
|
280
|
+
: new TextEncoder().encode(JSON.stringify(params.body));
|
|
281
|
+
const auth = authFromOptions(params.authOptions);
|
|
282
|
+
if (auth) {
|
|
283
|
+
return createOwnerSignedPersonalServerRequest({
|
|
284
|
+
origin: params.origin,
|
|
285
|
+
path: params.path,
|
|
286
|
+
method: params.method,
|
|
287
|
+
body: encoded,
|
|
288
|
+
auth,
|
|
289
|
+
headers: params.headers,
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
return new Request(`${params.origin}${params.path}`, {
|
|
293
|
+
method: params.method,
|
|
294
|
+
body: encoded,
|
|
295
|
+
headers: params.headers,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
async function stop() {
|
|
299
|
+
if (status === "stopped")
|
|
300
|
+
return;
|
|
301
|
+
relayClient?.close("personal-server-stop");
|
|
302
|
+
relayClient = undefined;
|
|
303
|
+
runtime.deactivate();
|
|
304
|
+
await runtimeBundle?.syncManager?.stop?.();
|
|
305
|
+
setStatus("stopped");
|
|
306
|
+
}
|
|
307
|
+
return {
|
|
308
|
+
kind: "lite",
|
|
309
|
+
ready: (_options) => info(),
|
|
310
|
+
info,
|
|
311
|
+
prepareRegistration,
|
|
312
|
+
submitRegistration,
|
|
313
|
+
fetch: callFetch,
|
|
314
|
+
postData,
|
|
315
|
+
listData,
|
|
316
|
+
listAccessLogs,
|
|
317
|
+
listVersions,
|
|
318
|
+
readData,
|
|
319
|
+
createGrant,
|
|
320
|
+
listGrants,
|
|
321
|
+
revokeGrant,
|
|
322
|
+
syncStatus,
|
|
323
|
+
syncNow,
|
|
324
|
+
stop,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
function savedRelaySessionId(state, options) {
|
|
328
|
+
if (!state?.sessionId)
|
|
329
|
+
return null;
|
|
330
|
+
if (options.controlUrl && state.controlUrl !== options.controlUrl)
|
|
331
|
+
return null;
|
|
332
|
+
if (options.publicSuffix && state.publicSuffix !== options.publicSuffix) {
|
|
333
|
+
return null;
|
|
334
|
+
}
|
|
335
|
+
return state.sessionId;
|
|
336
|
+
}
|
|
337
|
+
function randomSessionId() {
|
|
338
|
+
const bytes = crypto.getRandomValues(new Uint8Array(12));
|
|
339
|
+
return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
340
|
+
}
|
|
341
|
+
function authFromOptions(options) {
|
|
342
|
+
if ("auth" in options && options.auth)
|
|
343
|
+
return options.auth;
|
|
344
|
+
if ("signMessage" in options)
|
|
345
|
+
return { signMessage: options.signMessage };
|
|
346
|
+
if ("bearerToken" in options)
|
|
347
|
+
return { bearerToken: options.bearerToken };
|
|
348
|
+
return undefined;
|
|
349
|
+
}
|
|
350
|
+
function requiredOwnerSignature(ownerSignature) {
|
|
351
|
+
if (!ownerSignature) {
|
|
352
|
+
throw new Error("ownerSignature is required to start PS Lite");
|
|
353
|
+
}
|
|
354
|
+
return ownerSignature;
|
|
355
|
+
}
|
|
356
|
+
function configDefaultsWithOrigin(defaults, origin) {
|
|
357
|
+
return {
|
|
358
|
+
...defaults,
|
|
359
|
+
server: {
|
|
360
|
+
...defaults?.server,
|
|
361
|
+
origin,
|
|
362
|
+
},
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
function requiredGatewayUrl(info) {
|
|
366
|
+
if (!info.gatewayUrl) {
|
|
367
|
+
throw new Error("Personal Server gateway URL is required");
|
|
368
|
+
}
|
|
369
|
+
return info.gatewayUrl;
|
|
370
|
+
}
|
|
371
|
+
function requiredApiOrigin(info) {
|
|
372
|
+
if (!info.urls.apiOrigin) {
|
|
373
|
+
throw new Error("Personal Server API origin is required");
|
|
374
|
+
}
|
|
375
|
+
return info.urls.apiOrigin;
|
|
376
|
+
}
|
|
377
|
+
async function toRuntimeRequest(input, origin, init) {
|
|
378
|
+
const url = `${origin}${requestPath(input)}`;
|
|
379
|
+
if (input instanceof Request) {
|
|
380
|
+
// Rebuild onto the runtime origin with an explicitly buffered body.
|
|
381
|
+
// `new Request(url, request)` treats the request as an init bag and reads
|
|
382
|
+
// its body via the `Request.prototype.body` getter, which Firefox does
|
|
383
|
+
// not implement (no fetch upload streaming) - the body silently drops and
|
|
384
|
+
// every POST reaches the runtime empty ("Request body must be valid
|
|
385
|
+
// JSON"). Buffering via arrayBuffer() works in every engine.
|
|
386
|
+
const buffered = input.method === "GET" || input.method === "HEAD"
|
|
387
|
+
? undefined
|
|
388
|
+
: await input.clone().arrayBuffer();
|
|
389
|
+
const base = new Request(url, {
|
|
390
|
+
method: input.method,
|
|
391
|
+
headers: input.headers,
|
|
392
|
+
body: buffered && buffered.byteLength > 0 ? buffered : undefined,
|
|
393
|
+
signal: input.signal,
|
|
394
|
+
});
|
|
395
|
+
return init ? new Request(base, init) : base;
|
|
396
|
+
}
|
|
397
|
+
return new Request(url, init);
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|