create-kumiko-app 0.4.61 → 0.4.63

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "source": "samples/apps/use-all-bundled APP_FEATURES (composeFeatures includeBundled)",
3
- "featureCount": 46,
3
+ "featureCount": 47,
4
4
  "features": [
5
5
  {
6
6
  "name": "audit",
@@ -245,6 +245,26 @@
245
245
  "recommended": true
246
246
  }
247
247
  },
248
+ {
249
+ "name": "crypto-shredding",
250
+ "description": "Operator-level crypto-shredding trigger. `forget-subject` erases a user or tenant subject key in the configured KMS adapter, making every PII field encrypted under it permanently unreadable (reads render the `[[erased]]` sentinel), and appends a `subject-forgotten` audit event. Requires a KMS adapter (`runProdApp({ kms })`). The automated Art.-17 deletion pipeline in `user-data-rights` erases keys itself; this command covers manual forgets (authority requests, operator recovery, tenant destroy).",
251
+ "toggleableDefault": null,
252
+ "requires": [],
253
+ "optionalRequires": [],
254
+ "configReads": [],
255
+ "exposesApis": [],
256
+ "usesApis": [],
257
+ "extensionsUsed": [],
258
+ "configKeys": [],
259
+ "secrets": [],
260
+ "writeHandlers": [
261
+ "crypto-shredding:write:forget-subject"
262
+ ],
263
+ "uiHints": {
264
+ "displayLabel": "Crypto-Shredding",
265
+ "category": "compliance"
266
+ }
267
+ },
248
268
  {
249
269
  "name": "custom-fields",
250
270
  "description": "Tenant- and system-scoped custom field definitions with generic value storage on any host entity. Registers the `field-definition` entity (event-sourced CRUD via `define-tenant-field`, `define-system-field`, `update-tenant-field`, `delete-tenant-field`, `delete-system-field`) and two value write-handlers (`set-custom-field`, `clear-custom-field`) that emit `custom-fields:event:custom-field-set` / `custom-fields:event:custom-field-cleared` events on the host aggregate's stream. To attach custom fields to your own entity, call `wireCustomFieldsFor(r, entityName, entityTable)` in the host feature — this wires the JSONB projection, `postQuery` flattening hook, and search-payload extension. The host entity must declare a `customFieldsField()` JSONB column.",
@@ -1775,7 +1795,7 @@
1775
1795
  },
1776
1796
  {
1777
1797
  "name": "user-data-rights-defaults",
1778
- "description": "Registers ready-made `EXT_USER_DATA` export and delete hooks for the bundled entities that hold per-user data: `user` (delete strategy sets email to `deleted-<id>@anonymized.invalid`, nulls `passwordHash`, sets status to `Deleted`; anonymize strategy sets email to `anonymized-<id>@anonymized.invalid` without touching `passwordHash`), `fileRef` (delete removes both the DB row and the storage binary), plus — gated on the source feature being mounted — `user-session` (ip/userAgent, hard-delete), `api-token` (hard-delete = revoke), `in-app-message` (hard-delete), `tenant-invitation` (invitee email forgotten/pseudonymized, inviter link severed), `notification-preference` and user-scoped `config-value` (purged via the forget verb). Mount this alongside `user-data-rights` for standard GDPR compliance; omit it only if your app needs custom anonymization logic for these entities.",
1798
+ "description": "Registers ready-made `EXT_USER_DATA` export and delete hooks for the bundled entities that hold per-user data: `user` (delete strategy sets email to `deleted-<id>@anonymized.invalid`, nulls `passwordHash`, sets status to `Deleted`; anonymize strategy sets email to `anonymized-<id>@anonymized.invalid` without touching `passwordHash`), `fileRef` (delete removes both the DB row and the storage binary), plus — gated on the source feature being mounted — `user-session` (ip/userAgent, hard-delete), `api-token` (hard-delete = revoke), `in-app-message` (hard-delete), `tenant-invitation` (invitee email forgotten/pseudonymized, inviter link severed), `notification-preference` and user-scoped `config-value` (purged via the forget verb), plus export-only hooks for the events-only aggregates `delivery-attempt` (recipientAddress) and `job-run` (payload) whose erasure runs via crypto-shredding. Mount this alongside `user-data-rights` for standard GDPR compliance; omit it only if your app needs custom anonymization logic for these entities.",
1779
1799
  "toggleableDefault": null,
1780
1800
  "requires": [
1781
1801
  "user",
@@ -1788,7 +1808,8 @@
1788
1808
  "channel-in-app",
1789
1809
  "tenant",
1790
1810
  "delivery",
1791
- "config"
1811
+ "config",
1812
+ "jobs"
1792
1813
  ],
1793
1814
  "configReads": [],
1794
1815
  "exposesApis": [],
@@ -1825,6 +1846,14 @@
1825
1846
  {
1826
1847
  "extensionName": "userData",
1827
1848
  "entityName": "config-value"
1849
+ },
1850
+ {
1851
+ "extensionName": "userData",
1852
+ "entityName": "delivery-attempt"
1853
+ },
1854
+ {
1855
+ "extensionName": "userData",
1856
+ "entityName": "job-run"
1828
1857
  }
1829
1858
  ],
1830
1859
  "configKeys": [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-kumiko-app",
3
- "version": "0.4.61",
3
+ "version": "0.4.63",
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>",
@@ -30,8 +30,8 @@
30
30
  "vendor:manifest": "bun run scripts/vendor-manifest.ts"
31
31
  },
32
32
  "dependencies": {
33
- "@cosmicdrift/kumiko-dev-server": "0.118.0",
34
- "@cosmicdrift/kumiko-framework": "0.118.0",
33
+ "@cosmicdrift/kumiko-dev-server": "0.120.0",
34
+ "@cosmicdrift/kumiko-framework": "0.120.0",
35
35
  "@inquirer/core": "^10.0.0",
36
36
  "@inquirer/prompts": "^7.4.0"
37
37
  },
package/src/index.ts CHANGED
@@ -76,7 +76,7 @@ export async function runCreate(args: CliArgs): Promise<number> {
76
76
  log(" bun install");
77
77
  log(" cp .env.example .env # JWT_SECRET + KUMIKO_SECRETS_MASTER_KEY_V1 setzen");
78
78
  log(" docker compose up -d # wenn noch kein PG + Redis läuft");
79
- log(" bun dev # startet den Dev-Server + zeigt URL/Login");
79
+ log(" bun dev # Demo-Tasks sind vorseeded — URL + Login im Banner");
80
80
  return 0;
81
81
  }
82
82