create-kumiko-app 0.406.0 → 0.409.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "source": "samples/apps/use-all-bundled APP_FEATURES (composeFeatures includeBundled + signup)",
3
- "featureCount": 90,
3
+ "featureCount": 92,
4
4
  "features": [
5
5
  {
6
6
  "name": "account-security",
@@ -694,6 +694,94 @@
694
694
  "recommended": true
695
695
  }
696
696
  },
697
+ {
698
+ "name": "contact",
699
+ "description": "Contact inbox: an anonymous browser client (GET /contact/client.js) submits questions, contact requests, bug reports and wishes behind a honeypot, a minimum submit time and a single-use proof-of-work challenge; signed-in users file reports from the admin. Every request is stored platform-wide and every SystemAdmin is notified by mail, optionally also in a Telegram chat (option `telegram`, off by default); the notification names only the kind, the app and a link, never name, address, phone, subject or message, because mail and Telegram cannot be shredded. SystemAdmins reply by mail (Reply-To set, attachments, quoting the original) and mark requests done; a website sender gets a fixed acknowledgement, a signed-in reporter a copy and an in-app note. Personal data is crypto-shredding-ready and the EXT_USER_DATA hooks export and erase a user's requests.",
700
+ "toggleableDefault": null,
701
+ "adoptsBundledLists": true,
702
+ "requires": [
703
+ "config",
704
+ "delivery",
705
+ "user-data-rights",
706
+ "files",
707
+ "notes-history",
708
+ "channel-telegram"
709
+ ],
710
+ "optionalRequires": [],
711
+ "configReads": [],
712
+ "exposesApis": [],
713
+ "usesApis": [],
714
+ "extensionsUsed": [
715
+ {
716
+ "extensionName": "userData",
717
+ "entityName": "contact-request"
718
+ },
719
+ {
720
+ "extensionName": "userData",
721
+ "entityName": "contact-reply"
722
+ }
723
+ ],
724
+ "configKeys": [
725
+ {
726
+ "key": "reply-to",
727
+ "qualifiedName": "contact:config:reply-to",
728
+ "type": "text",
729
+ "scope": "system",
730
+ "default": "",
731
+ "encrypted": false,
732
+ "computed": false,
733
+ "validated": false,
734
+ "options": null,
735
+ "bounds": null,
736
+ "pattern": {
737
+ "regex": "^$|^[^\\s@<>]{1,64}@[^\\s@<>]{1,200}\\.[^\\s@<>]{2,24}$"
738
+ },
739
+ "writeRoles": [
740
+ "SystemAdmin"
741
+ ],
742
+ "readRoles": [
743
+ "SystemAdmin"
744
+ ]
745
+ },
746
+ {
747
+ "key": "telegram-chat",
748
+ "qualifiedName": "contact:config:telegram-chat",
749
+ "type": "text",
750
+ "scope": "system",
751
+ "default": "",
752
+ "encrypted": false,
753
+ "computed": false,
754
+ "validated": false,
755
+ "options": null,
756
+ "bounds": null,
757
+ "pattern": {
758
+ "regex": "^$|^(-?[0-9]{1,20}|@[A-Za-z0-9_]{5,32})$"
759
+ },
760
+ "writeRoles": [
761
+ "SystemAdmin"
762
+ ],
763
+ "readRoles": [
764
+ "SystemAdmin"
765
+ ]
766
+ }
767
+ ],
768
+ "secrets": [],
769
+ "writeHandlers": [
770
+ "contact:write:forward-request",
771
+ "contact:write:mark-done",
772
+ "contact:write:notify-reporter-in-app",
773
+ "contact:write:reply",
774
+ "contact:write:report",
775
+ "contact:write:send-reply-mail",
776
+ "contact:write:send-test",
777
+ "contact:write:submit"
778
+ ],
779
+ "uiHints": {
780
+ "displayLabel": "Contact",
781
+ "category": "communication",
782
+ "recommended": false
783
+ }
784
+ },
697
785
  {
698
786
  "name": "crypto-shredding",
699
787
  "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).",
@@ -3164,6 +3252,37 @@
3164
3252
  "recommended": false
3165
3253
  }
3166
3254
  },
