@linkshell/gateway 0.5.3 → 0.6.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.
Files changed (109) hide show
  1. package/Dockerfile +8 -22
  2. package/README.md +102 -44
  3. package/dist/gateway/src/accounts.js.map +1 -0
  4. package/dist/gateway/src/index.d.ts +4 -1
  5. package/dist/gateway/src/index.js +4 -863
  6. package/dist/gateway/src/index.js.map +1 -1
  7. package/dist/gateway/src/main.js +57 -0
  8. package/dist/gateway/src/main.js.map +1 -0
  9. package/dist/gateway/src/rate-limit.d.ts +32 -0
  10. package/dist/gateway/src/rate-limit.js +106 -0
  11. package/dist/gateway/src/rate-limit.js.map +1 -0
  12. package/dist/gateway/src/relay.d.ts +84 -5
  13. package/dist/gateway/src/relay.js +402 -529
  14. package/dist/gateway/src/relay.js.map +1 -1
  15. package/dist/gateway/src/serve.d.ts +34 -0
  16. package/dist/gateway/src/serve.js +115 -0
  17. package/dist/gateway/src/serve.js.map +1 -0
  18. package/dist/{gateway-v2 → gateway}/src/store.d.ts +5 -0
  19. package/dist/{gateway-v2 → gateway}/src/store.js +7 -0
  20. package/dist/gateway/src/store.js.map +1 -0
  21. package/dist/gateway/src/subscription.d.ts +18 -0
  22. package/dist/gateway/src/subscription.js +46 -0
  23. package/dist/gateway/src/subscription.js.map +1 -0
  24. package/dist/gateway/tsconfig.tsbuildinfo +1 -1
  25. package/dist/wire/src/direct.d.ts +22 -0
  26. package/dist/wire/src/direct.js +37 -0
  27. package/dist/wire/src/direct.js.map +1 -0
  28. package/dist/wire/src/index.d.ts +1 -0
  29. package/dist/wire/src/index.js +1 -0
  30. package/dist/wire/src/index.js.map +1 -1
  31. package/dist/wire/src/model.d.ts +287 -6
  32. package/dist/wire/src/model.js +33 -0
  33. package/dist/wire/src/model.js.map +1 -1
  34. package/dist/wire/src/relay.d.ts +8 -8
  35. package/dist/wire/src/rpc.d.ts +1780 -44
  36. package/dist/wire/src/rpc.js +48 -3
  37. package/dist/wire/src/rpc.js.map +1 -1
  38. package/dist/wire/src/updates.d.ts +356 -0
  39. package/dist/wire/src/updates.js +11 -1
  40. package/dist/wire/src/updates.js.map +1 -1
  41. package/package.json +13 -13
  42. package/src/accounts.ts +32 -0
  43. package/src/index.ts +4 -997
  44. package/src/main.ts +65 -0
  45. package/src/rate-limit.ts +114 -0
  46. package/src/relay.ts +435 -620
  47. package/src/serve.ts +142 -0
  48. package/src/store.ts +135 -0
  49. package/src/subscription.ts +51 -0
  50. package/dist/gateway/src/auth-middleware.d.ts +0 -44
  51. package/dist/gateway/src/auth-middleware.js +0 -204
  52. package/dist/gateway/src/auth-middleware.js.map +0 -1
  53. package/dist/gateway/src/cors.d.ts +0 -2
  54. package/dist/gateway/src/cors.js +0 -7
  55. package/dist/gateway/src/cors.js.map +0 -1
  56. package/dist/gateway/src/embedded.d.ts +0 -21
  57. package/dist/gateway/src/embedded.js +0 -438
  58. package/dist/gateway/src/embedded.js.map +0 -1
  59. package/dist/gateway/src/host-auth.d.ts +0 -32
  60. package/dist/gateway/src/host-auth.js +0 -78
  61. package/dist/gateway/src/host-auth.js.map +0 -1
  62. package/dist/gateway/src/pairings.d.ts +0 -38
  63. package/dist/gateway/src/pairings.js +0 -119
  64. package/dist/gateway/src/pairings.js.map +0 -1
  65. package/dist/gateway/src/presence.d.ts +0 -28
  66. package/dist/gateway/src/presence.js +0 -92
  67. package/dist/gateway/src/presence.js.map +0 -1
  68. package/dist/gateway/src/sessions.d.ts +0 -113
  69. package/dist/gateway/src/sessions.js +0 -352
  70. package/dist/gateway/src/sessions.js.map +0 -1
  71. package/dist/gateway/src/state-store.d.ts +0 -21
  72. package/dist/gateway/src/state-store.js +0 -103
  73. package/dist/gateway/src/state-store.js.map +0 -1
  74. package/dist/gateway/src/static-web.d.ts +0 -15
  75. package/dist/gateway/src/static-web.js +0 -129
  76. package/dist/gateway/src/static-web.js.map +0 -1
  77. package/dist/gateway/src/tokens.d.ts +0 -19
  78. package/dist/gateway/src/tokens.js +0 -151
  79. package/dist/gateway/src/tokens.js.map +0 -1
  80. package/dist/gateway/src/tunnel.d.ts +0 -61
  81. package/dist/gateway/src/tunnel.js +0 -576
  82. package/dist/gateway/src/tunnel.js.map +0 -1
  83. package/dist/gateway-v2/src/accounts.js.map +0 -1
  84. package/dist/gateway-v2/src/index.d.ts +0 -3
  85. package/dist/gateway-v2/src/index.js +0 -4
  86. package/dist/gateway-v2/src/index.js.map +0 -1
  87. package/dist/gateway-v2/src/main.js +0 -17
  88. package/dist/gateway-v2/src/main.js.map +0 -1
  89. package/dist/gateway-v2/src/server.d.ts +0 -84
  90. package/dist/gateway-v2/src/server.js +0 -426
  91. package/dist/gateway-v2/src/server.js.map +0 -1
  92. package/dist/gateway-v2/src/store.js.map +0 -1
  93. package/dist/shared-protocol/src/index.d.ts +0 -17029
  94. package/dist/shared-protocol/src/index.js +0 -1064
  95. package/dist/shared-protocol/src/index.js.map +0 -1
  96. package/src/auth-middleware.ts +0 -266
  97. package/src/cors.ts +0 -8
  98. package/src/embedded.ts +0 -526
  99. package/src/host-auth.ts +0 -88
  100. package/src/pairings.ts +0 -133
  101. package/src/presence.ts +0 -118
  102. package/src/sessions.ts +0 -432
  103. package/src/state-store.ts +0 -140
  104. package/src/static-web.ts +0 -133
  105. package/src/tokens.ts +0 -159
  106. package/src/tunnel.ts +0 -644
  107. /package/dist/{gateway-v2 → gateway}/src/accounts.d.ts +0 -0
  108. /package/dist/{gateway-v2 → gateway}/src/accounts.js +0 -0
  109. /package/dist/{gateway-v2 → gateway}/src/main.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAuB,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAkC,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,YAAY,EAAiD,MAAM,YAAY,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { supabaseVerifier } from "./accounts.js";
