paracosm 0.9.1021 → 0.9.1024

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 (38) hide show
  1. package/README.md +12 -11
  2. package/assets/landing.css +1 -533
  3. package/dist/dashboard/dist/assets/{index-YkbFYo4m.js → index-Da6eIzNW.js} +2 -2
  4. package/dist/dashboard/dist/assets/{pdf-D0rlhCn8.js → pdf-CdfMQ2jQ.js} +1 -1
  5. package/dist/dashboard/dist/index.html +1 -1
  6. package/dist/dashboard/dist/llms-full.txt +5 -7
  7. package/dist/dashboard/dist/llms.txt +2 -0
  8. package/dist/dashboard/dist/sitemap.xml +7 -27
  9. package/dist/dashboard/landing.html +35 -292
  10. package/dist/server/rate-limiter.d.ts +0 -9
  11. package/dist/server/rate-limiter.d.ts.map +1 -1
  12. package/dist/server/rate-limiter.js +0 -36
  13. package/dist/server/rate-limiter.js.map +1 -1
  14. package/dist/server/routes/waitlist.d.ts +15 -19
  15. package/dist/server/routes/waitlist.d.ts.map +1 -1
  16. package/dist/server/routes/waitlist.js +5 -107
  17. package/dist/server/routes/waitlist.js.map +1 -1
  18. package/dist/server/server-app.d.ts +1 -1
  19. package/dist/server/server-app.d.ts.map +1 -1
  20. package/dist/server/server-app.js +28 -27
  21. package/dist/server/server-app.js.map +1 -1
  22. package/dist/server/services/email-templates.d.ts +4 -11
  23. package/dist/server/services/email-templates.d.ts.map +1 -1
  24. package/dist/server/services/email-templates.js +4 -70
  25. package/dist/server/services/email-templates.js.map +1 -1
  26. package/dist/server/stores/session.d.ts +6 -4
  27. package/dist/server/stores/session.d.ts.map +1 -1
  28. package/dist/server/stores/session.js +5 -3
  29. package/dist/server/stores/session.js.map +1 -1
  30. package/dist/server/stores/sqlite-run-history.d.ts +8 -12
  31. package/dist/server/stores/sqlite-run-history.d.ts.map +1 -1
  32. package/dist/server/stores/sqlite-run-history.js +6 -6
  33. package/dist/server/stores/sqlite-run-history.js.map +1 -1
  34. package/dist/server/stores/waitlist.d.ts +9 -6
  35. package/dist/server/stores/waitlist.d.ts.map +1 -1
  36. package/dist/server/stores/waitlist.js +8 -5
  37. package/dist/server/stores/waitlist.js.map +1 -1
  38. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/server/rate-limiter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/server/rate-limiter.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,16 @@
1
- import type { IncomingMessage, ServerResponse } from 'node:http';
2
- import { type WaitlistStore } from '../stores/waitlist.js';
3
- import type { SendEmailParams } from '../services/email.js';
4
- export interface RateLimitDecisionLike {
5
- allowed: boolean;
6
- remaining: number;
7
- resetAt: number;
8
- limit: number;
9
- }
10
- export interface WaitlistRouteDeps {
11
- waitlistStore: WaitlistStore;
12
- sendEmail: (params: SendEmailParams) => Promise<boolean>;
13
- rateLimiter: {
14
- consumeWaitlist: (ip: string) => RateLimitDecisionLike;
15
- getClientIp: (req: IncomingMessage) => string;
16
- };
17
- waitlistFrom: string;
18
- }
19
- export declare function handleWaitlist(req: IncomingMessage, res: ServerResponse, rawBody: string, deps: WaitlistRouteDeps): Promise<void>;
1
+ /**
2
+ * POST /api/waitlist handler. The landing-page waitlist is closed: the
3
+ * route answers 410 Gone with `{ error: 'waitlist_closed' }` and stores
4
+ * nothing. The signups collected while it was open stay in the waitlist
5
+ * store (`../stores/waitlist.ts`), where
6
+ * `scripts/send-waitlist-broadcast.ts` reads them.
7
+ *
8
+ * @module paracosm/cli/server/waitlist-route
9
+ */
10
+ import type { ServerResponse } from 'node:http';
11
+ /**
12
+ * Answers a waitlist signup with 410 Gone. It reads no request body,
13
+ * sends no email and never opens the waitlist store.
14
+ */
15
+ export declare function handleWaitlistClosed(res: ServerResponse): void;
20
16
  //# sourceMappingURL=waitlist.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"waitlist.d.ts","sourceRoot":"","sources":["../../../src/server/routes/waitlist.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,KAAK,aAAa,EAAuB,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAiC5D,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,WAAW,EAAE;QACX,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,qBAAqB,CAAC;QACvD,WAAW,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,CAAC;KAC/C,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;CACtB;AAOD,wBAAsB,cAAc,CAClC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAiEf"}
