@opendatalabs/personal-server-ts-server 0.0.1-canary.b75bcfa → 0.0.1-canary.bc229f5
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.
- package/dist/api-auth.d.ts +17 -0
- package/dist/api-auth.d.ts.map +1 -0
- package/dist/api-auth.js +77 -0
- package/dist/api-auth.js.map +1 -0
- package/dist/api.d.ts +3 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +2 -0
- package/dist/api.js.map +1 -1
- package/dist/app.d.ts +17 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +56 -30
- package/dist/app.js.map +1 -1
- package/dist/bootstrap.d.ts +8 -3
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +102 -25
- package/dist/bootstrap.js.map +1 -1
- package/dist/client.d.ts +17 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +226 -0
- package/dist/client.js.map +1 -0
- package/dist/config/defaults.d.ts +12 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +14 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +4 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +8 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +74 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/paths.d.ts +9 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +22 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/hono-context.d.ts +14 -0
- package/dist/hono-context.d.ts.map +1 -0
- package/dist/hono-context.js +2 -0
- package/dist/hono-context.js.map +1 -0
- package/dist/index.js +63 -12
- package/dist/index.js.map +1 -1
- package/dist/keys/server-account.d.ts +28 -0
- package/dist/keys/server-account.d.ts.map +1 -0
- package/dist/keys/server-account.js +48 -0
- package/dist/keys/server-account.js.map +1 -0
- package/dist/logger/index.d.ts +5 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +9 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logging/access-log.d.ts +15 -0
- package/dist/logging/access-log.d.ts.map +1 -0
- package/dist/logging/access-log.js +25 -0
- package/dist/logging/access-log.js.map +1 -0
- package/dist/logging/access-reader.d.ts +19 -0
- package/dist/logging/access-reader.d.ts.map +1 -0
- package/dist/logging/access-reader.js +50 -0
- package/dist/logging/access-reader.js.map +1 -0
- package/dist/middleware/access-log.d.ts.map +1 -1
- package/dist/middleware/access-log.js +8 -2
- package/dist/middleware/access-log.js.map +1 -1
- package/dist/middleware/builder-check.d.ts +2 -2
- package/dist/middleware/builder-check.d.ts.map +1 -1
- package/dist/middleware/builder-check.js +7 -2
- package/dist/middleware/builder-check.js.map +1 -1
- package/dist/middleware/data-read-policy.d.ts +11 -0
- package/dist/middleware/data-read-policy.d.ts.map +1 -0
- package/dist/middleware/data-read-policy.js +39 -0
- package/dist/middleware/data-read-policy.js.map +1 -0
- package/dist/middleware/owner-check.js +1 -1
- package/dist/middleware/owner-check.js.map +1 -1
- package/dist/middleware/web3-auth.d.ts +11 -0
- package/dist/middleware/web3-auth.d.ts.map +1 -1
- package/dist/middleware/web3-auth.js +21 -31
- package/dist/middleware/web3-auth.js.map +1 -1
- package/dist/migrations/local-state.d.ts +21 -0
- package/dist/migrations/local-state.d.ts.map +1 -0
- package/dist/migrations/local-state.js +106 -0
- package/dist/migrations/local-state.js.map +1 -0
- package/dist/routes/access-logs.d.ts +7 -0
- package/dist/routes/access-logs.d.ts.map +1 -1
- package/dist/routes/access-logs.js +11 -17
- package/dist/routes/access-logs.js.map +1 -1
- package/dist/routes/auth-device.d.ts +48 -0
- package/dist/routes/auth-device.d.ts.map +1 -0
- package/dist/routes/auth-device.js +578 -0
- package/dist/routes/auth-device.js.map +1 -0
- package/dist/routes/data.d.ts +10 -1
- package/dist/routes/data.d.ts.map +1 -1
- package/dist/routes/data.js +25 -201
- package/dist/routes/data.js.map +1 -1
- package/dist/routes/grants.d.ts +7 -1
- package/dist/routes/grants.d.ts.map +1 -1
- package/dist/routes/grants.js +13 -195
- package/dist/routes/grants.js.map +1 -1
- package/dist/routes/health.d.ts +7 -1
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +24 -1
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/oauth-token.d.ts +56 -0
- package/dist/routes/oauth-token.d.ts.map +1 -0
- package/dist/routes/oauth-token.js +49 -0
- package/dist/routes/oauth-token.js.map +1 -0
- package/dist/routes/sync.d.ts +7 -0
- package/dist/routes/sync.d.ts.map +1 -1
- package/dist/routes/sync.js +12 -39
- package/dist/routes/sync.js.map +1 -1
- package/dist/routes/ui-config.d.ts.map +1 -1
- package/dist/routes/ui-config.js +17 -82
- package/dist/routes/ui-config.js.map +1 -1
- package/dist/routes/ui-registration.d.ts +7 -0
- package/dist/routes/ui-registration.d.ts.map +1 -0
- package/dist/routes/ui-registration.js +209 -0
- package/dist/routes/ui-registration.js.map +1 -0
- package/dist/routes/ui.d.ts +1 -0
- package/dist/routes/ui.d.ts.map +1 -1
- package/dist/routes/ui.js +46 -4
- package/dist/routes/ui.js.map +1 -1
- package/dist/storage/hierarchy.d.ts +16 -0
- package/dist/storage/hierarchy.d.ts.map +1 -0
- package/dist/storage/hierarchy.js +60 -0
- package/dist/storage/hierarchy.js.map +1 -0
- package/dist/storage/index-manager.d.ts +37 -0
- package/dist/storage/index-manager.d.ts.map +1 -0
- package/dist/storage/index-manager.js +134 -0
- package/dist/storage/index-manager.js.map +1 -0
- package/dist/storage/index-schema.d.ts +5 -0
- package/dist/storage/index-schema.d.ts.map +1 -0
- package/dist/storage/index-schema.js +48 -0
- package/dist/storage/index-schema.js.map +1 -0
- package/dist/storage/node-data-storage.d.ts +9 -0
- package/dist/storage/node-data-storage.d.ts.map +1 -0
- package/dist/storage/node-data-storage.js +48 -0
- package/dist/storage/node-data-storage.js.map +1 -0
- package/dist/sync-cursor.d.ts +15 -0
- package/dist/sync-cursor.d.ts.map +1 -0
- package/dist/sync-cursor.js +71 -0
- package/dist/sync-cursor.js.map +1 -0
- package/dist/token-store.d.ts +22 -0
- package/dist/token-store.d.ts.map +1 -0
- package/dist/token-store.js +120 -0
- package/dist/token-store.js.map +1 -0
- package/dist/tunnel/manager.js +1 -1
- package/dist/tunnel/manager.js.map +1 -1
- package/dist/tunnel/verify.d.ts +1 -1
- package/dist/tunnel/verify.d.ts.map +1 -1
- package/dist/tunnel/verify.js +8 -2
- package/dist/tunnel/verify.js.map +1 -1
- package/dist/ui/browser_tls_rustls_bg.wasm +0 -0
- package/dist/ui/index.html +1946 -0
- package/dist/ui/ps-lite-debug.d.ts +62 -0
- package/dist/ui/ps-lite-debug.d.ts.map +1 -0
- package/dist/ui/ps-lite-debug.js +55095 -0
- package/dist/ui/ps-lite-debug.js.map +1 -0
- package/package.json +20 -8
- package/dist/middleware/grant-check.d.ts +0 -12
- package/dist/middleware/grant-check.d.ts.map +0 -1
- package/dist/middleware/grant-check.js +0 -90
- package/dist/middleware/grant-check.js.map +0 -1
- package/dist/oauth/provider.d.ts +0 -55
- package/dist/oauth/provider.d.ts.map +0 -1
- package/dist/oauth/provider.js +0 -160
- package/dist/oauth/provider.js.map +0 -1
- package/dist/oauth/routes.d.ts +0 -10
- package/dist/oauth/routes.d.ts.map +0 -1
- package/dist/oauth/routes.js +0 -206
- package/dist/oauth/routes.js.map +0 -1
- package/dist/routes/mcp.d.ts +0 -10
- package/dist/routes/mcp.d.ts.map +0 -1
- package/dist/routes/mcp.js +0 -64
- package/dist/routes/mcp.js.map +0 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type SessionTokenVerifierPort } from "@opendatalabs/personal-server-ts-core/auth";
|
|
2
|
+
import type { PersonalServerApiAuthPort } from "@opendatalabs/personal-server-ts-core/api";
|
|
3
|
+
import type { DataStoragePort, FeeVerifierPort, RuntimeAvailabilityPort } from "@opendatalabs/personal-server-ts-core/ports";
|
|
4
|
+
import type { GatewayClient } from "@opendatalabs/vana-sdk/node";
|
|
5
|
+
export interface ServerApiAuthDeps {
|
|
6
|
+
serverOrigin: string | (() => string);
|
|
7
|
+
serverOwner?: `0x${string}`;
|
|
8
|
+
gateway: GatewayClient;
|
|
9
|
+
devToken?: string;
|
|
10
|
+
accessToken?: string;
|
|
11
|
+
tokenStore?: SessionTokenVerifierPort;
|
|
12
|
+
dataStorage?: Pick<DataStoragePort, "findEntry">;
|
|
13
|
+
feeVerifier?: FeeVerifierPort;
|
|
14
|
+
runtimeAvailability?: RuntimeAvailabilityPort;
|
|
15
|
+
}
|
|
16
|
+
export declare function createServerApiAuth(deps: ServerApiAuthDeps): PersonalServerApiAuthPort;
|
|
17
|
+
//# sourceMappingURL=api-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-auth.d.ts","sourceRoot":"","sources":["../src/api-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EACV,yBAAyB,EAE1B,MAAM,2CAA2C,CAAC;AAOnD,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,WAAW,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACjD,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;CAC/C;AA6CD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,iBAAiB,GACtB,yBAAyB,CAoD3B"}
|
package/dist/api-auth.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { authenticateRequest, } from "@opendatalabs/personal-server-ts-core/auth";
|
|
2
|
+
import { verifyDataReadPolicy } from "@opendatalabs/personal-server-ts-core/policy";
|
|
3
|
+
import { NotOwnerError, ProtocolError, UnregisteredBuilderError, } from "@opendatalabs/personal-server-ts-core/errors";
|
|
4
|
+
function serverNotConfigured() {
|
|
5
|
+
return new ProtocolError(500, "SERVER_NOT_CONFIGURED", "Server owner address not configured. Set VANA_MASTER_KEY_SIGNATURE environment variable.");
|
|
6
|
+
}
|
|
7
|
+
function isOwner(signer, serverOwner) {
|
|
8
|
+
return Boolean(serverOwner && signer.toLowerCase() === serverOwner.toLowerCase());
|
|
9
|
+
}
|
|
10
|
+
async function authenticate(request, deps) {
|
|
11
|
+
return authenticateRequest({
|
|
12
|
+
request,
|
|
13
|
+
serverOrigin: deps.serverOrigin,
|
|
14
|
+
devToken: deps.devToken,
|
|
15
|
+
accessToken: deps.accessToken,
|
|
16
|
+
sessionTokenVerifier: deps.tokenStore,
|
|
17
|
+
serverOwner: deps.serverOwner,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async function assertRegisteredBuilder(gateway, signer) {
|
|
21
|
+
if ("isRegisteredBuilder" in gateway) {
|
|
22
|
+
if (await gateway.isRegisteredBuilder(signer))
|
|
23
|
+
return;
|
|
24
|
+
throw new UnregisteredBuilderError();
|
|
25
|
+
}
|
|
26
|
+
const builder = await gateway.getBuilder(signer);
|
|
27
|
+
if (!builder)
|
|
28
|
+
throw new UnregisteredBuilderError();
|
|
29
|
+
}
|
|
30
|
+
export function createServerApiAuth(deps) {
|
|
31
|
+
return {
|
|
32
|
+
async authorizeOwner(request) {
|
|
33
|
+
const result = await authenticate(request, deps);
|
|
34
|
+
if (result.isPolicyBypass)
|
|
35
|
+
return;
|
|
36
|
+
if (!deps.serverOwner)
|
|
37
|
+
throw serverNotConfigured();
|
|
38
|
+
if (!isOwner(result.auth.signer, deps.serverOwner)) {
|
|
39
|
+
throw new NotOwnerError({
|
|
40
|
+
signer: result.auth.signer,
|
|
41
|
+
expected: deps.serverOwner,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
async authorizeBuilderList(request) {
|
|
46
|
+
const result = await authenticate(request, deps);
|
|
47
|
+
if (result.isPolicyBypass ||
|
|
48
|
+
isOwner(result.auth.signer, deps.serverOwner)) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
await assertRegisteredBuilder(deps.gateway, result.auth.signer);
|
|
52
|
+
},
|
|
53
|
+
async authorizeBuilderRead(input) {
|
|
54
|
+
const result = await authenticate(input.request, deps);
|
|
55
|
+
if (result.isPolicyBypass) {
|
|
56
|
+
return { builder: result.auth.signer, grantId: "policy-bypass" };
|
|
57
|
+
}
|
|
58
|
+
const selectedEntry = deps.dataStorage?.findEntry({
|
|
59
|
+
scope: input.scope,
|
|
60
|
+
fileId: input.fileId,
|
|
61
|
+
});
|
|
62
|
+
const grant = await verifyDataReadPolicy({
|
|
63
|
+
signer: result.auth.signer,
|
|
64
|
+
grantId: result.auth.payload.grantId ?? input.grantId,
|
|
65
|
+
requestedScope: input.scope,
|
|
66
|
+
fileId: input.fileId ?? selectedEntry?.fileId ?? undefined,
|
|
67
|
+
}, {
|
|
68
|
+
authSessionVerifier: deps.gateway,
|
|
69
|
+
grantVerifier: deps.gateway,
|
|
70
|
+
feeVerifier: deps.feeVerifier,
|
|
71
|
+
runtimeAvailability: deps.runtimeAvailability,
|
|
72
|
+
});
|
|
73
|
+
return { builder: result.auth.signer, grantId: grant.id };
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=api-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-auth.js","sourceRoot":"","sources":["../src/api-auth.ts"],"names":[],"mappings":"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"}
|
package/dist/api.d.ts
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
export { createServer, type CreateServerOptions, type ServerContext, } from "./bootstrap.js";
|
|
2
|
+
export { startPersonalServer, type StartPersonalServerNodeOptions, } from "./client.js";
|
|
3
|
+
export type { PersonalServerHandle, PersonalServerInfo, PersonalServerRegistrationRequest, PersonalServerStatus, } from "@opendatalabs/personal-server-ts-core/client";
|
|
4
|
+
export { DEFAULT_ROOT_PATH, DEFAULT_CONFIG_PATH, DEFAULT_DATA_DIR, DEFAULT_SERVER_DIR, DEFAULT_VANA_DIR, expandHomePath, loadConfig, resolveRootPath, type LoadConfigOptions, } from "./config/index.js";
|
|
2
5
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,KAAK,8BAA8B,GACpC,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,iCAAiC,EACjC,oBAAoB,GACrB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,eAAe,EACf,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC"}
|
package/dist/api.js
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export { createServer, } from "./bootstrap.js";
|
|
2
|
+
export { startPersonalServer, } from "./client.js";
|
|
3
|
+
export { DEFAULT_ROOT_PATH, DEFAULT_CONFIG_PATH, DEFAULT_DATA_DIR, DEFAULT_SERVER_DIR, DEFAULT_VANA_DIR, expandHomePath, loadConfig, resolveRootPath, } from "./config/index.js";
|
|
2
4
|
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAGb,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAGb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AAOrB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,eAAe,GAEhB,MAAM,mBAAmB,CAAC"}
|
package/dist/app.d.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
2
|
import type { IndexManager } from "@opendatalabs/personal-server-ts-core/storage/index";
|
|
3
3
|
import type { HierarchyManagerOptions } from "@opendatalabs/personal-server-ts-core/storage/hierarchy";
|
|
4
|
-
import type { GatewayClient } from "@opendatalabs/
|
|
4
|
+
import type { DataPortabilityGatewayConfig, GatewayClient } from "@opendatalabs/vana-sdk/node";
|
|
5
|
+
import type { ServerConfig } from "@opendatalabs/personal-server-ts-core/schemas";
|
|
5
6
|
import type { AccessLogWriter } from "@opendatalabs/personal-server-ts-core/logging/access-log";
|
|
6
7
|
import type { AccessLogReader } from "@opendatalabs/personal-server-ts-core/logging/access-reader";
|
|
7
8
|
import { type HealthDeps } from "./routes/health.js";
|
|
8
9
|
import type { SyncManager } from "@opendatalabs/personal-server-ts-core/sync";
|
|
9
10
|
import type { ServerSigner } from "@opendatalabs/personal-server-ts-core/signing";
|
|
11
|
+
import type { DataStoragePort, FeeVerifierPort, RuntimeAvailabilityPort } from "@opendatalabs/personal-server-ts-core/ports";
|
|
12
|
+
import type { TokenStore } from "./token-store.js";
|
|
10
13
|
import type { Logger } from "pino";
|
|
11
14
|
export interface IdentityInfo {
|
|
12
15
|
address: `0x${string}`;
|
|
@@ -20,15 +23,28 @@ export interface AppDeps {
|
|
|
20
23
|
indexManager: IndexManager;
|
|
21
24
|
hierarchyOptions: HierarchyManagerOptions;
|
|
22
25
|
serverOrigin: string | (() => string);
|
|
26
|
+
localApprovalOrigin?: string | (() => string | undefined);
|
|
23
27
|
serverOwner?: `0x${string}`;
|
|
24
28
|
identity?: IdentityInfo;
|
|
25
29
|
gateway: GatewayClient;
|
|
30
|
+
gatewayConfig?: DataPortabilityGatewayConfig & {
|
|
31
|
+
url?: string;
|
|
32
|
+
};
|
|
33
|
+
config?: ServerConfig;
|
|
26
34
|
accessLogWriter: AccessLogWriter;
|
|
27
35
|
accessLogReader: AccessLogReader;
|
|
36
|
+
cloudMode?: boolean;
|
|
28
37
|
devToken?: string;
|
|
38
|
+
ownerSignature?: `0x${string}`;
|
|
39
|
+
ownerPrivateKey?: `0x${string}`;
|
|
40
|
+
accessToken?: string;
|
|
29
41
|
configPath?: string;
|
|
30
42
|
syncManager?: SyncManager | null;
|
|
31
43
|
serverSigner?: ServerSigner;
|
|
44
|
+
tokenStore?: TokenStore;
|
|
45
|
+
feeVerifier?: FeeVerifierPort;
|
|
46
|
+
runtimeAvailability?: RuntimeAvailabilityPort;
|
|
47
|
+
dataStorage?: DataStoragePort;
|
|
32
48
|
getTunnelStatus?: HealthDeps["getTunnelStatus"];
|
|
33
49
|
}
|
|
34
50
|
export declare function createApp(deps: AppDeps): Hono;
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AACvG,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AACvG,OAAO,KAAK,EACV,4BAA4B,EAC5B,aAAa,EACd,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0DAA0D,CAAC;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AACnG,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAalE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,KAAK,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,mBAAmB,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1D,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,4BAA4B,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC9C,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,eAAe,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;CACjD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAwM7C"}
|
package/dist/app.js
CHANGED
|
@@ -7,23 +7,16 @@ import { grantsRoutes } from "./routes/grants.js";
|
|
|
7
7
|
import { accessLogsRoutes } from "./routes/access-logs.js";
|
|
8
8
|
import { syncRoutes } from "./routes/sync.js";
|
|
9
9
|
import { uiConfigRoutes } from "./routes/ui-config.js";
|
|
10
|
+
import { uiRegistrationRoutes } from "./routes/ui-registration.js";
|
|
10
11
|
import { uiRoute } from "./routes/ui.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { oauthRoutes } from "./oauth/routes.js";
|
|
12
|
+
import { authDeviceRoutes, createDeviceSessionLookup, } from "./routes/auth-device.js";
|
|
13
|
+
import { oauthTokenRoutes } from "./routes/oauth-token.js";
|
|
14
14
|
export function createApp(deps) {
|
|
15
15
|
const app = new Hono();
|
|
16
16
|
// CORS — allow all origins for browser-based clients
|
|
17
17
|
app.use("*", cors({
|
|
18
18
|
origin: "*",
|
|
19
|
-
allowHeaders: [
|
|
20
|
-
"Content-Type",
|
|
21
|
-
"Authorization",
|
|
22
|
-
"mcp-session-id",
|
|
23
|
-
"Last-Event-ID",
|
|
24
|
-
"mcp-protocol-version",
|
|
25
|
-
],
|
|
26
|
-
exposeHeaders: ["mcp-session-id", "mcp-protocol-version"],
|
|
19
|
+
allowHeaders: ["Content-Type", "Authorization"],
|
|
27
20
|
allowMethods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
|
|
28
21
|
maxAge: 86400,
|
|
29
22
|
}));
|
|
@@ -31,11 +24,14 @@ export function createApp(deps) {
|
|
|
31
24
|
app.route("/", healthRoute({
|
|
32
25
|
version: deps.version,
|
|
33
26
|
startedAt: deps.startedAt,
|
|
27
|
+
serverOrigin: deps.serverOrigin,
|
|
34
28
|
serverOwner: deps.serverOwner,
|
|
35
29
|
identity: deps.identity,
|
|
36
30
|
gateway: deps.gateway,
|
|
31
|
+
gatewayConfig: deps.gatewayConfig,
|
|
37
32
|
logger: deps.logger,
|
|
38
33
|
getTunnelStatus: deps.getTunnelStatus,
|
|
34
|
+
runtimeAvailability: deps.runtimeAvailability,
|
|
39
35
|
}));
|
|
40
36
|
// Mount data routes (ingest + read + delete)
|
|
41
37
|
app.route("/v1/data", dataRoutes({
|
|
@@ -47,16 +43,26 @@ export function createApp(deps) {
|
|
|
47
43
|
gateway: deps.gateway,
|
|
48
44
|
accessLogWriter: deps.accessLogWriter,
|
|
49
45
|
devToken: deps.devToken,
|
|
46
|
+
accessToken: deps.accessToken,
|
|
47
|
+
tokenStore: deps.tokenStore,
|
|
50
48
|
syncManager: deps.syncManager ?? null,
|
|
49
|
+
feeVerifier: deps.feeVerifier,
|
|
50
|
+
runtimeAvailability: deps.runtimeAvailability,
|
|
51
|
+
dataStorage: deps.dataStorage,
|
|
52
|
+
mountPath: "/v1/data",
|
|
51
53
|
}));
|
|
52
54
|
// Mount grants routes (POST /verify is public, GET / and POST / need owner auth)
|
|
53
55
|
app.route("/v1/grants", grantsRoutes({
|
|
54
56
|
logger: deps.logger,
|
|
55
57
|
gateway: deps.gateway,
|
|
58
|
+
gatewayConfig: deps.gatewayConfig,
|
|
56
59
|
serverOwner: deps.serverOwner,
|
|
57
60
|
serverOrigin: deps.serverOrigin,
|
|
58
61
|
devToken: deps.devToken,
|
|
62
|
+
accessToken: deps.accessToken,
|
|
63
|
+
tokenStore: deps.tokenStore,
|
|
59
64
|
serverSigner: deps.serverSigner,
|
|
65
|
+
mountPath: "/v1/grants",
|
|
60
66
|
}));
|
|
61
67
|
// Mount access-logs routes (all owner auth)
|
|
62
68
|
app.route("/v1/access-logs", accessLogsRoutes({
|
|
@@ -64,47 +70,67 @@ export function createApp(deps) {
|
|
|
64
70
|
accessLogReader: deps.accessLogReader,
|
|
65
71
|
serverOrigin: deps.serverOrigin,
|
|
66
72
|
serverOwner: deps.serverOwner,
|
|
73
|
+
gateway: deps.gateway,
|
|
67
74
|
devToken: deps.devToken,
|
|
75
|
+
accessToken: deps.accessToken,
|
|
76
|
+
tokenStore: deps.tokenStore,
|
|
77
|
+
mountPath: "/v1/access-logs",
|
|
68
78
|
}));
|
|
69
79
|
// Mount sync routes (all owner auth)
|
|
70
80
|
app.route("/v1/sync", syncRoutes({
|
|
71
81
|
logger: deps.logger,
|
|
72
82
|
serverOrigin: deps.serverOrigin,
|
|
73
83
|
serverOwner: deps.serverOwner,
|
|
84
|
+
gateway: deps.gateway,
|
|
74
85
|
devToken: deps.devToken,
|
|
86
|
+
accessToken: deps.accessToken,
|
|
87
|
+
tokenStore: deps.tokenStore,
|
|
75
88
|
syncManager: deps.syncManager ?? null,
|
|
89
|
+
mountPath: "/v1/sync",
|
|
76
90
|
}));
|
|
77
|
-
// Mount
|
|
78
|
-
if (deps.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
app.route("/", oauthRoutes({
|
|
82
|
-
oauthProvider,
|
|
83
|
-
serverOwner: deps.serverOwner,
|
|
84
|
-
accountPortalOrigin: process.env.ACCOUNT_URL,
|
|
91
|
+
// Mount login flow v2 routes (self-hosted CLI auth, no auth required)
|
|
92
|
+
if (deps.tokenStore) {
|
|
93
|
+
app.route("/auth/device", authDeviceRoutes({
|
|
94
|
+
logger: deps.logger,
|
|
85
95
|
serverOrigin: deps.serverOrigin,
|
|
96
|
+
localApprovalOrigin: deps.localApprovalOrigin,
|
|
97
|
+
serverOwner: deps.serverOwner,
|
|
98
|
+
tokenStore: deps.tokenStore,
|
|
99
|
+
devToken: deps.devToken,
|
|
100
|
+
accessToken: deps.accessToken,
|
|
101
|
+
allowInteractiveLogin: !deps.cloudMode,
|
|
86
102
|
}));
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
oauthProvider,
|
|
96
|
-
serverOrigin: deps.serverOrigin,
|
|
103
|
+
// RFC 6749 token endpoint. Replaces ad-hoc `/auth/device/token` semantics
|
|
104
|
+
// with a standard OAuth2 surface that supports both the cloud
|
|
105
|
+
// control-plane `client_credentials` grant and the CLI device-code grant.
|
|
106
|
+
app.route("/oauth/token", oauthTokenRoutes({
|
|
107
|
+
logger: deps.logger,
|
|
108
|
+
tokenStore: deps.tokenStore,
|
|
109
|
+
controlPlaneSecret: deps.accessToken,
|
|
110
|
+
deviceSessions: createDeviceSessionLookup(),
|
|
97
111
|
}));
|
|
98
112
|
}
|
|
99
113
|
// Mount dev UI routes when dev token is available
|
|
100
114
|
if (deps.devToken) {
|
|
101
|
-
app.route("/ui", uiRoute({
|
|
115
|
+
app.route("/ui", uiRoute({
|
|
116
|
+
devToken: deps.devToken,
|
|
117
|
+
psLiteBootstrap: deps.ownerSignature
|
|
118
|
+
? {
|
|
119
|
+
ownerSignature: deps.ownerSignature,
|
|
120
|
+
config: deps.config,
|
|
121
|
+
}
|
|
122
|
+
: null,
|
|
123
|
+
}));
|
|
102
124
|
if (deps.configPath) {
|
|
103
125
|
app.route("/ui/api", uiConfigRoutes({
|
|
104
126
|
devToken: deps.devToken,
|
|
105
127
|
configPath: deps.configPath,
|
|
106
128
|
}));
|
|
107
129
|
}
|
|
130
|
+
app.route("/ui/api", uiRegistrationRoutes({
|
|
131
|
+
devToken: deps.devToken,
|
|
132
|
+
ownerPrivateKey: deps.ownerPrivateKey,
|
|
133
|
+
}));
|
|
108
134
|
}
|
|
109
135
|
// Global error handler
|
|
110
136
|
app.onError((err, c) => {
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/bootstrap.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ServerConfig } from "@opendatalabs/personal-server-ts-core/schemas";
|
|
2
|
-
import { type Logger } from "
|
|
3
|
-
import { type IndexManager } from "
|
|
4
|
-
import type { GatewayClient } from "@opendatalabs/
|
|
2
|
+
import { type Logger } from "./logger/index.js";
|
|
3
|
+
import { type IndexManager } from "./storage/index-manager.js";
|
|
4
|
+
import type { GatewayClient } from "@opendatalabs/vana-sdk/node";
|
|
5
5
|
import type { AccessLogReader } from "@opendatalabs/personal-server-ts-core/logging/access-reader";
|
|
6
6
|
import type { ServerAccount } from "@opendatalabs/personal-server-ts-core/keys";
|
|
7
7
|
import type { ServerSigner } from "@opendatalabs/personal-server-ts-core/signing";
|
|
@@ -21,6 +21,9 @@ export interface ServerContext {
|
|
|
21
21
|
syncManager: SyncManager | null;
|
|
22
22
|
tunnelManager?: TunnelManager;
|
|
23
23
|
tunnelUrl?: string;
|
|
24
|
+
localApprovalPort?: number;
|
|
25
|
+
getLocalApprovalOrigin: () => string | undefined;
|
|
26
|
+
setLocalApprovalOrigin: (origin?: string) => void;
|
|
24
27
|
devToken?: string;
|
|
25
28
|
startBackgroundServices: () => Promise<void>;
|
|
26
29
|
cleanup: () => Promise<void>;
|
|
@@ -30,6 +33,8 @@ export interface CreateServerOptions {
|
|
|
30
33
|
/** @deprecated Use rootPath instead. */
|
|
31
34
|
serverDir?: string;
|
|
32
35
|
dataDir?: string;
|
|
36
|
+
ownerSignature?: `0x${string}`;
|
|
37
|
+
gatewayClient?: GatewayClient;
|
|
33
38
|
}
|
|
34
39
|
export declare function createServer(config: ServerConfig, options?: CreateServerOptions): Promise<ServerContext>;
|
|
35
40
|
//# sourceMappingURL=bootstrap.d.ts.map
|
package/dist/bootstrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAElF,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAMnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAEhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAElF,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAKjC,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AAGpE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACjD,sBAAsB,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AA0BD,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,CAAC,CA4UxB"}
|
package/dist/bootstrap.js
CHANGED
|
@@ -4,19 +4,43 @@ import { randomUUID } from "node:crypto";
|
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
const require = createRequire(import.meta.url);
|
|
6
6
|
const pkg = require("../package.json");
|
|
7
|
-
import { DEFAULT_ROOT_PATH, resolveRootPath
|
|
8
|
-
import { createLogger
|
|
9
|
-
import { initializeDatabase
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
7
|
+
import { DEFAULT_ROOT_PATH, resolveRootPath } from "./config/index.js";
|
|
8
|
+
import { createLogger } from "./logger/index.js";
|
|
9
|
+
import { initializeDatabase } from "./storage/index-schema.js";
|
|
10
|
+
import { createIndexManager, } from "./storage/index-manager.js";
|
|
11
|
+
import { createGatewayClient } from "@opendatalabs/vana-sdk/node";
|
|
12
|
+
import { createAccessLogWriter } from "./logging/access-log.js";
|
|
13
|
+
import { createAccessLogReader } from "./logging/access-reader.js";
|
|
14
|
+
import { deriveMasterKey, recoverServerOwner, } from "@opendatalabs/vana-sdk/node";
|
|
15
|
+
import { loadOrCreateServerAccount } from "./keys/server-account.js";
|
|
16
|
+
import { createServerSigner } from "@opendatalabs/personal-server-ts-core/signing";
|
|
17
|
+
import { createSyncCursor } from "./sync-cursor.js";
|
|
18
|
+
import { createSyncManager, } from "@opendatalabs/personal-server-ts-core/sync";
|
|
19
|
+
import { createVanaSyncStorageAdapter } from "@opendatalabs/personal-server-ts-core/storage/adapters";
|
|
17
20
|
import { createApp } from "./app.js";
|
|
18
21
|
import { generateDevToken } from "./dev-token.js";
|
|
22
|
+
import { migrateLocalState } from "./migrations/local-state.js";
|
|
23
|
+
import { createTokenStore } from "./token-store.js";
|
|
19
24
|
import { TunnelManager, ensureFrpcBinary } from "./tunnel/index.js";
|
|
25
|
+
import { createNodeDataStorage } from "./storage/node-data-storage.js";
|
|
26
|
+
const DEFAULT_LOCAL_APPROVAL_PORT = 34127;
|
|
27
|
+
function resolveLocalApprovalPort(serverPort) {
|
|
28
|
+
const raw = process.env.LOCAL_AUTH_PORT;
|
|
29
|
+
if (raw !== undefined) {
|
|
30
|
+
const parsed = Number(raw);
|
|
31
|
+
if (Number.isInteger(parsed) &&
|
|
32
|
+
parsed >= 1 &&
|
|
33
|
+
parsed <= 65535 &&
|
|
34
|
+
parsed !== serverPort) {
|
|
35
|
+
return parsed;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const adjacentPort = serverPort + 1;
|
|
39
|
+
if (adjacentPort <= 65535) {
|
|
40
|
+
return adjacentPort;
|
|
41
|
+
}
|
|
42
|
+
return DEFAULT_LOCAL_APPROVAL_PORT;
|
|
43
|
+
}
|
|
20
44
|
export async function createServer(config, options) {
|
|
21
45
|
const logger = createLogger(config.logging);
|
|
22
46
|
const startedAt = new Date();
|
|
@@ -24,14 +48,26 @@ export async function createServer(config, options) {
|
|
|
24
48
|
const dataDir = options?.dataDir ?? join(storageRoot, "data");
|
|
25
49
|
const indexPath = join(storageRoot, "index.db");
|
|
26
50
|
const configPath = join(storageRoot, "config.json");
|
|
51
|
+
const syncCursorPath = join(storageRoot, "sync-cursor.json");
|
|
52
|
+
const tokensPath = join(storageRoot, "tokens.json");
|
|
27
53
|
await mkdir(storageRoot, { recursive: true });
|
|
28
54
|
await mkdir(dataDir, { recursive: true });
|
|
29
55
|
const db = initializeDatabase(indexPath);
|
|
56
|
+
await migrateLocalState({
|
|
57
|
+
storageRoot,
|
|
58
|
+
dataDir,
|
|
59
|
+
configPath,
|
|
60
|
+
syncCursorPath,
|
|
61
|
+
tokensPath,
|
|
62
|
+
});
|
|
30
63
|
const indexManager = createIndexManager(db);
|
|
31
64
|
const hierarchyOptions = { dataDir };
|
|
32
|
-
const
|
|
65
|
+
const dataStorage = createNodeDataStorage({ indexManager, hierarchyOptions });
|
|
66
|
+
const gatewayClient = options?.gatewayClient ?? createGatewayClient(config.gateway.url);
|
|
33
67
|
// Derive server owner from VANA_MASTER_KEY_SIGNATURE env var
|
|
34
|
-
const masterKeySignature =
|
|
68
|
+
const masterKeySignature = options?.ownerSignature ??
|
|
69
|
+
process.env.VANA_MASTER_KEY_SIGNATURE;
|
|
70
|
+
const ownerPrivateKey = process.env.VANA_OWNER_PRIVATE_KEY;
|
|
35
71
|
let serverOwner;
|
|
36
72
|
let serverAccount;
|
|
37
73
|
let serverSigner;
|
|
@@ -58,6 +94,30 @@ export async function createServer(config, options) {
|
|
|
58
94
|
else {
|
|
59
95
|
logger.warn("VANA_MASTER_KEY_SIGNATURE not set — owner-restricted endpoints will return 500");
|
|
60
96
|
}
|
|
97
|
+
// Resolve PS_ACCESS_TOKEN for cloud control-plane / bootstrap auth.
|
|
98
|
+
// This is not the per-login CLI session token returned to users.
|
|
99
|
+
let accessToken = process.env.PS_ACCESS_TOKEN;
|
|
100
|
+
if (!accessToken && process.env.CLOUD_MODE === "true") {
|
|
101
|
+
try {
|
|
102
|
+
const metadataRes = await fetch("http://metadata.google.internal/computeMetadata/v1/instance/attributes/ps-access-token", {
|
|
103
|
+
headers: { "Metadata-Flavor": "Google" },
|
|
104
|
+
signal: AbortSignal.timeout(2000),
|
|
105
|
+
});
|
|
106
|
+
if (metadataRes.ok) {
|
|
107
|
+
const token = (await metadataRes.text()).trim();
|
|
108
|
+
if (token.length > 0) {
|
|
109
|
+
accessToken = token;
|
|
110
|
+
logger.info("PS control-plane token loaded from instance metadata");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
logger.debug("Could not read PS control-plane token from instance metadata");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (accessToken) {
|
|
119
|
+
logger.info("PS_ACCESS_TOKEN configured — control-plane bearer auth enabled");
|
|
120
|
+
}
|
|
61
121
|
// Download frpc binary eagerly (auth-independent) so it's ready when the user signs in
|
|
62
122
|
let frpcBinaryPath = "";
|
|
63
123
|
if (config.tunnel.enabled) {
|
|
@@ -78,19 +138,16 @@ export async function createServer(config, options) {
|
|
|
78
138
|
serverAccount &&
|
|
79
139
|
serverSigner) {
|
|
80
140
|
const masterKey = deriveMasterKey(masterKeySignature);
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
signer: requestSigner,
|
|
141
|
+
const storageAdapter = createVanaSyncStorageAdapter({
|
|
142
|
+
config,
|
|
143
|
+
serverOwner,
|
|
144
|
+
serverAccount,
|
|
145
|
+
});
|
|
146
|
+
const cursor = createSyncCursor(syncCursorPath, {
|
|
147
|
+
legacyConfigPath: configPath,
|
|
89
148
|
});
|
|
90
|
-
const cursor = createSyncCursor(configPath);
|
|
91
149
|
const uploadDeps = {
|
|
92
|
-
|
|
93
|
-
hierarchyOptions,
|
|
150
|
+
storage: dataStorage,
|
|
94
151
|
storageAdapter,
|
|
95
152
|
gateway: gatewayClient,
|
|
96
153
|
signer: serverSigner,
|
|
@@ -99,8 +156,7 @@ export async function createServer(config, options) {
|
|
|
99
156
|
logger,
|
|
100
157
|
};
|
|
101
158
|
const downloadDeps = {
|
|
102
|
-
|
|
103
|
-
hierarchyOptions,
|
|
159
|
+
storage: dataStorage,
|
|
104
160
|
storageAdapter,
|
|
105
161
|
gateway: gatewayClient,
|
|
106
162
|
cursor,
|
|
@@ -121,8 +177,15 @@ export async function createServer(config, options) {
|
|
|
121
177
|
const accessLogReader = createAccessLogReader(logsDir);
|
|
122
178
|
// Generate ephemeral dev token when devUi is enabled
|
|
123
179
|
const devToken = config.devUi.enabled ? generateDevToken() : undefined;
|
|
180
|
+
// Token store for /auth/device flow (self-hosted CLI auth)
|
|
181
|
+
const tokenStore = createTokenStore(tokensPath, logger);
|
|
182
|
+
const cloudMode = process.env.CLOUD_MODE === "true";
|
|
183
|
+
const localApprovalPort = cloudMode
|
|
184
|
+
? undefined
|
|
185
|
+
: resolveLocalApprovalPort(config.server.port);
|
|
124
186
|
// Mutable origin — starts with config value, updated when tunnel connects
|
|
125
187
|
let effectiveOrigin = config.server.origin;
|
|
188
|
+
let effectiveLocalApprovalOrigin;
|
|
126
189
|
// Mutable tunnelManager — set when tunnel starts in background
|
|
127
190
|
let tunnelManager;
|
|
128
191
|
const app = createApp({
|
|
@@ -132,12 +195,21 @@ export async function createServer(config, options) {
|
|
|
132
195
|
indexManager,
|
|
133
196
|
hierarchyOptions,
|
|
134
197
|
serverOrigin: () => effectiveOrigin,
|
|
198
|
+
localApprovalOrigin: () => effectiveLocalApprovalOrigin,
|
|
135
199
|
serverOwner,
|
|
136
200
|
identity,
|
|
137
201
|
gateway: gatewayClient,
|
|
202
|
+
gatewayConfig: config.gateway,
|
|
203
|
+
config,
|
|
138
204
|
accessLogWriter,
|
|
139
205
|
accessLogReader,
|
|
206
|
+
dataStorage,
|
|
207
|
+
cloudMode,
|
|
140
208
|
devToken,
|
|
209
|
+
ownerSignature: masterKeySignature,
|
|
210
|
+
ownerPrivateKey,
|
|
211
|
+
accessToken,
|
|
212
|
+
tokenStore,
|
|
141
213
|
configPath,
|
|
142
214
|
syncManager,
|
|
143
215
|
serverSigner,
|
|
@@ -165,6 +237,11 @@ export async function createServer(config, options) {
|
|
|
165
237
|
syncManager,
|
|
166
238
|
tunnelManager,
|
|
167
239
|
tunnelUrl: undefined,
|
|
240
|
+
localApprovalPort,
|
|
241
|
+
getLocalApprovalOrigin: () => effectiveLocalApprovalOrigin,
|
|
242
|
+
setLocalApprovalOrigin: (origin) => {
|
|
243
|
+
effectiveLocalApprovalOrigin = origin;
|
|
244
|
+
},
|
|
168
245
|
devToken,
|
|
169
246
|
startBackgroundServices: async () => {
|
|
170
247
|
// --- Gateway registration check (slow: HTTP call) ---
|