2
+ import { packageVersion, startGateway } from "./serve.js";
3
+ import { requirePro, supabaseSubscriptions } from "./subscription.js";
4
+ // The gateway as a process (the Docker image runs this), configured by environment:
5
+ // PORT listen port (8787)
6
+ // RELAY_DATA_PATH SQLite file with pairings and keys (./data/relay.db); keep it on a volume
7
+ // SUPABASE_URL + SUPABASE_ANON_KEY turn accounts on
8
+ // AUTH_REQUIRED=true computers need an active Pro account (with SUPABASE_SERVICE_ROLE_KEY)
9
+ // TRUSTED_PROXIES comma-separated proxy addresses (or IPv4 ranges, 10.0.0.0/8) whose X-Forwarded-For is believed
10
+ // WS_CONNECT_RATE_LIMIT_MAX / WS_CONNECT_RATE_LIMIT_WINDOW_MS connections per address (20 per 60000 ms)
11
+ // LOG_LEVEL debug | info | warn | error (info)
12
+ const LOG_LEVELS = { debug: 0, info: 1, warn: 2, error: 3 };
13
+ const logLevel = (process.env.LOG_LEVEL ?? "info");
14
+ function log(level, message) {
15
+ if (LOG_LEVELS[level] >= LOG_LEVELS[logLevel])
16
+ process.stdout.write(`[gateway:${level}] ${message}\n`);
17
+ }
18
+ const port = Number(process.env.PORT ?? 8787);
19
+ const databasePath = process.env.RELAY_DATA_PATH ?? "./data/relay.db";
20
+ const supabase = {
21
+ url: process.env.SUPABASE_URL ?? "",
22
+ anonKey: process.env.SUPABASE_ANON_KEY ?? "",
23
+ serviceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY ?? "",
24
+ };
25
+ const version = packageVersion();
26
+ const gateway = await startGateway({
27
+ port,
28
+ databasePath,
29
+ version,
30
+ log: (message) => log("info", `[relay] ${message}`),
31
+ verifyToken: supabase.url && supabase.anonKey ? supabaseVerifier(supabase.url, supabase.anonKey) : undefined,
32
+ admit: process.env.AUTH_REQUIRED === "true"
33
+ ? requirePro(supabaseSubscriptions(supabase), (message) => log("warn", `[relay] ${message}`))
34
+ : undefined,
35
+ trustedProxies: (process.env.TRUSTED_PROXIES ?? "").split(","),
36
+ wsConnectLimit: {
37
+ max: Number(process.env.WS_CONNECT_RATE_LIMIT_MAX ?? 20),
38
+ windowMs: Number(process.env.WS_CONNECT_RATE_LIMIT_WINDOW_MS ?? 60_000),
39
+ },
40
+ });
41
+ log("info", `LinkShell Gateway v${version}`);
42
+ log("info", `listening on http://0.0.0.0:${gateway.port}`);
43
+ // Said at every start: coming up on an empty file is how every phone gets unpaired.
44
+ log("info", `pairings and keys in ${databasePath}`);
45
+ log("info", `log level: ${logLevel}`);
46
+ function shutdown() {
47
+ process.stdout.write("[gateway] shutting down...\n");
48
+ void gateway.close().then(() => {
49
+ process.stdout.write("[gateway] stopped\n");
50
+ process.exit(0);
51
+ });
52
+ // Connections that won't close don't get to hold the process.
53
+ setTimeout(() => process.exit(1), 5000).unref();
54
+ }
55
+ process.on("SIGINT", shutdown);
56
+ process.on("SIGTERM", shutdown);
57
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { IncomingMessage } from "node:http";
2
+ /** Counts hits per key in fixed windows; over `maxHits` in one window is refused. */
3
+ export declare class RateLimiter {
4
+ private readonly maxHits;
5
+ private readonly windowMs;
6
+ private readonly hits;
7
+ private readonly pruneTimer;
8
+ constructor(maxHits: number, windowMs: number);
9
+ allow(key: string): boolean;
10
+ private prune;
11
+ destroy(): void;
12
+ }
13
+ /** A host or a test on this machine: never rate limited. */
14
+ export declare function isLoopback(ip: string): boolean;
15
+ /** The reverse proxies in front of this gateway. */
16
+ export interface TrustedProxies {
17
+ has(ip: string): boolean;
18
+ }
19
+ /**
20
+ * From a list of their addresses. An IPv4 range can be given as `10.0.0.0/8`: a proxy in a container network
21
+ * has another address after every deploy, and only its network is known beforehand.
22
+ */
23
+ export declare function trustedProxySet(addresses: readonly string[]): TrustedProxies;
24
+ /**
25
+ * Who is connecting. X-Forwarded-For is believed only when the direct peer is
26
+ * one of `trustedProxies`: from anyone else the header is the caller's own
27
+ * claim, and believing it would let them pick their rate-limit key. The same
28
+ * goes for what the header starts with: a proxy adds the address it saw to
29
+ * the end of whatever the caller sent, so the client is the last address that
30
+ * isn't a proxy's, not the first one written.
31
+ */
32
+ export declare function clientIp(request: IncomingMessage, trustedProxies: TrustedProxies): string;
@@ -0,0 +1,106 @@
1
+ /** Counts hits per key in fixed windows; over `maxHits` in one window is refused. */
2
+ export class RateLimiter {
3
+ maxHits;
4
+ windowMs;
5
+ hits = new Map();
6
+ pruneTimer;
7
+ constructor(maxHits, windowMs) {
8
+ this.maxHits = maxHits;
9
+ this.windowMs = windowMs;
10
+ // Finished windows are dropped, so the map holds only keys seen lately.
11
+ this.pruneTimer = setInterval(() => this.prune(), Math.max(windowMs, 60_000));
12
+ this.pruneTimer.unref();
13
+ }
14
+ allow(key) {
15
+ const now = Date.now();
16
+ const entry = this.hits.get(key);
17
+ if (!entry || now >= entry.resetAt) {
18
+ this.hits.set(key, { count: 1, resetAt: now + this.windowMs });
19
+ return true;
20
+ }
21
+ entry.count++;
22
+ return entry.count <= this.maxHits;
23
+ }
24
+ prune() {
25
+ const now = Date.now();
26
+ for (const [key, entry] of this.hits) {
27
+ if (now >= entry.resetAt)
28
+ this.hits.delete(key);
29
+ }
30
+ }
31
+ destroy() {
32
+ clearInterval(this.pruneTimer);
33
+ }
34
+ }
35
+ /** A host or a test on this machine: never rate limited. */
36
+ export function isLoopback(ip) {
37
+ const normalized = ip.trim().toLowerCase();
38
+ return normalized === "127.0.0.1" || normalized === "::1" || normalized === "::ffff:127.0.0.1";
39
+ }
40
+ /** IPv4 addresses arrive IPv6-mapped (::ffff:1.2.3.4) on a dual-stack socket. */
41
+ function normalizeIp(ip) {
42
+ const trimmed = ip.trim().toLowerCase();
43
+ return trimmed.startsWith("::ffff:") ? trimmed.slice(7) : trimmed;
44
+ }
45
+ function ipv4Number(ip) {
46
+ const parts = ip.split(".");
47
+ if (parts.length !== 4)
48
+ return undefined;
49
+ let value = 0;
50
+ for (const part of parts) {
51
+ if (!/^\d{1,3}$/.test(part) || Number(part) > 255)
52
+ return undefined;
53
+ value = value * 256 + Number(part);
54
+ }
55
+ return value;
56
+ }
57
+ /**
58
+ * From a list of their addresses. An IPv4 range can be given as `10.0.0.0/8`: a proxy in a container network
59
+ * has another address after every deploy, and only its network is known beforehand.
60
+ */
61
+ export function trustedProxySet(addresses) {
62
+ const exact = new Set();
63
+ const ranges = [];
64
+ for (const address of addresses.map(normalizeIp).filter(Boolean)) {
65
+ const [network, bits, ...rest] = address.split("/");
66
+ const base = bits === undefined ? undefined : ipv4Number(network ?? "");
67
+ const prefix = Number(bits);
68
+ if (base === undefined || rest.length > 0 || !/^\d{1,2}$/.test(bits ?? "") || prefix > 32) {
69
+ exact.add(address);
70
+ continue;
71
+ }
72
+ const size = 2 ** (32 - prefix);
73
+ ranges.push({ base: base - (base % size), size });
74
+ }
75
+ return {
76
+ has(ip) {
77
+ const address = normalizeIp(ip);
78
+ if (exact.has(address))
79
+ return true;
80
+ const value = ranges.length > 0 ? ipv4Number(address) : undefined;
81
+ return value !== undefined && ranges.some((range) => value >= range.base && value < range.base + range.size);
82
+ },
83
+ };
84
+ }
85
+ /**
86
+ * Who is connecting. X-Forwarded-For is believed only when the direct peer is
87
+ * one of `trustedProxies`: from anyone else the header is the caller's own
88
+ * claim, and believing it would let them pick their rate-limit key. The same
89
+ * goes for what the header starts with: a proxy adds the address it saw to
90
+ * the end of whatever the caller sent, so the client is the last address that
91
+ * isn't a proxy's, not the first one written.
92
+ */
93
+ export function clientIp(request, trustedProxies) {
94
+ const peer = request.socket.remoteAddress ?? "unknown";
95
+ if (!trustedProxies.has(peer))
96
+ return peer;
97
+ const forwarded = request.headers["x-forwarded-for"];
98
+ const hops = (Array.isArray(forwarded) ? forwarded.join(",") : (forwarded ?? "")).split(",").map((hop) => hop.trim()).filter(Boolean);
99
+ for (let i = hops.length - 1; i >= 0; i--) {
100
+ if (!trustedProxies.has(hops[i]))
101
+ return hops[i];
102
+ }
103
+ // Every hop is a proxy of ours (or there is no header): the connection is the proxy's own.
104
+ return hops[0] ?? peer;
105
+ }
106
+ //# sourceMappingURL=rate-limit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../../src/rate-limit.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,84 @@
1
- import type WebSocket from "ws";
2
- import type { SessionManager } from "./sessions.js";
3
- export declare function handleSocketMessage(socket: WebSocket, raw: string, role: "host" | "client", sessionId: string, deviceId: string, sessions: SessionManager): void;
4
- /** Replay the last agent snapshot + recent host→client agent envelopes. */
5
- export declare function replayAgentToSocket(socket: WebSocket, sessionId: string, sessions: SessionManager): void;
1
+ import { type IncomingMessage } from "node:http";
2
+ import type { Duplex } from "node:stream";
3
+ import { type PeerRole } from "@linkshell/wire";
4
+ import type { VerifyToken } from "./accounts.js";
5
+ import { GatewayStore } from "./store.js";
6
+ export interface GatewayOptions {
7
+ port: number;
8
+ host?: string;
9
+ databasePath: string;
10
+ /** Validates account tokens; without it, accounts are off and only pairing works. */
11
+ verifyToken?: VerifyToken;
12
+ log?: (message: string) => void;
13
+ /** Called with every frame the gateway routes, for tests that check it only sees ciphertext. */
14
+ onRouted?: (frame: string) => void;
15
+ pairingTtlMs?: number;
16
+ heartbeatMs?: number;
17
+ /**
18
+ * Final say on a connecting peer, after its key (and token, if any) checked
19
+ * out: return a message to refuse it. The official gateway uses this to
20
+ * require a subscription for computers.
21
+ */
22
+ admit?: (peer: {
23
+ role: PeerRole;
24
+ userId?: string;
25
+ }) => Promise<string | undefined>;
26
+ /**
27
+ * How much may wait to be written to one peer before the gateway stops
28
+ * reading from whoever is sending to it (default 4 MB), and how long a peer
29
+ * may stay that far behind before it is dropped (default 60 s).
30
+ */
31
+ maxBufferedBytes?: number;
32
+ stalledPeerMs?: number;
33
+ }
34
+ /**
35
+ * Gateway v2: authenticates peers by key, routes their end-to-end encrypted
36
+ * frames to peers they may reach (paired, or same account), and brokers
37
+ * pairing. It has no way to read what it routes.
38
+ */
39
+ export declare class Gateway {
40
+ private readonly options;
41
+ readonly store: GatewayStore;
42
+ private server?;
43
+ private readonly peers;
44
+ private readonly offers;
45
+ private readonly decisions;
46
+ private readonly claimTimes;
47
+ private heartbeat?;
48
+ /** Sockets that answered the last ping. */
49
+ private readonly alive;
50
+ private stopped;
51
+ private readonly log;
52
+ constructor(options: GatewayOptions);
53
+ private readonly wss;
54
+ /** Runs on its own port. */
55
+ start(): Promise<number>;
56
+ /**
57
+ * Runs inside another HTTP server, which passes it upgrades for
58
+ * `RELAY_PATH` through `handleUpgrade`.
59
+ */
60
+ attach(): void;
61
+ handleUpgrade(request: IncomingMessage, socket: Duplex, head: Buffer): void;
62
+ get connected(): number;
63
+ /** Bytes accepted from senders and not yet written to their receivers. */
64
+ get bufferedBytes(): number;
65
+ /** Drops connections that didn't answer the previous ping, pings the rest. */
66
+ private sweep;
67
+ stop(): Promise<void>;
68
+ private accept;
69
+ private authenticate;
70
+ private route;
71
+ /**
72
+ * Backpressure. What a peer can't take yet would otherwise pile up here, in
73
+ * memory every user of this gateway shares: stop reading the sender instead,
74
+ * so the data waits on its side until the receiver catches up.
75
+ */
76
+ private holdWhileBehind;
77
+ private event;
78
+ /** Tells everyone who can reach `record` that it came or went. */
79
+ private announce;
80
+ private machineEntry;
81
+ private deviceEntry;
82
+ private handle;
83
+ private claim;
84
+ }