@agent-relay/cloud 2.0.22 → 6.0.2

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 (289) 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/index.d.ts +4 -10
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +4 -37
  12. package/dist/index.js.map +1 -1
  13. package/dist/types.d.ts +73 -0
  14. package/dist/types.d.ts.map +1 -0
  15. package/dist/types.js +12 -0
  16. package/dist/types.js.map +1 -0
  17. package/dist/workflows.d.ts +46 -0
  18. package/dist/workflows.d.ts.map +1 -0
  19. package/dist/workflows.js +464 -0
  20. package/dist/workflows.js.map +1 -0
  21. package/package.json +8 -25
  22. package/dist/api/admin.d.ts +0 -8
  23. package/dist/api/admin.d.ts.map +0 -1
  24. package/dist/api/admin.js +0 -225
  25. package/dist/api/admin.js.map +0 -1
  26. package/dist/api/auth.d.ts +0 -20
  27. package/dist/api/auth.d.ts.map +0 -1
  28. package/dist/api/auth.js +0 -138
  29. package/dist/api/auth.js.map +0 -1
  30. package/dist/api/billing.d.ts +0 -7
  31. package/dist/api/billing.d.ts.map +0 -1
  32. package/dist/api/billing.js +0 -564
  33. package/dist/api/billing.js.map +0 -1
  34. package/dist/api/cli-pty-runner.d.ts +0 -53
  35. package/dist/api/cli-pty-runner.d.ts.map +0 -1
  36. package/dist/api/cli-pty-runner.js +0 -175
  37. package/dist/api/cli-pty-runner.js.map +0 -1
  38. package/dist/api/codex-auth-helper.d.ts +0 -21
  39. package/dist/api/codex-auth-helper.d.ts.map +0 -1
  40. package/dist/api/codex-auth-helper.js +0 -327
  41. package/dist/api/codex-auth-helper.js.map +0 -1
  42. package/dist/api/consensus.d.ts +0 -13
  43. package/dist/api/consensus.d.ts.map +0 -1
  44. package/dist/api/consensus.js +0 -261
  45. package/dist/api/consensus.js.map +0 -1
  46. package/dist/api/coordinators.d.ts +0 -8
  47. package/dist/api/coordinators.d.ts.map +0 -1
  48. package/dist/api/coordinators.js +0 -750
  49. package/dist/api/coordinators.js.map +0 -1
  50. package/dist/api/daemons.d.ts +0 -12
  51. package/dist/api/daemons.d.ts.map +0 -1
  52. package/dist/api/daemons.js +0 -535
  53. package/dist/api/daemons.js.map +0 -1
  54. package/dist/api/email-auth.d.ts +0 -11
  55. package/dist/api/email-auth.d.ts.map +0 -1
  56. package/dist/api/email-auth.js +0 -347
  57. package/dist/api/email-auth.js.map +0 -1
  58. package/dist/api/generic-webhooks.d.ts +0 -8
  59. package/dist/api/generic-webhooks.d.ts.map +0 -1
  60. package/dist/api/generic-webhooks.js +0 -129
  61. package/dist/api/generic-webhooks.js.map +0 -1
  62. package/dist/api/git.d.ts +0 -8
  63. package/dist/api/git.d.ts.map +0 -1
  64. package/dist/api/git.js +0 -269
  65. package/dist/api/git.js.map +0 -1
  66. package/dist/api/github-app.d.ts +0 -11
  67. package/dist/api/github-app.d.ts.map +0 -1
  68. package/dist/api/github-app.js +0 -223
  69. package/dist/api/github-app.js.map +0 -1
  70. package/dist/api/middleware/planLimits.d.ts +0 -43
  71. package/dist/api/middleware/planLimits.d.ts.map +0 -1
  72. package/dist/api/middleware/planLimits.js +0 -202
  73. package/dist/api/middleware/planLimits.js.map +0 -1
  74. package/dist/api/monitoring.d.ts +0 -11
  75. package/dist/api/monitoring.d.ts.map +0 -1
  76. package/dist/api/monitoring.js +0 -578
  77. package/dist/api/monitoring.js.map +0 -1
  78. package/dist/api/nango-auth.d.ts +0 -9
  79. package/dist/api/nango-auth.d.ts.map +0 -1
  80. package/dist/api/nango-auth.js +0 -741
  81. package/dist/api/nango-auth.js.map +0 -1
  82. package/dist/api/onboarding.d.ts +0 -15
  83. package/dist/api/onboarding.d.ts.map +0 -1
  84. package/dist/api/onboarding.js +0 -679
  85. package/dist/api/onboarding.js.map +0 -1
  86. package/dist/api/policy.d.ts +0 -8
  87. package/dist/api/policy.d.ts.map +0 -1
  88. package/dist/api/policy.js +0 -229
  89. package/dist/api/policy.js.map +0 -1
  90. package/dist/api/provider-env.d.ts +0 -26
  91. package/dist/api/provider-env.d.ts.map +0 -1
  92. package/dist/api/provider-env.js +0 -141
  93. package/dist/api/provider-env.js.map +0 -1
  94. package/dist/api/providers.d.ts +0 -7
  95. package/dist/api/providers.d.ts.map +0 -1
  96. package/dist/api/providers.js +0 -574
  97. package/dist/api/providers.js.map +0 -1
  98. package/dist/api/repos.d.ts +0 -8
  99. package/dist/api/repos.d.ts.map +0 -1
  100. package/dist/api/repos.js +0 -577
  101. package/dist/api/repos.js.map +0 -1
  102. package/dist/api/sessions.d.ts +0 -11
  103. package/dist/api/sessions.d.ts.map +0 -1
  104. package/dist/api/sessions.js +0 -302
  105. package/dist/api/sessions.js.map +0 -1
  106. package/dist/api/teams.d.ts +0 -7
  107. package/dist/api/teams.d.ts.map +0 -1
  108. package/dist/api/teams.js +0 -281
  109. package/dist/api/teams.js.map +0 -1
  110. package/dist/api/test-helpers.d.ts +0 -10
  111. package/dist/api/test-helpers.d.ts.map +0 -1
  112. package/dist/api/test-helpers.js +0 -745
  113. package/dist/api/test-helpers.js.map +0 -1
  114. package/dist/api/usage.d.ts +0 -7
  115. package/dist/api/usage.d.ts.map +0 -1
  116. package/dist/api/usage.js +0 -111
  117. package/dist/api/usage.js.map +0 -1
  118. package/dist/api/webhooks.d.ts +0 -8
  119. package/dist/api/webhooks.d.ts.map +0 -1
  120. package/dist/api/webhooks.js +0 -645
  121. package/dist/api/webhooks.js.map +0 -1
  122. package/dist/api/workspaces.d.ts +0 -25
  123. package/dist/api/workspaces.d.ts.map +0 -1
  124. package/dist/api/workspaces.js +0 -1799
  125. package/dist/api/workspaces.js.map +0 -1
  126. package/dist/billing/index.d.ts +0 -9
  127. package/dist/billing/index.d.ts.map +0 -1
  128. package/dist/billing/index.js +0 -9
  129. package/dist/billing/index.js.map +0 -1
  130. package/dist/billing/plans.d.ts +0 -39
  131. package/dist/billing/plans.d.ts.map +0 -1
  132. package/dist/billing/plans.js +0 -245
  133. package/dist/billing/plans.js.map +0 -1
  134. package/dist/billing/service.d.ts +0 -80
  135. package/dist/billing/service.d.ts.map +0 -1
  136. package/dist/billing/service.js +0 -388
  137. package/dist/billing/service.js.map +0 -1
  138. package/dist/billing/types.d.ts +0 -141
  139. package/dist/billing/types.d.ts.map +0 -1
  140. package/dist/billing/types.js +0 -7
  141. package/dist/billing/types.js.map +0 -1
  142. package/dist/config.d.ts +0 -5
  143. package/dist/config.d.ts.map +0 -1
  144. package/dist/config.js +0 -5
  145. package/dist/config.js.map +0 -1
  146. package/dist/db/bulk-ingest.d.ts +0 -89
  147. package/dist/db/bulk-ingest.d.ts.map +0 -1
  148. package/dist/db/bulk-ingest.js +0 -268
  149. package/dist/db/bulk-ingest.js.map +0 -1
  150. package/dist/db/drizzle.d.ts +0 -290
  151. package/dist/db/drizzle.d.ts.map +0 -1
  152. package/dist/db/drizzle.js +0 -1422
  153. package/dist/db/drizzle.js.map +0 -1
  154. package/dist/db/index.d.ts +0 -56
  155. package/dist/db/index.d.ts.map +0 -1
  156. package/dist/db/index.js +0 -70
  157. package/dist/db/index.js.map +0 -1
  158. package/dist/db/schema.d.ts +0 -5117
  159. package/dist/db/schema.d.ts.map +0 -1
  160. package/dist/db/schema.js +0 -656
  161. package/dist/db/schema.js.map +0 -1
  162. package/dist/provisioner/index.d.ts +0 -207
  163. package/dist/provisioner/index.d.ts.map +0 -1
  164. package/dist/provisioner/index.js +0 -2118
  165. package/dist/provisioner/index.js.map +0 -1
  166. package/dist/server.d.ts +0 -17
  167. package/dist/server.d.ts.map +0 -1
  168. package/dist/server.js +0 -2034
  169. package/dist/server.js.map +0 -1
  170. package/dist/services/auto-scaler.d.ts +0 -152
  171. package/dist/services/auto-scaler.d.ts.map +0 -1
  172. package/dist/services/auto-scaler.js +0 -439
  173. package/dist/services/auto-scaler.js.map +0 -1
  174. package/dist/services/capacity-manager.d.ts +0 -148
  175. package/dist/services/capacity-manager.d.ts.map +0 -1
  176. package/dist/services/capacity-manager.js +0 -449
  177. package/dist/services/capacity-manager.js.map +0 -1
  178. package/dist/services/ci-agent-spawner.d.ts +0 -49
  179. package/dist/services/ci-agent-spawner.d.ts.map +0 -1
  180. package/dist/services/ci-agent-spawner.js +0 -373
  181. package/dist/services/ci-agent-spawner.js.map +0 -1
  182. package/dist/services/cloud-message-bus.d.ts +0 -28
  183. package/dist/services/cloud-message-bus.d.ts.map +0 -1
  184. package/dist/services/cloud-message-bus.js +0 -19
  185. package/dist/services/cloud-message-bus.js.map +0 -1
  186. package/dist/services/compute-enforcement.d.ts +0 -57
  187. package/dist/services/compute-enforcement.d.ts.map +0 -1
  188. package/dist/services/compute-enforcement.js +0 -175
  189. package/dist/services/compute-enforcement.js.map +0 -1
  190. package/dist/services/coordinator.d.ts +0 -62
  191. package/dist/services/coordinator.d.ts.map +0 -1
  192. package/dist/services/coordinator.js +0 -389
  193. package/dist/services/coordinator.js.map +0 -1
  194. package/dist/services/index.d.ts +0 -17
  195. package/dist/services/index.d.ts.map +0 -1
  196. package/dist/services/index.js +0 -25
  197. package/dist/services/index.js.map +0 -1
  198. package/dist/services/intro-expiration.d.ts +0 -60
  199. package/dist/services/intro-expiration.d.ts.map +0 -1
  200. package/dist/services/intro-expiration.js +0 -252
  201. package/dist/services/intro-expiration.js.map +0 -1
  202. package/dist/services/mention-handler.d.ts +0 -65
  203. package/dist/services/mention-handler.d.ts.map +0 -1
  204. package/dist/services/mention-handler.js +0 -405
  205. package/dist/services/mention-handler.js.map +0 -1
  206. package/dist/services/nango.d.ts +0 -219
  207. package/dist/services/nango.d.ts.map +0 -1
  208. package/dist/services/nango.js +0 -424
  209. package/dist/services/nango.js.map +0 -1
  210. package/dist/services/persistence.d.ts +0 -131
  211. package/dist/services/persistence.d.ts.map +0 -1
  212. package/dist/services/persistence.js +0 -200
  213. package/dist/services/persistence.js.map +0 -1
  214. package/dist/services/planLimits.d.ts +0 -147
  215. package/dist/services/planLimits.d.ts.map +0 -1
  216. package/dist/services/planLimits.js +0 -335
  217. package/dist/services/planLimits.js.map +0 -1
  218. package/dist/services/presence-registry.d.ts +0 -56
  219. package/dist/services/presence-registry.d.ts.map +0 -1
  220. package/dist/services/presence-registry.js +0 -91
  221. package/dist/services/presence-registry.js.map +0 -1
  222. package/dist/services/scaling-orchestrator.d.ts +0 -159
  223. package/dist/services/scaling-orchestrator.d.ts.map +0 -1
  224. package/dist/services/scaling-orchestrator.js +0 -502
  225. package/dist/services/scaling-orchestrator.js.map +0 -1
  226. package/dist/services/scaling-policy.d.ts +0 -121
  227. package/dist/services/scaling-policy.d.ts.map +0 -1
  228. package/dist/services/scaling-policy.js +0 -415
  229. package/dist/services/scaling-policy.js.map +0 -1
  230. package/dist/services/ssh-security.d.ts +0 -31
  231. package/dist/services/ssh-security.d.ts.map +0 -1
  232. package/dist/services/ssh-security.js +0 -63
  233. package/dist/services/ssh-security.js.map +0 -1
  234. package/dist/services/workspace-keepalive.d.ts +0 -76
  235. package/dist/services/workspace-keepalive.d.ts.map +0 -1
  236. package/dist/services/workspace-keepalive.js +0 -234
  237. package/dist/services/workspace-keepalive.js.map +0 -1
  238. package/dist/shims/consensus.d.ts +0 -23
  239. package/dist/shims/consensus.d.ts.map +0 -1
  240. package/dist/shims/consensus.js +0 -5
  241. package/dist/shims/consensus.js.map +0 -1
  242. package/dist/webhooks/index.d.ts +0 -24
  243. package/dist/webhooks/index.d.ts.map +0 -1
  244. package/dist/webhooks/index.js +0 -29
  245. package/dist/webhooks/index.js.map +0 -1
  246. package/dist/webhooks/parsers/github.d.ts +0 -8
  247. package/dist/webhooks/parsers/github.d.ts.map +0 -1
  248. package/dist/webhooks/parsers/github.js +0 -234
  249. package/dist/webhooks/parsers/github.js.map +0 -1
  250. package/dist/webhooks/parsers/index.d.ts +0 -23
  251. package/dist/webhooks/parsers/index.d.ts.map +0 -1
  252. package/dist/webhooks/parsers/index.js +0 -30
  253. package/dist/webhooks/parsers/index.js.map +0 -1
  254. package/dist/webhooks/parsers/linear.d.ts +0 -9
  255. package/dist/webhooks/parsers/linear.d.ts.map +0 -1
  256. package/dist/webhooks/parsers/linear.js +0 -258
  257. package/dist/webhooks/parsers/linear.js.map +0 -1
  258. package/dist/webhooks/parsers/slack.d.ts +0 -9
  259. package/dist/webhooks/parsers/slack.d.ts.map +0 -1
  260. package/dist/webhooks/parsers/slack.js +0 -214
  261. package/dist/webhooks/parsers/slack.js.map +0 -1
  262. package/dist/webhooks/responders/github.d.ts +0 -8
  263. package/dist/webhooks/responders/github.d.ts.map +0 -1
  264. package/dist/webhooks/responders/github.js +0 -73
  265. package/dist/webhooks/responders/github.js.map +0 -1
  266. package/dist/webhooks/responders/index.d.ts +0 -23
  267. package/dist/webhooks/responders/index.d.ts.map +0 -1
  268. package/dist/webhooks/responders/index.js +0 -30
  269. package/dist/webhooks/responders/index.js.map +0 -1
  270. package/dist/webhooks/responders/linear.d.ts +0 -9
  271. package/dist/webhooks/responders/linear.d.ts.map +0 -1
  272. package/dist/webhooks/responders/linear.js +0 -149
  273. package/dist/webhooks/responders/linear.js.map +0 -1
  274. package/dist/webhooks/responders/slack.d.ts +0 -20
  275. package/dist/webhooks/responders/slack.d.ts.map +0 -1
  276. package/dist/webhooks/responders/slack.js +0 -178
  277. package/dist/webhooks/responders/slack.js.map +0 -1
  278. package/dist/webhooks/router.d.ts +0 -25
  279. package/dist/webhooks/router.d.ts.map +0 -1
  280. package/dist/webhooks/router.js +0 -504
  281. package/dist/webhooks/router.js.map +0 -1
  282. package/dist/webhooks/rules-engine.d.ts +0 -24
  283. package/dist/webhooks/rules-engine.d.ts.map +0 -1
  284. package/dist/webhooks/rules-engine.js +0 -287
  285. package/dist/webhooks/rules-engine.js.map +0 -1
  286. package/dist/webhooks/types.d.ts +0 -186
  287. package/dist/webhooks/types.d.ts.map +0 -1
  288. package/dist/webhooks/types.js +0 -8
  289. 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"}