3255
+ {
3256
+ "name": "tenant-inactivity",
3257
+ "description": "Deletes abandoned free accounts: warns the tenant owners before the deadline, then files the regular tenant-lifecycle deletion request. Activity or the keep-account link restarts the period; tiers without a rule are exempt.",
3258
+ "toggleableDefault": null,
3259
+ "requires": [
3260
+ "sessions",
3261
+ "tenant",
3262
+ "tenant-lifecycle",
3263
+ "delivery"
3264
+ ],
3265
+ "optionalRequires": [],
3266
+ "configReads": [],
3267
+ "exposesApis": [],
3268
+ "usesApis": [],
3269
+ "extensionsUsed": [
3270
+ {
3271
+ "extensionName": "tenantData",
3272
+ "entityName": "tenant-inactivity-state"
3273
+ }
3274
+ ],
3275
+ "configKeys": [],
3276
+ "secrets": [],
3277
+ "writeHandlers": [
3278
+ "tenant-inactivity:write:keep-account"
3279
+ ],
3280
+ "uiHints": {
3281
+ "displayLabel": "Tenant Inactivity · Deletion",
3282
+ "category": "compliance",
3283
+ "recommended": false
3284
+ }
3285
+ },
3167
3286
  {
3168
3287
  "name": "tenant-lifecycle",
3169
3288
  "description": "Tenant-destroy lifecycle: request/cancel destruction with compliance-profile grace, auth 410 gate for teardown states, cron trigger after grace, and staged destroy runner (extension fan-out, subject-key erase, tenant tombstone).",
@@ -3173,7 +3292,8 @@
3173
3292
  "compliance-profiles"
3174
3293
  ],
3175
3294
  "optionalRequires": [
3176
- "sessions"
3295
+ "sessions",
3296
+ "data-retention"
3177
3297
  ],
3178
3298
  "configReads": [],
3179
3299
  "exposesApis": [
@@ -3183,6 +3303,18 @@
3183
3303
  "compliance.forTenant"
3184
3304
  ],
3185
3305
  "extensionsUsed": [
3306
+ {
3307
+ "extensionName": "tenantDestructionHold",
3308
+ "entityName": "tenant-lifecycle"
3309
+ },
3310
+ {
3311
+ "extensionName": "tenantData",
3312
+ "entityName": "tenant-compliance-profile"
3313
+ },
3314
+ {
3315
+ "extensionName": "tenantData",
3316
+ "entityName": "tenant-retention-override"
3317
+ },
3186
3318
  {
3187
3319
  "extensionName": "tenantLifecycleStatus",
3188
3320
  "entityName": "tenant-lifecycle"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-kumiko-app",
3
- "version": "0.406.0",
3
+ "version": "0.409.0",
4
4
  "description": "`bun create kumiko-app <name>` — scaffold a new Kumiko app with an interactive feature picker.",
5
5
  "license": "MIT",
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.406.0",
31
- "@cosmicdrift/kumiko-framework": "0.406.0",
32
- "@cosmicdrift/kumiko-server-runtime": "0.406.0",
33
- "@cosmicdrift/kumiko-testing": "0.406.0",
30
+ "@cosmicdrift/kumiko-dev-server": "0.409.0",
31
+ "@cosmicdrift/kumiko-framework": "0.409.0",
32
+ "@cosmicdrift/kumiko-server-runtime": "0.409.0",
33
+ "@cosmicdrift/kumiko-testing": "0.409.0",
34
34
  "@inquirer/core": "^10.3.2",
35
35
  "@inquirer/prompts": "^7.10.1"
36
36
  },
package/src/changes.json CHANGED
@@ -1,4 +1,10 @@
1
1
  [
2
+ {
3
+ "version": "0.409.0",
4
+ "type": "improvement",
5
+ "title": "Feature manifest lists contact and its new options",
6
+ "detail": "`feature-manifest.json` describes the bundled feature `contact` with its config keys and dependencies (`config`, `delivery`, `user-data-rights`, `files`; `channel-telegram` with option `telegram`), so scaffolding and `kumiko check` know it."
7
+ },
2
8
  {
3
9
  "version": "0.363.0",
4
10
  "type": "improvement",