@cosmicdrift/kumiko-bundled-features 0.356.0 → 0.358.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/book-cap-usage.d.ts +11 -5
- package/dist/cap-counter/book-cap-usage.js +54 -13
- package/dist/cap-counter/calendar-cap-usage-reservation.d.ts +17 -0
- package/dist/cap-counter/calendar-cap-usage-reservation.js +53 -0
- package/dist/cap-counter/cap-reservation.d.ts +15 -6
- package/dist/cap-counter/cap-reservation.js +80 -31
- package/dist/cap-counter/enforce-cap.d.ts +5 -5
- package/dist/cap-counter/enforce-cap.js +7 -20
- package/dist/cap-counter/entity.d.ts +1 -0
- package/dist/cap-counter/feature.js +7 -1
- package/dist/cap-counter/index.d.ts +1 -0
- package/dist/cap-counter/index.js +1 -0
- package/dist/cap-counter/with-cap-enforcement.js +4 -19
- package/dist/cap-overview/screens.js +3 -1
- package/dist/config/table.d.ts +6 -0
- package/dist/crypto-shredding/handlers/forget-subject.write.js +14 -3
- package/dist/custom-fields/entity.d.ts +4 -0
- 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-logger.js +21 -17
- package/dist/jobs/job-run-table.d.ts +6 -0
- package/dist/jobs/job-run-table.js +10 -3
- package/dist/ledger/entity.d.ts +13 -0
- package/dist/managed-pages/table.d.ts +12 -0
- package/dist/notes-history/entity.d.ts +12 -0
- package/dist/notes-history/entity.js +9 -7
- package/dist/notes-history-user-data/hooks.d.ts +8 -0
- package/dist/notes-history-user-data/hooks.js +56 -72
- 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/tags/entity.d.ts +9 -0
- package/dist/template-resolver/table.d.ts +10 -0
- package/dist/template-resolver/user-content-table.d.ts +10 -0
- 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/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/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/cap-counter/changes.json +7 -0
- package/src/crypto-shredding/changes.json +6 -0
- package/src/delivery/changes.json +6 -0
- package/src/notes-history/changes.json +6 -0
- package/src/tenant/changes.json +6 -0
|
@@ -7,6 +7,7 @@ export declare const notificationPreferenceEntity: import("@cosmicdrift/kumiko-t
|
|
|
7
7
|
readonly description?: string;
|
|
8
8
|
readonly maxLength?: number;
|
|
9
9
|
readonly minLength?: number;
|
|
10
|
+
readonly autoComplete?: string;
|
|
10
11
|
readonly required?: boolean;
|
|
11
12
|
readonly searchable?: boolean;
|
|
12
13
|
readonly sortable?: boolean;
|
|
@@ -29,6 +30,7 @@ export declare const notificationPreferenceEntity: import("@cosmicdrift/kumiko-t
|
|
|
29
30
|
readonly description?: string;
|
|
30
31
|
readonly maxLength?: number;
|
|
31
32
|
readonly minLength?: number;
|
|
33
|
+
readonly autoComplete?: string;
|
|
32
34
|
readonly required?: boolean;
|
|
33
35
|
readonly searchable?: boolean;
|
|
34
36
|
readonly sortable?: boolean;
|
|
@@ -51,6 +53,7 @@ export declare const notificationPreferenceEntity: import("@cosmicdrift/kumiko-t
|
|
|
51
53
|
readonly description?: string;
|
|
52
54
|
readonly maxLength?: number;
|
|
53
55
|
readonly minLength?: number;
|
|
56
|
+
readonly autoComplete?: string;
|
|
54
57
|
readonly required?: boolean;
|
|
55
58
|
readonly searchable?: boolean;
|
|
56
59
|
readonly sortable?: boolean;
|
|
@@ -79,6 +82,7 @@ export declare const notificationAddressOptOutEntity: import("@cosmicdrift/kumik
|
|
|
79
82
|
readonly description?: string;
|
|
80
83
|
readonly maxLength?: number;
|
|
81
84
|
readonly minLength?: number;
|
|
85
|
+
readonly autoComplete?: string;
|
|
82
86
|
readonly required?: boolean;
|
|
83
87
|
readonly searchable?: boolean;
|
|
84
88
|
readonly sortable?: boolean;
|
|
@@ -101,6 +105,7 @@ export declare const notificationAddressOptOutEntity: import("@cosmicdrift/kumik
|
|
|
101
105
|
readonly description?: string;
|
|
102
106
|
readonly maxLength?: number;
|
|
103
107
|
readonly minLength?: number;
|
|
108
|
+
readonly autoComplete?: string;
|
|
104
109
|
readonly required?: boolean;
|
|
105
110
|
readonly searchable?: boolean;
|
|
106
111
|
readonly sortable?: boolean;
|
|
@@ -123,6 +128,7 @@ export declare const notificationAddressOptOutEntity: import("@cosmicdrift/kumik
|
|
|
123
128
|
readonly description?: string;
|
|
124
129
|
readonly maxLength?: number;
|
|
125
130
|
readonly minLength?: number;
|
|
131
|
+
readonly autoComplete?: string;
|
|
126
132
|
readonly required?: boolean;
|
|
127
133
|
readonly searchable?: boolean;
|
|
128
134
|
readonly sortable?: boolean;
|
|
@@ -15,6 +15,7 @@ export type CreateDeliveryTestContextOptions = {
|
|
|
15
15
|
readonly log?: Logger;
|
|
16
16
|
readonly jobRunner?: JobRunner;
|
|
17
17
|
readonly secrets?: SecretsContext;
|
|
18
|
+
readonly idempotencyRedis?: Redis;
|
|
18
19
|
};
|
|
19
20
|
/**
|
|
20
21
|
* Helper for setupTestStack: creates a DeliveryService + _notifyFactory for the test context.
|
|
@@ -15,6 +15,7 @@ export declare const documentExtractEntity: import("@cosmicdrift/kumiko-types/fi
|
|
|
15
15
|
readonly description?: string;
|
|
16
16
|
readonly maxLength?: number;
|
|
17
17
|
readonly minLength?: number;
|
|
18
|
+
readonly autoComplete?: string;
|
|
18
19
|
readonly required?: boolean;
|
|
19
20
|
readonly searchable?: boolean;
|
|
20
21
|
readonly sortable?: boolean;
|
|
@@ -37,6 +38,7 @@ export declare const documentExtractEntity: import("@cosmicdrift/kumiko-types/fi
|
|
|
37
38
|
readonly description?: string;
|
|
38
39
|
readonly maxLength?: number;
|
|
39
40
|
readonly minLength?: number;
|
|
41
|
+
readonly autoComplete?: string;
|
|
40
42
|
readonly required?: boolean;
|
|
41
43
|
readonly searchable?: boolean;
|
|
42
44
|
readonly sortable?: boolean;
|
|
@@ -78,6 +80,7 @@ export declare const documentExtractsTable: import("@cosmicdrift/kumiko-framewor
|
|
|
78
80
|
readonly description?: string;
|
|
79
81
|
readonly maxLength?: number;
|
|
80
82
|
readonly minLength?: number;
|
|
83
|
+
readonly autoComplete?: string;
|
|
81
84
|
readonly required?: boolean;
|
|
82
85
|
readonly searchable?: boolean;
|
|
83
86
|
readonly sortable?: boolean;
|
|
@@ -100,6 +103,7 @@ export declare const documentExtractsTable: import("@cosmicdrift/kumiko-framewor
|
|
|
100
103
|
readonly description?: string;
|
|
101
104
|
readonly maxLength?: number;
|
|
102
105
|
readonly minLength?: number;
|
|
106
|
+
readonly autoComplete?: string;
|
|
103
107
|
readonly required?: boolean;
|
|
104
108
|
readonly searchable?: boolean;
|
|
105
109
|
readonly sortable?: boolean;
|
package/dist/folders/entity.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export declare const folderEntity: EntityDefinition<{
|
|
|
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 folderEntity: EntityDefinition<{
|
|
|
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;
|
|
@@ -51,6 +53,7 @@ export declare function createFolderAssignmentEntity(access?: EntityDefinition["
|
|
|
51
53
|
readonly description?: string;
|
|
52
54
|
readonly maxLength?: number;
|
|
53
55
|
readonly minLength?: number;
|
|
56
|
+
readonly autoComplete?: string;
|
|
54
57
|
readonly required?: boolean;
|
|
55
58
|
readonly searchable?: boolean;
|
|
56
59
|
readonly sortable?: boolean;
|
|
@@ -73,6 +76,7 @@ export declare function createFolderAssignmentEntity(access?: EntityDefinition["
|
|
|
73
76
|
readonly description?: string;
|
|
74
77
|
readonly maxLength?: number;
|
|
75
78
|
readonly minLength?: number;
|
|
79
|
+
readonly autoComplete?: string;
|
|
76
80
|
readonly required?: boolean;
|
|
77
81
|
readonly searchable?: boolean;
|
|
78
82
|
readonly sortable?: boolean;
|
|
@@ -95,6 +99,7 @@ export declare function createFolderAssignmentEntity(access?: EntityDefinition["
|
|
|
95
99
|
readonly description?: string;
|
|
96
100
|
readonly maxLength?: number;
|
|
97
101
|
readonly minLength?: number;
|
|
102
|
+
readonly autoComplete?: string;
|
|
98
103
|
readonly required?: boolean;
|
|
99
104
|
readonly searchable?: boolean;
|
|
100
105
|
readonly sortable?: boolean;
|
|
@@ -119,6 +124,7 @@ export declare const folderAssignmentEntity: EntityDefinition<{
|
|
|
119
124
|
readonly description?: string;
|
|
120
125
|
readonly maxLength?: number;
|
|
121
126
|
readonly minLength?: number;
|
|
127
|
+
readonly autoComplete?: string;
|
|
122
128
|
readonly required?: boolean;
|
|
123
129
|
readonly searchable?: boolean;
|
|
124
130
|
readonly sortable?: boolean;
|
|
@@ -141,6 +147,7 @@ export declare const folderAssignmentEntity: EntityDefinition<{
|
|
|
141
147
|
readonly description?: string;
|
|
142
148
|
readonly maxLength?: number;
|
|
143
149
|
readonly minLength?: number;
|
|
150
|
+
readonly autoComplete?: string;
|
|
144
151
|
readonly required?: boolean;
|
|
145
152
|
readonly searchable?: boolean;
|
|
146
153
|
readonly sortable?: boolean;
|
|
@@ -163,6 +170,7 @@ export declare const folderAssignmentEntity: EntityDefinition<{
|
|
|
163
170
|
readonly description?: string;
|
|
164
171
|
readonly maxLength?: number;
|
|
165
172
|
readonly minLength?: number;
|
|
173
|
+
readonly autoComplete?: string;
|
|
166
174
|
readonly required?: boolean;
|
|
167
175
|
readonly searchable?: boolean;
|
|
168
176
|
readonly sortable?: boolean;
|
|
@@ -4,6 +4,7 @@ export declare const formDraftEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
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 formDraftEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
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;
|
|
@@ -6,6 +6,7 @@ export declare const mailAccountEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
6
6
|
readonly description?: string;
|
|
7
7
|
readonly maxLength?: number;
|
|
8
8
|
readonly minLength?: number;
|
|
9
|
+
readonly autoComplete?: string;
|
|
9
10
|
readonly required?: boolean;
|
|
10
11
|
readonly searchable?: boolean;
|
|
11
12
|
readonly sortable?: boolean;
|
|
@@ -28,6 +29,7 @@ export declare const mailAccountEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
28
29
|
readonly description?: string;
|
|
29
30
|
readonly maxLength?: number;
|
|
30
31
|
readonly minLength?: number;
|
|
32
|
+
readonly autoComplete?: string;
|
|
31
33
|
readonly required?: boolean;
|
|
32
34
|
readonly searchable?: boolean;
|
|
33
35
|
readonly sortable?: boolean;
|
|
@@ -50,6 +52,7 @@ export declare const mailAccountEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
50
52
|
readonly description?: string;
|
|
51
53
|
readonly maxLength?: number;
|
|
52
54
|
readonly minLength?: number;
|
|
55
|
+
readonly autoComplete?: string;
|
|
53
56
|
readonly required?: boolean;
|
|
54
57
|
readonly searchable?: boolean;
|
|
55
58
|
readonly sortable?: boolean;
|
|
@@ -72,6 +75,7 @@ export declare const mailAccountEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
72
75
|
readonly description?: string;
|
|
73
76
|
readonly maxLength?: number;
|
|
74
77
|
readonly minLength?: number;
|
|
78
|
+
readonly autoComplete?: string;
|
|
75
79
|
readonly required?: boolean;
|
|
76
80
|
readonly searchable?: boolean;
|
|
77
81
|
readonly sortable?: boolean;
|
|
@@ -94,6 +98,7 @@ export declare const mailAccountEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
94
98
|
readonly description?: string;
|
|
95
99
|
readonly maxLength?: number;
|
|
96
100
|
readonly minLength?: number;
|
|
101
|
+
readonly autoComplete?: string;
|
|
97
102
|
readonly required?: boolean;
|
|
98
103
|
readonly searchable?: boolean;
|
|
99
104
|
readonly sortable?: boolean;
|
|
@@ -116,6 +121,7 @@ export declare const mailAccountEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
116
121
|
readonly description?: string;
|
|
117
122
|
readonly maxLength?: number;
|
|
118
123
|
readonly minLength?: number;
|
|
124
|
+
readonly autoComplete?: string;
|
|
119
125
|
readonly required?: boolean;
|
|
120
126
|
readonly searchable?: boolean;
|
|
121
127
|
readonly sortable?: boolean;
|
|
@@ -138,6 +144,7 @@ export declare const mailAccountEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
138
144
|
readonly description?: string;
|
|
139
145
|
readonly maxLength?: number;
|
|
140
146
|
readonly minLength?: number;
|
|
147
|
+
readonly autoComplete?: string;
|
|
141
148
|
readonly required?: boolean;
|
|
142
149
|
readonly searchable?: boolean;
|
|
143
150
|
readonly sortable?: boolean;
|
|
@@ -180,6 +187,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
180
187
|
readonly description?: string;
|
|
181
188
|
readonly maxLength?: number;
|
|
182
189
|
readonly minLength?: number;
|
|
190
|
+
readonly autoComplete?: string;
|
|
183
191
|
readonly required?: boolean;
|
|
184
192
|
readonly searchable?: boolean;
|
|
185
193
|
readonly sortable?: boolean;
|
|
@@ -202,6 +210,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
202
210
|
readonly description?: string;
|
|
203
211
|
readonly maxLength?: number;
|
|
204
212
|
readonly minLength?: number;
|
|
213
|
+
readonly autoComplete?: string;
|
|
205
214
|
readonly required?: boolean;
|
|
206
215
|
readonly searchable?: boolean;
|
|
207
216
|
readonly sortable?: boolean;
|
|
@@ -224,6 +233,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
224
233
|
readonly description?: string;
|
|
225
234
|
readonly maxLength?: number;
|
|
226
235
|
readonly minLength?: number;
|
|
236
|
+
readonly autoComplete?: string;
|
|
227
237
|
readonly required?: boolean;
|
|
228
238
|
readonly searchable?: boolean;
|
|
229
239
|
readonly sortable?: boolean;
|
|
@@ -246,6 +256,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
246
256
|
readonly description?: string;
|
|
247
257
|
readonly maxLength?: number;
|
|
248
258
|
readonly minLength?: number;
|
|
259
|
+
readonly autoComplete?: string;
|
|
249
260
|
readonly required?: boolean;
|
|
250
261
|
readonly searchable?: boolean;
|
|
251
262
|
readonly sortable?: boolean;
|
|
@@ -268,6 +279,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
268
279
|
readonly description?: string;
|
|
269
280
|
readonly maxLength?: number;
|
|
270
281
|
readonly minLength?: number;
|
|
282
|
+
readonly autoComplete?: string;
|
|
271
283
|
readonly required?: boolean;
|
|
272
284
|
readonly searchable?: boolean;
|
|
273
285
|
readonly sortable?: boolean;
|
|
@@ -290,6 +302,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
290
302
|
readonly description?: string;
|
|
291
303
|
readonly maxLength?: number;
|
|
292
304
|
readonly minLength?: number;
|
|
305
|
+
readonly autoComplete?: string;
|
|
293
306
|
readonly required?: boolean;
|
|
294
307
|
readonly searchable?: boolean;
|
|
295
308
|
readonly sortable?: boolean;
|
|
@@ -312,6 +325,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
312
325
|
readonly description?: string;
|
|
313
326
|
readonly maxLength?: number;
|
|
314
327
|
readonly minLength?: number;
|
|
328
|
+
readonly autoComplete?: string;
|
|
315
329
|
readonly required?: boolean;
|
|
316
330
|
readonly searchable?: boolean;
|
|
317
331
|
readonly sortable?: boolean;
|
|
@@ -334,6 +348,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
334
348
|
readonly description?: string;
|
|
335
349
|
readonly maxLength?: number;
|
|
336
350
|
readonly minLength?: number;
|
|
351
|
+
readonly autoComplete?: string;
|
|
337
352
|
readonly required?: boolean;
|
|
338
353
|
readonly searchable?: boolean;
|
|
339
354
|
readonly sortable?: boolean;
|
|
@@ -356,6 +371,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
356
371
|
readonly description?: string;
|
|
357
372
|
readonly maxLength?: number;
|
|
358
373
|
readonly minLength?: number;
|
|
374
|
+
readonly autoComplete?: string;
|
|
359
375
|
readonly required?: boolean;
|
|
360
376
|
readonly searchable?: boolean;
|
|
361
377
|
readonly sortable?: boolean;
|
|
@@ -393,6 +409,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
393
409
|
readonly description?: string;
|
|
394
410
|
readonly maxLength?: number;
|
|
395
411
|
readonly minLength?: number;
|
|
412
|
+
readonly autoComplete?: string;
|
|
396
413
|
readonly required?: boolean;
|
|
397
414
|
readonly searchable?: boolean;
|
|
398
415
|
readonly sortable?: boolean;
|
|
@@ -415,6 +432,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
415
432
|
readonly description?: string;
|
|
416
433
|
readonly maxLength?: number;
|
|
417
434
|
readonly minLength?: number;
|
|
435
|
+
readonly autoComplete?: string;
|
|
418
436
|
readonly required?: boolean;
|
|
419
437
|
readonly searchable?: boolean;
|
|
420
438
|
readonly sortable?: boolean;
|
|
@@ -441,6 +459,7 @@ export declare const mailThreadEntity: import("@cosmicdrift/kumiko-types/fields"
|
|
|
441
459
|
readonly description?: string;
|
|
442
460
|
readonly maxLength?: number;
|
|
443
461
|
readonly minLength?: number;
|
|
462
|
+
readonly autoComplete?: string;
|
|
444
463
|
readonly required?: boolean;
|
|
445
464
|
readonly searchable?: boolean;
|
|
446
465
|
readonly sortable?: boolean;
|
|
@@ -463,6 +482,7 @@ export declare const mailThreadEntity: import("@cosmicdrift/kumiko-types/fields"
|
|
|
463
482
|
readonly description?: string;
|
|
464
483
|
readonly maxLength?: number;
|
|
465
484
|
readonly minLength?: number;
|
|
485
|
+
readonly autoComplete?: string;
|
|
466
486
|
readonly required?: boolean;
|
|
467
487
|
readonly searchable?: boolean;
|
|
468
488
|
readonly sortable?: boolean;
|
|
@@ -528,6 +548,7 @@ export declare const syncCursorEntity: import("@cosmicdrift/kumiko-types/fields"
|
|
|
528
548
|
readonly description?: string;
|
|
529
549
|
readonly maxLength?: number;
|
|
530
550
|
readonly minLength?: number;
|
|
551
|
+
readonly autoComplete?: string;
|
|
531
552
|
readonly required?: boolean;
|
|
532
553
|
readonly searchable?: boolean;
|
|
533
554
|
readonly sortable?: boolean;
|
|
@@ -550,6 +571,7 @@ export declare const syncCursorEntity: import("@cosmicdrift/kumiko-types/fields"
|
|
|
550
571
|
readonly description?: string;
|
|
551
572
|
readonly maxLength?: number;
|
|
552
573
|
readonly minLength?: number;
|
|
574
|
+
readonly autoComplete?: string;
|
|
553
575
|
readonly required?: boolean;
|
|
554
576
|
readonly searchable?: boolean;
|
|
555
577
|
readonly sortable?: boolean;
|
|
@@ -572,6 +594,7 @@ export declare const syncCursorEntity: import("@cosmicdrift/kumiko-types/fields"
|
|
|
572
594
|
readonly description?: string;
|
|
573
595
|
readonly maxLength?: number;
|
|
574
596
|
readonly minLength?: number;
|
|
597
|
+
readonly autoComplete?: string;
|
|
575
598
|
readonly required?: boolean;
|
|
576
599
|
readonly searchable?: boolean;
|
|
577
600
|
readonly sortable?: boolean;
|
|
@@ -615,6 +638,7 @@ export declare const seenMessageEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
615
638
|
readonly description?: string;
|
|
616
639
|
readonly maxLength?: number;
|
|
617
640
|
readonly minLength?: number;
|
|
641
|
+
readonly autoComplete?: string;
|
|
618
642
|
readonly required?: boolean;
|
|
619
643
|
readonly searchable?: boolean;
|
|
620
644
|
readonly sortable?: boolean;
|
|
@@ -637,6 +661,7 @@ export declare const seenMessageEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
637
661
|
readonly description?: string;
|
|
638
662
|
readonly maxLength?: number;
|
|
639
663
|
readonly minLength?: number;
|
|
664
|
+
readonly autoComplete?: string;
|
|
640
665
|
readonly required?: boolean;
|
|
641
666
|
readonly searchable?: boolean;
|
|
642
667
|
readonly sortable?: boolean;
|
|
@@ -4,6 +4,7 @@ export declare const mailAccountsProjectionTable: import("@cosmicdrift/kumiko-fr
|
|
|
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 mailAccountsProjectionTable: import("@cosmicdrift/kumiko-fr
|
|
|
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 mailAccountsProjectionTable: import("@cosmicdrift/kumiko-fr
|
|
|
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 mailAccountsProjectionTable: import("@cosmicdrift/kumiko-fr
|
|
|
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 mailAccountsProjectionTable: import("@cosmicdrift/kumiko-fr
|
|
|
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 mailAccountsProjectionTable: import("@cosmicdrift/kumiko-fr
|
|
|
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 mailAccountsProjectionTable: import("@cosmicdrift/kumiko-fr
|
|
|
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 inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
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 inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
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 inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
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 inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
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 inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
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 inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
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 inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
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;
|
|
@@ -329,6 +343,7 @@ export declare const inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
329
343
|
readonly description?: string;
|
|
330
344
|
readonly maxLength?: number;
|
|
331
345
|
readonly minLength?: number;
|
|
346
|
+
readonly autoComplete?: string;
|
|
332
347
|
readonly required?: boolean;
|
|
333
348
|
readonly searchable?: boolean;
|
|
334
349
|
readonly sortable?: boolean;
|
|
@@ -351,6 +366,7 @@ export declare const inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
351
366
|
readonly description?: string;
|
|
352
367
|
readonly maxLength?: number;
|
|
353
368
|
readonly minLength?: number;
|
|
369
|
+
readonly autoComplete?: string;
|
|
354
370
|
readonly required?: boolean;
|
|
355
371
|
readonly searchable?: boolean;
|
|
356
372
|
readonly sortable?: boolean;
|
|
@@ -388,6 +404,7 @@ export declare const inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
388
404
|
readonly description?: string;
|
|
389
405
|
readonly maxLength?: number;
|
|
390
406
|
readonly minLength?: number;
|
|
407
|
+
readonly autoComplete?: string;
|
|
391
408
|
readonly required?: boolean;
|
|
392
409
|
readonly searchable?: boolean;
|
|
393
410
|
readonly sortable?: boolean;
|
|
@@ -410,6 +427,7 @@ export declare const inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
410
427
|
readonly description?: string;
|
|
411
428
|
readonly maxLength?: number;
|
|
412
429
|
readonly minLength?: number;
|
|
430
|
+
readonly autoComplete?: string;
|
|
413
431
|
readonly required?: boolean;
|
|
414
432
|
readonly searchable?: boolean;
|
|
415
433
|
readonly sortable?: boolean;
|
|
@@ -434,6 +452,7 @@ export declare const mailThreadsProjectionTable: import("@cosmicdrift/kumiko-fra
|
|
|
434
452
|
readonly description?: string;
|
|
435
453
|
readonly maxLength?: number;
|
|
436
454
|
readonly minLength?: number;
|
|
455
|
+
readonly autoComplete?: string;
|
|
437
456
|
readonly required?: boolean;
|
|
438
457
|
readonly searchable?: boolean;
|
|
439
458
|
readonly sortable?: boolean;
|
|
@@ -456,6 +475,7 @@ export declare const mailThreadsProjectionTable: import("@cosmicdrift/kumiko-fra
|
|
|
456
475
|
readonly description?: string;
|
|
457
476
|
readonly maxLength?: number;
|
|
458
477
|
readonly minLength?: number;
|
|
478
|
+
readonly autoComplete?: string;
|
|
459
479
|
readonly required?: boolean;
|
|
460
480
|
readonly searchable?: boolean;
|
|
461
481
|
readonly sortable?: boolean;
|
|
@@ -25,6 +25,14 @@ const DEFAULT_CACHE_MAX_ENTRIES = 10_000;
|
|
|
25
25
|
// complete/failed; either way the cache entry has no value. Falls back
|
|
26
26
|
// to DB-lookup if actually needed.
|
|
27
27
|
const DEFAULT_CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
|
|
28
|
+
// Run rows hang on SYSTEM_TENANT_ID and a null trigger is a cron/system run;
|
|
29
|
+
// job-run-table.ts declares whenAbsent: "tenant" for exactly that case, so the
|
|
30
|
+
// logger must resolve the same subject the entity chain would (fw#3654).
|
|
31
|
+
function jobRunSubject(triggeredById) {
|
|
32
|
+
return triggeredById === null
|
|
33
|
+
? { kind: "tenant", tenantId: SYSTEM_TENANT_ID }
|
|
34
|
+
: { kind: "user", userId: triggeredById };
|
|
35
|
+
}
|
|
28
36
|
// Same per-subject encryption as encryptFailureError/encryptStartedPayload,
|
|
29
37
|
// applied to a single value — shared so payload/message/error all go
|
|
30
38
|
// through the identical erased-key fallback. A key erased right before (or
|
|
@@ -33,9 +41,9 @@ const DEFAULT_CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
|
|
|
33
41
|
// sentinel like decryptPiiValueForSubject does on the read side, instead of
|
|
34
42
|
// throwing and dropping the rest of the batch — or, for onJobStart, the
|
|
35
43
|
// whole run row.
|
|
36
|
-
async function encryptOrSentinel(kms,
|
|
44
|
+
async function encryptOrSentinel(kms, subject, value, field) {
|
|
37
45
|
try {
|
|
38
|
-
return await encryptPiiValueForSubject(kms,
|
|
46
|
+
return await encryptPiiValueForSubject(kms, subject, value, { requestId: "jobs:job-run-logger" }, field);
|
|
39
47
|
}
|
|
40
48
|
catch (e) {
|
|
41
49
|
if (!(e instanceof KeyErasedError))
|
|
@@ -48,19 +56,18 @@ async function encryptOrSentinel(kms, subjectUserId, value, field) {
|
|
|
48
56
|
// jobRunLogsTable — that table is unmanaged/direct-write, so there is no
|
|
49
57
|
// event-piiFields catalog to lean on here either. "message" is the AAD
|
|
50
58
|
// field name and must match the field passed to decryptStoredPii on read
|
|
51
|
-
// (detail.query.ts) or decrypt fails loud. Same skip
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
//
|
|
59
|
+
// (detail.query.ts) or decrypt fails loud. Same skip rule as the payload:
|
|
60
|
+
// absent KMS (rollout mode) stays plaintext. Bounded concurrency (#2307) —
|
|
61
|
+
// unbounded Promise.all would fire one getOrCreateDek per log line at once
|
|
62
|
+
// against the KMS adapter's pool.
|
|
55
63
|
async function encryptLogMessages(logs, triggeredById) {
|
|
56
|
-
if (triggeredById === null)
|
|
57
|
-
return [...logs];
|
|
58
64
|
const kms = configuredPiiSubjectKms();
|
|
59
65
|
if (!kms)
|
|
60
66
|
return [...logs];
|
|
67
|
+
const subject = jobRunSubject(triggeredById);
|
|
61
68
|
return mapWithConcurrency(logs, KMS_POOL_CONCURRENCY, async (log) => ({
|
|
62
69
|
...log,
|
|
63
|
-
message: await encryptOrSentinel(kms,
|
|
70
|
+
message: await encryptOrSentinel(kms, subject, log.message, "message"),
|
|
64
71
|
}));
|
|
65
72
|
}
|
|
66
73
|
// Mirrors encryptFailureError for the failure-path `error` column (#2307):
|
|
@@ -70,29 +77,26 @@ async function encryptLogMessages(logs, triggeredById) {
|
|
|
70
77
|
// separate, per-row batch path outside onJobFailed) applies the identical
|
|
71
78
|
// per-subject encryption instead of writing `error` in the clear.
|
|
72
79
|
export async function encryptFailureError(error, triggeredById) {
|
|
73
|
-
if (triggeredById === null)
|
|
74
|
-
return error;
|
|
75
80
|
const kms = configuredPiiSubjectKms();
|
|
76
81
|
if (!kms)
|
|
77
82
|
return error;
|
|
78
|
-
return encryptOrSentinel(kms, triggeredById, error, "error");
|
|
83
|
+
return encryptOrSentinel(kms, jobRunSubject(triggeredById), error, "error");
|
|
79
84
|
}
|
|
80
85
|
// The run-started payload can carry arbitrary user data; triggeredById
|
|
81
86
|
// names its owning user. No event-PII catalog involved (#2243 removed the
|
|
82
87
|
// jobRun r.defineEvent registrations, so there is nothing to catalog) —
|
|
83
88
|
// the subject is known statically, so we encrypt directly. A null subject
|
|
84
|
-
// (system cron runs, recipient-less triggers)
|
|
85
|
-
//
|
|
86
|
-
// rule. Absent KMS adapter stays plaintext too (rollout mode, unchanged).
|
|
89
|
+
// (system cron runs, recipient-less triggers) encrypts under the system
|
|
90
|
+
// tenant key. Absent KMS adapter stays plaintext (rollout mode, unchanged).
|
|
87
91
|
// A key already erased by the time the trigger lands (#2307) must not fail
|
|
88
92
|
// the whole run-start write — sentinel like the log/error paths.
|
|
89
93
|
async function encryptStartedPayload(payload, triggeredById) {
|
|
90
|
-
if (payload === null
|
|
94
|
+
if (payload === null)
|
|
91
95
|
return payload;
|
|
92
96
|
const kms = configuredPiiSubjectKms();
|
|
93
97
|
if (!kms)
|
|
94
98
|
return payload;
|
|
95
|
-
return encryptOrSentinel(kms, triggeredById, payload, "payload");
|
|
99
|
+
return encryptOrSentinel(kms, jobRunSubject(triggeredById), payload, "payload");
|
|
96
100
|
}
|
|
97
101
|
// pg_advisory_xact_lock namespace (int4): 'tjfl' as ASCII, disjoint from the
|
|
98
102
|
// framework's other fixed advisory-lock keys.
|
|
@@ -7,6 +7,7 @@ export declare const jobRunEntity: import("@cosmicdrift/kumiko-types/fields").En
|
|
|
7
7
|
readonly description?: string;
|
|
8
8
|
readonly maxLength?: number;
|
|
9
9
|
readonly minLength?: number;
|
|
10
|
+
readonly autoComplete?: string;
|
|
10
11
|
readonly required?: boolean;
|
|
11
12
|
readonly searchable?: boolean;
|
|
12
13
|
readonly sortable?: boolean;
|
|
@@ -29,6 +30,7 @@ export declare const jobRunEntity: import("@cosmicdrift/kumiko-types/fields").En
|
|
|
29
30
|
readonly description?: string;
|
|
30
31
|
readonly maxLength?: number;
|
|
31
32
|
readonly minLength?: number;
|
|
33
|
+
readonly autoComplete?: string;
|
|
32
34
|
readonly required?: boolean;
|
|
33
35
|
readonly searchable?: boolean;
|
|
34
36
|
readonly sortable?: boolean;
|
|
@@ -51,6 +53,7 @@ export declare const jobRunEntity: import("@cosmicdrift/kumiko-types/fields").En
|
|
|
51
53
|
readonly description?: string;
|
|
52
54
|
readonly maxLength?: number;
|
|
53
55
|
readonly minLength?: number;
|
|
56
|
+
readonly autoComplete?: string;
|
|
54
57
|
readonly required?: boolean;
|
|
55
58
|
readonly searchable?: boolean;
|
|
56
59
|
readonly sortable?: boolean;
|
|
@@ -73,6 +76,7 @@ export declare const jobRunEntity: import("@cosmicdrift/kumiko-types/fields").En
|
|
|
73
76
|
readonly description?: string;
|
|
74
77
|
readonly maxLength?: number;
|
|
75
78
|
readonly minLength?: number;
|
|
79
|
+
readonly autoComplete?: string;
|
|
76
80
|
readonly required?: boolean;
|
|
77
81
|
readonly searchable?: boolean;
|
|
78
82
|
readonly sortable?: boolean;
|
|
@@ -95,6 +99,7 @@ export declare const jobRunEntity: import("@cosmicdrift/kumiko-types/fields").En
|
|
|
95
99
|
readonly description?: string;
|
|
96
100
|
readonly maxLength?: number;
|
|
97
101
|
readonly minLength?: number;
|
|
102
|
+
readonly autoComplete?: string;
|
|
98
103
|
readonly required?: boolean;
|
|
99
104
|
readonly searchable?: boolean;
|
|
100
105
|
readonly sortable?: boolean;
|
|
@@ -185,6 +190,7 @@ export declare const jobRunEntity: import("@cosmicdrift/kumiko-types/fields").En
|
|
|
185
190
|
readonly description?: string;
|
|
186
191
|
readonly maxLength?: number;
|
|
187
192
|
readonly minLength?: number;
|
|
193
|
+
readonly autoComplete?: string;
|
|
188
194
|
readonly required?: boolean;
|
|
189
195
|
readonly searchable?: boolean;
|
|
190
196
|
readonly sortable?: boolean;
|
|
@@ -29,11 +29,18 @@ export const jobRunEntity = createEntity({
|
|
|
29
29
|
status: createTextField({ required: true, personal: false, reason: "system_metadata" }),
|
|
30
30
|
// The run-started payload can carry arbitrary caller-supplied data,
|
|
31
31
|
// encrypted by job-run-logger.ts under the triggering user's DEK (see
|
|
32
|
-
// jobs-pii-kms.integration.test.ts) — same subject as `triggeredById
|
|
33
|
-
|
|
32
|
+
// jobs-pii-kms.integration.test.ts) — same subject as `triggeredById`;
|
|
33
|
+
// cron runs have none and use the system tenant key (whenAbsent).
|
|
34
|
+
payload: createTextField({
|
|
35
|
+
personal: { of: "triggeredById", whenAbsent: "tenant" },
|
|
36
|
+
find: "none",
|
|
37
|
+
}),
|
|
34
38
|
// Failure messages can echo payload content back — same subject/DEK as
|
|
35
39
|
// `payload` (job-run-logger.ts encryptFailureError).
|
|
36
|
-
error: createTextField({
|
|
40
|
+
error: createTextField({
|
|
41
|
+
personal: { of: "triggeredById", whenAbsent: "tenant" },
|
|
42
|
+
find: "none",
|
|
43
|
+
}),
|
|
37
44
|
attempt: createNumberField({ required: true, default: 1, integer: true }),
|
|
38
45
|
startedAt: createTimestampField({ required: true }),
|
|
39
46
|
finishedAt: createTimestampField(),
|