@opendatalabs/personal-server-ts-lite 0.0.1-canary.64b5ce8

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.
Files changed (48) hide show
  1. package/dist/bridge.d.ts +23 -0
  2. package/dist/bridge.d.ts.map +1 -0
  3. package/dist/bridge.js +53 -0
  4. package/dist/bridge.js.map +1 -0
  5. package/dist/browser-runtime.d.ts +30 -0
  6. package/dist/browser-runtime.d.ts.map +1 -0
  7. package/dist/browser-runtime.js +98 -0
  8. package/dist/browser-runtime.js.map +1 -0
  9. package/dist/browser-tls-rustls/browser_tls_rustls.d.ts +49 -0
  10. package/dist/browser-tls-rustls/browser_tls_rustls.js +401 -0
  11. package/dist/browser-tls-rustls/browser_tls_rustls_bg.wasm +0 -0
  12. package/dist/client.d.ts +19 -0
  13. package/dist/client.d.ts.map +1 -0
  14. package/dist/client.js +181 -0
  15. package/dist/client.js.map +1 -0
  16. package/dist/index.d.ts +11 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +10 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/relay-tls.d.ts +19 -0
  21. package/dist/relay-tls.d.ts.map +1 -0
  22. package/dist/relay-tls.js +226 -0
  23. package/dist/relay-tls.js.map +1 -0
  24. package/dist/relay.d.ts +68 -0
  25. package/dist/relay.d.ts.map +1 -0
  26. package/dist/relay.js +361 -0
  27. package/dist/relay.js.map +1 -0
  28. package/dist/runtime.d.ts +79 -0
  29. package/dist/runtime.d.ts.map +1 -0
  30. package/dist/runtime.js +465 -0
  31. package/dist/runtime.js.map +1 -0
  32. package/dist/state.d.ts +58 -0
  33. package/dist/state.d.ts.map +1 -0
  34. package/dist/state.js +281 -0
  35. package/dist/state.js.map +1 -0
  36. package/dist/storage-utils.d.ts +7 -0
  37. package/dist/storage-utils.d.ts.map +1 -0
  38. package/dist/storage-utils.js +66 -0
  39. package/dist/storage-utils.js.map +1 -0
  40. package/dist/storage.d.ts +37 -0
  41. package/dist/storage.d.ts.map +1 -0
  42. package/dist/storage.js +282 -0
  43. package/dist/storage.js.map +1 -0
  44. package/dist/sync.d.ts +25 -0
  45. package/dist/sync.d.ts.map +1 -0
  46. package/dist/sync.js +62 -0
  47. package/dist/sync.js.map +1 -0
  48. package/package.json +40 -0
