create-kumiko-app 0.4.190 → 0.4.192
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 +71 -1
- package/package.json +4 -4
package/feature-manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "samples/apps/use-all-bundled APP_FEATURES (composeFeatures includeBundled + signup)",
|
|
3
|
-
"featureCount":
|
|
3
|
+
"featureCount": 64,
|
|
4
4
|
"features": [
|
|
5
5
|
{
|
|
6
6
|
"name": "admin-shell",
|
|
@@ -899,6 +899,76 @@
|
|
|
899
899
|
"secrets": [],
|
|
900
900
|
"writeHandlers": []
|
|
901
901
|
},
|
|
902
|
+
{
|
|
903
|
+
"name": "form-draft",
|
|
904
|
+
"description": "Per-user, per-tenant working copy of an in-progress form, saved BEFORE the real domain entity exists. Owns one event-sourced entity, `form-draft` (`read_form_drafts`), keyed by a caller-assigned draftKey (typically screenId + optional hostEntityId), unique per (tenant, owner, draftKey). `save` upserts the draft blob ({ values, stepIndex, savedAt } — savedAt stamped server-side), `discard` deletes it (called once the real submit succeeds), `get` resumes it, `list` finds a user's open drafts for a given screenId (draftKey prefix match) — the fallback when a client-generated draftId is lost. Ownership is enforced by a per-row owner filter in every handler, not by roles — a foreign user's save/discard/get/list for someone else's draftKey never sees or touches that row. Never holds anything that already lives in a domain stream; the consuming app is responsible for discarding once the domain write succeeds. A daily cron job hard-deletes drafts past a configurable retention window (`form-draft:config:retention-days`, SystemAdmin-writable, default 30 days).",
|
|
905
|
+
"toggleableDefault": null,
|
|
906
|
+
"requires": [
|
|
907
|
+
"config"
|
|
908
|
+
],
|
|
909
|
+
"optionalRequires": [],
|
|
910
|
+
"configReads": [],
|
|
911
|
+
"exposesApis": [],
|
|
912
|
+
"usesApis": [],
|
|
913
|
+
"extensionsUsed": [],
|
|
914
|
+
"configKeys": [
|
|
915
|
+
{
|
|
916
|
+
"key": "retention-days",
|
|
917
|
+
"qualifiedName": "form-draft:config:retention-days",
|
|
918
|
+
"type": "number",
|
|
919
|
+
"scope": "system",
|
|
920
|
+
"default": 30,
|
|
921
|
+
"encrypted": false,
|
|
922
|
+
"computed": false,
|
|
923
|
+
"options": null,
|
|
924
|
+
"bounds": {
|
|
925
|
+
"min": 1
|
|
926
|
+
},
|
|
927
|
+
"pattern": null,
|
|
928
|
+
"writeRoles": [
|
|
929
|
+
"SystemAdmin"
|
|
930
|
+
],
|
|
931
|
+
"readRoles": [
|
|
932
|
+
"TenantAdmin",
|
|
933
|
+
"Admin",
|
|
934
|
+
"SystemAdmin"
|
|
935
|
+
]
|
|
936
|
+
}
|
|
937
|
+
],
|
|
938
|
+
"secrets": [],
|
|
939
|
+
"writeHandlers": [
|
|
940
|
+
"form-draft:write:discard",
|
|
941
|
+
"form-draft:write:save"
|
|
942
|
+
],
|
|
943
|
+
"uiHints": {
|
|
944
|
+
"displayLabel": "Form Drafts",
|
|
945
|
+
"category": "data",
|
|
946
|
+
"recommended": false
|
|
947
|
+
}
|
|
948
|
+
},
|
|
949
|
+
{
|
|
950
|
+
"name": "form-draft-user-data",
|
|
951
|
+
"description": "GDPR (Art. 20 export / Art. 17 erasure) coverage for the `form-draft` feature's `form-draft` entity. Mounts the EXT_USER_DATA export hook so a user's saved drafts are included in the user-data export bundle, and a delete hook that physically removes the user's own draft rows on forget. Kept separate from `form-draft` so form-draft consumers without the user-data-rights pipeline don't pull a hard dependency — requires `user-data-rights`, optionalRequires `form-draft`.",
|
|
952
|
+
"toggleableDefault": null,
|
|
953
|
+
"requires": [
|
|
954
|
+
"user-data-rights"
|
|
955
|
+
],
|
|
956
|
+
"optionalRequires": [
|
|
957
|
+
"form-draft"
|
|
958
|
+
],
|
|
959
|
+
"configReads": [],
|
|
960
|
+
"exposesApis": [],
|
|
961
|
+
"usesApis": [],
|
|
962
|
+
"extensionsUsed": [
|
|
963
|
+
{
|
|
964
|
+
"extensionName": "userData",
|
|
965
|
+
"entityName": "form-draft"
|
|
966
|
+
}
|
|
967
|
+
],
|
|
968
|
+
"configKeys": [],
|
|
969
|
+
"secrets": [],
|
|
970
|
+
"writeHandlers": []
|
|
971
|
+
},
|
|
902
972
|
{
|
|
903
973
|
"name": "inbound-mail-foundation",
|
|
904
974
|
"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.",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-kumiko-app",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.192",
|
|
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,9 +30,9 @@
|
|
|
30
30
|
"vendor:manifest": "bun run scripts/vendor-manifest.ts"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@cosmicdrift/kumiko-dev-server": "0.
|
|
34
|
-
"@cosmicdrift/kumiko-framework": "0.
|
|
35
|
-
"@cosmicdrift/kumiko-server-runtime": "0.
|
|
33
|
+
"@cosmicdrift/kumiko-dev-server": "0.188.0",
|
|
34
|
+
"@cosmicdrift/kumiko-framework": "0.188.0",
|
|
35
|
+
"@cosmicdrift/kumiko-server-runtime": "0.188.0",
|
|
36
36
|
"@inquirer/core": "^10.0.0",
|
|
37
37
|
"@inquirer/prompts": "^7.4.0"
|
|
38
38
|
},
|