@agent-relay/cloud 2.0.23 → 6.0.4

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 (301) hide show
  1. package/dist/api-client.d.ts +33 -0
  2. package/dist/api-client.d.ts.map +1 -0
  3. package/dist/api-client.js +123 -0
  4. package/dist/api-client.js.map +1 -0
  5. package/dist/auth.d.ts +13 -0
  6. package/dist/auth.d.ts.map +1 -0
  7. package/dist/auth.js +299 -0
  8. package/dist/auth.js.map +1 -0
  9. package/dist/connect.d.ts +45 -0
  10. package/dist/connect.d.ts.map +1 -0
  11. package/dist/connect.js +166 -0
  12. package/dist/connect.js.map +1 -0
  13. package/dist/index.d.ts +7 -10
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +7 -37
  16. package/dist/index.js.map +1 -1
  17. package/dist/lib/ssh-interactive.d.ts +70 -0
  18. package/dist/lib/ssh-interactive.d.ts.map +1 -0
  19. package/dist/lib/ssh-interactive.js +440 -0
  20. package/dist/lib/ssh-interactive.js.map +1 -0
  21. package/dist/lib/ssh-runtime.d.ts +35 -0
  22. package/dist/lib/ssh-runtime.d.ts.map +1 -0
  23. package/dist/lib/ssh-runtime.js +52 -0
  24. package/dist/lib/ssh-runtime.js.map +1 -0
  25. package/dist/types.d.ts +76 -0
  26. package/dist/types.d.ts.map +1 -0
  27. package/dist/types.js +12 -0
  28. package/dist/types.js.map +1 -0
  29. package/dist/workflows.d.ts +49 -0
  30. package/dist/workflows.d.ts.map +1 -0
  31. package/dist/workflows.js +473 -0
  32. package/dist/workflows.js.map +1 -0
  33. package/package.json +12 -25
  34. package/dist/api/admin.d.ts +0 -8
  35. package/dist/api/admin.d.ts.map +0 -1
  36. package/dist/api/admin.js +0 -225
  37. package/dist/api/admin.js.map +0 -1
  38. package/dist/api/auth.d.ts +0 -20
  39. package/dist/api/auth.d.ts.map +0 -1
  40. package/dist/api/auth.js +0 -138
  41. package/dist/api/auth.js.map +0 -1
  42. package/dist/api/billing.d.ts +0 -7
  43. package/dist/api/billing.d.ts.map +0 -1
  44. package/dist/api/billing.js +0 -564
  45. package/dist/api/billing.js.map +0 -1
  46. package/dist/api/cli-pty-runner.d.ts +0 -53
  47. package/dist/api/cli-pty-runner.d.ts.map +0 -1
  48. package/dist/api/cli-pty-runner.js +0 -175
  49. package/dist/api/cli-pty-runner.js.map +0 -1
  50. package/dist/api/codex-auth-helper.d.ts +0 -21
  51. package/dist/api/codex-auth-helper.d.ts.map +0 -1
  52. package/dist/api/codex-auth-helper.js +0 -327
  53. package/dist/api/codex-auth-helper.js.map +0 -1
  54. package/dist/api/consensus.d.ts +0 -13
  55. package/dist/api/consensus.d.ts.map +0 -1
  56. package/dist/api/consensus.js +0 -261
  57. package/dist/api/consensus.js.map +0 -1
  58. package/dist/api/coordinators.d.ts +0 -8
  59. package/dist/api/coordinators.d.ts.map +0 -1
  60. package/dist/api/coordinators.js +0 -750
  61. package/dist/api/coordinators.js.map +0 -1
  62. package/dist/api/daemons.d.ts +0 -12
  63. package/dist/api/daemons.d.ts.map +0 -1
  64. package/dist/api/daemons.js +0 -535
  65. package/dist/api/daemons.js.map +0 -1
  66. package/dist/api/email-auth.d.ts +0 -11
  67. package/dist/api/email-auth.d.ts.map +0 -1
  68. package/dist/api/email-auth.js +0 -347
  69. package/dist/api/email-auth.js.map +0 -1
  70. package/dist/api/generic-webhooks.d.ts +0 -8
  71. package/dist/api/generic-webhooks.d.ts.map +0 -1
  72. package/dist/api/generic-webhooks.js +0 -129
  73. package/dist/api/generic-webhooks.js.map +0 -1
  74. package/dist/api/git.d.ts +0 -8
  75. package/dist/api/git.d.ts.map +0 -1
  76. package/dist/api/git.js +0 -269
  77. package/dist/api/git.js.map +0 -1
  78. package/dist/api/github-app.d.ts +0 -11
  79. package/dist/api/github-app.d.ts.map +0 -1
  80. package/dist/api/github-app.js +0 -223
  81. package/dist/api/github-app.js.map +0 -1
  82. package/dist/api/middleware/planLimits.d.ts +0 -43
  83. package/dist/api/middleware/planLimits.d.ts.map +0 -1
  84. package/dist/api/middleware/planLimits.js +0 -202
  85. package/dist/api/middleware/planLimits.js.map +0 -1
  86. package/dist/api/monitoring.d.ts +0 -11
  87. package/dist/api/monitoring.d.ts.map +0 -1
  88. package/dist/api/monitoring.js +0 -578
  89. package/dist/api/monitoring.js.map +0 -1
  90. package/dist/api/nango-auth.d.ts +0 -9
  91. package/dist/api/nango-auth.d.ts.map +0 -1
  92. package/dist/api/nango-auth.js +0 -741
  93. package/dist/api/nango-auth.js.map +0 -1
  94. package/dist/api/onboarding.d.ts +0 -15
  95. package/dist/api/onboarding.d.ts.map +0 -1
  96. package/dist/api/onboarding.js +0 -679
  97. package/dist/api/onboarding.js.map +0 -1
  98. package/dist/api/policy.d.ts +0 -8
  99. package/dist/api/policy.d.ts.map +0 -1
  100. package/dist/api/policy.js +0 -229
  101. package/dist/api/policy.js.map +0 -1
  102. package/dist/api/provider-env.d.ts +0 -26
  103. package/dist/api/provider-env.d.ts.map +0 -1
  104. package/dist/api/provider-env.js +0 -141
  105. package/dist/api/provider-env.js.map +0 -1
  106. package/dist/api/providers.d.ts +0 -7
  107. package/dist/api/providers.d.ts.map +0 -1
  108. package/dist/api/providers.js +0 -574
  109. package/dist/api/providers.js.map +0 -1
  110. package/dist/api/repos.d.ts +0 -8
  111. package/dist/api/repos.d.ts.map +0 -1
  112. package/dist/api/repos.js +0 -577
  113. package/dist/api/repos.js.map +0 -1
  114. package/dist/api/sessions.d.ts +0 -11
  115. package/dist/api/sessions.d.ts.map +0 -1
  116. package/dist/api/sessions.js +0 -302
  117. package/dist/api/sessions.js.map +0 -1
  118. package/dist/api/teams.d.ts +0 -7
  119. package/dist/api/teams.d.ts.map +0 -1
  120. package/dist/api/teams.js +0 -281
  121. package/dist/api/teams.js.map +0 -1
  122. package/dist/api/test-helpers.d.ts +0 -10
  123. package/dist/api/test-helpers.d.ts.map +0 -1
  124. package/dist/api/test-helpers.js +0 -745
  125. package/dist/api/test-helpers.js.map +0 -1
  126. package/dist/api/usage.d.ts +0 -7
  127. package/dist/api/usage.d.ts.map +0 -1
  128. package/dist/api/usage.js +0 -111
  129. package/dist/api/usage.js.map +0 -1
  130. package/dist/api/webhooks.d.ts +0 -8
  131. package/dist/api/webhooks.d.ts.map +0 -1
  132. package/dist/api/webhooks.js +0 -645
  133. package/dist/api/webhooks.js.map +0 -1
  134. package/dist/api/workspaces.d.ts +0 -25
  135. package/dist/api/workspaces.d.ts.map +0 -1
  136. package/dist/api/workspaces.js +0 -1799
  137. package/dist/api/workspaces.js.map +0 -1
  138. package/dist/billing/index.d.ts +0 -9
  139. package/dist/billing/index.d.ts.map +0 -1
  140. package/dist/billing/index.js +0 -9
  141. package/dist/billing/index.js.map +0 -1
  142. package/dist/billing/plans.d.ts +0 -39
  143. package/dist/billing/plans.d.ts.map +0 -1
  144. package/dist/billing/plans.js +0 -245
  145. package/dist/billing/plans.js.map +0 -1
  146. package/dist/billing/service.d.ts +0 -80
  147. package/dist/billing/service.d.ts.map +0 -1
  148. package/dist/billing/service.js +0 -388
  149. package/dist/billing/service.js.map +0 -1
  150. package/dist/billing/types.d.ts +0 -141
  151. package/dist/billing/types.d.ts.map +0 -1
  152. package/dist/billing/types.js +0 -7
  153. package/dist/billing/types.js.map +0 -1
  154. package/dist/config.d.ts +0 -5
  155. package/dist/config.d.ts.map +0 -1
  156. package/dist/config.js +0 -5
  157. package/dist/config.js.map +0 -1
  158. package/dist/db/bulk-ingest.d.ts +0 -89
  159. package/dist/db/bulk-ingest.d.ts.map +0 -1
  160. package/dist/db/bulk-ingest.js +0 -268
  161. package/dist/db/bulk-ingest.js.map +0 -1
  162. package/dist/db/drizzle.d.ts +0 -290
  163. package/dist/db/drizzle.d.ts.map +0 -1
  164. package/dist/db/drizzle.js +0 -1422
  165. package/dist/db/drizzle.js.map +0 -1
  166. package/dist/db/index.d.ts +0 -56
  167. package/dist/db/index.d.ts.map +0 -1
  168. package/dist/db/index.js +0 -70
  169. package/dist/db/index.js.map +0 -1
  170. package/dist/db/schema.d.ts +0 -5117
  171. package/dist/db/schema.d.ts.map +0 -1
  172. package/dist/db/schema.js +0 -656
  173. package/dist/db/schema.js.map +0 -1
  174. package/dist/provisioner/index.d.ts +0 -207
  175. package/dist/provisioner/index.d.ts.map +0 -1
  176. package/dist/provisioner/index.js +0 -2118
  177. package/dist/provisioner/index.js.map +0 -1
  178. package/dist/server.d.ts +0 -17
  179. package/dist/server.d.ts.map +0 -1
  180. package/dist/server.js +0 -2055
  181. package/dist/server.js.map +0 -1
  182. package/dist/services/auto-scaler.d.ts +0 -152
  183. package/dist/services/auto-scaler.d.ts.map +0 -1
  184. package/dist/services/auto-scaler.js +0 -439
  185. package/dist/services/auto-scaler.js.map +0 -1
  186. package/dist/services/capacity-manager.d.ts +0 -148
  187. package/dist/services/capacity-manager.d.ts.map +0 -1
  188. package/dist/services/capacity-manager.js +0 -449
  189. package/dist/services/capacity-manager.js.map +0 -1
  190. package/dist/services/ci-agent-spawner.d.ts +0 -49
  191. package/dist/services/ci-agent-spawner.d.ts.map +0 -1
  192. package/dist/services/ci-agent-spawner.js +0 -373
  193. package/dist/services/ci-agent-spawner.js.map +0 -1
  194. package/dist/services/cloud-message-bus.d.ts +0 -28
  195. package/dist/services/cloud-message-bus.d.ts.map +0 -1
  196. package/dist/services/cloud-message-bus.js +0 -19
  197. package/dist/services/cloud-message-bus.js.map +0 -1
  198. package/dist/services/compute-enforcement.d.ts +0 -57
  199. package/dist/services/compute-enforcement.d.ts.map +0 -1
  200. package/dist/services/compute-enforcement.js +0 -175
  201. package/dist/services/compute-enforcement.js.map +0 -1
  202. package/dist/services/coordinator.d.ts +0 -62
  203. package/dist/services/coordinator.d.ts.map +0 -1
  204. package/dist/services/coordinator.js +0 -389
  205. package/dist/services/coordinator.js.map +0 -1
  206. package/dist/services/index.d.ts +0 -17
  207. package/dist/services/index.d.ts.map +0 -1
  208. package/dist/services/index.js +0 -25
  209. package/dist/services/index.js.map +0 -1
  210. package/dist/services/intro-expiration.d.ts +0 -60
  211. package/dist/services/intro-expiration.d.ts.map +0 -1
  212. package/dist/services/intro-expiration.js +0 -252
  213. package/dist/services/intro-expiration.js.map +0 -1
  214. package/dist/services/mention-handler.d.ts +0 -65
  215. package/dist/services/mention-handler.d.ts.map +0 -1
  216. package/dist/services/mention-handler.js +0 -405
  217. package/dist/services/mention-handler.js.map +0 -1
  218. package/dist/services/nango.d.ts +0 -219
  219. package/dist/services/nango.d.ts.map +0 -1
  220. package/dist/services/nango.js +0 -424
  221. package/dist/services/nango.js.map +0 -1
  222. package/dist/services/persistence.d.ts +0 -131
  223. package/dist/services/persistence.d.ts.map +0 -1
  224. package/dist/services/persistence.js +0 -200
  225. package/dist/services/persistence.js.map +0 -1
  226. package/dist/services/planLimits.d.ts +0 -147
  227. package/dist/services/planLimits.d.ts.map +0 -1
  228. package/dist/services/planLimits.js +0 -335
  229. package/dist/services/planLimits.js.map +0 -1
  230. package/dist/services/presence-registry.d.ts +0 -56
  231. package/dist/services/presence-registry.d.ts.map +0 -1
  232. package/dist/services/presence-registry.js +0 -91
  233. package/dist/services/presence-registry.js.map +0 -1
  234. package/dist/services/scaling-orchestrator.d.ts +0 -159
  235. package/dist/services/scaling-orchestrator.d.ts.map +0 -1
  236. package/dist/services/scaling-orchestrator.js +0 -502
  237. package/dist/services/scaling-orchestrator.js.map +0 -1
  238. package/dist/services/scaling-policy.d.ts +0 -121
  239. package/dist/services/scaling-policy.d.ts.map +0 -1
  240. package/dist/services/scaling-policy.js +0 -415
  241. package/dist/services/scaling-policy.js.map +0 -1
  242. package/dist/services/ssh-security.d.ts +0 -31
  243. package/dist/services/ssh-security.d.ts.map +0 -1
  244. package/dist/services/ssh-security.js +0 -63
  245. package/dist/services/ssh-security.js.map +0 -1
  246. package/dist/services/workspace-keepalive.d.ts +0 -76
  247. package/dist/services/workspace-keepalive.d.ts.map +0 -1
  248. package/dist/services/workspace-keepalive.js +0 -234
  249. package/dist/services/workspace-keepalive.js.map +0 -1
  250. package/dist/shims/consensus.d.ts +0 -23
  251. package/dist/shims/consensus.d.ts.map +0 -1
  252. package/dist/shims/consensus.js +0 -5
  253. package/dist/shims/consensus.js.map +0 -1
  254. package/dist/webhooks/index.d.ts +0 -24
  255. package/dist/webhooks/index.d.ts.map +0 -1
  256. package/dist/webhooks/index.js +0 -29
  257. package/dist/webhooks/index.js.map +0 -1
  258. package/dist/webhooks/parsers/github.d.ts +0 -8
  259. package/dist/webhooks/parsers/github.d.ts.map +0 -1
  260. package/dist/webhooks/parsers/github.js +0 -234
  261. package/dist/webhooks/parsers/github.js.map +0 -1
  262. package/dist/webhooks/parsers/index.d.ts +0 -23
  263. package/dist/webhooks/parsers/index.d.ts.map +0 -1
  264. package/dist/webhooks/parsers/index.js +0 -30
  265. package/dist/webhooks/parsers/index.js.map +0 -1
  266. package/dist/webhooks/parsers/linear.d.ts +0 -9
  267. package/dist/webhooks/parsers/linear.d.ts.map +0 -1
  268. package/dist/webhooks/parsers/linear.js +0 -258
  269. package/dist/webhooks/parsers/linear.js.map +0 -1
  270. package/dist/webhooks/parsers/slack.d.ts +0 -9
  271. package/dist/webhooks/parsers/slack.d.ts.map +0 -1
  272. package/dist/webhooks/parsers/slack.js +0 -214
  273. package/dist/webhooks/parsers/slack.js.map +0 -1
  274. package/dist/webhooks/responders/github.d.ts +0 -8
  275. package/dist/webhooks/responders/github.d.ts.map +0 -1
  276. package/dist/webhooks/responders/github.js +0 -73
  277. package/dist/webhooks/responders/github.js.map +0 -1
  278. package/dist/webhooks/responders/index.d.ts +0 -23
  279. package/dist/webhooks/responders/index.d.ts.map +0 -1
  280. package/dist/webhooks/responders/index.js +0 -30
  281. package/dist/webhooks/responders/index.js.map +0 -1
  282. package/dist/webhooks/responders/linear.d.ts +0 -9
  283. package/dist/webhooks/responders/linear.d.ts.map +0 -1
  284. package/dist/webhooks/responders/linear.js +0 -149
  285. package/dist/webhooks/responders/linear.js.map +0 -1
  286. package/dist/webhooks/responders/slack.d.ts +0 -20
  287. package/dist/webhooks/responders/slack.d.ts.map +0 -1
  288. package/dist/webhooks/responders/slack.js +0 -178
  289. package/dist/webhooks/responders/slack.js.map +0 -1
  290. package/dist/webhooks/router.d.ts +0 -25
  291. package/dist/webhooks/router.d.ts.map +0 -1
  292. package/dist/webhooks/router.js +0 -504
  293. package/dist/webhooks/router.js.map +0 -1
  294. package/dist/webhooks/rules-engine.d.ts +0 -24
  295. package/dist/webhooks/rules-engine.d.ts.map +0 -1
  296. package/dist/webhooks/rules-engine.js +0 -287
  297. package/dist/webhooks/rules-engine.js.map +0 -1
  298. package/dist/webhooks/types.d.ts +0 -186
  299. package/dist/webhooks/types.d.ts.map +0 -1
  300. package/dist/webhooks/types.js +0 -8
  301. package/dist/webhooks/types.js.map +0 -1
