@cosmicdrift/kumiko-server-runtime 0.363.0 → 0.364.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.
@@ -2,7 +2,7 @@ import type { AuthEmailPasswordOptions } from "@cosmicdrift/kumiko-bundled-featu
2
2
  import { type DbConnection } from "@cosmicdrift/kumiko-framework/db";
3
3
  import { type FeatureDefinition, type Registry } from "@cosmicdrift/kumiko-framework/engine";
4
4
  import { type WorkerEntrypoint } from "@cosmicdrift/kumiko-framework/entrypoint";
5
- import type { SecretsContext } from "@cosmicdrift/kumiko-framework/secrets";
5
+ import type { EnvelopeCipher, SecretsContext } from "@cosmicdrift/kumiko-framework/secrets";
6
6
  import { Redis } from "ioredis";
7
7
  import type { RunWorkerAppOptions } from "../run-worker-app.js";
8
8
  export type WorkerBootCoreOptions = Omit<RunWorkerAppOptions, "wireComponents">;
@@ -26,6 +26,8 @@ export type BootedWorkerProcess = {
26
26
  /** ctx.secrets as wired into the entrypoint (auto-wired when the secrets
27
27
  * feature is mounted and a master key exists, or from `extraContext`). */
28
28
  readonly secrets?: SecretsContext;
29
+ /** Envelope cipher for `encrypted` config keys, when a master key is wired. */
30
+ readonly configCipher?: EnvelopeCipher;
29
31
  readonly close: () => Promise<void>;
30
32
  };
31
33
  export type WorkerBootResult = {
@@ -188,6 +188,7 @@ export async function bootWorkerProcess(options, envSource, profile) {
188
188
  envSource,
189
189
  entrypoint,
190
190
  ...(isSecretsContext(extraContext["secrets"]) && { secrets: extraContext["secrets"] }),
191
+ ...(bootCrypto.configCipher && { configCipher: bootCrypto.configCipher }),
191
192
  close: async () => {
192
193
  await entrypoint.stop();
193
194
  await closeDb();
@@ -52,7 +52,13 @@ export async function runBootstrap(options) {
52
52
  return undefined;
53
53
  let report;
54
54
  try {
55
- report = await bootstrapTenants({ db: boot.db, redis: boot.redis, dispatcher: boot.entrypoint.dispatcher }, {
55
+ report = await bootstrapTenants({
56
+ db: boot.db,
57
+ redis: boot.redis,
58
+ dispatcher: boot.entrypoint.dispatcher,
59
+ registry: boot.registry,
60
+ ...(boot.configCipher && { configCipher: boot.configCipher }),
61
+ }, {
56
62
  tenants: options.tenants,
57
63
  ...(options.systemAdmins && { systemAdmins: options.systemAdmins }),
58
64
  ...(options.seed && { seed: options.seed }),
@@ -425,9 +425,9 @@ export async function runProdApp(options) {
425
425
  // it lazily, entities without encrypted fields never touch it.
426
426
  configureEntityFieldEncryption(bootCrypto.entityFieldCipher);
427
427
  // Subject-key KMS for pii-annotated fields (crypto-shredding, #724).
428
- // No adapter = engine off, plaintext as before — the warning keeps the gap
429
- // visible until the prod-grade PgKmsAdapter (phase E) makes a hard boot
430
- // gate viable (InMemory in prod would lose every DEK on restart).
428
+ // No adapter only gets this far when assertPiiBootInvariants above let it
429
+ // through: no PII carriers, or an explicit allowPlaintextPii opt-out. The
430
+ // engine then stays off and those fields are stored in plaintext.
431
431
  configurePiiSubjectKms(options.kms);
432
432
  // Blind-Index-Key (#818) — Boot-Gate: mit aktivem KMS würden lookupable-
433
433
  // Felder als Ciphertext gespeichert, ohne Key gäbe es keinen bidx-Arm und
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-server-runtime",
3
- "version": "0.363.0",
3
+ "version": "0.364.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,12 +84,12 @@
84
84
  }
85
85
  },
86
86
  "dependencies": {
87
- "@cosmicdrift/kumiko-bundled-features": "0.363.0",
88
- "@cosmicdrift/kumiko-framework": "0.363.0",
89
- "@cosmicdrift/kumiko-headless": "0.363.0",
90
- "@cosmicdrift/kumiko-renderer-mail-html": "0.363.0",
91
- "@cosmicdrift/kumiko-renderer-web": "0.363.0",
92
- "@cosmicdrift/kumiko-types": "0.363.0",
87
+ "@cosmicdrift/kumiko-bundled-features": "0.364.0",
88
+ "@cosmicdrift/kumiko-framework": "0.364.0",
89
+ "@cosmicdrift/kumiko-headless": "0.364.0",
90
+ "@cosmicdrift/kumiko-renderer-mail-html": "0.364.0",
91
+ "@cosmicdrift/kumiko-renderer-web": "0.364.0",
92
+ "@cosmicdrift/kumiko-types": "0.364.0",
93
93
  "bun-types": "^1.3.13",
94
94
  "ioredis": "^5.10.1",
95
95
  "temporal-polyfill": "^0.3.2"