@opendatalabs/personal-server-ts-core 0.0.1-canary.0d0705b

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 (185) hide show
  1. package/dist/auth/web3-signed.d.ts +48 -0
  2. package/dist/auth/web3-signed.d.ts.map +1 -0
  3. package/dist/auth/web3-signed.js +110 -0
  4. package/dist/auth/web3-signed.js.map +1 -0
  5. package/dist/config/defaults.d.ts +5 -0
  6. package/dist/config/defaults.d.ts.map +1 -0
  7. package/dist/config/defaults.js +7 -0
  8. package/dist/config/defaults.js.map +1 -0
  9. package/dist/config/index.d.ts +3 -0
  10. package/dist/config/index.d.ts.map +1 -0
  11. package/dist/config/index.js +3 -0
  12. package/dist/config/index.js.map +1 -0
  13. package/dist/config/loader.d.ts +9 -0
  14. package/dist/config/loader.d.ts.map +1 -0
  15. package/dist/config/loader.js +36 -0
  16. package/dist/config/loader.js.map +1 -0
  17. package/dist/errors/catalog.d.ts +41 -0
  18. package/dist/errors/catalog.d.ts.map +1 -0
  19. package/dist/errors/catalog.js +79 -0
  20. package/dist/errors/catalog.js.map +1 -0
  21. package/dist/gateway/client.d.ts +98 -0
  22. package/dist/gateway/client.d.ts.map +1 -0
  23. package/dist/gateway/client.js +171 -0
  24. package/dist/gateway/client.js.map +1 -0
  25. package/dist/grants/eip712.d.ts +28 -0
  26. package/dist/grants/eip712.d.ts.map +1 -0
  27. package/dist/grants/eip712.js +30 -0
  28. package/dist/grants/eip712.js.map +1 -0
  29. package/dist/grants/index.d.ts +5 -0
  30. package/dist/grants/index.d.ts.map +1 -0
  31. package/dist/grants/index.js +3 -0
  32. package/dist/grants/index.js.map +1 -0
  33. package/dist/grants/types.d.ts +29 -0
  34. package/dist/grants/types.d.ts.map +1 -0
  35. package/dist/grants/types.js +6 -0
  36. package/dist/grants/types.js.map +1 -0
  37. package/dist/grants/verify.d.ts +24 -0
  38. package/dist/grants/verify.d.ts.map +1 -0
  39. package/dist/grants/verify.js +71 -0
  40. package/dist/grants/verify.js.map +1 -0
  41. package/dist/keys/derive.d.ts +18 -0
  42. package/dist/keys/derive.d.ts.map +1 -0
  43. package/dist/keys/derive.js +43 -0
  44. package/dist/keys/derive.js.map +1 -0
  45. package/dist/keys/index.d.ts +3 -0
  46. package/dist/keys/index.d.ts.map +1 -0
  47. package/dist/keys/index.js +3 -0
  48. package/dist/keys/index.js.map +1 -0
  49. package/dist/keys/server-account.d.ts +28 -0
  50. package/dist/keys/server-account.d.ts.map +1 -0
  51. package/dist/keys/server-account.js +48 -0
  52. package/dist/keys/server-account.js.map +1 -0
  53. package/dist/logger/index.d.ts +5 -0
  54. package/dist/logger/index.d.ts.map +1 -0
  55. package/dist/logger/index.js +9 -0
  56. package/dist/logger/index.js.map +1 -0
  57. package/dist/logging/access-log.d.ts +15 -0
  58. package/dist/logging/access-log.d.ts.map +1 -0
  59. package/dist/logging/access-log.js +25 -0
  60. package/dist/logging/access-log.js.map +1 -0
  61. package/dist/logging/access-reader.d.ts +19 -0
  62. package/dist/logging/access-reader.d.ts.map +1 -0
  63. package/dist/logging/access-reader.js +50 -0
  64. package/dist/logging/access-reader.js.map +1 -0
  65. package/dist/schemas/data-file.d.ts +20 -0
  66. package/dist/schemas/data-file.d.ts.map +1 -0
  67. package/dist/schemas/data-file.js +23 -0
  68. package/dist/schemas/data-file.js.map +1 -0
  69. package/dist/schemas/server-config.d.ts +103 -0
  70. package/dist/schemas/server-config.d.ts.map +1 -0
  71. package/dist/schemas/server-config.js +109 -0
  72. package/dist/schemas/server-config.js.map +1 -0
  73. package/dist/scopes/index.d.ts +3 -0
  74. package/dist/scopes/index.d.ts.map +1 -0
  75. package/dist/scopes/index.js +3 -0
  76. package/dist/scopes/index.js.map +1 -0
  77. package/dist/scopes/match.d.ts +13 -0
  78. package/dist/scopes/match.d.ts.map +1 -0
  79. package/dist/scopes/match.js +23 -0
  80. package/dist/scopes/match.js.map +1 -0
  81. package/dist/scopes/parse.d.ts +12 -0
  82. package/dist/scopes/parse.d.ts.map +1 -0
  83. package/dist/scopes/parse.js +29 -0
  84. package/dist/scopes/parse.js.map +1 -0
  85. package/dist/signing/eip712.d.ts +56 -0
  86. package/dist/signing/eip712.d.ts.map +1 -0
  87. package/dist/signing/eip712.js +57 -0
  88. package/dist/signing/eip712.js.map +1 -0
  89. package/dist/signing/index.d.ts +4 -0
  90. package/dist/signing/index.d.ts.map +1 -0
  91. package/dist/signing/index.js +4 -0
  92. package/dist/signing/index.js.map +1 -0
  93. package/dist/signing/request-signer.d.ts +12 -0
  94. package/dist/signing/request-signer.d.ts.map +1 -0
  95. package/dist/signing/request-signer.js +47 -0
  96. package/dist/signing/request-signer.js.map +1 -0
  97. package/dist/signing/signer.d.ts +14 -0
  98. package/dist/signing/signer.d.ts.map +1 -0
  99. package/dist/signing/signer.js +37 -0
  100. package/dist/signing/signer.js.map +1 -0
  101. package/dist/storage/adapters/index.d.ts +3 -0
  102. package/dist/storage/adapters/index.d.ts.map +1 -0
  103. package/dist/storage/adapters/index.js +2 -0
  104. package/dist/storage/adapters/index.js.map +1 -0
  105. package/dist/storage/adapters/interface.d.ts +47 -0
  106. package/dist/storage/adapters/interface.d.ts.map +1 -0
  107. package/dist/storage/adapters/interface.js +2 -0
  108. package/dist/storage/adapters/interface.js.map +1 -0
  109. package/dist/storage/adapters/vana.d.ts +32 -0
  110. package/dist/storage/adapters/vana.d.ts.map +1 -0
  111. package/dist/storage/adapters/vana.js +96 -0
  112. package/dist/storage/adapters/vana.js.map +1 -0
  113. package/dist/storage/encryption/decrypt.d.ts +10 -0
  114. package/dist/storage/encryption/decrypt.d.ts.map +1 -0
  115. package/dist/storage/encryption/decrypt.js +19 -0
  116. package/dist/storage/encryption/decrypt.js.map +1 -0
  117. package/dist/storage/encryption/encrypt.d.ts +10 -0
  118. package/dist/storage/encryption/encrypt.d.ts.map +1 -0
  119. package/dist/storage/encryption/encrypt.js +19 -0
  120. package/dist/storage/encryption/encrypt.js.map +1 -0
  121. package/dist/storage/encryption/index.d.ts +3 -0
  122. package/dist/storage/encryption/index.d.ts.map +1 -0
  123. package/dist/storage/encryption/index.js +3 -0
  124. package/dist/storage/encryption/index.js.map +1 -0
  125. package/dist/storage/hierarchy/index.d.ts +4 -0
  126. package/dist/storage/hierarchy/index.d.ts.map +1 -0
  127. package/dist/storage/hierarchy/index.js +3 -0
  128. package/dist/storage/hierarchy/index.js.map +1 -0
  129. package/dist/storage/hierarchy/manager.d.ts +23 -0
  130. package/dist/storage/hierarchy/manager.d.ts.map +1 -0
  131. package/dist/storage/hierarchy/manager.js +60 -0
  132. package/dist/storage/hierarchy/manager.js.map +1 -0
  133. package/dist/storage/hierarchy/paths.d.ts +11 -0
  134. package/dist/storage/hierarchy/paths.d.ts.map +1 -0
  135. package/dist/storage/hierarchy/paths.js +36 -0
  136. package/dist/storage/hierarchy/paths.js.map +1 -0
  137. package/dist/storage/index/index.d.ts +4 -0
  138. package/dist/storage/index/index.d.ts.map +1 -0
  139. package/dist/storage/index/index.js +3 -0
  140. package/dist/storage/index/index.js.map +1 -0
  141. package/dist/storage/index/manager.d.ts +37 -0
  142. package/dist/storage/index/manager.d.ts.map +1 -0
  143. package/dist/storage/index/manager.js +132 -0
  144. package/dist/storage/index/manager.js.map +1 -0
  145. package/dist/storage/index/schema.d.ts +4 -0
  146. package/dist/storage/index/schema.d.ts.map +1 -0
  147. package/dist/storage/index/schema.js +27 -0
  148. package/dist/storage/index/schema.js.map +1 -0
  149. package/dist/storage/index/types.d.ts +20 -0
  150. package/dist/storage/index/types.d.ts.map +1 -0
  151. package/dist/storage/index/types.js +2 -0
  152. package/dist/storage/index/types.js.map +1 -0
  153. package/dist/sync/cursor.d.ts +12 -0
  154. package/dist/sync/cursor.d.ts.map +1 -0
  155. package/dist/sync/cursor.js +19 -0
  156. package/dist/sync/cursor.js.map +1 -0
  157. package/dist/sync/engine/sync-manager.d.ts +25 -0
  158. package/dist/sync/engine/sync-manager.d.ts.map +1 -0
  159. package/dist/sync/engine/sync-manager.js +136 -0
  160. package/dist/sync/engine/sync-manager.js.map +1 -0
  161. package/dist/sync/index.d.ts +4 -0
  162. package/dist/sync/index.d.ts.map +1 -0
  163. package/dist/sync/index.js +3 -0
  164. package/dist/sync/index.js.map +1 -0
  165. package/dist/sync/types.d.ts +40 -0
  166. package/dist/sync/types.d.ts.map +1 -0
  167. package/dist/sync/types.js +2 -0
  168. package/dist/sync/types.js.map +1 -0
  169. package/dist/sync/workers/download.d.ts +41 -0
  170. package/dist/sync/workers/download.d.ts.map +1 -0
  171. package/dist/sync/workers/download.js +90 -0
  172. package/dist/sync/workers/download.js.map +1 -0
  173. package/dist/sync/workers/upload.d.ts +43 -0
  174. package/dist/sync/workers/upload.d.ts.map +1 -0
  175. package/dist/sync/workers/upload.js +75 -0
  176. package/dist/sync/workers/upload.js.map +1 -0
  177. package/dist/test-utils/index.d.ts +2 -0
  178. package/dist/test-utils/index.d.ts.map +1 -0
  179. package/dist/test-utils/index.js +2 -0
  180. package/dist/test-utils/index.js.map +1 -0
  181. package/dist/test-utils/wallet.d.ts +40 -0
  182. package/dist/test-utils/wallet.d.ts.map +1 -0
  183. package/dist/test-utils/wallet.js +72 -0
  184. package/dist/test-utils/wallet.js.map +1 -0
  185. package/package.json +115 -0
