@cosmicdrift/kumiko-bundled-features 0.355.0 → 0.357.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/i18n.js +1 -0
- package/dist/auth-mfa/schema/user-mfa.d.ts +6 -0
- package/dist/auth-mfa/screens.js +8 -1
- package/dist/billing-foundation/entities.d.ts +8 -0
- package/dist/billing-foundation/projection.d.ts +8 -0
- package/dist/cap-counter/entity.d.ts +1 -0
- package/dist/cap-counter/feature.js +7 -1
- package/dist/cap-overview/screens.js +3 -1
- package/dist/compliance-profiles/handlers/set-profile.write.js +14 -22
- package/dist/config/table.d.ts +6 -0
- package/dist/crypto-shredding/handlers/forget-subject.write.js +15 -3
- package/dist/custom-fields/entity.d.ts +4 -0
- package/dist/custom-fields/handlers/define-system-field.write.js +8 -16
- package/dist/custom-fields/handlers/delete-system-field.write.js +5 -2
- package/dist/custom-fields/lib/define-or-resurrect.d.ts +2 -1
- package/dist/custom-fields/lib/define-or-resurrect.js +11 -4
- package/dist/data-retention/schema/tenant-retention-override.d.ts +4 -0
- package/dist/delivery/chat-webhook-sender.js +1 -1
- package/dist/delivery/constants.d.ts +1 -0
- package/dist/delivery/constants.js +4 -0
- package/dist/delivery/delivery-service.js +62 -25
- package/dist/delivery/feature.js +7 -1
- package/dist/delivery/jobs.js +25 -1
- package/dist/delivery/tables.d.ts +6 -0
- package/dist/delivery/testing.d.ts +1 -0
- package/dist/document-ingest-foundation/entity.d.ts +4 -0
- package/dist/folders/entity.d.ts +8 -0
- package/dist/form-draft/entity.d.ts +2 -0
- package/dist/inbound-mail-foundation/entities.d.ts +25 -0
- package/dist/inbound-mail-foundation/projection.d.ts +20 -0
- package/dist/jobs/job-run-table.d.ts +6 -0
- package/dist/ledger/entity.d.ts +13 -0
- package/dist/managed-pages/handlers/set.write.js +6 -17
- package/dist/managed-pages/table.d.ts +12 -0
- package/dist/notes-history/entity.d.ts +12 -0
- package/dist/notes-history/entity.js +7 -6
- package/dist/notes-history-user-data/hooks.d.ts +10 -1
- package/dist/notes-history-user-data/hooks.js +78 -61
- package/dist/notes-history-user-data/index.d.ts +1 -0
- package/dist/notes-history-user-data/index.js +2 -1
- package/dist/personal-access-tokens/schema/api-token.d.ts +6 -0
- package/dist/personal-access-tokens/screens.js +2 -0
- package/dist/secrets/table.d.ts +1 -0
- package/dist/sessions/schema/user-session.d.ts +4 -0
- package/dist/sessions/screens.js +2 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +1 -0
- package/dist/shared/require-for-tenant.d.ts +2 -0
- package/dist/shared/require-for-tenant.js +9 -0
- package/dist/tags/entity.d.ts +9 -0
- package/dist/template-resolver/handlers/collection-set.write.js +4 -4
- package/dist/template-resolver/handlers/set.write.js +6 -7
- package/dist/template-resolver/handlers/upsert-system.write.js +6 -6
- package/dist/template-resolver/handlers/upsert-tenant.write.js +6 -4
- package/dist/template-resolver/table.d.ts +10 -0
- package/dist/template-resolver/user-content-table.d.ts +10 -0
- package/dist/tenant/cancel-pending-invitation.d.ts +2 -2
- package/dist/tenant/cancel-pending-invitation.js +2 -2
- package/dist/tenant/constants.d.ts +1 -0
- package/dist/tenant/constants.js +6 -3
- package/dist/tenant/feature.js +2 -0
- package/dist/tenant/handlers/member-role-availability.query.d.ts +7 -0
- package/dist/tenant/handlers/member-role-availability.query.js +18 -0
- package/dist/tenant/handlers/remove-member.write.js +13 -10
- package/dist/tenant/handlers/update-member-roles.write.js +12 -9
- package/dist/tenant/invitation-table.d.ts +6 -0
- package/dist/tenant/member-role-options.d.ts +2 -0
- package/dist/tenant/member-role-options.js +4 -0
- package/dist/tenant/membership-table.d.ts +4 -0
- package/dist/tenant/schema/tenant.d.ts +6 -0
- package/dist/tenant/screens.d.ts +4 -2
- package/dist/tenant/screens.js +10 -6
- package/dist/tier-engine/entity.d.ts +2 -0
- package/dist/tier-engine/handlers/set-tenant-tier.write.js +7 -18
- package/dist/tier-engine/tier-resolver.d.ts +2 -0
- package/dist/user/schema/user.d.ts +12 -0
- package/dist/user/screens.js +8 -1
- package/dist/user-data-rights/schema/download-attempt.d.ts +14 -0
- package/dist/user-data-rights/schema/download-token.d.ts +8 -0
- package/dist/user-data-rights/schema/export-job.d.ts +6 -0
- package/dist/user-data-rights/screens.js +8 -1
- package/dist/waitlist/entity.d.ts +14 -0
- package/dist/waitlist/screens.js +8 -1
- package/package.json +9 -9
- package/src/auth-mfa/changes.json +6 -0
- package/src/crypto-shredding/changes.json +6 -0
- package/src/delivery/changes.json +6 -0
- package/src/tenant/changes.json +6 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { fetchOne } from "@cosmicdrift/kumiko-framework/bun-db";
|
|
2
|
-
import { buildEntityTable, createEventStoreExecutor
|
|
2
|
+
import { buildEntityTable, createEventStoreExecutor } from "@cosmicdrift/kumiko-framework/db";
|
|
3
3
|
import { defineWriteHandler } from "@cosmicdrift/kumiko-framework/engine";
|
|
4
4
|
import * as z from "zod";
|
|
5
|
+
import { requireForTenant } from "../../shared/index.js";
|
|
5
6
|
import { tierAssignmentAggregateId } from "../aggregate-id.js";
|
|
6
7
|
import { TierAssignmentSources } from "../constants.js";
|
|
7
8
|
import { tierAssignmentEntity } from "../entity.js";
|
|
@@ -9,13 +10,8 @@ import { tierAssignmentEntity } from "../entity.js";
|
|
|
9
10
|
// Billing. Cross-tenant, daher SystemAdmin-only (kein TenantAdmin: sonst
|
|
10
11
|
// Gratis-Self-Upgrade).
|
|
11
12
|
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// der executor-user wird ebenfalls auf den Ziel-Tenant gestellt, sonst landet das
|
|
15
|
-
// Event im Stream des Admins (Memory feedback_event_store_tenant_consistency).
|
|
16
|
-
// Das set.write-"override-user"-Muster trägt NICHT für beliebige Tenants — es
|
|
17
|
-
// funktioniert nur für SYSTEM_TENANT_ID (immer im IN-Filter). Dies ist das
|
|
18
|
-
// auto-default-Hook-Muster (feature.ts), generalisiert auf einen Request-Handler.
|
|
13
|
+
// Cross-tenant mechanics: ctx.forTenant(tenantId) yields a tenant-mode db bound to the target plus
|
|
14
|
+
// the streamTenantId, so the event lands in the target's stream with the operator as actor.
|
|
19
15
|
//
|
|
20
16
|
// `source: TierAssignmentSources.manual` marks the grant so the billing sync skips it.
|
|
21
17
|
// Upsert: one aggregate per tenant (deterministic aggregate id).
|
|
@@ -31,7 +27,6 @@ const tierAssignmentTable = buildEntityTable("tier-assignment", tierAssignmentEn
|
|
|
31
27
|
const executor = createEventStoreExecutor(tierAssignmentTable, tierAssignmentEntity, {
|
|
32
28
|
entityName: "tier-assignment",
|
|
33
29
|
});
|
|
34
|
-
const SET_TENANT_TIER_REASON = "SystemAdmin assigns the tier of the tenant named in the payload";
|
|
35
30
|
export function createSetTenantTierWrite(opts = {}) {
|
|
36
31
|
return defineWriteHandler({
|
|
37
32
|
name: "set-tenant-tier",
|
|
@@ -46,10 +41,6 @@ export function createSetTenantTierWrite(opts = {}) {
|
|
|
46
41
|
}),
|
|
47
42
|
access: { roles: ["SystemAdmin"] },
|
|
48
43
|
agent: { risk: "high" },
|
|
49
|
-
escapeHatch: {
|
|
50
|
-
grants: ["unsafeRaw"],
|
|
51
|
-
reason: SET_TENANT_TIER_REASON,
|
|
52
|
-
},
|
|
53
44
|
handler: async (event, ctx) => {
|
|
54
45
|
// Without a commit sink (unit harness) there is no transaction to wait for.
|
|
55
46
|
const afterCommit = (tenantId, tier) => {
|
|
@@ -60,9 +51,7 @@ export function createSetTenantTierWrite(opts = {}) {
|
|
|
60
51
|
opts.onAssigned?.(tenantId, tier);
|
|
61
52
|
};
|
|
62
53
|
const tenantId = event.payload.tenantId; // @cast-boundary engine-bridge
|
|
63
|
-
const
|
|
64
|
-
const tdb = createTenantDb(rawDb, tenantId, "system");
|
|
65
|
-
const systemUser = { ...event.user, tenantId };
|
|
54
|
+
const { db: tdb, streamTenantId } = requireForTenant(ctx, tenantId);
|
|
66
55
|
const tier = event.payload.tier;
|
|
67
56
|
const existing = await fetchOne(tdb, tierAssignmentTable, { tenantId });
|
|
68
57
|
if (existing) {
|
|
@@ -70,7 +59,7 @@ export function createSetTenantTierWrite(opts = {}) {
|
|
|
70
59
|
id: existing.id,
|
|
71
60
|
version: existing.version,
|
|
72
61
|
changes: { tier, source: TierAssignmentSources.manual },
|
|
73
|
-
},
|
|
62
|
+
}, event.user, tdb, { streamTenantId });
|
|
74
63
|
if (!result.isSuccess)
|
|
75
64
|
return result;
|
|
76
65
|
afterCommit(tenantId, tier);
|
|
@@ -81,7 +70,7 @@ export function createSetTenantTierWrite(opts = {}) {
|
|
|
81
70
|
tier,
|
|
82
71
|
source: TierAssignmentSources.manual,
|
|
83
72
|
tenantId,
|
|
84
|
-
},
|
|
73
|
+
}, event.user, tdb, { streamTenantId });
|
|
85
74
|
if (!result.isSuccess)
|
|
86
75
|
return result;
|
|
87
76
|
afterCommit(tenantId, tier);
|
|
@@ -12,6 +12,7 @@ export declare function createTierResolver<TTier extends string, TCaps>(deps: Ti
|
|
|
12
12
|
readonly description?: string;
|
|
13
13
|
readonly maxLength?: number;
|
|
14
14
|
readonly minLength?: number;
|
|
15
|
+
readonly autoComplete?: string;
|
|
15
16
|
readonly required?: boolean;
|
|
16
17
|
readonly searchable?: boolean;
|
|
17
18
|
readonly sortable?: boolean;
|
|
@@ -34,6 +35,7 @@ export declare function createTierResolver<TTier extends string, TCaps>(deps: Ti
|
|
|
34
35
|
readonly description?: string;
|
|
35
36
|
readonly maxLength?: number;
|
|
36
37
|
readonly minLength?: number;
|
|
38
|
+
readonly autoComplete?: string;
|
|
37
39
|
readonly required?: boolean;
|
|
38
40
|
readonly searchable?: boolean;
|
|
39
41
|
readonly sortable?: boolean;
|
|
@@ -33,6 +33,7 @@ export declare const userEntity: import("@cosmicdrift/kumiko-types/fields").Enti
|
|
|
33
33
|
readonly description?: string;
|
|
34
34
|
readonly maxLength?: number;
|
|
35
35
|
readonly minLength?: number;
|
|
36
|
+
readonly autoComplete?: string;
|
|
36
37
|
readonly required?: boolean;
|
|
37
38
|
readonly searchable?: boolean;
|
|
38
39
|
readonly sortable?: boolean;
|
|
@@ -55,6 +56,7 @@ export declare const userEntity: import("@cosmicdrift/kumiko-types/fields").Enti
|
|
|
55
56
|
readonly description?: string;
|
|
56
57
|
readonly maxLength?: number;
|
|
57
58
|
readonly minLength?: number;
|
|
59
|
+
readonly autoComplete?: string;
|
|
58
60
|
readonly required?: boolean;
|
|
59
61
|
readonly searchable?: boolean;
|
|
60
62
|
readonly sortable?: boolean;
|
|
@@ -77,6 +79,7 @@ export declare const userEntity: import("@cosmicdrift/kumiko-types/fields").Enti
|
|
|
77
79
|
readonly description?: string;
|
|
78
80
|
readonly maxLength?: number;
|
|
79
81
|
readonly minLength?: number;
|
|
82
|
+
readonly autoComplete?: string;
|
|
80
83
|
readonly required?: boolean;
|
|
81
84
|
readonly searchable?: boolean;
|
|
82
85
|
readonly sortable?: boolean;
|
|
@@ -99,6 +102,7 @@ export declare const userEntity: import("@cosmicdrift/kumiko-types/fields").Enti
|
|
|
99
102
|
readonly description?: string;
|
|
100
103
|
readonly maxLength?: number;
|
|
101
104
|
readonly minLength?: number;
|
|
105
|
+
readonly autoComplete?: string;
|
|
102
106
|
readonly required?: boolean;
|
|
103
107
|
readonly searchable?: boolean;
|
|
104
108
|
readonly sortable?: boolean;
|
|
@@ -130,6 +134,7 @@ export declare const userEntity: import("@cosmicdrift/kumiko-types/fields").Enti
|
|
|
130
134
|
readonly description?: string;
|
|
131
135
|
readonly maxLength?: number;
|
|
132
136
|
readonly minLength?: number;
|
|
137
|
+
readonly autoComplete?: string;
|
|
133
138
|
readonly required?: boolean;
|
|
134
139
|
readonly searchable?: boolean;
|
|
135
140
|
readonly sortable?: boolean;
|
|
@@ -195,6 +200,7 @@ export declare const userEntity: import("@cosmicdrift/kumiko-types/fields").Enti
|
|
|
195
200
|
readonly description?: string;
|
|
196
201
|
readonly maxLength?: number;
|
|
197
202
|
readonly minLength?: number;
|
|
203
|
+
readonly autoComplete?: string;
|
|
198
204
|
readonly required?: boolean;
|
|
199
205
|
readonly searchable?: boolean;
|
|
200
206
|
readonly sortable?: boolean;
|
|
@@ -219,6 +225,7 @@ export declare const userTable: import("@cosmicdrift/kumiko-framework/db").Entit
|
|
|
219
225
|
readonly description?: string;
|
|
220
226
|
readonly maxLength?: number;
|
|
221
227
|
readonly minLength?: number;
|
|
228
|
+
readonly autoComplete?: string;
|
|
222
229
|
readonly required?: boolean;
|
|
223
230
|
readonly searchable?: boolean;
|
|
224
231
|
readonly sortable?: boolean;
|
|
@@ -241,6 +248,7 @@ export declare const userTable: import("@cosmicdrift/kumiko-framework/db").Entit
|
|
|
241
248
|
readonly description?: string;
|
|
242
249
|
readonly maxLength?: number;
|
|
243
250
|
readonly minLength?: number;
|
|
251
|
+
readonly autoComplete?: string;
|
|
244
252
|
readonly required?: boolean;
|
|
245
253
|
readonly searchable?: boolean;
|
|
246
254
|
readonly sortable?: boolean;
|
|
@@ -263,6 +271,7 @@ export declare const userTable: import("@cosmicdrift/kumiko-framework/db").Entit
|
|
|
263
271
|
readonly description?: string;
|
|
264
272
|
readonly maxLength?: number;
|
|
265
273
|
readonly minLength?: number;
|
|
274
|
+
readonly autoComplete?: string;
|
|
266
275
|
readonly required?: boolean;
|
|
267
276
|
readonly searchable?: boolean;
|
|
268
277
|
readonly sortable?: boolean;
|
|
@@ -285,6 +294,7 @@ export declare const userTable: import("@cosmicdrift/kumiko-framework/db").Entit
|
|
|
285
294
|
readonly description?: string;
|
|
286
295
|
readonly maxLength?: number;
|
|
287
296
|
readonly minLength?: number;
|
|
297
|
+
readonly autoComplete?: string;
|
|
288
298
|
readonly required?: boolean;
|
|
289
299
|
readonly searchable?: boolean;
|
|
290
300
|
readonly sortable?: boolean;
|
|
@@ -316,6 +326,7 @@ export declare const userTable: import("@cosmicdrift/kumiko-framework/db").Entit
|
|
|
316
326
|
readonly description?: string;
|
|
317
327
|
readonly maxLength?: number;
|
|
318
328
|
readonly minLength?: number;
|
|
329
|
+
readonly autoComplete?: string;
|
|
319
330
|
readonly required?: boolean;
|
|
320
331
|
readonly searchable?: boolean;
|
|
321
332
|
readonly sortable?: boolean;
|
|
@@ -381,6 +392,7 @@ export declare const userTable: import("@cosmicdrift/kumiko-framework/db").Entit
|
|
|
381
392
|
readonly description?: string;
|
|
382
393
|
readonly maxLength?: number;
|
|
383
394
|
readonly minLength?: number;
|
|
395
|
+
readonly autoComplete?: string;
|
|
384
396
|
readonly required?: boolean;
|
|
385
397
|
readonly searchable?: boolean;
|
|
386
398
|
readonly sortable?: boolean;
|
package/dist/user/screens.js
CHANGED
|
@@ -11,7 +11,14 @@ export const userListScreen = {
|
|
|
11
11
|
id: "user-list",
|
|
12
12
|
type: "entityList",
|
|
13
13
|
entity: "user",
|
|
14
|
-
columns: [
|
|
14
|
+
columns: [
|
|
15
|
+
"email",
|
|
16
|
+
"displayName",
|
|
17
|
+
"roles",
|
|
18
|
+
"tenants",
|
|
19
|
+
"status",
|
|
20
|
+
{ field: "emailVerified", hideOnNarrow: true },
|
|
21
|
+
],
|
|
15
22
|
rowActions: [
|
|
16
23
|
{
|
|
17
24
|
kind: "navigate",
|
|
@@ -4,6 +4,7 @@ export declare const downloadAttemptEntity: import("@cosmicdrift/kumiko-types/fi
|
|
|
4
4
|
readonly description?: string;
|
|
5
5
|
readonly maxLength?: number;
|
|
6
6
|
readonly minLength?: number;
|
|
7
|
+
readonly autoComplete?: string;
|
|
7
8
|
readonly required?: boolean;
|
|
8
9
|
readonly searchable?: boolean;
|
|
9
10
|
readonly sortable?: boolean;
|
|
@@ -26,6 +27,7 @@ export declare const downloadAttemptEntity: import("@cosmicdrift/kumiko-types/fi
|
|
|
26
27
|
readonly description?: string;
|
|
27
28
|
readonly maxLength?: number;
|
|
28
29
|
readonly minLength?: number;
|
|
30
|
+
readonly autoComplete?: string;
|
|
29
31
|
readonly required?: boolean;
|
|
30
32
|
readonly searchable?: boolean;
|
|
31
33
|
readonly sortable?: boolean;
|
|
@@ -48,6 +50,7 @@ export declare const downloadAttemptEntity: import("@cosmicdrift/kumiko-types/fi
|
|
|
48
50
|
readonly description?: string;
|
|
49
51
|
readonly maxLength?: number;
|
|
50
52
|
readonly minLength?: number;
|
|
53
|
+
readonly autoComplete?: string;
|
|
51
54
|
readonly required?: boolean;
|
|
52
55
|
readonly searchable?: boolean;
|
|
53
56
|
readonly sortable?: boolean;
|
|
@@ -70,6 +73,7 @@ export declare const downloadAttemptEntity: import("@cosmicdrift/kumiko-types/fi
|
|
|
70
73
|
readonly description?: string;
|
|
71
74
|
readonly maxLength?: number;
|
|
72
75
|
readonly minLength?: number;
|
|
76
|
+
readonly autoComplete?: string;
|
|
73
77
|
readonly required?: boolean;
|
|
74
78
|
readonly searchable?: boolean;
|
|
75
79
|
readonly sortable?: boolean;
|
|
@@ -92,6 +96,7 @@ export declare const downloadAttemptEntity: import("@cosmicdrift/kumiko-types/fi
|
|
|
92
96
|
readonly description?: string;
|
|
93
97
|
readonly maxLength?: number;
|
|
94
98
|
readonly minLength?: number;
|
|
99
|
+
readonly autoComplete?: string;
|
|
95
100
|
readonly required?: boolean;
|
|
96
101
|
readonly searchable?: boolean;
|
|
97
102
|
readonly sortable?: boolean;
|
|
@@ -114,6 +119,7 @@ export declare const downloadAttemptEntity: import("@cosmicdrift/kumiko-types/fi
|
|
|
114
119
|
readonly description?: string;
|
|
115
120
|
readonly maxLength?: number;
|
|
116
121
|
readonly minLength?: number;
|
|
122
|
+
readonly autoComplete?: string;
|
|
117
123
|
readonly required?: boolean;
|
|
118
124
|
readonly searchable?: boolean;
|
|
119
125
|
readonly sortable?: boolean;
|
|
@@ -136,6 +142,7 @@ export declare const downloadAttemptEntity: import("@cosmicdrift/kumiko-types/fi
|
|
|
136
142
|
readonly description?: string;
|
|
137
143
|
readonly maxLength?: number;
|
|
138
144
|
readonly minLength?: number;
|
|
145
|
+
readonly autoComplete?: string;
|
|
139
146
|
readonly required?: boolean;
|
|
140
147
|
readonly searchable?: boolean;
|
|
141
148
|
readonly sortable?: boolean;
|
|
@@ -175,6 +182,7 @@ export declare const downloadAttemptsTable: import("@cosmicdrift/kumiko-framewor
|
|
|
175
182
|
readonly description?: string;
|
|
176
183
|
readonly maxLength?: number;
|
|
177
184
|
readonly minLength?: number;
|
|
185
|
+
readonly autoComplete?: string;
|
|
178
186
|
readonly required?: boolean;
|
|
179
187
|
readonly searchable?: boolean;
|
|
180
188
|
readonly sortable?: boolean;
|
|
@@ -197,6 +205,7 @@ export declare const downloadAttemptsTable: import("@cosmicdrift/kumiko-framewor
|
|
|
197
205
|
readonly description?: string;
|
|
198
206
|
readonly maxLength?: number;
|
|
199
207
|
readonly minLength?: number;
|
|
208
|
+
readonly autoComplete?: string;
|
|
200
209
|
readonly required?: boolean;
|
|
201
210
|
readonly searchable?: boolean;
|
|
202
211
|
readonly sortable?: boolean;
|
|
@@ -219,6 +228,7 @@ export declare const downloadAttemptsTable: import("@cosmicdrift/kumiko-framewor
|
|
|
219
228
|
readonly description?: string;
|
|
220
229
|
readonly maxLength?: number;
|
|
221
230
|
readonly minLength?: number;
|
|
231
|
+
readonly autoComplete?: string;
|
|
222
232
|
readonly required?: boolean;
|
|
223
233
|
readonly searchable?: boolean;
|
|
224
234
|
readonly sortable?: boolean;
|
|
@@ -241,6 +251,7 @@ export declare const downloadAttemptsTable: import("@cosmicdrift/kumiko-framewor
|
|
|
241
251
|
readonly description?: string;
|
|
242
252
|
readonly maxLength?: number;
|
|
243
253
|
readonly minLength?: number;
|
|
254
|
+
readonly autoComplete?: string;
|
|
244
255
|
readonly required?: boolean;
|
|
245
256
|
readonly searchable?: boolean;
|
|
246
257
|
readonly sortable?: boolean;
|
|
@@ -263,6 +274,7 @@ export declare const downloadAttemptsTable: import("@cosmicdrift/kumiko-framewor
|
|
|
263
274
|
readonly description?: string;
|
|
264
275
|
readonly maxLength?: number;
|
|
265
276
|
readonly minLength?: number;
|
|
277
|
+
readonly autoComplete?: string;
|
|
266
278
|
readonly required?: boolean;
|
|
267
279
|
readonly searchable?: boolean;
|
|
268
280
|
readonly sortable?: boolean;
|
|
@@ -285,6 +297,7 @@ export declare const downloadAttemptsTable: import("@cosmicdrift/kumiko-framewor
|
|
|
285
297
|
readonly description?: string;
|
|
286
298
|
readonly maxLength?: number;
|
|
287
299
|
readonly minLength?: number;
|
|
300
|
+
readonly autoComplete?: string;
|
|
288
301
|
readonly required?: boolean;
|
|
289
302
|
readonly searchable?: boolean;
|
|
290
303
|
readonly sortable?: boolean;
|
|
@@ -307,6 +320,7 @@ export declare const downloadAttemptsTable: import("@cosmicdrift/kumiko-framewor
|
|
|
307
320
|
readonly description?: string;
|
|
308
321
|
readonly maxLength?: number;
|
|
309
322
|
readonly minLength?: number;
|
|
323
|
+
readonly autoComplete?: string;
|
|
310
324
|
readonly required?: boolean;
|
|
311
325
|
readonly searchable?: boolean;
|
|
312
326
|
readonly sortable?: boolean;
|
|
@@ -4,6 +4,7 @@ export declare const exportDownloadTokenEntity: import("@cosmicdrift/kumiko-type
|
|
|
4
4
|
readonly description?: string;
|
|
5
5
|
readonly maxLength?: number;
|
|
6
6
|
readonly minLength?: number;
|
|
7
|
+
readonly autoComplete?: string;
|
|
7
8
|
readonly required?: boolean;
|
|
8
9
|
readonly searchable?: boolean;
|
|
9
10
|
readonly sortable?: boolean;
|
|
@@ -26,6 +27,7 @@ export declare const exportDownloadTokenEntity: import("@cosmicdrift/kumiko-type
|
|
|
26
27
|
readonly description?: string;
|
|
27
28
|
readonly maxLength?: number;
|
|
28
29
|
readonly minLength?: number;
|
|
30
|
+
readonly autoComplete?: string;
|
|
29
31
|
readonly required?: boolean;
|
|
30
32
|
readonly searchable?: boolean;
|
|
31
33
|
readonly sortable?: boolean;
|
|
@@ -105,6 +107,7 @@ export declare const exportDownloadTokenEntity: import("@cosmicdrift/kumiko-type
|
|
|
105
107
|
readonly description?: string;
|
|
106
108
|
readonly maxLength?: number;
|
|
107
109
|
readonly minLength?: number;
|
|
110
|
+
readonly autoComplete?: string;
|
|
108
111
|
readonly required?: boolean;
|
|
109
112
|
readonly searchable?: boolean;
|
|
110
113
|
readonly sortable?: boolean;
|
|
@@ -127,6 +130,7 @@ export declare const exportDownloadTokenEntity: import("@cosmicdrift/kumiko-type
|
|
|
127
130
|
readonly description?: string;
|
|
128
131
|
readonly maxLength?: number;
|
|
129
132
|
readonly minLength?: number;
|
|
133
|
+
readonly autoComplete?: string;
|
|
130
134
|
readonly required?: boolean;
|
|
131
135
|
readonly searchable?: boolean;
|
|
132
136
|
readonly sortable?: boolean;
|
|
@@ -151,6 +155,7 @@ export declare const exportDownloadTokensTable: import("@cosmicdrift/kumiko-fram
|
|
|
151
155
|
readonly description?: string;
|
|
152
156
|
readonly maxLength?: number;
|
|
153
157
|
readonly minLength?: number;
|
|
158
|
+
readonly autoComplete?: string;
|
|
154
159
|
readonly required?: boolean;
|
|
155
160
|
readonly searchable?: boolean;
|
|
156
161
|
readonly sortable?: boolean;
|
|
@@ -173,6 +178,7 @@ export declare const exportDownloadTokensTable: import("@cosmicdrift/kumiko-fram
|
|
|
173
178
|
readonly description?: string;
|
|
174
179
|
readonly maxLength?: number;
|
|
175
180
|
readonly minLength?: number;
|
|
181
|
+
readonly autoComplete?: string;
|
|
176
182
|
readonly required?: boolean;
|
|
177
183
|
readonly searchable?: boolean;
|
|
178
184
|
readonly sortable?: boolean;
|
|
@@ -252,6 +258,7 @@ export declare const exportDownloadTokensTable: import("@cosmicdrift/kumiko-fram
|
|
|
252
258
|
readonly description?: string;
|
|
253
259
|
readonly maxLength?: number;
|
|
254
260
|
readonly minLength?: number;
|
|
261
|
+
readonly autoComplete?: string;
|
|
255
262
|
readonly required?: boolean;
|
|
256
263
|
readonly searchable?: boolean;
|
|
257
264
|
readonly sortable?: boolean;
|
|
@@ -274,6 +281,7 @@ export declare const exportDownloadTokensTable: import("@cosmicdrift/kumiko-fram
|
|
|
274
281
|
readonly description?: string;
|
|
275
282
|
readonly maxLength?: number;
|
|
276
283
|
readonly minLength?: number;
|
|
284
|
+
readonly autoComplete?: string;
|
|
277
285
|
readonly required?: boolean;
|
|
278
286
|
readonly searchable?: boolean;
|
|
279
287
|
readonly sortable?: boolean;
|
|
@@ -18,6 +18,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
18
18
|
readonly description?: string;
|
|
19
19
|
readonly maxLength?: number;
|
|
20
20
|
readonly minLength?: number;
|
|
21
|
+
readonly autoComplete?: string;
|
|
21
22
|
readonly required?: boolean;
|
|
22
23
|
readonly searchable?: boolean;
|
|
23
24
|
readonly sortable?: boolean;
|
|
@@ -40,6 +41,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
40
41
|
readonly description?: string;
|
|
41
42
|
readonly maxLength?: number;
|
|
42
43
|
readonly minLength?: number;
|
|
44
|
+
readonly autoComplete?: string;
|
|
43
45
|
readonly required?: boolean;
|
|
44
46
|
readonly searchable?: boolean;
|
|
45
47
|
readonly sortable?: boolean;
|
|
@@ -131,6 +133,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
131
133
|
readonly description?: string;
|
|
132
134
|
readonly maxLength?: number;
|
|
133
135
|
readonly minLength?: number;
|
|
136
|
+
readonly autoComplete?: string;
|
|
134
137
|
readonly required?: boolean;
|
|
135
138
|
readonly searchable?: boolean;
|
|
136
139
|
readonly sortable?: boolean;
|
|
@@ -198,6 +201,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
|
|
|
198
201
|
readonly description?: string;
|
|
199
202
|
readonly maxLength?: number;
|
|
200
203
|
readonly minLength?: number;
|
|
204
|
+
readonly autoComplete?: string;
|
|
201
205
|
readonly required?: boolean;
|
|
202
206
|
readonly searchable?: boolean;
|
|
203
207
|
readonly sortable?: boolean;
|
|
@@ -220,6 +224,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
|
|
|
220
224
|
readonly description?: string;
|
|
221
225
|
readonly maxLength?: number;
|
|
222
226
|
readonly minLength?: number;
|
|
227
|
+
readonly autoComplete?: string;
|
|
223
228
|
readonly required?: boolean;
|
|
224
229
|
readonly searchable?: boolean;
|
|
225
230
|
readonly sortable?: boolean;
|
|
@@ -311,6 +316,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
|
|
|
311
316
|
readonly description?: string;
|
|
312
317
|
readonly maxLength?: number;
|
|
313
318
|
readonly minLength?: number;
|
|
319
|
+
readonly autoComplete?: string;
|
|
314
320
|
readonly required?: boolean;
|
|
315
321
|
readonly searchable?: boolean;
|
|
316
322
|
readonly sortable?: boolean;
|
|
@@ -58,7 +58,14 @@ export const downloadAttemptListScreen = {
|
|
|
58
58
|
id: "download-attempt-list",
|
|
59
59
|
type: "entityList",
|
|
60
60
|
entity: "download-attempt",
|
|
61
|
-
columns: [
|
|
61
|
+
columns: [
|
|
62
|
+
"attemptedAt",
|
|
63
|
+
"result",
|
|
64
|
+
"via",
|
|
65
|
+
"ip",
|
|
66
|
+
{ field: "attemptedByUserId", hideOnNarrow: true },
|
|
67
|
+
{ field: "jobId", hideOnNarrow: true },
|
|
68
|
+
],
|
|
62
69
|
searchable: false,
|
|
63
70
|
access: { roles: access.systemAdmin },
|
|
64
71
|
// Inert until an app navs it (see file header) — no nav area to resolve
|
|
@@ -5,6 +5,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
5
5
|
readonly description?: string;
|
|
6
6
|
readonly maxLength?: number;
|
|
7
7
|
readonly minLength?: number;
|
|
8
|
+
readonly autoComplete?: string;
|
|
8
9
|
readonly required?: boolean;
|
|
9
10
|
readonly searchable?: boolean;
|
|
10
11
|
readonly sortable?: boolean;
|
|
@@ -27,6 +28,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
27
28
|
readonly description?: string;
|
|
28
29
|
readonly maxLength?: number;
|
|
29
30
|
readonly minLength?: number;
|
|
31
|
+
readonly autoComplete?: string;
|
|
30
32
|
readonly required?: boolean;
|
|
31
33
|
readonly searchable?: boolean;
|
|
32
34
|
readonly sortable?: boolean;
|
|
@@ -49,6 +51,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
49
51
|
readonly description?: string;
|
|
50
52
|
readonly maxLength?: number;
|
|
51
53
|
readonly minLength?: number;
|
|
54
|
+
readonly autoComplete?: string;
|
|
52
55
|
readonly required?: boolean;
|
|
53
56
|
readonly searchable?: boolean;
|
|
54
57
|
readonly sortable?: boolean;
|
|
@@ -71,6 +74,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
71
74
|
readonly description?: string;
|
|
72
75
|
readonly maxLength?: number;
|
|
73
76
|
readonly minLength?: number;
|
|
77
|
+
readonly autoComplete?: string;
|
|
74
78
|
readonly required?: boolean;
|
|
75
79
|
readonly searchable?: boolean;
|
|
76
80
|
readonly sortable?: boolean;
|
|
@@ -109,6 +113,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
109
113
|
readonly description?: string;
|
|
110
114
|
readonly maxLength?: number;
|
|
111
115
|
readonly minLength?: number;
|
|
116
|
+
readonly autoComplete?: string;
|
|
112
117
|
readonly required?: boolean;
|
|
113
118
|
readonly searchable?: boolean;
|
|
114
119
|
readonly sortable?: boolean;
|
|
@@ -184,6 +189,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
184
189
|
readonly description?: string;
|
|
185
190
|
readonly maxLength?: number;
|
|
186
191
|
readonly minLength?: number;
|
|
192
|
+
readonly autoComplete?: string;
|
|
187
193
|
readonly required?: boolean;
|
|
188
194
|
readonly searchable?: boolean;
|
|
189
195
|
readonly sortable?: boolean;
|
|
@@ -206,6 +212,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
206
212
|
readonly description?: string;
|
|
207
213
|
readonly maxLength?: number;
|
|
208
214
|
readonly minLength?: number;
|
|
215
|
+
readonly autoComplete?: string;
|
|
209
216
|
readonly required?: boolean;
|
|
210
217
|
readonly searchable?: boolean;
|
|
211
218
|
readonly sortable?: boolean;
|
|
@@ -230,6 +237,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
230
237
|
readonly description?: string;
|
|
231
238
|
readonly maxLength?: number;
|
|
232
239
|
readonly minLength?: number;
|
|
240
|
+
readonly autoComplete?: string;
|
|
233
241
|
readonly required?: boolean;
|
|
234
242
|
readonly searchable?: boolean;
|
|
235
243
|
readonly sortable?: boolean;
|
|
@@ -252,6 +260,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
252
260
|
readonly description?: string;
|
|
253
261
|
readonly maxLength?: number;
|
|
254
262
|
readonly minLength?: number;
|
|
263
|
+
readonly autoComplete?: string;
|
|
255
264
|
readonly required?: boolean;
|
|
256
265
|
readonly searchable?: boolean;
|
|
257
266
|
readonly sortable?: boolean;
|
|
@@ -274,6 +283,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
274
283
|
readonly description?: string;
|
|
275
284
|
readonly maxLength?: number;
|
|
276
285
|
readonly minLength?: number;
|
|
286
|
+
readonly autoComplete?: string;
|
|
277
287
|
readonly required?: boolean;
|
|
278
288
|
readonly searchable?: boolean;
|
|
279
289
|
readonly sortable?: boolean;
|
|
@@ -296,6 +306,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
296
306
|
readonly description?: string;
|
|
297
307
|
readonly maxLength?: number;
|
|
298
308
|
readonly minLength?: number;
|
|
309
|
+
readonly autoComplete?: string;
|
|
299
310
|
readonly required?: boolean;
|
|
300
311
|
readonly searchable?: boolean;
|
|
301
312
|
readonly sortable?: boolean;
|
|
@@ -334,6 +345,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
334
345
|
readonly description?: string;
|
|
335
346
|
readonly maxLength?: number;
|
|
336
347
|
readonly minLength?: number;
|
|
348
|
+
readonly autoComplete?: string;
|
|
337
349
|
readonly required?: boolean;
|
|
338
350
|
readonly searchable?: boolean;
|
|
339
351
|
readonly sortable?: boolean;
|
|
@@ -409,6 +421,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
409
421
|
readonly description?: string;
|
|
410
422
|
readonly maxLength?: number;
|
|
411
423
|
readonly minLength?: number;
|
|
424
|
+
readonly autoComplete?: string;
|
|
412
425
|
readonly required?: boolean;
|
|
413
426
|
readonly searchable?: boolean;
|
|
414
427
|
readonly sortable?: boolean;
|
|
@@ -431,6 +444,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
431
444
|
readonly description?: string;
|
|
432
445
|
readonly maxLength?: number;
|
|
433
446
|
readonly minLength?: number;
|
|
447
|
+
readonly autoComplete?: string;
|
|
434
448
|
readonly required?: boolean;
|
|
435
449
|
readonly searchable?: boolean;
|
|
436
450
|
readonly sortable?: boolean;
|
package/dist/waitlist/screens.js
CHANGED
|
@@ -5,7 +5,14 @@ export const waitlistListScreen = {
|
|
|
5
5
|
id: "waitlist-list",
|
|
6
6
|
type: "entityList",
|
|
7
7
|
entity: "waitlistEntry",
|
|
8
|
-
columns: [
|
|
8
|
+
columns: [
|
|
9
|
+
"name",
|
|
10
|
+
"email",
|
|
11
|
+
"company",
|
|
12
|
+
"status",
|
|
13
|
+
"locale",
|
|
14
|
+
{ field: "submittedAt", hideOnNarrow: true },
|
|
15
|
+
],
|
|
9
16
|
defaultSort: { field: "submittedAt", dir: "desc" },
|
|
10
17
|
access: adminAccess,
|
|
11
18
|
searchable: true,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cosmicdrift/kumiko-bundled-features",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.357.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>",
|
|
@@ -516,12 +516,12 @@
|
|
|
516
516
|
}
|
|
517
517
|
},
|
|
518
518
|
"dependencies": {
|
|
519
|
-
"@cosmicdrift/kumiko-dispatcher-live": "0.
|
|
520
|
-
"@cosmicdrift/kumiko-framework": "0.
|
|
521
|
-
"@cosmicdrift/kumiko-headless": "0.
|
|
522
|
-
"@cosmicdrift/kumiko-renderer": "0.
|
|
523
|
-
"@cosmicdrift/kumiko-renderer-web": "0.
|
|
524
|
-
"@cosmicdrift/kumiko-types": "0.
|
|
519
|
+
"@cosmicdrift/kumiko-dispatcher-live": "0.357.0",
|
|
520
|
+
"@cosmicdrift/kumiko-framework": "0.357.0",
|
|
521
|
+
"@cosmicdrift/kumiko-headless": "0.357.0",
|
|
522
|
+
"@cosmicdrift/kumiko-renderer": "0.357.0",
|
|
523
|
+
"@cosmicdrift/kumiko-renderer-web": "0.357.0",
|
|
524
|
+
"@cosmicdrift/kumiko-types": "0.357.0",
|
|
525
525
|
"@mollie/api-client": "^4.5.0",
|
|
526
526
|
"@node-rs/argon2": "^2.0.2",
|
|
527
527
|
"@types/mailparser": "^3.4.6",
|
|
@@ -1050,8 +1050,8 @@
|
|
|
1050
1050
|
],
|
|
1051
1051
|
"devDependencies": {
|
|
1052
1052
|
"@testing-library/user-event": "^14.6.1",
|
|
1053
|
-
"@cosmicdrift/kumiko-locale-de": "0.
|
|
1054
|
-
"@cosmicdrift/kumiko-locale-es": "0.
|
|
1053
|
+
"@cosmicdrift/kumiko-locale-de": "0.357.0",
|
|
1054
|
+
"@cosmicdrift/kumiko-locale-es": "0.357.0",
|
|
1055
1055
|
"jsqr": "^1.4.0"
|
|
1056
1056
|
}
|
|
1057
1057
|
}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "0.357.0",
|
|
4
|
+
"type": "improvement",
|
|
5
|
+
"title": "MFA enable asks to confirm saved recovery codes, code field autocompletes one-time codes",
|
|
6
|
+
"detail": "secretMint `reveal.acknowledge` (i18n key) renders a checkbox on the reveal card that must be ticked before the confirm step or the acknowledge button can be used; the tick never reaches the payload. Text fields accept an `autoComplete` token that reaches the input. The MFA enable screen uses both: a \"saved my recovery codes\" gate and `one-time-code` on the code field"
|
|
7
|
+
},
|
|
2
8
|
{
|
|
3
9
|
"version": "0.354.0",
|
|
4
10
|
"type": "breaking",
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "0.357.0",
|
|
4
|
+
"type": "improvement",
|
|
5
|
+
"title": "forget-subject shreds note bodies attached to the subject and notes that mention it",
|
|
6
|
+
"detail": "`forget-subject` on a user or record subject now also erases the per-note keys of every `note-entry` that hangs on the subject as host entity (entityId, plus entityType for record subjects) or @-mentions it, unless the host entity's retention strategy is anonymize/blockDelete. The automated Art. 17 delete hook reaches notes on the user as host too, and the export lists them. Before, `forget-subject(contact)` left the note bodies readable. Consumer tests that expect readable note bodies after `forget-subject` on a contact (e.g. solon contact-notes-forget) now see the erased sentinel. Forgetting only the author still leaves the bodies readable."
|
|
7
|
+
},
|
|
2
8
|
{
|
|
3
9
|
"version": "0.354.0",
|
|
4
10
|
"type": "fix",
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "0.357.0",
|
|
4
|
+
"type": "improvement",
|
|
5
|
+
"title": "Delivery idempotencyKey is released when nothing was delivered",
|
|
6
|
+
"detail": "A retry of a failed notify() with the same idempotencyKey is no longer skipped as a duplicate. The key is deleted when no recipient got a `sent` or `queued` delivery, also when notify() throws; one successful recipient keeps it, even if notify() throws afterwards (a retry would re-send to them). For queued channels the send/render job deletes the key after its final failed attempt, not per retry. That reference is only attached when a `route` call has exactly one channel address; `to` calls (user lists) and multi-channel routes keep the key after queueing. The job payload gains an optional `idempotencyKey`, backward compatible. `createDeliveryTestContext` accepts `idempotencyRedis`."
|
|
7
|
+
},
|
|
2
8
|
{
|
|
3
9
|
"version": "0.354.0",
|
|
4
10
|
"type": "breaking",
|
package/src/tenant/changes.json
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "0.357.0",
|
|
4
|
+
"type": "improvement",
|
|
5
|
+
"title": "The member roles form only offers roles the signed-in admin may assign",
|
|
6
|
+
"detail": "New query tenant:query:member-role-availability; TenantAdmin still sees every role."
|
|
7
|
+
},
|
|
2
8
|
{
|
|
3
9
|
"version": "0.354.0",
|
|
4
10
|
"type": "breaking",
|