@@ -1,347 +0,0 @@
1
- /**
2
- * Email Auth API Routes
3
- *
4
- * Handles email/password authentication:
5
- * - Signup with email/password
6
- * - Login with email/password
7
- * - Email verification
8
- * - Password reset (future)
9
- */
10
- import { Router } from 'express';
11
- import { randomBytes, scrypt, timingSafeEqual } from 'node:crypto';
12
- import { promisify } from 'node:util';
13
- import { db } from '../db/index.js';
14
- import { requireAuth } from './auth.js';
15
- const scryptAsync = promisify(scrypt);
16
- export const emailAuthRouter = Router();
17
- // Password hashing configuration
18
- const SALT_LENGTH = 32;
19
- const KEY_LENGTH = 64;
20
- /**
21
- * Hash a password using scrypt
22
- */
23
- async function hashPassword(password) {
24
- const salt = randomBytes(SALT_LENGTH);
25
- const derivedKey = await scryptAsync(password, salt, KEY_LENGTH);
26
- return `${salt.toString('hex')}:${derivedKey.toString('hex')}`;
27
- }
28
- /**
29
- * Verify a password against a hash
30
- */
31
- async function verifyPassword(password, storedHash) {
32
- try {
33
- const [saltHex, keyHex] = storedHash.split(':');
34
- if (!saltHex || !keyHex)
35
- return false;
36
- const salt = Buffer.from(saltHex, 'hex');
37
- const storedKey = Buffer.from(keyHex, 'hex');
38
- const derivedKey = await scryptAsync(password, salt, KEY_LENGTH);
39
- return timingSafeEqual(storedKey, derivedKey);
40
- }
41
- catch {
42
- return false;
43
- }
44
- }
45
- /**
46
- * Generate a random verification token
47
- */
48
- function generateVerificationToken() {
49
- return randomBytes(32).toString('hex');
50
- }
51
- /**
52
- * Validate email format
53
- */
54
- function isValidEmail(email) {
55
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
56
- return emailRegex.test(email);
57
- }
58
- /**
59
- * Validate password strength
60
- */
61
- function isValidPassword(password) {
62
- if (password.length < 8) {
63
- return { valid: false, message: 'Password must be at least 8 characters long' };
64
- }
65
- if (password.length > 128) {
66
- return { valid: false, message: 'Password must be less than 128 characters' };
67
- }
68
- return { valid: true };
69
- }
70
- /**
71
- * POST /api/auth/email/signup
72
- * Create a new account with email/password
73
- */
74
- emailAuthRouter.post('/signup', async (req, res) => {
75
- try {
76
- const { email, password, displayName } = req.body;
77
- // Validate input
78
- if (!email || typeof email !== 'string') {
79
- return res.status(400).json({ error: 'Email is required' });
80
- }
81
- if (!password || typeof password !== 'string') {
82
- return res.status(400).json({ error: 'Password is required' });
83
- }
84
- const normalizedEmail = email.toLowerCase().trim();
85
- if (!isValidEmail(normalizedEmail)) {
86
- return res.status(400).json({ error: 'Invalid email format' });
87
- }
88
- const passwordValidation = isValidPassword(password);
89
- if (!passwordValidation.valid) {
90
- return res.status(400).json({ error: passwordValidation.message });
91
- }
92
- // Check if email already exists (in users.email or user_emails table)
93
- // This enables account reconciliation - if someone signed up via GitHub,
94
- // their linked emails will be found and they should log in instead
95
- const existingUser = await db.userEmails.findUserByEmail(normalizedEmail);
96
- if (existingUser) {
97
- // If the existing user signed up via GitHub, offer to use that account
98
- if (existingUser.githubId && !existingUser.passwordHash) {
99
- return res.status(409).json({
100
- error: 'This email is associated with a GitHub account. Please log in with GitHub, or set a password on that account.',
101
- code: 'GITHUB_ACCOUNT_EXISTS',
102
- });
103
- }
104
- return res.status(409).json({ error: 'An account with this email already exists' });
105
- }
106
- // Hash password and create user
107
- const passwordHash = await hashPassword(password);
108
- const user = await db.users.createEmailUser({
109
- email: normalizedEmail,
110
- passwordHash,
111
- displayName: displayName?.trim() || undefined,
112
- });
113
- // Generate verification token
114
- const verificationToken = generateVerificationToken();
115
- const verificationExpires = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 hours
116
- await db.users.setEmailVerificationToken(user.id, verificationToken, verificationExpires);
117
- // TODO: Send verification email
118
- // For now, we'll auto-verify in development or skip email verification
119
- // In production, you would send an email with a link containing the token
120
- // Set session
121
- req.session.userId = user.id;
122
- res.status(201).json({
123
- success: true,
124
- user: {
125
- id: user.id,
126
- email: user.email,
127
- displayName: user.displayName,
128
- emailVerified: user.emailVerified,
129
- },
130
- // Include verification token in development for testing
131
- ...(process.env.NODE_ENV !== 'production' && { verificationToken }),
132
- });
133
- }
134
- catch (error) {
135
- console.error('Email signup error:', error);
136
- res.status(500).json({ error: 'Failed to create account' });
137
- }
138
- });
139
- /**
140
- * POST /api/auth/email/login
141
- * Login with email/password
142
- *
143
- * Supports account reconciliation: users can log in with any email address
144
- * linked to their account via GitHub, not just their primary email.
145
- */
146
- emailAuthRouter.post('/login', async (req, res) => {
147
- try {
148
- const { email, password } = req.body;
149
- // Validate input
150
- if (!email || typeof email !== 'string') {
151
- return res.status(400).json({ error: 'Email is required' });
152
- }
153
- if (!password || typeof password !== 'string') {
154
- return res.status(400).json({ error: 'Password is required' });
155
- }
156
- const normalizedEmail = email.toLowerCase().trim();
157
- // Find user by email - checks both user_emails table (GitHub-linked emails)
158
- // and users.email (primary email), enabling account reconciliation
159
- const user = await db.userEmails.findUserByEmail(normalizedEmail);
160
- if (!user) {
161
- // Use same message for security (don't reveal if email exists)
162
- return res.status(401).json({ error: 'Invalid email or password' });
163
- }
164
- // Check if user has a password (might be GitHub-only user)
165
- if (!user.passwordHash) {
166
- return res.status(401).json({
167
- error: 'This account uses GitHub login. Please sign in with GitHub, or set a password to enable email login.',
168
- code: 'GITHUB_ACCOUNT',
169
- });
170
- }
171
- // Verify password
172
- const isValid = await verifyPassword(password, user.passwordHash);
173
- if (!isValid) {
174
- return res.status(401).json({ error: 'Invalid email or password' });
175
- }
176
- // Set session
177
- req.session.userId = user.id;
178
- res.json({
179
- success: true,
180
- user: {
181
- id: user.id,
182
- email: user.email,
183
- displayName: user.displayName,
184
- githubUsername: user.githubUsername,
185
- avatarUrl: user.avatarUrl,
186
- emailVerified: user.emailVerified,
187
- },
188
- });
189
- }
190
- catch (error) {
191
- console.error('Email login error:', error);
192
- res.status(500).json({ error: 'Failed to login' });
193
- }
194
- });
195
- /**
196
- * POST /api/auth/email/verify
197
- * Verify email with token
198
- */
199
- emailAuthRouter.post('/verify', async (req, res) => {
200
- try {
201
- const { token } = req.body;
202
- if (!token || typeof token !== 'string') {
203
- return res.status(400).json({ error: 'Verification token is required' });
204
- }
205
- // Find user by token
206
- const user = await db.users.findByEmailVerificationToken(token);
207
- if (!user) {
208
- return res.status(400).json({ error: 'Invalid or expired verification token' });
209
- }
210
- // Check if token expired
211
- if (user.emailVerificationExpires && user.emailVerificationExpires < new Date()) {
212
- return res.status(400).json({ error: 'Verification token has expired' });
213
- }
214
- // Verify email
215
- await db.users.verifyEmail(user.id);
216
- res.json({
217
- success: true,
218
- message: 'Email verified successfully',
219
- });
220
- }
221
- catch (error) {
222
- console.error('Email verification error:', error);
223
- res.status(500).json({ error: 'Failed to verify email' });
224
- }
225
- });
226
- /**
227
- * POST /api/auth/email/resend-verification
228
- * Resend verification email (requires auth)
229
- */
230
- emailAuthRouter.post('/resend-verification', requireAuth, async (req, res) => {
231
- try {
232
- const userId = req.session.userId;
233
- const user = await db.users.findById(userId);
234
- if (!user) {
235
- return res.status(404).json({ error: 'User not found' });
236
- }
237
- if (user.emailVerified) {
238
- return res.status(400).json({ error: 'Email is already verified' });
239
- }
240
- if (!user.email) {
241
- return res.status(400).json({ error: 'No email address on this account' });
242
- }
243
- // Generate new verification token
244
- const verificationToken = generateVerificationToken();
245
- const verificationExpires = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 hours
246
- await db.users.setEmailVerificationToken(user.id, verificationToken, verificationExpires);
247
- // TODO: Send verification email
248
- // For now, return success and include token in development
249
- res.json({
250
- success: true,
251
- message: 'Verification email sent',
252
- ...(process.env.NODE_ENV !== 'production' && { verificationToken }),
253
- });
254
- }
255
- catch (error) {
256
- console.error('Resend verification error:', error);
257
- res.status(500).json({ error: 'Failed to resend verification email' });
258
- }
259
- });
260
- /**
261
- * POST /api/auth/set-email
262
- * Set email for GitHub users who don't have one (requires auth)
263
- */
264
- emailAuthRouter.post('/set-email', requireAuth, async (req, res) => {
265
- try {
266
- const userId = req.session.userId;
267
- const { email } = req.body;
268
- if (!email || typeof email !== 'string') {
269
- return res.status(400).json({ error: 'Email is required' });
270
- }
271
- const normalizedEmail = email.toLowerCase().trim();
272
- if (!isValidEmail(normalizedEmail)) {
273
- return res.status(400).json({ error: 'Invalid email format' });
274
- }
275
- const user = await db.users.findById(userId);
276
- if (!user) {
277
- return res.status(404).json({ error: 'User not found' });
278
- }
279
- // Check if user already has an email
280
- if (user.email) {
281
- return res.status(400).json({ error: 'Email is already set for this account' });
282
- }
283
- // Check if email is already used by another user (including in user_emails table)
284
- const isLinkedToOther = await db.userEmails.isEmailLinkedToOtherUser(normalizedEmail, userId);
285
- if (isLinkedToOther) {
286
- return res.status(409).json({ error: 'This email is already associated with another account' });
287
- }
288
- // Also check users.email directly
289
- const existingUser = await db.users.findByEmail(normalizedEmail);
290
- if (existingUser && existingUser.id !== userId) {
291
- return res.status(409).json({ error: 'This email is already associated with another account' });
292
- }
293
- // Update user with email
294
- await db.users.update(userId, { email: normalizedEmail });
295
- // Generate verification token
296
- const verificationToken = generateVerificationToken();
297
- const verificationExpires = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 hours
298
- await db.users.setEmailVerificationToken(userId, verificationToken, verificationExpires);
299
- // TODO: Send verification email
300
- res.json({
301
- success: true,
302
- message: 'Email set successfully',
303
- email: normalizedEmail,
304
- ...(process.env.NODE_ENV !== 'production' && { verificationToken }),
305
- });
306
- }
307
- catch (error) {
308
- console.error('Set email error:', error);
309
- res.status(500).json({ error: 'Failed to set email' });
310
- }
311
- });
312
- /**
313
- * POST /api/auth/email/set-password
314
- * Set password for GitHub users who want to add email login (requires auth)
315
- */
316
- emailAuthRouter.post('/set-password', requireAuth, async (req, res) => {
317
- try {
318
- const userId = req.session.userId;
319
- const { password } = req.body;
320
- if (!password || typeof password !== 'string') {
321
- return res.status(400).json({ error: 'Password is required' });
322
- }
323
- const passwordValidation = isValidPassword(password);
324
- if (!passwordValidation.valid) {
325
- return res.status(400).json({ error: passwordValidation.message });
326
- }
327
- const user = await db.users.findById(userId);
328
- if (!user) {
329
- return res.status(404).json({ error: 'User not found' });
330
- }
331
- if (!user.email) {
332
- return res.status(400).json({ error: 'Please set an email address first' });
333
- }
334
- // Hash password and update user
335
- const passwordHash = await hashPassword(password);
336
- await db.users.updatePassword(userId, passwordHash);
337
- res.json({
338
- success: true,
339
- message: 'Password set successfully',
340
- });
341
- }
342
- catch (error) {
343
- console.error('Set password error:', error);
344
- res.status(500).json({ error: 'Failed to set password' });
345
- }
346
- });
347
- //# sourceMappingURL=email-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email-auth.js","sourceRoot":"","sources":["../../src/api/email-auth.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Generic Webhooks API Routes
3
- *
4
- * Provides endpoints for receiving webhooks from any configured source.
5
- * Routes: POST /api/webhooks/:source
6
- */
7
- export declare const genericWebhooksRouter: import("express-serve-static-core").Router;
8
- //# sourceMappingURL=generic-webhooks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generic-webhooks.d.ts","sourceRoot":"","sources":["../../src/api/generic-webhooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,eAAO,MAAM,qBAAqB,4CAAW,CAAC"}
@@ -1,129 +0,0 @@
1
- /**
2
- * Generic Webhooks API Routes
3
- *
4
- * Provides endpoints for receiving webhooks from any configured source.
5
- * Routes: POST /api/webhooks/:source
6
- */
7
- import { Router } from 'express';
8
- import { processWebhook, getWebhookConfig } from '../webhooks/index.js';
9
- export const genericWebhooksRouter = Router();
10
- /**
11
- * POST /api/webhooks/:source
12
- * Receive a webhook from any configured source
13
- */
14
- genericWebhooksRouter.post('/:source', async (req, res) => {
15
- const source = req.params.source;
16
- // For Slack URL verification challenge
17
- if (source === 'slack' && req.body?.type === 'url_verification') {
18
- return res.json({ challenge: req.body.challenge });
19
- }
20
- try {
21
- // Get raw body for signature verification
22
- // Note: This requires express.raw() middleware or similar
23
- const rawBody = typeof req.body === 'string'
24
- ? req.body
25
- : JSON.stringify(req.body);
26
- const result = await processWebhook(source, rawBody, req.headers);
27
- if (!result.success && result.responses[0]?.error === 'Invalid signature') {
28
- return res.status(401).json({ error: 'Invalid signature' });
29
- }
30
- if (!result.success && result.responses[0]?.error?.includes('Unknown webhook source')) {
31
- return res.status(404).json({ error: `Unknown webhook source: ${source}` });
32
- }
33
- console.log(`[webhooks] Processed ${source} webhook: ${result.eventType} (${result.matchedRules.length} rules matched)`);
34
- res.json({
35
- success: result.success,
36
- eventId: result.eventId,
37
- eventType: result.eventType,
38
- matchedRules: result.matchedRules,
39
- actionsExecuted: result.actions.length,
40
- });
41
- }
42
- catch (error) {
43
- console.error(`[webhooks] Error processing ${source} webhook:`, error);
44
- res.status(500).json({
45
- error: error instanceof Error ? error.message : 'Unknown error',
46
- });
47
- }
48
- });
49
- /**
50
- * GET /api/webhooks/config
51
- * Get the current webhook configuration (for debugging)
52
- */
53
- genericWebhooksRouter.get('/config', (_req, res) => {
54
- const config = getWebhookConfig();
55
- res.json({
56
- sources: Object.entries(config.sources).map(([id, source]) => ({
57
- id,
58
- name: source.name,
59
- enabled: source.enabled,
60
- parser: source.parser,
61
- responder: source.responder,
62
- })),
63
- rules: config.rules.map(rule => ({
64
- id: rule.id,
65
- name: rule.name,
66
- enabled: rule.enabled,
67
- source: rule.source,
68
- eventType: rule.eventType,
69
- condition: rule.condition,
70
- actionType: rule.action.type,
71
- priority: rule.priority,
72
- })),
73
- });
74
- });
75
- /**
76
- * GET /api/webhooks/sources
77
- * List available webhook sources with their setup instructions
78
- */
79
- genericWebhooksRouter.get('/sources', (_req, res) => {
80
- const baseUrl = process.env.PUBLIC_URL || 'https://your-domain.com';
81
- res.json({
82
- sources: [
83
- {
84
- id: 'github',
85
- name: 'GitHub',
86
- webhookUrl: `${baseUrl}/api/webhooks/github`,
87
- setupInstructions: [
88
- '1. Go to your repository Settings > Webhooks > Add webhook',
89
- `2. Set Payload URL to: ${baseUrl}/api/webhooks/github`,
90
- '3. Set Content type to: application/json',
91
- '4. Set Secret to your GITHUB_WEBHOOK_SECRET value',
92
- '5. Select events: Check runs, Issues, Issue comments, Pull request review comments',
93
- ],
94
- requiredEnvVars: ['GITHUB_WEBHOOK_SECRET'],
95
- events: ['check_run', 'issues', 'issue_comment', 'pull_request_review_comment'],
96
- },
97
- {
98
- id: 'linear',
99
- name: 'Linear',
100
- webhookUrl: `${baseUrl}/api/webhooks/linear`,
101
- setupInstructions: [
102
- '1. Go to Linear Settings > API > Webhooks',
103
- '2. Create a new webhook',
104
- `3. Set URL to: ${baseUrl}/api/webhooks/linear`,
105
- '4. Copy the signing secret to LINEAR_WEBHOOK_SECRET',
106
- '5. Select events: Issues, Comments',
107
- ],
108
- requiredEnvVars: ['LINEAR_WEBHOOK_SECRET', 'LINEAR_API_KEY'],
109
- events: ['Issue', 'Comment', 'IssueLabel'],
110
- },
111
- {
112
- id: 'slack',
113
- name: 'Slack',
114
- webhookUrl: `${baseUrl}/api/webhooks/slack`,
115
- setupInstructions: [
116
- '1. Create a Slack App at api.slack.com/apps',
117
- '2. Enable Event Subscriptions',
118
- `3. Set Request URL to: ${baseUrl}/api/webhooks/slack`,
119
- '4. Subscribe to bot events: app_mention, message.channels',
120
- '5. Copy Signing Secret to SLACK_SIGNING_SECRET',
121
- '6. Install the app to your workspace',
122
- ],
123
- requiredEnvVars: ['SLACK_SIGNING_SECRET', 'SLACK_BOT_TOKEN'],
124
- events: ['app_mention', 'message', 'reaction_added'],
125
- },
126
- ],
127
- });
128
- });
129
- //# sourceMappingURL=generic-webhooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generic-webhooks.js","sourceRoot":"","sources":["../../src/api/generic-webhooks.ts"],"names":[],"mappings":"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"}
package/dist/api/git.d.ts DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * Git Gateway API Routes
3
- *
4
- * Provides fresh GitHub tokens to workspace containers for git operations.
5
- * This gateway pattern ensures tokens are always valid (Nango handles refresh).
6
- */
7
- export declare const gitRouter: import("express-serve-static-core").Router;
8
- //# sourceMappingURL=git.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/api/git.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,eAAO,MAAM,SAAS,4CAAW,CAAC"}