create-kumiko-app 0.369.0 → 0.371.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/feature-manifest.json +44 -3
- package/package.json +5 -5
package/feature-manifest.json
CHANGED
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "samples/apps/use-all-bundled APP_FEATURES (composeFeatures includeBundled + signup)",
|
|
3
|
-
"featureCount":
|
|
3
|
+
"featureCount": 86,
|
|
4
4
|
"features": [
|
|
5
|
+
{
|
|
6
|
+
"name": "account-security",
|
|
7
|
+
"description": "Self-service account dashboard: MFA enrollment, recovery codes and the user's own sessions, composed from the auth-mfa and sessions screens.",
|
|
8
|
+
"toggleableDefault": null,
|
|
9
|
+
"requires": [
|
|
10
|
+
"sessions",
|
|
11
|
+
"auth-mfa"
|
|
12
|
+
],
|
|
13
|
+
"optionalRequires": [],
|
|
14
|
+
"configReads": [],
|
|
15
|
+
"exposesApis": [],
|
|
16
|
+
"usesApis": [],
|
|
17
|
+
"extensionsUsed": [],
|
|
18
|
+
"configKeys": [],
|
|
19
|
+
"secrets": [],
|
|
20
|
+
"writeHandlers": []
|
|
21
|
+
},
|
|
5
22
|
{
|
|
6
23
|
"name": "admin-shell",
|
|
7
24
|
"description": "Registers tenant-admin and platform-admin workspaces with provider nav into owner-feature screens (`tenant:screen:members`, `audit:screen:audit-log`, `tenant:screen:tenant-list`, `jobs:screen:job-runs`, optional `tier-engine:screen:tier-admin`, optional `cap-overview:screen:my-caps`/`cap-overview:screen:tenant-cap-list`, optional `document-designer` template navs) and the two overview dashboards, built from the metrics list (`metrics` option, default DEFAULT_METRICS). Mount after user, tenant, audit, jobs, metrics and metrics-system; pass `workspaceIds` to match app URL conventions (e.g. Studio `d`/`s`, PublicStatus `admin`/`sysadmin`). Client: `adminShellClient()`, `tenantClient()`, `auditClient()`, `jobsClient()`, optional `tierEngineClient()`.",
|
|
@@ -1329,6 +1346,28 @@
|
|
|
1329
1346
|
"secrets": [],
|
|
1330
1347
|
"writeHandlers": []
|
|
1331
1348
|
},
|
|
1349
|
+
{
|
|
1350
|
+
"name": "host-routing",
|
|
1351
|
+
"description": "Host- and path-based tenant routing: an authoritative tenant resolver from the subdomain (tenantBy host), a tenant existence check against enabled, active tenants, and the tenant-key query behind createHostDispatch, which picks the HTML file, CSP, locale redirect or 404 per host for runProdApp's hostDispatch.",
|
|
1352
|
+
"toggleableDefault": null,
|
|
1353
|
+
"requires": [
|
|
1354
|
+
"auth-foundation",
|
|
1355
|
+
"tenant"
|
|
1356
|
+
],
|
|
1357
|
+
"optionalRequires": [],
|
|
1358
|
+
"configReads": [],
|
|
1359
|
+
"exposesApis": [],
|
|
1360
|
+
"usesApis": [],
|
|
1361
|
+
"extensionsUsed": [
|
|
1362
|
+
{
|
|
1363
|
+
"extensionName": "tenantExistence",
|
|
1364
|
+
"entityName": "active-tenant"
|
|
1365
|
+
}
|
|
1366
|
+
],
|
|
1367
|
+
"configKeys": [],
|
|
1368
|
+
"secrets": [],
|
|
1369
|
+
"writeHandlers": []
|
|
1370
|
+
},
|
|
1332
1371
|
{
|
|
1333
1372
|
"name": "inbound-mail-foundation",
|
|
1334
1373
|
"description": "Plugin host for inbound e-mail (inbox federation) — provider plugins (inbound-provider-imap, later M365 Graph / Gmail REST) register at the `inboundMailProvider` extension point with verify/fetch and optional oauth/watch (live push). The foundation owns three event-sourced streams (mail-account lifecycle, inbound-message with exactly-once ingest via deterministic aggregate ids, mail-thread rollup) and their projections `read_mail_accounts`/`read_inbound_messages`/`read_mail_threads`; PII fields are envelope-encrypted per tenant subject key before every append (crypto-shredding on tenant destroy). Wire `createInboundMailConnectRoutes` (OAuth connect + anonymous callback outside /api) and `createInboundMailSupervisor` (IDLE watch with backoff + reconciliation poll) in bin/server.ts. Consume `inbound-mail-foundation:event:inbound-message-received` from app features to attach business processes.",
|
|
@@ -2122,7 +2161,7 @@
|
|
|
2122
2161
|
},
|
|
2123
2162
|
{
|
|
2124
2163
|
"name": "renderer-mail-html",
|
|
2125
|
-
"description": "A `renderer-foundation` plugin that handles `RenderRequest { kind: \"mail\" }` and returns `{ subject, html, text, previewText? }` suitable for sending via `channel-email`. The mail template (`kind: \"mail\"`, document HTML, subject in `meta`) resolves through `template-resolver`'s DB fallback, its body is compiled to Handlebars by template-resolver and rendered with escaping, then placed into an MJML layout (`kind: \"mail-layout\"`, slug `default` unless `meta.layoutSlug` says otherwise, an in-code structured layout with the tenant branding logo and accent color as last resort) that `mjml()` compiles to email-safe table HTML, with `html-to-text` producing the plain-text alternative. An optional `footer` resolver adds the platform imprint, privacy link and footer text below every structured layout, an optional `brandSuffix` resolver adds a word after the tenant name in the brand row of the in-code layout, and an optional `siteUrl` resolver supplies the site link of the card when the tenant branding has no site URL (without either, the link is left out). The brand row and `data-resource=\"logo\"` images use the branding logo upload, or the branding logo https address when no file is uploaded. Mail meta `headerChip`, `tone` and `footerNote` add a chip beside the brand, the tone of the top line and chip, and a note above the site and unsubscribe links of the card. Seed an editable system layout with `seedSystemMailLayout(db)`. Requires `renderer-foundation` + `template-resolver`.",
|
|
2164
|
+
"description": "A `renderer-foundation` plugin that handles `RenderRequest { kind: \"mail\" }` and returns `{ subject, html, text, previewText? }` suitable for sending via `channel-email`. The mail template (`kind: \"mail\"`, document HTML, subject in `meta`) resolves through `template-resolver`'s DB fallback, its body is compiled to Handlebars by template-resolver and rendered with escaping, then placed into an MJML layout (`kind: \"mail-layout\"`, slug `default` unless `meta.layoutSlug` says otherwise, an in-code structured layout with the tenant branding logo and accent color as last resort) that `mjml()` compiles to email-safe table HTML, with `html-to-text` producing the plain-text alternative. An optional `footer` resolver adds the platform imprint, privacy link and footer text below every structured layout, an optional `brandSuffix` resolver adds a word after the tenant name in the brand row of the in-code layout, and an optional `siteUrl` resolver supplies the site link of the card when the tenant branding has no site URL (without either, the link is left out). The brand row and `data-resource=\"logo\"` images use the branding logo upload, or the branding logo https address when no file is uploaded. Mail meta `headerChip`, `tone` and `footerNote` add a chip beside the brand, the tone of the top line and chip, and a note above the site and unsubscribe links of the card. `readMailChrome` hands the same brand row and footer, resolved for one locale, to pages a recipient opens from a mail, such as the unsubscribe page. Seed an editable system layout with `seedSystemMailLayout(db)`. Requires `renderer-foundation` + `template-resolver`.",
|
|
2126
2165
|
"toggleableDefault": null,
|
|
2127
2166
|
"requires": [
|
|
2128
2167
|
"renderer-foundation",
|
|
@@ -2191,7 +2230,7 @@
|
|
|
2191
2230
|
},
|
|
2192
2231
|
{
|
|
2193
2232
|
"name": "secrets",
|
|
2194
|
-
"description": "Stores arbitrary per-tenant secrets (API keys, tokens, credentials) encrypted at rest using AES-256 with a KEK loaded from `KUMIKO_SECRETS_MASTER_KEY_V1` (and successive versions for rotation). Read a secret in handlers via `ctx.secrets.get(tenantId, handle)`, which automatically appends a `tenantSecretRead` audit event so every access is traceable. A `rotate` job re-encrypts all envelopes after a KEK version bump. The `set`/`delete`/`list` handlers share one access rule — default { roles: [\"TenantAdmin\"] }; adopt the host's role vocabulary with createSecretsFeature({ roles }) or open it to every authenticated tenant user with { access: { openToAll: { reason } } } (larger blast radius: any tenant member can then read secret previews and write/delete secrets, not just admins). Server-side code writes a tenant secret with `dispatchSystemWrite({ handlerQn:
|
|
2233
|
+
"description": "Stores arbitrary per-tenant secrets (API keys, tokens, credentials) encrypted at rest using AES-256 with a KEK loaded from `KUMIKO_SECRETS_MASTER_KEY_V1` (and successive versions for rotation). Read a secret in handlers via `ctx.secrets.get(tenantId, handle)`, which automatically appends a `tenantSecretRead` audit event so every access is traceable. A `rotate` job re-encrypts all envelopes after a KEK version bump. The `set`/`delete`/`list` handlers share one access rule — default { roles: [\"TenantAdmin\"] }; adopt the host's role vocabulary with createSecretsFeature({ roles }) or open it to every authenticated tenant user with { access: { openToAll: { reason } } } (larger blast radius: any tenant member can then read secret previews and write/delete secrets, not just admins). Server-side code writes a tenant secret with `dispatchSystemWrite({ handlerQn: SecretsHandlers.set, payload, tenantId })`: set and delete also admit the in-process system identity, so such writes pass the same declared-key and value checks.",
|
|
2195
2234
|
"toggleableDefault": null,
|
|
2196
2235
|
"requires": [],
|
|
2197
2236
|
"optionalRequires": [],
|
|
@@ -3229,7 +3268,9 @@
|
|
|
3229
3268
|
"configKeys": [],
|
|
3230
3269
|
"secrets": [],
|
|
3231
3270
|
"writeHandlers": [
|
|
3271
|
+
"waitlist:write:export",
|
|
3232
3272
|
"waitlist:write:invite",
|
|
3273
|
+
"waitlist:write:purge",
|
|
3233
3274
|
"waitlist:write:reject",
|
|
3234
3275
|
"waitlist:write:submit"
|
|
3235
3276
|
],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-kumiko-app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.371.0",
|
|
4
4
|
"description": "`bun create kumiko-app <name>` — scaffold a new Kumiko app with an interactive feature picker.",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@cosmicdrift/kumiko-dev-server": "0.
|
|
31
|
-
"@cosmicdrift/kumiko-framework": "0.
|
|
32
|
-
"@cosmicdrift/kumiko-server-runtime": "0.
|
|
33
|
-
"@cosmicdrift/kumiko-testing": "0.
|
|
30
|
+
"@cosmicdrift/kumiko-dev-server": "0.371.0",
|
|
31
|
+
"@cosmicdrift/kumiko-framework": "0.371.0",
|
|
32
|
+
"@cosmicdrift/kumiko-server-runtime": "0.371.0",
|
|
33
|
+
"@cosmicdrift/kumiko-testing": "0.371.0",
|
|
34
34
|
"@inquirer/core": "^10.0.0",
|
|
35
35
|
"@inquirer/prompts": "^7.4.0"
|
|
36
36
|
},
|