@opendatalabs/personal-server-ts-core 0.0.1-canary.a9babfc → 0.0.1-canary.b033bdb

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 (238) hide show
  1. package/dist/api/index.d.ts +84 -0
  2. package/dist/api/index.d.ts.map +1 -0
  3. package/dist/api/index.js +383 -0
  4. package/dist/api/index.js.map +1 -0
  5. package/dist/auth/index.d.ts +2 -0
  6. package/dist/auth/index.d.ts.map +1 -0
  7. package/dist/auth/index.js +2 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/auth/request.d.ts +28 -0
  10. package/dist/auth/request.d.ts.map +1 -0
  11. package/dist/auth/request.js +106 -0
  12. package/dist/auth/request.js.map +1 -0
  13. package/dist/client.d.ts +111 -0
  14. package/dist/client.d.ts.map +1 -0
  15. package/dist/client.js +113 -0
  16. package/dist/client.js.map +1 -0
  17. package/dist/config/defaults.d.ts +5 -5
  18. package/dist/config/defaults.d.ts.map +1 -1
  19. package/dist/config/defaults.js +3 -5
  20. package/dist/config/defaults.js.map +1 -1
  21. package/dist/config/index.d.ts +0 -1
  22. package/dist/config/index.d.ts.map +1 -1
  23. package/dist/config/index.js +0 -1
  24. package/dist/config/index.js.map +1 -1
  25. package/dist/config/paths.d.ts.map +1 -1
  26. package/dist/config/paths.js +1 -9
  27. package/dist/config/paths.js.map +1 -1
  28. package/dist/contracts/access-logs.d.ts +8 -0
  29. package/dist/contracts/access-logs.d.ts.map +1 -0
  30. package/dist/contracts/access-logs.js +7 -0
  31. package/dist/contracts/access-logs.js.map +1 -0
  32. package/dist/contracts/auth-device.d.ts +70 -0
  33. package/dist/contracts/auth-device.d.ts.map +1 -0
  34. package/dist/contracts/auth-device.js +163 -0
  35. package/dist/contracts/auth-device.js.map +1 -0
  36. package/dist/contracts/config.d.ts +5 -0
  37. package/dist/contracts/config.d.ts.map +1 -0
  38. package/dist/contracts/config.js +30 -0
  39. package/dist/contracts/config.js.map +1 -0
  40. package/dist/contracts/data.d.ts +98 -0
  41. package/dist/contracts/data.d.ts.map +1 -0
  42. package/dist/contracts/data.js +142 -0
  43. package/dist/contracts/data.js.map +1 -0
  44. package/dist/contracts/grants.d.ts +36 -0
  45. package/dist/contracts/grants.d.ts.map +1 -0
  46. package/dist/contracts/grants.js +130 -0
  47. package/dist/contracts/grants.js.map +1 -0
  48. package/dist/contracts/http.d.ts +21 -0
  49. package/dist/contracts/http.d.ts.map +1 -0
  50. package/dist/contracts/http.js +49 -0
  51. package/dist/contracts/http.js.map +1 -0
  52. package/dist/contracts/index.d.ts +14 -0
  53. package/dist/contracts/index.d.ts.map +1 -0
  54. package/dist/contracts/index.js +9 -0
  55. package/dist/contracts/index.js.map +1 -0
  56. package/dist/contracts/oauth.d.ts +38 -0
  57. package/dist/contracts/oauth.d.ts.map +1 -0
  58. package/dist/contracts/oauth.js +130 -0
  59. package/dist/contracts/oauth.js.map +1 -0
  60. package/dist/contracts/sync.d.ts +10 -0
  61. package/dist/contracts/sync.d.ts.map +1 -0
  62. package/dist/contracts/sync.js +33 -0
  63. package/dist/contracts/sync.js.map +1 -0
  64. package/dist/errors/catalog.d.ts +9 -0
  65. package/dist/errors/catalog.d.ts.map +1 -1
  66. package/dist/errors/catalog.js +15 -0
  67. package/dist/errors/catalog.js.map +1 -1
  68. package/dist/grants/index.d.ts +1 -4
  69. package/dist/grants/index.d.ts.map +1 -1
  70. package/dist/grants/index.js +1 -2
  71. package/dist/grants/index.js.map +1 -1
  72. package/dist/keys/index.d.ts +1 -2
  73. package/dist/keys/index.d.ts.map +1 -1
  74. package/dist/keys/index.js +1 -2
  75. package/dist/keys/index.js.map +1 -1
  76. package/dist/keys/server-account.d.ts +5 -9
  77. package/dist/keys/server-account.d.ts.map +1 -1
  78. package/dist/keys/server-account.js +1 -47
  79. package/dist/keys/server-account.js.map +1 -1
  80. package/dist/logger/index.d.ts +6 -2
  81. package/dist/logger/index.d.ts.map +1 -1
  82. package/dist/logger/index.js +2 -6
  83. package/dist/logger/index.js.map +1 -1
  84. package/dist/logging/access-log.d.ts +0 -1
  85. package/dist/logging/access-log.d.ts.map +1 -1
  86. package/dist/logging/access-log.js +1 -24
  87. package/dist/logging/access-log.js.map +1 -1
  88. package/dist/logging/access-reader.d.ts +0 -5
  89. package/dist/logging/access-reader.d.ts.map +1 -1
  90. package/dist/logging/access-reader.js +1 -49
  91. package/dist/logging/access-reader.js.map +1 -1
  92. package/dist/policy/data-read.d.ts +16 -0
  93. package/dist/policy/data-read.d.ts.map +1 -0
  94. package/dist/policy/data-read.js +84 -0
  95. package/dist/policy/data-read.js.map +1 -0
  96. package/dist/policy/index.d.ts +2 -0
  97. package/dist/policy/index.d.ts.map +1 -0
  98. package/dist/policy/index.js +2 -0
  99. package/dist/policy/index.js.map +1 -0
  100. package/dist/ports/index.d.ts +79 -0
  101. package/dist/ports/index.d.ts.map +1 -0
  102. package/dist/ports/index.js +6 -0
  103. package/dist/ports/index.js.map +1 -0
  104. package/dist/signing/index.d.ts +0 -1
  105. package/dist/signing/index.d.ts.map +1 -1
  106. package/dist/signing/index.js +0 -1
  107. package/dist/signing/index.js.map +1 -1
  108. package/dist/signing/request-signer.d.ts +8 -2
  109. package/dist/signing/request-signer.d.ts.map +1 -1
  110. package/dist/signing/request-signer.js +5 -31
  111. package/dist/signing/request-signer.js.map +1 -1
  112. package/dist/signing/signer.d.ts +1 -1
  113. package/dist/signing/signer.d.ts.map +1 -1
  114. package/dist/signing/signer.js +1 -1
  115. package/dist/signing/signer.js.map +1 -1
  116. package/dist/storage/adapters/index.d.ts +2 -1
  117. package/dist/storage/adapters/index.d.ts.map +1 -1
  118. package/dist/storage/adapters/index.js +2 -1
  119. package/dist/storage/adapters/index.js.map +1 -1
  120. package/dist/storage/adapters/sdk.d.ts +13 -0
  121. package/dist/storage/adapters/sdk.d.ts.map +1 -0
  122. package/dist/storage/adapters/sdk.js +38 -0
  123. package/dist/storage/adapters/sdk.js.map +1 -0
  124. package/dist/storage/adapters/vana.d.ts +7 -30
  125. package/dist/storage/adapters/vana.d.ts.map +1 -1
  126. package/dist/storage/adapters/vana.js +11 -94
  127. package/dist/storage/adapters/vana.js.map +1 -1
  128. package/dist/storage/hierarchy/index.d.ts +0 -1
  129. package/dist/storage/hierarchy/index.d.ts.map +1 -1
  130. package/dist/storage/hierarchy/index.js +0 -1
  131. package/dist/storage/hierarchy/index.js.map +1 -1
  132. package/dist/storage/hierarchy/manager.d.ts +0 -14
  133. package/dist/storage/hierarchy/manager.d.ts.map +1 -1
  134. package/dist/storage/hierarchy/manager.js +1 -59
  135. package/dist/storage/hierarchy/manager.js.map +1 -1
  136. package/dist/storage/hierarchy/paths.d.ts.map +1 -1
  137. package/dist/storage/hierarchy/paths.js +11 -4
  138. package/dist/storage/hierarchy/paths.js.map +1 -1
  139. package/dist/storage/index/index.d.ts +2 -3
  140. package/dist/storage/index/index.d.ts.map +1 -1
  141. package/dist/storage/index/index.js +1 -2
  142. package/dist/storage/index/index.js.map +1 -1
  143. package/dist/storage/index/manager.d.ts +2 -4
  144. package/dist/storage/index/manager.d.ts.map +1 -1
  145. package/dist/storage/index/manager.js +1 -131
  146. package/dist/storage/index/manager.js.map +1 -1
  147. package/dist/storage/index/schema.d.ts +1 -3
  148. package/dist/storage/index/schema.d.ts.map +1 -1
  149. package/dist/storage/index/schema.js +1 -26
  150. package/dist/storage/index/schema.js.map +1 -1
  151. package/dist/storage/index/types.d.ts +4 -0
  152. package/dist/storage/index/types.d.ts.map +1 -1
  153. package/dist/sync/cursor.d.ts +5 -7
  154. package/dist/sync/cursor.d.ts.map +1 -1
  155. package/dist/sync/cursor.js +1 -18
  156. package/dist/sync/cursor.js.map +1 -1
  157. package/dist/sync/engine/sync-manager.d.ts.map +1 -1
  158. package/dist/sync/engine/sync-manager.js +9 -1
  159. package/dist/sync/engine/sync-manager.js.map +1 -1
  160. package/dist/sync/index.d.ts +2 -2
  161. package/dist/sync/index.d.ts.map +1 -1
  162. package/dist/sync/index.js +0 -1
  163. package/dist/sync/index.js.map +1 -1
  164. package/dist/sync/types.d.ts +0 -24
  165. package/dist/sync/types.d.ts.map +1 -1
  166. package/dist/sync/workers/download.d.ts +5 -8
  167. package/dist/sync/workers/download.d.ts.map +1 -1
  168. package/dist/sync/workers/download.js +35 -13
  169. package/dist/sync/workers/download.js.map +1 -1
  170. package/dist/sync/workers/upload.d.ts +9 -9
  171. package/dist/sync/workers/upload.d.ts.map +1 -1
  172. package/dist/sync/workers/upload.js +23 -15
  173. package/dist/sync/workers/upload.js.map +1 -1
  174. package/dist/test-utils/wallet.d.ts +1 -0
  175. package/dist/test-utils/wallet.d.ts.map +1 -1
  176. package/dist/test-utils/wallet.js +9 -31
  177. package/dist/test-utils/wallet.js.map +1 -1
  178. package/package.json +30 -29
  179. package/dist/auth/web3-signed.d.ts +0 -48
  180. package/dist/auth/web3-signed.d.ts.map +0 -1
  181. package/dist/auth/web3-signed.js +0 -110
  182. package/dist/auth/web3-signed.js.map +0 -1
  183. package/dist/config/loader.d.ts +0 -8
  184. package/dist/config/loader.d.ts.map +0 -1
  185. package/dist/config/loader.js +0 -74
  186. package/dist/config/loader.js.map +0 -1
  187. package/dist/gateway/client.d.ts +0 -98
  188. package/dist/gateway/client.d.ts.map +0 -1
  189. package/dist/gateway/client.js +0 -171
  190. package/dist/gateway/client.js.map +0 -1
  191. package/dist/grants/eip712.d.ts +0 -28
  192. package/dist/grants/eip712.d.ts.map +0 -1
  193. package/dist/grants/eip712.js +0 -30
  194. package/dist/grants/eip712.js.map +0 -1
  195. package/dist/grants/types.d.ts +0 -29
  196. package/dist/grants/types.d.ts.map +0 -1
  197. package/dist/grants/types.js +0 -6
  198. package/dist/grants/types.js.map +0 -1
  199. package/dist/grants/verify.d.ts +0 -24
  200. package/dist/grants/verify.d.ts.map +0 -1
  201. package/dist/grants/verify.js +0 -71
  202. package/dist/grants/verify.js.map +0 -1
  203. package/dist/keys/derive.d.ts +0 -18
  204. package/dist/keys/derive.d.ts.map +0 -1
  205. package/dist/keys/derive.js +0 -43
  206. package/dist/keys/derive.js.map +0 -1
  207. package/dist/schemas/data-file.d.ts +0 -20
  208. package/dist/schemas/data-file.d.ts.map +0 -1
  209. package/dist/schemas/data-file.js +0 -23
  210. package/dist/schemas/data-file.js.map +0 -1
  211. package/dist/scopes/index.d.ts +0 -3
  212. package/dist/scopes/index.d.ts.map +0 -1
  213. package/dist/scopes/index.js +0 -3
  214. package/dist/scopes/index.js.map +0 -1
  215. package/dist/scopes/match.d.ts +0 -13
  216. package/dist/scopes/match.d.ts.map +0 -1
  217. package/dist/scopes/match.js +0 -23
  218. package/dist/scopes/match.js.map +0 -1
  219. package/dist/scopes/parse.d.ts +0 -12
  220. package/dist/scopes/parse.d.ts.map +0 -1
  221. package/dist/scopes/parse.js +0 -29
  222. package/dist/scopes/parse.js.map +0 -1
  223. package/dist/signing/eip712.d.ts +0 -69
  224. package/dist/signing/eip712.d.ts.map +0 -1
  225. package/dist/signing/eip712.js +0 -68
  226. package/dist/signing/eip712.js.map +0 -1
  227. package/dist/storage/encryption/decrypt.d.ts +0 -10
  228. package/dist/storage/encryption/decrypt.d.ts.map +0 -1
  229. package/dist/storage/encryption/decrypt.js +0 -19
  230. package/dist/storage/encryption/decrypt.js.map +0 -1
  231. package/dist/storage/encryption/encrypt.d.ts +0 -10
  232. package/dist/storage/encryption/encrypt.d.ts.map +0 -1
  233. package/dist/storage/encryption/encrypt.js +0 -19
  234. package/dist/storage/encryption/encrypt.js.map +0 -1
  235. package/dist/storage/encryption/index.d.ts +0 -3
  236. package/dist/storage/encryption/index.d.ts.map +0 -1
  237. package/dist/storage/encryption/index.js +0 -3
  238. package/dist/storage/encryption/index.js.map +0 -1
