@opendatalabs/personal-server-ts-server 0.0.1-canary.0078f25

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 (101) hide show
  1. package/dist/api.d.ts +2 -0
  2. package/dist/api.d.ts.map +1 -0
  3. package/dist/api.js +2 -0
  4. package/dist/api.js.map +1 -0
  5. package/dist/app.d.ts +35 -0
  6. package/dist/app.d.ts.map +1 -0
  7. package/dist/app.js +124 -0
  8. package/dist/app.js.map +1 -0
  9. package/dist/bootstrap.d.ts +35 -0
  10. package/dist/bootstrap.d.ts.map +1 -0
  11. package/dist/bootstrap.js +232 -0
  12. package/dist/bootstrap.js.map +1 -0
  13. package/dist/dev-token.d.ts +6 -0
  14. package/dist/dev-token.d.ts.map +1 -0
  15. package/dist/dev-token.js +9 -0
  16. package/dist/dev-token.js.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +60 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/middleware/access-log.d.ts +8 -0
  22. package/dist/middleware/access-log.d.ts.map +1 -0
  23. package/dist/middleware/access-log.js +38 -0
  24. package/dist/middleware/access-log.js.map +1 -0
  25. package/dist/middleware/body-limit.d.ts +10 -0
  26. package/dist/middleware/body-limit.d.ts.map +1 -0
  27. package/dist/middleware/body-limit.js +20 -0
  28. package/dist/middleware/body-limit.js.map +1 -0
  29. package/dist/middleware/builder-check.d.ts +8 -0
  30. package/dist/middleware/builder-check.d.ts.map +1 -0
  31. package/dist/middleware/builder-check.js +29 -0
  32. package/dist/middleware/builder-check.js.map +1 -0
  33. package/dist/middleware/grant-check.d.ts +12 -0
  34. package/dist/middleware/grant-check.d.ts.map +1 -0
  35. package/dist/middleware/grant-check.js +90 -0
  36. package/dist/middleware/grant-check.js.map +1 -0
  37. package/dist/middleware/owner-check.d.ts +9 -0
  38. package/dist/middleware/owner-check.d.ts.map +1 -0
  39. package/dist/middleware/owner-check.js +37 -0
  40. package/dist/middleware/owner-check.js.map +1 -0
  41. package/dist/middleware/web3-auth.d.ts +16 -0
  42. package/dist/middleware/web3-auth.d.ts.map +1 -0
  43. package/dist/middleware/web3-auth.js +58 -0
  44. package/dist/middleware/web3-auth.js.map +1 -0
  45. package/dist/routes/access-logs.d.ts +16 -0
  46. package/dist/routes/access-logs.d.ts.map +1 -0
  47. package/dist/routes/access-logs.js +30 -0
  48. package/dist/routes/access-logs.js.map +1 -0
  49. package/dist/routes/data.d.ts +20 -0
  50. package/dist/routes/data.d.ts.map +1 -0
  51. package/dist/routes/data.js +213 -0
  52. package/dist/routes/data.js.map +1 -0
  53. package/dist/routes/grants.d.ts +17 -0
  54. package/dist/routes/grants.d.ts.map +1 -0
  55. package/dist/routes/grants.js +208 -0
  56. package/dist/routes/grants.js.map +1 -0
  57. package/dist/routes/health.d.ts +16 -0
  58. package/dist/routes/health.d.ts.map +1 -0
  59. package/dist/routes/health.js +37 -0
  60. package/dist/routes/health.js.map +1 -0
  61. package/dist/routes/mcp.d.ts +7 -0
  62. package/dist/routes/mcp.d.ts.map +1 -0
  63. package/dist/routes/mcp.js +14 -0
  64. package/dist/routes/mcp.js.map +1 -0
  65. package/dist/routes/sync.d.ts +16 -0
  66. package/dist/routes/sync.d.ts.map +1 -0
  67. package/dist/routes/sync.js +52 -0
  68. package/dist/routes/sync.js.map +1 -0
  69. package/dist/routes/ui-config.d.ts +7 -0
  70. package/dist/routes/ui-config.d.ts.map +1 -0
  71. package/dist/routes/ui-config.js +89 -0
  72. package/dist/routes/ui-config.js.map +1 -0
  73. package/dist/routes/ui.d.ts +6 -0
  74. package/dist/routes/ui.d.ts.map +1 -0
  75. package/dist/routes/ui.js +36 -0
  76. package/dist/routes/ui.js.map +1 -0
  77. package/dist/tunnel/auth.d.ts +46 -0
  78. package/dist/tunnel/auth.d.ts.map +1 -0
  79. package/dist/tunnel/auth.js +46 -0
  80. package/dist/tunnel/auth.js.map +1 -0
  81. package/dist/tunnel/binary.d.ts +57 -0
  82. package/dist/tunnel/binary.d.ts.map +1 -0
  83. package/dist/tunnel/binary.js +180 -0
  84. package/dist/tunnel/binary.js.map +1 -0
  85. package/dist/tunnel/config.d.ts +27 -0
  86. package/dist/tunnel/config.d.ts.map +1 -0
  87. package/dist/tunnel/config.js +38 -0
  88. package/dist/tunnel/config.js.map +1 -0
  89. package/dist/tunnel/index.d.ts +13 -0
  90. package/dist/tunnel/index.d.ts.map +1 -0
  91. package/dist/tunnel/index.js +9 -0
  92. package/dist/tunnel/index.js.map +1 -0
  93. package/dist/tunnel/manager.d.ts +88 -0
  94. package/dist/tunnel/manager.d.ts.map +1 -0
  95. package/dist/tunnel/manager.js +279 -0
  96. package/dist/tunnel/manager.js.map +1 -0
  97. package/dist/tunnel/verify.d.ts +28 -0
  98. package/dist/tunnel/verify.d.ts.map +1 -0
  99. package/dist/tunnel/verify.js +40 -0
  100. package/dist/tunnel/verify.js.map +1 -0
  101. package/package.json +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/routes/data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Grants routes — GET / (owner), POST / (create grant), POST /verify (public).
