@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,19 +0,0 @@
1
- import type { GatewayStateStore } from "./state-store.js";
2
- export declare class TokenManager {
3
- private readonly store?;
4
- private tokens;
5
- private sessionToToken;
6
- private cleanupTimer;
7
- constructor(store?: GatewayStateStore | undefined);
8
- hydrate(): Promise<void>;
9
- register(deviceToken?: string): string;
10
- bind(token: string, sessionId: string): boolean;
11
- validate(token: string): boolean;
12
- owns(token: string, sessionId: string): boolean;
13
- ownsFresh(token: string, sessionId: string): Promise<boolean>;
14
- getSessionIds(token: string): Set<string>;
15
- getTokenForSession(sessionId: string): string | undefined;
16
- private cleanup;
17
- private persist;
18
- destroy(): void;
19
- }
@@ -1,151 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- const CLEANUP_INTERVAL = 5 * 60_000;
3
- const SESSION_TTL = 7 * 24 * 60 * 60_000; // 7 days — prune stale bindings
4
- export class TokenManager {
5
- store;
6
- tokens = new Map();
7
- sessionToToken = new Map();
8
- cleanupTimer;
9
- constructor(store) {
10
- this.store = store;
11
- this.cleanupTimer = setInterval(() => this.cleanup(), CLEANUP_INTERVAL);
12
- }
13
- async hydrate() {
14
- if (!this.store)
15
- return;
16
- try {
17
- const records = await this.store.loadTokens();
18
- const now = Date.now();
19
- for (const record of records) {
20
- if (now - record.lastUsedAt > SESSION_TTL) {
21
- void this.store.deleteToken(record.token).catch(() => { });
22
- continue;
23
- }
24
- this.tokens.set(record.token, {
25
- token: record.token,
26
- sessionIds: new Set(record.sessionIds),
27
- createdAt: record.createdAt,
28
- lastUsedAt: record.lastUsedAt,
29
- });
30
- for (const sessionId of record.sessionIds) {
31
- this.sessionToToken.set(sessionId, record.token);
32
- }
33
- }
34
- }
35
- catch (err) {
36
- process.stderr.write(`[gateway] token store hydrate failed, using memory only: ${err}\n`);
37
- }
38
- }
39
- register(deviceToken) {
40
- if (deviceToken && this.tokens.has(deviceToken)) {
41
- const record = this.tokens.get(deviceToken);
42
- record.lastUsedAt = Date.now();
43
- this.persist(record);
44
- return deviceToken;
45
- }
46
- const token = deviceToken || randomUUID();
47
- this.tokens.set(token, {
48
- token,
49
- sessionIds: new Set(),
50
- createdAt: Date.now(),
51
- lastUsedAt: Date.now(),
52
- });
53
- this.persist(this.tokens.get(token));
54
- return token;
55
- }
56
- bind(token, sessionId) {
57
- const record = this.tokens.get(token);
58
- if (!record)
59
- return false;
60
- record.sessionIds.add(sessionId);
61
- record.lastUsedAt = Date.now();
62
- this.sessionToToken.set(sessionId, token);
63
- this.persist(record);
64
- return true;
65
- }
66
- validate(token) {
67
- const record = this.tokens.get(token);
68
- if (!record)
69
- return false;
70
- record.lastUsedAt = Date.now();
71
- this.persist(record);
72
- return true;
73
- }
74
- owns(token, sessionId) {
75
- const record = this.tokens.get(token);
76
- if (!record)
77
- return false;
78
- record.lastUsedAt = Date.now();
79
- this.persist(record);
80
- return record.sessionIds.has(sessionId);
81
- }
82
- async ownsFresh(token, sessionId) {
83
- if (this.owns(token, sessionId))
84
- return true;
85
- if (!this.store)
86
- return false;
87
- try {
88
- const records = await this.store.loadTokens();
89
- const now = Date.now();
90
- for (const record of records) {
91
- if (now - record.lastUsedAt > SESSION_TTL)
92
- continue;
93
- if (record.token !== token)
94
- continue;
95
- const next = {
96
- token: record.token,
97
- sessionIds: new Set(record.sessionIds),
98
- createdAt: record.createdAt,
99
- lastUsedAt: Date.now(),
100
- };
101
- this.tokens.set(record.token, next);
102
- for (const sid of record.sessionIds) {
103
- this.sessionToToken.set(sid, record.token);
104
- }
105
- this.persist(next);
106
- return next.sessionIds.has(sessionId);
107
- }
108
- }
109
- catch (err) {
110
- process.stderr.write(`[gateway] token store refresh failed: ${err}\n`);
111
- }
112
- return false;
113
- }
114
- getSessionIds(token) {
115
- const record = this.tokens.get(token);
116
- if (!record)
117
- return new Set();
118
- record.lastUsedAt = Date.now();
119
- this.persist(record);
120
- return record.sessionIds;
121
- }
122
- getTokenForSession(sessionId) {
123
- return this.sessionToToken.get(sessionId);
124
- }
125
- cleanup() {
126
- const now = Date.now();
127
- for (const [token, record] of this.tokens) {
128
- if (now - record.lastUsedAt > SESSION_TTL) {
129
- for (const sid of record.sessionIds) {
130
- this.sessionToToken.delete(sid);
131
- }
132
- this.tokens.delete(token);
133
- void this.store?.deleteToken(token).catch(() => { });
134
- }
135
- }
136
- }
137
- persist(record) {
138
- void this.store?.saveToken({
139
- token: record.token,
140
- sessionIds: [...record.sessionIds],
141
- createdAt: record.createdAt,
142
- lastUsedAt: record.lastUsedAt,
143
- }).catch((err) => {
144
- process.stderr.write(`[gateway] token store save failed: ${err}\n`);
145
- });
146
- }
147
- destroy() {
148
- clearInterval(this.cleanupTimer);
149
- }
150
- }
151
- //# sourceMappingURL=tokens.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/tokens.ts"],"names":[],"mappings":"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"}
@@ -1,61 +0,0 @@
1
- import type { IncomingMessage, ServerResponse } from "node:http";
2
- import type WebSocket from "ws";
3
- import type { SessionManager } from "./sessions.js";
4
- import type { TokenManager } from "./tokens.js";
5
- export interface PendingTunnelRequest {
6
- res: ServerResponse;
7
- headersSent: boolean;
8
- timeout: ReturnType<typeof setTimeout>;
9
- tunnelCookie?: string;
10
- sessionId: string;
11
- port: number;
12
- requestPath: string;
13
- }
14
- export interface PendingTunnelWs {
15
- ws: WebSocket;
16
- }
17
- export declare function tokenFromTunnelCookie(req: IncomingMessage, sessionId: string, port: number): string | null;
18
- /** Parse lsh_tunnel cookie: "sessionId:port:token" */
19
- export declare function parseTunnelCookie(req: IncomingMessage): {
20
- sessionId: string;
21
- port: number;
22
- token: string;
23
- } | null;
24
- export declare function parseTunnelPath(pathname: string): {
25
- sessionId: string;
26
- port: number;
27
- path: string;
28
- } | null;
29
- export declare function hasTunnelReferer(req: IncomingMessage): boolean;
30
- export declare function shouldUseTunnelCookieFallback(req: IncomingMessage, pathname: string, isReservedPath?: (pathname: string) => boolean): boolean;
31
- export declare function mergeTunnelSetCookie(headers: Record<string, string | string[]>, tunnelCookie?: string): Record<string, string | string[]>;
32
- export declare function handleTunnelRequest(req: IncomingMessage, res: ServerResponse, sessions: SessionManager, tokens: TokenManager, parsed: {
33
- sessionId: string;
34
- port: number;
35
- path: string;
36
- }, url: URL, preAuthToken?: string): Promise<void>;
37
- export declare function handleTunnelResponse(payload: {
38
- requestId: string;
39
- statusCode: number;
40
- headers: Record<string, string>;
41
- body: string;
42
- isFinal: boolean;
43
- }): void;
44
- export declare function handleTunnelWsData(payload: {
45
- requestId: string;
46
- data: string;
47
- isBinary: boolean;
48
- }): void;
49
- export declare function handleTunnelWsClose(payload: {
50
- requestId: string;
51
- code?: number;
52
- reason?: string;
53
- }): void;
54
- export declare function registerTunnelWs(requestId: string, ws: WebSocket): void;
55
- export declare function removeTunnelWs(requestId: string): void;
56
- export declare function cleanupSessionTunnels(sessionId: string): void;
57
- export declare function handleTunnelWsUpgrade(ws: WebSocket, parsed: {
58
- sessionId: string;
59
- port: number;
60
- path: string;
61
- }, url: URL, sessions: SessionManager, tokens: TokenManager, preAuthToken?: string): Promise<void>;