@@ -0,0 +1,84 @@
1
+ import type { AccessLogWriter } from "../logging/access-log.js";
2
+ import type { AccessLogReader } from "../logging/access-reader.js";
3
+ import { type DataStoragePort, type RuntimeAvailabilityPort, type SchemaResolverPort, type FeeVerifierPort } from "../ports/index.js";
4
+ import type { DataReadPolicyPorts } from "../policy/index.js";
5
+ import type { SyncManager } from "../sync/index.js";
6
+ import { type OAuthDeviceSessionLookup, type OAuthTokenStorePort } from "../contracts/index.js";
7
+ import type { DataPortabilityGatewayConfig, GatewayClient } from "@opendatalabs/vana-sdk/browser";
8
+ import type { ServerSigner } from "../signing/index.js";
9
+ export interface PersonalServerReadAuthInput {
10
+ request: Request;
11
+ scope: string;
12
+ grantId?: string;
13
+ fileId?: string;
14
+ }
15
+ export interface PersonalServerReadAuthResult {
16
+ builder?: `0x${string}` | string;
17
+ grantId?: string;
18
+ }
19
+ export interface PersonalServerApiAuthPort {
20
+ authorizeOwner(request: Request): Promise<void>;
21
+ authorizeBuilderList(request: Request): Promise<void>;
22
+ authorizeBuilderRead(input: PersonalServerReadAuthInput): Promise<PersonalServerReadAuthResult | void>;
23
+ }
24
+ export interface PersonalServerApiLogger {
25
+ info?(payload: Record<string, unknown>, message: string): void;
26
+ error?(payload: Record<string, unknown>, message: string): void;
27
+ }
28
+ export interface PersonalServerIngestSyncManager {
29
+ trigger(): Promise<void>;
30
+ notifyNewData?(): void;
31
+ }
32
+ export interface PersonalServerDataApiDeps {
33
+ storage: DataStoragePort;
34
+ auth: PersonalServerApiAuthPort;
35
+ schemaResolver?: SchemaResolverPort;
36
+ accessLogWriter: AccessLogWriter;
37
+ syncManager?: PersonalServerIngestSyncManager | null;
38
+ runtimeAvailability?: RuntimeAvailabilityPort;
39
+ feeVerifier?: FeeVerifierPort;
40
+ now?: () => Date;
41
+ createLogId?: () => string;
42
+ logger?: PersonalServerApiLogger;
43
+ }
44
+ export interface PersonalServerAccessLogsApiDeps {
45
+ auth: Pick<PersonalServerApiAuthPort, "authorizeOwner">;
46
+ accessLogReader: AccessLogReader;
47
+ }
48
+ export interface PersonalServerSyncApiDeps {
49
+ auth: Pick<PersonalServerApiAuthPort, "authorizeOwner">;
50
+ syncManager: Pick<SyncManager, "trigger" | "getStatus"> | null;
51
+ logger?: PersonalServerApiLogger;
52
+ }
53
+ export interface PersonalServerGrantsApiDeps {
54
+ auth: Pick<PersonalServerApiAuthPort, "authorizeOwner">;
55
+ gateway?: Pick<GatewayClient, "getBuilder" | "createGrant" | "listGrantsByUser">;
56
+ gatewayConfig?: DataPortabilityGatewayConfig;
57
+ serverOwner?: `0x${string}`;
58
+ serverSigner?: Pick<ServerSigner, "signGrantRegistration">;
59
+ now?: () => Date;
60
+ }
61
+ export interface PersonalServerConfigApiDeps {
62
+ auth: Pick<PersonalServerApiAuthPort, "authorizeOwner">;
63
+ readConfig(): Promise<unknown>;
64
+ writeConfig(config: unknown): Promise<void>;
65
+ }
66
+ export interface PersonalServerOauthTokenApiDeps {
67
+ tokenStore: OAuthTokenStorePort;
68
+ controlPlaneSecret?: string;
69
+ deviceSessions?: OAuthDeviceSessionLookup;
70
+ randomToken(): string;
71
+ now?: () => Date;
72
+ safeCompare?: (left: string, right: string) => boolean;
73
+ }
74
+ export interface PersonalServerApiDispatchOptions {
75
+ basePath?: string;
76
+ }
77
+ export declare function handlePersonalServerDataRequest(request: Request, deps: PersonalServerDataApiDeps, options?: PersonalServerApiDispatchOptions): Promise<Response>;
78
+ export declare function handlePersonalServerAccessLogsRequest(request: Request, deps: PersonalServerAccessLogsApiDeps, options?: PersonalServerApiDispatchOptions): Promise<Response>;
79
+ export declare function handlePersonalServerSyncRequest(request: Request, deps: PersonalServerSyncApiDeps, options?: PersonalServerApiDispatchOptions): Promise<Response>;
80
+ export declare function handlePersonalServerGrantsRequest(request: Request, deps: PersonalServerGrantsApiDeps, options?: PersonalServerApiDispatchOptions): Promise<Response>;
81
+ export declare function handlePersonalServerConfigRequest(request: Request, deps: PersonalServerConfigApiDeps): Promise<Response>;
82
+ export declare function handlePersonalServerOauthTokenRequest(request: Request, deps: PersonalServerOauthTokenApiDeps): Promise<Response>;
83
+ export type { DataReadPolicyPorts };
84
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,383 @@
1
+ import { ProtocolError } from "../errors/catalog.js";
2
+ import { deleteDataScopeContract, ingestDataContract, listAccessLogsContract, listDataScopesContract, listDataVersionsContract, parseDataScopeContract, parseJsonObjectBody, readDataContract, syncFileContract, triggerSyncContract, getSyncStatusContract, configReadErrorContract, configWriteErrorContract, createGrantContract, listGrantsContract, oauthTokenContract, validateServerConfigContract, verifyGrantContract, } from "../contracts/index.js";
3
+ function jsonResponse(body, init) {
4
+ const headers = new Headers(init?.headers);
5
+ headers.set("Content-Type", "application/json");
6
+ return new Response(JSON.stringify(body), { ...init, headers });
7
+ }
8
+ function contractResponse(result) {
9
+ return jsonResponse(result.body, { status: result.status });
10
+ }
11
+ function contractErrorResponse(err) {
12
+ return jsonResponse(err.body, { status: err.status });
13
+ }
14
+ function protocolErrorResponse(err) {
15
+ return jsonResponse(err.toJSON(), { status: err.code });
16
+ }
17
+ function errorResponse(status, errorCode, message) {
18
+ return jsonResponse({
19
+ error: {
20
+ code: status,
21
+ errorCode,
22
+ message,
23
+ },
24
+ }, { status });
25
+ }
26
+ function methodNotAllowed() {
27
+ return errorResponse(405, "METHOD_NOT_ALLOWED", "Method not allowed");
28
+ }
29
+ function notFound() {
30
+ return errorResponse(404, "NOT_FOUND", "Not found");
31
+ }
32
+ async function withApiErrors(handler) {
33
+ try {
34
+ return await handler();
35
+ }
36
+ catch (err) {
37
+ if (err instanceof ProtocolError) {
38
+ return protocolErrorResponse(err);
39
+ }
40
+ return errorResponse(500, "INTERNAL_ERROR", "Internal server error");
41
+ }
42
+ }
43
+ function normalizeLimit(value, fallback) {
44
+ if (value === null)
45
+ return fallback;
46
+ const parsed = Number(value);
47
+ return Number.isInteger(parsed) && parsed >= 0 ? parsed : fallback;
48
+ }
49
+ function stripBasePath(pathname, basePath) {
50
+ if (!basePath || basePath === "/")
51
+ return pathname;
52
+ if (pathname === basePath)
53
+ return "/";
54
+ if (pathname.startsWith(`${basePath}/`)) {
55
+ return pathname.slice(basePath.length);
56
+ }
57
+ return pathname;
58
+ }
59
+ function decodePathPart(value) {
60
+ return decodeURIComponent(value ?? "");
61
+ }
62
+ function selectedGrantId(request, url) {
63
+ return (url.searchParams.get("grantId") ??
64
+ request.headers.get("x-ps-grant-id") ??
65
+ undefined);
66
+ }
67
+ function collectedAt(now) {
68
+ return now()
69
+ .toISOString()
70
+ .replace(/\.\d{3}Z$/, "Z");
71
+ }
72
+ async function resolveSchema(deps, scope) {
73
+ if (!deps.schemaResolver) {
74
+ return {
75
+ ok: false,
76
+ response: errorResponse(500, "SERVER_NOT_CONFIGURED", "Gateway is not configured"),
77
+ };
78
+ }
79
+ try {
80
+ const schema = await deps.schemaResolver.getSchemaForScope(scope);
81
+ if (!schema) {
82
+ return {
83
+ ok: false,
84
+ response: jsonResponse({
85
+ error: "NO_SCHEMA",
86
+ message: `No schema registered for scope: ${scope}`,
87
+ }, { status: 400 }),
88
+ };
89
+ }
90
+ return {
91
+ ok: true,
92
+ schemaUrl: schema.definitionUrl,
93
+ schemaId: schema.id,
94
+ };
95
+ }
96
+ catch (err) {
97
+ deps.logger?.error?.({ err, scope }, "Gateway schema lookup failed");
98
+ return {
99
+ ok: false,
100
+ response: jsonResponse({
101
+ error: "GATEWAY_ERROR",
102
+ message: "Failed to look up schema for scope",
103
+ }, { status: 502 }),
104
+ };
105
+ }
106
+ }
107
+ function notifyNewData(syncManager) {
108
+ if (!syncManager)
109
+ return;
110
+ if (syncManager.notifyNewData) {
111
+ syncManager.notifyNewData();
112
+ return;
113
+ }
114
+ void syncManager.trigger().catch(() => undefined);
115
+ }
116
+ export async function handlePersonalServerDataRequest(request, deps, options = {}) {
117
+ return withApiErrors(async () => {
118
+ const url = new URL(request.url);
119
+ const pathname = stripBasePath(url.pathname, options.basePath);
120
+ if (pathname === "/" || pathname === "") {
121
+ if (request.method !== "GET")
122
+ return methodNotAllowed();
123
+ await deps.auth.authorizeBuilderList(request);
124
+ const result = listDataScopesContract({
125
+ storage: deps.storage,
126
+ scopePrefix: url.searchParams.get("scopePrefix") ?? undefined,
127
+ limit: normalizeLimit(url.searchParams.get("limit"), 20),
128
+ offset: normalizeLimit(url.searchParams.get("offset"), 0),
129
+ });
130
+ return jsonResponse(result.response);
131
+ }
132
+ const parts = pathname.split("/").filter(Boolean);
133
+ if (parts.length === 2 && parts[1] === "versions") {
134
+ if (request.method !== "GET")
135
+ return methodNotAllowed();
136
+ await deps.auth.authorizeBuilderList(request);
137
+ const result = listDataVersionsContract({
138
+ storage: deps.storage,
139
+ scopeParam: decodePathPart(parts[0]),
140
+ limit: normalizeLimit(url.searchParams.get("limit"), 20),
141
+ offset: normalizeLimit(url.searchParams.get("offset"), 0),
142
+ });
143
+ if (!result.ok)
144
+ return contractErrorResponse(result);
145
+ return jsonResponse(result.response);
146
+ }
147
+ if (parts.length !== 1)
148
+ return notFound();
149
+ const scopeParam = decodePathPart(parts[0]);
150
+ if (request.method === "GET") {
151
+ const scopeResult = parseDataScopeContract(scopeParam);
152
+ if (!scopeResult.ok)
153
+ return contractErrorResponse(scopeResult);
154
+ const selectedEntry = deps.storage.findEntry({
155
+ scope: scopeResult.scope,
156
+ fileId: url.searchParams.get("fileId") ?? undefined,
157
+ at: url.searchParams.get("at") ?? undefined,
158
+ });
159
+ const grantId = selectedGrantId(request, url);
160
+ const authResult = await deps.auth.authorizeBuilderRead({
161
+ request,
162
+ scope: scopeResult.scope,
163
+ grantId,
164
+ fileId: url.searchParams.get("fileId") ?? selectedEntry?.fileId ?? undefined,
165
+ });
166
+ const result = await readDataContract({
167
+ storage: deps.storage,
168
+ scopeParam: scopeResult.scope,
169
+ fileId: url.searchParams.get("fileId") ?? undefined,
170
+ at: url.searchParams.get("at") ?? undefined,
171
+ });
172
+ if (!result.ok)
173
+ return contractErrorResponse(result);
174
+ await deps.accessLogWriter.write({
175
+ logId: deps.createLogId?.() ?? crypto.randomUUID(),
176
+ grantId: authResult?.grantId ?? grantId ?? "unknown",
177
+ builder: authResult?.builder ?? "unknown",
178
+ action: "read",
179
+ scope: scopeResult.scope,
180
+ timestamp: (deps.now ?? (() => new Date()))().toISOString(),
181
+ ipAddress: request.headers.get("x-forwarded-for") ??
182
+ request.headers.get("x-real-ip") ??
183
+ "unknown",
184
+ userAgent: request.headers.get("user-agent") ?? "unknown",
185
+ });
186
+ return jsonResponse(result.envelope);
187
+ }
188
+ if (request.method === "POST") {
189
+ await deps.auth.authorizeOwner(request);
190
+ const scopeResult = parseDataScopeContract(scopeParam);
191
+ if (!scopeResult.ok)
192
+ return contractErrorResponse(scopeResult);
193
+ const parsed = await parseJsonObjectBody(request, "Request body must be valid JSON");
194
+ if (!parsed.ok)
195
+ return contractResponse(parsed.result);
196
+ const schema = await resolveSchema(deps, scopeResult.scope);
197
+ if (!schema.ok)
198
+ return schema.response;
199
+ const collectedAtValue = collectedAt(deps.now ?? (() => new Date()));
200
+ const result = await ingestDataContract({
201
+ storage: deps.storage,
202
+ scopeParam: scopeResult.scope,
203
+ body: parsed.body,
204
+ collectedAt: collectedAtValue,
205
+ status: deps.syncManager ? "syncing" : "stored",
206
+ schemaUrl: schema.schemaUrl,
207
+ schemaId: schema.schemaId,
208
+ });
209
+ if (!result.ok)
210
+ return contractErrorResponse(result);
211
+ deps.logger?.info?.({
212
+ scope: scopeResult.scope,
213
+ collectedAt: collectedAtValue,
214
+ path: result.writeResult.relativePath,
215
+ }, "Data file ingested");
216
+ notifyNewData(deps.syncManager);
217
+ return jsonResponse(result.response, { status: 201 });
218
+ }
219
+ if (request.method === "DELETE") {
220
+ await deps.auth.authorizeOwner(request);
221
+ const result = await deleteDataScopeContract({
222
+ storage: deps.storage,
223
+ scopeParam,
224
+ });
225
+ if (!result.ok)
226
+ return contractErrorResponse(result);
227
+ deps.logger?.info?.({ scope: scopeParam, deletedCount: result.deletedCount }, "Scope deleted");
228
+ return new Response(null, { status: 204 });
229
+ }
230
+ return methodNotAllowed();
231
+ });
232
+ }
233
+ export async function handlePersonalServerAccessLogsRequest(request, deps, options = {}) {
234
+ return withApiErrors(async () => {
235
+ const url = new URL(request.url);
236
+ const pathname = stripBasePath(url.pathname, options.basePath);
237
+ if (pathname !== "/" && pathname !== "")
238
+ return notFound();
239
+ if (request.method !== "GET")
240
+ return methodNotAllowed();
241
+ await deps.auth.authorizeOwner(request);
242
+ return contractResponse(await listAccessLogsContract({
243
+ accessLogReader: deps.accessLogReader,
244
+ limit: url.searchParams.get("limit"),
245
+ offset: url.searchParams.get("offset"),
246
+ }));
247
+ });
248
+ }
249
+ export async function handlePersonalServerSyncRequest(request, deps, options = {}) {
250
+ return withApiErrors(async () => {
251
+ const url = new URL(request.url);
252
+ const pathname = stripBasePath(url.pathname, options.basePath);
253
+ if (pathname === "/trigger") {
254
+ if (request.method !== "POST")
255
+ return methodNotAllowed();
256
+ await deps.auth.authorizeOwner(request);
257
+ return contractResponse(await triggerSyncContract(deps.syncManager));
258
+ }
259
+ if (pathname === "/status") {
260
+ if (request.method !== "GET")
261
+ return methodNotAllowed();
262
+ await deps.auth.authorizeOwner(request);
263
+ return contractResponse(getSyncStatusContract(deps.syncManager));
264
+ }
265
+ if (pathname.startsWith("/file/")) {
266
+ if (request.method !== "POST")
267
+ return methodNotAllowed();
268
+ await deps.auth.authorizeOwner(request);
269
+ const fileId = decodeURIComponent(pathname.slice("/file/".length));
270
+ deps.logger?.info?.({ fileId }, "File sync requested, triggering full sync");
271
+ return contractResponse(await syncFileContract({
272
+ fileId,
273
+ syncManager: deps.syncManager,
274
+ }));
275
+ }
276
+ return notFound();
277
+ });
278
+ }
279
+ export async function handlePersonalServerGrantsRequest(request, deps, options = {}) {
280
+ return withApiErrors(async () => {
281
+ const url = new URL(request.url);
282
+ const pathname = stripBasePath(url.pathname, options.basePath);
283
+ if (pathname === "/" || pathname === "") {
284
+ await deps.auth.authorizeOwner(request);
285
+ if (!deps.gateway) {
286
+ return errorResponse(500, "SERVER_NOT_CONFIGURED", "Gateway is not configured");
287
+ }
288
+ if (request.method === "GET") {
289
+ return contractResponse(await listGrantsContract({
290
+ gateway: deps.gateway,
291
+ serverOwner: deps.serverOwner,
292
+ }));
293
+ }
294
+ if (request.method === "POST") {
295
+ const parsed = await parseJsonObjectBody(request);
296
+ if (!parsed.ok)
297
+ return contractResponse(parsed.result);
298
+ return contractResponse(await createGrantContract({
299
+ gateway: deps.gateway,
300
+ serverOwner: deps.serverOwner,
301
+ serverSigner: deps.serverSigner,
302
+ body: parsed.body,
303
+ now: () => deps.now?.().getTime() ?? Date.now(),
304
+ }));
305
+ }
306
+ return methodNotAllowed();
307
+ }
308
+ if (pathname === "/verify") {
309
+ if (request.method !== "POST")
310
+ return methodNotAllowed();
311
+ const parsed = await parseJsonObjectBody(request);
312
+ if (!parsed.ok)
313
+ return contractResponse(parsed.result);
314
+ return contractResponse(await verifyGrantContract({
315
+ body: parsed.body,
316
+ gatewayConfig: deps.gatewayConfig,
317
+ }));
318
+ }
319
+ return notFound();
320
+ });
321
+ }
322
+ export async function handlePersonalServerConfigRequest(request, deps) {
323
+ return withApiErrors(async () => {
324
+ await deps.auth.authorizeOwner(request);
325
+ if (request.method === "GET") {
326
+ try {
327
+ return jsonResponse(await deps.readConfig());
328
+ }
329
+ catch (err) {
330
+ const kind = err instanceof Error &&
331
+ "code" in err &&
332
+ err.code === "ENOENT"
333
+ ? "not-found"
334
+ : "read";
335
+ return contractResponse(configReadErrorContract(kind));
336
+ }
337
+ }
338
+ if (request.method === "PUT") {
339
+ const parsed = await parseJsonObjectBody(request);
340
+ if (!parsed.ok)
341
+ return contractResponse(parsed.result);
342
+ const result = validateServerConfigContract(parsed.body);
343
+ if (!result.ok)
344
+ return contractResponse(result);
345
+ try {
346
+ await deps.writeConfig(result.body.config);
347
+ }
348
+ catch {
349
+ return contractResponse(configWriteErrorContract());
350
+ }
351
+ return contractResponse(result);
352
+ }
353
+ return methodNotAllowed();
354
+ });
355
+ }
356
+ export async function handlePersonalServerOauthTokenRequest(request, deps) {
357
+ return withApiErrors(async () => {
358
+ if (request.method !== "POST")
359
+ return methodNotAllowed();
360
+ const contentType = request.headers.get("content-type") ?? "";
361
+ if (!contentType.includes("application/x-www-form-urlencoded")) {
362
+ return jsonResponse({
363
+ error: "invalid_request",
364
+ error_description: "Content-Type must be application/x-www-form-urlencoded",
365
+ }, { status: 400 });
366
+ }
367
+ const result = await oauthTokenContract({
368
+ body: new URLSearchParams(await request.text()),
369
+ authorizationHeader: request.headers.get("authorization"),
370
+ tokenStore: deps.tokenStore,
371
+ controlPlaneSecret: deps.controlPlaneSecret,
372
+ deviceSessions: deps.deviceSessions,
373
+ randomToken: deps.randomToken,
374
+ now: deps.now,
375
+ safeCompare: deps.safeCompare,
376
+ });
377
+ return jsonResponse(result.body, {
378
+ status: result.status,
379
+ headers: result.headers,
380
+ });
381
+ });
382
+ }
383
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { authenticateRequest, mapSdkAuthError, type AuthenticatedRequest, type AuthenticateRequestInput, type AuthMechanism, type RequestAuth, type SessionTokenVerifierPort, } from "./request.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,wBAAwB,GAC9B,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { authenticateRequest, mapSdkAuthError, } from "./request.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,eAAe,GAMhB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { type Web3SignedPayload } from "@opendatalabs/vana-sdk/browser";
2
+ import { ProtocolError } from "../errors/catalog.js";
3
+ export type AuthMechanism = "web3-signed" | "dev-token" | "control-plane-token" | "cli-session-token";
4
+ export interface RequestAuth {
5
+ signer: `0x${string}`;
6
+ payload: Partial<Web3SignedPayload>;
7
+ }
8
+ export interface SessionTokenVerifierPort {
9
+ isValid(token: string): Promise<boolean>;
10
+ }
11
+ export interface AuthenticateRequestInput {
12
+ request: Request;
13
+ serverOrigin: string | (() => string);
14
+ devToken?: string;
15
+ accessToken?: string;
16
+ sessionTokenVerifier?: SessionTokenVerifierPort;
17
+ serverOwner?: `0x${string}`;
18
+ now?: () => number;
19
+ }
20
+ export interface AuthenticatedRequest {
21
+ auth: RequestAuth;
22
+ mechanism: AuthMechanism;
23
+ isPolicyBypass: boolean;
24
+ devBypass: boolean;
25
+ }
26
+ export declare function mapSdkAuthError(err: unknown): ProtocolError | null;
27
+ export declare function authenticateRequest(input: AuthenticateRequestInput): Promise<AuthenticatedRequest>;
28
+ //# sourceMappingURL=request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/auth/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAIL,aAAa,EACd,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,WAAW,GACX,qBAAqB,GACrB,mBAAmB,CAAC;AAExB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;IAChD,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,aAAa,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACpB;AAsDD,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAWlE;AAgBD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,oBAAoB,CAAC,CA8C/B"}
@@ -0,0 +1,106 @@
1
+ import { ExpiredTokenError as SdkExpiredTokenError, InvalidSignatureError as SdkInvalidSignatureError, MissingAuthError as SdkMissingAuthError, verifyWeb3Signed, } from "@opendatalabs/vana-sdk/browser";
2
+ import { ExpiredTokenError, InvalidSignatureError, MissingAuthError, ProtocolError, } from "../errors/catalog.js";
3
+ function resolveOrigin(origin) {
4
+ return typeof origin === "function" ? origin() : origin;
5
+ }
6
+ function serverNotConfigured() {
7
+ return new ProtocolError(500, "SERVER_NOT_CONFIGURED", "Server owner address not configured. Set VANA_MASTER_KEY_SIGNATURE environment variable.");
8
+ }
9
+ function createOwnerSessionAuth(serverOwner) {
10
+ return {
11
+ signer: serverOwner,
12
+ payload: {},
13
+ };
14
+ }
15
+ function safeCompare(a, b) {
16
+ const left = new TextEncoder().encode(a);
17
+ const right = new TextEncoder().encode(b);
18
+ const length = Math.max(left.length, right.length);
19
+ let diff = left.length ^ right.length;
20
+ for (let index = 0; index < length; index += 1) {
21
+ diff |= (left[index] ?? 0) ^ (right[index] ?? 0);
22
+ }
23
+ return diff === 0;
24
+ }
25
+ function getBearerToken(headerValue) {
26
+ if (!headerValue?.startsWith("Bearer "))
27
+ return null;
28
+ return headerValue.slice(7);
29
+ }
30
+ async function requestBodyBytes(request) {
31
+ if (request.method === "GET" || request.method === "HEAD")
32
+ return undefined;
33
+ return new Uint8Array(await request.clone().arrayBuffer());
34
+ }
35
+ function getErrorDetails(err) {
36
+ if (err && typeof err === "object" && "details" in err) {
37
+ const details = err.details;
38
+ if (details && typeof details === "object" && !Array.isArray(details)) {
39
+ return details;
40
+ }
41
+ }
42
+ return undefined;
43
+ }
44
+ export function mapSdkAuthError(err) {
45
+ if (err instanceof SdkMissingAuthError) {
46
+ return new MissingAuthError(getErrorDetails(err));
47
+ }
48
+ if (err instanceof SdkInvalidSignatureError) {
49
+ return new InvalidSignatureError(getErrorDetails(err));
50
+ }
51
+ if (err instanceof SdkExpiredTokenError) {
52
+ return new ExpiredTokenError(getErrorDetails(err));
53
+ }
54
+ return null;
55
+ }
56
+ function ownerTokenResult(serverOwner, mechanism, isPolicyBypass) {
57
+ if (!serverOwner)
58
+ throw serverNotConfigured();
59
+ return {
60
+ auth: createOwnerSessionAuth(serverOwner),
61
+ mechanism,
62
+ isPolicyBypass,
63
+ devBypass: isPolicyBypass,
64
+ };
65
+ }
66
+ export async function authenticateRequest(input) {
67
+ const authHeader = input.request.headers.get("authorization");
68
+ const bearerToken = getBearerToken(authHeader);
69
+ if (input.devToken && authHeader === `Bearer ${input.devToken}`) {
70
+ return ownerTokenResult(input.serverOwner, "dev-token", true);
71
+ }
72
+ if (input.accessToken &&
73
+ bearerToken &&
74
+ safeCompare(bearerToken, input.accessToken)) {
75
+ return ownerTokenResult(input.serverOwner, "control-plane-token", false);
76
+ }
77
+ if (input.sessionTokenVerifier &&
78
+ bearerToken &&
79
+ (await input.sessionTokenVerifier.isValid(bearerToken))) {
80
+ return ownerTokenResult(input.serverOwner, "cli-session-token", false);
81
+ }
82
+ try {
83
+ const url = new URL(input.request.url);
84
+ const auth = await verifyWeb3Signed({
85
+ headerValue: authHeader ?? undefined,
86
+ expectedOrigin: resolveOrigin(input.serverOrigin),
87
+ expectedMethod: input.request.method,
88
+ expectedPath: url.pathname,
89
+ bodyBytes: await requestBodyBytes(input.request),
90
+ now: input.now?.(),
91
+ });
92
+ return {
93
+ auth,
94
+ mechanism: "web3-signed",
95
+ isPolicyBypass: false,
96
+ devBypass: false,
97
+ };
98
+ }
99
+ catch (err) {
100
+ const authError = mapSdkAuthError(err);
101
+ if (authError)
102
+ throw authError;
103
+ throw err;
104
+ }
105
+ }
106
+ //# sourceMappingURL=request.js.map