3
+ */
4
+ import { Hono } from "hono";
5
+ import type { Logger } from "pino";
6
+ import type { GatewayClient } from "@opendatalabs/personal-server-ts-core/gateway";
7
+ import type { ServerSigner } from "@opendatalabs/personal-server-ts-core/signing";
8
+ export interface GrantsRouteDeps {
9
+ logger: Logger;
10
+ gateway: GatewayClient;
11
+ serverOwner?: `0x${string}`;
12
+ serverOrigin: string | (() => string);
13
+ devToken?: string;
14
+ serverSigner?: ServerSigner;
15
+ }
16
+ export declare function grantsRoutes(deps: GrantsRouteDeps): Hono;
17
+ //# sourceMappingURL=grants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grants.d.ts","sourceRoot":"","sources":["../../src/routes/grants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAKnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAIlF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAoED,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAwMxD"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Grants routes — GET / (owner), POST / (create grant), POST /verify (public).
3
+ */
4
+ import { Hono } from "hono";
5
+ import { verifyTypedData } from "viem";
6
+ import { GRANT_DOMAIN, GRANT_TYPES, } from "@opendatalabs/personal-server-ts-core/grants";
7
+ import { createWeb3AuthMiddleware } from "../middleware/web3-auth.js";
8
+ import { createOwnerCheckMiddleware } from "../middleware/owner-check.js";
9
+ function isValidCreateBody(body) {
10
+ if (body === null || typeof body !== "object" || Array.isArray(body))
11
+ return false;
12
+ const b = body;
13
+ if (typeof b.granteeAddress !== "string" ||
14
+ !b.granteeAddress.startsWith("0x"))
15
+ return false;
16
+ if (!Array.isArray(b.scopes) || b.scopes.length === 0)
17
+ return false;
18
+ if (!b.scopes.every((s) => typeof s === "string"))
19
+ return false;
20
+ if (b.expiresAt !== undefined && typeof b.expiresAt !== "number")
21
+ return false;
22
+ if (b.nonce !== undefined && typeof b.nonce !== "number")
23
+ return false;
24
+ return true;
25
+ }
26
+ function isValidVerifyBody(body) {
27
+ if (body === null || typeof body !== "object" || Array.isArray(body))
28
+ return false;
29
+ const b = body;
30
+ if (typeof b.grantId !== "string" || b.grantId.length === 0)
31
+ return false;
32
+ if (typeof b.signature !== "string" || !b.signature.startsWith("0x"))
33
+ return false;
34
+ if (b.payload === null ||
35
+ typeof b.payload !== "object" ||
36
+ Array.isArray(b.payload))
37
+ return false;
38
+ const p = b.payload;
39
+ if (typeof p.user !== "string" || !p.user.startsWith("0x"))
40
+ return false;
41
+ if (typeof p.builder !== "string" || !p.builder.startsWith("0x"))
42
+ return false;
43
+ if (!Array.isArray(p.scopes) || p.scopes.length === 0)
44
+ return false;
45
+ if (!p.scopes.every((s) => typeof s === "string"))
46
+ return false;
47
+ if (typeof p.expiresAt !== "number")
48
+ return false;
49
+ if (typeof p.nonce !== "number")
50
+ return false;
51
+ return true;
52
+ }
53
+ export function grantsRoutes(deps) {
54
+ const app = new Hono();
55
+ const web3Auth = createWeb3AuthMiddleware({
56
+ serverOrigin: deps.serverOrigin,
57
+ devToken: deps.devToken,
58
+ serverOwner: deps.serverOwner,
59
+ });
60
+ const ownerCheck = createOwnerCheckMiddleware(deps.serverOwner);
61
+ // GET / — list all grants for the server owner (owner auth required)
62
+ app.get("/", web3Auth, ownerCheck, async (c) => {
63
+ if (!deps.serverOwner) {
64
+ return c.json({
65
+ error: {
66
+ code: 500,
67
+ errorCode: "SERVER_NOT_CONFIGURED",
68
+ message: "Server owner address not configured. Set VANA_MASTER_KEY_SIGNATURE environment variable.",
69
+ },
70
+ }, 500);
71
+ }
72
+ const grants = await deps.gateway.listGrantsByUser(deps.serverOwner);
73
+ return c.json({ grants });
74
+ });
75
+ // POST / — create a grant (owner-only, called by Desktop App)
76
+ app.post("/", web3Auth, ownerCheck, async (c) => {
77
+ if (!deps.serverOwner) {
78
+ return c.json({
79
+ error: {
80
+ code: 500,
81
+ errorCode: "SERVER_NOT_CONFIGURED",
82
+ message: "Server owner address not configured. Set VANA_MASTER_KEY_SIGNATURE environment variable.",
83
+ },
84
+ }, 500);
85
+ }
86
+ if (!deps.serverSigner) {
87
+ return c.json({
88
+ error: {
89
+ code: 500,
90
+ errorCode: "SERVER_SIGNER_NOT_CONFIGURED",
91
+ message: "Server signer not configured. Set VANA_MASTER_KEY_SIGNATURE environment variable.",
92
+ },
93
+ }, 500);
94
+ }
95
+ let body;
96
+ try {
97
+ body = await c.req.json();
98
+ }
99
+ catch {
100
+ return c.json({ error: "INVALID_BODY", message: "Invalid JSON body" }, 400);
101
+ }
102
+ if (!isValidCreateBody(body)) {
103
+ return c.json({
104
+ error: "INVALID_BODY",
105
+ message: "Body must include granteeAddress (0x string) and scopes (non-empty string array)",
106
+ }, 400);
107
+ }
108
+ const { granteeAddress, scopes, expiresAt, nonce } = body;
109
+ // Look up builder to get their on-chain ID
110
+ const builder = await deps.gateway.getBuilder(granteeAddress);
111
+ if (!builder) {
112
+ return c.json({
113
+ error: {
114
+ code: 404,
115
+ errorCode: "BUILDER_NOT_REGISTERED",
116
+ message: `Builder ${granteeAddress} is not registered on-chain`,
117
+ },
118
+ }, 404);
119
+ }
120
+ // Build the grant payload JSON string
121
+ const grantPayload = JSON.stringify({
122
+ user: deps.serverOwner,
123
+ builder: granteeAddress,
124
+ scopes,
125
+ expiresAt: expiresAt ?? 0,
126
+ nonce: nonce ?? Date.now(),
127
+ });
128
+ // Sign EIP-712 GrantRegistration
129
+ const signature = await deps.serverSigner.signGrantRegistration({
130
+ grantorAddress: deps.serverOwner,
131
+ granteeId: builder.id,
132
+ grant: grantPayload,
133
+ fileIds: [],
134
+ });
135
+ // Submit to Gateway
136
+ const result = await deps.gateway.createGrant({
137
+ grantorAddress: deps.serverOwner,
138
+ granteeId: builder.id,
139
+ grant: grantPayload,
140
+ fileIds: [],
141
+ signature,
142
+ });
143
+ return c.json({ grantId: result.grantId }, 201);
144
+ });
145
+ // POST /verify — public endpoint, no auth required
146
+ app.post("/verify", async (c) => {
147
+ let body;
148
+ try {
149
+ body = await c.req.json();
150
+ }
151
+ catch {
152
+ return c.json({ error: "INVALID_BODY", message: "Invalid JSON body" }, 400);
153
+ }
154
+ if (!isValidVerifyBody(body)) {
155
+ return c.json({
156
+ error: "INVALID_BODY",
157
+ message: "Body must include grantId (string), payload (object with user, builder, scopes, expiresAt, nonce), and signature (0x string)",
158
+ }, 400);
159
+ }
160
+ const { payload, signature } = body;
161
+ // Verify EIP-712 signature — recover signer and check === payload.user
162
+ let valid;
163
+ try {
164
+ valid = await verifyTypedData({
165
+ address: payload.user,
166
+ domain: GRANT_DOMAIN,
167
+ types: GRANT_TYPES,
168
+ primaryType: "Grant",
169
+ message: {
170
+ user: payload.user,
171
+ builder: payload.builder,
172
+ scopes: payload.scopes,
173
+ expiresAt: BigInt(payload.expiresAt),
174
+ nonce: BigInt(payload.nonce),
175
+ },
176
+ signature: signature,
177
+ });
178
+ }
179
+ catch {
180
+ return c.json({
181
+ valid: false,
182
+ error: "EIP-712 signature verification failed",
183
+ });
184
+ }
185
+ if (!valid) {
186
+ return c.json({
187
+ valid: false,
188
+ error: "Grant signature does not match user",
189
+ });
190
+ }
191
+ // Check expiry: expiresAt > 0 means there IS an expiry
192
+ if (payload.expiresAt > 0) {
193
+ const nowSeconds = Math.floor(Date.now() / 1000);
194
+ if (payload.expiresAt < nowSeconds) {
195
+ return c.json({ valid: false, error: "Grant has expired" });
196
+ }
197
+ }
198
+ return c.json({
199
+ valid: true,
200
+ user: payload.user,
201
+ builder: payload.builder,
202
+ scopes: payload.scopes,
203
+ expiresAt: payload.expiresAt,
204
+ });
205
+ });
206
+ return app;
207
+ }
208
+ //# sourceMappingURL=grants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grants.js","sourceRoot":"","sources":["../../src/routes/grants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Hono } from "hono";
2
+ import type { GatewayClient } from "@opendatalabs/personal-server-ts-core/gateway";
3
+ import type { Logger } from "pino";
4
+ import type { IdentityInfo } from "../app.js";
5
+ import type { TunnelStatusInfo } from "../tunnel/index.js";
6
+ export interface HealthDeps {
7
+ version: string;
8
+ startedAt: Date;
9
+ serverOwner?: `0x${string}`;
10
+ identity?: IdentityInfo;
11
+ gateway?: GatewayClient;
12
+ logger?: Logger;
13
+ getTunnelStatus?: () => TunnelStatusInfo | null;
14
+ }
15
+ export declare function healthRoute(deps: HealthDeps): Hono;
16
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,gBAAgB,GAAG,IAAI,CAAC;CACjD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CA0ClD"}
@@ -0,0 +1,37 @@
1
+ import { Hono } from "hono";
2
+ export function healthRoute(deps) {
3
+ const app = new Hono();
4
+ app.get("/health", async (c) => {
5
+ const uptimeMs = Date.now() - deps.startedAt.getTime();
6
+ let serverId = deps.identity?.serverId ?? null;
7
+ if (deps.identity && deps.gateway) {
8
+ try {
9
+ const server = await deps.gateway.getServer(deps.identity.address);
10
+ serverId = server?.id ?? null;
11
+ }
12
+ catch (err) {
13
+ // Keep health endpoint available even if gateway is unreachable.
14
+ serverId = null;
15
+ deps.logger?.debug({ err, serverAddress: deps.identity.address }, "Gateway lookup failed during health check");
16
+ }
17
+ }
18
+ const identity = deps.identity
19
+ ? {
20
+ address: deps.identity.address,
21
+ publicKey: deps.identity.publicKey,
22
+ serverId,
23
+ }
24
+ : null;
25
+ const tunnel = deps.getTunnelStatus?.() ?? null;
26
+ return c.json({
27
+ status: "healthy",
28
+ version: deps.version,
29
+ uptime: Math.floor(uptimeMs / 1000),
30
+ owner: deps.serverOwner ?? null,
31
+ identity,
32
+ tunnel,
33
+ });
34
+ });
35
+ return app;
36
+ }
37
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAiB5B,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACvD,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC;QAE/C,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACnE,QAAQ,GAAG,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,iEAAiE;gBACjE,QAAQ,GAAG,IAAI,CAAC;gBAChB,IAAI,CAAC,MAAM,EAAE,KAAK,CAChB,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAC7C,2CAA2C,CAC5C,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC5B,CAAC,CAAC;gBACE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;gBAC9B,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS;gBAClC,QAAQ;aACT;YACH,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,IAAI,CAAC;QAEhD,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;YACnC,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;YAC/B,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Hono } from "hono";
2
+ import type { McpContext } from "@opendatalabs/personal-server-ts-mcp";
3
+ export interface McpRouteDeps {
4
+ mcpContext: McpContext;
5
+ }
6
+ export declare function mcpRoute(deps: McpRouteDeps): Hono;
7
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/routes/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAEvE,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAWjD"}
@@ -0,0 +1,14 @@
1
+ import { Hono } from "hono";
2
+ import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
3
+ import { createMcpServer } from "@opendatalabs/personal-server-ts-mcp";
4
+ export function mcpRoute(deps) {
5
+ const app = new Hono();
6
+ app.all("/", async (c) => {
7
+ const transport = new WebStandardStreamableHTTPServerTransport();
8
+ const server = createMcpServer(deps.mcpContext);
9
+ await server.connect(transport);
10
+ return transport.handleRequest(c.req.raw);
11
+ });
12
+ return app;
13
+ }
14
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/routes/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,wCAAwC,EAAE,MAAM,+DAA+D,CAAC;AACzH,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAOvE,MAAM,UAAU,QAAQ,CAAC,IAAkB;IACzC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,SAAS,GAAG,IAAI,wCAAwC,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Sync routes — endpoints for triggering and monitoring the sync engine.
3
+ * All endpoints require owner authentication.
4
+ */
5
+ import { Hono } from "hono";
6
+ import type { Logger } from "pino";
7
+ import type { SyncManager } from "@opendatalabs/personal-server-ts-core/sync";
8
+ export interface SyncRouteDeps {
9
+ logger: Logger;
10
+ serverOrigin: string | (() => string);
11
+ serverOwner?: `0x${string}`;
12
+ devToken?: string;
13
+ syncManager: SyncManager | null;
14
+ }
15
+ export declare function syncRoutes(deps: SyncRouteDeps): Hono;
16
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/routes/sync.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAI9E,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CACjC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAsDpD"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Sync routes — endpoints for triggering and monitoring the sync engine.
3
+ * All endpoints require owner authentication.
4
+ */
5
+ import { Hono } from "hono";
6
+ import { createWeb3AuthMiddleware } from "../middleware/web3-auth.js";
7
+ import { createOwnerCheckMiddleware } from "../middleware/owner-check.js";
8
+ export function syncRoutes(deps) {
9
+ const app = new Hono();
10
+ const web3Auth = createWeb3AuthMiddleware({
11
+ serverOrigin: deps.serverOrigin,
12
+ devToken: deps.devToken,
13
+ serverOwner: deps.serverOwner,
14
+ });
15
+ const ownerCheck = createOwnerCheckMiddleware(deps.serverOwner);
16
+ // POST /trigger — request a full sync (owner auth required)
17
+ app.post("/trigger", web3Auth, ownerCheck, async (c) => {
18
+ if (!deps.syncManager) {
19
+ return c.json({ status: "disabled", message: "Sync is not enabled" }, 200);
20
+ }
21
+ await deps.syncManager.trigger();
22
+ return c.json({ status: "started", message: "Sync triggered" }, 202);
23
+ });
24
+ // GET /status — current sync status (owner auth required)
25
+ app.get("/status", web3Auth, ownerCheck, async (c) => {
26
+ if (!deps.syncManager) {
27
+ return c.json({
28
+ enabled: false,
29
+ running: false,
30
+ lastSync: null,
31
+ lastProcessedTimestamp: null,
32
+ pendingFiles: 0,
33
+ errors: [],
34
+ });
35
+ }
36
+ return c.json(deps.syncManager.getStatus());
37
+ });
38
+ // POST /file/:fileId — request sync for a specific file (owner auth required)
39
+ app.post("/file/:fileId", web3Auth, ownerCheck, async (c) => {
40
+ const fileId = c.req.param("fileId");
41
+ if (!deps.syncManager) {
42
+ return c.json({ fileId, status: "disabled", message: "Sync is not enabled" }, 200);
43
+ }
44
+ // Trigger a full sync (individual file sync is handled by the download worker
45
+ // when it encounters the fileId from Gateway)
46
+ deps.logger.info({ fileId }, "File sync requested, triggering full sync");
47
+ await deps.syncManager.trigger();
48
+ return c.json({ fileId, status: "started" }, 202);
49
+ });
50
+ return app;
51
+ }
52
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/routes/sync.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAU1E,MAAM,UAAU,UAAU,CAAC,IAAmB;IAC5C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,MAAM,QAAQ,GAAG,wBAAwB,CAAC;QACxC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,0BAA0B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEhE,4DAA4D;IAC5D,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACrD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,qBAAqB,EAAE,EACtD,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACjC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,0DAA0D;IAC1D,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACnD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,IAAI;gBACd,sBAAsB,EAAE,IAAI;gBAC5B,YAAY,EAAE,CAAC;gBACf,MAAM,EAAE,EAAE;aACX,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAC9D,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,8EAA8E;QAC9E,8CAA8C;QAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,2CAA2C,CAAC,CAAC;QAC1E,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACjC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Hono } from "hono";
2
+ export interface UiConfigRouteDeps {
3
+ devToken: string;
4
+ configPath: string;
5
+ }
6
+ export declare function uiConfigRoutes(deps: UiConfigRouteDeps): Hono;
7
+ //# sourceMappingURL=ui-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-config.d.ts","sourceRoot":"","sources":["../../src/routes/ui-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CA8G5D"}
@@ -0,0 +1,89 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import { Hono } from "hono";
3
+ import { ServerConfigSchema } from "@opendatalabs/personal-server-ts-core/schemas";
4
+ export function uiConfigRoutes(deps) {
5
+ const app = new Hono();
6
+ const requireDevToken = async (c, next) => {
7
+ const authHeader = c.req.header("authorization");
8
+ if (authHeader !== `Bearer ${deps.devToken}`) {
9
+ return c.json({
10
+ error: {
11
+ code: 401,
12
+ errorCode: "UNAUTHORIZED",
13
+ message: "Invalid dev token",
14
+ },
15
+ }, 401);
16
+ }
17
+ await next();
18
+ };
19
+ // GET /ui/api/config — read config from disk
20
+ app.get("/config", requireDevToken, async (c) => {
21
+ try {
22
+ const contents = await readFile(deps.configPath, "utf-8");
23
+ const config = JSON.parse(contents);
24
+ return c.json(config);
25
+ }
26
+ catch (err) {
27
+ if (err instanceof Error &&
28
+ "code" in err &&
29
+ err.code === "ENOENT") {
30
+ return c.json({
31
+ error: {
32
+ code: 404,
33
+ errorCode: "NOT_FOUND",
34
+ message: "Config file not found",
35
+ },
36
+ }, 404);
37
+ }
38
+ return c.json({
39
+ error: {
40
+ code: 500,
41
+ errorCode: "READ_ERROR",
42
+ message: "Failed to read config",
43
+ },
44
+ }, 500);
45
+ }
46
+ });
47
+ // PUT /ui/api/config — validate and write config to disk
48
+ app.put("/config", requireDevToken, async (c) => {
49
+ let body;
50
+ try {
51
+ body = await c.req.json();
52
+ }
53
+ catch {
54
+ return c.json({
55
+ error: {
56
+ code: 400,
57
+ errorCode: "INVALID_BODY",
58
+ message: "Invalid JSON body",
59
+ },
60
+ }, 400);
61
+ }
62
+ const result = ServerConfigSchema.safeParse(body);
63
+ if (!result.success) {
64
+ return c.json({
65
+ error: {
66
+ code: 400,
67
+ errorCode: "VALIDATION_ERROR",
68
+ message: "Invalid config",
69
+ issues: result.error.issues,
70
+ },
71
+ }, 400);
72
+ }
73
+ try {
74
+ await writeFile(deps.configPath, JSON.stringify(result.data, null, 2) + "\n");
75
+ return c.json({ status: "saved", config: result.data });
76
+ }
77
+ catch {
78
+ return c.json({
79
+ error: {
80
+ code: 500,
81
+ errorCode: "WRITE_ERROR",
82
+ message: "Failed to write config",
83
+ },
84
+ }, 500);
85
+ }
86
+ });
87
+ return app;
88
+ }
89
+ //# sourceMappingURL=ui-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-config.js","sourceRoot":"","sources":["../../src/routes/ui-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Hono } from "hono";
2
+ export interface UiRouteDeps {
3
+ devToken: string;
4
+ }
5
+ export declare function uiRoute(deps: UiRouteDeps): Hono;
6
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/routes/ui.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiBD,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAsB/C"}
@@ -0,0 +1,36 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { join, dirname } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { Hono } from "hono";
5
+ // Read the HTML file once at module load time
6
+ let cachedHtml = null;
7
+ function getHtmlPath() {
8
+ const currentDir = dirname(fileURLToPath(import.meta.url));
9
+ return join(currentDir, "..", "ui", "index.html");
10
+ }
11
+ function loadHtml(devToken) {
12
+ if (!cachedHtml) {
13
+ cachedHtml = readFileSync(getHtmlPath(), "utf-8");
14
+ }
15
+ return cachedHtml.replace("__DEV_TOKEN__", devToken);
16
+ }
17
+ export function uiRoute(deps) {
18
+ const app = new Hono();
19
+ app.get("/", (c) => {
20
+ try {
21
+ const html = loadHtml(deps.devToken);
22
+ return c.html(html);
23
+ }
24
+ catch {
25
+ return c.json({
26
+ error: {
27
+ code: 500,
28
+ errorCode: "UI_ERROR",
29
+ message: "Failed to load UI",
30
+ },
31
+ }, 500);
32
+ }
33
+ });
34
+ return app;
35
+ }
36
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/routes/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAM5B,8CAA8C;AAC9C,IAAI,UAAU,GAAkB,IAAI,CAAC;AAErC,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,QAAQ,CAAC,QAAgB;IAChC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,YAAY,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAiB;IACvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,IAAI,CACX;gBACE,KAAK,EAAE;oBACL,IAAI,EAAE,GAAG;oBACT,SAAS,EAAE,UAAU;oBACrB,OAAO,EAAE,mBAAmB;iBAC7B;aACF,EACD,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Tunnel authentication via EIP-191 signed claims.
3
+ *
4
+ * Generates signed claims for FRP server plugin-first Login/NewProxy validation.
5
+ * The claim is a base64url-encoded JSON payload signed with EIP-191.
6
+ */
7
+ import type { ServerAccount } from "@opendatalabs/personal-server-ts-core/keys";
8
+ /** Claim time-to-live in seconds. Used for refresh scheduling. */
9
+ export declare const CLAIM_TTL_SECONDS = 300;
10
+ export interface SignedClaim {
11
+ claim: string;
12
+ sig: string;
13
+ }
14
+ export interface ClaimPayload {
15
+ aud: string;
16
+ iat: number;
17
+ exp: number;
18
+ owner: string;
19
+ wallet: string;
20
+ subdomain: string;
21
+ runId: string;
22
+ }
23
+ export interface ClaimConfig {
24
+ ownerAddress: string;
25
+ walletAddress: string;
26
+ runId: string;
27
+ serverKeypair: ServerAccount;
28
+ }
29
+ /** Encode a UTF-8 string to base64url (no padding). */
30
+ export declare function base64urlEncode(input: string): string;
31
+ /**
32
+ * Generate a signed claim for tunnel authentication.
33
+ *
34
+ * The claim payload contains:
35
+ * - aud: "https://tunnel.vana.org" (audience)
36
+ * - iat: issued-at timestamp (seconds)
37
+ * - exp: expiration timestamp (5 min TTL)
38
+ * - owner: owner wallet address
39
+ * - wallet: server wallet address
40
+ * - subdomain: lowercased wallet address
41
+ * - runId: unique per-process session ID
42
+ *
43
+ * The signature is EIP-191 over the base64url-encoded claim string.
44
+ */
45
+ export declare function generateSignedClaim(config: ClaimConfig): Promise<SignedClaim>;
46
+ //# sourceMappingURL=auth.d.ts.map