@de-otio/trellis 0.4.0 → 0.5.0

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 (41) hide show
  1. package/dist/lib/crypto/voting/hash-utils.d.ts +3 -49
  2. package/dist/lib/crypto/voting/hash-utils.d.ts.map +1 -1
  3. package/dist/lib/crypto/voting/hash-utils.js +12 -54
  4. package/dist/lib/crypto/voting/hash-utils.js.map +1 -1
  5. package/dist/lib/email-privacy.d.ts +6 -44
  6. package/dist/lib/email-privacy.d.ts.map +1 -1
  7. package/dist/lib/email-privacy.js +10 -50
  8. package/dist/lib/email-privacy.js.map +1 -1
  9. package/package.json +1 -1
  10. package/prisma/migrations/20260412075058_init_redesign_schema/migration.sql +1547 -0
  11. package/prisma/migrations/20260412080000_seed_role_metadata/migration.sql +15 -0
  12. package/prisma/migrations/migration_lock.toml +3 -0
  13. package/prisma/schema.prisma +1408 -0
  14. package/dist/lib/crypto/encryption-service.d.ts +0 -100
  15. package/dist/lib/crypto/encryption-service.d.ts.map +0 -1
  16. package/dist/lib/crypto/encryption-service.js +0 -293
  17. package/dist/lib/crypto/encryption-service.js.map +0 -1
  18. package/dist/lib/crypto/index.d.ts +0 -22
  19. package/dist/lib/crypto/index.d.ts.map +0 -1
  20. package/dist/lib/crypto/index.js +0 -28
  21. package/dist/lib/crypto/index.js.map +0 -1
  22. package/dist/lib/crypto/types.d.ts +0 -71
  23. package/dist/lib/crypto/types.d.ts.map +0 -1
  24. package/dist/lib/crypto/types.js +0 -3
  25. package/dist/lib/crypto/types.js.map +0 -1
  26. package/dist/lib/crypto/versioning.d.ts +0 -112
  27. package/dist/lib/crypto/versioning.d.ts.map +0 -1
  28. package/dist/lib/crypto/versioning.js +0 -148
  29. package/dist/lib/crypto/versioning.js.map +0 -1
  30. package/dist/lib/encryption-key-service.d.ts +0 -115
  31. package/dist/lib/encryption-key-service.d.ts.map +0 -1
  32. package/dist/lib/encryption-key-service.js +0 -272
  33. package/dist/lib/encryption-key-service.js.map +0 -1
  34. package/dist/lib/followers-handler.d.ts +0 -21
  35. package/dist/lib/followers-handler.d.ts.map +0 -1
  36. package/dist/lib/followers-handler.js +0 -35
  37. package/dist/lib/followers-handler.js.map +0 -1
  38. package/dist/lib/routes/followers.d.ts +0 -6
  39. package/dist/lib/routes/followers.d.ts.map +0 -1
  40. package/dist/lib/routes/followers.js +0 -405
  41. package/dist/lib/routes/followers.js.map +0 -1
