@kelpie/server 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 (182) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +14 -0
  3. package/dist/app.js.map +1 -1
  4. package/dist/index.d.ts +2 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +1 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/appUrl.d.ts +27 -0
  9. package/dist/lib/appUrl.d.ts.map +1 -0
  10. package/dist/lib/appUrl.js +53 -0
  11. package/dist/lib/appUrl.js.map +1 -0
  12. package/dist/lib/clientIp.d.ts +24 -0
  13. package/dist/lib/clientIp.d.ts.map +1 -0
  14. package/dist/lib/clientIp.js +34 -0
  15. package/dist/lib/clientIp.js.map +1 -0
  16. package/dist/lib/config.d.ts +11 -0
  17. package/dist/lib/config.d.ts.map +1 -1
  18. package/dist/lib/config.js +23 -12
  19. package/dist/lib/config.js.map +1 -1
  20. package/dist/lib/egress.d.ts +44 -0
  21. package/dist/lib/egress.d.ts.map +1 -0
  22. package/dist/lib/egress.js +111 -0
  23. package/dist/lib/egress.js.map +1 -0
  24. package/dist/lib/email.d.ts +53 -9
  25. package/dist/lib/email.d.ts.map +1 -1
  26. package/dist/lib/email.js +49 -4
  27. package/dist/lib/email.js.map +1 -1
  28. package/dist/lib/ids.d.ts +2 -0
  29. package/dist/lib/ids.d.ts.map +1 -1
  30. package/dist/lib/ids.js +2 -0
  31. package/dist/lib/ids.js.map +1 -1
  32. package/dist/lib/rateLimit.d.ts +12 -4
  33. package/dist/lib/rateLimit.d.ts.map +1 -1
  34. package/dist/lib/rateLimit.js +6 -0
  35. package/dist/lib/rateLimit.js.map +1 -1
  36. package/dist/modules/agent-tasks/dispatch.d.ts +4 -2
  37. package/dist/modules/agent-tasks/dispatch.d.ts.map +1 -1
  38. package/dist/modules/agent-tasks/dispatch.js +4 -2
  39. package/dist/modules/agent-tasks/dispatch.js.map +1 -1
  40. package/dist/modules/agent-tasks/index.d.ts.map +1 -1
  41. package/dist/modules/agent-tasks/index.js +3 -1
  42. package/dist/modules/agent-tasks/index.js.map +1 -1
  43. package/dist/modules/auth/index.d.ts.map +1 -1
  44. package/dist/modules/auth/index.js +10 -3
  45. package/dist/modules/auth/index.js.map +1 -1
  46. package/dist/modules/auth/repository.d.ts +13 -1
  47. package/dist/modules/auth/repository.d.ts.map +1 -1
  48. package/dist/modules/auth/repository.js +32 -1
  49. package/dist/modules/auth/repository.js.map +1 -1
  50. package/dist/modules/auth/routes.d.ts.map +1 -1
  51. package/dist/modules/auth/routes.js +29 -6
  52. package/dist/modules/auth/routes.js.map +1 -1
  53. package/dist/modules/auth/schema.d.ts +130 -0
  54. package/dist/modules/auth/schema.d.ts.map +1 -1
  55. package/dist/modules/auth/schema.js +16 -0
  56. package/dist/modules/auth/schema.js.map +1 -1
  57. package/dist/modules/auth/service.d.ts +7 -1
  58. package/dist/modules/auth/service.d.ts.map +1 -1
  59. package/dist/modules/auth/service.js +53 -4
  60. package/dist/modules/auth/service.js.map +1 -1
  61. package/dist/modules/deals/repository.d.ts.map +1 -1
  62. package/dist/modules/deals/repository.js +1 -0
  63. package/dist/modules/deals/repository.js.map +1 -1
  64. package/dist/modules/decisions/repository.d.ts.map +1 -1
  65. package/dist/modules/decisions/repository.js +8 -7
  66. package/dist/modules/decisions/repository.js.map +1 -1
  67. package/dist/modules/forms/index.d.ts.map +1 -1
  68. package/dist/modules/forms/index.js +6 -1
  69. package/dist/modules/forms/index.js.map +1 -1
  70. package/dist/modules/forms/publicRoutes.d.ts +3 -0
  71. package/dist/modules/forms/publicRoutes.d.ts.map +1 -1
  72. package/dist/modules/forms/publicRoutes.js +10 -4
  73. package/dist/modules/forms/publicRoutes.js.map +1 -1
  74. package/dist/modules/forms/submission.d.ts +3 -0
  75. package/dist/modules/forms/submission.d.ts.map +1 -1
  76. package/dist/modules/forms/submission.js +6 -0
  77. package/dist/modules/forms/submission.js.map +1 -1
  78. package/dist/modules/opportunities/repository.d.ts.map +1 -1
  79. package/dist/modules/opportunities/repository.js +1 -0
  80. package/dist/modules/opportunities/repository.js.map +1 -1
  81. package/dist/modules/partnerships/repository.d.ts.map +1 -1
  82. package/dist/modules/partnerships/repository.js +1 -0
  83. package/dist/modules/partnerships/repository.js.map +1 -1
  84. package/dist/modules/raises/repository.d.ts.map +1 -1
  85. package/dist/modules/raises/repository.js +1 -0
  86. package/dist/modules/raises/repository.js.map +1 -1
  87. package/dist/modules/rate-limit/middleware.d.ts +4 -4
  88. package/dist/modules/rate-limit/middleware.d.ts.map +1 -1
  89. package/dist/modules/rate-limit/middleware.js +57 -11
  90. package/dist/modules/rate-limit/middleware.js.map +1 -1
  91. package/dist/modules/webhooks/delivery.d.ts +5 -2
  92. package/dist/modules/webhooks/delivery.d.ts.map +1 -1
  93. package/dist/modules/webhooks/delivery.js +5 -2
  94. package/dist/modules/webhooks/delivery.js.map +1 -1
  95. package/dist/modules/webhooks/index.d.ts.map +1 -1
  96. package/dist/modules/webhooks/index.js +3 -1
  97. package/dist/modules/webhooks/index.js.map +1 -1
  98. package/dist/modules/workspace/idempotencyMiddleware.d.ts.map +1 -1
  99. package/dist/modules/workspace/idempotencyMiddleware.js +14 -1
  100. package/dist/modules/workspace/idempotencyMiddleware.js.map +1 -1
  101. package/dist/modules/workspace/index.d.ts.map +1 -1
  102. package/dist/modules/workspace/index.js +3 -0
  103. package/dist/modules/workspace/index.js.map +1 -1
  104. package/dist/modules/workspace/repository.d.ts +1 -1
  105. package/dist/modules/workspace/repository.d.ts.map +1 -1
  106. package/dist/modules/workspace/repository.js +15 -9
  107. package/dist/modules/workspace/repository.js.map +1 -1
  108. package/dist/modules/workspace/routes.d.ts +0 -4
  109. package/dist/modules/workspace/routes.d.ts.map +1 -1
  110. package/dist/modules/workspace/routes.js +2 -7
  111. package/dist/modules/workspace/routes.js.map +1 -1
  112. package/dist/modules/workspace/service.d.ts +4 -2
  113. package/dist/modules/workspace/service.d.ts.map +1 -1
  114. package/dist/modules/workspace/service.js +42 -17
  115. package/dist/modules/workspace/service.js.map +1 -1
  116. package/dist/modules/workspace/tools.d.ts.map +1 -1
  117. package/dist/modules/workspace/tools.js +6 -7
  118. package/dist/modules/workspace/tools.js.map +1 -1
  119. package/dist/operator.d.ts +40 -0
  120. package/dist/operator.d.ts.map +1 -0
  121. package/dist/operator.js +50 -0
  122. package/dist/operator.js.map +1 -0
  123. package/dist/runtime/module.d.ts +25 -1
  124. package/dist/runtime/module.d.ts.map +1 -1
  125. package/dist/runtime/registry.d.ts +16 -1
  126. package/dist/runtime/registry.d.ts.map +1 -1
  127. package/dist/runtime/registry.js +34 -0
  128. package/dist/runtime/registry.js.map +1 -1
  129. package/dist/testing/client.d.ts +3 -1
  130. package/dist/testing/client.d.ts.map +1 -1
  131. package/dist/testing/client.js +19 -2
  132. package/dist/testing/client.js.map +1 -1
  133. package/dist/testing/environment.d.ts +2 -0
  134. package/dist/testing/environment.d.ts.map +1 -1
  135. package/dist/testing/environment.js +3 -0
  136. package/dist/testing/environment.js.map +1 -1
  137. package/dist/webBundle.d.ts +8 -0
  138. package/dist/webBundle.d.ts.map +1 -1
  139. package/dist/webBundle.js +9 -7
  140. package/dist/webBundle.js.map +1 -1
  141. package/migrations/0018_hard_mystique.sql +12 -0
  142. package/migrations/meta/0018_snapshot.json +5113 -0
  143. package/migrations/meta/_journal.json +8 -1
  144. package/package.json +4 -2
  145. package/src/app.ts +16 -0
  146. package/src/index.ts +9 -1
  147. package/src/lib/appUrl.ts +64 -0
  148. package/src/lib/clientIp.ts +41 -0
  149. package/src/lib/config.ts +30 -12
  150. package/src/lib/egress.ts +149 -0
  151. package/src/lib/email.ts +75 -7
  152. package/src/lib/ids.ts +2 -0
  153. package/src/lib/rateLimit.ts +16 -4
  154. package/src/modules/agent-tasks/dispatch.ts +9 -2
  155. package/src/modules/agent-tasks/index.ts +3 -1
  156. package/src/modules/auth/index.ts +12 -5
  157. package/src/modules/auth/repository.ts +56 -1
  158. package/src/modules/auth/routes.ts +34 -6
  159. package/src/modules/auth/schema.ts +17 -0
  160. package/src/modules/auth/service.ts +78 -5
  161. package/src/modules/deals/repository.ts +1 -0
  162. package/src/modules/decisions/repository.ts +8 -7
  163. package/src/modules/forms/index.ts +6 -1
  164. package/src/modules/forms/publicRoutes.ts +14 -4
  165. package/src/modules/forms/submission.ts +10 -0
  166. package/src/modules/opportunities/repository.ts +1 -0
  167. package/src/modules/partnerships/repository.ts +1 -0
  168. package/src/modules/raises/repository.ts +1 -0
  169. package/src/modules/rate-limit/middleware.ts +74 -11
  170. package/src/modules/webhooks/delivery.ts +10 -2
  171. package/src/modules/webhooks/index.ts +3 -1
  172. package/src/modules/workspace/idempotencyMiddleware.ts +17 -1
  173. package/src/modules/workspace/index.ts +4 -0
  174. package/src/modules/workspace/repository.ts +15 -8
  175. package/src/modules/workspace/routes.ts +0 -8
  176. package/src/modules/workspace/service.ts +53 -20
  177. package/src/modules/workspace/tools.ts +7 -21
  178. package/src/runtime/module.ts +25 -1
  179. package/src/runtime/registry.ts +59 -1
  180. package/src/testing/client.ts +22 -2
  181. package/src/testing/environment.ts +4 -0
  182. package/src/webBundle.ts +21 -7
