@opendatalabs/personal-server-ts-server 0.2.0 → 1.0.1
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 +16 -0
- package/dist/api-auth.d.ts.map +1 -0
- package/dist/api-auth.js +97 -0
- package/dist/api-auth.js.map +1 -0
- package/dist/api.d.ts +4 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +3 -0
- package/dist/api.js.map +1 -1
- package/dist/app.d.ts +46 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +102 -30
- package/dist/app.js.map +1 -1
- package/dist/bootstrap.d.ts +11 -3
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +266 -33
- 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 +368 -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 +64 -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/owner-check.js +1 -1
- package/dist/middleware/owner-check.js.map +1 -1
- package/dist/middleware/web3-auth.d.ts +12 -0
- package/dist/middleware/web3-auth.d.ts.map +1 -1
- package/dist/middleware/web3-auth.js +27 -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 +49 -0
- package/dist/routes/auth-device.d.ts.map +1 -0
- package/dist/routes/auth-device.js +581 -0
- package/dist/routes/auth-device.js.map +1 -0
- package/dist/routes/data.d.ts +42 -1
- package/dist/routes/data.d.ts.map +1 -1
- package/dist/routes/data.js +36 -201
- package/dist/routes/data.js.map +1 -1
- package/dist/routes/grants.d.ts +9 -2
- package/dist/routes/grants.d.ts.map +1 -1
- package/dist/routes/grants.js +18 -196
- 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 +39 -2
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/mcp.d.ts +93 -6
- package/dist/routes/mcp.d.ts.map +1 -1
- package/dist/routes/mcp.js +526 -53
- package/dist/routes/mcp.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 +9 -0
- package/dist/routes/ui-registration.d.ts.map +1 -0
- package/dist/routes/ui-registration.js +217 -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 +29 -0
- package/dist/storage/hierarchy.d.ts.map +1 -0
- package/dist/storage/hierarchy.js +241 -0
- package/dist/storage/hierarchy.js.map +1 -0
- package/dist/storage/index-manager.d.ts +53 -0
- package/dist/storage/index-manager.d.ts.map +1 -0
- package/dist/storage/index-manager.js +167 -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 +62 -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 +84 -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 +110 -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/auth.d.ts +4 -0
- package/dist/tunnel/auth.d.ts.map +1 -1
- package/dist/tunnel/auth.js +2 -1
- package/dist/tunnel/auth.js.map +1 -1
- package/dist/tunnel/config.d.ts +1 -0
- package/dist/tunnel/config.d.ts.map +1 -1
- package/dist/tunnel/config.js +1 -1
- package/dist/tunnel/config.js.map +1 -1
- package/dist/tunnel/manager.d.ts +21 -1
- package/dist/tunnel/manager.d.ts.map +1 -1
- package/dist/tunnel/manager.js +78 -23
- 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 +2192 -0
- package/dist/ui/ps-lite-debug.d.ts +93 -0
- package/dist/ui/ps-lite-debug.d.ts.map +1 -0
- package/dist/ui/ps-lite-debug.js +129415 -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/index.js
CHANGED
|
@@ -1,23 +1,66 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createAdaptorServer } from "@hono/node-server";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
|
-
import { loadConfig } from "
|
|
3
|
+
import { loadConfig } from "./config/index.js";
|
|
4
4
|
import { createServer } from "./bootstrap.js";
|
|
5
5
|
import { verifyTunnelUrl } from "./tunnel/index.js";
|
|
6
6
|
const require = createRequire(import.meta.url);
|
|
7
7
|
const pkg = require("../package.json");
|
|
8
8
|
const DRAIN_TIMEOUT_MS = 5_000;
|
|
9
|
+
async function listenHttpServer(params) {
|
|
10
|
+
const server = createAdaptorServer({ fetch: params.fetch });
|
|
11
|
+
await new Promise((resolve, reject) => {
|
|
12
|
+
const onError = (error) => {
|
|
13
|
+
server.off("error", onError);
|
|
14
|
+
reject(error);
|
|
15
|
+
};
|
|
16
|
+
server.once("error", onError);
|
|
17
|
+
server.listen(params.port, params.hostname, () => {
|
|
18
|
+
server.off("error", onError);
|
|
19
|
+
const address = server.address();
|
|
20
|
+
if (!address || typeof address === "string") {
|
|
21
|
+
reject(new Error("Could not resolve bound server address"));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
params.onListening?.(address);
|
|
25
|
+
resolve();
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
return server;
|
|
29
|
+
}
|
|
9
30
|
async function main() {
|
|
10
31
|
const rootPath = process.env.PERSONAL_SERVER_ROOT_PATH;
|
|
11
32
|
const config = await loadConfig({ rootPath });
|
|
12
33
|
const context = await createServer(config, { rootPath });
|
|
13
34
|
const { app, logger, devToken } = context;
|
|
14
|
-
const server =
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
logger.info({
|
|
19
|
-
|
|
35
|
+
const server = await listenHttpServer({
|
|
36
|
+
fetch: app.fetch,
|
|
37
|
+
port: config.server.port,
|
|
38
|
+
onListening: (info) => {
|
|
39
|
+
logger.info({ port: info.port, version: pkg.version }, "Server started");
|
|
40
|
+
if (devToken) {
|
|
41
|
+
logger.info({ url: `http://localhost:${info.port}/ui` }, "Dev UI available");
|
|
42
|
+
logger.info({ devToken }, "Dev token (ephemeral)");
|
|
43
|
+
}
|
|
44
|
+
},
|
|
20
45
|
});
|
|
46
|
+
let localAuthServer;
|
|
47
|
+
if (context.localApprovalPort) {
|
|
48
|
+
try {
|
|
49
|
+
localAuthServer = await listenHttpServer({
|
|
50
|
+
fetch: app.fetch,
|
|
51
|
+
port: context.localApprovalPort,
|
|
52
|
+
hostname: "127.0.0.1",
|
|
53
|
+
onListening: (info) => {
|
|
54
|
+
const localApprovalOrigin = `http://127.0.0.1:${info.port}`;
|
|
55
|
+
context.setLocalApprovalOrigin(localApprovalOrigin);
|
|
56
|
+
logger.info({ localApprovalOrigin }, "Loopback auth listener started");
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
logger.warn({ err, port: context.localApprovalPort }, "Loopback auth listener unavailable — public approval flow will require owner wallet auth");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
21
64
|
// Fire-and-forget: gateway check + tunnel connect (slow operations)
|
|
22
65
|
// HTTP server is already listening so POST /v1/data/:scope works immediately
|
|
23
66
|
context.startBackgroundServices().then(() => {
|
|
@@ -25,6 +68,7 @@ async function main() {
|
|
|
25
68
|
const { tunnelManager, tunnelUrl } = context;
|
|
26
69
|
if (tunnelUrl &&
|
|
27
70
|
tunnelManager &&
|
|
71
|
+
context.isServerRegistered() &&
|
|
28
72
|
tunnelManager.getStatus().status !== "error") {
|
|
29
73
|
logger.info({ tunnelUrl }, "Verifying tunnel URL is reachable...");
|
|
30
74
|
verifyTunnelUrl(tunnelUrl).then((result) => {
|
|
@@ -40,10 +84,18 @@ async function main() {
|
|
|
40
84
|
});
|
|
41
85
|
function shutdown(signal) {
|
|
42
86
|
logger.info({ signal }, "Shutdown signal received, draining connections");
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
87
|
+
let pending = localAuthServer ? 2 : 1;
|
|
88
|
+
const finish = () => {
|
|
89
|
+
pending -= 1;
|
|
90
|
+
if (pending === 0) {
|
|
91
|
+
logger.info("Server stopped");
|
|
92
|
+
process.exit(0);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
server.close(finish);
|
|
96
|
+
if (localAuthServer) {
|
|
97
|
+
localAuthServer.close(finish);
|
|
98
|
+
}
|
|
47
99
|
// Force exit after drain timeout
|
|
48
100
|
setTimeout(() => {
|
|
49
101
|
logger.warn("Drain timeout exceeded, forcing exit");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ServerAccount wraps a randomly generated private key for EIP-712 signing.
|
|
3
|
+
* The key is persisted to disk so the same address survives restarts.
|
|
4
|
+
*/
|
|
5
|
+
import type { TypedDataDomain } from "viem";
|
|
6
|
+
export interface SignTypedDataParams {
|
|
7
|
+
domain: TypedDataDomain;
|
|
8
|
+
types: Record<string, Array<{
|
|
9
|
+
name: string;
|
|
10
|
+
type: string;
|
|
11
|
+
}>>;
|
|
12
|
+
primaryType: string;
|
|
13
|
+
message: Record<string, unknown>;
|
|
14
|
+
}
|
|
15
|
+
export interface ServerAccount {
|
|
16
|
+
address: `0x${string}`;
|
|
17
|
+
/** Uncompressed public key (65 bytes, 0x04 prefix). */
|
|
18
|
+
publicKey: `0x${string}`;
|
|
19
|
+
signTypedData(params: SignTypedDataParams): Promise<`0x${string}`>;
|
|
20
|
+
/** Sign a personal message (EIP-191). */
|
|
21
|
+
signMessage(message: string): Promise<`0x${string}`>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Loads an existing server keypair from disk, or generates a new random one
|
|
25
|
+
* and persists it. Returns a ServerAccount suitable for EIP-712 signing.
|
|
26
|
+
*/
|
|
27
|
+
export declare function loadOrCreateServerAccount(keyPath: string): ServerAccount;
|
|
28
|
+
//# sourceMappingURL=server-account.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-account.d.ts","sourceRoot":"","sources":["../../src/keys/server-account.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAE5C,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,uDAAuD;IACvD,SAAS,EAAE,KAAK,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IACnE,yCAAyC;IACzC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;CACtD;AAQD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CA2CxE"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ServerAccount wraps a randomly generated private key for EIP-712 signing.
|
|
3
|
+
* The key is persisted to disk so the same address survives restarts.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
6
|
+
import { dirname } from "node:path";
|
|
7
|
+
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
|
|
8
|
+
/**
|
|
9
|
+
* Loads an existing server keypair from disk, or generates a new random one
|
|
10
|
+
* and persists it. Returns a ServerAccount suitable for EIP-712 signing.
|
|
11
|
+
*/
|
|
12
|
+
export function loadOrCreateServerAccount(keyPath) {
|
|
13
|
+
let privateKey;
|
|
14
|
+
if (existsSync(keyPath)) {
|
|
15
|
+
const raw = readFileSync(keyPath, "utf-8");
|
|
16
|
+
const data = JSON.parse(raw);
|
|
17
|
+
privateKey = data.privateKey;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
privateKey = generatePrivateKey();
|
|
21
|
+
const account = privateKeyToAccount(privateKey);
|
|
22
|
+
// Ensure parent directories exist
|
|
23
|
+
mkdirSync(dirname(keyPath), { recursive: true });
|
|
24
|
+
const data = {
|
|
25
|
+
address: account.address,
|
|
26
|
+
publicKey: account.publicKey,
|
|
27
|
+
privateKey,
|
|
28
|
+
};
|
|
29
|
+
writeFileSync(keyPath, JSON.stringify(data, null, 2), { mode: 0o600 });
|
|
30
|
+
}
|
|
31
|
+
const account = privateKeyToAccount(privateKey);
|
|
32
|
+
return {
|
|
33
|
+
address: account.address,
|
|
34
|
+
publicKey: account.publicKey,
|
|
35
|
+
async signTypedData(params) {
|
|
36
|
+
return account.signTypedData({
|
|
37
|
+
domain: params.domain,
|
|
38
|
+
types: params.types,
|
|
39
|
+
primaryType: params.primaryType,
|
|
40
|
+
message: params.message,
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
async signMessage(message) {
|
|
44
|
+
return account.signMessage({ message });
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=server-account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-account.js","sourceRoot":"","sources":["../../src/keys/server-account.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAyBxE;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAe;IACvD,IAAI,UAAyB,CAAC;IAE9B,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAgB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,UAAU,GAAG,IAAI,CAAC,UAA2B,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,kBAAkB,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAEhD,kCAAkC;QAClC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjD,MAAM,IAAI,GAAgB;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,UAAU;SACX,CAAC;QACF,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEhD,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,CAAC,aAAa,CAAC,MAA2B;YAC7C,OAAO,OAAO,CAAC,aAAa,CAAC;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAED;gBACd,KAAK,EAAE,MAAM,CAAC,KAED;gBACb,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,OAAe;YAC/B,OAAO,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAEnF,YAAY,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAO1D"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import pino from "pino";
|
|
2
|
+
export function createLogger(config) {
|
|
3
|
+
const usePretty = config.pretty || process.env.NODE_ENV !== "production";
|
|
4
|
+
return pino({
|
|
5
|
+
level: config.level,
|
|
6
|
+
...(usePretty ? { transport: { target: "pino-pretty" } } : {}),
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAqB,MAAM,MAAM,CAAC;AAKzC,MAAM,UAAU,YAAY,CAAC,MAAqB;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAEzE,OAAO,IAAI,CAAC;QACV,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface AccessLogEntry {
|
|
2
|
+
logId: string;
|
|
3
|
+
grantId: string;
|
|
4
|
+
builder: string;
|
|
5
|
+
action: "read";
|
|
6
|
+
scope: string;
|
|
7
|
+
timestamp: string;
|
|
8
|
+
ipAddress: string;
|
|
9
|
+
userAgent: string;
|
|
10
|
+
}
|
|
11
|
+
export interface AccessLogWriter {
|
|
12
|
+
write(entry: AccessLogEntry): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export declare function createAccessLogWriter(logsDir: string): AccessLogWriter;
|
|
15
|
+
//# sourceMappingURL=access-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-log.d.ts","sourceRoot":"","sources":["../../src/logging/access-log.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAUD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAiBtE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { mkdir, appendFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
function formatDateForFilename(isoTimestamp) {
|
|
4
|
+
const date = new Date(isoTimestamp);
|
|
5
|
+
const yyyy = date.getUTCFullYear();
|
|
6
|
+
const mm = String(date.getUTCMonth() + 1).padStart(2, "0");
|
|
7
|
+
const dd = String(date.getUTCDate()).padStart(2, "0");
|
|
8
|
+
return `${yyyy}-${mm}-${dd}`;
|
|
9
|
+
}
|
|
10
|
+
export function createAccessLogWriter(logsDir) {
|
|
11
|
+
let dirCreated = false;
|
|
12
|
+
return {
|
|
13
|
+
async write(entry) {
|
|
14
|
+
if (!dirCreated) {
|
|
15
|
+
await mkdir(logsDir, { recursive: true });
|
|
16
|
+
dirCreated = true;
|
|
17
|
+
}
|
|
18
|
+
const dateStr = formatDateForFilename(entry.timestamp);
|
|
19
|
+
const filename = `access-${dateStr}.log`;
|
|
20
|
+
const filepath = join(logsDir, filename);
|
|
21
|
+
await appendFile(filepath, JSON.stringify(entry) + "\n", "utf-8");
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=access-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-log.js","sourceRoot":"","sources":["../../src/logging/access-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAiBjC,SAAS,qBAAqB,CAAC,YAAoB;IACjD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACnC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,KAAqB;YAC/B,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1C,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YAED,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,UAAU,OAAO,MAAM,CAAC;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAEzC,MAAM,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QACpE,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AccessLogEntry } from "./access-log.js";
|
|
2
|
+
export interface AccessLogReadResult {
|
|
3
|
+
logs: AccessLogEntry[];
|
|
4
|
+
total: number;
|
|
5
|
+
limit: number;
|
|
6
|
+
offset: number;
|
|
7
|
+
}
|
|
8
|
+
export interface AccessLogReader {
|
|
9
|
+
read(options?: {
|
|
10
|
+
limit?: number;
|
|
11
|
+
offset?: number;
|
|
12
|
+
}): Promise<AccessLogReadResult>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Reads all access-*.log files from logsDir, merges entries,
|
|
16
|
+
* sorts by timestamp DESC, and paginates.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createAccessLogReader(logsDir: string): AccessLogReader;
|
|
19
|
+
//# sourceMappingURL=access-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-reader.d.ts","sourceRoot":"","sources":["../../src/logging/access-reader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,OAAO,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAqDtE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Reads all access-*.log files from logsDir, merges entries,
|
|
5
|
+
* sorts by timestamp DESC, and paginates.
|
|
6
|
+
*/
|
|
7
|
+
export function createAccessLogReader(logsDir) {
|
|
8
|
+
return {
|
|
9
|
+
async read(options) {
|
|
10
|
+
const limit = options?.limit ?? 50;
|
|
11
|
+
const offset = options?.offset ?? 0;
|
|
12
|
+
let filenames;
|
|
13
|
+
try {
|
|
14
|
+
filenames = await readdir(logsDir);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// Directory doesn't exist — return empty result
|
|
18
|
+
return { logs: [], total: 0, limit, offset };
|
|
19
|
+
}
|
|
20
|
+
const logFiles = filenames.filter((f) => f.startsWith("access-") && f.endsWith(".log"));
|
|
21
|
+
const allEntries = [];
|
|
22
|
+
for (const filename of logFiles) {
|
|
23
|
+
const filepath = join(logsDir, filename);
|
|
24
|
+
const content = await readFile(filepath, "utf-8");
|
|
25
|
+
const lines = content
|
|
26
|
+
.split("\n")
|
|
27
|
+
.filter((line) => line.trim().length > 0);
|
|
28
|
+
for (const line of lines) {
|
|
29
|
+
try {
|
|
30
|
+
const entry = JSON.parse(line);
|
|
31
|
+
allEntries.push(entry);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Skip malformed lines
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Sort by timestamp DESC (newest first)
|
|
39
|
+
allEntries.sort((a, b) => {
|
|
40
|
+
const ta = new Date(a.timestamp).getTime();
|
|
41
|
+
const tb = new Date(b.timestamp).getTime();
|
|
42
|
+
return tb - ta;
|
|
43
|
+
});
|
|
44
|
+
const total = allEntries.length;
|
|
45
|
+
const paginated = allEntries.slice(offset, offset + limit);
|
|
46
|
+
return { logs: paginated, total, limit, offset };
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=access-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-reader.js","sourceRoot":"","sources":["../../src/logging/access-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAiBjC;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,OAGV;YACC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;YAEpC,IAAI,SAAmB,CAAC;YACxB,IAAI,CAAC;gBACH,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,gDAAgD;gBAChD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC/C,CAAC;YAED,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CACrD,CAAC;YAEF,MAAM,UAAU,GAAqB,EAAE,CAAC;YAExC,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACzC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAClD,MAAM,KAAK,GAAG,OAAO;qBAClB,KAAK,CAAC,IAAI,CAAC;qBACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAE5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;wBACjD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACzB,CAAC;oBAAC,MAAM,CAAC;wBACP,uBAAuB;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,wCAAwC;YACxC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACvB,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC3C,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC3C,OAAO,EAAE,GAAG,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;YAChC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;YAE3D,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACnD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-log.d.ts","sourceRoot":"","sources":["../../src/middleware/access-log.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0DAA0D,CAAC;AAIhG;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,eAAe,GACtB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"access-log.d.ts","sourceRoot":"","sources":["../../src/middleware/access-log.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0DAA0D,CAAC;AAIhG;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,eAAe,GACtB,iBAAiB,CA0CnB"}
|
|
@@ -12,14 +12,20 @@ export function createAccessLogMiddleware(writer) {
|
|
|
12
12
|
}
|
|
13
13
|
const auth = c.get("auth");
|
|
14
14
|
const grant = c.get("grant");
|
|
15
|
-
if (!auth
|
|
15
|
+
if (!auth) {
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
|
+
const grantId = grant?.id ??
|
|
19
|
+
(c.get("isPolicyBypass") || c.get("devBypass")
|
|
20
|
+
? "policy-bypass"
|
|
21
|
+
: undefined);
|
|
22
|
+
if (!grantId)
|
|
23
|
+
return;
|
|
18
24
|
const scope = c.req.param("scope") ?? "unknown";
|
|
19
25
|
try {
|
|
20
26
|
await writer.write({
|
|
21
27
|
logId: randomUUID(),
|
|
22
|
-
grantId
|
|
28
|
+
grantId,
|
|
23
29
|
builder: auth.signer,
|
|
24
30
|
action: "read",
|
|
25
31
|
scope,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-log.js","sourceRoot":"","sources":["../../src/middleware/access-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAMzC;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAuB;IAEvB,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,IAAI,EAAE,CAAC;QAEb,4BAA4B;QAC5B,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"access-log.js","sourceRoot":"","sources":["../../src/middleware/access-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAMzC;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAuB;IAEvB,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,IAAI,EAAE,CAAC;QAEb,4BAA4B;QAC5B,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAA4B,CAAC;QACtD,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAqC,CAAC;QAEjE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GACX,KAAK,EAAE,EAAE;YACT,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;gBAC5C,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;QAEhD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC;gBACjB,KAAK,EAAE,UAAU,EAAE;gBACnB,OAAO;gBACP,OAAO,EAAE,IAAI,CAAC,MAAM;gBACpB,MAAM,EAAE,MAAM;gBACd,KAAK;gBACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,SAAS,EACP,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC;oBAC/B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;oBACzB,SAAS;gBACX,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,SAAS;aACnD,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;QAC1D,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { MiddlewareHandler } from "hono";
|
|
2
|
-
import type { GatewayClient } from "@opendatalabs/
|
|
2
|
+
import type { GatewayClient } from "@opendatalabs/vana-sdk/node";
|
|
3
3
|
/**
|
|
4
4
|
* Verifies authenticated signer is a registered builder via Gateway.
|
|
5
5
|
* Must run AFTER web3-auth middleware.
|
|
6
6
|
*/
|
|
7
|
-
export declare function createBuilderCheckMiddleware(gateway: GatewayClient): MiddlewareHandler;
|
|
7
|
+
export declare function createBuilderCheckMiddleware(gateway: GatewayClient, serverOwner?: `0x${string}`): MiddlewareHandler;
|
|
8
8
|
//# sourceMappingURL=builder-check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-check.d.ts","sourceRoot":"","sources":["../../src/middleware/builder-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"builder-check.d.ts","sourceRoot":"","sources":["../../src/middleware/builder-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAIjE;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,aAAa,EACtB,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,GAC1B,iBAAiB,CAgCnB"}
|
|
@@ -3,13 +3,18 @@ import { UnregisteredBuilderError } from "@opendatalabs/personal-server-ts-core/
|
|
|
3
3
|
* Verifies authenticated signer is a registered builder via Gateway.
|
|
4
4
|
* Must run AFTER web3-auth middleware.
|
|
5
5
|
*/
|
|
6
|
-
export function createBuilderCheckMiddleware(gateway) {
|
|
6
|
+
export function createBuilderCheckMiddleware(gateway, serverOwner) {
|
|
7
7
|
return async (c, next) => {
|
|
8
|
-
if (c.get("devBypass")) {
|
|
8
|
+
if (c.get("isPolicyBypass") ?? c.get("devBypass")) {
|
|
9
9
|
await next();
|
|
10
10
|
return;
|
|
11
11
|
}
|
|
12
12
|
const auth = c.get("auth");
|
|
13
|
+
if (serverOwner &&
|
|
14
|
+
auth.signer.toLowerCase() === serverOwner.toLowerCase()) {
|
|
15
|
+
await next();
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
13
18
|
try {
|
|
14
19
|
const registered = await gateway.isRegisteredBuilder(auth.signer);
|
|
15
20
|
if (!registered) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-check.js","sourceRoot":"","sources":["../../src/middleware/builder-check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builder-check.js","sourceRoot":"","sources":["../../src/middleware/builder-check.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AAGxF;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,OAAsB,EACtB,WAA2B;IAE3B,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAgB,CAAC;QAC1C,IACE,WAAW;YACX,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,EACvD,CAAC;YACD,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAElE,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,GAAG,GAAG,IAAI,wBAAwB,EAAE,CAAC;gBAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;YACnC,CAAC;YAED,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,wBAAwB,EAAE,CAAC;gBAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -7,7 +7,7 @@ import { NotOwnerError } from "@opendatalabs/personal-server-ts-core/errors";
|
|
|
7
7
|
*/
|
|
8
8
|
export function createOwnerCheckMiddleware(serverOwner) {
|
|
9
9
|
return async (c, next) => {
|
|
10
|
-
if (c.get("devBypass")) {
|
|
10
|
+
if (c.get("isPolicyBypass") ?? c.get("devBypass")) {
|
|
11
11
|
await next();
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owner-check.js","sourceRoot":"","sources":["../../src/middleware/owner-check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAG7E;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,WAAsC;IAEtC,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"owner-check.js","sourceRoot":"","sources":["../../src/middleware/owner-check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAG7E;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,WAAsC;IAEtC,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,CAAC,IAAI,CACX;gBACE,KAAK,EAAE;oBACL,IAAI,EAAE,GAAG;oBACT,SAAS,EAAE,uBAAuB;oBAClC,OAAO,EACL,0FAA0F;iBAC7F;aACF,EACD,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAA4B,CAAC;QAEtD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC;YAC5D,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC;gBAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,WAAW;aACtB,CAAC,CAAC;YACH,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import type { MiddlewareHandler } from "hono";
|
|
2
|
+
import { mapSdkAuthError, type AuthMechanism, type RequestAuth, type SessionTokenVerifierPort } from "@opendatalabs/personal-server-ts-core/auth";
|
|
3
|
+
import type { TokenStore } from "../token-store.js";
|
|
4
|
+
import "../hono-context.js";
|
|
5
|
+
export { mapSdkAuthError };
|
|
6
|
+
export type { AuthMechanism, RequestAuth };
|
|
2
7
|
export interface Web3AuthMiddlewareDeps {
|
|
3
8
|
serverOrigin: string | (() => string);
|
|
4
9
|
devToken?: string;
|
|
10
|
+
accessToken?: string;
|
|
11
|
+
tokenStore?: TokenStore | SessionTokenVerifierPort;
|
|
5
12
|
serverOwner?: `0x${string}`;
|
|
6
13
|
}
|
|
7
14
|
/**
|
|
@@ -11,6 +18,11 @@ export interface Web3AuthMiddlewareDeps {
|
|
|
11
18
|
* When a devToken is configured and the request carries a matching
|
|
12
19
|
* Bearer token, auth context is populated with the server owner
|
|
13
20
|
* and c.set('devBypass', true) is set to skip downstream checks.
|
|
21
|
+
*
|
|
22
|
+
* When a control-plane token (PS_ACCESS_TOKEN) or tokenStore-issued CLI token is
|
|
23
|
+
* configured and the request carries a matching Bearer token, auth context
|
|
24
|
+
* is populated with the server owner. These are owner-authenticated requests,
|
|
25
|
+
* not dev-bypass requests.
|
|
14
26
|
*/
|
|
15
27
|
export declare function createWeb3AuthMiddleware(depsOrOrigin: Web3AuthMiddlewareDeps | string): MiddlewareHandler;
|
|
16
28
|
//# sourceMappingURL=web3-auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web3-auth.d.ts","sourceRoot":"","sources":["../../src/middleware/web3-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"web3-auth.d.ts","sourceRoot":"","sources":["../../src/middleware/web3-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAEL,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,wBAAwB,EAC9B,MAAM,4CAA4C,CAAC;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AAE3C,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,GAAG,wBAAwB,CAAC;IACnD,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,sBAAsB,GAAG,MAAM,GAC5C,iBAAiB,CA+BnB"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { authenticateRequest, mapSdkAuthError, } from "@opendatalabs/personal-server-ts-core/auth";
|
|
2
2
|
import { ProtocolError } from "@opendatalabs/personal-server-ts-core/errors";
|
|
3
|
+
// Ambient module augmentation that types `c.get("authMechanism")` etc. —
|
|
4
|
+
// must be in the TS module graph so the augmentation takes effect. The
|
|
5
|
+
// previous reach-through (data-read-policy.ts) was deleted in the X402
|
|
6
|
+
// migration; the web3-auth middleware is the most natural new anchor
|
|
7
|
+
// since it's the one writing these context vars in the first place.
|
|
8
|
+
import "../hono-context.js";
|
|
9
|
+
export { mapSdkAuthError };
|
|
3
10
|
/**
|
|
4
11
|
* Parses + verifies Web3Signed Authorization header.
|
|
5
12
|
* Sets c.set('auth', VerifiedAuth) for downstream handlers.
|
|
@@ -7,47 +14,36 @@ import { ProtocolError } from "@opendatalabs/personal-server-ts-core/errors";
|
|
|
7
14
|
* When a devToken is configured and the request carries a matching
|
|
8
15
|
* Bearer token, auth context is populated with the server owner
|
|
9
16
|
* and c.set('devBypass', true) is set to skip downstream checks.
|
|
17
|
+
*
|
|
18
|
+
* When a control-plane token (PS_ACCESS_TOKEN) or tokenStore-issued CLI token is
|
|
19
|
+
* configured and the request carries a matching Bearer token, auth context
|
|
20
|
+
* is populated with the server owner. These are owner-authenticated requests,
|
|
21
|
+
* not dev-bypass requests.
|
|
10
22
|
*/
|
|
11
23
|
export function createWeb3AuthMiddleware(depsOrOrigin) {
|
|
12
24
|
const deps = typeof depsOrOrigin === "string"
|
|
13
25
|
? { serverOrigin: depsOrOrigin }
|
|
14
26
|
: depsOrOrigin;
|
|
15
27
|
return async (c, next) => {
|
|
16
|
-
// Dev token bypass: if configured and header matches, skip Web3Signed verification
|
|
17
|
-
if (deps.devToken) {
|
|
18
|
-
const authHeader = c.req.header("authorization");
|
|
19
|
-
if (authHeader === `Bearer ${deps.devToken}`) {
|
|
20
|
-
if (!deps.serverOwner) {
|
|
21
|
-
return c.json({
|
|
22
|
-
error: {
|
|
23
|
-
code: 500,
|
|
24
|
-
errorCode: "SERVER_NOT_CONFIGURED",
|
|
25
|
-
message: "Server owner address not configured. Set VANA_MASTER_KEY_SIGNATURE environment variable.",
|
|
26
|
-
},
|
|
27
|
-
}, 500);
|
|
28
|
-
}
|
|
29
|
-
c.set("auth", {
|
|
30
|
-
signer: deps.serverOwner,
|
|
31
|
-
payload: {},
|
|
32
|
-
});
|
|
33
|
-
c.set("devBypass", true);
|
|
34
|
-
await next();
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
28
|
try {
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
29
|
+
const result = await authenticateRequest({
|
|
30
|
+
request: c.req.raw,
|
|
31
|
+
serverOrigin: deps.serverOrigin,
|
|
32
|
+
devToken: deps.devToken,
|
|
33
|
+
accessToken: deps.accessToken,
|
|
34
|
+
sessionTokenVerifier: deps.tokenStore,
|
|
35
|
+
serverOwner: deps.serverOwner,
|
|
46
36
|
});
|
|
47
|
-
c.set("auth", auth);
|
|
37
|
+
c.set("auth", result.auth);
|
|
38
|
+
c.set("authMechanism", result.mechanism);
|
|
39
|
+
c.set("isPolicyBypass", result.isPolicyBypass);
|
|
40
|
+
c.set("devBypass", result.devBypass);
|
|
48
41
|
await next();
|
|
49
42
|
}
|
|
50
43
|
catch (err) {
|
|
44
|
+
const authError = mapSdkAuthError(err);
|
|
45
|
+
if (authError)
|
|
46
|
+
return c.json(authError.toJSON(), authError.code);
|
|
51
47
|
if (err instanceof ProtocolError) {
|
|
52
48
|
return c.json(err.toJSON(), err.code);
|
|
53
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web3-auth.js","sourceRoot":"","sources":["../../src/middleware/web3-auth.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"web3-auth.js","sourceRoot":"","sources":["../../src/middleware/web3-auth.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,eAAe,GAIhB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAE7E,yEAAyE;AACzE,uEAAuE;AACvE,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AACpE,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,CAAC;AAW3B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CACtC,YAA6C;IAE7C,MAAM,IAAI,GACR,OAAO,YAAY,KAAK,QAAQ;QAC9B,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE;QAChC,CAAC,CAAC,YAAY,CAAC;IAEnB,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC;gBACvC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG;gBAClB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,oBAAoB,EAAE,IAAI,CAAC,UAAU;gBACrC,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,CAAC;YAEH,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,SAAiC,CAAC,CAAC;YACjE,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;YAC/C,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACrC,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,SAAS;gBAAE,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,IAAW,CAAC,CAAC;YACxE,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;gBACjC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,IAAiB,CAAC,CAAC;YACrD,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const LOCAL_STATE_VERSION = 1;
|
|
2
|
+
export declare const INDEX_STATE_VERSION = 1;
|
|
3
|
+
export declare const TOKEN_STORE_VERSION = 1;
|
|
4
|
+
export declare const SYNC_CURSOR_VERSION = 1;
|
|
5
|
+
export declare const DATA_HIERARCHY_VERSION = 1;
|
|
6
|
+
export declare const CONFIG_STATE_VERSION = 1;
|
|
7
|
+
export interface LocalStateMigrationOptions {
|
|
8
|
+
storageRoot: string;
|
|
9
|
+
dataDir: string;
|
|
10
|
+
configPath: string;
|
|
11
|
+
syncCursorPath: string;
|
|
12
|
+
tokensPath: string;
|
|
13
|
+
statePath?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface LocalStateMigrationResult {
|
|
16
|
+
statePath: string;
|
|
17
|
+
syncCursorCreated: boolean;
|
|
18
|
+
tokensFileVersioned: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function migrateLocalState(options: LocalStateMigrationOptions): Promise<LocalStateMigrationResult>;
|
|
21
|
+
//# sourceMappingURL=local-state.d.ts.map
|