@opendatalabs/personal-server-ts-lite 0.0.1-canary.9ce2194

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 +81 -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 +76 -0
  25. package/dist/runtime.d.ts.map +1 -0
  26. package/dist/runtime.js +543 -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,282 @@
1
+ import { createStorageReadMethods, sortEntries } from "./storage-utils.js";
2
+ const DEFAULT_INDEXED_DB_NAME = "personal-server-lite-storage";
3
+ const DEFAULT_INDEXED_DB_STORE = "state";
4
+ const DEFAULT_INDEXED_DB_KEY = "data-storage-v1";
5
+ function initialState() {
6
+ return {
7
+ version: 1,
8
+ nextId: 1,
9
+ entries: [],
10
+ envelopes: [],
11
+ };
12
+ }
13
+ function envelopePath(scope, collectedAt) {
14
+ return `data/${scope}/${collectedAt}.json`;
15
+ }
16
+ function normalizeState(state) {
17
+ if (!state || state.version !== 1) {
18
+ return initialState();
19
+ }
20
+ return {
21
+ version: 1,
22
+ nextId: Math.max(state.nextId, 1),
23
+ entries: state.entries.map((entry) => ({
24
+ ...entry,
25
+ schemaId: entry.schemaId ?? null,
26
+ })),
27
+ envelopes: state.envelopes,
28
+ };
29
+ }
30
+ export function createIndexedDbFallbackDataFileStore(envelopes) {
31
+ return {
32
+ kind: "indexeddb",
33
+ async readEnvelope(path) {
34
+ return envelopes.get(path) ?? null;
35
+ },
36
+ async writeEnvelope(path, envelope) {
37
+ envelopes.set(path, envelope);
38
+ return new TextEncoder().encode(JSON.stringify(envelope)).length;
39
+ },
40
+ async deleteEnvelope(path) {
41
+ envelopes.delete(path);
42
+ },
43
+ };
44
+ }
45
+ async function getOrCreateOpfsDirectory(root, parts) {
46
+ let dir = root;
47
+ for (const part of parts) {
48
+ dir = await dir.getDirectoryHandle(part, { create: true });
49
+ }
50
+ return dir;
51
+ }
52
+ async function getOpfsFileHandle(root, path, options) {
53
+ const parts = path.split("/").filter(Boolean);
54
+ const fileName = parts.pop();
55
+ if (!fileName) {
56
+ throw new Error("OPFS path must include a file name");
57
+ }
58
+ const dir = await getOrCreateOpfsDirectory(root, parts);
59
+ return dir.getFileHandle(fileName, options);
60
+ }
61
+ export async function isOpfsAvailable() {
62
+ return (typeof navigator !== "undefined" &&
63
+ typeof navigator.storage?.getDirectory === "function");
64
+ }
65
+ export async function createOpfsPsLiteDataFileStore() {
66
+ if (!(await isOpfsAvailable())) {
67
+ throw new Error("OPFS is not available in this runtime");
68
+ }
69
+ const root = await navigator.storage.getDirectory();
70
+ return {
71
+ kind: "opfs",
72
+ async readEnvelope(path) {
73
+ try {
74
+ const handle = await getOpfsFileHandle(root, path);
75
+ const file = await handle.getFile();
76
+ return JSON.parse(await file.text());
77
+ }
78
+ catch (err) {
79
+ if (err instanceof DOMException && err.name === "NotFoundError") {
80
+ return null;
81
+ }
82
+ throw err;
83
+ }
84
+ },
85
+ async writeEnvelope(path, envelope) {
86
+ const encoded = JSON.stringify(envelope);
87
+ const handle = await getOpfsFileHandle(root, path, { create: true });
88
+ const writable = await handle.createWritable();
89
+ await writable.write(encoded);
90
+ await writable.close();
91
+ return new TextEncoder().encode(encoded).length;
92
+ },
93
+ async deleteEnvelope(path) {
94
+ const parts = path.split("/").filter(Boolean);
95
+ const fileName = parts.pop();
96
+ if (!fileName)
97
+ return;
98
+ try {
99
+ const dir = await getOrCreateOpfsDirectory(root, parts);
100
+ await dir.removeEntry(fileName);
101
+ }
102
+ catch (err) {
103
+ if (err instanceof DOMException && err.name === "NotFoundError") {
104
+ return;
105
+ }
106
+ throw err;
107
+ }
108
+ },
109
+ };
110
+ }
111
+ function openIndexedDb(dbName, storeName) {
112
+ if (typeof indexedDB === "undefined") {
113
+ throw new Error("IndexedDB is not available in this runtime");
114
+ }
115
+ return new Promise((resolve, reject) => {
116
+ const request = indexedDB.open(dbName, 1);
117
+ request.onupgradeneeded = () => {
118
+ const db = request.result;
119
+ if (!db.objectStoreNames.contains(storeName)) {
120
+ db.createObjectStore(storeName);
121
+ }
122
+ };
123
+ request.onsuccess = () => resolve(request.result);
124
+ request.onerror = () => reject(request.error);
125
+ });
126
+ }
127
+ function runIndexedDbTransaction(options, mode, callback) {
128
+ return openIndexedDb(options.dbName, options.storeName).then((db) => new Promise((resolve, reject) => {
129
+ const transaction = db.transaction(options.storeName, mode);
130
+ const store = transaction.objectStore(options.storeName);
131
+ const request = callback(store);
132
+ request.onsuccess = () => resolve(request.result);
133
+ request.onerror = () => reject(request.error);
134
+ transaction.oncomplete = () => db.close();
135
+ transaction.onerror = () => {
136
+ db.close();
137
+ reject(transaction.error);
138
+ };
139
+ }));
140
+ }
141
+ export function createIndexedDbPsLitePersistence(options = {}) {
142
+ const resolved = {
143
+ dbName: options.dbName ?? DEFAULT_INDEXED_DB_NAME,
144
+ storeName: options.storeName ?? DEFAULT_INDEXED_DB_STORE,
145
+ key: options.key ?? DEFAULT_INDEXED_DB_KEY,
146
+ };
147
+ return {
148
+ async read() {
149
+ const state = await runIndexedDbTransaction(resolved, "readonly", (store) => store.get(resolved.key));
150
+ return state ?? null;
151
+ },
152
+ async write(state) {
153
+ await runIndexedDbTransaction(resolved, "readwrite", (store) => store.put(state, resolved.key));
154
+ },
155
+ };
156
+ }
157
+ export async function createPersistentPsLiteStorage(adapter, persistence = createIndexedDbPsLitePersistence(), dataFileStore) {
158
+ let state = normalizeState(await persistence.read());
159
+ const fallbackEnvelopes = new Map(state.envelopes.map((envelope) => [
160
+ envelopePath(envelope.scope, envelope.collectedAt),
161
+ envelope,
162
+ ]));
163
+ const fallbackStore = createIndexedDbFallbackDataFileStore(fallbackEnvelopes);
164
+ const fileStore = dataFileStore ??
165
+ (adapter.kind !== "custom" && (await isOpfsAvailable())
166
+ ? await createOpfsPsLiteDataFileStore()
167
+ : fallbackStore);
168
+ const capabilities = {
169
+ metadata: adapter.kind === "custom" ? "custom" : "indexeddb",
170
+ files: fileStore.kind,
171
+ opfsAvailable: await isOpfsAvailable(),
172
+ };
173
+ async function persist() {
174
+ state = {
175
+ ...state,
176
+ envelopes: fileStore.kind === "indexeddb"
177
+ ? Array.from(fallbackEnvelopes.values())
178
+ : [],
179
+ };
180
+ await persistence.write(state);
181
+ }
182
+ function entriesForScope(scope) {
183
+ return sortEntries(state.entries.filter((entry) => entry.scope === scope));
184
+ }
185
+ function persistLater() {
186
+ void persist();
187
+ }
188
+ const storagePort = {
189
+ kind: adapter.kind === "custom" ? "custom" : "browser-indexeddb-opfs",
190
+ capabilities,
191
+ ...createStorageReadMethods(() => state.entries, entriesForScope),
192
+ findByFileId(fileId) {
193
+ return state.entries.find((entry) => entry.fileId === fileId);
194
+ },
195
+ findUnsynced(options) {
196
+ const entries = state.entries
197
+ .filter((entry) => entry.fileId === null)
198
+ .sort((a, b) => a.createdAt.localeCompare(b.createdAt));
199
+ return options?.limit === undefined
200
+ ? entries
201
+ : entries.slice(0, options.limit);
202
+ },
203
+ async readEnvelope(scope, collectedAt) {
204
+ const path = envelopePath(scope, collectedAt);
205
+ const envelope = (await fileStore.readEnvelope(path)) ??
206
+ (await fallbackStore.readEnvelope(path));
207
+ if (!envelope) {
208
+ throw new Error("Envelope not found");
209
+ }
210
+ return envelope;
211
+ },
212
+ async writeEnvelope(envelope) {
213
+ const path = envelopePath(envelope.scope, envelope.collectedAt);
214
+ const sizeBytes = await fileStore.writeEnvelope(path, envelope);
215
+ if (fileStore.kind !== "indexeddb") {
216
+ await fallbackStore.deleteEnvelope(path);
217
+ }
218
+ await persist();
219
+ return {
220
+ path,
221
+ relativePath: path,
222
+ sizeBytes,
223
+ };
224
+ },
225
+ insertEntry(entry) {
226
+ const indexed = {
227
+ ...entry,
228
+ schemaId: entry.schemaId ?? null,
229
+ id: state.nextId,
230
+ createdAt: new Date().toISOString(),
231
+ };
232
+ state = {
233
+ ...state,
234
+ nextId: state.nextId + 1,
235
+ entries: [
236
+ ...state.entries.filter((item) => item.path !== entry.path),
237
+ indexed,
238
+ ],
239
+ };
240
+ persistLater();
241
+ return indexed;
242
+ },
243
+ async updateFileId(path, fileId) {
244
+ let updated = false;
245
+ state = {
246
+ ...state,
247
+ entries: state.entries.map((entry) => {
248
+ if (entry.path !== path)
249
+ return entry;
250
+ updated = true;
251
+ return { ...entry, fileId };
252
+ }),
253
+ };
254
+ if (updated) {
255
+ await persist();
256
+ }
257
+ return updated;
258
+ },
259
+ async deleteScope(scope) {
260
+ let deleted = 0;
261
+ const deletedPaths = [];
262
+ state = {
263
+ ...state,
264
+ entries: state.entries.filter((entry) => {
265
+ if (entry.scope !== scope)
266
+ return true;
267
+ deleted += 1;
268
+ deletedPaths.push(envelopePath(entry.scope, entry.collectedAt));
269
+ return false;
270
+ }),
271
+ };
272
+ await Promise.all(deletedPaths.flatMap((path) => [
273
+ fileStore.deleteEnvelope(path),
274
+ fallbackStore.deleteEnvelope(path),
275
+ ]));
276
+ await persist();
277
+ return deleted;
278
+ },
279
+ };
280
+ return storagePort;
281
+ }
282
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
package/dist/sync.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ import type { ServerConfig } from "@opendatalabs/personal-server-ts-core/schemas";
2
+ import type { DataStoragePort } from "@opendatalabs/personal-server-ts-core/ports";
3
+ import { type SyncManager } from "@opendatalabs/personal-server-ts-core/sync/manager";
4
+ import type { ServerAccount } from "@opendatalabs/personal-server-ts-core/keys";
5
+ import { type GatewayClient } from "@opendatalabs/vana-sdk/browser";
6
+ import type { PsLiteStateStore } from "./state.js";
7
+ interface SyncCursor {
8
+ read(): Promise<string | null>;
9
+ write(timestamp: string): Promise<void>;
10
+ }
11
+ export interface PsLiteSyncOptions {
12
+ config: ServerConfig;
13
+ stateStore: PsLiteStateStore;
14
+ storage: DataStoragePort;
15
+ ownerSignature: `0x${string}`;
16
+ serverAccount: ServerAccount;
17
+ gateway?: GatewayClient;
18
+ }
19
+ export declare function createPsLiteSyncCursor(stateStore: PsLiteStateStore): SyncCursor;
20
+ export declare function createPsLiteSyncManager(options: PsLiteSyncOptions): Promise<{
21
+ syncManager: SyncManager;
22
+ serverOwner: `0x${string}`;
23
+ }>;
24
+ export {};
25
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,oDAAoD,CAAC;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQnD,UAAU,UAAU;IAClB,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/B,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,OAAO,EAAE,eAAe,CAAC;IACzB,cAAc,EAAE,KAAK,MAAM,EAAE,CAAC;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAWD,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,gBAAgB,GAC3B,UAAU,CAaZ;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAA;CAAE,CAAC,CAsCnE"}
package/dist/sync.js ADDED
@@ -0,0 +1,62 @@
1
+ import { createSyncManager, } from "@opendatalabs/personal-server-ts-core/sync/manager";
2
+ import { createVanaSyncStorageAdapter } from "@opendatalabs/personal-server-ts-core/storage/adapters";
3
+ import { createServerSigner } from "@opendatalabs/personal-server-ts-core/signing";
4
+ import { createGatewayClient, deriveMasterKey, recoverServerOwner, } from "@opendatalabs/vana-sdk/browser";
5
+ const SYNC_CURSOR_KEY = "sync-cursor-v1";
6
+ function createBrowserLogger() {
7
+ return {
8
+ info: console.info.bind(console),
9
+ error: console.error.bind(console),
10
+ warn: console.warn.bind(console),
11
+ debug: console.debug.bind(console),
12
+ };
13
+ }
14
+ export function createPsLiteSyncCursor(stateStore) {
15
+ return {
16
+ async read() {
17
+ const state = await stateStore.get(SYNC_CURSOR_KEY);
18
+ return state?.lastProcessedTimestamp ?? null;
19
+ },
20
+ async write(timestamp) {
21
+ await stateStore.set(SYNC_CURSOR_KEY, {
22
+ lastProcessedTimestamp: timestamp,
23
+ });
24
+ },
25
+ };
26
+ }
27
+ export async function createPsLiteSyncManager(options) {
28
+ const serverOwner = await recoverServerOwner(options.ownerSignature);
29
+ const masterKey = deriveMasterKey(options.ownerSignature);
30
+ const gateway = options.gateway ?? createGatewayClient(options.config.gateway.url);
31
+ const storageAdapter = createVanaSyncStorageAdapter({
32
+ config: options.config,
33
+ serverOwner,
34
+ serverAccount: options.serverAccount,
35
+ });
36
+ const signer = createServerSigner(options.serverAccount, {
37
+ chainId: options.config.gateway.chainId,
38
+ contracts: options.config.gateway.contracts,
39
+ });
40
+ const cursor = createPsLiteSyncCursor(options.stateStore);
41
+ const logger = createBrowserLogger();
42
+ const syncManager = createSyncManager({
43
+ storage: options.storage,
44
+ storageAdapter,
45
+ gateway,
46
+ signer,
47
+ masterKey,
48
+ serverOwner,
49
+ logger: logger,
50
+ }, {
51
+ storage: options.storage,
52
+ storageAdapter,
53
+ gateway,
54
+ cursor,
55
+ masterKey,
56
+ serverOwner,
57
+ logger: logger,
58
+ });
59
+ syncManager.start();
60
+ return { syncManager, serverOwner };
61
+ }
62
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,GAElB,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EAAE,4BAA4B,EAAE,MAAM,wDAAwD,CAAC;AACtG,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAEnF,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,GAEnB,MAAM,gCAAgC,CAAC;AAGxC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAoBzC,SAAS,mBAAmB;IAC1B,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,UAA4B;IAE5B,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,KAAK,GACT,MAAM,UAAU,CAAC,GAAG,CAAwB,eAAe,CAAC,CAAC;YAC/D,OAAO,KAAK,EAAE,sBAAsB,IAAI,IAAI,CAAC;QAC/C,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,SAAS;YACnB,MAAM,UAAU,CAAC,GAAG,CAAwB,eAAe,EAAE;gBAC3D,sBAAsB,EAAE,SAAS;aAClC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA0B;IAE1B,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1D,MAAM,OAAO,GACX,OAAO,CAAC,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrE,MAAM,cAAc,GAAG,4BAA4B,CAAC;QAClD,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW;QACX,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,aAAa,EAAE;QACvD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO;QACvC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS;KAC5C,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,iBAAiB,CACnC;QACE,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,cAAc;QACd,OAAO;QACP,MAAM;QACN,SAAS;QACT,WAAW;QACX,MAAM,EAAE,MAAe;KACxB,EACD;QACE,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,cAAc;QACd,OAAO;QACP,MAAM;QACN,SAAS;QACT,WAAW;QACX,MAAM,EAAE,MAAe;KACxB,CACF,CAAC;IACF,WAAW,CAAC,KAAK,EAAE,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACtC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@opendatalabs/personal-server-ts-lite",
3
+ "version": "0.0.1-canary.9ce2194",
4
+ "description": "Browser/WebView Personal Server Lite runtime boundary",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/vana-com/personal-server-ts.git",
9
+ "directory": "packages/lite"
10
+ },
11
+ "homepage": "https://github.com/vana-com/personal-server-ts#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/vana-com/personal-server-ts/issues"
14
+ },
15
+ "type": "module",
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js"
22
+ }
23
+ },
24
+ "publishConfig": {
25
+ "access": "public"
26
+ },
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "scripts": {
31
+ "copy-tls": "mkdir -p dist/browser-tls-rustls && cp src/browser-tls-rustls/* dist/browser-tls-rustls/",
32
+ "build": "tsc --build && npm run copy-tls"
33
+ },
34
+ "dependencies": {
35
+ "@opendatalabs/personal-server-ts-core": "0.0.1-canary.9ce2194",
36
+ "@opendatalabs/vana-sdk": "file:../../../vana-sdk/packages/vana-sdk",
37
+ "node-forge": "^1.4.0",
38
+ "viem": "^2.48.11"
39
+ }
40
+ }