@@ -5,9 +5,15 @@ import type { Logger } from './logger.ts';
5
5
  * and account-change notifications, nothing else. Kelpie never sends outreach
6
6
  * email.
7
7
  *
8
- * Roadmap decision 4: the provider is configured, never hardcoded. Core ships the
9
- * port and the `log` provider. Real providers ship as modules, so the open-source
10
- * assembly has no vendor account baked into it.
8
+ * Roadmap decision 4: the provider is configured, never hardcoded. Core ships
9
+ * the port and two providers, `log` and `smtp`. Both need no vendor account a
10
+ * deployment doesn't already have, which is what keeps them in core rather than
11
+ * a module, per `modules.md`'s split test. A provider that does need one
12
+ * (Resend, Postmark, Mailtrap, SendGrid) is a commercial integration under that
13
+ * same test and belongs in a module: it supplies its own `EmailSender` from its
14
+ * own config, and an assembly's entry point wires it into `services.email` in
15
+ * place of `createEmailSender`, the same way `kelpie-cloud/src/server.ts` wires
16
+ * this one today.
11
17
  */
12
18
  export interface EmailMessage {
13
19
  readonly to: string;
@@ -17,13 +23,35 @@ export interface EmailMessage {
17
23
  export interface EmailSender {
18
24
  send(message: EmailMessage): Promise<void>;
19
25
  }
20
- export declare const emailConfigSchema: z.ZodObject<{
21
- EMAIL_PROVIDER: z.ZodEnum<{
22
- log: "log";
23
- }>;
26
+ declare const smtpEmailConfigSchema: z.ZodObject<{
27
+ EMAIL_PROVIDER: z.ZodLiteral<"smtp">;
24
28
  EMAIL_FROM: z.ZodString;
29
+ SMTP_HOST: z.ZodString;
30
+ SMTP_PORT: z.ZodCoercedNumber<unknown>;
31
+ SMTP_SECURE: z.ZodPipe<z.ZodEnum<{
32
+ false: "false";
33
+ true: "true";
34
+ }>, z.ZodTransform<boolean, "false" | "true">>;
35
+ SMTP_USER: z.ZodString;
36
+ SMTP_PASSWORD: z.ZodString;
25
37
  }, z.core.$strip>;
38
+ export declare const emailConfigSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
39
+ EMAIL_PROVIDER: z.ZodLiteral<"log">;
40
+ EMAIL_FROM: z.ZodString;
41
+ }, z.core.$strip>, z.ZodObject<{
42
+ EMAIL_PROVIDER: z.ZodLiteral<"smtp">;
43
+ EMAIL_FROM: z.ZodString;
44
+ SMTP_HOST: z.ZodString;
45
+ SMTP_PORT: z.ZodCoercedNumber<unknown>;
46
+ SMTP_SECURE: z.ZodPipe<z.ZodEnum<{
47
+ false: "false";
48
+ true: "true";
49
+ }>, z.ZodTransform<boolean, "false" | "true">>;
50
+ SMTP_USER: z.ZodString;
51
+ SMTP_PASSWORD: z.ZodString;
52
+ }, z.core.$strip>], "EMAIL_PROVIDER">;
26
53
  export type EmailConfig = z.infer<typeof emailConfigSchema>;
54
+ export type SmtpEmailConfig = z.infer<typeof smtpEmailConfigSchema>;
27
55
  /**
28
56
  * Writes the message to the log instead of sending it. For self-hosted
29
57
  * development, where the reset link in the log is exactly what you want.
@@ -32,11 +60,27 @@ export type EmailConfig = z.infer<typeof emailConfigSchema>;
32
60
  * so nobody reaches this provider without naming it.
33
61
  */
34
62
  export declare function createLogEmailSender(logger: Logger, from: string): EmailSender;
63
+ /**
64
+ * What `createSmtpEmailSender` sends a message through. A real deployment gets
65
+ * one backed by `nodemailer`; a test injects one that records calls, so the
66
+ * sender is verifiable without a container running a real SMTP conversation.
67
+ */
68
+ export interface SmtpTransport {
69
+ sendMail(message: {
70
+ from: string;
71
+ to: string;
72
+ subject: string;
73
+ text: string;
74
+ }): Promise<unknown>;
75
+ }
76
+ /** Sends over SMTP. `transport` defaults to a real connection built from `config`. */
77
+ export declare function createSmtpEmailSender(config: SmtpEmailConfig, logger: Logger, transport?: SmtpTransport): EmailSender;
35
78
  /**
36
79
  * Builds the configured sender.
37
80
  *
38
- * @throws Never. An unknown provider cannot reach here: the config schema is an
39
- * enum, so boot rejects it first.
81
+ * @throws Never. An unknown provider cannot reach here: the config schema is a
82
+ * discriminated union, so boot rejects it first.
40
83
  */
41
84
  export declare function createEmailSender(config: EmailConfig, logger: Logger): EmailSender;
85
+ export {};
42
86
  //# sourceMappingURL=email.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/lib/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC;;;;;;;;GAQG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3C;AAED,eAAO,MAAM,iBAAiB;;;;;iBAG5B,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAa9E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAKlF"}
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/lib/email.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3C;AAOD,QAAA,MAAM,qBAAqB;;;;;;;;;;;iBAQzB,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;qCAG5B,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAa9E;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACjG;AAWD,sFAAsF;AACtF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,aAAiD,GAC3D,WAAW,CAiBb;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAOlF"}
package/dist/lib/email.js CHANGED
@@ -1,8 +1,23 @@
1
+ import nodemailer from 'nodemailer';
1
2
  import { z } from 'zod';
2
- export const emailConfigSchema = z.object({
3
- EMAIL_PROVIDER: z.enum(['log']),
3
+ import { describeThrown } from './errors.js';
4
+ const logEmailConfigSchema = z.object({
5
+ EMAIL_PROVIDER: z.literal('log'),
4
6
  EMAIL_FROM: z.string().min(1),
5
7
  });
8
+ const smtpEmailConfigSchema = z.object({
9
+ EMAIL_PROVIDER: z.literal('smtp'),
10
+ EMAIL_FROM: z.string().min(1),
11
+ SMTP_HOST: z.string().min(1),
12
+ SMTP_PORT: z.coerce.number().int().positive().max(65535),
13
+ SMTP_SECURE: z.enum(['true', 'false']).transform((value) => value === 'true'),
14
+ SMTP_USER: z.string().min(1),
15
+ SMTP_PASSWORD: z.string().min(1),
16
+ });
17
+ export const emailConfigSchema = z.discriminatedUnion('EMAIL_PROVIDER', [
18
+ logEmailConfigSchema,
19
+ smtpEmailConfigSchema,
20
+ ]);
6
21
  /**
7
22
  * Writes the message to the log instead of sending it. For self-hosted
8
23
  * development, where the reset link in the log is exactly what you want.
@@ -23,16 +38,46 @@ export function createLogEmailSender(logger, from) {
23
38
  },
24
39
  };
25
40
  }
41
+ function createNodemailerTransport(config) {
42
+ return nodemailer.createTransport({
43
+ host: config.SMTP_HOST,
44
+ port: config.SMTP_PORT,
45
+ secure: config.SMTP_SECURE,
46
+ auth: { user: config.SMTP_USER, pass: config.SMTP_PASSWORD },
47
+ });
48
+ }
49
+ /** Sends over SMTP. `transport` defaults to a real connection built from `config`. */
50
+ export function createSmtpEmailSender(config, logger, transport = createNodemailerTransport(config)) {
51
+ return {
52
+ async send(message) {
53
+ try {
54
+ await transport.sendMail({
55
+ from: config.EMAIL_FROM,
56
+ to: message.to,
57
+ subject: message.subject,
58
+ text: message.body,
59
+ });
60
+ }
61
+ catch (cause) {
62
+ const reason = describeThrown(cause);
63
+ logger.error('smtp send failed', { to: message.to, reason });
64
+ throw new Error(`Failed to send email to ${message.to} over SMTP: ${reason}`, { cause });
65
+ }
66
+ },
67
+ };
68
+ }
26
69
  /**
27
70
  * Builds the configured sender.
28
71
  *
29
- * @throws Never. An unknown provider cannot reach here: the config schema is an
30
- * enum, so boot rejects it first.
72
+ * @throws Never. An unknown provider cannot reach here: the config schema is a
73
+ * discriminated union, so boot rejects it first.
31
74
  */
32
75
  export function createEmailSender(config, logger) {
33
76
  switch (config.EMAIL_PROVIDER) {
34
77
  case 'log':
35
78
  return createLogEmailSender(logger, config.EMAIL_FROM);
79
+ case 'smtp':
80
+ return createSmtpEmailSender(config, logger);
36
81
  }
37
82
  }
38
83
  //# sourceMappingURL=email.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/lib/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAwBvB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC9B,CAAC,CAAA;AAIF;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,IAAY;IAC/D,OAAO;QACL,IAAI,CAAC,OAAO;YACV,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE;gBAC/C,IAAI;gBACJ,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAA;YAEF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAC1B,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAmB,EAAE,MAAc;IACnE,QAAQ,MAAM,CAAC,cAAc,EAAE,CAAC;QAC9B,KAAK,KAAK;YACR,OAAO,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IAC1D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/lib/email.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AA6B5C,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC9B,CAAC,CAAA;AAEF,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;IACxD,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC;IAC7E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACjC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,kBAAkB,CAAC,gBAAgB,EAAE;IACtE,oBAAoB;IACpB,qBAAqB;CACtB,CAAC,CAAA;AAKF;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,IAAY;IAC/D,OAAO;QACL,IAAI,CAAC,OAAO;YACV,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE;gBAC/C,IAAI;gBACJ,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAA;YAEF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAC1B,CAAC;KACF,CAAA;AACH,CAAC;AAWD,SAAS,yBAAyB,CAAC,MAAuB;IACxD,OAAO,UAAU,CAAC,eAAe,CAAC;QAChC,IAAI,EAAE,MAAM,CAAC,SAAS;QACtB,IAAI,EAAE,MAAM,CAAC,SAAS;QACtB,MAAM,EAAE,MAAM,CAAC,WAAW;QAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE;KAC7D,CAAC,CAAA;AACJ,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,qBAAqB,CACnC,MAAuB,EACvB,MAAc,EACd,SAAS,GAAkB,yBAAyB,CAAC,MAAM,CAAC;IAE5D,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,OAAO;YAChB,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,QAAQ,CAAC;oBACvB,IAAI,EAAE,MAAM,CAAC,UAAU;oBACvB,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;iBACnB,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;gBACpC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;gBAC5D,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,EAAE,eAAe,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;YAC1F,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAmB,EAAE,MAAc;IACnE,QAAQ,MAAM,CAAC,cAAc,EAAE,CAAC;QAC9B,KAAK,KAAK;YACR,OAAO,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QACxD,KAAK,MAAM;YACT,OAAO,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChD,CAAC;AACH,CAAC"}
package/dist/lib/ids.d.ts CHANGED
@@ -7,6 +7,8 @@ export declare const idPrefixes: {
7
7
  readonly user: 'usr';
8
8
  readonly session: 'ses';
9
9
  readonly passwordResetToken: 'pwr';
10
+ /** Never returned over the wire either, for the same reason as `passwordResetToken`. */
11
+ readonly emailVerificationToken: 'evt';
10
12
  readonly teamMember: 'mem';
11
13
  readonly invite: 'inv';
12
14
  readonly apiKey: 'key';
@@ -1 +1 @@
1
- {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/lib/ids.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,UAAU;aACrB,SAAS,EAAE,IAAI;aACf,IAAI,EAAE,KAAK;aACX,OAAO,EAAE,KAAK;aACd,kBAAkB,EAAE,KAAK;aACzB,UAAU,EAAE,KAAK;aACjB,MAAM,EAAE,KAAK;aACb,MAAM,EAAE,KAAK;aACb,MAAM,EAAE,KAAK;aACb,OAAO,EAAE,KAAK;aACd,QAAQ,EAAE,KAAK;aACf,aAAa,EAAE,OAAO;aACtB,IAAI,EAAE,MAAM;aACZ,WAAW,EAAE,KAAK;aAClB,WAAW,EAAE,KAAK;aAClB,KAAK,EAAE,KAAK;aACZ,IAAI,EAAE,MAAM;aACZ,SAAS,EAAE,MAAM;aACjB,QAAQ,EAAE,MAAM;aAChB,QAAQ,EAAE,KAAK;aACf,IAAI,EAAE,MAAM;aACZ,QAAQ,EAAE,KAAK;aACf,YAAY,EAAE,IAAI;aAClB,IAAI,EAAE,MAAM;aACZ,SAAS,EAAE,IAAI;aACf,cAAc,EAAE,KAAK;aACrB,OAAO,EAAE,IAAI;IACb,8EAA8E;aAC9E,eAAe,EAAE,KAAK;aACtB,iBAAiB,EAAE,IAAI;aACvB,QAAQ,EAAE,KAAK;aACf,SAAS,EAAE,KAAK;IAChB,6FAA6F;aAC7F,aAAa,EAAE,MAAM;IACrB;;;;;OAKG;aACH,cAAc,EAAE,MAAM;IACtB;;;OAGG;aACH,eAAe,EAAE,IAAI;CACb,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,UAAU,CAAA;AAEhD,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,MAAM,CAAA;AAEpD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,YAAY,GAAE,MAAM,MAAa,GAAG,SAAS,CAE5E"}
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/lib/ids.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,UAAU;aACrB,SAAS,EAAE,IAAI;aACf,IAAI,EAAE,KAAK;aACX,OAAO,EAAE,KAAK;aACd,kBAAkB,EAAE,KAAK;IACzB,wFAAwF;aACxF,sBAAsB,EAAE,KAAK;aAC7B,UAAU,EAAE,KAAK;aACjB,MAAM,EAAE,KAAK;aACb,MAAM,EAAE,KAAK;aACb,MAAM,EAAE,KAAK;aACb,OAAO,EAAE,KAAK;aACd,QAAQ,EAAE,KAAK;aACf,aAAa,EAAE,OAAO;aACtB,IAAI,EAAE,MAAM;aACZ,WAAW,EAAE,KAAK;aAClB,WAAW,EAAE,KAAK;aAClB,KAAK,EAAE,KAAK;aACZ,IAAI,EAAE,MAAM;aACZ,SAAS,EAAE,MAAM;aACjB,QAAQ,EAAE,MAAM;aAChB,QAAQ,EAAE,KAAK;aACf,IAAI,EAAE,MAAM;aACZ,QAAQ,EAAE,KAAK;aACf,YAAY,EAAE,IAAI;aAClB,IAAI,EAAE,MAAM;aACZ,SAAS,EAAE,IAAI;aACf,cAAc,EAAE,KAAK;aACrB,OAAO,EAAE,IAAI;IACb,8EAA8E;aAC9E,eAAe,EAAE,KAAK;aACtB,iBAAiB,EAAE,IAAI;aACvB,QAAQ,EAAE,KAAK;aACf,SAAS,EAAE,KAAK;IAChB,6FAA6F;aAC7F,aAAa,EAAE,MAAM;IACrB;;;;;OAKG;aACH,cAAc,EAAE,MAAM;IACtB;;;OAGG;aACH,eAAe,EAAE,IAAI;CACb,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,UAAU,CAAA;AAEhD,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,MAAM,CAAA;AAEpD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,YAAY,GAAE,MAAM,MAAa,GAAG,SAAS,CAE5E"}
package/dist/lib/ids.js CHANGED
@@ -8,6 +8,8 @@ export const idPrefixes = {
8
8
  user: 'usr',
9
9
  session: 'ses',
10
10
  passwordResetToken: 'pwr',
11
+ /** Never returned over the wire either, for the same reason as `passwordResetToken`. */
12
+ emailVerificationToken: 'evt',
11
13
  teamMember: 'mem',
12
14
  invite: 'inv',
13
15
  apiKey: 'key',
@@ -1 +1 @@
1
- {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/lib/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,SAAS,EAAE,IAAI;IACf,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,KAAK;IACd,kBAAkB,EAAE,KAAK;IACzB,UAAU,EAAE,KAAK;IACjB,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,KAAK;IACf,aAAa,EAAE,OAAO;IACtB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,KAAK;IAClB,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,KAAK;IACf,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,KAAK;IACf,YAAY,EAAE,IAAI;IAClB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,IAAI;IACf,cAAc,EAAE,KAAK;IACrB,OAAO,EAAE,IAAI;IACb,8EAA8E;IAC9E,eAAe,EAAE,KAAK;IACtB,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,KAAK;IAChB,6FAA6F;IAC7F,aAAa,EAAE,MAAM;IACrB;;;;;OAKG;IACH,cAAc,EAAE,MAAM;IACtB;;;OAGG;IACH,eAAe,EAAE,IAAI;CACb,CAAA;AAMV;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,YAAY,GAAiB,IAAI;IAC/D,OAAO,CAAC,IAAgB,EAAU,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,EAAE,EAAE,CAAA;AAC9E,CAAC"}
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/lib/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,SAAS,EAAE,IAAI;IACf,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,KAAK;IACd,kBAAkB,EAAE,KAAK;IACzB,wFAAwF;IACxF,sBAAsB,EAAE,KAAK;IAC7B,UAAU,EAAE,KAAK;IACjB,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,KAAK;IACf,aAAa,EAAE,OAAO;IACtB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,KAAK;IAClB,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,KAAK;IACf,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,KAAK;IACf,YAAY,EAAE,IAAI;IAClB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,IAAI;IACf,cAAc,EAAE,KAAK;IACrB,OAAO,EAAE,IAAI;IACb,8EAA8E;IAC9E,eAAe,EAAE,KAAK;IACtB,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,KAAK;IAChB,6FAA6F;IAC7F,aAAa,EAAE,MAAM;IACrB;;;;;OAKG;IACH,cAAc,EAAE,MAAM;IACtB;;;OAGG;IACH,eAAe,EAAE,IAAI;CACb,CAAA;AAMV;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,YAAY,GAAiB,IAAI;IAC/D,OAAO,CAAC,IAAgB,EAAU,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,EAAE,EAAE,CAAA;AAC9E,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  /**
3
- * Budgets for the three request classes `api.md` rate-limits: public form
4
- * submissions, unauthenticated auth endpoints, and everything else under an
5
- * API key. Roadmap Phase 6: self-host packaging calls for this with nothing to
6
- * configure, so every variable here is optional and defaulted.
3
+ * Budgets for the request classes `api.md` rate-limits: public form submissions,
4
+ * unauthenticated auth endpoints by IP, login by account, and everything else
5
+ * under an API key. Roadmap Phase 6: self-host packaging calls for this with
6
+ * nothing to configure, so every variable here is optional and defaulted.
7
7
  */
8
8
  export interface RateLimitBudget {
9
9
  readonly limit: number;
@@ -12,6 +12,12 @@ export interface RateLimitBudget {
12
12
  export interface RateLimitConfig {
13
13
  readonly forms: RateLimitBudget;
14
14
  readonly auth: RateLimitBudget;
15
+ /**
16
+ * Login attempts for one email address, whatever IP they come from. The `auth`
17
+ * budget alone caps one IP, so a botnet spread across many addresses could
18
+ * still grind one account. This is the per-account half of that defence.
19
+ */
20
+ readonly loginAccount: RateLimitBudget;
15
21
  readonly api: RateLimitBudget;
16
22
  }
17
23
  export declare const rateLimitConfigSchema: z.ZodObject<{
@@ -19,6 +25,8 @@ export declare const rateLimitConfigSchema: z.ZodObject<{
19
25
  RATE_LIMIT_FORMS_WINDOW_SECONDS: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
20
26
  RATE_LIMIT_AUTH_LIMIT: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
21
27
  RATE_LIMIT_AUTH_WINDOW_SECONDS: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
28
+ RATE_LIMIT_LOGIN_ACCOUNT_LIMIT: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
29
+ RATE_LIMIT_LOGIN_ACCOUNT_WINDOW_SECONDS: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
22
30
  RATE_LIMIT_API_LIMIT: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
23
31
  RATE_LIMIT_API_WINDOW_SECONDS: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
24
32
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"rateLimit.d.ts","sourceRoot":"","sources":["../../src/lib/rateLimit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;GAKG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;IAC9B,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAA;CAC9B;AAED,eAAO,MAAM,qBAAqB;;;;;;;iBAOhC,CAAA;AAEF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,GAAG,eAAe,CAelG"}
1
+ {"version":3,"file":"rateLimit.d.ts","sourceRoot":"","sources":["../../src/lib/rateLimit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;GAKG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAA;IACtC,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAA;CAC9B;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;iBAShC,CAAA;AAEF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,GAAG,eAAe,CAmBlG"}
@@ -4,6 +4,8 @@ export const rateLimitConfigSchema = z.object({
4
4
  RATE_LIMIT_FORMS_WINDOW_SECONDS: z.coerce.number().int().positive().default(60),
5
5
  RATE_LIMIT_AUTH_LIMIT: z.coerce.number().int().positive().default(10),
6
6
  RATE_LIMIT_AUTH_WINDOW_SECONDS: z.coerce.number().int().positive().default(60),
7
+ RATE_LIMIT_LOGIN_ACCOUNT_LIMIT: z.coerce.number().int().positive().default(10),
8
+ RATE_LIMIT_LOGIN_ACCOUNT_WINDOW_SECONDS: z.coerce.number().int().positive().default(900),
7
9
  RATE_LIMIT_API_LIMIT: z.coerce.number().int().positive().default(600),
8
10
  RATE_LIMIT_API_WINDOW_SECONDS: z.coerce.number().int().positive().default(60),
9
11
  });
@@ -17,6 +19,10 @@ export function rateLimitConfigFrom(parsed) {
17
19
  limit: parsed.RATE_LIMIT_AUTH_LIMIT,
18
20
  windowMs: parsed.RATE_LIMIT_AUTH_WINDOW_SECONDS * 1000,
19
21
  },
22
+ loginAccount: {
23
+ limit: parsed.RATE_LIMIT_LOGIN_ACCOUNT_LIMIT,
24
+ windowMs: parsed.RATE_LIMIT_LOGIN_ACCOUNT_WINDOW_SECONDS * 1000,
25
+ },
20
26
  api: {
21
27
  limit: parsed.RATE_LIMIT_API_LIMIT,
22
28
  windowMs: parsed.RATE_LIMIT_API_WINDOW_SECONDS * 1000,
@@ -1 +1 @@
1
- {"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../src/lib/rateLimit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAoBvB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,sBAAsB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACtE,+BAA+B,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/E,qBAAqB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACrE,8BAA8B,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9E,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IACrE,6BAA6B,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CAC9E,CAAC,CAAA;AAEF,MAAM,UAAU,mBAAmB,CAAC,MAA6C;IAC/E,OAAO;QACL,KAAK,EAAE;YACL,KAAK,EAAE,MAAM,CAAC,sBAAsB;YACpC,QAAQ,EAAE,MAAM,CAAC,+BAA+B,GAAG,IAAI;SACxD;QACD,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC,qBAAqB;YACnC,QAAQ,EAAE,MAAM,CAAC,8BAA8B,GAAG,IAAI;SACvD;QACD,GAAG,EAAE;YACH,KAAK,EAAE,MAAM,CAAC,oBAAoB;YAClC,QAAQ,EAAE,MAAM,CAAC,6BAA6B,GAAG,IAAI;SACtD;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../src/lib/rateLimit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA0BvB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,sBAAsB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACtE,+BAA+B,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/E,qBAAqB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACrE,8BAA8B,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9E,8BAA8B,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9E,uCAAuC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IACxF,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IACrE,6BAA6B,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CAC9E,CAAC,CAAA;AAEF,MAAM,UAAU,mBAAmB,CAAC,MAA6C;IAC/E,OAAO;QACL,KAAK,EAAE;YACL,KAAK,EAAE,MAAM,CAAC,sBAAsB;YACpC,QAAQ,EAAE,MAAM,CAAC,+BAA+B,GAAG,IAAI;SACxD;QACD,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC,qBAAqB;YACnC,QAAQ,EAAE,MAAM,CAAC,8BAA8B,GAAG,IAAI;SACvD;QACD,YAAY,EAAE;YACZ,KAAK,EAAE,MAAM,CAAC,8BAA8B;YAC5C,QAAQ,EAAE,MAAM,CAAC,uCAAuC,GAAG,IAAI;SAChE;QACD,GAAG,EAAE;YACH,KAAK,EAAE,MAAM,CAAC,oBAAoB;YAClC,QAAQ,EAAE,MAAM,CAAC,6BAA6B,GAAG,IAAI;SACtD;KACF,CAAA;AACH,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { Database } from '../../lib/database.ts';
2
+ import type { EgressGuard } from '../../lib/egress.ts';
2
3
  import type { Logger } from '../../lib/logger.ts';
3
4
  import type { SecretCipher } from '../../lib/secrets.ts';
4
5
  import type { AgentRecord, RunRecord } from './repository.ts';
@@ -39,9 +40,10 @@ export type SendDispatch = (request: DispatchRequest) => Promise<DispatchOutcome
39
40
  * The catch is broad because this is the process boundary: `fetch` rejects
40
41
  * with anything from a DNS failure to an abort, and turning all of it into one
41
42
  * outcome is the port's whole job. Nothing is swallowed — the reason lands on
42
- * the run.
43
+ * the run. A blocked private address (`egress.check`) reaches the same catch
44
+ * and lands on the run the same way.
43
45
  */
44
- export declare function createHttpSender(fetchImplementation?: typeof fetch): SendDispatch;
46
+ export declare function createHttpSender(egress: EgressGuard, fetchImplementation?: typeof fetch): SendDispatch;
45
47
  export interface DispatchDependencies {
46
48
  readonly db: Database;
47
49
  readonly now: () => Date;
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/modules/agent-tasks/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAEjD;;;;;;;;;;;GAWG;AAEH,gFAAgF;AAChF,eAAO,MAAM,mBAAmB,QAAS,CAAA;AAEzC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACnD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B;AAED,mEAAmE;AACnE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;AAEjF;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,mBAAmB,GAAE,OAAO,KAAa,GAAG,YAAY,CAsBxF;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAA;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,IAAI,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACxF;AAED,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,oBAAoB,GAAG,cAAc,CA6FvF"}
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/modules/agent-tasks/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAEjD;;;;;;;;;;;GAWG;AAEH,gFAAgF;AAChF,eAAO,MAAM,mBAAmB,QAAS,CAAA;AAEzC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACnD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B;AAED,mEAAmE;AACnE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;AAEjF;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,mBAAmB,GAAE,OAAO,KAAa,GACxC,YAAY,CAwBd;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAA;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,IAAI,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACxF;AAED,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,oBAAoB,GAAG,cAAc,CA6FvF"}
@@ -24,11 +24,13 @@ export const DISPATCH_TIMEOUT_MS = 10_000;
24
24
  * The catch is broad because this is the process boundary: `fetch` rejects
25
25
  * with anything from a DNS failure to an abort, and turning all of it into one
26
26
  * outcome is the port's whole job. Nothing is swallowed — the reason lands on
27
- * the run.
27
+ * the run. A blocked private address (`egress.check`) reaches the same catch
28
+ * and lands on the run the same way.
28
29
  */
29
- export function createHttpSender(fetchImplementation = fetch) {
30
+ export function createHttpSender(egress, fetchImplementation = fetch) {
30
31
  return async (request) => {
31
32
  try {
33
+ await egress.check(request.url);
32
34
  const response = await fetchImplementation(request.url, {
33
35
  method: 'POST',
34
36
  body: request.body,
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../src/modules/agent-tasks/dispatch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAG3C;;;;;;;;;;;GAWG;AAEH,gFAAgF;AAChF,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAmBzC;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,mBAAmB,GAAiB,KAAK;IACxE,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE;gBACtD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC;aACjD,CAAC,CAAA;YAEF,OAAO,QAAQ,CAAC,EAAE;gBAChB,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;gBAC5D,CAAC,CAAC;oBACE,SAAS,EAAE,KAAK;oBAChB,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,MAAM,EAAE,2BAA2B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;iBAC7D,CAAA;QACP,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAA;QAC1E,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAmBD,MAAM,UAAU,oBAAoB,CAAC,YAAkC;IACrE,KAAK,UAAU,MAAM,CAAC,KAAa,EAAE,OAAwB;QAC3D,MAAM,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE;YACjD,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;YAClD,aAAa,EAAE,OAAO,CAAC,MAAM;YAC7B,SAAS,EAAE,YAAY,CAAC,GAAG,EAAE;SAC9B,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ;YACjC,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;oBAClD,MAAM,EAAE,SAAS;oBACjB,SAAS,EAAE,YAAY,CAAC,GAAG,EAAE;iBAC9B,CAAC,CAAA;gBAEF,IAAI,UAA8B,CAAA;gBAElC,IAAI,KAAK,CAAC,mBAAmB,KAAK,IAAI,EAAE,CAAC;oBACvC,IAAI,CAAC;wBACH,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;oBAClE,CAAC;oBAAC,OAAO,KAAc,EAAE,CAAC;wBACxB,IAAI,CAAC,CAAC,KAAK,YAAY,qBAAqB,CAAC,EAAE,CAAC;4BAC9C,MAAM,KAAK,CAAA;wBACb,CAAC;wBAED,+DAA+D;wBAC/D,mEAAmE;wBACnE,+CAA+C;wBAC/C,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,0CAA0C,EAAE;4BACjE,OAAO,EAAE,KAAK,CAAC,EAAE;4BACjB,KAAK,EAAE,GAAG,CAAC,EAAE;4BACb,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;yBAC7B,CAAC,CAAA;wBACF,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;4BACnB,SAAS,EAAE,KAAK;4BAChB,MAAM,EAAE,IAAI;4BACZ,MAAM,EACJ,wGAAwG;yBAC3G,CAAC,CAAA;wBAEF,OAAM;oBACR,CAAC;gBACH,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC;oBACtC,GAAG,EAAE,KAAK,CAAC,QAAQ;oBACnB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;oBACpD,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;qBACnE;iBACF,CAAC,CAAA;gBAEF,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;oBACvB,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE;wBAC7C,OAAO,EAAE,KAAK,CAAC,EAAE;wBACjB,KAAK,EAAE,GAAG,CAAC,EAAE;wBACb,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;wBACtB,MAAM,EAAE,OAAO,CAAC,MAAM;qBACvB,CAAC,CAAA;gBACJ,CAAC;gBAED,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YAC/B,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,uEAAuE;gBACvE,qEAAqE;gBACrE,gCAAgC;gBAChC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE;oBAC9D,OAAO,EAAE,KAAK,CAAC,EAAE;oBACjB,KAAK,EAAE,GAAG,CAAC,EAAE;oBACb,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;iBAC7B,CAAC,CAAA;gBAEF,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;wBACnB,SAAS,EAAE,KAAK;wBAChB,MAAM,EAAE,IAAI;wBACZ,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC;qBAC9B,CAAC,CAAA;gBACJ,CAAC;gBAAC,OAAO,WAAoB,EAAE,CAAC;oBAC9B,mEAAmE;oBACnE,+DAA+D;oBAC/D,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE;wBACvD,KAAK,EAAE,GAAG,CAAC,EAAE;wBACb,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC;qBACnC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../src/modules/agent-tasks/dispatch.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/agent-tasks/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAKjD;;;;;;;;GAQG;AACH,MAAM,WAAW,uBAAuB;IACtC,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAA;CAC7B;AAED,wBAAgB,sBAAsB,CACpC,mBAAmB,EAAE,MAAM,EAC3B,OAAO,GAAE,uBAA4B,GACpC,YAAY,CAqDd"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/agent-tasks/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAKjD;;;;;;;;GAQG;AACH,MAAM,WAAW,uBAAuB;IACtC,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAA;CAC7B;AAED,wBAAgB,sBAAsB,CACpC,mBAAmB,EAAE,MAAM,EAC3B,OAAO,GAAE,uBAA4B,GACpC,YAAY,CAsDd"}
@@ -1,3 +1,4 @@
1
+ import { createEgressGuard, egressConfigSchema } from '../../lib/egress.js';
1
2
  import { createSecretCipher, secretEncryptionConfigSchema } from '../../lib/secrets.js';
2
3
  import { createDispatchEngine, createHttpSender } from './dispatch.js';
3
4
  import { mountAgentTasksRoutes } from './routes.js';
@@ -27,11 +28,12 @@ export function createAgentTasksModule(migrationsDirectory, options = {}) {
27
28
  // key means no stored auth header can ever be read back, and finding that
28
29
  // out when a dispatch quietly fails is far too late.
29
30
  const cipher = createSecretCipher(context.config(secretEncryptionConfigSchema));
31
+ const egress = createEgressGuard(context.config(egressConfigSchema));
30
32
  const engine = createDispatchEngine({
31
33
  db: context.db,
32
34
  now: context.now,
33
35
  cipher,
34
- send: options.send ?? createHttpSender(),
36
+ send: options.send ?? createHttpSender(egress),
35
37
  log: context.log,
36
38
  });
37
39
  const service = createAgentTasksService({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/agent-tasks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;AAEvF,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAgBtD,MAAM,UAAU,sBAAsB,CACpC,mBAA2B,EAC3B,OAAO,GAA4B,EAAE;IAErC,OAAO;QACL,EAAE,EAAE,aAAa;QACjB,QAAQ,EAAE;YACR,WAAW;YACX,QAAQ;YACR,WAAW;YACX,WAAW;YACX,WAAW;YACX,OAAO;YACP,eAAe;YACf,cAAc;YACd,QAAQ;YACR,QAAQ;YACR,OAAO;YACP,WAAW;YACX,OAAO;YACP,UAAU;SACX;QAED,QAAQ,CAAC,OAAO;YACd,yEAAyE;YACzE,0EAA0E;YAC1E,qDAAqD;YACrD,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAA;YAE/E,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,MAAM;gBACN,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,gBAAgB,EAAE;gBACxC,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAA;YAEF,MAAM,OAAO,GAAG,uBAAuB,CAAC;gBACtC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,MAAM;gBACN,MAAM;gBACN,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAA;YAEF,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;YAE3C,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;gBACxB,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;YAC9E,CAAC,CAAC,CAAA;YAEF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAC1B,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/agent-tasks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;AAEvF,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAgBtD,MAAM,UAAU,sBAAsB,CACpC,mBAA2B,EAC3B,OAAO,GAA4B,EAAE;IAErC,OAAO;QACL,EAAE,EAAE,aAAa;QACjB,QAAQ,EAAE;YACR,WAAW;YACX,QAAQ;YACR,WAAW;YACX,WAAW;YACX,WAAW;YACX,OAAO;YACP,eAAe;YACf,cAAc;YACd,QAAQ;YACR,QAAQ;YACR,OAAO;YACP,WAAW;YACX,OAAO;YACP,UAAU;SACX;QAED,QAAQ,CAAC,OAAO;YACd,yEAAyE;YACzE,0EAA0E;YAC1E,qDAAqD;YACrD,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAA;YAC/E,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAA;YAEpE,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,MAAM;gBACN,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;gBAC9C,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAA;YAEF,MAAM,OAAO,GAAG,uBAAuB,CAAC;gBACtC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,MAAM;gBACN,MAAM;gBACN,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAA;YAEF,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;YAE3C,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;gBACxB,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;YAC9E,CAAC,CAAC,CAAA;YAEF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAC1B,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/auth/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAiB3D,wBAAgB,gBAAgB,CAAC,mBAAmB,EAAE,MAAM,GAAG,YAAY,CA6B1E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/auth/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAmB3D,wBAAgB,gBAAgB,CAAC,mBAAmB,EAAE,MAAM,GAAG,YAAY,CAiC1E"}
@@ -1,4 +1,5 @@
1
1
  import { z } from 'zod';
2
+ import { appUrlConfigSchema } from '../../lib/appUrl.js';
2
3
  import { mountAuthRoutes } from './routes.js';
3
4
  import * as schema from './schema.js';
4
5
  import { createAuthService } from './service.js';
@@ -8,10 +9,12 @@ import { createAuthService } from './service.js';
8
9
  * Registers before `workspace`, because `workspace_members.user_id` references
9
10
  * `users`.
10
11
  */
11
- const authConfigSchema = z.object({
12
+ const authConfigSchema = z
13
+ .object({
12
14
  /** Cookies go out `Secure` everywhere except development. */
13
15
  NODE_ENV: z.enum(['development', 'test', 'production']),
14
- });
16
+ })
17
+ .merge(appUrlConfigSchema);
15
18
  export function createAuthModule(migrationsDirectory) {
16
19
  return {
17
20
  id: 'auth',
@@ -24,6 +27,7 @@ export function createAuthModule(migrationsDirectory) {
24
27
  email: context.email,
25
28
  createId: context.createId,
26
29
  now: context.now,
30
+ appBaseUrl: config.APP_BASE_URL,
27
31
  });
28
32
  context.schema(schema, migrationsDirectory);
29
33
  context.routes((router) => {
@@ -31,7 +35,10 @@ export function createAuthModule(migrationsDirectory) {
31
35
  db: context.db,
32
36
  now: context.now,
33
37
  service,
34
- cookie: { secure: config.NODE_ENV === 'production' },
38
+ // `Secure` everywhere except development. A test host reaches the API
39
+ // over http through a test client, which stores the cookie regardless
40
+ // of the flag, so test is not excluded.
41
+ cookie: { secure: config.NODE_ENV !== 'development' },
35
42
  });
36
43
  });
37
44
  return Promise.resolve();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEhD;;;;;GAKG;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,6DAA6D;IAC7D,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;CACxD,CAAC,CAAA;AAEF,MAAM,UAAU,gBAAgB,CAAC,mBAA2B;IAC1D,OAAO;QACL,EAAE,EAAE,MAAM;QACV,UAAU,EAAE,IAAI;QAEhB,QAAQ,CAAC,OAAO;YACd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;YAC/C,MAAM,OAAO,GAAG,iBAAiB,CAAC;gBAChC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAA;YAEF,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;YAE3C,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;gBACxB,eAAe,CAAC,MAAM,EAAE;oBACtB,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,OAAO;oBACP,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,KAAK,YAAY,EAAE;iBACrD,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAC1B,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEhD;;;;;GAKG;AAEH,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,6DAA6D;IAC7D,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;CACxD,CAAC;KACD,KAAK,CAAC,kBAAkB,CAAC,CAAA;AAE5B,MAAM,UAAU,gBAAgB,CAAC,mBAA2B;IAC1D,OAAO;QACL,EAAE,EAAE,MAAM;QACV,UAAU,EAAE,IAAI;QAEhB,QAAQ,CAAC,OAAO;YACd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;YAC/C,MAAM,OAAO,GAAG,iBAAiB,CAAC;gBAChC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,UAAU,EAAE,MAAM,CAAC,YAAY;aAChC,CAAC,CAAA;YAEF,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;YAE3C,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;gBACxB,eAAe,CAAC,MAAM,EAAE;oBACtB,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,OAAO;oBACP,sEAAsE;oBACtE,sEAAsE;oBACtE,wCAAwC;oBACxC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,KAAK,aAAa,EAAE;iBACtD,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAC1B,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { Database } from '../../lib/database.ts';
2
2
  import type { Transaction } from '../../runtime/transaction.ts';
3
3
  import { workspaceMembers } from '../workspace/schema.ts';
4
- import { passwordResetTokens, sessions, userPreferences, users } from './schema.ts';
4
+ import { emailVerificationTokens, passwordResetTokens, sessions, userPreferences, users } from './schema.ts';
5
5
  /**
6
6
  * Drizzle queries for accounts and sessions. No business logic: the service
7
7
  * decides, these read and write.
@@ -47,6 +47,18 @@ export declare function insertPasswordResetToken(db: Queryable, values: typeof p
47
47
  /** Unused and unexpired. A used or stale token is not a token. */
48
48
  export declare function findUsablePasswordResetToken(db: Queryable, tokenHash: string, now: Date): Promise<typeof passwordResetTokens.$inferSelect | undefined>;
49
49
  export declare function markPasswordResetTokenUsed(db: Queryable, id: string, now: Date): Promise<void>;
50
+ export declare function insertEmailVerificationToken(db: Queryable, values: typeof emailVerificationTokens.$inferInsert): Promise<void>;
51
+ /** Unused and unexpired. A used or stale token is not a token. */
52
+ export declare function findUsableEmailVerificationToken(db: Queryable, tokenHash: string, now: Date): Promise<typeof emailVerificationTokens.$inferSelect | undefined>;
53
+ export declare function markEmailVerificationTokenUsed(db: Queryable, id: string, now: Date): Promise<void>;
54
+ /**
55
+ * Sets `email_verified_at` if it is not already set.
56
+ *
57
+ * Guarded in the `WHERE` clause rather than read-then-write, so accepting a
58
+ * second invite or confirming a stale token after the account is already
59
+ * verified is a no-op instead of overwriting the original verification time.
60
+ */
61
+ export declare function markEmailVerified(db: Queryable, userId: string, now: Date): Promise<void>;
50
62
  /** The membership a session's active workspace resolves to, if any. */
51
63
  export declare function findMembership(db: Queryable, workspaceId: string, userId: string): Promise<typeof workspaceMembers.$inferSelect | undefined>;
52
64
  /** The workspace a returning user lands in when their session has no active one. */
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/modules/auth/repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/modules/auth/repository.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { and, desc, eq, gt, isNull, ne } from 'drizzle-orm';
2
2
  import { workspaceMembers } from '../workspace/schema.js';
3
- import { passwordResetTokens, sessions, userPreferences, users } from './schema.js';
3
+ import { emailVerificationTokens, passwordResetTokens, sessions, userPreferences, users, } from './schema.js';
4
4
  export async function findUserByEmail(db, email) {
5
5
  const [found] = await db.select().from(users).where(eq(users.email, email)).limit(1);
6
6
  return found;
@@ -115,6 +115,37 @@ export async function markPasswordResetTokenUsed(db, id, now) {
115
115
  .set({ usedAt: now })
116
116
  .where(eq(passwordResetTokens.id, id));
117
117
  }
118
+ export async function insertEmailVerificationToken(db, values) {
119
+ await db.insert(emailVerificationTokens).values(values);
120
+ }
121
+ /** Unused and unexpired. A used or stale token is not a token. */
122
+ export async function findUsableEmailVerificationToken(db, tokenHash, now) {
123
+ const [found] = await db
124
+ .select()
125
+ .from(emailVerificationTokens)
126
+ .where(and(eq(emailVerificationTokens.tokenHash, tokenHash), isNull(emailVerificationTokens.usedAt), gt(emailVerificationTokens.expiresAt, now)))
127
+ .limit(1);
128
+ return found;
129
+ }
130
+ export async function markEmailVerificationTokenUsed(db, id, now) {
131
+ await db
132
+ .update(emailVerificationTokens)
133
+ .set({ usedAt: now })
134
+ .where(eq(emailVerificationTokens.id, id));
135
+ }
136
+ /**
137
+ * Sets `email_verified_at` if it is not already set.
138
+ *
139
+ * Guarded in the `WHERE` clause rather than read-then-write, so accepting a
140
+ * second invite or confirming a stale token after the account is already
141
+ * verified is a no-op instead of overwriting the original verification time.
142
+ */
143
+ export async function markEmailVerified(db, userId, now) {
144
+ await db
145
+ .update(users)
146
+ .set({ emailVerifiedAt: now })
147
+ .where(and(eq(users.id, userId), isNull(users.emailVerifiedAt)));
148
+ }
118
149
  /** The membership a session's active workspace resolves to, if any. */
119
150
  export async function findMembership(db, workspaceId, userId) {
120
151
  const [found] = await db
@@ -1 +1 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/modules/auth/repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/modules/auth/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAI3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,QAAQ,EACR,eAAe,EACf,KAAK,GACN,MAAM,aAAa,CAAA;AAiBpB,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAa,EAAE,KAAa;IAChE,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAEpF,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAa,EAAE,MAAc;IAC9D,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAElF,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAa,EAAE,MAAiC;IAC/E,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAA;IAEnE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,kBAAkB,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAa,EACb,MAAc,EACd,YAAoB,EACpB,GAAS;IAET,MAAM,EAAE;SACL,MAAM,CAAC,KAAK,CAAC;SACb,GAAG,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;SACrC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAA;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAa,EACb,MAAc,EACd,OAA4D,EAC5D,GAAS;IAET,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE;SACvB,MAAM,CAAC,KAAK,CAAC;SACb,GAAG,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;SACnC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;SAC3B,SAAS,EAAE,CAAA;IAEd,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,EAAa,EACb,MAAc;IAEd,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE;SACrB,MAAM,EAAE;SACR,IAAI,CAAC,eAAe,CAAC;SACrB,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACzC,KAAK,CAAC,CAAC,CAAC,CAAA;IAEX,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAa,EACb,MAA2C;IAE3C,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE;SACrB,MAAM,CAAC,eAAe,CAAC;SACvB,MAAM,CAAC,MAAM,CAAC;SACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;SACnE,SAAS,EAAE,CAAA;IAEd,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,MAAM,kBAAkB,CAAC,CAAA;IAC/E,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAa,EACb,MAAoC;IAEpC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAA;IAEtE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAA;IACnE,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,EAAa,EACb,SAAiB,EACjB,GAAS;IAET,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE;SACrB,MAAM,EAAE;SACR,IAAI,CAAC,QAAQ,CAAC;SACd,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;SAC1E,KAAK,CAAC,CAAC,CAAC,CAAA;IAEX,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EAAa,EAAE,MAAc;IACrE,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAA;AAC3G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAa,EAAE,SAAiB,EAAE,GAAS;IAC5E,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAA;AACxF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAa,EAAE,MAAc,EAAE,SAAiB;IAClF,MAAM,OAAO,GAAG,MAAM,EAAE;SACrB,MAAM,CAAC,QAAQ,CAAC;SAChB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SACnE,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAA;IAEjC,OAAO,OAAO,CAAC,MAAM,CAAA;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,EAAa,EAAE,MAAc;IAC1E,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAC9D,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,EAAa,EACb,MAAc,EACd,aAAqB;IAErB,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;AACnG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAa,EACb,SAAiB,EACjB,WAAmB;IAEnB,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAA;AACrG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,EAAa,EACb,MAA+C;IAE/C,MAAM,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACrD,CAAC;AAED,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,EAAa,EACb,SAAiB,EACjB,GAAS;IAET,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE;SACrB,MAAM,EAAE;SACR,IAAI,CAAC,mBAAmB,CAAC;SACzB,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,EAC5C,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAClC,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,CACvC,CACF;SACA,KAAK,CAAC,CAAC,CAAC,CAAA;IAEX,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,EAAa,EAAE,EAAU,EAAE,GAAS;IACnF,MAAM,EAAE;SACL,MAAM,CAAC,mBAAmB,CAAC;SAC3B,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;SACpB,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,EAAa,EACb,MAAmD;IAEnD,MAAM,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACzD,CAAC;AAED,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,EAAa,EACb,SAAiB,EACjB,GAAS;IAET,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE;SACrB,MAAM,EAAE;SACR,IAAI,CAAC,uBAAuB,CAAC;SAC7B,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,uBAAuB,CAAC,SAAS,EAAE,SAAS,CAAC,EAChD,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,EACtC,EAAE,CAAC,uBAAuB,CAAC,SAAS,EAAE,GAAG,CAAC,CAC3C,CACF;SACA,KAAK,CAAC,CAAC,CAAC,CAAA;IAEX,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,EAAa,EAAE,EAAU,EAAE,GAAS;IACvF,MAAM,EAAE;SACL,MAAM,CAAC,uBAAuB,CAAC;SAC/B,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;SACpB,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAa,EAAE,MAAc,EAAE,GAAS;IAC9E,MAAM,EAAE;SACL,MAAM,CAAC,KAAK,CAAC;SACb,GAAG,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC;SAC7B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;AACpE,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAa,EACb,WAAmB,EACnB,MAAc;IAEd,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE;SACrB,MAAM,EAAE;SACR,IAAI,CAAC,gBAAgB,CAAC;SACtB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SAC9F,KAAK,CAAC,CAAC,CAAC,CAAA;IAEX,OAAO,KAAK,CAAA;AACd,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAa,EACb,MAAc;IAEd,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE;SACrB,MAAM,EAAE;SACR,IAAI,CAAC,gBAAgB,CAAC;SACtB,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAC1C,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC;SAClC,KAAK,CAAC,CAAC,CAAC,CAAA;IAEX,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/modules/auth/routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,MAAM,CAAA;AAQzC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAE9D,OAAO,KAAK,EAAe,WAAW,EAA8B,MAAM,cAAc,CAAA;AAExF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAwDxD,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB;IACpE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;CACtC;AAsDD,wBAAgB,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,sBAAsB,GAAG,IAAI,CAwHxF"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/modules/auth/routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,MAAM,CAAA;AAQzC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAE9D,OAAO,KAAK,EAAe,WAAW,EAA8B,MAAM,cAAc,CAAA;AAExF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AA0DxD,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB;IACpE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;CACtC;AA2DD,wBAAgB,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,sBAAsB,GAAG,IAAI,CA6IxF"}