@cosmicdrift/kumiko-server-runtime 0.354.1 → 0.356.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.
@@ -15,9 +15,13 @@
15
15
  import { createAuthEmailPasswordFeature, createAuthSelfRegistrationToggleFeature, } from "@cosmicdrift/kumiko-bundled-features/auth-email-password";
16
16
  import { AUTH_MFA_FEATURE, mfaStatusCheckerFromFeature, } from "@cosmicdrift/kumiko-bundled-features/auth-mfa";
17
17
  import { createConfigFeature } from "@cosmicdrift/kumiko-bundled-features/config";
18
+ import { createFilesTenantDataFeature } from "@cosmicdrift/kumiko-bundled-features/files-tenant-data";
18
19
  import { collectAssignableAppRoles, createTenantFeature, } from "@cosmicdrift/kumiko-bundled-features/tenant";
20
+ import { TENANT_LIFECYCLE_FEATURE } from "@cosmicdrift/kumiko-bundled-features/tenant-lifecycle";
19
21
  import { createUserFeature } from "@cosmicdrift/kumiko-bundled-features/user";
20
22
  import { dedupeFeatures } from "@cosmicdrift/kumiko-framework/engine";
23
+ const FILES_FEATURE = "files";
24
+ const FILES_TENANT_DATA_FEATURE = "files-tenant-data";
21
25
  export function composeFeatures(appFeatures, options) {
22
26
  // ponytail: includeBundled:false skips the auth-mfa auto-wiring below —
23
27
  // an app composing its own foundation and mounting auth-mfa itself is
@@ -76,7 +80,16 @@ export function composeFeatures(appFeatures, options) {
76
80
  }
77
81
  filteredApp.push(f);
78
82
  }
79
- return [...bundled, ...filteredApp];
83
+ const names = new Set(filteredApp.map((f) => f.name));
84
+ // Without it, tenant destroy leaves fileRef rows and stored binaries behind.
85
+ const needsFilesTenantData = names.has(FILES_FEATURE) &&
86
+ names.has(TENANT_LIFECYCLE_FEATURE) &&
87
+ !names.has(FILES_TENANT_DATA_FEATURE);
88
+ return [
89
+ ...bundled,
90
+ ...filteredApp,
91
+ ...(needsFilesTenantData ? [createFilesTenantDataFeature()] : []),
92
+ ];
80
93
  }
81
94
  // The magic-link mail fields shared by all five flows. Conditional spreads omit
82
95
  // undefined keys (exactOptionalPropertyTypes) and avoid the property-write that
@@ -58,7 +58,7 @@ import { renderDryRun } from "@cosmicdrift/kumiko-framework/env/dry-run";
58
58
  import { createEsOperationsTable, createSeedMigrationContext, runPendingSeedMigrations, } from "@cosmicdrift/kumiko-framework/es-ops";
59
59
  import { assertSeedModeNotInProduction } from "@cosmicdrift/kumiko-framework/event-store";
60
60
  import { assertKumikoSchemaCurrent, SchemaDriftError, } from "@cosmicdrift/kumiko-framework/migrations";
61
- import { createDispatcher, createEntityCache, createEventDedup, createIdempotencyGuard, } from "@cosmicdrift/kumiko-framework/pipeline";
61
+ import { createDispatcher, createEntityCache, createEventDedup, createIdempotencyGuard, flushEscapeHatchAudits, } from "@cosmicdrift/kumiko-framework/pipeline";
62
62
  import { createRedisCacheSyncBus, redisClientOptionsFromEnv, } from "@cosmicdrift/kumiko-framework/redis";
63
63
  import { warnIfNonUtcServerTimeZone } from "@cosmicdrift/kumiko-framework/time";
64
64
  import { Redis } from "ioredis";
@@ -776,6 +776,7 @@ export async function runProdApp(options) {
776
776
  stop: async () => {
777
777
  await entrypoint.stop();
778
778
  handle.server?.stop();
779
+ await flushEscapeHatchAudits();
779
780
  await closeDb();
780
781
  redis.disconnect();
781
782
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-server-runtime",
3
- "version": "0.354.1",
3
+ "version": "0.356.0",
4
4
  "description": "Production server-boot runtime for Kumiko apps: connections, schema-drift-gate, seeds, lifecycle, graceful shutdown. Symmetric to kumiko-dev-server's runDevApp, without dev/scaffold/codegen tooling.",
5
5
  "license": "BUSL-1.1",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -84,11 +84,11 @@
84
84
  }
85
85
  },
86
86
  "dependencies": {
87
- "@cosmicdrift/kumiko-bundled-features": "0.354.1",
88
- "@cosmicdrift/kumiko-framework": "0.354.1",
89
- "@cosmicdrift/kumiko-headless": "0.354.1",
90
- "@cosmicdrift/kumiko-renderer-web": "0.354.1",
91
- "@cosmicdrift/kumiko-types": "0.354.1",
87
+ "@cosmicdrift/kumiko-bundled-features": "0.356.0",
88
+ "@cosmicdrift/kumiko-framework": "0.356.0",
89
+ "@cosmicdrift/kumiko-headless": "0.356.0",
90
+ "@cosmicdrift/kumiko-renderer-web": "0.356.0",
91
+ "@cosmicdrift/kumiko-types": "0.356.0",
92
92
  "bun-types": "^1.3.13",
93
93
  "ioredis": "^5.10.1",
94
94
  "temporal-polyfill": "^0.3.2"
package/src/changes.json CHANGED
@@ -1,4 +1,9 @@
1
1
  [
2
+ {
3
+ "version": "0.356.0",
4
+ "type": "improvement",
5
+ "title": "composeFeatures mounts files-tenant-data when files and tenant-lifecycle are present"
6
+ },
2
7
  {
3
8
  "version": "0.354.0",
4
9
  "type": "fix",