@@ -0,0 +1,19 @@
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
+ export interface StartPersonalServerLiteRelayOptions extends Omit<PsLiteRelayClientOptions, "runtime" | "onStatus"> {
7
+ onStatus?: PsLiteRelayClientOptions["onStatus"];
8
+ }
9
+ export interface StartPersonalServerLiteOptions extends Omit<IndexedDbPsLiteRuntimeOptions, "ownerSignature" | "active"> {
10
+ ownerSignature?: `0x${string}`;
11
+ active?: boolean;
12
+ runtime?: PsLiteRuntime;
13
+ localOrigin?: string;
14
+ relay?: false | StartPersonalServerLiteRelayOptions;
15
+ gateway?: GatewayClient;
16
+ onStatus?: (status: PersonalServerStatus) => void;
17
+ }
18
+ export declare function startPersonalServer(options: StartPersonalServerLiteOptions): Promise<PersonalServerHandle>;
19
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,oBAAoB,EAOzB,KAAK,oBAAoB,EAE1B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAIL,KAAK,wBAAwB,EAE9B,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD,MAAM,WAAW,mCAAoC,SAAQ,IAAI,CAC/D,wBAAwB,EACxB,SAAS,GAAG,UAAU,CACvB;IACC,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,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,CAkK/B"}
package/dist/client.js ADDED
@@ -0,0 +1,181 @@
1
+ import { createOwnerSignedPersonalServerRequest, createPersonalServerInfoFromHealth, createPersonalServerRegistrationRequest, 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 { psLiteRelayPublicUrl, startPsLiteRelayClient, } from "./relay.js";
5
+ const DEFAULT_LITE_ORIGIN = "https://ps-lite.local";
6
+ export async function startPersonalServer(options) {
7
+ const localOrigin = options.localOrigin ?? DEFAULT_LITE_ORIGIN;
8
+ const relayOptions = options.relay || undefined;
9
+ const initialPublicUrl = relayOptions
10
+ ? psLiteRelayPublicUrl(relayOptions.sessionId, relayOptions.publicSuffix)
11
+ : null;
12
+ const runtimeOrigin = initialPublicUrl ?? localOrigin;
13
+ const runtimeBundle = options.runtime
14
+ ? null
15
+ : await createIndexedDbPsLiteRuntime({
16
+ ...options,
17
+ ownerSignature: requiredOwnerSignature(options.ownerSignature),
18
+ active: options.active ?? true,
19
+ runtimeOrigin,
20
+ configDefaults: configDefaultsWithOrigin(options.configDefaults, runtimeOrigin),
21
+ });
22
+ const runtime = options.runtime ?? runtimeBundle.runtime;
23
+ if (options.active ?? true) {
24
+ runtime.activate();
25
+ }
26
+ let status = "ready";
27
+ let relayStatus = "closed";
28
+ let relayClient;
29
+ let publicUrl = null;
30
+ let lastInfo = null;
31
+ const gateway = options.gateway;
32
+ const setStatus = (nextStatus) => {
33
+ status = nextStatus;
34
+ options.onStatus?.(nextStatus);
35
+ };
36
+ if (relayOptions) {
37
+ relayStatus = "connecting";
38
+ publicUrl = initialPublicUrl;
39
+ relayClient = startPsLiteRelayClient({
40
+ ...relayOptions,
41
+ runtime,
42
+ origin: runtimeOrigin,
43
+ onStatus(nextRelayStatus) {
44
+ relayStatus = nextRelayStatus;
45
+ if (nextRelayStatus === "error")
46
+ setStatus("error");
47
+ relayOptions.onStatus?.(nextRelayStatus);
48
+ },
49
+ });
50
+ }
51
+ async function info() {
52
+ if (status === "stopped" && lastInfo) {
53
+ return { ...lastInfo, status: "stopped" };
54
+ }
55
+ const response = await runtime.fetch(new Request(`${localOrigin}/health`));
56
+ const body = await response.json();
57
+ lastInfo = createPersonalServerInfoFromHealth({
58
+ kind: "lite",
59
+ status,
60
+ health: {
61
+ ...body,
62
+ relay: { status: relayStatus, publicUrl },
63
+ },
64
+ localUrl: localOrigin,
65
+ publicUrl,
66
+ });
67
+ return lastInfo;
68
+ }
69
+ async function prepareRegistration(prepareOptions = {}) {
70
+ const current = await info();
71
+ const serverUrl = prepareOptions.serverUrl ?? current.urls.registration;
72
+ if (!current.ownerAddress || !current.server || !serverUrl) {
73
+ throw new Error("Personal Server identity and URL are required");
74
+ }
75
+ if (!current.gatewayConfig) {
76
+ throw new Error("Personal Server gateway config is required");
77
+ }
78
+ return createPersonalServerRegistrationRequest({
79
+ gatewayConfig: current.gatewayConfig,
80
+ ownerAddress: current.ownerAddress,
81
+ serverAddress: current.server.address,
82
+ publicKey: current.server.publicKey,
83
+ serverUrl,
84
+ });
85
+ }
86
+ async function submitRegistration(submitOptions) {
87
+ const request = await prepareRegistration();
88
+ const gatewayClient = gateway ?? createGatewayClient(requiredGatewayUrl(await info()));
89
+ return submitPersonalServerRegistration({
90
+ gateway: gatewayClient,
91
+ request,
92
+ signature: submitOptions.signature,
93
+ });
94
+ }
95
+ async function callFetch(input, init) {
96
+ const origin = (await info()).urls.apiOrigin ?? localOrigin;
97
+ return runtime.fetch(toRuntimeRequest(input, origin, init));
98
+ }
99
+ async function postData(scope, body, postOptions) {
100
+ const current = await info();
101
+ const origin = requiredApiOrigin(current);
102
+ const path = `/v1/data/${encodeURIComponent(scope)}`;
103
+ const encoded = new TextEncoder().encode(JSON.stringify(body));
104
+ const request = await createOwnerSignedPersonalServerRequest({
105
+ origin,
106
+ path,
107
+ method: "POST",
108
+ body: encoded,
109
+ auth: authFromOptions(postOptions),
110
+ headers: {
111
+ "Content-Type": "application/json",
112
+ ...postOptions.headers,
113
+ },
114
+ });
115
+ const response = await callFetch(request);
116
+ if (!response.ok) {
117
+ throw new Error(`Personal Server data write failed: ${response.status}`);
118
+ }
119
+ return (await response.json());
120
+ }
121
+ async function stop() {
122
+ if (status === "stopped")
123
+ return;
124
+ relayClient?.close("personal-server-stop");
125
+ relayClient = undefined;
126
+ runtime.deactivate();
127
+ await runtimeBundle?.syncManager?.stop?.();
128
+ setStatus("stopped");
129
+ }
130
+ return {
131
+ kind: "lite",
132
+ ready: (_options) => info(),
133
+ info,
134
+ prepareRegistration,
135
+ submitRegistration,
136
+ fetch: callFetch,
137
+ postData,
138
+ stop,
139
+ };
140
+ }
141
+ function requiredOwnerSignature(ownerSignature) {
142
+ if (!ownerSignature) {
143
+ throw new Error("ownerSignature is required to start PS Lite");
144
+ }
145
+ return ownerSignature;
146
+ }
147
+ function configDefaultsWithOrigin(defaults, origin) {
148
+ return {
149
+ ...defaults,
150
+ server: {
151
+ ...defaults?.server,
152
+ origin,
153
+ },
154
+ };
155
+ }
156
+ function requiredGatewayUrl(info) {
157
+ if (!info.gatewayUrl) {
158
+ throw new Error("Personal Server gateway URL is required");
159
+ }
160
+ return info.gatewayUrl;
161
+ }
162
+ function requiredApiOrigin(info) {
163
+ if (!info.urls.apiOrigin) {
164
+ throw new Error("Personal Server API origin is required");
165
+ }
166
+ return info.urls.apiOrigin;
167
+ }
168
+ function authFromOptions(options) {
169
+ if ("signMessage" in options)
170
+ return { signMessage: options.signMessage };
171
+ return { bearerToken: options.bearerToken };
172
+ }
173
+ function toRuntimeRequest(input, origin, init) {
174
+ const url = `${origin}${requestPath(input)}`;
175
+ if (input instanceof Request) {
176
+ const base = new Request(url, input);
177
+ return init ? new Request(base, init) : base;
178
+ }
179
+ return new Request(url, init);
180
+ }
181
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
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, PersonalServerInfo, PersonalServerRegistrationRequest, PersonalServerStatus, } from "@opendatalabs/personal-server-ts-core/client";
4
+ export { handlePsLiteBridgeRequest, type PsLiteBridgeRequest, type PsLiteBridgeResponse, } from "./bridge.js";
5
+ export { createIndexedDbPsLitePersistence, createOpfsPsLiteDataFileStore, createPersistentPsLiteStorage, isOpfsAvailable, type IndexedDbPsLitePersistenceOptions, type PsLiteDataFileStore, type PsLiteFileStorageKind, type PsLitePersistedStorageState, type PsLitePersistenceAdapter, } from "./storage.js";
6
+ export { createIndexedDbPsLiteAccessLogStore, createIndexedDbPsLiteStateStore, createIndexedDbPsLiteTokenStore, loadOrCreatePsLiteConfig, loadOrCreatePsLiteServerIdentity, savePsLiteConfig, type IndexedDbPsLiteAccessLogStoreOptions, type IndexedDbPsLiteStateStoreOptions, type IndexedDbPsLiteTokenStoreOptions, type PsLiteEncryptedPrivateKey, type PsLiteEncryptedServerIdentity, type PsLiteRelayState, type PsLiteStateKey, type PsLiteStateStore, type PsLiteUnlockedServerIdentity, } from "./state.js";
7
+ export { createPsLiteSyncCursor, createPsLiteSyncManager, type PsLiteSyncOptions, } from "./sync.js";
8
+ export { createBearerTokenPsLiteAuth, createPsLiteRuntime, createWeb3SignedPsLiteAuth, type BearerTokenPsLiteAuthOptions, type PsLiteAuthAdapter, type PsLiteReadAuthInput, type PsLiteRuntime, type PsLiteRuntimeOptions, type PsLiteStorageAdapter, type PsLiteTokenStore, type Web3SignedPsLiteAuthOptions, } from "./runtime.js";
9
+ 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";
10
+ export { createRustlsPsLiteRelayTlsFactory, psLiteRelayPublicHost, psLiteRelayPublicUrl as psLiteRelayTlsPublicUrl, type PsLiteRelayTlsIdentity, type RustlsPsLiteRelayTlsOptions, } from "./relay-tls.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,GACnC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EACnB,KAAK,8BAA8B,EACnC,KAAK,mCAAmC,GACzC,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,iCAAiC,EACjC,oBAAoB,GACrB,MAAM,8CAA8C,CAAC;AAEtD,OAAO,EACL,yBAAyB,EACzB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gCAAgC,EAChC,6BAA6B,EAC7B,6BAA6B,EAC7B,eAAe,EACf,KAAK,iCAAiC,EACtC,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,GAC9B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,mCAAmC,EACnC,+BAA+B,EAC/B,+BAA+B,EAC/B,wBAAwB,EACxB,gCAAgC,EAChC,gBAAgB,EAChB,KAAK,oCAAoC,EACzC,KAAK,gCAAgC,EACrC,KAAK,gCAAgC,EACrC,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,EAClC,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,GAClC,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,iBAAiB,GACvB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,0BAA0B,EAC1B,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,2BAA2B,GACjC,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,GACjC,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iCAAiC,EACjC,qBAAqB,EACrB,oBAAoB,IAAI,uBAAuB,EAC/C,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,GACjC,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export { createIndexedDbPsLiteRuntime, } from "./browser-runtime.js";
2
+ export { startPersonalServer, } from "./client.js";
3
+ export { handlePsLiteBridgeRequest, } from "./bridge.js";
4
+ export { createIndexedDbPsLitePersistence, createOpfsPsLiteDataFileStore, createPersistentPsLiteStorage, isOpfsAvailable, } from "./storage.js";
5
+ export { createIndexedDbPsLiteAccessLogStore, createIndexedDbPsLiteStateStore, createIndexedDbPsLiteTokenStore, loadOrCreatePsLiteConfig, loadOrCreatePsLiteServerIdentity, savePsLiteConfig, } from "./state.js";
6
+ export { createPsLiteSyncCursor, createPsLiteSyncManager, } from "./sync.js";
7
+ export { createBearerTokenPsLiteAuth, createPsLiteRuntime, createWeb3SignedPsLiteAuth, } from "./runtime.js";
8
+ export { decodeDataFrame, encodeDataFrame, psLiteRelayControlUrl, psLiteRelayPublicUrl, startPsLiteRelayClient, } from "./relay.js";
9
+ export { createRustlsPsLiteRelayTlsFactory, psLiteRelayPublicHost, psLiteRelayPublicUrl as psLiteRelayTlsPublicUrl, } from "./relay-tls.js";
10
+ //# 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;AAQrB,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,gBAAgB,GAUjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,uBAAuB,GAExB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,0BAA0B,GAS3B,MAAM,cAAc,CAAC;AAEtB,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,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"}
@@ -0,0 +1,226 @@
1
+ import forge from "node-forge";
2
+ import initRustls, { TlsServer as RustlsServer, } from "./browser-tls-rustls/browser_tls_rustls.js";
3
+ const TLS_IDENTITY_CACHE_KEY = "personal-server-lite-tls-identity-v1";
4
+ const DEFAULT_PUBLIC_SUFFIX = "34.16.49.200.sslip.io";
5
+ let rustlsInitPromise;
6
+ export function createRustlsPsLiteRelayTlsFactory(options) {
7
+ let identityPromise;
8
+ return {
9
+ async prepare(input) {
10
+ identityPromise ??= createTlsIdentity(input, options);
11
+ await identityPromise;
12
+ },
13
+ async createStream(input) {
14
+ await ensureRustls();
15
+ identityPromise ??= createTlsIdentity(input, options);
16
+ const identity = await identityPromise;
17
+ const tls = new RustlsServer(identity.certPem, identity.keyPem);
18
+ return createRustlsStream(tls);
19
+ },
20
+ };
21
+ }
22
+ export function psLiteRelayPublicHost(sessionId, publicSuffix = DEFAULT_PUBLIC_SUFFIX) {
23
+ return `${sessionId}.${publicSuffix.replace(/^\./, "")}`;
24
+ }
25
+ export function psLiteRelayPublicUrl(sessionId, publicSuffix = DEFAULT_PUBLIC_SUFFIX) {
26
+ return `https://${psLiteRelayPublicHost(sessionId, publicSuffix)}`;
27
+ }
28
+ function createRustlsStream(tls) {
29
+ return {
30
+ processTls(payload) {
31
+ return normalizeTlsStep(tls.process_tls(payload));
32
+ },
33
+ writePlaintext(payload, endStream) {
34
+ return normalizeTlsStep(tls.write_plaintext(payload, endStream));
35
+ },
36
+ close() {
37
+ tls.free();
38
+ },
39
+ };
40
+ }
41
+ function ensureRustls() {
42
+ rustlsInitPromise ??= initRustls();
43
+ return rustlsInitPromise;
44
+ }
45
+ function normalizeTlsStep(value) {
46
+ const step = value;
47
+ return {
48
+ plaintext: step.plaintext instanceof Uint8Array ? step.plaintext : new Uint8Array(),
49
+ tls: step.tls instanceof Uint8Array ? step.tls : new Uint8Array(),
50
+ handshaking: Boolean(step.handshaking),
51
+ };
52
+ }
53
+ async function createTlsIdentity(input, options) {
54
+ const hostname = psLiteRelayPublicHost(input.sessionId, options.publicSuffix);
55
+ const cached = readCachedTlsIdentity(hostname, options.storage);
56
+ if (cached) {
57
+ return cached;
58
+ }
59
+ const keys = await generateKeyPair();
60
+ const keyPem = forge.pki.privateKeyToPem(keys.privateKey);
61
+ const csrPem = createCsrPem(hostname, keys);
62
+ const issued = await requestAcmeCertificate({
63
+ issuerUrl: resolveCertIssuerUrl(options),
64
+ sessionId: input.sessionId,
65
+ csrPem,
66
+ keyPem,
67
+ issueToken: input.issueToken ?? "",
68
+ hostname,
69
+ storage: options.storage,
70
+ logger: options.logger,
71
+ });
72
+ if (issued) {
73
+ return issued;
74
+ }
75
+ return createSelfSignedIdentity(hostname, keyPem, keys);
76
+ }
77
+ function generateKeyPair() {
78
+ return new Promise((resolve, reject) => {
79
+ forge.pki.rsa.generateKeyPair({ bits: 2048, workers: -1 }, (error, keyPair) => {
80
+ if (error || !keyPair) {
81
+ reject(error ?? new Error("failed to generate keypair"));
82
+ return;
83
+ }
84
+ resolve(keyPair);
85
+ });
86
+ });
87
+ }
88
+ function createCsrPem(hostname, keys) {
89
+ const csr = forge.pki.createCertificationRequest();
90
+ csr.publicKey = keys.publicKey;
91
+ csr.setSubject([{ name: "commonName", value: hostname }]);
92
+ csr.setAttributes([
93
+ {
94
+ name: "extensionRequest",
95
+ extensions: [
96
+ {
97
+ name: "subjectAltName",
98
+ altNames: [{ type: 2, value: hostname }],
99
+ },
100
+ ],
101
+ },
102
+ ]);
103
+ csr.sign(keys.privateKey, forge.md.sha256.create());
104
+ return forge.pki.certificationRequestToPem(csr);
105
+ }
106
+ function createSelfSignedIdentity(hostname, keyPem, keys) {
107
+ const cert = forge.pki.createCertificate();
108
+ cert.publicKey = keys.publicKey;
109
+ cert.serialNumber = Array.from(crypto.getRandomValues(new Uint8Array(12)), (byte) => byte.toString(16).padStart(2, "0")).join("");
110
+ cert.validity.notBefore = new Date(Date.now() - 60_000);
111
+ cert.validity.notAfter = new Date(Date.now() + 24 * 60 * 60 * 1000);
112
+ const attrs = [{ name: "commonName", value: hostname }];
113
+ cert.setSubject(attrs);
114
+ cert.setIssuer(attrs);
115
+ cert.setExtensions([
116
+ { name: "basicConstraints", cA: false },
117
+ { name: "keyUsage", digitalSignature: true, keyEncipherment: true },
118
+ { name: "extKeyUsage", serverAuth: true },
119
+ {
120
+ name: "subjectAltName",
121
+ altNames: [{ type: 2, value: hostname }],
122
+ },
123
+ ]);
124
+ cert.sign(keys.privateKey, forge.md.sha256.create());
125
+ return {
126
+ certPem: forge.pki.certificateToPem(cert),
127
+ keyPem,
128
+ hostname,
129
+ source: "self-signed",
130
+ trusted: false,
131
+ };
132
+ }
133
+ async function requestAcmeCertificate(input) {
134
+ if (!input.issueToken) {
135
+ input.logger?.("ACME issuer token unavailable; using self-signed certificate");
136
+ return undefined;
137
+ }
138
+ try {
139
+ const response = await fetch(input.issuerUrl, {
140
+ method: "POST",
141
+ headers: { "content-type": "application/json" },
142
+ body: JSON.stringify({
143
+ sessionId: input.sessionId,
144
+ csrPem: input.csrPem,
145
+ issueToken: input.issueToken,
146
+ }),
147
+ });
148
+ if (!response.ok) {
149
+ const detail = await response.text();
150
+ input.logger?.(`ACME issuer unavailable (${response.status}); using self-signed certificate`);
151
+ input.logger?.(detail.slice(0, 240));
152
+ return undefined;
153
+ }
154
+ const payload = (await response.json());
155
+ if (!payload.certPem) {
156
+ input.logger?.("ACME issuer returned no certificate; using self-signed certificate");
157
+ return undefined;
158
+ }
159
+ const identity = {
160
+ certPem: payload.certPem,
161
+ keyPem: input.keyPem,
162
+ hostname: input.hostname,
163
+ source: "acme",
164
+ trusted: true,
165
+ };
166
+ cacheTlsIdentity(identity, input.storage);
167
+ return identity;
168
+ }
169
+ catch (error) {
170
+ input.logger?.(error instanceof Error ? error.message : String(error));
171
+ input.logger?.("ACME certificate request failed; using self-signed certificate");
172
+ return undefined;
173
+ }
174
+ }
175
+ function resolveCertIssuerUrl(options) {
176
+ if (options.certIssuerUrl) {
177
+ return options.certIssuerUrl.replace(/\/+$/, "");
178
+ }
179
+ const url = new URL(options.controlUrl);
180
+ url.protocol = url.protocol === "wss:" ? "https:" : "http:";
181
+ url.pathname = "/issue-cert";
182
+ url.search = "";
183
+ url.hash = "";
184
+ return url.toString();
185
+ }
186
+ function readCachedTlsIdentity(hostname, storage = globalThis.localStorage) {
187
+ try {
188
+ const raw = storage.getItem(`${TLS_IDENTITY_CACHE_KEY}:${hostname}`);
189
+ if (!raw) {
190
+ return undefined;
191
+ }
192
+ const identity = JSON.parse(raw);
193
+ if (identity.hostname !== hostname ||
194
+ !identity.certPem ||
195
+ !identity.keyPem ||
196
+ identity.source !== "acme") {
197
+ return undefined;
198
+ }
199
+ const notAfter = firstCertificateNotAfter(identity.certPem);
200
+ if (notAfter.getTime() - Date.now() < 24 * 60 * 60 * 1000) {
201
+ return undefined;
202
+ }
203
+ return {
204
+ ...identity,
205
+ source: "cached-acme",
206
+ trusted: true,
207
+ };
208
+ }
209
+ catch {
210
+ return undefined;
211
+ }
212
+ }
213
+ function cacheTlsIdentity(identity, storage = globalThis.localStorage) {
214
+ if (identity.source !== "acme") {
215
+ return;
216
+ }
217
+ storage.setItem(`${TLS_IDENTITY_CACHE_KEY}:${identity.hostname}`, JSON.stringify(identity));
218
+ }
219
+ function firstCertificateNotAfter(certPem) {
220
+ const match = certPem.match(/-----BEGIN CERTIFICATE-----[\s\S]+?-----END CERTIFICATE-----/);
221
+ if (!match) {
222
+ return new Date(0);
223
+ }
224
+ return forge.pki.certificateFromPem(match[0]).validity.notAfter;
225
+ }
226
+ //# sourceMappingURL=relay-tls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-tls.js","sourceRoot":"","sources":["../src/relay-tls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { PsLiteRuntime } from "./runtime.js";
2
+ export interface PsLiteRelayClientOptions {
3
+ sessionId: string;
4
+ runtime: PsLiteRuntime;
5
+ controlUrl?: string;
6
+ publicSuffix?: string;
7
+ certIssuerUrl?: string;
8
+ origin?: string;
9
+ webSocketFactory?: PsLiteRelayWebSocketFactory;
10
+ tls?: PsLiteRelayTlsFactory | false;
11
+ logger?: (line: string) => void;
12
+ onStatus?: (status: PsLiteRelayStatus) => void;
13
+ }
14
+ export type PsLiteRelayStatus = "connecting" | "connected" | "disconnected" | "closed" | "error";
15
+ export interface PsLiteRelayClient {
16
+ readonly sessionId: string;
17
+ readonly url: string;
18
+ close(reason?: string): void;
19
+ }
20
+ export interface PsLiteRelayWebSocketFactory {
21
+ (url: string): PsLiteRelayWebSocket;
22
+ }
23
+ export interface PsLiteRelayWebSocket {
24
+ binaryType: string;
25
+ readonly readyState: number;
26
+ readonly OPEN: number;
27
+ readonly CONNECTING: number;
28
+ onopen: (() => void) | null;
29
+ onmessage: ((event: {
30
+ data: string | ArrayBuffer | Uint8Array;
31
+ }) => void) | null;
32
+ onclose: (() => void) | null;
33
+ onerror: (() => void) | null;
34
+ send(data: string | Uint8Array): void;
35
+ close(code?: number, reason?: string): void;
36
+ }
37
+ export interface PsLiteRelayTlsFactory {
38
+ prepare?(input: PsLiteRelayTlsPrepareInput): Promise<void>;
39
+ createStream(input: PsLiteRelayTlsStreamInput): Promise<PsLiteRelayTlsStream>;
40
+ }
41
+ export interface PsLiteRelayTlsPrepareInput {
42
+ sessionId: string;
43
+ issueToken?: string;
44
+ }
45
+ export interface PsLiteRelayTlsStreamInput {
46
+ sessionId: string;
47
+ streamId: number;
48
+ issueToken?: string;
49
+ }
50
+ export interface PsLiteRelayTlsStream {
51
+ processTls(payload: Uint8Array): PsLiteRelayTlsStep;
52
+ writePlaintext(payload: Uint8Array, endStream: boolean): PsLiteRelayTlsStep;
53
+ close?(): void;
54
+ }
55
+ export interface PsLiteRelayTlsStep {
56
+ plaintext: Uint8Array;
57
+ tls: Uint8Array;
58
+ handshaking?: boolean;
59
+ }
60
+ export declare function psLiteRelayControlUrl(sessionId: string, controlUrl?: string): string;
61
+ export declare function psLiteRelayPublicUrl(sessionId: string, publicSuffix?: string): string;
62
+ export declare function startPsLiteRelayClient(options: PsLiteRelayClientOptions): PsLiteRelayClient;
63
+ export declare function encodeDataFrame(streamId: number, payload: Uint8Array): Uint8Array;
64
+ export declare function decodeDataFrame(data: string | ArrayBuffer | Uint8Array): {
65
+ streamId: number;
66
+ payload: Uint8Array;
67
+ } | null;
68
+ //# sourceMappingURL=relay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"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"}