@tapflowio/relay 0.1.0-alpha.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 (157) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +30 -0
  3. package/dist/RelayServer.d.ts +37 -0
  4. package/dist/RelayServer.d.ts.map +1 -0
  5. package/dist/RelayServer.js +531 -0
  6. package/dist/RelayServer.js.map +1 -0
  7. package/dist/SessionManager.d.ts +62 -0
  8. package/dist/SessionManager.d.ts.map +1 -0
  9. package/dist/SessionManager.js +174 -0
  10. package/dist/SessionManager.js.map +1 -0
  11. package/dist/api/agents.d.ts +4 -0
  12. package/dist/api/agents.d.ts.map +1 -0
  13. package/dist/api/agents.js +36 -0
  14. package/dist/api/agents.js.map +1 -0
  15. package/dist/api/apps.d.ts +6 -0
  16. package/dist/api/apps.d.ts.map +1 -0
  17. package/dist/api/apps.js +76 -0
  18. package/dist/api/apps.js.map +1 -0
  19. package/dist/api/auth.d.ts +9 -0
  20. package/dist/api/auth.d.ts.map +1 -0
  21. package/dist/api/auth.js +81 -0
  22. package/dist/api/auth.js.map +1 -0
  23. package/dist/api/builds.d.ts +14 -0
  24. package/dist/api/builds.d.ts.map +1 -0
  25. package/dist/api/builds.js +368 -0
  26. package/dist/api/builds.js.map +1 -0
  27. package/dist/api/comments.d.ts +5 -0
  28. package/dist/api/comments.d.ts.map +1 -0
  29. package/dist/api/comments.js +114 -0
  30. package/dist/api/comments.js.map +1 -0
  31. package/dist/api/invitations.d.ts +4 -0
  32. package/dist/api/invitations.d.ts.map +1 -0
  33. package/dist/api/invitations.js +95 -0
  34. package/dist/api/invitations.js.map +1 -0
  35. package/dist/api/passwordReset.d.ts +6 -0
  36. package/dist/api/passwordReset.d.ts.map +1 -0
  37. package/dist/api/passwordReset.js +64 -0
  38. package/dist/api/passwordReset.js.map +1 -0
  39. package/dist/api/profile.d.ts +3 -0
  40. package/dist/api/profile.d.ts.map +1 -0
  41. package/dist/api/profile.js +56 -0
  42. package/dist/api/profile.js.map +1 -0
  43. package/dist/api/recordings.d.ts +6 -0
  44. package/dist/api/recordings.d.ts.map +1 -0
  45. package/dist/api/recordings.js +167 -0
  46. package/dist/api/recordings.js.map +1 -0
  47. package/dist/api/settings.d.ts +4 -0
  48. package/dist/api/settings.d.ts.map +1 -0
  49. package/dist/api/settings.js +65 -0
  50. package/dist/api/settings.js.map +1 -0
  51. package/dist/api/team.d.ts +6 -0
  52. package/dist/api/team.d.ts.map +1 -0
  53. package/dist/api/team.js +65 -0
  54. package/dist/api/team.js.map +1 -0
  55. package/dist/api/tokens.d.ts +5 -0
  56. package/dist/api/tokens.d.ts.map +1 -0
  57. package/dist/api/tokens.js +39 -0
  58. package/dist/api/tokens.js.map +1 -0
  59. package/dist/db.d.ts +5 -0
  60. package/dist/db.d.ts.map +1 -0
  61. package/dist/db.js +43 -0
  62. package/dist/db.js.map +1 -0
  63. package/dist/index.d.ts +6 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +4 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/lib/config.d.ts +34 -0
  68. package/dist/lib/config.d.ts.map +1 -0
  69. package/dist/lib/config.js +97 -0
  70. package/dist/lib/config.js.map +1 -0
  71. package/dist/lib/mailer.d.ts +2 -0
  72. package/dist/lib/mailer.d.ts.map +1 -0
  73. package/dist/lib/mailer.js +30 -0
  74. package/dist/lib/mailer.js.map +1 -0
  75. package/dist/middleware/auth.d.ts +17 -0
  76. package/dist/middleware/auth.d.ts.map +1 -0
  77. package/dist/middleware/auth.js +65 -0
  78. package/dist/middleware/auth.js.map +1 -0
  79. package/dist/migrations/001_initial.sql +55 -0
  80. package/dist/migrations/002_dashboard_foundation.sql +54 -0
  81. package/dist/migrations/003_recordings.sql +14 -0
  82. package/dist/migrations/004_app_build_split.sql +88 -0
  83. package/dist/migrations/005_user_avatar.sql +1 -0
  84. package/dist/migrations/006_password_reset.sql +7 -0
  85. package/dist/migrations/007_app_platform_model.sql +34 -0
  86. package/dist/migrations/008_recordings_build_id.sql +4 -0
  87. package/dist/migrations/009_agent_resources.sql +12 -0
  88. package/dist/router.d.ts +16 -0
  89. package/dist/router.d.ts.map +1 -0
  90. package/dist/router.js +53 -0
  91. package/dist/router.js.map +1 -0
  92. package/dist/server.d.ts +2 -0
  93. package/dist/server.d.ts.map +1 -0
  94. package/dist/server.js +17 -0
  95. package/dist/server.js.map +1 -0
  96. package/dist/types.d.ts +41 -0
  97. package/dist/types.d.ts.map +1 -0
  98. package/dist/types.js +2 -0
  99. package/dist/types.js.map +1 -0
  100. package/package.json +72 -0
  101. package/public/assets/index-CIXHMEdP.css +1 -0
  102. package/public/assets/index-CzYNt1iH.js +499 -0
  103. package/public/assets/inter-cyrillic-400-normal-HOLc17fK.woff +0 -0
  104. package/public/assets/inter-cyrillic-400-normal-obahsSVq.woff2 +0 -0
  105. package/public/assets/inter-cyrillic-500-normal-BasfLYem.woff2 +0 -0
  106. package/public/assets/inter-cyrillic-500-normal-CxZf_p3X.woff +0 -0
  107. package/public/assets/inter-cyrillic-600-normal-4D_pXhcN.woff +0 -0
  108. package/public/assets/inter-cyrillic-600-normal-CWCymEST.woff2 +0 -0
  109. package/public/assets/inter-cyrillic-ext-400-normal-BQZuk6qB.woff2 +0 -0
  110. package/public/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff +0 -0
  111. package/public/assets/inter-cyrillic-ext-500-normal-B0yAr1jD.woff2 +0 -0
  112. package/public/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff +0 -0
  113. package/public/assets/inter-cyrillic-ext-600-normal-Bcila6Z-.woff +0 -0
  114. package/public/assets/inter-cyrillic-ext-600-normal-Dfes3d0z.woff2 +0 -0
  115. package/public/assets/inter-greek-400-normal-B4URO6DV.woff2 +0 -0
  116. package/public/assets/inter-greek-400-normal-q2sYcFCs.woff +0 -0
  117. package/public/assets/inter-greek-500-normal-BIZE56-Y.woff2 +0 -0
  118. package/public/assets/inter-greek-500-normal-Xzm54t5V.woff +0 -0
  119. package/public/assets/inter-greek-600-normal-BZpKdvQh.woff +0 -0
  120. package/public/assets/inter-greek-600-normal-plRanbMR.woff2 +0 -0
  121. package/public/assets/inter-greek-ext-400-normal-DGGRlc-M.woff2 +0 -0
  122. package/public/assets/inter-greek-ext-400-normal-KugGGMne.woff +0 -0
  123. package/public/assets/inter-greek-ext-500-normal-2j5mBUwD.woff +0 -0
  124. package/public/assets/inter-greek-ext-500-normal-C4iEst2y.woff2 +0 -0
  125. package/public/assets/inter-greek-ext-600-normal-B8X0CLgF.woff +0 -0
  126. package/public/assets/inter-greek-ext-600-normal-DRtmH8MT.woff2 +0 -0
  127. package/public/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
  128. package/public/assets/inter-latin-400-normal-CyCys3Eg.woff +0 -0
  129. package/public/assets/inter-latin-500-normal-BL9OpVg8.woff +0 -0
  130. package/public/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
  131. package/public/assets/inter-latin-600-normal-CiBQ2DWP.woff +0 -0
  132. package/public/assets/inter-latin-600-normal-LgqL8muc.woff2 +0 -0
  133. package/public/assets/inter-latin-ext-400-normal-77YHD8bZ.woff +0 -0
  134. package/public/assets/inter-latin-ext-400-normal-C1nco2VV.woff2 +0 -0
  135. package/public/assets/inter-latin-ext-500-normal-BxGbmqWO.woff +0 -0
  136. package/public/assets/inter-latin-ext-500-normal-CV4jyFjo.woff2 +0 -0
  137. package/public/assets/inter-latin-ext-600-normal-CIVaiw4L.woff +0 -0
  138. package/public/assets/inter-latin-ext-600-normal-D2bJ5OIk.woff2 +0 -0
  139. package/public/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff +0 -0
  140. package/public/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
  141. package/public/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
  142. package/public/assets/inter-vietnamese-500-normal-mJboJaSs.woff +0 -0
  143. package/public/assets/inter-vietnamese-600-normal-BuLX-rYi.woff +0 -0
  144. package/public/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
  145. package/public/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  146. package/public/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  147. package/public/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  148. package/public/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  149. package/public/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  150. package/public/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  151. package/public/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  152. package/public/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  153. package/public/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  154. package/public/favicon.svg +5 -0
  155. package/public/index.html +14 -0
  156. package/public/logo-dark.svg +12 -0
  157. package/public/logo.svg +12 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelayServer.js","sourceRoot":"","sources":["../src/RelayServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { WebSocket } from 'ws';
