@atria/server 0.0.10 → 0.0.12

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 (124) hide show
  1. package/README.md +26 -10
  2. package/dist/auth/cookies.d.ts +11 -0
  3. package/dist/auth/cookies.js +38 -0
  4. package/dist/auth/cookies.js.map +1 -0
  5. package/dist/auth/hash.d.ts +2 -0
  6. package/dist/auth/hash.js +36 -0
  7. package/dist/auth/hash.js.map +1 -0
  8. package/dist/auth/oauth.d.ts +5 -0
  9. package/dist/auth/oauth.js +215 -0
  10. package/dist/auth/oauth.js.map +1 -0
  11. package/dist/auth/runtime.d.ts +28 -0
  12. package/dist/auth/runtime.js +528 -0
  13. package/dist/auth/runtime.js.map +1 -0
  14. package/dist/auth/store.d.ts +33 -0
  15. package/dist/auth/store.js +49 -0
  16. package/dist/auth/store.js.map +1 -0
  17. package/dist/auth/types.d.ts +40 -0
  18. package/dist/auth/types.js +2 -0
  19. package/dist/auth/types.js.map +1 -0
  20. package/dist/auth/validation.d.ts +21 -0
  21. package/dist/auth/validation.js +97 -0
  22. package/dist/auth/validation.js.map +1 -0
  23. package/dist/dev/admin/assets.d.ts +2 -0
  24. package/dist/dev/admin/assets.js +30 -0
  25. package/dist/dev/admin/assets.js.map +1 -0
  26. package/dist/dev/admin/i18n.d.ts +2 -0
  27. package/dist/dev/admin/i18n.js +63 -0
  28. package/dist/dev/admin/i18n.js.map +1 -0
  29. package/dist/dev/admin/index.d.ts +3 -0
  30. package/dist/dev/admin/index.js +4 -0
  31. package/dist/dev/admin/index.js.map +1 -0
  32. package/dist/dev/admin/request.d.ts +14 -0
  33. package/dist/dev/admin/request.js +77 -0
  34. package/dist/dev/admin/request.js.map +1 -0
  35. package/dist/dev/admin/routing.d.ts +5 -0
  36. package/dist/dev/admin/routing.js +31 -0
  37. package/dist/dev/admin/routing.js.map +1 -0
  38. package/dist/dev/admin-assets.d.ts +2 -0
  39. package/dist/dev/admin-assets.js +30 -0
  40. package/dist/dev/admin-assets.js.map +1 -0
  41. package/dist/dev/admin.d.ts +2 -0
  42. package/dist/dev/admin.js +30 -0
  43. package/dist/dev/admin.js.map +1 -0
  44. package/dist/dev/constants.d.ts +11 -0
  45. package/dist/dev/constants.js +22 -0
  46. package/dist/dev/constants.js.map +1 -0
  47. package/dist/dev/health/index.d.ts +2 -0
  48. package/dist/dev/health/index.js +3 -0
  49. package/dist/dev/health/index.js.map +1 -0
  50. package/dist/dev/health/request.d.ts +14 -0
  51. package/dist/dev/health/request.js +22 -0
  52. package/dist/dev/health/request.js.map +1 -0
  53. package/dist/dev/health/state.d.ts +9 -0
  54. package/dist/dev/health/state.js +52 -0
  55. package/dist/dev/health/state.js.map +1 -0
  56. package/dist/dev/health.d.ts +9 -0
  57. package/dist/dev/health.js +52 -0
  58. package/dist/dev/health.js.map +1 -0
  59. package/dist/dev/http/errors.d.ts +2 -0
  60. package/dist/dev/http/errors.js +6 -0
  61. package/dist/dev/http/errors.js.map +1 -0
  62. package/dist/dev/http/routing.d.ts +3 -0
  63. package/dist/dev/http/routing.js +26 -0
  64. package/dist/dev/http/routing.js.map +1 -0
  65. package/dist/dev/i18n.d.ts +2 -0
  66. package/dist/dev/i18n.js +63 -0
  67. package/dist/dev/i18n.js.map +1 -0
  68. package/dist/dev/lifecycle.d.ts +2 -0
  69. package/dist/dev/lifecycle.js +10 -0
  70. package/dist/dev/lifecycle.js.map +1 -0
  71. package/dist/dev/public/index.d.ts +1 -0
  72. package/dist/dev/public/index.js +2 -0
  73. package/dist/dev/public/index.js.map +1 -0
  74. package/dist/dev/public/request.d.ts +9 -0
  75. package/dist/dev/public/request.js +29 -0
  76. package/dist/dev/public/request.js.map +1 -0
  77. package/dist/dev/public/responses.d.ts +3 -0
  78. package/dist/dev/public/responses.js +25 -0
  79. package/dist/dev/public/responses.js.map +1 -0
  80. package/dist/dev/public/routing.d.ts +1 -0
  81. package/dist/dev/public/routing.js +5 -0
  82. package/dist/dev/public/routing.js.map +1 -0
  83. package/dist/dev/responses.d.ts +2 -0
  84. package/dist/dev/responses.js +3 -0
  85. package/dist/dev/responses.js.map +1 -0
  86. package/dist/dev/routing.d.ts +3 -0
  87. package/dist/dev/routing.js +4 -0
  88. package/dist/dev/routing.js.map +1 -0
  89. package/dist/dev/setup/index.d.ts +2 -0
  90. package/dist/dev/setup/index.js +2 -0
  91. package/dist/dev/setup/index.js.map +1 -0
  92. package/dist/dev/setup/request.d.ts +5 -0
  93. package/dist/dev/setup/request.js +20 -0
  94. package/dist/dev/setup/request.js.map +1 -0
  95. package/dist/dev/setup/types.d.ts +5 -0
  96. package/dist/dev/setup/types.js +2 -0
  97. package/dist/dev/setup/types.js.map +1 -0
  98. package/dist/dev/static/files.d.ts +6 -0
  99. package/dist/dev/static/files.js +74 -0
  100. package/dist/dev/static/files.js.map +1 -0
  101. package/dist/dev/static/index.d.ts +4 -0
  102. package/dist/dev/static/index.js +5 -0
  103. package/dist/dev/static/index.js.map +1 -0
  104. package/dist/dev/static/paths.d.ts +1 -0
  105. package/dist/dev/static/paths.js +6 -0
  106. package/dist/dev/static/paths.js.map +1 -0
  107. package/dist/dev/static/publish.d.ts +1 -0
  108. package/dist/dev/static/publish.js +13 -0
  109. package/dist/dev/static/publish.js.map +1 -0
  110. package/dist/dev/static/resolver.d.ts +2 -0
  111. package/dist/dev/static/resolver.js +53 -0
  112. package/dist/dev/static/resolver.js.map +1 -0
  113. package/dist/dev/static/sender.d.ts +2 -0
  114. package/dist/dev/static/sender.js +11 -0
  115. package/dist/dev/static/sender.js.map +1 -0
  116. package/dist/dev/static-files.d.ts +6 -0
  117. package/dist/dev/static-files.js +74 -0
  118. package/dist/dev/static-files.js.map +1 -0
  119. package/dist/dev/types.d.ts +10 -0
  120. package/dist/dev/types.js +2 -0
  121. package/dist/dev/types.js.map +1 -0
  122. package/dist/server.js +64 -189
  123. package/dist/server.js.map +1 -1
  124. package/package.json +4 -2
