@cosmicdrift/kumiko-server-runtime 0.155.0 → 0.155.1
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 +4 -3
- package/src/build-prod-bundle.ts +4 -1
- package/src/pii-boot-gate.ts +2 -0
- package/src/run-prod-app.ts +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cosmicdrift/kumiko-server-runtime",
|
|
3
|
-
"version": "0.155.
|
|
3
|
+
"version": "0.155.1",
|
|
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>",
|
|
@@ -72,8 +72,9 @@
|
|
|
72
72
|
}
|
|
73
73
|
},
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"@cosmicdrift/kumiko-bundled-features": "0.155.
|
|
76
|
-
"@cosmicdrift/kumiko-framework": "0.155.
|
|
75
|
+
"@cosmicdrift/kumiko-bundled-features": "0.155.1",
|
|
76
|
+
"@cosmicdrift/kumiko-framework": "0.155.1",
|
|
77
|
+
"temporal-polyfill": "^0.3.2"
|
|
77
78
|
},
|
|
78
79
|
"publishConfig": {
|
|
79
80
|
"registry": "https://registry.npmjs.org",
|
package/src/build-prod-bundle.ts
CHANGED
|
@@ -44,6 +44,7 @@ import { existsSync, readdirSync } from "node:fs";
|
|
|
44
44
|
import { cp, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
45
45
|
import { tmpdir } from "node:os";
|
|
46
46
|
import { join, resolve } from "node:path";
|
|
47
|
+
import { Temporal } from "temporal-polyfill";
|
|
47
48
|
import { canResolveTailwindStylesheet, resolveTailwindCli } from "./resolve-tailwind-cli";
|
|
48
49
|
|
|
49
50
|
// Bun-Runtime-Check als module-level Konstante: alle Build-Schritte
|
|
@@ -188,7 +189,7 @@ export async function buildProdBundle(options: BuildProdBundleOptions = {}): Pro
|
|
|
188
189
|
// nicht stale). Bei Bedarf an Server-Versionierung koppeln.
|
|
189
190
|
const buildInfo: BuildInfo | undefined =
|
|
190
191
|
Object.keys(manifest).length > 0
|
|
191
|
-
? { id: computeBuildId(manifest), builtAt:
|
|
192
|
+
? { id: computeBuildId(manifest), builtAt: Temporal.Now.instant().toString() }
|
|
192
193
|
: undefined;
|
|
193
194
|
|
|
194
195
|
// 6. HTML pro Entry rendern. Convention: ein HTML-File pro Client-Entry,
|
|
@@ -364,7 +365,9 @@ function resolveStylesheetEntry(
|
|
|
364
365
|
// Laut failen statt ein 15KB-Image zu liefern, das in prod nackt rendert.
|
|
365
366
|
// @internal — exportiert nur für Unit-Tests.
|
|
366
367
|
export function assertRendererWebShellPresent(css: string, stylesheet: ResolvedStylesheet): void {
|
|
368
|
+
// skip: not the renderer-web fallback stylesheet, invariant doesn't apply
|
|
367
369
|
if (!stylesheet.isRendererWebFallback) return;
|
|
370
|
+
// skip: shell sentinel class present, styles were scanned correctly
|
|
368
371
|
if (css.includes(RENDERER_WEB_SHELL_SENTINEL)) return;
|
|
369
372
|
throw new Error(
|
|
370
373
|
`[kumiko build] renderer-web-Fallback-CSS ohne Shell-Klasse "${RENDERER_WEB_SHELL_SENTINEL}" — ` +
|
package/src/pii-boot-gate.ts
CHANGED
|
@@ -47,6 +47,7 @@ export function assertPiiBootInvariants(
|
|
|
47
47
|
console.warn(
|
|
48
48
|
`[${tag}] ${piiEntities.length} entities carry pii/userOwned/tenantOwned annotations but no \`kms\` adapter is configured — fields are stored in PLAINTEXT locally. Pass { kms: new InMemoryKmsAdapter() } (ephemeral DB) or createPgKmsAdapter(...) to exercise crypto-shredding in dev.`,
|
|
49
49
|
);
|
|
50
|
+
// skip: dev mode, plaintext-PII warning already logged above
|
|
50
51
|
return;
|
|
51
52
|
}
|
|
52
53
|
if (opts.allowPlaintextPii) {
|
|
@@ -54,6 +55,7 @@ export function assertPiiBootInvariants(
|
|
|
54
55
|
console.warn(
|
|
55
56
|
`[${tag}] ${piiEntities.length} entities carry PII annotations but no \`kms\` adapter is configured — fields are stored in PLAINTEXT (allowPlaintextPii: "${opts.allowPlaintextPii}"). GDPR erasure via crypto-shredding is NOT possible until a KMS is provisioned.`,
|
|
56
57
|
);
|
|
58
|
+
// skip: operator explicitly acknowledged plaintext PII via allowPlaintextPii, warning already logged above
|
|
57
59
|
return;
|
|
58
60
|
}
|
|
59
61
|
throw new Error(
|
package/src/run-prod-app.ts
CHANGED
|
@@ -1103,6 +1103,7 @@ export async function runProdApp(options: RunProdAppOptions): Promise<ProdAppHan
|
|
|
1103
1103
|
// signals it shouldn't respond to.
|
|
1104
1104
|
let shuttingDown = false;
|
|
1105
1105
|
const shutdown = async (signal: string) => {
|
|
1106
|
+
// skip: shutdown already in progress, avoid double-drain
|
|
1106
1107
|
if (shuttingDown) return;
|
|
1107
1108
|
shuttingDown = true;
|
|
1108
1109
|
// biome-ignore lint/suspicious/noConsole: boot-time progress hint, no logger configured this early
|