@cosmicdrift/kumiko-bundled-features 0.371.0 → 0.372.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/dist/auth-mfa/db/queries.d.ts +3 -2
- package/dist/auth-mfa/db/queries.js +2 -5
- package/dist/auth-mfa/schema/user-mfa.d.ts +10 -10
- package/dist/billing-foundation/entities.d.ts +10 -10
- package/dist/billing-foundation/projection.d.ts +10 -10
- package/dist/cap-counter/entity.d.ts +4 -4
- package/dist/cap-overview/web/cap-cards-panel.js +2 -1
- package/dist/compliance-profiles/schema/profile-selection.d.ts +4 -4
- package/dist/config/table.d.ts +6 -6
- package/dist/config/web/index.d.ts +1 -0
- package/dist/config/web/index.js +1 -0
- package/dist/crypto-shredding/handlers/forget-subject.write.js +55 -30
- package/dist/crypto-shredding/resolve-file-bytes-deleter.d.ts +3 -0
- package/dist/crypto-shredding/resolve-file-bytes-deleter.js +24 -0
- package/dist/custom-fields/entity.d.ts +9 -7
- package/dist/custom-fields/executor.d.ts +19 -1
- package/dist/data-retention/index.d.ts +1 -0
- package/dist/data-retention/index.js +1 -0
- package/dist/data-retention/run-retention-cleanup.js +27 -159
- package/dist/data-retention/schema/tenant-retention-override.d.ts +6 -6
- package/dist/delivery/delivery-service.d.ts +2 -1
- package/dist/delivery/delivery-service.js +3 -2
- package/dist/delivery/handlers/unsubscribe-page-chrome.query.js +2 -2
- package/dist/delivery/index.d.ts +1 -1
- package/dist/delivery/index.js +1 -1
- package/dist/delivery/jobs.js +21 -7
- package/dist/delivery/recipient-address-seal.d.ts +13 -0
- package/dist/delivery/recipient-address-seal.js +53 -0
- package/dist/delivery/tables.d.ts +8 -7
- package/dist/delivery/testing.d.ts +2 -1
- package/dist/delivery/testing.js +1 -0
- package/dist/delivery/unsubscribe.d.ts +13 -2
- package/dist/delivery/unsubscribe.js +9 -1
- package/dist/document-ingest-foundation/entity.d.ts +8 -8
- package/dist/document-ingest-foundation/executor.d.ts +16 -1
- package/dist/file-foundation/read-file-ref-content.js +2 -2
- package/dist/folders/entity.d.ts +8 -8
- package/dist/folders/executor.d.ts +29 -2
- package/dist/form-draft/entity.d.ts +3 -3
- package/dist/form-draft/executor.d.ts +15 -1
- package/dist/inbound-mail-foundation/entities.d.ts +31 -31
- package/dist/inbound-mail-foundation/projection.d.ts +24 -24
- package/dist/jobs/job-run-table.d.ts +10 -10
- package/dist/ledger/entity.d.ts +21 -21
- package/dist/ledger/executor.d.ts +57 -3
- package/dist/managed-pages/table.d.ts +16 -14
- package/dist/notes-history/entity.d.ts +14 -14
- package/dist/notes-history/executor.d.ts +31 -2
- package/dist/personal-access-tokens/schema/api-token.d.ts +9 -9
- package/dist/personal-access-tokens/screens.js +14 -9
- package/dist/secrets/table.d.ts +2 -2
- package/dist/sessions/schema/user-session.d.ts +8 -8
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.js +2 -0
- package/dist/shared/purge-files-reaching-subject.d.ts +25 -0
- package/dist/shared/purge-files-reaching-subject.js +146 -0
- package/dist/shared/purge-row-file-refs.d.ts +33 -0
- package/dist/shared/purge-row-file-refs.js +152 -0
- package/dist/tags/entity.d.ts +9 -9
- package/dist/tags/executor.d.ts +30 -2
- package/dist/template-resolver/handlers/shared.d.ts +28 -1
- package/dist/template-resolver/table.d.ts +32 -32
- package/dist/template-resolver/template-preview.js +13 -4
- package/dist/template-resolver/user-content-table.d.ts +16 -16
- package/dist/template-resolver/web/client-plugin.js +2 -1
- package/dist/template-resolver/web/document-editor-extensions.d.ts +1 -1
- package/dist/template-resolver/web/document-editor-extensions.js +2 -5
- package/dist/template-resolver/web/placeholder-line-editor.js +2 -2
- package/dist/tenant/handlers/list.query.d.ts +21 -1
- package/dist/tenant/invitation-table.d.ts +14 -14
- package/dist/tenant/membership-table.d.ts +4 -4
- package/dist/tenant/schema/tenant.d.ts +20 -18
- package/dist/tier-engine/entity.d.ts +2 -2
- package/dist/tier-engine/tier-resolver.d.ts +2 -2
- package/dist/user/handlers/me.query.d.ts +21 -0
- package/dist/user/schema/user.d.ts +24 -22
- package/dist/user-data-rights/run-export-jobs.d.ts +20 -1
- package/dist/user-data-rights/run-forget-cleanup.js +35 -1
- package/dist/user-data-rights/schema/download-attempt.d.ts +16 -16
- package/dist/user-data-rights/schema/download-token.d.ts +16 -16
- package/dist/user-data-rights/schema/export-job.d.ts +20 -20
- package/dist/user-data-rights/web/privacy-center-screen.js +2 -1
- package/dist/waitlist/entity.d.ts +24 -24
- package/dist/waitlist/lib.d.ts +24 -1
- package/package.json +11 -11
- package/src/crypto-shredding/changes.json +6 -0
- package/src/data-retention/changes.json +6 -0
- package/src/delivery/changes.json +13 -0
- package/src/files/changes.json +7 -0
- package/src/personal-access-tokens/changes.json +12 -0
- package/src/template-resolver/changes.json +6 -0
- package/src/user-data-rights/changes.json +6 -0
|
@@ -13,7 +13,7 @@ export type ExportJobStatus = (typeof EXPORT_JOB_STATUS)[keyof typeof EXPORT_JOB
|
|
|
13
13
|
*/
|
|
14
14
|
export declare const ACTIVE_JOB_CONSTRAINT = "read_export_jobs_one_active_per_user";
|
|
15
15
|
export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields").EntityDefinition<{
|
|
16
|
-
userId: {
|
|
16
|
+
readonly userId: {
|
|
17
17
|
readonly type: "text";
|
|
18
18
|
readonly description?: string;
|
|
19
19
|
readonly maxLength?: number;
|
|
@@ -36,7 +36,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
36
36
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
37
37
|
required: true;
|
|
38
38
|
};
|
|
39
|
-
requestedFromTenantId: {
|
|
39
|
+
readonly requestedFromTenantId: {
|
|
40
40
|
readonly type: "text";
|
|
41
41
|
readonly description?: string;
|
|
42
42
|
readonly maxLength?: number;
|
|
@@ -59,7 +59,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
59
59
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
60
60
|
required: true;
|
|
61
61
|
};
|
|
62
|
-
status: {
|
|
62
|
+
readonly status: {
|
|
63
63
|
readonly type: "select";
|
|
64
64
|
readonly description?: string;
|
|
65
65
|
readonly options: readonly ["pending", "running", "done", "failed"];
|
|
@@ -83,7 +83,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
83
83
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
84
84
|
required: true;
|
|
85
85
|
};
|
|
86
|
-
requestedAt: {
|
|
86
|
+
readonly requestedAt: {
|
|
87
87
|
readonly type: "timestamp";
|
|
88
88
|
readonly description?: string;
|
|
89
89
|
readonly required?: boolean;
|
|
@@ -98,7 +98,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
98
98
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
99
99
|
required: true;
|
|
100
100
|
};
|
|
101
|
-
startedAt: {
|
|
101
|
+
readonly startedAt: {
|
|
102
102
|
readonly type: "timestamp";
|
|
103
103
|
readonly description?: string;
|
|
104
104
|
readonly required?: boolean;
|
|
@@ -113,7 +113,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
113
113
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
114
114
|
required: false;
|
|
115
115
|
};
|
|
116
|
-
completedAt: {
|
|
116
|
+
readonly completedAt: {
|
|
117
117
|
readonly type: "timestamp";
|
|
118
118
|
readonly description?: string;
|
|
119
119
|
readonly required?: boolean;
|
|
@@ -128,7 +128,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
128
128
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
129
129
|
required: false;
|
|
130
130
|
};
|
|
131
|
-
downloadStorageKey: {
|
|
131
|
+
readonly downloadStorageKey: {
|
|
132
132
|
readonly type: "text";
|
|
133
133
|
readonly description?: string;
|
|
134
134
|
readonly maxLength?: number;
|
|
@@ -151,7 +151,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
151
151
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
152
152
|
required: false;
|
|
153
153
|
};
|
|
154
|
-
expiresAt: {
|
|
154
|
+
readonly expiresAt: {
|
|
155
155
|
readonly type: "timestamp";
|
|
156
156
|
readonly description?: string;
|
|
157
157
|
readonly required?: boolean;
|
|
@@ -166,7 +166,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
166
166
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
167
167
|
required: false;
|
|
168
168
|
};
|
|
169
|
-
errorMessage: {
|
|
169
|
+
readonly errorMessage: {
|
|
170
170
|
readonly type: "longText";
|
|
171
171
|
readonly description?: string;
|
|
172
172
|
readonly maxLength?: number;
|
|
@@ -182,7 +182,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
182
182
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
183
183
|
required: false;
|
|
184
184
|
};
|
|
185
|
-
bytesWritten: {
|
|
185
|
+
readonly bytesWritten: {
|
|
186
186
|
readonly type: "bigInt";
|
|
187
187
|
readonly description?: string;
|
|
188
188
|
readonly required?: boolean;
|
|
@@ -196,7 +196,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
196
196
|
};
|
|
197
197
|
}, "tenant">;
|
|
198
198
|
export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db").EntityTable<import("@cosmicdrift/kumiko-types/fields").EntityDefinition<{
|
|
199
|
-
userId: {
|
|
199
|
+
readonly userId: {
|
|
200
200
|
readonly type: "text";
|
|
201
201
|
readonly description?: string;
|
|
202
202
|
readonly maxLength?: number;
|
|
@@ -219,7 +219,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
|
|
|
219
219
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
220
220
|
required: true;
|
|
221
221
|
};
|
|
222
|
-
requestedFromTenantId: {
|
|
222
|
+
readonly requestedFromTenantId: {
|
|
223
223
|
readonly type: "text";
|
|
224
224
|
readonly description?: string;
|
|
225
225
|
readonly maxLength?: number;
|
|
@@ -242,7 +242,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
|
|
|
242
242
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
243
243
|
required: true;
|
|
244
244
|
};
|
|
245
|
-
status: {
|
|
245
|
+
readonly status: {
|
|
246
246
|
readonly type: "select";
|
|
247
247
|
readonly description?: string;
|
|
248
248
|
readonly options: readonly ["pending", "running", "done", "failed"];
|
|
@@ -266,7 +266,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
|
|
|
266
266
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
267
267
|
required: true;
|
|
268
268
|
};
|
|
269
|
-
requestedAt: {
|
|
269
|
+
readonly requestedAt: {
|
|
270
270
|
readonly type: "timestamp";
|
|
271
271
|
readonly description?: string;
|
|
272
272
|
readonly required?: boolean;
|
|
@@ -281,7 +281,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
|
|
|
281
281
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
282
282
|
required: true;
|
|
283
283
|
};
|
|
284
|
-
startedAt: {
|
|
284
|
+
readonly startedAt: {
|
|
285
285
|
readonly type: "timestamp";
|
|
286
286
|
readonly description?: string;
|
|
287
287
|
readonly required?: boolean;
|
|
@@ -296,7 +296,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
|
|
|
296
296
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
297
297
|
required: false;
|
|
298
298
|
};
|
|
299
|
-
completedAt: {
|
|
299
|
+
readonly completedAt: {
|
|
300
300
|
readonly type: "timestamp";
|
|
301
301
|
readonly description?: string;
|
|
302
302
|
readonly required?: boolean;
|
|
@@ -311,7 +311,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
|
|
|
311
311
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
312
312
|
required: false;
|
|
313
313
|
};
|
|
314
|
-
downloadStorageKey: {
|
|
314
|
+
readonly downloadStorageKey: {
|
|
315
315
|
readonly type: "text";
|
|
316
316
|
readonly description?: string;
|
|
317
317
|
readonly maxLength?: number;
|
|
@@ -334,7 +334,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
|
|
|
334
334
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
335
335
|
required: false;
|
|
336
336
|
};
|
|
337
|
-
expiresAt: {
|
|
337
|
+
readonly expiresAt: {
|
|
338
338
|
readonly type: "timestamp";
|
|
339
339
|
readonly description?: string;
|
|
340
340
|
readonly required?: boolean;
|
|
@@ -349,7 +349,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
|
|
|
349
349
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
350
350
|
required: false;
|
|
351
351
|
};
|
|
352
|
-
errorMessage: {
|
|
352
|
+
readonly errorMessage: {
|
|
353
353
|
readonly type: "longText";
|
|
354
354
|
readonly description?: string;
|
|
355
355
|
readonly maxLength?: number;
|
|
@@ -365,7 +365,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
|
|
|
365
365
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
366
366
|
required: false;
|
|
367
367
|
};
|
|
368
|
-
bytesWritten: {
|
|
368
|
+
readonly bytesWritten: {
|
|
369
369
|
readonly type: "bigInt";
|
|
370
370
|
readonly description?: string;
|
|
371
371
|
readonly required?: boolean;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { EMPTY_VALUE_PLACEHOLDER } from "@cosmicdrift/kumiko-headless";
|
|
2
3
|
// @runtime client
|
|
3
4
|
// Export section (Art. 20) — the one part of user-data-rights' privacy-center
|
|
4
5
|
// screen that stays custom (fw#2312). Registered as an EditExtensionSection
|
|
@@ -29,7 +30,7 @@ function failureKey(error) {
|
|
|
29
30
|
// kein Date-API (no-date-api-Guard) und universell. Leer/null → "—".
|
|
30
31
|
export function formatDate(iso) {
|
|
31
32
|
if (!iso)
|
|
32
|
-
return
|
|
33
|
+
return EMPTY_VALUE_PLACEHOLDER;
|
|
33
34
|
const tIndex = iso.indexOf("T");
|
|
34
35
|
return tIndex > 0 ? iso.slice(0, tIndex) : iso;
|
|
35
36
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare function isOpenWaitlistStatus(status: unknown): boolean;
|
|
2
2
|
export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fields").EntityDefinition<{
|
|
3
|
-
name: {
|
|
3
|
+
readonly name: {
|
|
4
4
|
readonly type: "text";
|
|
5
5
|
readonly description?: string;
|
|
6
6
|
readonly maxLength?: number;
|
|
@@ -23,7 +23,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
23
23
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
24
24
|
required: true;
|
|
25
25
|
};
|
|
26
|
-
email: {
|
|
26
|
+
readonly email: {
|
|
27
27
|
readonly type: "text";
|
|
28
28
|
readonly description?: string;
|
|
29
29
|
readonly maxLength?: number;
|
|
@@ -46,7 +46,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
46
46
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
47
47
|
required: true;
|
|
48
48
|
};
|
|
49
|
-
company: {
|
|
49
|
+
readonly company: {
|
|
50
50
|
readonly type: "text";
|
|
51
51
|
readonly description?: string;
|
|
52
52
|
readonly maxLength?: number;
|
|
@@ -69,7 +69,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
69
69
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
70
70
|
required: false;
|
|
71
71
|
};
|
|
72
|
-
portfolio: {
|
|
72
|
+
readonly portfolio: {
|
|
73
73
|
readonly type: "text";
|
|
74
74
|
readonly description?: string;
|
|
75
75
|
readonly maxLength?: number;
|
|
@@ -92,7 +92,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
92
92
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
93
93
|
required: false;
|
|
94
94
|
};
|
|
95
|
-
message: {
|
|
95
|
+
readonly message: {
|
|
96
96
|
readonly type: "longText";
|
|
97
97
|
readonly description?: string;
|
|
98
98
|
readonly maxLength?: number;
|
|
@@ -108,7 +108,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
108
108
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
109
109
|
required: false;
|
|
110
110
|
};
|
|
111
|
-
locale: {
|
|
111
|
+
readonly locale: {
|
|
112
112
|
readonly type: "text";
|
|
113
113
|
readonly description?: string;
|
|
114
114
|
readonly maxLength?: number;
|
|
@@ -131,7 +131,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
131
131
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
132
132
|
required: true;
|
|
133
133
|
};
|
|
134
|
-
status: {
|
|
134
|
+
readonly status: {
|
|
135
135
|
readonly type: "select";
|
|
136
136
|
readonly description?: string;
|
|
137
137
|
readonly options: readonly ["pending", "invited", "provisioned", "rejected"];
|
|
@@ -155,7 +155,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
155
155
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
156
156
|
required: true;
|
|
157
157
|
};
|
|
158
|
-
submittedAt: {
|
|
158
|
+
readonly submittedAt: {
|
|
159
159
|
readonly type: "timestamp";
|
|
160
160
|
readonly description?: string;
|
|
161
161
|
readonly required?: boolean;
|
|
@@ -170,7 +170,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
170
170
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
171
171
|
required: true;
|
|
172
172
|
};
|
|
173
|
-
invitedAt: {
|
|
173
|
+
readonly invitedAt: {
|
|
174
174
|
readonly type: "timestamp";
|
|
175
175
|
readonly description?: string;
|
|
176
176
|
readonly required?: boolean;
|
|
@@ -185,7 +185,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
185
185
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
186
186
|
required: false;
|
|
187
187
|
};
|
|
188
|
-
invitedBy: {
|
|
188
|
+
readonly invitedBy: {
|
|
189
189
|
readonly type: "text";
|
|
190
190
|
readonly description?: string;
|
|
191
191
|
readonly maxLength?: number;
|
|
@@ -208,7 +208,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
208
208
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
209
209
|
required: false;
|
|
210
210
|
};
|
|
211
|
-
provisionedAt: {
|
|
211
|
+
readonly provisionedAt: {
|
|
212
212
|
readonly type: "timestamp";
|
|
213
213
|
readonly description?: string;
|
|
214
214
|
readonly required?: boolean;
|
|
@@ -223,7 +223,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
223
223
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
224
224
|
required: false;
|
|
225
225
|
};
|
|
226
|
-
linkedTenantId: {
|
|
226
|
+
readonly linkedTenantId: {
|
|
227
227
|
readonly type: "text";
|
|
228
228
|
readonly description?: string;
|
|
229
229
|
readonly maxLength?: number;
|
|
@@ -248,7 +248,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
248
248
|
};
|
|
249
249
|
}, "global">;
|
|
250
250
|
export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/db").EntityTable<import("@cosmicdrift/kumiko-types/fields").EntityDefinition<{
|
|
251
|
-
name: {
|
|
251
|
+
readonly name: {
|
|
252
252
|
readonly type: "text";
|
|
253
253
|
readonly description?: string;
|
|
254
254
|
readonly maxLength?: number;
|
|
@@ -271,7 +271,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
271
271
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
272
272
|
required: true;
|
|
273
273
|
};
|
|
274
|
-
email: {
|
|
274
|
+
readonly email: {
|
|
275
275
|
readonly type: "text";
|
|
276
276
|
readonly description?: string;
|
|
277
277
|
readonly maxLength?: number;
|
|
@@ -294,7 +294,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
294
294
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
295
295
|
required: true;
|
|
296
296
|
};
|
|
297
|
-
company: {
|
|
297
|
+
readonly company: {
|
|
298
298
|
readonly type: "text";
|
|
299
299
|
readonly description?: string;
|
|
300
300
|
readonly maxLength?: number;
|
|
@@ -317,7 +317,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
317
317
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
318
318
|
required: false;
|
|
319
319
|
};
|
|
320
|
-
portfolio: {
|
|
320
|
+
readonly portfolio: {
|
|
321
321
|
readonly type: "text";
|
|
322
322
|
readonly description?: string;
|
|
323
323
|
readonly maxLength?: number;
|
|
@@ -340,7 +340,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
340
340
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
341
341
|
required: false;
|
|
342
342
|
};
|
|
343
|
-
message: {
|
|
343
|
+
readonly message: {
|
|
344
344
|
readonly type: "longText";
|
|
345
345
|
readonly description?: string;
|
|
346
346
|
readonly maxLength?: number;
|
|
@@ -356,7 +356,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
356
356
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
357
357
|
required: false;
|
|
358
358
|
};
|
|
359
|
-
locale: {
|
|
359
|
+
readonly locale: {
|
|
360
360
|
readonly type: "text";
|
|
361
361
|
readonly description?: string;
|
|
362
362
|
readonly maxLength?: number;
|
|
@@ -379,7 +379,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
379
379
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
380
380
|
required: true;
|
|
381
381
|
};
|
|
382
|
-
status: {
|
|
382
|
+
readonly status: {
|
|
383
383
|
readonly type: "select";
|
|
384
384
|
readonly description?: string;
|
|
385
385
|
readonly options: readonly ["pending", "invited", "provisioned", "rejected"];
|
|
@@ -403,7 +403,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
403
403
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
404
404
|
required: true;
|
|
405
405
|
};
|
|
406
|
-
submittedAt: {
|
|
406
|
+
readonly submittedAt: {
|
|
407
407
|
readonly type: "timestamp";
|
|
408
408
|
readonly description?: string;
|
|
409
409
|
readonly required?: boolean;
|
|
@@ -418,7 +418,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
418
418
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
419
419
|
required: true;
|
|
420
420
|
};
|
|
421
|
-
invitedAt: {
|
|
421
|
+
readonly invitedAt: {
|
|
422
422
|
readonly type: "timestamp";
|
|
423
423
|
readonly description?: string;
|
|
424
424
|
readonly required?: boolean;
|
|
@@ -433,7 +433,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
433
433
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
434
434
|
required: false;
|
|
435
435
|
};
|
|
436
|
-
invitedBy: {
|
|
436
|
+
readonly invitedBy: {
|
|
437
437
|
readonly type: "text";
|
|
438
438
|
readonly description?: string;
|
|
439
439
|
readonly maxLength?: number;
|
|
@@ -456,7 +456,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
456
456
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
457
457
|
required: false;
|
|
458
458
|
};
|
|
459
|
-
provisionedAt: {
|
|
459
|
+
readonly provisionedAt: {
|
|
460
460
|
readonly type: "timestamp";
|
|
461
461
|
readonly description?: string;
|
|
462
462
|
readonly required?: boolean;
|
|
@@ -471,7 +471,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
471
471
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
472
472
|
required: false;
|
|
473
473
|
};
|
|
474
|
-
linkedTenantId: {
|
|
474
|
+
readonly linkedTenantId: {
|
|
475
475
|
readonly type: "text";
|
|
476
476
|
readonly description?: string;
|
|
477
477
|
readonly maxLength?: number;
|
package/dist/waitlist/lib.d.ts
CHANGED
|
@@ -4,7 +4,30 @@ export declare const WAITLIST_CROSS_TENANT_REASON = "waitlist is platform-wide (
|
|
|
4
4
|
export declare const adminAccess: {
|
|
5
5
|
readonly roles: readonly string[];
|
|
6
6
|
};
|
|
7
|
-
export declare const waitlistExecutor: import("@cosmicdrift/kumiko-types/event-store-executor-types").EventStoreExecutor
|
|
7
|
+
export declare const waitlistExecutor: import("@cosmicdrift/kumiko-types/event-store-executor-types").EventStoreExecutor<{
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly tenantId: string;
|
|
10
|
+
readonly version: number;
|
|
11
|
+
readonly insertedAt: Temporal.Instant;
|
|
12
|
+
readonly modifiedAt: Temporal.Instant | null;
|
|
13
|
+
readonly insertedById: string | null;
|
|
14
|
+
readonly modifiedById: string | null;
|
|
15
|
+
readonly isDeleted?: boolean | undefined;
|
|
16
|
+
readonly deletedAt?: Temporal.Instant | null | undefined;
|
|
17
|
+
readonly deletedById?: string | null | undefined;
|
|
18
|
+
readonly company: string | null;
|
|
19
|
+
readonly email: string;
|
|
20
|
+
readonly invitedAt: Temporal.Instant | null;
|
|
21
|
+
readonly invitedBy: string | null;
|
|
22
|
+
readonly linkedTenantId: string | null;
|
|
23
|
+
readonly locale: string;
|
|
24
|
+
readonly message: string | null;
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly portfolio: string | null;
|
|
27
|
+
readonly provisionedAt: Temporal.Instant | null;
|
|
28
|
+
readonly status: string;
|
|
29
|
+
readonly submittedAt: Temporal.Instant;
|
|
30
|
+
}>;
|
|
8
31
|
export declare function normalizeEmail(email: string): string;
|
|
9
32
|
export declare function waitlistDb(ctx: Pick<AppContext, "systemDb">): TenantDb;
|
|
10
33
|
export declare function platformActor(): SessionUser;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cosmicdrift/kumiko-bundled-features",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.372.0",
|
|
4
4
|
"description": "Built-in features — tenant, user, auth, delivery. The stuff you'd rewrite anyway, already typed.",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
|
|
@@ -536,12 +536,12 @@
|
|
|
536
536
|
}
|
|
537
537
|
},
|
|
538
538
|
"dependencies": {
|
|
539
|
-
"@cosmicdrift/kumiko-dispatcher-live": "0.
|
|
540
|
-
"@cosmicdrift/kumiko-framework": "0.
|
|
541
|
-
"@cosmicdrift/kumiko-headless": "0.
|
|
542
|
-
"@cosmicdrift/kumiko-renderer": "0.
|
|
543
|
-
"@cosmicdrift/kumiko-renderer-web": "0.
|
|
544
|
-
"@cosmicdrift/kumiko-types": "0.
|
|
539
|
+
"@cosmicdrift/kumiko-dispatcher-live": "0.372.0",
|
|
540
|
+
"@cosmicdrift/kumiko-framework": "0.372.0",
|
|
541
|
+
"@cosmicdrift/kumiko-headless": "0.372.0",
|
|
542
|
+
"@cosmicdrift/kumiko-renderer": "0.372.0",
|
|
543
|
+
"@cosmicdrift/kumiko-renderer-web": "0.372.0",
|
|
544
|
+
"@cosmicdrift/kumiko-types": "0.372.0",
|
|
545
545
|
"@mollie/api-client": "^4.5.0",
|
|
546
546
|
"@node-rs/argon2": "^2.0.2",
|
|
547
547
|
"@tiptap/core": "3.31.3",
|
|
@@ -1102,12 +1102,12 @@
|
|
|
1102
1102
|
],
|
|
1103
1103
|
"devDependencies": {
|
|
1104
1104
|
"@testing-library/user-event": "^14.6.1",
|
|
1105
|
-
"@cosmicdrift/kumiko-locale-de": "0.
|
|
1106
|
-
"@cosmicdrift/kumiko-locale-es": "0.
|
|
1107
|
-
"@cosmicdrift/kumiko-renderer-mail-html": "0.
|
|
1105
|
+
"@cosmicdrift/kumiko-locale-de": "0.372.0",
|
|
1106
|
+
"@cosmicdrift/kumiko-locale-es": "0.372.0",
|
|
1107
|
+
"@cosmicdrift/kumiko-renderer-mail-html": "0.372.0",
|
|
1108
1108
|
"jsqr": "^1.4.0",
|
|
1109
1109
|
"unpdf": "^1.8.1",
|
|
1110
|
-
"@cosmicdrift/kumiko-testing": "0.
|
|
1110
|
+
"@cosmicdrift/kumiko-testing": "0.372.0"
|
|
1111
1111
|
},
|
|
1112
1112
|
"peerDependencies": {
|
|
1113
1113
|
"@cosmicdrift/kumiko-testing": ">=0.366.0 <1.0.0"
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "0.372.0",
|
|
4
|
+
"type": "fix",
|
|
5
|
+
"title": "forget-subject removes files bound to the forgotten subject",
|
|
6
|
+
"detail": "Forgetting a record or user subject now deletes the bytes, derivatives and file_refs rows behind that subject's personal file fields (fail closed with missing_file_storage or file_delete_failed in cleanupError), so a retry can finish the job; the entity row stays."
|
|
7
|
+
},
|
|
2
8
|
{
|
|
3
9
|
"version": "0.370.0",
|
|
4
10
|
"type": "improvement",
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "0.372.0",
|
|
4
|
+
"type": "improvement",
|
|
5
|
+
"title": "runRetentionCleanup is exported for app tests",
|
|
6
|
+
"detail": "The data-retention entry point now exports runRetentionCleanup with its argument, result and skip types, so an app test can drive a retention run with its own now and file context and check that bytes, file_refs rows and the entity row are gone. The user-data-rights recipe shows the pattern."
|
|
7
|
+
},
|
|
2
8
|
{
|
|
3
9
|
"version": "0.363.0",
|
|
4
10
|
"type": "improvement",
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "0.372.0",
|
|
4
|
+
"type": "breaking",
|
|
5
|
+
"title": "Queued delivery jobs carry the recipient address sealed",
|
|
6
|
+
"detail": "createDeliveryService takes an addressCipher; the boot wiring passes the master-key cipher, so delivery.render and delivery.send payloads hold sealedAddress instead of address. Workers open it through ctx.configEncryption.",
|
|
7
|
+
"migration": "Roll out worker and web together with the same KUMIKO_SECRETS_MASTER_KEY_V<n>; a worker without the master key fails sealed jobs with send_failed. Code that calls createDeliveryService itself passes addressCipher to get sealed payloads."
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"version": "0.372.0",
|
|
11
|
+
"type": "improvement",
|
|
12
|
+
"title": "createUnsubscribePageChromeReader gives app routes the tenant branding for unsubscribe pages",
|
|
13
|
+
"detail": "The JSDoc of renderUnsubscribeResultPage pointed to a chrome read that only works for SystemAdmin, so app routes for legacy unsubscribe links rendered without branding. The new `createUnsubscribePageChromeReader({ dispatchSystemQuery })` returns `(tenantId, locale) => MailChrome | null`, failing soft to null. Build it once in the `wire` hook, whose deps now also carry `dispatchSystemQuery` (runProdApp, runWorkerApp.wireComponents, createKumikoServer), and call it with a tenant the route resolved itself, for example from the Host, never with a tenantId from the query string or body. The chrome query itself stays SystemAdmin-only; anonymous `/api/query` callers are still rejected for every tenant."
|
|
14
|
+
},
|
|
2
15
|
{
|
|
3
16
|
"version": "0.371.0",
|
|
4
17
|
"type": "improvement",
|
package/src/files/changes.json
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "0.372.0",
|
|
4
|
+
"type": "breaking",
|
|
5
|
+
"title": "Orphaned upload bytes are swept through a new upload ledger",
|
|
6
|
+
"detail": "The files feature registers the store_file_upload_ledger table and an hourly sweep job. FileContext has the new methods writeUploadBytes and forgetUploadBytes, which the four upload paths use; a custom FileContext or resolver must provide the ledger (withUploadLedger wraps a resolver). TenantDb.deleteMany resolves to the number of deleted rows instead of void. A fileRef commit whose ledger row was already swept throws InternalError \"upload expired\".",
|
|
7
|
+
"migration": "Generate and apply a migration with `kumiko-schema generate` — uploads fail without the new store_file_upload_ledger table"
|
|
8
|
+
},
|
|
2
9
|
{
|
|
3
10
|
"version": "0.354.0",
|
|
4
11
|
"type": "breaking",
|
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "0.372.0",
|
|
4
|
+
"type": "fix",
|
|
5
|
+
"title": "Tenants whose tier excludes API tokens now reach the lockedFallbackScreen",
|
|
6
|
+
"detail": "GET /api/schema removed every screen of a feature the tenant has switched off, and the role projection then dropped the navs of other features that pointed at them. The token list screen was gone, so the upgrade screen set via lockedFallbackScreen was never shown. Screens that declare a fallback (and the same-feature screens those fallbacks name) now stay in the schema; the server still rejects their queries and writes with feature_disabled, which makes the renderer show the fallback. Navs, content collections and workspaces of the disabled feature are still removed."
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"version": "0.372.0",
|
|
10
|
+
"type": "improvement",
|
|
11
|
+
"title": "The token list looks like any other Kumiko list",
|
|
12
|
+
"detail": "The create button now sits in the page header next to the title, and an empty list shows the standard hint with a create button. The German title of the list screen is \"API-Tokens\" instead of \"Personal Access Tokens\", which also fixes the breadcrumb of the mint screen. Renderer, all apps: a projection list without an entity create button now shows its first primary toolbar action (one that needs no confirmation dialog) in the page header on desktop as well, with its label, instead of in the toolbar row; on phones it already did. On desktop only an icon derived from the action id (or declared on the action) is shown; the plus fallback exists only on phones. Consumers get this after the bump without code changes."
|
|
13
|
+
},
|
|
2
14
|
{
|
|
3
15
|
"version": "0.368.0",
|
|
4
16
|
"type": "improvement",
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "0.372.0",
|
|
4
|
+
"type": "improvement",
|
|
5
|
+
"title": "Text examples of template variables follow the template's language",
|
|
6
|
+
"detail": "The `example` of a text or richText templateVariable is now read like `label`: an i18n key resolves to the translation of the edited template's locale, plain text stays as it is. Preview, the sample values bar and send-test therefore show German examples for a German template. Example values of other types (link, number, enum-like text values) stay as declared; put the explanation of such a value into the variable's label. Apps: register `templateVariable.text({ example: \"<app>:mail.example.x\" })` and add the key with de, en and es via `r.translations`."
|
|
7
|
+
},
|
|
2
8
|
{
|
|
3
9
|
"version": "0.370.0",
|
|
4
10
|
"type": "improvement",
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "0.372.0",
|
|
4
|
+
"type": "fix",
|
|
5
|
+
"title": "Account forget-cleanup removes userOwned files uploaded by someone else",
|
|
6
|
+
"detail": "runForgetCleanup now purges the bytes, derivatives and file_refs rows behind every file field whose subject is the deleted user, not only files the user uploaded; a failing byte delete keeps the user in DeletionRequested so the next run retries."
|
|
7
|
+
},
|
|
2
8
|
{
|
|
3
9
|
"version": "0.369.0",
|
|
4
10
|
"type": "fix",
|