1
+ {"version":3,"file":"waitlist.d.ts","sourceRoot":"","sources":["../../../src/server/routes/waitlist.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAG9D"}
@@ -1,111 +1,9 @@
1
1
  /**
2
- * POST /api/waitlist handler. Validates payload, rate-limits per IP,
3
- * inserts into the waitlist store, fires confirmation email
4
- * best-effort. Returns the user's position. Email is awaited so we
5
- * can report `emailSent` accurately to the client; the await never
6
- * throws because `sendEmail` swallows all errors.
7
- *
8
- * @module paracosm/cli/server/waitlist-route
2
+ * Answers a waitlist signup with 410 Gone. It reads no request body,
3
+ * sends no email and never opens the waitlist store.
9
4
  */
10
- import { z } from 'zod';
11
- import { WAITLIST_USER_TYPES } from '../stores/waitlist.js';
12
- import { renderWaitlistConfirmation } from '../services/email-templates.js';
13
- const WaitlistBodySchema = z.object({
14
- email: z.string().trim().toLowerCase().email().max(254),
15
- name: z
16
- .string()
17
- .trim()
18
- .max(120)
19
- .optional()
20
- .or(z.literal('').transform(() => undefined)),
21
- useCase: z
22
- .string()
23
- .trim()
24
- .max(2000)
25
- .optional()
26
- .or(z.literal('').transform(() => undefined)),
27
- source: z
28
- .string()
29
- .trim()
30
- .max(40)
31
- .regex(/^[a-zA-Z0-9_-]+$/)
32
- .optional()
33
- .or(z.literal('').transform(() => undefined)),
34
- // Self-classification ('hobbyist' if omitted). Strict enum so the column
35
- // never receives unexpected values; the store enforces the same set.
36
- userType: z
37
- .enum(WAITLIST_USER_TYPES)
38
- .optional()
39
- .or(z.literal('').transform(() => undefined))
40
- .default('hobbyist'),
41
- });
42
- function jsonResponse(res, status, body) {
43
- res.writeHead(status, { 'Content-Type': 'application/json' });
44
- res.end(JSON.stringify(body));
45
- }
46
- export async function handleWaitlist(req, res, rawBody, deps) {
47
- let parsed;
48
- try {
49
- parsed = WaitlistBodySchema.safeParse(JSON.parse(rawBody || '{}'));
50
- }
51
- catch {
52
- jsonResponse(res, 400, { error: 'Invalid JSON' });
53
- return;
54
- }
55
- if (!parsed.success) {
56
- jsonResponse(res, 400, {
57
- error: 'Invalid payload',
58
- issues: parsed.error.issues.map((i) => ({ path: i.path, message: i.message })),
59
- });
60
- return;
61
- }
62
- const ip = deps.rateLimiter.getClientIp(req);
63
- const decision = deps.rateLimiter.consumeWaitlist(ip);
64
- if (!decision.allowed) {
65
- jsonResponse(res, 429, {
66
- error: 'Already submitted recently. Try again in a few minutes.',
67
- });
68
- return;
69
- }
70
- const { email, name, useCase, source, userType } = parsed.data;
71
- let result;
72
- try {
73
- result = await deps.waitlistStore.insertOrGetExisting({
74
- email,
75
- name: name ?? null,
76
- useCase: useCase ?? null,
77
- source: source ?? null,
78
- userType,
79
- ip,
80
- });
81
- }
82
- catch (err) {
83
- console.error('[waitlist] store insert failed:', err);
84
- jsonResponse(res, 500, { error: 'Waitlist insert failed' });
85
- return;
86
- }
87
- let emailSent = false;
88
- if (!result.alreadyExisted) {
89
- const rendered = renderWaitlistConfirmation({
90
- email,
91
- name: name ?? null,
92
- position: result.position,
93
- useCase: useCase ?? null,
94
- });
95
- emailSent = await deps.sendEmail({
96
- from: deps.waitlistFrom,
97
- to: email,
98
- subject: rendered.subject,
99
- html: rendered.html,
100
- text: rendered.text,
101
- replyTo: 'team@frame.dev',
102
- });
103
- }
104
- jsonResponse(res, 200, {
105
- ok: true,
106
- position: result.position,
107
- alreadyOnList: result.alreadyExisted,
108
- emailSent,
109
- });
5
+ export function handleWaitlistClosed(res) {
6
+ res.writeHead(410, { 'Content-Type': 'application/json' });
7
+ res.end(JSON.stringify({ error: 'waitlist_closed' }));
110
8
  }
111
9
  //# sourceMappingURL=waitlist.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"waitlist.js","sourceRoot":"","sources":["../../../src/server/routes/waitlist.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"waitlist.js","sourceRoot":"","sources":["../../../src/server/routes/waitlist.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAmB;IACtD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -16,7 +16,7 @@ export interface CreateMarsServerOptions {
16
16
  }>;
17
17
  compileScenario?: (scenarioJson: Record<string, unknown>, options: Record<string, unknown>) => Promise<ScenarioPackage>;
18
18
  scenarioDir?: string;
19
- /** Max simulations per IP per day. 0 = unlimited. Default: 3. Set via RATE_LIMIT env var. */
19
+ /** Max simulations per IP per day. 0 = unlimited. Overrides the RATE_LIMIT env var; with neither set the limit is 1. */
20
20
  maxSimsPerDay?: number;
21
21
  /**
22
22
  * Grace period (ms) between the last SSE client disconnecting and the
@@ -1 +1 @@
1
- {"version":3,"file":"server-app.d.ts","sourceRoot":"","sources":["../../src/server/server-app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-app.d.ts","sourceRoot":"","sources":["../../src/server/server-app.ts"],"names":[],"mappings":"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"}
@@ -24,8 +24,7 @@ import { enrichRunRecordFromArtifact } from './services/enrich-run-record.js';
24
24
  import { createNoopRunHistoryStore } from './stores/run-history.js';
25
25
  import { createSqliteRunHistoryStore } from './stores/sqlite-run-history.js';
26
26
  import { createWaitlistStore } from './stores/waitlist.js';
27
- import { handleWaitlist } from './routes/waitlist.js';
28
- import { sendEmail } from './services/email.js';
27
+ import { handleWaitlistClosed } from './routes/waitlist.js';
29
28
  import { handlePublicDemoRoute } from './routes/public-demo.js';
30
29
  import { handlePlatformApiRoute } from './routes/platform-api.js';
31
30
  import { validateForkSetupPreconditions } from './fork-preconditions.js';
@@ -638,11 +637,26 @@ export function createMarsServer(options = {}) {
638
637
  console.log(` [sessions] Failed to open session store: ${err}`);
639
638
  }
640
639
  const runHistoryStore = options.runHistoryStore ?? resolveRunHistoryStore(env);
641
- // Waitlist store for enterprise-access signups on the landing page.
642
- // Sync factory; SQLite adapter is built lazily on first POST.
643
- const waitlistDbPath = resolve(env.APP_DIR || '.', 'data', 'waitlist.db');
644
- const waitlistStore = createWaitlistStore({ dbPath: waitlistDbPath });
645
- const waitlistFrom = env['WAITLIST_FROM'] || 'Paracosm <team@frame.dev>';
640
+ // The landing-page waitlist is closed (routes/waitlist.ts answers
641
+ // 410), so the server leaves the signups it collected in
642
+ // `${APP_DIR}/data/waitlist.db` alone and does not open the file.
643
+ // PARACOSM_WAITLIST_STORE=1 opens an existing store at startup and
644
+ // logs how many signups it holds, for the operator who is about to
645
+ // export them (`scripts/send-waitlist-broadcast.ts --dry-run` lists
646
+ // the addresses). Opening runs the store's own schema bootstrap;
647
+ // no server code inserts, updates or deletes a signup.
648
+ if (env.PARACOSM_WAITLIST_STORE === '1') {
649
+ const waitlistDbPath = resolve(env.APP_DIR || '.', 'data', 'waitlist.db');
650
+ if (existsSync(waitlistDbPath)) {
651
+ createWaitlistStore({ dbPath: waitlistDbPath })
652
+ .count()
653
+ .then((n) => console.log(` [waitlist] Opened waitlist store at ${waitlistDbPath} (${n} signup${n === 1 ? '' : 's'} stored; the route accepts no new ones)`))
654
+ .catch((err) => console.log(` [waitlist] Failed to read waitlist store: ${err}`));
655
+ }
656
+ else {
657
+ console.log(` [waitlist] No waitlist store at ${waitlistDbPath}; nothing to read`);
658
+ }
659
+ }
646
660
  // Coalesce disk writes so a burst of broadcasts (e.g. 50 forge_attempt
647
661
  // events during a turn) only triggers one persist call. 500ms debounce
648
662
  // is short enough that a crash loses at most a half-second of events
@@ -1589,24 +1603,11 @@ export function createMarsServer(options = {}) {
1589
1603
  }
1590
1604
  return;
1591
1605
  }
1592
- // Landing-page enterprise-access waitlist. Captures email, sends a
1593
- // branded confirmation via Resend, dedupes per-email, rate-limits
1594
- // 1 submission / IP / 5 min. When `rateLimiter` is null (self-hosted
1595
- // unlimited mode), fall through to allow-all because there is only
1596
- // one operator to protect from abusive submissions.
1606
+ // The landing-page waitlist is closed: the route answers 410
1607
+ // `{ error: 'waitlist_closed' }` without reading the body or
1608
+ // touching the stored signups.
1597
1609
  if (req.url === '/api/waitlist' && req.method === 'POST') {
1598
- const body = await readBody(req, maxRequestBodyBytes);
1599
- await handleWaitlist(req, res, body, {
1600
- waitlistStore,
1601
- sendEmail,
1602
- rateLimiter: {
1603
- consumeWaitlist: (ip) => rateLimiter
1604
- ? rateLimiter.consumeWaitlist(ip)
1605
- : { allowed: true, remaining: 0, resetAt: Date.now() + 1, limit: 1 },
1606
- getClientIp: (r) => IpRateLimiter.getIp(r),
1607
- },
1608
- waitlistFrom,
1609
- });
1610
+ handleWaitlistClosed(res);
1610
1611
  return;
1611
1612
  }
1612
1613
  // Tier 5 Quickstart onboarding endpoints.
@@ -2714,9 +2715,9 @@ export function createMarsServer(options = {}) {
2714
2715
  }
2715
2716
  }
2716
2717
  // Serve hand-crafted diagram SVGs (system flow, etc). Single source
2717
- // at `assets/diagrams/` — referenced from landing.html, the dashboard
2718
- // AboutPage, and the README. Same path-traversal guard as `/brand/`
2719
- // and `/demo/`; same file types; same cache policy.
2718
+ // at `assets/diagrams/` — referenced from landing.html and the
2719
+ // README. Same path-traversal guard as `/brand/` and `/demo/`; same
2720
+ // file types; same cache policy.
2720
2721
  if (req.url?.split('?')[0].startsWith('/diagrams/')) {
2721
2722
  try {
2722
2723
  const diagramRoot = resolve(__dirname, '..', '..', 'assets', 'diagrams');