@opendatalabs/personal-server-ts-lite 0.0.1-canary.794448c

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 (44) 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 +29 -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/index.d.ts +9 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +9 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/relay-tls.d.ts +19 -0
  17. package/dist/relay-tls.d.ts.map +1 -0
  18. package/dist/relay-tls.js +226 -0
  19. package/dist/relay-tls.js.map +1 -0
  20. package/dist/relay.d.ts +68 -0
  21. package/dist/relay.d.ts.map +1 -0
  22. package/dist/relay.js +361 -0
  23. package/dist/relay.js.map +1 -0
  24. package/dist/runtime.d.ts +79 -0
  25. package/dist/runtime.d.ts.map +1 -0
  26. package/dist/runtime.js +463 -0
  27. package/dist/runtime.js.map +1 -0
  28. package/dist/state.d.ts +58 -0
  29. package/dist/state.d.ts.map +1 -0
  30. package/dist/state.js +281 -0
  31. package/dist/state.js.map +1 -0
  32. package/dist/storage-utils.d.ts +7 -0
  33. package/dist/storage-utils.d.ts.map +1 -0
  34. package/dist/storage-utils.js +66 -0
  35. package/dist/storage-utils.js.map +1 -0
  36. package/dist/storage.d.ts +37 -0
  37. package/dist/storage.d.ts.map +1 -0
  38. package/dist/storage.js +282 -0
  39. package/dist/storage.js.map +1 -0
  40. package/dist/sync.d.ts +25 -0
  41. package/dist/sync.d.ts.map +1 -0
  42. package/dist/sync.js +62 -0
  43. package/dist/sync.js.map +1 -0
  44. package/package.json +40 -0
@@ -0,0 +1,9 @@
1
+ export { createIndexedDbPsLiteRuntime, type IndexedDbPsLiteRuntime, type IndexedDbPsLiteRuntimeOptions, } from "./browser-runtime.js";
2
+ export { handlePsLiteBridgeRequest, type PsLiteBridgeRequest, type PsLiteBridgeResponse, } from "./bridge.js";
3
+ export { createIndexedDbPsLitePersistence, createOpfsPsLiteDataFileStore, createPersistentPsLiteStorage, isOpfsAvailable, type IndexedDbPsLitePersistenceOptions, type PsLiteDataFileStore, type PsLiteFileStorageKind, type PsLitePersistedStorageState, type PsLitePersistenceAdapter, } from "./storage.js";
4
+ 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";
5
+ export { createPsLiteSyncCursor, createPsLiteSyncManager, type PsLiteSyncOptions, } from "./sync.js";
6
+ export { createBearerTokenPsLiteAuth, createPsLiteRuntime, createWeb3SignedPsLiteAuth, type BearerTokenPsLiteAuthOptions, type PsLiteAuthAdapter, type PsLiteReadAuthInput, type PsLiteRuntime, type PsLiteRuntimeOptions, type PsLiteStorageAdapter, type PsLiteTokenStore, type Web3SignedPsLiteAuthOptions, } from "./runtime.js";
7
+ 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";
8
+ export { createRustlsPsLiteRelayTlsFactory, psLiteRelayPublicHost, psLiteRelayPublicUrl as psLiteRelayTlsPublicUrl, type PsLiteRelayTlsIdentity, type RustlsPsLiteRelayTlsOptions, } from "./relay-tls.js";
9
+ //# 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,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,9 @@
1
+ export { createIndexedDbPsLiteRuntime, } from "./browser-runtime.js";
2
+ export { handlePsLiteBridgeRequest, } from "./bridge.js";
3
+ export { createIndexedDbPsLitePersistence, createOpfsPsLiteDataFileStore, createPersistentPsLiteStorage, isOpfsAvailable, } from "./storage.js";
4
+ export { createIndexedDbPsLiteAccessLogStore, createIndexedDbPsLiteStateStore, createIndexedDbPsLiteTokenStore, loadOrCreatePsLiteConfig, loadOrCreatePsLiteServerIdentity, savePsLiteConfig, } from "./state.js";
5
+ export { createPsLiteSyncCursor, createPsLiteSyncManager, } from "./sync.js";
6
+ export { createBearerTokenPsLiteAuth, createPsLiteRuntime, createWeb3SignedPsLiteAuth, } from "./runtime.js";
7
+ export { decodeDataFrame, encodeDataFrame, psLiteRelayControlUrl, psLiteRelayPublicUrl, startPsLiteRelayClient, } from "./relay.js";
8
+ export { createRustlsPsLiteRelayTlsFactory, psLiteRelayPublicHost, psLiteRelayPublicUrl as psLiteRelayTlsPublicUrl, } from "./relay-tls.js";
9
+ //# 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,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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"}