@cosmicdrift/kumiko-dev-server 0.167.0 → 0.168.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-dev-server",
3
- "version": "0.167.0",
3
+ "version": "0.168.0",
4
4
  "description": "Dev-tooling for Kumiko apps: local dev-server bootstrap (runDevApp), scaffolding, codegen. Not shipped into production node_modules — see @cosmicdrift/kumiko-server-runtime for the prod boot path.",
5
5
  "license": "BUSL-1.1",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -54,9 +54,9 @@
54
54
  "kumiko-schema-check": "./bin/kumiko-schema-check.ts"
55
55
  },
56
56
  "dependencies": {
57
- "@cosmicdrift/kumiko-bundled-features": "0.167.0",
58
- "@cosmicdrift/kumiko-framework": "0.167.0",
59
- "@cosmicdrift/kumiko-server-runtime": "0.167.0",
57
+ "@cosmicdrift/kumiko-bundled-features": "0.168.0",
58
+ "@cosmicdrift/kumiko-framework": "0.168.0",
59
+ "@cosmicdrift/kumiko-server-runtime": "0.168.0",
60
60
  "ts-morph": "^28.0.0"
61
61
  },
62
62
  "publishConfig": {
@@ -686,19 +686,14 @@ export async function createKumikoServer(
686
686
  await createEventsTable(stack.db);
687
687
  await pushEntityProjectionTables(stack, stack.registry);
688
688
 
689
- // Hook für Caller-spezifische Tables + Seed. Läuft nach den Entity-
690
- // Tabellen damit das Sample auf `stack.db` / `stack.dispatcher`
691
- // zugreifen kann, und VOR dem Server-Start damit der erste HTTP-Request
692
- // bereits gegen einen gefüllten State läuft. Idempotenz ist Caller-
693
- // Verantwortung (persistent-DB-Modus läuft es bei jedem Boot).
694
- if (options.onAfterSetup !== undefined) {
695
- await options.onAfterSetup(stack);
696
- }
697
-
698
689
  // App-eigene HTTP-Routes ans Hono-app hängen — symmetrisch zur
699
690
  // gleichnamigen Option in runProdApp. Wird vor dem dev-fallback
700
691
  // (HTML/JS/CSS-Serving via handleFetch unten) registriert, damit
701
692
  // explizite Routen wie /feed.xml den Asset-Pfad schlagen.
693
+ //
694
+ // Muss VOR dem Seed laufen: ein Seed, der über stack.http dispatcht,
695
+ // baut Honos Matcher — danach wirft jedes weitere app.get() mit
696
+ // "Can not add a route since the matcher is already built".
702
697
  if (options.extraRoutes !== undefined) {
703
698
  options.extraRoutes(stack.app, {
704
699
  db: stack.db,
@@ -710,6 +705,15 @@ export async function createKumikoServer(
710
705
  });
711
706
  }
712
707
 
708
+ // Hook für Caller-spezifische Tables + Seed. Läuft nach den Entity-
709
+ // Tabellen damit das Sample auf `stack.db` / `stack.dispatcher`
710
+ // zugreifen kann, und VOR dem Server-Start damit der erste HTTP-Request
711
+ // bereits gegen einen gefüllten State läuft. Idempotenz ist Caller-
712
+ // Verantwortung (persistent-DB-Modus läuft es bei jedem Boot).
713
+ if (options.onAfterSetup !== undefined) {
714
+ await options.onAfterSetup(stack);
715
+ }
716
+
713
717
  // setupTestStack konfiguriert den eventDispatcher, startet ihn aber
714
718
  // NICHT — Integration-Tests drain'en deterministisch via runOnce().
715
719
  // Ein Dev-Server will das laufende Polling, damit SSE-Broadcasts
@@ -91,6 +91,7 @@ import { renderWelcomeBanner } from "./welcome-banner";
91
91
  // @cosmicdrift/kumiko-server-runtime (single source of truth) — hier nur
92
92
  // durchgereicht.
93
93
  export type {
94
+ AccountLockoutSetup,
94
95
  AccountUnlockSetup,
95
96
  AuthMailOptions,
96
97
  EmailVerificationSetup,
@@ -100,6 +101,7 @@ export type {
100
101
  } from "@cosmicdrift/kumiko-server-runtime/run-prod-app";
101
102
 
102
103
  import type {
104
+ AccountLockoutSetup,
103
105
  AccountUnlockSetup,
104
106
  AuthMailOptions,
105
107
  EmailVerificationSetup,
@@ -140,6 +142,10 @@ export type RunDevAppAuthOptions = {
140
142
  readonly invite?: InviteSetup;
141
143
  /** Account-unlock flow (#1266). Symmetric to RunProdAppAuthOptions. */
142
144
  readonly accountUnlock?: AccountUnlockSetup;
145
+ /** Brute-force guard on the login handler (maxFailedAttempts,
146
+ * lockoutDurationMinutes). Mounts no routes. Symmetric to
147
+ * RunProdAppAuthOptions.accountLockout (kumiko-framework#1627). */
148
+ readonly accountLockout?: AccountLockoutSetup;
143
149
  /** Domain attribute for both auth cookies (see
144
150
  * AuthRoutesConfig.cookieDomain). Symmetric to RunProdAppAuthOptions. */
145
151
  readonly cookieDomain?: string;