@cosmicdrift/kumiko-bundled-features 0.87.3 → 0.89.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/package.json +6 -6
- package/src/data-retention/__tests__/cleanup-cron-registration.test.ts +23 -0
- package/src/data-retention/__tests__/resolve-tenant-preset.test.ts +57 -0
- package/src/data-retention/__tests__/resolver.test.ts +3 -3
- package/src/data-retention/__tests__/retention-cleanup.integration.test.ts +188 -0
- package/src/data-retention/feature.ts +58 -7
- package/src/data-retention/presets.ts +5 -5
- package/src/data-retention/resolve-for-tenant.ts +9 -4
- package/src/data-retention/resolve-tenant-preset.ts +51 -0
- package/src/data-retention/run-retention-cleanup.ts +151 -0
- package/src/legal-pages/__tests__/legal-pages.integration.test.ts +8 -1
- package/src/legal-pages/feature.ts +22 -10
- package/src/mail-foundation/feature.ts +51 -6
- package/src/mail-foundation/index.ts +2 -0
- package/src/mail-transport-inmemory/feature.ts +6 -3
- package/src/mail-transport-smtp/feature.ts +11 -10
- package/src/managed-pages/__tests__/managed-pages.integration.test.ts +1 -1
- package/src/managed-pages/feature.ts +17 -9
- package/src/user-data-rights/__tests__/default-mailers.test.ts +135 -0
- package/src/user-data-rights/__tests__/email-templates.test.ts +85 -0
- package/src/user-data-rights/__tests__/inspector-screens.boot.test.ts +65 -0
- package/src/user-data-rights/__tests__/mail-default-bridge.integration.test.ts +154 -0
- package/src/user-data-rights/__tests__/run-export-jobs-cron-context.integration.test.ts +23 -2
- package/src/user-data-rights/email-templates.ts +211 -0
- package/src/user-data-rights/feature.ts +110 -21
- package/src/user-data-rights/handlers/deletion-grace-period.ts +17 -5
- package/src/user-data-rights/handlers/download-attempt-list.query.ts +11 -0
- package/src/user-data-rights/handlers/export-job-detail.query.ts +7 -0
- package/src/user-data-rights/handlers/export-job-list.query.ts +8 -0
- package/src/user-data-rights/handlers/request-deletion.write.ts +29 -3
- package/src/user-data-rights/lib/default-mailers.ts +116 -0
- package/src/user-data-rights/lib/mail-transport-resolver.ts +50 -0
- package/src/user-data-rights/run-export-jobs.ts +19 -8
- package/src/user-data-rights/run-forget-cleanup.ts +11 -1
- package/src/user-data-rights/screens.ts +71 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
EntityEditScreenDefinition,
|
|
3
|
+
EntityListScreenDefinition,
|
|
4
|
+
} from "@cosmicdrift/kumiko-framework/engine";
|
|
5
|
+
|
|
6
|
+
// Read-only operator inspector for the GDPR data-rights read-models. All
|
|
7
|
+
// screens are SystemAdmin-gated and inert until an app navs them — the feature
|
|
8
|
+
// only registers them, the app opts in per screen via r.nav (see the
|
|
9
|
+
// mount-inspector-screens guide). The entities are event-sourced r.entity rows,
|
|
10
|
+
// so binding entityList/entityEdit to them is safe (no direct-write rebuild
|
|
11
|
+
// hazard like jobs/sessions).
|
|
12
|
+
|
|
13
|
+
// Read-only field shorthand for the detail screens — every field is display-only.
|
|
14
|
+
const ro = (field: string) => ({ field, readOnly: true });
|
|
15
|
+
|
|
16
|
+
export const exportJobListScreen: EntityListScreenDefinition = {
|
|
17
|
+
id: "export-job-list",
|
|
18
|
+
type: "entityList",
|
|
19
|
+
entity: "export-job",
|
|
20
|
+
columns: ["userId", "status", "requestedAt", "completedAt", "expiresAt"],
|
|
21
|
+
rowActions: [
|
|
22
|
+
{
|
|
23
|
+
kind: "navigate",
|
|
24
|
+
id: "view",
|
|
25
|
+
label: "kumiko.actions.view",
|
|
26
|
+
screen: "export-job-detail",
|
|
27
|
+
entityId: "id",
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
searchable: false,
|
|
31
|
+
access: { roles: ["SystemAdmin"] },
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const exportJobDetailScreen: EntityEditScreenDefinition = {
|
|
35
|
+
id: "export-job-detail",
|
|
36
|
+
type: "entityEdit",
|
|
37
|
+
entity: "export-job",
|
|
38
|
+
layout: {
|
|
39
|
+
sections: [
|
|
40
|
+
{
|
|
41
|
+
columns: 2,
|
|
42
|
+
fields: [
|
|
43
|
+
ro("userId"),
|
|
44
|
+
ro("requestedFromTenantId"),
|
|
45
|
+
ro("status"),
|
|
46
|
+
ro("requestedAt"),
|
|
47
|
+
ro("startedAt"),
|
|
48
|
+
ro("completedAt"),
|
|
49
|
+
ro("expiresAt"),
|
|
50
|
+
ro("downloadStorageKey"),
|
|
51
|
+
ro("bytesWritten"),
|
|
52
|
+
ro("errorMessage"),
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
// Inspector is strictly read-only: no export-job:create/update/delete handler
|
|
58
|
+
// exists, and the export lifecycle is driven by the worker, not an operator.
|
|
59
|
+
allowCreate: false,
|
|
60
|
+
allowDelete: false,
|
|
61
|
+
access: { roles: ["SystemAdmin"] },
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export const downloadAttemptListScreen: EntityListScreenDefinition = {
|
|
65
|
+
id: "download-attempt-list",
|
|
66
|
+
type: "entityList",
|
|
67
|
+
entity: "download-attempt",
|
|
68
|
+
columns: ["attemptedAt", "result", "via", "ip", "attemptedByUserId", "jobId"],
|
|
69
|
+
searchable: false,
|
|
70
|
+
access: { roles: ["SystemAdmin"] },
|
|
71
|
+
};
|