@@ -0,0 +1,528 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import { DEFAULT_AUTH_BROKER_ORIGIN } from "@atria/shared";
3
+ import { parseCookies, serializeCookie } from "./cookies.js";
4
+ import { hashSecret, verifySecret } from "./hash.js";
5
+ import { buildOAuthAuthorizationUrl, createOAuthStateId, getOAuthProfileFromCode, listConfiguredOAuthProviders } from "./oauth.js";
6
+ import { createDbAuthStore } from "./store.js";
7
+ import { validateLoginCredentials, validateRegisterCredentials } from "./validation.js";
8
+ const SESSION_COOKIE_NAME = "atria_session";
9
+ const SESSION_MAX_AGE_SECONDS = 60 * 60 * 24 * 30;
10
+ const OAUTH_STATE_MAX_AGE_MS = 10 * 60 * 1000;
11
+ const isOAuthProviderId = (value) => value === "google" || value === "github";
12
+ const parseProviderFromPath = (pathname, prefix) => {
13
+ if (!pathname.startsWith(prefix)) {
14
+ return null;
15
+ }
16
+ const provider = pathname.slice(prefix.length).replace(/^\/+/, "").split("/")[0] ?? "";
17
+ return isOAuthProviderId(provider) ? provider : null;
18
+ };
19
+ const writeJson = (response, statusCode, payload) => {
20
+ response.writeHead(statusCode, { "content-type": "application/json; charset=utf-8" });
21
+ response.end(JSON.stringify(payload));
22
+ };
23
+ const writeRedirect = (response, location, cookieHeader) => {
24
+ response.writeHead(302, cookieHeader ? { location, "set-cookie": cookieHeader } : { location });
25
+ response.end();
26
+ };
27
+ const makeSessionId = () => randomBytes(32).toString("hex");
28
+ const nowMs = () => Date.now();
29
+ const getOrigin = (port) => process.env.ATRIA_AUTH_ORIGIN?.trim() || `http://studio.localhost:${port}`;
30
+ const getProviderCallbackUrl = (provider, port) => `${getOrigin(port)}/api/auth/callback/${provider}`;
31
+ const getBrokerOrigin = () => {
32
+ const configured = process.env.ATRIA_AUTH_BROKER_ORIGIN?.trim();
33
+ if (configured) {
34
+ const lowered = configured.toLowerCase();
35
+ if (lowered === "off" || lowered === "local" || lowered === "false") {
36
+ return null;
37
+ }
38
+ return configured;
39
+ }
40
+ return DEFAULT_AUTH_BROKER_ORIGIN;
41
+ };
42
+ const readRequestSessionId = (request) => {
43
+ const cookies = parseCookies(request.headers);
44
+ return cookies[SESSION_COOKIE_NAME] ?? null;
45
+ };
46
+ const clearSessionCookie = () => serializeCookie(SESSION_COOKIE_NAME, "", {
47
+ httpOnly: true,
48
+ sameSite: "Lax",
49
+ maxAge: 0
50
+ });
51
+ const createSessionCookie = (sessionId) => serializeCookie(SESSION_COOKIE_NAME, sessionId, {
52
+ httpOnly: true,
53
+ sameSite: "Lax",
54
+ maxAge: SESSION_MAX_AGE_SECONDS
55
+ });
56
+ const createSessionResult = async (store, sessions, request) => {
57
+ const sessionId = readRequestSessionId(request);
58
+ if (!sessionId) {
59
+ return { authenticated: false, user: null };
60
+ }
61
+ const session = sessions.get(sessionId);
62
+ if (!session) {
63
+ return { authenticated: false, user: null };
64
+ }
65
+ if (Date.parse(session.expiresAt) <= nowMs()) {
66
+ sessions.delete(session.id);
67
+ return { authenticated: false, user: null };
68
+ }
69
+ const user = await store.getUserById(session.userId);
70
+ if (!user) {
71
+ sessions.delete(session.id);
72
+ return { authenticated: false, user: null };
73
+ }
74
+ return {
75
+ authenticated: true,
76
+ user: {
77
+ id: user.id,
78
+ email: user.email,
79
+ name: user.name,
80
+ avatarUrl: user.avatarUrl
81
+ }
82
+ };
83
+ };
84
+ const parseJsonBody = async (request) => new Promise((resolve, reject) => {
85
+ let body = "";
86
+ request.on("data", (chunk) => {
87
+ body += chunk.toString();
88
+ if (body.length > 1_000_000) {
89
+ reject(new Error("Request body is too large."));
90
+ }
91
+ });
92
+ request.on("end", () => {
93
+ if (!body) {
94
+ resolve({});
95
+ return;
96
+ }
97
+ try {
98
+ resolve(JSON.parse(body));
99
+ }
100
+ catch {
101
+ reject(new Error("Invalid JSON body."));
102
+ }
103
+ });
104
+ request.on("error", reject);
105
+ });
106
+ const toBrokerProviders = (payload) => {
107
+ if (typeof payload !== "object" || payload === null || !("providers" in payload)) {
108
+ return [];
109
+ }
110
+ const providers = payload.providers;
111
+ if (!Array.isArray(providers)) {
112
+ return [];
113
+ }
114
+ return providers.filter((entry) => typeof entry === "string" ? isOAuthProviderId(entry) : false);
115
+ };
116
+ const listBrokerProviders = async (brokerOrigin) => {
117
+ try {
118
+ const response = await fetch(`${brokerOrigin}/oauth/providers`, {
119
+ headers: {
120
+ accept: "application/json"
121
+ }
122
+ });
123
+ if (!response.ok) {
124
+ return [];
125
+ }
126
+ const payload = (await response.json());
127
+ return toBrokerProviders(payload);
128
+ }
129
+ catch {
130
+ return [];
131
+ }
132
+ };
133
+ const parseBrokerExchangePayload = (payload) => {
134
+ if (typeof payload !== "object" || payload === null) {
135
+ return null;
136
+ }
137
+ const typedPayload = payload;
138
+ if (typedPayload.ok !== true) {
139
+ return null;
140
+ }
141
+ if (typeof typedPayload.provider !== "string" || !isOAuthProviderId(typedPayload.provider)) {
142
+ return null;
143
+ }
144
+ const user = typedPayload.user;
145
+ if (!user || typeof user.providerUserId !== "string" || user.providerUserId.length === 0) {
146
+ return null;
147
+ }
148
+ return {
149
+ provider: typedPayload.provider,
150
+ user: {
151
+ providerUserId: user.providerUserId,
152
+ email: typeof user.email === "string" ? user.email : null,
153
+ name: typeof user.name === "string" ? user.name : null,
154
+ avatarUrl: typeof user.avatarUrl === "string" ? user.avatarUrl : null,
155
+ emailVerified: user.emailVerified === true
156
+ }
157
+ };
158
+ };
159
+ const exchangeBrokerCode = async (brokerOrigin, code) => {
160
+ const exchangeUrl = new URL("/oauth/exchange", brokerOrigin);
161
+ exchangeUrl.searchParams.set("code", code);
162
+ const response = await fetch(exchangeUrl.toString(), {
163
+ method: "GET",
164
+ headers: {
165
+ accept: "application/json"
166
+ }
167
+ });
168
+ const payload = (await response.json().catch(() => null));
169
+ const parsed = parseBrokerExchangePayload(payload);
170
+ if (!response.ok || !parsed) {
171
+ throw new Error("Broker code exchange failed.");
172
+ }
173
+ return {
174
+ provider: parsed.provider,
175
+ providerUserId: parsed.user.providerUserId,
176
+ email: parsed.user.email,
177
+ name: parsed.user.name,
178
+ avatarUrl: parsed.user.avatarUrl,
179
+ emailVerified: parsed.user.emailVerified
180
+ };
181
+ };
182
+ export const createAuthRuntime = (options) => {
183
+ const store = createDbAuthStore(options.projectRoot);
184
+ const sessions = new Map();
185
+ const oauthStates = new Map();
186
+ const issueSession = (userId) => {
187
+ const sessionId = makeSessionId();
188
+ const createdAt = new Date().toISOString();
189
+ const expiresAt = new Date(nowMs() + SESSION_MAX_AGE_SECONDS * 1000).toISOString();
190
+ sessions.set(sessionId, {
191
+ id: sessionId,
192
+ userId,
193
+ createdAt,
194
+ expiresAt
195
+ });
196
+ return sessionId;
197
+ };
198
+ const consumeState = (stateId) => {
199
+ const existingState = oauthStates.get(stateId);
200
+ if (!existingState) {
201
+ return null;
202
+ }
203
+ oauthStates.delete(stateId);
204
+ if (Date.parse(existingState.expiresAt) <= nowMs()) {
205
+ return null;
206
+ }
207
+ return existingState;
208
+ };
209
+ const handleStart = async (provider, response, requestUrl) => {
210
+ const brokerOrigin = getBrokerOrigin();
211
+ if (brokerOrigin) {
212
+ const nextPath = requestUrl.searchParams.get("next");
213
+ const redirectPath = nextPath && nextPath.startsWith("/") ? nextPath : "/";
214
+ const mode = requestUrl.searchParams.get("mode");
215
+ const returnPath = mode === "login" ? "/login" : mode === "create" ? "/create" : "/setup";
216
+ const returnTo = new URL(returnPath, getOrigin(options.port));
217
+ returnTo.searchParams.set("provider", provider);
218
+ if (redirectPath !== "/") {
219
+ returnTo.searchParams.set("next", redirectPath);
220
+ }
221
+ const brokerStartUrl = new URL(`/oauth/start/${provider}`, brokerOrigin);
222
+ brokerStartUrl.searchParams.set("return_to", returnTo.toString());
223
+ writeRedirect(response, brokerStartUrl.toString());
224
+ return;
225
+ }
226
+ const configuredProviders = listConfiguredOAuthProviders();
227
+ if (!configuredProviders.includes(provider)) {
228
+ writeJson(response, 400, {
229
+ ok: false,
230
+ error: `OAuth provider "${provider}" is not configured.`
231
+ });
232
+ return;
233
+ }
234
+ const stateId = createOAuthStateId();
235
+ const createdAt = new Date().toISOString();
236
+ const expiresAt = new Date(nowMs() + OAUTH_STATE_MAX_AGE_MS).toISOString();
237
+ const nextPath = requestUrl.searchParams.get("next");
238
+ const redirectPath = nextPath && nextPath.startsWith("/") ? nextPath : "/";
239
+ oauthStates.set(stateId, {
240
+ id: stateId,
241
+ provider,
242
+ createdAt,
243
+ expiresAt,
244
+ redirectPath
245
+ });
246
+ const callbackUrl = getProviderCallbackUrl(provider, options.port);
247
+ const authorizationUrl = buildOAuthAuthorizationUrl(provider, callbackUrl, stateId);
248
+ writeRedirect(response, authorizationUrl);
249
+ };
250
+ const handleCallback = async (provider, response, requestUrl) => {
251
+ const code = requestUrl.searchParams.get("code");
252
+ const stateId = requestUrl.searchParams.get("state");
253
+ if (!code || !stateId) {
254
+ writeJson(response, 400, {
255
+ ok: false,
256
+ error: "Missing OAuth callback parameters."
257
+ });
258
+ return;
259
+ }
260
+ const state = consumeState(stateId);
261
+ if (!state || state.provider !== provider) {
262
+ writeJson(response, 400, {
263
+ ok: false,
264
+ error: "Invalid or expired OAuth state."
265
+ });
266
+ return;
267
+ }
268
+ try {
269
+ const callbackUrl = getProviderCallbackUrl(provider, options.port);
270
+ const profile = await getOAuthProfileFromCode(provider, code, callbackUrl);
271
+ const user = await store.upsertOAuthProfile(profile);
272
+ await store.clearPreferredAuthMethod();
273
+ const sessionId = issueSession(user.id);
274
+ writeRedirect(response, state.redirectPath || "/", createSessionCookie(sessionId));
275
+ }
276
+ catch (error) {
277
+ writeJson(response, 500, {
278
+ ok: false,
279
+ error: error instanceof Error ? error.message : "OAuth callback failed."
280
+ });
281
+ }
282
+ };
283
+ const handleBrokerExchange = async (request, response, requestUrl) => {
284
+ const brokerOrigin = getBrokerOrigin();
285
+ if (!brokerOrigin) {
286
+ writeJson(response, 400, {
287
+ ok: false,
288
+ error: "OAuth broker is disabled."
289
+ });
290
+ return;
291
+ }
292
+ let code = requestUrl.searchParams.get("code");
293
+ if (!code && request.method === "POST") {
294
+ const payload = await parseJsonBody(request);
295
+ const bodyCode = payload.code;
296
+ code = typeof bodyCode === "string" ? bodyCode : null;
297
+ }
298
+ if (!code) {
299
+ writeJson(response, 400, {
300
+ ok: false,
301
+ error: "Missing broker code."
302
+ });
303
+ return;
304
+ }
305
+ try {
306
+ const profile = await exchangeBrokerCode(brokerOrigin, code);
307
+ const user = await store.upsertOAuthProfile(profile);
308
+ await store.clearPreferredAuthMethod();
309
+ const sessionId = issueSession(user.id);
310
+ response.writeHead(200, {
311
+ "content-type": "application/json; charset=utf-8",
312
+ "set-cookie": createSessionCookie(sessionId)
313
+ });
314
+ response.end(JSON.stringify({
315
+ ok: true,
316
+ authenticated: true,
317
+ user: {
318
+ id: user.id,
319
+ email: user.email,
320
+ name: user.name,
321
+ avatarUrl: user.avatarUrl
322
+ }
323
+ }));
324
+ }
325
+ catch (error) {
326
+ writeJson(response, 500, {
327
+ ok: false,
328
+ error: error instanceof Error ? error.message : "Broker exchange failed."
329
+ });
330
+ }
331
+ };
332
+ const parseRequestPayload = async (request, response) => {
333
+ try {
334
+ return await parseJsonBody(request);
335
+ }
336
+ catch (error) {
337
+ writeJson(response, 400, {
338
+ ok: false,
339
+ error: error instanceof Error ? error.message : "Invalid JSON body."
340
+ });
341
+ return null;
342
+ }
343
+ };
344
+ const respondAuthenticated = (response, user) => {
345
+ const sessionId = issueSession(user.id);
346
+ response.writeHead(200, {
347
+ "content-type": "application/json; charset=utf-8",
348
+ "set-cookie": createSessionCookie(sessionId)
349
+ });
350
+ response.end(JSON.stringify({
351
+ ok: true,
352
+ authenticated: true,
353
+ user
354
+ }));
355
+ };
356
+ const handleEmailRegister = async (request, response) => {
357
+ const payload = await parseRequestPayload(request, response);
358
+ if (!payload) {
359
+ return;
360
+ }
361
+ const validation = validateRegisterCredentials(payload);
362
+ if (!validation.ok) {
363
+ writeJson(response, 400, {
364
+ ok: false,
365
+ error: validation.error
366
+ });
367
+ return;
368
+ }
369
+ try {
370
+ const passwordHash = await hashSecret(validation.value.password);
371
+ const registration = await store.registerOwnerWithPassword({
372
+ email: validation.value.email,
373
+ passwordHash,
374
+ name: validation.value.name
375
+ });
376
+ if (!registration.ok) {
377
+ const errorMessage = registration.reason === "owner_exists"
378
+ ? "Owner account already exists."
379
+ : "Email is already in use.";
380
+ writeJson(response, 409, {
381
+ ok: false,
382
+ error: errorMessage,
383
+ reason: registration.reason
384
+ });
385
+ return;
386
+ }
387
+ await store.clearPreferredAuthMethod();
388
+ respondAuthenticated(response, {
389
+ id: registration.user.id,
390
+ email: registration.user.email,
391
+ name: registration.user.name,
392
+ avatarUrl: registration.user.avatarUrl
393
+ });
394
+ }
395
+ catch (error) {
396
+ writeJson(response, 500, {
397
+ ok: false,
398
+ error: error instanceof Error ? error.message : "Could not create owner account."
399
+ });
400
+ }
401
+ };
402
+ const handleEmailLogin = async (request, response) => {
403
+ const payload = await parseRequestPayload(request, response);
404
+ if (!payload) {
405
+ return;
406
+ }
407
+ const validation = validateLoginCredentials(payload);
408
+ if (!validation.ok) {
409
+ writeJson(response, 400, {
410
+ ok: false,
411
+ error: validation.error
412
+ });
413
+ return;
414
+ }
415
+ try {
416
+ const userWithPassword = await store.getUserWithPasswordByEmail(validation.value.email);
417
+ if (!userWithPassword) {
418
+ writeJson(response, 401, {
419
+ ok: false,
420
+ error: "Invalid email or password."
421
+ });
422
+ return;
423
+ }
424
+ const isValidPassword = await verifySecret(validation.value.password, userWithPassword.passwordHash);
425
+ if (!isValidPassword) {
426
+ writeJson(response, 401, {
427
+ ok: false,
428
+ error: "Invalid email or password."
429
+ });
430
+ return;
431
+ }
432
+ respondAuthenticated(response, userWithPassword.user);
433
+ }
434
+ catch (error) {
435
+ writeJson(response, 500, {
436
+ ok: false,
437
+ error: error instanceof Error ? error.message : "Could not complete sign in."
438
+ });
439
+ }
440
+ };
441
+ return {
442
+ hasUsers: () => store.hasUsers(),
443
+ getOwnerSetupState: () => store.getOwnerSetupState(),
444
+ getSession: (request) => createSessionResult(store, sessions, request),
445
+ close: async () => {
446
+ await store.close();
447
+ },
448
+ handleRequest: async (request, response, requestUrl) => {
449
+ const pathname = requestUrl.pathname;
450
+ if (!pathname.startsWith("/api/auth/")) {
451
+ return false;
452
+ }
453
+ if (pathname === "/api/auth/providers") {
454
+ const localProviders = listConfiguredOAuthProviders();
455
+ const brokerOrigin = getBrokerOrigin();
456
+ const providers = new Set(["email", ...localProviders]);
457
+ if (brokerOrigin) {
458
+ const brokerProviders = await listBrokerProviders(brokerOrigin);
459
+ for (const provider of brokerProviders) {
460
+ providers.add(provider);
461
+ }
462
+ }
463
+ writeJson(response, 200, {
464
+ ok: true,
465
+ providers: [...providers]
466
+ });
467
+ return true;
468
+ }
469
+ if (pathname === "/api/auth/session") {
470
+ writeJson(response, 200, await createSessionResult(store, sessions, request));
471
+ return true;
472
+ }
473
+ if (pathname === "/api/auth/logout") {
474
+ const sessionId = readRequestSessionId(request);
475
+ if (sessionId) {
476
+ sessions.delete(sessionId);
477
+ }
478
+ response.writeHead(204, {
479
+ "set-cookie": clearSessionCookie()
480
+ });
481
+ response.end();
482
+ return true;
483
+ }
484
+ if (pathname === "/api/auth/email/register") {
485
+ if (request.method !== "POST") {
486
+ writeJson(response, 405, {
487
+ ok: false,
488
+ error: "Method not allowed."
489
+ });
490
+ return true;
491
+ }
492
+ await handleEmailRegister(request, response);
493
+ return true;
494
+ }
495
+ if (pathname === "/api/auth/email/login") {
496
+ if (request.method !== "POST") {
497
+ writeJson(response, 405, {
498
+ ok: false,
499
+ error: "Method not allowed."
500
+ });
501
+ return true;
502
+ }
503
+ await handleEmailLogin(request, response);
504
+ return true;
505
+ }
506
+ if (pathname === "/api/auth/broker/exchange") {
507
+ await handleBrokerExchange(request, response, requestUrl);
508
+ return true;
509
+ }
510
+ const startProvider = parseProviderFromPath(pathname, "/api/auth/start/");
511
+ if (startProvider) {
512
+ await handleStart(startProvider, response, requestUrl);
513
+ return true;
514
+ }
515
+ const callbackProvider = parseProviderFromPath(pathname, "/api/auth/callback/");
516
+ if (callbackProvider) {
517
+ await handleCallback(callbackProvider, response, requestUrl);
518
+ return true;
519
+ }
520
+ writeJson(response, 404, {
521
+ ok: false,
522
+ error: "Auth endpoint not found."
523
+ });
524
+ return true;
525
+ }
526
+ };
527
+ };
528
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/auth/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type DatabaseOwnerRegistrationResult } from "@atria/db";
2
+ import type { AuthMethod } from "@atria/shared";
3
+ import type { OAuthProfile } from "./types.js";
4
+ interface OwnerSetupState {
5
+ pending: boolean;
6
+ preferredAuthMethod: AuthMethod | null;
7
+ }
8
+ interface AuthUser {
9
+ id: string;
10
+ email: string | null;
11
+ name: string | null;
12
+ avatarUrl: string | null;
13
+ }
14
+ export interface AuthStore {
15
+ close: () => Promise<void>;
16
+ hasUsers: () => Promise<boolean>;
17
+ getOwnerSetupState: () => Promise<OwnerSetupState>;
18
+ setPreferredAuthMethod: (authMethod: AuthMethod | null) => Promise<void>;
19
+ clearPreferredAuthMethod: () => Promise<void>;
20
+ getUserById: (userId: string) => Promise<AuthUser | null>;
21
+ getUserWithPasswordByEmail: (email: string) => Promise<{
22
+ user: AuthUser;
23
+ passwordHash: string;
24
+ } | null>;
25
+ registerOwnerWithPassword: (input: {
26
+ email: string;
27
+ passwordHash: string;
28
+ name: string | null;
29
+ }) => Promise<DatabaseOwnerRegistrationResult>;
30
+ upsertOAuthProfile: (profile: OAuthProfile) => Promise<AuthUser>;
31
+ }
32
+ export declare const createDbAuthStore: (projectRoot: string) => AuthStore;
33
+ export {};
@@ -0,0 +1,49 @@
1
+ import { openAtriaDatabase } from "@atria/db";
2
+ const toDatabaseProfile = (profile) => ({
3
+ provider: profile.provider,
4
+ providerUserId: profile.providerUserId,
5
+ email: profile.email,
6
+ emailVerified: profile.emailVerified,
7
+ name: profile.name,
8
+ avatarUrl: profile.avatarUrl
9
+ });
10
+ const mapUser = (user) => ({
11
+ id: user.id,
12
+ email: user.email,
13
+ name: user.name,
14
+ avatarUrl: user.avatarUrl
15
+ });
16
+ const mapUserWithPassword = (userWithPassword) => ({
17
+ user: mapUser(userWithPassword.user),
18
+ passwordHash: userWithPassword.passwordHash
19
+ });
20
+ export const createDbAuthStore = (projectRoot) => {
21
+ const database = openAtriaDatabase(projectRoot);
22
+ return {
23
+ close: async () => {
24
+ await database.close();
25
+ },
26
+ hasUsers: async () => database.hasUsers(),
27
+ getOwnerSetupState: async () => database.getOwnerSetupState(),
28
+ setPreferredAuthMethod: async (authMethod) => {
29
+ await database.setPreferredAuthMethod(authMethod);
30
+ },
31
+ clearPreferredAuthMethod: async () => {
32
+ await database.clearPreferredAuthMethod();
33
+ },
34
+ getUserById: async (userId) => {
35
+ const user = await database.getUserById(userId);
36
+ return user ? mapUser(user) : null;
37
+ },
38
+ getUserWithPasswordByEmail: async (email) => {
39
+ const userWithPassword = await database.getUserWithPasswordByEmail(email);
40
+ return userWithPassword ? mapUserWithPassword(userWithPassword) : null;
41
+ },
42
+ registerOwnerWithPassword: async (input) => database.registerOwnerWithPassword(input),
43
+ upsertOAuthProfile: async (profile) => {
44
+ const user = await database.upsertOAuthProfile(toDatabaseProfile(profile));
45
+ return mapUser(user);
46
+ }
47
+ };
48
+ };
49
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/auth/store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAMlB,MAAM,WAAW,CAAC;AAmCnB,MAAM,iBAAiB,GAAG,CAAC,OAAqB,EAAwB,EAAE,CAAC,CAAC;IAC1E,QAAQ,EAAE,OAAO,CAAC,QAAQ;IAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;IACtC,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,aAAa,EAAE,OAAO,CAAC,aAAa;IACpC,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,SAAS,EAAE,OAAO,CAAC,SAAS;CAC7B,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CAAC,IAA+D,EAAY,EAAE,CAAC,CAAC;IAC9F,EAAE,EAAE,IAAI,CAAC,EAAE;IACX,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,SAAS,EAAE,IAAI,CAAC,SAAS;CAC1B,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAC1B,gBAA0C,EAI1C,EAAE,CAAC,CAAC;IACJ,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC;IACpC,YAAY,EAAE,gBAAgB,CAAC,YAAY;CAC5C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAAa,EAAE;IAClE,MAAM,QAAQ,GAAkB,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAE/D,OAAO;QACL,KAAK,EAAE,KAAK,IAAmB,EAAE;YAC/B,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;QAED,QAAQ,EAAE,KAAK,IAAsB,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE;QAE3D,kBAAkB,EAAE,KAAK,IAA8B,EAAE,CAAC,QAAQ,CAAC,kBAAkB,EAAE;QAEvF,sBAAsB,EAAE,KAAK,EAAE,UAA6B,EAAiB,EAAE;YAC7E,MAAM,QAAQ,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;QACpD,CAAC;QAED,wBAAwB,EAAE,KAAK,IAAmB,EAAE;YAClD,MAAM,QAAQ,CAAC,wBAAwB,EAAE,CAAC;QAC5C,CAAC;QAED,WAAW,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE;YACpC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,CAAC;QAED,0BAA0B,EAAE,KAAK,EAAE,KAAa,EAAE,EAAE;YAClD,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;YAC1E,OAAO,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACzE,CAAC;QAED,yBAAyB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,KAAK,CAAC;QAErF,kBAAkB,EAAE,KAAK,EAAE,OAAqB,EAAE,EAAE;YAClD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3E,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}