@@ -0,0 +1,41 @@
1
+ import type { IndexManager } from "../../storage/index/manager.js";
2
+ import type { HierarchyManagerOptions } from "../../storage/hierarchy/index.js";
3
+ import type { StorageAdapter } from "../../storage/adapters/interface.js";
4
+ import type { GatewayClient } from "../../gateway/client.js";
5
+ import type { SyncCursor } from "../cursor.js";
6
+ import type { FileRecord } from "../types.js";
7
+ import type { Logger } from "pino";
8
+ export interface DownloadWorkerDeps {
9
+ indexManager: IndexManager;
10
+ hierarchyOptions: HierarchyManagerOptions;
11
+ storageAdapter: StorageAdapter;
12
+ gateway: GatewayClient;
13
+ cursor: SyncCursor;
14
+ masterKey: Uint8Array;
15
+ serverOwner: string;
16
+ logger: Logger;
17
+ }
18
+ export interface DownloadResult {
19
+ fileId: string;
20
+ scope: string;
21
+ collectedAt: string;
22
+ path: string;
23
+ }
24
+ /**
25
+ * Download and process a single file record from the storage backend:
26
+ * 1. Check dedup: skip if fileId already in local index
27
+ * 2. Download OpenPGP encrypted binary from storage backend
28
+ * 3. Resolve schemaId → scope via Gateway getSchema
29
+ * 4. Derive scope key from master key → hex-encode as OpenPGP password
30
+ * 5. Decrypt with OpenPGP password-based decryption → plaintext JSON
31
+ * 6. Parse as DataFileEnvelope (validate)
32
+ * 7. Write to local filesystem via hierarchy manager
33
+ * 8. Insert into local index (with fileId)
34
+ */
35
+ export declare function downloadOne(deps: DownloadWorkerDeps, record: FileRecord): Promise<DownloadResult | null>;
36
+ /**
37
+ * Poll Gateway for new file records since lastProcessedTimestamp,
38
+ * download each, and advance the cursor.
39
+ */
40
+ export declare function downloadAll(deps: DownloadWorkerDeps): Promise<DownloadResult[]>;
41
+ //# sourceMappingURL=download.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../src/sync/workers/download.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAMnC,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA+DhC;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,cAAc,EAAE,CAAC,CAuC3B"}
@@ -0,0 +1,90 @@
1
+ import { writeDataFile } from "../../storage/hierarchy/index.js";
2
+ import { deriveScopeKey } from "../../keys/derive.js";
3
+ import { decryptWithPassword } from "../../storage/encryption/index.js";
4
+ import { DataFileEnvelopeSchema } from "../../schemas/data-file.js";
5
+ /**
6
+ * Download and process a single file record from the storage backend:
7
+ * 1. Check dedup: skip if fileId already in local index
8
+ * 2. Download OpenPGP encrypted binary from storage backend
9
+ * 3. Resolve schemaId → scope via Gateway getSchema
10
+ * 4. Derive scope key from master key → hex-encode as OpenPGP password
11
+ * 5. Decrypt with OpenPGP password-based decryption → plaintext JSON
12
+ * 6. Parse as DataFileEnvelope (validate)
13
+ * 7. Write to local filesystem via hierarchy manager
14
+ * 8. Insert into local index (with fileId)
15
+ */
16
+ export async function downloadOne(deps, record) {
17
+ const { indexManager, hierarchyOptions, storageAdapter, gateway, masterKey, logger, } = deps;
18
+ // 1. Check dedup: skip if fileId already in local index
19
+ const existing = indexManager.findByFileId(record.fileId);
20
+ if (existing) {
21
+ logger.debug({ fileId: record.fileId }, "File already in index, skipping");
22
+ return null;
23
+ }
24
+ // 2. Download OpenPGP encrypted binary from storage backend
25
+ const encrypted = await storageAdapter.download(record.url);
26
+ // 3. Resolve schemaId → scope via Gateway getSchema
27
+ const schema = await gateway.getSchema(record.schemaId);
28
+ if (!schema) {
29
+ throw new Error(`No schema found for schemaId: ${record.schemaId}`);
30
+ }
31
+ // 4. Derive scope key → hex-encode as OpenPGP password
32
+ const scopeKey = deriveScopeKey(masterKey, schema.scope);
33
+ const scopeKeyHex = Buffer.from(scopeKey).toString("hex");
34
+ // 5. Decrypt with OpenPGP password-based decryption
35
+ const plaintext = await decryptWithPassword(encrypted, scopeKeyHex);
36
+ // 6. Parse as DataFileEnvelope (validate)
37
+ const raw = JSON.parse(new TextDecoder().decode(plaintext));
38
+ const envelope = DataFileEnvelopeSchema.parse(raw);
39
+ // 7. Write to local filesystem via hierarchy manager
40
+ const { relativePath, sizeBytes } = await writeDataFile(hierarchyOptions, envelope);
41
+ // 8. Insert into local index (with fileId)
42
+ indexManager.insert({
43
+ fileId: record.fileId,
44
+ path: relativePath,
45
+ scope: envelope.scope,
46
+ collectedAt: envelope.collectedAt,
47
+ sizeBytes,
48
+ });
49
+ logger.info({ fileId: record.fileId, scope: envelope.scope, path: relativePath }, "Downloaded and indexed file");
50
+ return {
51
+ fileId: record.fileId,
52
+ scope: envelope.scope,
53
+ collectedAt: envelope.collectedAt,
54
+ path: relativePath,
55
+ };
56
+ }
57
+ /**
58
+ * Poll Gateway for new file records since lastProcessedTimestamp,
59
+ * download each, and advance the cursor.
60
+ */
61
+ export async function downloadAll(deps) {
62
+ const { gateway, cursor, serverOwner, logger } = deps;
63
+ // 1. Read cursor
64
+ const lastProcessedTimestamp = await cursor.read();
65
+ // 2. Poll gateway for new file records
66
+ const { files, cursor: nextCursor } = await gateway.listFilesSince(serverOwner, lastProcessedTimestamp);
67
+ const results = [];
68
+ // 3. Process each file record
69
+ for (const file of files) {
70
+ try {
71
+ const result = await downloadOne(deps, file);
72
+ if (result) {
73
+ results.push(result);
74
+ }
75
+ }
76
+ catch (err) {
77
+ logger.error({
78
+ fileId: file.fileId,
79
+ schemaId: file.schemaId,
80
+ error: err.message,
81
+ }, "Failed to download file");
82
+ }
83
+ }
84
+ // 4. Advance cursor if there are new records
85
+ if (nextCursor !== null) {
86
+ await cursor.write(nextCursor);
87
+ }
88
+ return results;
89
+ }
90
+ //# sourceMappingURL=download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/sync/workers/download.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { IndexManager } from "../../storage/index/manager.js";
2
+ import type { HierarchyManagerOptions } from "../../storage/hierarchy/index.js";
3
+ import type { StorageAdapter } from "../../storage/adapters/interface.js";
4
+ import type { GatewayClient } from "../../gateway/client.js";
5
+ import type { ServerSigner } from "../../signing/signer.js";
6
+ import type { Logger } from "pino";
7
+ import type { IndexEntry } from "../../storage/index/types.js";
8
+ export interface UploadWorkerDeps {
9
+ indexManager: IndexManager;
10
+ hierarchyOptions: HierarchyManagerOptions;
11
+ storageAdapter: StorageAdapter;
12
+ gateway: GatewayClient;
13
+ signer: ServerSigner;
14
+ masterKey: Uint8Array;
15
+ serverOwner: string;
16
+ logger: Logger;
17
+ }
18
+ export interface UploadResult {
19
+ path: string;
20
+ fileId: string;
21
+ url: string;
22
+ }
23
+ /**
24
+ * Upload a single unsynced index entry:
25
+ * 1. Read local data file from disk
26
+ * 2. Look up schema for the scope → get schemaId
27
+ * 3. Derive scope key from master key → hex-encode as OpenPGP password
28
+ * 4. Encrypt with OpenPGP password-based encryption → binary
29
+ * 5. Upload OpenPGP binary to storage backend
30
+ * 6. Sign file registration via EIP-712
31
+ * 7. Register file record on-chain via Gateway (with schemaId)
32
+ * 8. Update local index with fileId
33
+ */
34
+ export declare function uploadOne(deps: UploadWorkerDeps, entry: IndexEntry): Promise<UploadResult>;
35
+ /**
36
+ * Process all unsynced entries (fileId === null).
37
+ * Processes sequentially to avoid overwhelming storage backend.
38
+ * Returns array of results (skips failures, logs errors).
39
+ */
40
+ export declare function uploadAll(deps: UploadWorkerDeps, options?: {
41
+ batchSize?: number;
42
+ }): Promise<UploadResult[]>;
43
+ //# sourceMappingURL=upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/sync/workers/upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAK/D,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,YAAY,CAAC,CAoEvB;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,gBAAgB,EACtB,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B,OAAO,CAAC,YAAY,EAAE,CAAC,CAkBzB"}
@@ -0,0 +1,75 @@
1
+ import { readDataFile } from "../../storage/hierarchy/index.js";
2
+ import { deriveScopeKey } from "../../keys/derive.js";
3
+ import { encryptWithPassword } from "../../storage/encryption/index.js";
4
+ /**
5
+ * Upload a single unsynced index entry:
6
+ * 1. Read local data file from disk
7
+ * 2. Look up schema for the scope → get schemaId
8
+ * 3. Derive scope key from master key → hex-encode as OpenPGP password
9
+ * 4. Encrypt with OpenPGP password-based encryption → binary
10
+ * 5. Upload OpenPGP binary to storage backend
11
+ * 6. Sign file registration via EIP-712
12
+ * 7. Register file record on-chain via Gateway (with schemaId)
13
+ * 8. Update local index with fileId
14
+ */
15
+ export async function uploadOne(deps, entry) {
16
+ const { indexManager, hierarchyOptions, storageAdapter, gateway, signer, masterKey, serverOwner, logger, } = deps;
17
+ // 1. Read local data file
18
+ const envelope = await readDataFile(hierarchyOptions, entry.scope, entry.collectedAt);
19
+ // 2. Look up schema for the scope
20
+ const schema = await gateway.getSchemaForScope(entry.scope);
21
+ if (!schema) {
22
+ throw new Error(`No schema found for scope: ${entry.scope}`);
23
+ }
24
+ // 3. Derive scope key → hex-encode as OpenPGP password
25
+ const scopeKey = deriveScopeKey(masterKey, entry.scope);
26
+ const scopeKeyHex = Buffer.from(scopeKey).toString("hex");
27
+ // 4. Encrypt with OpenPGP password-based encryption
28
+ const plaintext = new TextEncoder().encode(JSON.stringify(envelope));
29
+ const encrypted = await encryptWithPassword(plaintext, scopeKeyHex);
30
+ // 5. Upload to storage backend
31
+ const storageKey = `${entry.scope}/${entry.collectedAt}`;
32
+ const url = await storageAdapter.upload(storageKey, encrypted);
33
+ // 6. Sign file registration via EIP-712
34
+ const signature = await signer.signFileRegistration({
35
+ ownerAddress: serverOwner,
36
+ url,
37
+ schemaId: schema.id,
38
+ });
39
+ // 7. Register file on-chain via Gateway
40
+ const registration = await gateway.registerFile({
41
+ ownerAddress: serverOwner,
42
+ url,
43
+ schemaId: schema.id,
44
+ signature,
45
+ });
46
+ const fileId = registration.fileId;
47
+ if (!fileId) {
48
+ throw new Error(`Gateway registerFile did not return a fileId for ${entry.path}`);
49
+ }
50
+ // 8. Update local index with fileId
51
+ indexManager.updateFileId(entry.path, fileId);
52
+ logger.info({ path: entry.path, fileId, url }, "Uploaded and registered file");
53
+ return { path: entry.path, fileId, url };
54
+ }
55
+ /**
56
+ * Process all unsynced entries (fileId === null).
57
+ * Processes sequentially to avoid overwhelming storage backend.
58
+ * Returns array of results (skips failures, logs errors).
59
+ */
60
+ export async function uploadAll(deps, options) {
61
+ const batchSize = options?.batchSize ?? 50;
62
+ const entries = deps.indexManager.findUnsynced({ limit: batchSize });
63
+ const results = [];
64
+ for (const entry of entries) {
65
+ try {
66
+ const result = await uploadOne(deps, entry);
67
+ results.push(result);
68
+ }
69
+ catch (err) {
70
+ deps.logger.error({ path: entry.path, scope: entry.scope, error: err.message }, "Failed to upload entry");
71
+ }
72
+ }
73
+ return results;
74
+ }
75
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/sync/workers/upload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { createTestWallet, buildWeb3SignedHeader, type TestWallet, } from "./wallet.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createTestWallet, buildWeb3SignedHeader, } from "./wallet.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GAEtB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Test wallet utilities for Web3Signed auth testing.
3
+ * Provides deterministic wallets and header builders for integration tests.
4
+ */
5
+ export interface TestWallet {
6
+ address: `0x${string}`;
7
+ privateKey: `0x${string}`;
8
+ signMessage(message: string): Promise<`0x${string}`>;
9
+ signTypedData(params: {
10
+ domain: Record<string, unknown>;
11
+ types: Record<string, Array<{
12
+ name: string;
13
+ type: string;
14
+ }>>;
15
+ primaryType: string;
16
+ message: Record<string, unknown>;
17
+ }): Promise<`0x${string}`>;
18
+ }
19
+ /**
20
+ * Create a deterministic test wallet from a seed index.
21
+ * Seed 0 produces a fixed private key, seed N produces key = padded hex(N+1).
22
+ */
23
+ export declare function createTestWallet(seed?: number): TestWallet;
24
+ /**
25
+ * Build a valid Web3Signed Authorization header value.
26
+ * Format: "Web3Signed {base64url(payload)}.{signature}"
27
+ *
28
+ * The payload is JSON with sorted keys, signed via EIP-191.
29
+ */
30
+ export declare function buildWeb3SignedHeader(params: {
31
+ wallet: TestWallet;
32
+ aud: string;
33
+ method: string;
34
+ uri: string;
35
+ bodyHash?: string;
36
+ iat?: number;
37
+ exp?: number;
38
+ grantId?: string;
39
+ }): Promise<string>;
40
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/test-utils/wallet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IACrD,aAAa,CAAC,MAAM,EAAE;QACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC,CAAC;QAC7D,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAAU,GAAG,UAAU,CA0B7D;AAWD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BlB"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Test wallet utilities for Web3Signed auth testing.
3
+ * Provides deterministic wallets and header builders for integration tests.
4
+ */
5
+ import { privateKeyToAccount } from "viem/accounts";
6
+ /**
7
+ * Create a deterministic test wallet from a seed index.
8
+ * Seed 0 produces a fixed private key, seed N produces key = padded hex(N+1).
9
+ */
10
+ export function createTestWallet(seed = 0) {
11
+ // Derive a deterministic private key from the seed.
12
+ // Pad the (seed + 1) value to 32 bytes hex.
13
+ const keyValue = (seed + 1).toString(16).padStart(64, "0");
14
+ const privateKey = `0x${keyValue}`;
15
+ const account = privateKeyToAccount(privateKey);
16
+ return {
17
+ address: account.address,
18
+ privateKey,
19
+ async signMessage(message) {
20
+ return account.signMessage({ message });
21
+ },
22
+ async signTypedData(params) {
23
+ return account.signTypedData({
24
+ domain: params.domain,
25
+ types: params.types,
26
+ primaryType: params.primaryType,
27
+ message: params.message,
28
+ });
29
+ },
30
+ };
31
+ }
32
+ /** Base64url encode a string (no padding). */
33
+ function base64urlEncode(input) {
34
+ return Buffer.from(input, "utf-8")
35
+ .toString("base64")
36
+ .replace(/\+/g, "-")
37
+ .replace(/\//g, "_")
38
+ .replace(/=+$/, "");
39
+ }
40
+ /**
41
+ * Build a valid Web3Signed Authorization header value.
42
+ * Format: "Web3Signed {base64url(payload)}.{signature}"
43
+ *
44
+ * The payload is JSON with sorted keys, signed via EIP-191.
45
+ */
46
+ export async function buildWeb3SignedHeader(params) {
47
+ const now = Math.floor(Date.now() / 1000);
48
+ const payload = {
49
+ aud: params.aud,
50
+ bodyHash: params.bodyHash ?? "",
51
+ exp: params.exp ?? now + 300,
52
+ iat: params.iat ?? now,
53
+ method: params.method,
54
+ uri: params.uri,
55
+ };
56
+ if (params.grantId !== undefined) {
57
+ payload["grantId"] = params.grantId;
58
+ }
59
+ // Sort keys for deterministic serialization
60
+ const sortedPayload = Object.keys(payload)
61
+ .sort()
62
+ .reduce((acc, key) => {
63
+ acc[key] = payload[key];
64
+ return acc;
65
+ }, {});
66
+ const payloadJson = JSON.stringify(sortedPayload);
67
+ const payloadBase64 = base64urlEncode(payloadJson);
68
+ // Sign the base64url string via EIP-191
69
+ const signature = await params.wallet.signMessage(payloadBase64);
70
+ return `Web3Signed ${payloadBase64}.${signature}`;
71
+ }
72
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/test-utils/wallet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAepD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,CAAC;IAC/C,oDAAoD;IACpD,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,KAAK,QAAQ,EAAmB,CAAC;IACpD,MAAM,OAAO,GAAsB,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEnE,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU;QACV,KAAK,CAAC,WAAW,CAAC,OAAe;YAC/B,OAAO,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,MAAM;YACxB,OAAO,OAAO,CAAC,aAAa,CAAC;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAED;gBACd,KAAK,EAAE,MAAM,CAAC,KAED;gBACb,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,8CAA8C;AAC9C,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;SAC/B,QAAQ,CAAC,QAAQ,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAS3C;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAA4B;QACvC,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;QAC/B,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG;QAC5B,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG;QACtB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,MAAM,CAAC,GAAG;KAChB,CAAC;IAEF,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACtC,CAAC;IAED,4CAA4C;IAC5C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;SACvC,IAAI,EAAE;SACN,MAAM,CAA0B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IAET,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAEnD,wCAAwC;IACxC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAEjE,OAAO,cAAc,aAAa,IAAI,SAAS,EAAE,CAAC;AACpD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,115 @@
1
+ {
2
+ "name": "@opendatalabs/personal-server-ts-core",
3
+ "version": "0.0.1-canary.0d0705b",
4
+ "description": "Protocol logic for the Vana Personal Server — auth, grants, scopes, storage, keys",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/vana-com/personal-server-ts.git",
9
+ "directory": "packages/core"
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
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "exports": {
23
+ "./config": {
24
+ "types": "./dist/config/index.d.ts",
25
+ "import": "./dist/config/index.js"
26
+ },
27
+ "./logger": {
28
+ "types": "./dist/logger/index.d.ts",
29
+ "import": "./dist/logger/index.js"
30
+ },
31
+ "./errors": {
32
+ "types": "./dist/errors/catalog.d.ts",
33
+ "import": "./dist/errors/catalog.js"
34
+ },
35
+ "./schemas": {
36
+ "types": "./dist/schemas/server-config.d.ts",
37
+ "import": "./dist/schemas/server-config.js"
38
+ },
39
+ "./scopes": {
40
+ "types": "./dist/scopes/index.d.ts",
41
+ "import": "./dist/scopes/index.js"
42
+ },
43
+ "./storage/hierarchy": {
44
+ "types": "./dist/storage/hierarchy/index.d.ts",
45
+ "import": "./dist/storage/hierarchy/index.js"
46
+ },
47
+ "./storage/index": {
48
+ "types": "./dist/storage/index/index.d.ts",
49
+ "import": "./dist/storage/index/index.js"
50
+ },
51
+ "./schemas/data-file": {
52
+ "types": "./dist/schemas/data-file.d.ts",
53
+ "import": "./dist/schemas/data-file.js"
54
+ },
55
+ "./auth": {
56
+ "types": "./dist/auth/web3-signed.d.ts",
57
+ "import": "./dist/auth/web3-signed.js"
58
+ },
59
+ "./grants": {
60
+ "types": "./dist/grants/index.d.ts",
61
+ "import": "./dist/grants/index.js"
62
+ },
63
+ "./gateway": {
64
+ "types": "./dist/gateway/client.d.ts",
65
+ "import": "./dist/gateway/client.js"
66
+ },
67
+ "./logging/access-log": {
68
+ "types": "./dist/logging/access-log.d.ts",
69
+ "import": "./dist/logging/access-log.js"
70
+ },
71
+ "./keys": {
72
+ "types": "./dist/keys/index.d.ts",
73
+ "import": "./dist/keys/index.js"
74
+ },
75
+ "./logging/access-reader": {
76
+ "types": "./dist/logging/access-reader.d.ts",
77
+ "import": "./dist/logging/access-reader.js"
78
+ },
79
+ "./signing": {
80
+ "types": "./dist/signing/index.d.ts",
81
+ "import": "./dist/signing/index.js"
82
+ },
83
+ "./sync": {
84
+ "types": "./dist/sync/index.d.ts",
85
+ "import": "./dist/sync/index.js"
86
+ },
87
+ "./storage/encryption": {
88
+ "types": "./dist/storage/encryption/index.d.ts",
89
+ "import": "./dist/storage/encryption/index.js"
90
+ },
91
+ "./storage/adapters": {
92
+ "types": "./dist/storage/adapters/index.d.ts",
93
+ "import": "./dist/storage/adapters/index.js"
94
+ },
95
+ "./test-utils": {
96
+ "types": "./dist/test-utils/index.d.ts",
97
+ "import": "./dist/test-utils/index.js"
98
+ }
99
+ },
100
+ "scripts": {
101
+ "build": "tsc --build"
102
+ },
103
+ "dependencies": {
104
+ "@noble/hashes": "^2.0.1",
105
+ "better-sqlite3": "^12.6.2",
106
+ "openpgp": "^6.3.0",
107
+ "pino": "^10.3.0",
108
+ "pino-pretty": "^13.0.0",
109
+ "viem": "^2.45.1",
110
+ "zod": "^4.3.6"
111
+ },
112
+ "devDependencies": {
113
+ "@types/better-sqlite3": "^7.6.0"
114
+ }
115
+ }