2
+ import type { DeviceStatus } from '@tapflowio/agent-core';
3
+ import type { AgentResources, SessionInfo } from './types.js';
4
+ export interface Session {
5
+ id: string;
6
+ agentName?: string;
7
+ agentPlatform?: string;
8
+ agentSocket: WebSocket;
9
+ browserSocket: WebSocket | null;
10
+ streamSocket: WebSocket | null;
11
+ deviceId: string;
12
+ deviceName: string;
13
+ devicePlatform: string;
14
+ deviceStatus: DeviceStatus;
15
+ deviceOsVersion?: string;
16
+ chromeData?: unknown;
17
+ deviceInfo?: {
18
+ deviceName: string;
19
+ osVersion: string;
20
+ };
21
+ idleTimer: ReturnType<typeof setTimeout> | null;
22
+ }
23
+ type RawDevice = {
24
+ id: string;
25
+ name: string;
26
+ platform: string;
27
+ status: string;
28
+ osVersion?: string;
29
+ };
30
+ export declare class SessionManager {
31
+ private sessions;
32
+ private agentResources;
33
+ private agentSocketIndex;
34
+ private streamSocketIndex;
35
+ private browserSocketIndex;
36
+ private readonly idleTimeoutMs;
37
+ constructor(options?: {
38
+ idleTimeoutMs?: number;
39
+ });
40
+ create(agentSocket: WebSocket, devices?: RawDevice[], agentName?: string, agentPlatform?: string): string[];
41
+ get(sessionId: string): Session | undefined;
42
+ getAllByAgentSocket(ws: WebSocket): Session[];
43
+ getByStreamSocket(ws: WebSocket): Session | undefined;
44
+ getByBrowserSocket(ws: WebSocket): Session | undefined;
45
+ join(sessionId: string, browserSocket: WebSocket): void;
46
+ remove(sessionId: string): void;
47
+ clearBrowser(sessionId: string, onTimeout?: () => void): void;
48
+ setResources(agentSocket: WebSocket, resources: AgentResources): void;
49
+ removeResources(agentSocket: WebSocket): void;
50
+ clearDeviceCache(sessionId: string): void;
51
+ setStreamSocket(sessionId: string, ws: WebSocket): void;
52
+ clearStreamSocket(sessionId: string): void;
53
+ setChromeData(sessionId: string, data: unknown): void;
54
+ setDeviceInfo(sessionId: string, info: {
55
+ deviceName: string;
56
+ osVersion: string;
57
+ }): void;
58
+ updateDeviceStatus(sessionId: string, status: DeviceStatus): void;
59
+ list(): SessionInfo[];
60
+ }
61
+ export {};
62
+ //# sourceMappingURL=SessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../src/SessionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,174 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { WebSocket } from 'ws';
3
+ const DEFAULT_IDLE_TIMEOUT_MS = parseInt(process.env['IDLE_TIMEOUT_MS'] ?? String(5 * 60 * 1000));
4
+ export class SessionManager {
5
+ sessions = new Map();
6
+ agentResources = new Map();
7
+ agentSocketIndex = new Map();
8
+ streamSocketIndex = new Map();
9
+ browserSocketIndex = new Map();
10
+ idleTimeoutMs;
11
+ constructor(options = {}) {
12
+ this.idleTimeoutMs = options.idleTimeoutMs ?? DEFAULT_IDLE_TIMEOUT_MS;
13
+ }
14
+ create(agentSocket, devices = [], agentName, agentPlatform) {
15
+ const agentIds = this.agentSocketIndex.get(agentSocket) ?? new Set();
16
+ return devices.map((d) => {
17
+ const id = randomUUID();
18
+ this.sessions.set(id, {
19
+ id,
20
+ agentName,
21
+ agentPlatform,
22
+ agentSocket,
23
+ browserSocket: null,
24
+ streamSocket: null,
25
+ deviceId: d.id,
26
+ deviceName: d.name,
27
+ devicePlatform: d.platform,
28
+ deviceStatus: d.status,
29
+ deviceOsVersion: d.osVersion,
30
+ idleTimer: null,
31
+ });
32
+ agentIds.add(id);
33
+ this.agentSocketIndex.set(agentSocket, agentIds);
34
+ return id;
35
+ });
36
+ }
37
+ get(sessionId) {
38
+ return this.sessions.get(sessionId);
39
+ }
40
+ getAllByAgentSocket(ws) {
41
+ const ids = this.agentSocketIndex.get(ws);
42
+ if (!ids)
43
+ return [];
44
+ return Array.from(ids).map((id) => this.sessions.get(id)).filter((s) => s !== undefined);
45
+ }
46
+ getByStreamSocket(ws) {
47
+ return this.streamSocketIndex.get(ws);
48
+ }
49
+ getByBrowserSocket(ws) {
50
+ return this.browserSocketIndex.get(ws);
51
+ }
52
+ join(sessionId, browserSocket) {
53
+ const session = this.sessions.get(sessionId);
54
+ if (!session)
55
+ throw new Error(`Session not found: ${sessionId}`);
56
+ if (session.browserSocket?.readyState === WebSocket.OPEN) {
57
+ throw new Error(`Session busy: ${sessionId}`);
58
+ }
59
+ if (session.idleTimer) {
60
+ clearTimeout(session.idleTimer);
61
+ session.idleTimer = null;
62
+ }
63
+ if (session.browserSocket)
64
+ this.browserSocketIndex.delete(session.browserSocket);
65
+ session.browserSocket = browserSocket;
66
+ this.browserSocketIndex.set(browserSocket, session);
67
+ }
68
+ remove(sessionId) {
69
+ const session = this.sessions.get(sessionId);
70
+ if (!session)
71
+ return;
72
+ if (session.idleTimer) {
73
+ clearTimeout(session.idleTimer);
74
+ session.idleTimer = null;
75
+ }
76
+ if (session.streamSocket)
77
+ this.streamSocketIndex.delete(session.streamSocket);
78
+ if (session.browserSocket)
79
+ this.browserSocketIndex.delete(session.browserSocket);
80
+ const agentIds = this.agentSocketIndex.get(session.agentSocket);
81
+ agentIds?.delete(sessionId);
82
+ if (agentIds?.size === 0)
83
+ this.agentSocketIndex.delete(session.agentSocket);
84
+ this.sessions.delete(sessionId);
85
+ }
86
+ clearBrowser(sessionId, onTimeout) {
87
+ const session = this.sessions.get(sessionId);
88
+ if (!session)
89
+ return;
90
+ if (session.browserSocket) {
91
+ this.browserSocketIndex.delete(session.browserSocket);
92
+ session.browserSocket = null;
93
+ }
94
+ if (session.idleTimer) {
95
+ clearTimeout(session.idleTimer);
96
+ session.idleTimer = null;
97
+ }
98
+ if (onTimeout) {
99
+ session.idleTimer = setTimeout(() => {
100
+ session.idleTimer = null;
101
+ onTimeout();
102
+ }, this.idleTimeoutMs);
103
+ }
104
+ }
105
+ setResources(agentSocket, resources) {
106
+ this.agentResources.set(agentSocket, resources);
107
+ }
108
+ removeResources(agentSocket) {
109
+ this.agentResources.delete(agentSocket);
110
+ }
111
+ clearDeviceCache(sessionId) {
112
+ const session = this.sessions.get(sessionId);
113
+ if (!session)
114
+ return;
115
+ session.chromeData = undefined;
116
+ session.deviceInfo = undefined;
117
+ session.deviceStatus = 'shutdown';
118
+ }
119
+ setStreamSocket(sessionId, ws) {
120
+ const session = this.sessions.get(sessionId);
121
+ if (!session)
122
+ return;
123
+ if (session.streamSocket)
124
+ this.streamSocketIndex.delete(session.streamSocket);
125
+ session.streamSocket = ws;
126
+ this.streamSocketIndex.set(ws, session);
127
+ }
128
+ clearStreamSocket(sessionId) {
129
+ const session = this.sessions.get(sessionId);
130
+ if (!session?.streamSocket)
131
+ return;
132
+ this.streamSocketIndex.delete(session.streamSocket);
133
+ session.streamSocket = null;
134
+ }
135
+ setChromeData(sessionId, data) {
136
+ const session = this.sessions.get(sessionId);
137
+ if (session)
138
+ session.chromeData = data;
139
+ }
140
+ setDeviceInfo(sessionId, info) {
141
+ const session = this.sessions.get(sessionId);
142
+ if (session)
143
+ session.deviceInfo = info;
144
+ }
145
+ updateDeviceStatus(sessionId, status) {
146
+ const session = this.sessions.get(sessionId);
147
+ if (session)
148
+ session.deviceStatus = status;
149
+ }
150
+ list() {
151
+ // Group sessions by agentSocket
152
+ const agentMap = new Map();
153
+ for (const session of this.sessions.values()) {
154
+ const group = agentMap.get(session.agentSocket) ?? [];
155
+ group.push(session);
156
+ agentMap.set(session.agentSocket, group);
157
+ }
158
+ return Array.from(agentMap.values()).map((group) => ({
159
+ agentName: group[0].agentName,
160
+ platform: group[0].agentPlatform,
161
+ resources: this.agentResources.get(group[0].agentSocket),
162
+ devices: group.map((s) => ({
163
+ id: s.deviceId,
164
+ name: s.deviceName,
165
+ platform: s.devicePlatform,
166
+ status: s.deviceStatus,
167
+ osVersion: s.deviceOsVersion,
168
+ sessionId: s.id,
169
+ busy: s.browserSocket !== null,
170
+ })),
171
+ }));
172
+ }
173
+ }
174
+ //# sourceMappingURL=SessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../src/SessionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import http from 'http';
2
+ export declare function handleListAgents(req: http.IncomingMessage, res: http.ServerResponse): void;
3
+ export declare function handleGetAgentResources(req: http.IncomingMessage, res: http.ServerResponse, params: Record<string, string>): void;
4
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/api/agents.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAYvB,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAM1F;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,IAAI,CAkBN"}
@@ -0,0 +1,36 @@
1
+ import { requireAuth } from '../middleware/auth.js';
2
+ import { getDb } from '../db.js';
3
+ import { json } from '../router.js';
4
+ const RANGES = {
5
+ '1h': '-1 hour',
6
+ '6h': '-6 hours',
7
+ '24h': '-24 hours',
8
+ '7d': '-7 days',
9
+ };
10
+ export function handleListAgents(req, res) {
11
+ if (!requireAuth(req, res))
12
+ return;
13
+ const rows = getDb()
14
+ .prepare('SELECT DISTINCT agent_name FROM agent_resources ORDER BY agent_name')
15
+ .all();
16
+ json(res, 200, rows.map((r) => r.agent_name));
17
+ }
18
+ export function handleGetAgentResources(req, res, params) {
19
+ if (!requireAuth(req, res))
20
+ return;
21
+ const agentName = decodeURIComponent(params.name);
22
+ const url = new URL(req.url ?? '/', 'http://x');
23
+ const range = url.searchParams.get('range') ?? '1h';
24
+ const interval = RANGES[range] ?? RANGES['1h'];
25
+ const rows = getDb()
26
+ .prepare(`
27
+ SELECT cpu_percent, mem_percent, recorded_at
28
+ FROM agent_resources
29
+ WHERE agent_name = ?
30
+ AND recorded_at >= strftime('%Y-%m-%dT%H:%M:%fZ', 'now', ?)
31
+ ORDER BY recorded_at ASC
32
+ `)
33
+ .all(agentName, interval);
34
+ json(res, 200, rows);
35
+ }
36
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/api/agents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAEnC,MAAM,MAAM,GAA2B;IACrC,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,SAAS;CAChB,CAAA;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAyB,EAAE,GAAwB;IAClF,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC;QAAE,OAAM;IAClC,MAAM,IAAI,GAAG,KAAK,EAAE;SACjB,OAAO,CAAC,qEAAqE,CAAC;SAC9E,GAAG,EAA8B,CAAA;IACpC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,GAAyB,EACzB,GAAwB,EACxB,MAA8B;IAE9B,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC;QAAE,OAAM;IAClC,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACjD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAA;IACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;IAE9C,MAAM,IAAI,GAAG,KAAK,EAAE;SACjB,OAAO,CAAC;;;;;;KAMR,CAAC;SACD,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAwE,CAAA;IAElG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;AACtB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import http from 'http';
2
+ export declare function handleListApps(req: http.IncomingMessage, res: http.ServerResponse): void;
3
+ export declare function handleCreateApp(req: http.IncomingMessage, res: http.ServerResponse): Promise<void>;
4
+ export declare function handleDeleteApp(req: http.IncomingMessage, res: http.ServerResponse, params: Record<string, string>): void;
5
+ export declare function handleUpdateApp(req: http.IncomingMessage, res: http.ServerResponse, params: Record<string, string>): Promise<void>;
6
+ //# sourceMappingURL=apps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/api/apps.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAKvB,wBAAgB,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAoBxF;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,IAAI,CAeN;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAiBf"}
@@ -0,0 +1,76 @@
1
+ import { getDb } from '../db.js';
2
+ import { requireAuth } from '../middleware/auth.js';
3
+ import { json, readJson } from '../router.js';
4
+ export function handleListApps(req, res) {
5
+ const auth = requireAuth(req, res);
6
+ if (!auth)
7
+ return;
8
+ const items = getDb().prepare(`
9
+ SELECT
10
+ a.id, a.name, a.bundle_id_key, a.platform, a.created_at,
11
+ b.id AS latest_build_id,
12
+ b.version_name,
13
+ b.build_number,
14
+ b.status_label,
15
+ b.uploaded_at AS latest_uploaded_at
16
+ FROM apps a
17
+ LEFT JOIN builds b ON b.id = (
18
+ SELECT id FROM builds WHERE app_id = a.id ORDER BY uploaded_at DESC LIMIT 1
19
+ )
20
+ ORDER BY a.created_at DESC
21
+ `).all();
22
+ json(res, 200, { items });
23
+ }
24
+ export async function handleCreateApp(req, res) {
25
+ const auth = requireAuth(req, res);
26
+ if (!auth)
27
+ return;
28
+ if (!['Admin', 'Developer'].includes(auth.role)) {
29
+ return json(res, 403, { error: 'Forbidden' });
30
+ }
31
+ const body = await readJson(req);
32
+ if (!body.name?.trim())
33
+ return json(res, 400, { error: 'name is required' });
34
+ if (!body.bundle_id_key?.trim())
35
+ return json(res, 400, { error: 'bundle_id_key is required' });
36
+ if (!['ios', 'android', 'both'].includes(body.platform ?? '')) {
37
+ return json(res, 400, { error: 'platform must be ios, android, or both' });
38
+ }
39
+ const result = getDb()
40
+ .prepare('INSERT INTO apps (name, bundle_id_key, platform) VALUES (?, ?, ?)')
41
+ .run(body.name.trim(), body.bundle_id_key.trim(), body.platform);
42
+ json(res, 201, { id: result.lastInsertRowid, ok: true });
43
+ }
44
+ export function handleDeleteApp(req, res, params) {
45
+ const auth = requireAuth(req, res);
46
+ if (!auth)
47
+ return;
48
+ if (!['Admin', 'Developer'].includes(auth.role)) {
49
+ return json(res, 403, { error: 'Forbidden' });
50
+ }
51
+ const db = getDb();
52
+ // builds → comments는 ON DELETE CASCADE로 처리됨
53
+ db.prepare('DELETE FROM builds WHERE app_id = ?').run(params.id);
54
+ const result = db.prepare('DELETE FROM apps WHERE id = ?').run(params.id);
55
+ if (result.changes === 0)
56
+ return json(res, 404, { error: 'App not found' });
57
+ json(res, 200, { ok: true });
58
+ }
59
+ export async function handleUpdateApp(req, res, params) {
60
+ const auth = requireAuth(req, res);
61
+ if (!auth)
62
+ return;
63
+ if (!['Admin', 'Developer'].includes(auth.role)) {
64
+ return json(res, 403, { error: 'Forbidden' });
65
+ }
66
+ const body = await readJson(req);
67
+ if (!body.name?.trim())
68
+ return json(res, 400, { error: 'name is required' });
69
+ const result = getDb()
70
+ .prepare('UPDATE apps SET name = ? WHERE id = ?')
71
+ .run(body.name.trim(), params.id);
72
+ if (result.changes === 0)
73
+ return json(res, 404, { error: 'App not found' });
74
+ json(res, 200, { ok: true });
75
+ }
76
+ //# sourceMappingURL=apps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/api/apps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import http from 'http';
2
+ export declare function makePasswordHash(password: string): string;
3
+ export declare function verifyPassword(password: string, stored: string): boolean;
4
+ export declare function handleLogin(req: http.IncomingMessage, res: http.ServerResponse): Promise<void>;
5
+ export declare function handleMe(req: http.IncomingMessage, res: http.ServerResponse): void;
6
+ export declare function handleChangePassword(req: http.IncomingMessage, res: http.ServerResponse): Promise<void>;
7
+ export declare function handleLogout(_req: http.IncomingMessage, res: http.ServerResponse): void;
8
+ export declare function handleInit(req: http.IncomingMessage, res: http.ServerResponse): Promise<void>;
9
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAUvB,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAMxE;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBpG;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAWlF;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAe7G;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAMvF;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAanG"}
@@ -0,0 +1,81 @@
1
+ import crypto from 'crypto';
2
+ import { getDb } from '../db.js';
3
+ import { signJwt, requireAuth } from '../middleware/auth.js';
4
+ import { json, readJson } from '../router.js';
5
+ function hashPassword(password, salt) {
6
+ return crypto.pbkdf2Sync(password, salt, 100_000, 64, 'sha512').toString('hex');
7
+ }
8
+ export function makePasswordHash(password) {
9
+ const salt = crypto.randomBytes(16).toString('hex');
10
+ const hash = hashPassword(password, salt);
11
+ return `${salt}:${hash}`;
12
+ }
13
+ export function verifyPassword(password, stored) {
14
+ const [salt, hash] = stored.split(':');
15
+ return crypto.timingSafeEqual(Buffer.from(hashPassword(password, salt), 'hex'), Buffer.from(hash, 'hex'));
16
+ }
17
+ export async function handleLogin(req, res) {
18
+ const body = await readJson(req);
19
+ if (!body.email || !body.password)
20
+ return json(res, 400, { error: 'email and password required' });
21
+ const db = getDb();
22
+ const user = db.prepare('SELECT id, email, role, password_hash FROM users WHERE email = ?').get(body.email);
23
+ if (!user || !user.password_hash || !verifyPassword(body.password, user.password_hash)) {
24
+ return json(res, 401, { error: 'Invalid credentials' });
25
+ }
26
+ const token = signJwt({ userId: user.id, email: user.email, role: user.role });
27
+ const cookie = `tapflow_token=${token}; HttpOnly; Path=/; SameSite=Lax; Max-Age=${7 * 24 * 3600}`;
28
+ res.writeHead(200, { 'Content-Type': 'application/json', 'Set-Cookie': cookie });
29
+ res.end(JSON.stringify({ ok: true, role: user.role }));
30
+ }
31
+ export function handleMe(req, res) {
32
+ const auth = requireAuth(req, res);
33
+ if (!auth)
34
+ return;
35
+ const db = getDb();
36
+ const user = db.prepare('SELECT id, email, display_name, avatar_url, role FROM users WHERE id = ?').get(auth.userId);
37
+ if (!user)
38
+ return json(res, 404, { error: 'User not found' });
39
+ const displayName = user.display_name ?? user.email.split('@')[0];
40
+ json(res, 200, { id: user.id, email: user.email, displayName, avatarUrl: user.avatar_url, role: user.role });
41
+ }
42
+ export async function handleChangePassword(req, res) {
43
+ const auth = requireAuth(req, res);
44
+ if (!auth)
45
+ return;
46
+ const body = await readJson(req);
47
+ if (!body.currentPassword || !body.newPassword)
48
+ return json(res, 400, { error: 'currentPassword and newPassword required' });
49
+ if (body.newPassword.length < 8)
50
+ return json(res, 400, { error: 'Password must be at least 8 characters' });
51
+ const db = getDb();
52
+ const user = db.prepare('SELECT password_hash FROM users WHERE id = ?').get(auth.userId);
53
+ if (!user?.password_hash)
54
+ return json(res, 400, { error: 'No password set' });
55
+ if (!verifyPassword(body.currentPassword, user.password_hash))
56
+ return json(res, 401, { error: 'Incorrect current password' });
57
+ db.prepare('UPDATE users SET password_hash = ? WHERE id = ?').run(makePasswordHash(body.newPassword), auth.userId);
58
+ json(res, 200, { ok: true });
59
+ }
60
+ export function handleLogout(_req, res) {
61
+ res.writeHead(200, {
62
+ 'Content-Type': 'application/json',
63
+ 'Set-Cookie': 'tapflow_token=; HttpOnly; Path=/; Max-Age=0',
64
+ });
65
+ res.end(JSON.stringify({ ok: true }));
66
+ }
67
+ export async function handleInit(req, res) {
68
+ const db = getDb();
69
+ const { n } = db.prepare('SELECT COUNT(*) as n FROM users').get();
70
+ if (n > 0)
71
+ return json(res, 403, { error: 'Already initialized' });
72
+ const body = await readJson(req);
73
+ if (!body.email || !body.password)
74
+ return json(res, 400, { error: 'email and password required' });
75
+ if (body.password.length < 8)
76
+ return json(res, 400, { error: 'Password must be at least 8 characters' });
77
+ db.prepare('INSERT INTO users (email, display_name, role, password_hash) VALUES (?, ?, ?, ?)')
78
+ .run(body.email, 'Admin', 'Admin', makePasswordHash(body.password));
79
+ json(res, 201, { ok: true });
80
+ }
81
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import http from 'http';
2
+ /** .app.zip에서 앱 메타데이터를 추출한다. 구조 오류 시 null. */
3
+ export declare function extractAppZipInfo(zipPath: string): {
4
+ bundleId: string | null;
5
+ versionName: string | null;
6
+ buildNumber: string | null;
7
+ appName: string | null;
8
+ } | null;
9
+ export declare function upsertApp(name: string, bundleIdKey: string, platform: string): number;
10
+ export declare function handleListBuilds(req: http.IncomingMessage, res: http.ServerResponse): void;
11
+ export declare function handleGetBuild(req: http.IncomingMessage, res: http.ServerResponse, params: Record<string, string>): void;
12
+ export declare function handleUpdateBuild(req: http.IncomingMessage, res: http.ServerResponse, params: Record<string, string>): Promise<void>;
13
+ export declare function handleUploadBuild(req: http.IncomingMessage, res: http.ServerResponse, uploadsDir: string): void;
14
+ //# sourceMappingURL=builds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builds.d.ts","sourceRoot":"","sources":["../../src/api/builds.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAkCvB,8CAA8C;AAC9C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;IAClD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB,GAAG,IAAI,CA4BP;AA4ED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkBrF;AAID,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CA+C1F;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,IAAI,CAcN;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,UAAU,EAAE,MAAM,GACjB,IAAI,CAwIN"}