@@ -1,405 +0,0 @@
1
- "use strict";
2
- /**
3
- * Followers Routes
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.followersRoutes = void 0;
7
- const followers_handler_1 = require("../followers-handler");
8
- const logger_1 = require("../logger");
9
- const middleware_1 = require("../middleware");
10
- const performance_metrics_1 = require("../performance-metrics");
11
- const secret_resolver_1 = require("../secret-resolver");
12
- const security_headers_1 = require("../security-headers");
13
- const session_manager_1 = require("../session-manager");
14
- const validation_1 = require("../validation");
15
- exports.followersRoutes = [
16
- {
17
- path: "/api/followers/follow",
18
- method: "POST",
19
- handler: async (request, env, { requestContext }) => {
20
- const endpointStartTime = Date.now();
21
- const sessionManager = new session_manager_1.SessionManager();
22
- const securityHeaders = new security_headers_1.SecurityHeaders(env);
23
- const logger = logger_1.Logger.getInstance(env);
24
- const validator = new validation_1.Validator();
25
- const followersHandler = new followers_handler_1.FollowersHandler();
26
- const session = await sessionManager.getSession(request, secret_resolver_1.Secrets.getSessionSecret(env), env);
27
- if (!session) {
28
- const duration = Date.now() - endpointStartTime;
29
- logger.debug("[FollowersRoute] /api/followers/follow - Unauthorized", {
30
- duration,
31
- status: 401,
32
- });
33
- return securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
34
- }
35
- try {
36
- const response = await followersHandler.handleFollow(request, session, env, requestContext);
37
- const duration = Date.now() - endpointStartTime;
38
- // Record performance metric
39
- const metricsCollector = (0, performance_metrics_1.getPerformanceMetricsCollector)(env);
40
- const metric = {
41
- endpoint: "/api/followers/follow",
42
- method: "POST",
43
- duration,
44
- status: response.status,
45
- timestamp: Date.now(),
46
- userId: session.userId,
47
- };
48
- metricsCollector.recordEndpointMetric(metric);
49
- logger.debug("[FollowersRoute] /api/followers/follow - Success", {
50
- duration,
51
- status: response.status,
52
- userId: session.userId,
53
- });
54
- // Log slow requests
55
- if (duration > 1000) {
56
- logger.warn("[FollowersRoute] /api/followers/follow - Slow request", {
57
- duration,
58
- status: response.status,
59
- userId: session.userId,
60
- });
61
- }
62
- return securityHeaders.addSecurityHeaders(response);
63
- }
64
- catch (error) {
65
- const duration = Date.now() - endpointStartTime;
66
- // Record error metric
67
- const metricsCollector = (0, performance_metrics_1.getPerformanceMetricsCollector)(env);
68
- const metric = {
69
- endpoint: "/api/followers/follow",
70
- method: "POST",
71
- duration,
72
- status: 500,
73
- timestamp: Date.now(),
74
- userId: session?.userId,
75
- error: error?.message || String(error),
76
- };
77
- metricsCollector.recordEndpointMetric(metric);
78
- logger.error("[FollowersRoute] /api/followers/follow - Error", {
79
- duration,
80
- error: error?.message || String(error),
81
- userId: session?.userId,
82
- });
83
- // Check for self-follow error in route handler as fallback
84
- // Check multiple possible error message locations
85
- const errorMessageRaw = error?.message ||
86
- error?.error?.message ||
87
- error?.toString() ||
88
- String(error) ||
89
- "";
90
- // Normalize the error message - remove newlines and extra whitespace for easier matching
91
- const errorMessage = errorMessageRaw.replace(/\s+/g, " ").toLowerCase();
92
- // Also check the sanitized error message
93
- const sanitizedError = validator.sanitizeError(error);
94
- const sanitizedErrorMessage = sanitizedError
95
- .replace(/\s+/g, " ")
96
- .toLowerCase();
97
- console.error("[Route Handler] Error caught", {
98
- errorMessageRaw,
99
- errorMessage,
100
- sanitizedError,
101
- sanitizedErrorMessage,
102
- errorType: typeof error,
103
- errorKeys: error ? Object.keys(error) : [],
104
- errorString: String(error),
105
- includesCheck1: errorMessage.includes("cannot follow yourself"),
106
- includesCheck2: errorMessage.includes("follow yourself"),
107
- includesCheck3: sanitizedErrorMessage.includes("cannot follow yourself"),
108
- includesCheck4: sanitizedErrorMessage.includes("follow yourself"),
109
- });
110
- logger.debug("Route handler catch block - error message", {
111
- errorMessageRaw,
112
- errorMessage,
113
- sanitizedError,
114
- sanitizedErrorMessage,
115
- errorType: typeof error,
116
- errorKeys: error ? Object.keys(error) : [],
117
- includesCheck: errorMessage.includes("cannot follow yourself") ||
118
- errorMessage.includes("follow yourself") ||
119
- sanitizedErrorMessage.includes("cannot follow yourself") ||
120
- sanitizedErrorMessage.includes("follow yourself"),
121
- });
122
- // SIMPLE CHECK: If we're in the follow route and get a unique constraint error, it's "already following"
123
- const errorStringLower = String(error).toLowerCase();
124
- const hasUniqueConstraint = errorMessage.includes("unique constraint") ||
125
- sanitizedErrorMessage.includes("unique constraint") ||
126
- errorStringLower.includes("unique constraint") ||
127
- error?.code === "P2002" ||
128
- error?.meta?.code === "P2002";
129
- const isAlreadyFollowingError = hasUniqueConstraint || // If it's a unique constraint during follow, it's "already following"
130
- errorMessage.includes("already following") ||
131
- errorMessage.includes("this target") ||
132
- sanitizedErrorMessage.includes("already following") ||
133
- sanitizedErrorMessage.includes("this target") ||
134
- errorStringLower.includes("already following") ||
135
- errorStringLower.includes("this target");
136
- if (isAlreadyFollowingError) {
137
- logger.info("Route handler: Returning 403 for already following error", {
138
- isAlreadyFollowingError,
139
- hasUniqueConstraint,
140
- });
141
- return securityHeaders.createSecureResponse(JSON.stringify({
142
- error: "ACTION_FAILED",
143
- message: "Unable to complete this action",
144
- }), { status: 403, headers: { "content-type": "application/json" } });
145
- }
146
- if (errorMessage.includes("cannot follow yourself") ||
147
- errorMessage.includes("follow yourself") ||
148
- sanitizedErrorMessage.includes("cannot follow yourself") ||
149
- sanitizedErrorMessage.includes("follow yourself")) {
150
- console.error("[Route Handler] SELF-FOLLOW ERROR DETECTED - RETURNING 400");
151
- logger.info("Route handler: Returning 400 for self-follow error");
152
- return securityHeaders.createSecureResponse(JSON.stringify({
153
- error: "ACTION_FAILED",
154
- message: "Invalid request",
155
- }), { status: 400, headers: { "content-type": "application/json" } });
156
- }
157
- console.error("[Route Handler] Error not matched, returning 500", {
158
- errorMessage,
159
- sanitizedError,
160
- });
161
- logger.warn("Route handler: Error not matched, returning 500", {
162
- errorMessage,
163
- sanitizedError: validator.sanitizeError(error),
164
- });
165
- return securityHeaders.createSecureResponse(JSON.stringify({ error: validator.sanitizeError(error) }), { status: 500, headers: { "content-type": "application/json" } });
166
- }
167
- },
168
- middleware: [(0, middleware_1.corsMiddleware)(), (0, middleware_1.csrfMiddleware)()],
169
- description: "Follow a user or dog",
170
- },
171
- {
172
- path: "/api/followers/unfollow",
173
- method: "POST",
174
- handler: async (request, env, { requestContext }) => {
175
- const endpointStartTime = Date.now();
176
- const sessionManager = new session_manager_1.SessionManager();
177
- const securityHeaders = new security_headers_1.SecurityHeaders(env);
178
- const logger = logger_1.Logger.getInstance(env);
179
- const validator = new validation_1.Validator();
180
- const followersHandler = new followers_handler_1.FollowersHandler();
181
- const session = await sessionManager.getSession(request, secret_resolver_1.Secrets.getSessionSecret(env), env);
182
- if (!session) {
183
- const duration = Date.now() - endpointStartTime;
184
- logger.debug("[FollowersRoute] /api/followers/unfollow - Unauthorized", {
185
- duration,
186
- status: 401,
187
- });
188
- return securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
189
- }
190
- try {
191
- const response = await followersHandler.handleUnfollow(request, session, env, requestContext);
192
- const duration = Date.now() - endpointStartTime;
193
- // Record performance metric
194
- const metricsCollector = (0, performance_metrics_1.getPerformanceMetricsCollector)(env);
195
- const metric = {
196
- endpoint: "/api/followers/unfollow",
197
- method: "POST",
198
- duration,
199
- status: response.status,
200
- timestamp: Date.now(),
201
- userId: session.userId,
202
- };
203
- metricsCollector.recordEndpointMetric(metric);
204
- logger.debug("[FollowersRoute] /api/followers/unfollow - Success", {
205
- duration,
206
- status: response.status,
207
- userId: session.userId,
208
- });
209
- // Log slow requests
210
- if (duration > 1000) {
211
- logger.warn("[FollowersRoute] /api/followers/unfollow - Slow request", {
212
- duration,
213
- status: response.status,
214
- userId: session.userId,
215
- });
216
- }
217
- return securityHeaders.addSecurityHeaders(response);
218
- }
219
- catch (error) {
220
- const duration = Date.now() - endpointStartTime;
221
- // Record error metric
222
- const metricsCollector = (0, performance_metrics_1.getPerformanceMetricsCollector)(env);
223
- const metric = {
224
- endpoint: "/api/followers/unfollow",
225
- method: "POST",
226
- duration,
227
- status: 500,
228
- timestamp: Date.now(),
229
- userId: session?.userId,
230
- error: error?.message || String(error),
231
- };
232
- metricsCollector.recordEndpointMetric(metric);
233
- logger.error("[FollowersRoute] /api/followers/unfollow - Error", {
234
- duration,
235
- error: error?.message || String(error),
236
- userId: session?.userId,
237
- });
238
- return securityHeaders.createSecureResponse(JSON.stringify({ error: validator.sanitizeError(error) }), { status: 500, headers: { "content-type": "application/json" } });
239
- }
240
- },
241
- middleware: [(0, middleware_1.corsMiddleware)(), (0, middleware_1.csrfMiddleware)()],
242
- description: "Unfollow a user or dog",
243
- },
244
- {
245
- path: "/api/followers/following",
246
- method: "GET",
247
- handler: async (request, env, { requestContext }) => {
248
- const sessionManager = new session_manager_1.SessionManager();
249
- const securityHeaders = new security_headers_1.SecurityHeaders(env);
250
- const logger = logger_1.Logger.getInstance(env);
251
- const validator = new validation_1.Validator();
252
- const followersHandler = new followers_handler_1.FollowersHandler();
253
- const session = await sessionManager.getSession(request, secret_resolver_1.Secrets.getSessionSecret(env), env);
254
- if (!session) {
255
- return securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
256
- }
257
- try {
258
- const response = await followersHandler.handleGetFollowing(request, session, env, requestContext);
259
- return securityHeaders.addSecurityHeaders(response);
260
- }
261
- catch (error) {
262
- logger.error("Error getting following list:", error);
263
- return securityHeaders.createSecureResponse(JSON.stringify({ error: validator.sanitizeError(error) }), { status: 500, headers: { "content-type": "application/json" } });
264
- }
265
- },
266
- middleware: [(0, middleware_1.corsMiddleware)()],
267
- description: "Get following list",
268
- },
269
- {
270
- path: "/api/followers/followers",
271
- method: "GET",
272
- handler: async (request, env, { requestContext }) => {
273
- const sessionManager = new session_manager_1.SessionManager();
274
- const securityHeaders = new security_headers_1.SecurityHeaders(env);
275
- const logger = logger_1.Logger.getInstance(env);
276
- const validator = new validation_1.Validator();
277
- const followersHandler = new followers_handler_1.FollowersHandler();
278
- const session = await sessionManager.getSession(request, secret_resolver_1.Secrets.getSessionSecret(env), env);
279
- if (!session) {
280
- return securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
281
- }
282
- try {
283
- const response = await followersHandler.handleGetFollowers(request, session, env, requestContext);
284
- return securityHeaders.addSecurityHeaders(response);
285
- }
286
- catch (error) {
287
- logger.error("Error getting followers list:", error);
288
- return securityHeaders.createSecureResponse(JSON.stringify({ error: validator.sanitizeError(error) }), { status: 500, headers: { "content-type": "application/json" } });
289
- }
290
- },
291
- middleware: [(0, middleware_1.corsMiddleware)()],
292
- description: "Get followers list",
293
- },
294
- {
295
- path: "/api/followers/status",
296
- method: "GET",
297
- handler: async (request, env, { requestContext }) => {
298
- const sessionManager = new session_manager_1.SessionManager();
299
- const securityHeaders = new security_headers_1.SecurityHeaders(env);
300
- const logger = logger_1.Logger.getInstance(env);
301
- const validator = new validation_1.Validator();
302
- const followersHandler = new followers_handler_1.FollowersHandler();
303
- const session = await sessionManager.getSession(request, secret_resolver_1.Secrets.getSessionSecret(env), env);
304
- if (!session) {
305
- return securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
306
- }
307
- try {
308
- const response = await followersHandler.handleGetStatus(request, session, env, requestContext);
309
- return securityHeaders.addSecurityHeaders(response);
310
- }
311
- catch (error) {
312
- logger.error("Error getting follow status:", error);
313
- return securityHeaders.createSecureResponse(JSON.stringify({ error: validator.sanitizeError(error) }), { status: 500, headers: { "content-type": "application/json" } });
314
- }
315
- },
316
- middleware: [(0, middleware_1.corsMiddleware)()],
317
- description: "Check follow status",
318
- },
319
- {
320
- path: "/api/followers/count",
321
- method: "GET",
322
- handler: async (request, env, { requestContext }) => {
323
- const endpointStartTime = Date.now();
324
- const sessionManager = new session_manager_1.SessionManager();
325
- const securityHeaders = new security_headers_1.SecurityHeaders(env);
326
- const logger = logger_1.Logger.getInstance(env);
327
- const validator = new validation_1.Validator();
328
- const followersHandler = new followers_handler_1.FollowersHandler();
329
- const session = await sessionManager.getSession(request, secret_resolver_1.Secrets.getSessionSecret(env), env);
330
- if (!session) {
331
- const duration = Date.now() - endpointStartTime;
332
- logger.debug("[FollowersRoute] /api/followers/count - Unauthorized", {
333
- duration,
334
- status: 401,
335
- });
336
- return securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
337
- }
338
- try {
339
- const response = await followersHandler.handleGetCount(request, session, env, requestContext);
340
- const duration = Date.now() - endpointStartTime;
341
- const url = new URL(request.url);
342
- const targetType = url.searchParams.get("targetType");
343
- const targetId = url.searchParams.get("targetId");
344
- // Record performance metric
345
- const metricsCollector = (0, performance_metrics_1.getPerformanceMetricsCollector)(env);
346
- const metric = {
347
- endpoint: "/api/followers/count",
348
- method: "GET",
349
- duration,
350
- status: response.status,
351
- timestamp: Date.now(),
352
- userId: session.userId,
353
- };
354
- metricsCollector.recordEndpointMetric(metric);
355
- logger.debug("[FollowersRoute] /api/followers/count - Success", {
356
- duration,
357
- status: response.status,
358
- userId: session.userId,
359
- targetType,
360
- targetId,
361
- });
362
- // Log slow requests
363
- if (duration > 1000) {
364
- logger.warn("[FollowersRoute] /api/followers/count - Slow request", {
365
- duration,
366
- status: response.status,
367
- userId: session.userId,
368
- targetType,
369
- targetId,
370
- });
371
- }
372
- return securityHeaders.addSecurityHeaders(response);
373
- }
374
- catch (error) {
375
- const duration = Date.now() - endpointStartTime;
376
- const url = new URL(request.url);
377
- const targetType = url.searchParams.get("targetType");
378
- const targetId = url.searchParams.get("targetId");
379
- // Record error metric
380
- const metricsCollector = (0, performance_metrics_1.getPerformanceMetricsCollector)(env);
381
- const metric = {
382
- endpoint: "/api/followers/count",
383
- method: "GET",
384
- duration,
385
- status: 500,
386
- timestamp: Date.now(),
387
- userId: session?.userId,
388
- error: error?.message || String(error),
389
- };
390
- metricsCollector.recordEndpointMetric(metric);
391
- logger.error("[FollowersRoute] /api/followers/count - Error", {
392
- duration,
393
- error: error?.message || String(error),
394
- userId: session?.userId,
395
- targetType,
396
- targetId,
397
- });
398
- return securityHeaders.createSecureResponse(JSON.stringify({ error: validator.sanitizeError(error) }), { status: 500, headers: { "content-type": "application/json" } });
399
- }
400
- },
401
- middleware: [(0, middleware_1.corsMiddleware)()],
402
- description: "Get follow counts",
403
- },
404
- ];
405
- //# sourceMappingURL=followers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"followers.js","sourceRoot":"","sources":["../../../src/lib/routes/followers.ts"],"names":[],"mappings":"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"}