@cosmicdrift/kumiko-bundled-features 0.351.0 → 0.353.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.
Files changed (164) hide show
  1. package/dist/agent-tools/agent-manifest.js +8 -2
  2. package/dist/agent-tools/manifest-deny-qns.d.ts +3 -0
  3. package/dist/agent-tools/manifest-deny-qns.js +17 -0
  4. package/dist/agent-tools/tool-catalog.d.ts +2 -1
  5. package/dist/agent-tools/tool-catalog.js +4 -1
  6. package/dist/audit/handlers/list.query.js +13 -8
  7. package/dist/auth-email-password/handlers/signup-confirm.write.js +2 -3
  8. package/dist/auth-mfa/schema/user-mfa.d.ts +6 -0
  9. package/dist/auth-mfa/screens.js +2 -2
  10. package/dist/billing-foundation/checkout-core.d.ts +7 -0
  11. package/dist/billing-foundation/checkout-core.js +7 -2
  12. package/dist/billing-foundation/entities.d.ts +8 -0
  13. package/dist/billing-foundation/handlers/start-plan-checkout.write.js +7 -1
  14. package/dist/billing-foundation/projection.d.ts +8 -0
  15. package/dist/cap-counter/book-cap-usage.d.ts +5 -1
  16. package/dist/cap-counter/book-cap-usage.js +65 -44
  17. package/dist/cap-counter/cap-reservation.d.ts +12 -0
  18. package/dist/cap-counter/cap-reservation.js +135 -0
  19. package/dist/cap-counter/constants.d.ts +3 -0
  20. package/dist/cap-counter/constants.js +6 -0
  21. package/dist/cap-counter/entity.d.ts +1 -0
  22. package/dist/cap-counter/feature.js +7 -2
  23. package/dist/cap-counter/handlers/increment-rolling.write.d.ts +5 -0
  24. package/dist/cap-counter/handlers/increment-rolling.write.js +4 -0
  25. package/dist/cap-counter/index.d.ts +4 -2
  26. package/dist/cap-counter/index.js +3 -1
  27. package/dist/cap-counter/payload-field.d.ts +1 -0
  28. package/dist/cap-counter/payload-field.js +11 -0
  29. package/dist/cap-counter/reservation-chain.d.ts +2 -0
  30. package/dist/cap-counter/reservation-chain.js +44 -0
  31. package/dist/cap-counter/stock-cap-guard.d.ts +3 -0
  32. package/dist/cap-counter/tables.d.ts +3 -0
  33. package/dist/cap-counter/tables.js +36 -0
  34. package/dist/cap-counter/value-cap-guard.d.ts +18 -0
  35. package/dist/cap-counter/value-cap-guard.js +33 -0
  36. package/dist/cap-counter/with-cap-enforcement.d.ts +5 -7
  37. package/dist/cap-counter/with-cap-enforcement.js +35 -51
  38. package/dist/cap-overview/access.js +2 -9
  39. package/dist/cap-overview/handlers/tenant-caps-list.query.js +2 -2
  40. package/dist/cap-overview/handlers/tenant-options.query.js +4 -5
  41. package/dist/channel-discord/feature.js +1 -0
  42. package/dist/channel-slack/feature.js +1 -0
  43. package/dist/channel-teams/feature.js +1 -0
  44. package/dist/compliance-profiles/schema/profile-selection.d.ts +10 -8
  45. package/dist/compliance-profiles-ops/handlers/tenants-missing-profile.query.js +2 -4
  46. package/dist/config/handlers/values.query.d.ts +3 -1
  47. package/dist/config/handlers/values.query.js +7 -2
  48. package/dist/config/table.d.ts +6 -0
  49. package/dist/custom-fields/entity.d.ts +4 -0
  50. package/dist/data-retention/schema/tenant-retention-override.d.ts +4 -0
  51. package/dist/delivery/attempt-log-retention.d.ts +9 -0
  52. package/dist/delivery/attempt-log-retention.js +23 -0
  53. package/dist/delivery/attempt-log.d.ts +1 -1
  54. package/dist/delivery/attempt-log.js +21 -2
  55. package/dist/delivery/constants.d.ts +1 -1
  56. package/dist/delivery/constants.js +1 -1
  57. package/dist/delivery/events.d.ts +1 -0
  58. package/dist/delivery/events.js +2 -0
  59. package/dist/delivery/feature.d.ts +1 -0
  60. package/dist/delivery/feature.js +39 -3
  61. package/dist/delivery/index.d.ts +2 -1
  62. package/dist/delivery/index.js +2 -1
  63. package/dist/delivery/mask-recipient-address.d.ts +1 -0
  64. package/dist/delivery/mask-recipient-address.js +41 -0
  65. package/dist/delivery/public-names.d.ts +2 -0
  66. package/dist/delivery/public-names.js +4 -1
  67. package/dist/delivery/tables.d.ts +6 -0
  68. package/dist/delivery/types.d.ts +1 -0
  69. package/dist/delivery/types.js +6 -2
  70. package/dist/document-ingest-foundation/entity.d.ts +4 -0
  71. package/dist/files-tenant-data/hooks.js +3 -2
  72. package/dist/folders/entity.d.ts +8 -0
  73. package/dist/folders/feature.js +2 -10
  74. package/dist/form-draft/db/queries/cleanup.d.ts +1 -1
  75. package/dist/form-draft/db/queries/cleanup.js +4 -3
  76. package/dist/form-draft/entity.d.ts +2 -0
  77. package/dist/form-draft/handlers/cleanup.job.d.ts +5 -1
  78. package/dist/form-draft/handlers/cleanup.job.js +11 -5
  79. package/dist/inbound-mail-foundation/entities.d.ts +25 -0
  80. package/dist/inbound-mail-foundation/projection.d.ts +20 -0
  81. package/dist/jobs/handlers/list.query.d.ts +2 -1
  82. package/dist/jobs/handlers/list.query.js +39 -14
  83. package/dist/jobs/i18n.js +1 -0
  84. package/dist/jobs/job-run-table.d.ts +6 -0
  85. package/dist/ledger/entity.d.ts +24 -8
  86. package/dist/ledger/entity.js +4 -0
  87. package/dist/ledger/schemas.js +8 -2
  88. package/dist/managed-pages/feature.js +28 -10
  89. package/dist/managed-pages/table.d.ts +12 -0
  90. package/dist/notes-history/entity.d.ts +12 -0
  91. package/dist/notes-history/feature.js +2 -10
  92. package/dist/personal-access-tokens/schema/api-token.d.ts +6 -0
  93. package/dist/personal-access-tokens/screens.js +14 -3
  94. package/dist/renderer-foundation/types.d.ts +1 -0
  95. package/dist/renderer-simple/feature.js +4 -6
  96. package/dist/renderer-simple/index.d.ts +1 -0
  97. package/dist/renderer-simple/mail-blocks.d.ts +21 -0
  98. package/dist/renderer-simple/mail-blocks.js +107 -0
  99. package/dist/renderer-simple/simple-renderer.js +21 -3
  100. package/dist/secrets/table.d.ts +1 -0
  101. package/dist/seo/feature.js +28 -6
  102. package/dist/sessions/schema/user-session.d.ts +4 -0
  103. package/dist/shared/assert-no-where-rule-in-ownership-write.d.ts +2 -0
  104. package/dist/shared/assert-no-where-rule-in-ownership-write.js +18 -0
  105. package/dist/shared/index.d.ts +2 -1
  106. package/dist/shared/index.js +2 -1
  107. package/dist/shared/rate-limited-text-response.d.ts +2 -0
  108. package/dist/shared/rate-limited-text-response.js +9 -0
  109. package/dist/tags/entity.d.ts +9 -0
  110. package/dist/tags/feature.js +2 -10
  111. package/dist/template-resolver/table.d.ts +48 -30
  112. package/dist/template-resolver/user-content-table.d.ts +34 -20
  113. package/dist/tenant/decrypt-tenant-names.d.ts +3 -0
  114. package/dist/tenant/decrypt-tenant-names.js +10 -0
  115. package/dist/tenant/handlers/me.query.js +5 -1
  116. package/dist/tenant/handlers/memberships.query.js +3 -2
  117. package/dist/tenant/handlers/tenant-directory.query.js +9 -3
  118. package/dist/tenant/index.d.ts +1 -0
  119. package/dist/tenant/index.js +1 -0
  120. package/dist/tenant/invitation-table.d.ts +16 -8
  121. package/dist/tenant/membership-table.d.ts +4 -0
  122. package/dist/tenant/schema/tenant.d.ts +18 -10
  123. package/dist/tenant/schema/tenant.js +4 -6
  124. package/dist/tenant/screens.js +1 -1
  125. package/dist/tenant-handover/move-entity-graph.js +11 -18
  126. package/dist/tenant-lifecycle/feature.js +1 -0
  127. package/dist/tenant-lifecycle/run-tenant-destroy.d.ts +3 -0
  128. package/dist/tenant-lifecycle/run-tenant-destroy.js +2 -0
  129. package/dist/tenant-lifecycle/stages.d.ts +2 -0
  130. package/dist/tenant-lifecycle/stages.js +7 -1
  131. package/dist/tier-engine/entity.d.ts +2 -0
  132. package/dist/tier-engine/index.d.ts +1 -0
  133. package/dist/tier-engine/index.js +1 -0
  134. package/dist/tier-engine/tier-option-gate.d.ts +32 -0
  135. package/dist/tier-engine/tier-option-gate.js +62 -0
  136. package/dist/tier-engine/tier-resolver.d.ts +2 -0
  137. package/dist/user/handlers/list.query.js +2 -2
  138. package/dist/user/schema/user.d.ts +22 -8
  139. package/dist/user-data-rights/boot-checks.js +5 -0
  140. package/dist/user-data-rights/handlers/confirm-deletion-by-token.write.js +2 -2
  141. package/dist/user-data-rights/schema/download-attempt.d.ts +14 -0
  142. package/dist/user-data-rights/schema/download-token.d.ts +8 -0
  143. package/dist/user-data-rights/schema/export-job.d.ts +16 -8
  144. package/dist/user-data-rights-defaults/hooks/delivery-attempt.userdata-hook.js +25 -6
  145. package/dist/waitlist/entity.d.ts +22 -6
  146. package/dist/workflow-runner/event-trigger.js +6 -3
  147. package/dist/workflow-runner/handlers/resume-run.write.js +3 -0
  148. package/package.json +10 -10
  149. package/src/agent-tools/changes.json +12 -0
  150. package/src/audit/changes.json +6 -0
  151. package/src/cap-counter/changes.json +28 -0
  152. package/src/delivery/changes.json +12 -0
  153. package/src/derivatives-sharp/changes.json +6 -0
  154. package/src/form-draft/changes.json +7 -1
  155. package/src/legal-pages/changes.json +6 -0
  156. package/src/managed-pages/changes.json +6 -0
  157. package/src/renderer-simple/changes.json +6 -0
  158. package/src/seo/changes.json +5 -0
  159. package/src/tenant/changes.json +7 -0
  160. package/src/tenant-handover/changes.json +6 -0
  161. package/src/tier-engine/changes.json +6 -0
  162. package/src/workflow-runner/changes.json +5 -0
  163. package/dist/shared/has-where-rule.d.ts +0 -2
  164. package/dist/shared/has-where-rule.js +0 -10
@@ -4,6 +4,7 @@ export declare const templateResourceEntity: import("@cosmicdrift/kumiko-types/f
4
4
  readonly type: "text";
5
5
  readonly description?: string;
6
6
  readonly maxLength?: number;
7
+ readonly minLength?: number;
7
8
  readonly required?: boolean;
8
9
  readonly searchable?: boolean;
9
10
  readonly sortable?: boolean;
@@ -33,15 +34,16 @@ export declare const templateResourceEntity: import("@cosmicdrift/kumiko-types/f
33
34
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
34
35
  readonly display?: "radio" | "dropdown";
35
36
  readonly optionTones?: {
36
- readonly "ai-prompt"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
37
- readonly "document-pdf"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
38
- readonly "image-snapshot"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
39
- readonly "mail-html"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
40
- readonly notification?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
41
- readonly "text-block"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
37
+ readonly "ai-prompt"?: "bad" | "neutral" | "ok" | "warn" | undefined;
38
+ readonly "document-pdf"?: "bad" | "neutral" | "ok" | "warn" | undefined;
39
+ readonly "image-snapshot"?: "bad" | "neutral" | "ok" | "warn" | undefined;
40
+ readonly "mail-html"?: "bad" | "neutral" | "ok" | "warn" | undefined;
41
+ readonly notification?: "bad" | "neutral" | "ok" | "warn" | undefined;
42
+ readonly "text-block"?: "bad" | "neutral" | "ok" | "warn" | undefined;
42
43
  } | undefined;
43
44
  readonly optionsQuery?: string;
44
45
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
46
+ readonly optionsAvailabilityQuery?: string;
45
47
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
46
48
  required: true;
47
49
  };
@@ -49,6 +51,7 @@ export declare const templateResourceEntity: import("@cosmicdrift/kumiko-types/f
49
51
  readonly type: "text";
50
52
  readonly description?: string;
51
53
  readonly maxLength?: number;
54
+ readonly minLength?: number;
52
55
  readonly required?: boolean;
53
56
  readonly searchable?: boolean;
54
57
  readonly sortable?: boolean;
@@ -70,6 +73,7 @@ export declare const templateResourceEntity: import("@cosmicdrift/kumiko-types/f
70
73
  readonly type: "text";
71
74
  readonly description?: string;
72
75
  readonly maxLength?: number;
76
+ readonly minLength?: number;
73
77
  readonly required?: boolean;
74
78
  readonly searchable?: boolean;
75
79
  readonly sortable?: boolean;
@@ -91,6 +95,7 @@ export declare const templateResourceEntity: import("@cosmicdrift/kumiko-types/f
91
95
  readonly type: "text";
92
96
  readonly description?: string;
93
97
  readonly maxLength?: number;
98
+ readonly minLength?: number;
94
99
  readonly required?: boolean;
95
100
  readonly searchable?: boolean;
96
101
  readonly sortable?: boolean;
@@ -136,13 +141,14 @@ export declare const templateResourceEntity: import("@cosmicdrift/kumiko-types/f
136
141
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
137
142
  readonly display?: "radio" | "dropdown";
138
143
  readonly optionTones?: {
139
- readonly html?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
140
- readonly markdown?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
141
- readonly mjml?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
142
- readonly plain?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
144
+ readonly html?: "bad" | "neutral" | "ok" | "warn" | undefined;
145
+ readonly markdown?: "bad" | "neutral" | "ok" | "warn" | undefined;
146
+ readonly mjml?: "bad" | "neutral" | "ok" | "warn" | undefined;
147
+ readonly plain?: "bad" | "neutral" | "ok" | "warn" | undefined;
143
148
  } | undefined;
144
149
  readonly optionsQuery?: string;
145
150
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
151
+ readonly optionsAvailabilityQuery?: string;
146
152
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
147
153
  required: true;
148
154
  };
@@ -190,11 +196,12 @@ export declare const templateResourceEntity: import("@cosmicdrift/kumiko-types/f
190
196
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
191
197
  readonly display?: "radio" | "dropdown";
192
198
  readonly optionTones?: {
193
- readonly system?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
194
- readonly tenant?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
199
+ readonly system?: "bad" | "neutral" | "ok" | "warn" | undefined;
200
+ readonly tenant?: "bad" | "neutral" | "ok" | "warn" | undefined;
195
201
  } | undefined;
196
202
  readonly optionsQuery?: string;
197
203
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
204
+ readonly optionsAvailabilityQuery?: string;
198
205
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
199
206
  required: true;
200
207
  };
@@ -202,6 +209,7 @@ export declare const templateResourceEntity: import("@cosmicdrift/kumiko-types/f
202
209
  readonly type: "text";
203
210
  readonly description?: string;
204
211
  readonly maxLength?: number;
212
+ readonly minLength?: number;
205
213
  readonly required?: boolean;
206
214
  readonly searchable?: boolean;
207
215
  readonly sortable?: boolean;
@@ -231,12 +239,13 @@ export declare const templateResourceEntity: import("@cosmicdrift/kumiko-types/f
231
239
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
232
240
  readonly display?: "radio" | "dropdown";
233
241
  readonly optionTones?: {
234
- readonly active?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
235
- readonly archived?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
236
- readonly draft?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
242
+ readonly active?: "bad" | "neutral" | "ok" | "warn" | undefined;
243
+ readonly archived?: "bad" | "neutral" | "ok" | "warn" | undefined;
244
+ readonly draft?: "bad" | "neutral" | "ok" | "warn" | undefined;
237
245
  } | undefined;
238
246
  readonly optionsQuery?: string;
239
247
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
248
+ readonly optionsAvailabilityQuery?: string;
240
249
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
241
250
  required: true;
242
251
  };
@@ -246,6 +255,7 @@ export declare const templateResourcesTable: import("@cosmicdrift/kumiko-framewo
246
255
  readonly type: "text";
247
256
  readonly description?: string;
248
257
  readonly maxLength?: number;
258
+ readonly minLength?: number;
249
259
  readonly required?: boolean;
250
260
  readonly searchable?: boolean;
251
261
  readonly sortable?: boolean;
@@ -275,15 +285,16 @@ export declare const templateResourcesTable: import("@cosmicdrift/kumiko-framewo
275
285
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
276
286
  readonly display?: "radio" | "dropdown";
277
287
  readonly optionTones?: {
278
- readonly "ai-prompt"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
279
- readonly "document-pdf"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
280
- readonly "image-snapshot"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
281
- readonly "mail-html"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
282
- readonly notification?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
283
- readonly "text-block"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
288
+ readonly "ai-prompt"?: "bad" | "neutral" | "ok" | "warn" | undefined;
289
+ readonly "document-pdf"?: "bad" | "neutral" | "ok" | "warn" | undefined;
290
+ readonly "image-snapshot"?: "bad" | "neutral" | "ok" | "warn" | undefined;
291
+ readonly "mail-html"?: "bad" | "neutral" | "ok" | "warn" | undefined;
292
+ readonly notification?: "bad" | "neutral" | "ok" | "warn" | undefined;
293
+ readonly "text-block"?: "bad" | "neutral" | "ok" | "warn" | undefined;
284
294
  } | undefined;
285
295
  readonly optionsQuery?: string;
286
296
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
297
+ readonly optionsAvailabilityQuery?: string;
287
298
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
288
299
  required: true;
289
300
  };
@@ -291,6 +302,7 @@ export declare const templateResourcesTable: import("@cosmicdrift/kumiko-framewo
291
302
  readonly type: "text";
292
303
  readonly description?: string;
293
304
  readonly maxLength?: number;
305
+ readonly minLength?: number;
294
306
  readonly required?: boolean;
295
307
  readonly searchable?: boolean;
296
308
  readonly sortable?: boolean;
@@ -312,6 +324,7 @@ export declare const templateResourcesTable: import("@cosmicdrift/kumiko-framewo
312
324
  readonly type: "text";
313
325
  readonly description?: string;
314
326
  readonly maxLength?: number;
327
+ readonly minLength?: number;
315
328
  readonly required?: boolean;
316
329
  readonly searchable?: boolean;
317
330
  readonly sortable?: boolean;
@@ -333,6 +346,7 @@ export declare const templateResourcesTable: import("@cosmicdrift/kumiko-framewo
333
346
  readonly type: "text";
334
347
  readonly description?: string;
335
348
  readonly maxLength?: number;
349
+ readonly minLength?: number;
336
350
  readonly required?: boolean;
337
351
  readonly searchable?: boolean;
338
352
  readonly sortable?: boolean;
@@ -378,13 +392,14 @@ export declare const templateResourcesTable: import("@cosmicdrift/kumiko-framewo
378
392
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
379
393
  readonly display?: "radio" | "dropdown";
380
394
  readonly optionTones?: {
381
- readonly html?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
382
- readonly markdown?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
383
- readonly mjml?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
384
- readonly plain?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
395
+ readonly html?: "bad" | "neutral" | "ok" | "warn" | undefined;
396
+ readonly markdown?: "bad" | "neutral" | "ok" | "warn" | undefined;
397
+ readonly mjml?: "bad" | "neutral" | "ok" | "warn" | undefined;
398
+ readonly plain?: "bad" | "neutral" | "ok" | "warn" | undefined;
385
399
  } | undefined;
386
400
  readonly optionsQuery?: string;
387
401
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
402
+ readonly optionsAvailabilityQuery?: string;
388
403
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
389
404
  required: true;
390
405
  };
@@ -432,11 +447,12 @@ export declare const templateResourcesTable: import("@cosmicdrift/kumiko-framewo
432
447
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
433
448
  readonly display?: "radio" | "dropdown";
434
449
  readonly optionTones?: {
435
- readonly system?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
436
- readonly tenant?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
450
+ readonly system?: "bad" | "neutral" | "ok" | "warn" | undefined;
451
+ readonly tenant?: "bad" | "neutral" | "ok" | "warn" | undefined;
437
452
  } | undefined;
438
453
  readonly optionsQuery?: string;
439
454
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
455
+ readonly optionsAvailabilityQuery?: string;
440
456
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
441
457
  required: true;
442
458
  };
@@ -444,6 +460,7 @@ export declare const templateResourcesTable: import("@cosmicdrift/kumiko-framewo
444
460
  readonly type: "text";
445
461
  readonly description?: string;
446
462
  readonly maxLength?: number;
463
+ readonly minLength?: number;
447
464
  readonly required?: boolean;
448
465
  readonly searchable?: boolean;
449
466
  readonly sortable?: boolean;
@@ -473,12 +490,13 @@ export declare const templateResourcesTable: import("@cosmicdrift/kumiko-framewo
473
490
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
474
491
  readonly display?: "radio" | "dropdown";
475
492
  readonly optionTones?: {
476
- readonly active?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
477
- readonly archived?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
478
- readonly draft?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
493
+ readonly active?: "bad" | "neutral" | "ok" | "warn" | undefined;
494
+ readonly archived?: "bad" | "neutral" | "ok" | "warn" | undefined;
495
+ readonly draft?: "bad" | "neutral" | "ok" | "warn" | undefined;
479
496
  } | undefined;
480
497
  readonly optionsQuery?: string;
481
498
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
499
+ readonly optionsAvailabilityQuery?: string;
482
500
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
483
501
  required: true;
484
502
  };
@@ -4,6 +4,7 @@ export declare const userContentEntryEntity: import("@cosmicdrift/kumiko-types/f
4
4
  readonly type: "text";
5
5
  readonly description?: string;
6
6
  readonly maxLength?: number;
7
+ readonly minLength?: number;
7
8
  readonly required?: boolean;
8
9
  readonly searchable?: boolean;
9
10
  readonly sortable?: boolean;
@@ -25,6 +26,7 @@ export declare const userContentEntryEntity: import("@cosmicdrift/kumiko-types/f
25
26
  readonly type: "text";
26
27
  readonly description?: string;
27
28
  readonly maxLength?: number;
29
+ readonly minLength?: number;
28
30
  readonly required?: boolean;
29
31
  readonly searchable?: boolean;
30
32
  readonly sortable?: boolean;
@@ -54,15 +56,16 @@ export declare const userContentEntryEntity: import("@cosmicdrift/kumiko-types/f
54
56
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
55
57
  readonly display?: "radio" | "dropdown";
56
58
  readonly optionTones?: {
57
- readonly "ai-prompt"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
58
- readonly "document-pdf"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
59
- readonly "image-snapshot"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
60
- readonly "mail-html"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
61
- readonly notification?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
62
- readonly "text-block"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
59
+ readonly "ai-prompt"?: "bad" | "neutral" | "ok" | "warn" | undefined;
60
+ readonly "document-pdf"?: "bad" | "neutral" | "ok" | "warn" | undefined;
61
+ readonly "image-snapshot"?: "bad" | "neutral" | "ok" | "warn" | undefined;
62
+ readonly "mail-html"?: "bad" | "neutral" | "ok" | "warn" | undefined;
63
+ readonly notification?: "bad" | "neutral" | "ok" | "warn" | undefined;
64
+ readonly "text-block"?: "bad" | "neutral" | "ok" | "warn" | undefined;
63
65
  } | undefined;
64
66
  readonly optionsQuery?: string;
65
67
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
68
+ readonly optionsAvailabilityQuery?: string;
66
69
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
67
70
  required: true;
68
71
  };
@@ -70,6 +73,7 @@ export declare const userContentEntryEntity: import("@cosmicdrift/kumiko-types/f
70
73
  readonly type: "text";
71
74
  readonly description?: string;
72
75
  readonly maxLength?: number;
76
+ readonly minLength?: number;
73
77
  readonly required?: boolean;
74
78
  readonly searchable?: boolean;
75
79
  readonly sortable?: boolean;
@@ -91,6 +95,7 @@ export declare const userContentEntryEntity: import("@cosmicdrift/kumiko-types/f
91
95
  readonly type: "text";
92
96
  readonly description?: string;
93
97
  readonly maxLength?: number;
98
+ readonly minLength?: number;
94
99
  readonly required?: boolean;
95
100
  readonly searchable?: boolean;
96
101
  readonly sortable?: boolean;
@@ -112,6 +117,7 @@ export declare const userContentEntryEntity: import("@cosmicdrift/kumiko-types/f
112
117
  readonly type: "text";
113
118
  readonly description?: string;
114
119
  readonly maxLength?: number;
120
+ readonly minLength?: number;
115
121
  readonly required?: boolean;
116
122
  readonly searchable?: boolean;
117
123
  readonly sortable?: boolean;
@@ -157,13 +163,14 @@ export declare const userContentEntryEntity: import("@cosmicdrift/kumiko-types/f
157
163
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
158
164
  readonly display?: "radio" | "dropdown";
159
165
  readonly optionTones?: {
160
- readonly html?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
161
- readonly markdown?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
162
- readonly mjml?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
163
- readonly plain?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
166
+ readonly html?: "bad" | "neutral" | "ok" | "warn" | undefined;
167
+ readonly markdown?: "bad" | "neutral" | "ok" | "warn" | undefined;
168
+ readonly mjml?: "bad" | "neutral" | "ok" | "warn" | undefined;
169
+ readonly plain?: "bad" | "neutral" | "ok" | "warn" | undefined;
164
170
  } | undefined;
165
171
  readonly optionsQuery?: string;
166
172
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
173
+ readonly optionsAvailabilityQuery?: string;
167
174
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
168
175
  required: true;
169
176
  };
@@ -173,6 +180,7 @@ export declare const userContentEntriesTable: import("@cosmicdrift/kumiko-framew
173
180
  readonly type: "text";
174
181
  readonly description?: string;
175
182
  readonly maxLength?: number;
183
+ readonly minLength?: number;
176
184
  readonly required?: boolean;
177
185
  readonly searchable?: boolean;
178
186
  readonly sortable?: boolean;
@@ -194,6 +202,7 @@ export declare const userContentEntriesTable: import("@cosmicdrift/kumiko-framew
194
202
  readonly type: "text";
195
203
  readonly description?: string;
196
204
  readonly maxLength?: number;
205
+ readonly minLength?: number;
197
206
  readonly required?: boolean;
198
207
  readonly searchable?: boolean;
199
208
  readonly sortable?: boolean;
@@ -223,15 +232,16 @@ export declare const userContentEntriesTable: import("@cosmicdrift/kumiko-framew
223
232
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
224
233
  readonly display?: "radio" | "dropdown";
225
234
  readonly optionTones?: {
226
- readonly "ai-prompt"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
227
- readonly "document-pdf"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
228
- readonly "image-snapshot"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
229
- readonly "mail-html"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
230
- readonly notification?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
231
- readonly "text-block"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
235
+ readonly "ai-prompt"?: "bad" | "neutral" | "ok" | "warn" | undefined;
236
+ readonly "document-pdf"?: "bad" | "neutral" | "ok" | "warn" | undefined;
237
+ readonly "image-snapshot"?: "bad" | "neutral" | "ok" | "warn" | undefined;
238
+ readonly "mail-html"?: "bad" | "neutral" | "ok" | "warn" | undefined;
239
+ readonly notification?: "bad" | "neutral" | "ok" | "warn" | undefined;
240
+ readonly "text-block"?: "bad" | "neutral" | "ok" | "warn" | undefined;
232
241
  } | undefined;
233
242
  readonly optionsQuery?: string;
234
243
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
244
+ readonly optionsAvailabilityQuery?: string;
235
245
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
236
246
  required: true;
237
247
  };
@@ -239,6 +249,7 @@ export declare const userContentEntriesTable: import("@cosmicdrift/kumiko-framew
239
249
  readonly type: "text";
240
250
  readonly description?: string;
241
251
  readonly maxLength?: number;
252
+ readonly minLength?: number;
242
253
  readonly required?: boolean;
243
254
  readonly searchable?: boolean;
244
255
  readonly sortable?: boolean;
@@ -260,6 +271,7 @@ export declare const userContentEntriesTable: import("@cosmicdrift/kumiko-framew
260
271
  readonly type: "text";
261
272
  readonly description?: string;
262
273
  readonly maxLength?: number;
274
+ readonly minLength?: number;
263
275
  readonly required?: boolean;
264
276
  readonly searchable?: boolean;
265
277
  readonly sortable?: boolean;
@@ -281,6 +293,7 @@ export declare const userContentEntriesTable: import("@cosmicdrift/kumiko-framew
281
293
  readonly type: "text";
282
294
  readonly description?: string;
283
295
  readonly maxLength?: number;
296
+ readonly minLength?: number;
284
297
  readonly required?: boolean;
285
298
  readonly searchable?: boolean;
286
299
  readonly sortable?: boolean;
@@ -326,13 +339,14 @@ export declare const userContentEntriesTable: import("@cosmicdrift/kumiko-framew
326
339
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
327
340
  readonly display?: "radio" | "dropdown";
328
341
  readonly optionTones?: {
329
- readonly html?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
330
- readonly markdown?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
331
- readonly mjml?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
332
- readonly plain?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
342
+ readonly html?: "bad" | "neutral" | "ok" | "warn" | undefined;
343
+ readonly markdown?: "bad" | "neutral" | "ok" | "warn" | undefined;
344
+ readonly mjml?: "bad" | "neutral" | "ok" | "warn" | undefined;
345
+ readonly plain?: "bad" | "neutral" | "ok" | "warn" | undefined;
333
346
  } | undefined;
334
347
  readonly optionsQuery?: string;
335
348
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
349
+ readonly optionsAvailabilityQuery?: string;
336
350
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
337
351
  required: true;
338
352
  };
@@ -0,0 +1,3 @@
1
+ export declare function decryptTenantNames<T extends {
2
+ readonly name?: unknown;
3
+ }>(rows: readonly T[], fallbackRequestId: string): Promise<T[]>;
@@ -0,0 +1,10 @@
1
+ import { decryptStoredPii, mapWithConcurrency } from "../shared/index.js";
2
+ // Bounded like tenant:query:members: each decrypt hits the KMS adapter's small pool.
3
+ const KMS_POOL_CONCURRENCY = 4;
4
+ // Raw reads of read_tenants return the stored column, which is ciphertext
5
+ // under an active KMS; executor reads (crud.list/detail) decrypt on their own.
6
+ export async function decryptTenantNames(rows, fallbackRequestId) {
7
+ return mapWithConcurrency(rows, KMS_POOL_CONCURRENCY, async (row) => typeof row.name === "string"
8
+ ? { ...row, name: await decryptStoredPii(row.name, "name", fallbackRequestId) }
9
+ : row);
10
+ }
@@ -2,6 +2,7 @@ import { fetchOne } from "@cosmicdrift/kumiko-framework/bun-db";
2
2
  import { defineQueryHandler } from "@cosmicdrift/kumiko-framework/engine";
3
3
  import { InternalError } from "@cosmicdrift/kumiko-framework/errors";
4
4
  import * as z from "zod";
5
+ import { decryptTenantNames } from "../decrypt-tenant-names.js";
5
6
  import { tenantTable } from "../schema/tenant.js";
6
7
  // Direct query — query handlers don't have a tenant-crud handle. A direct
7
8
  // select is trivial: WHERE id = tenantId (both UUID). No CRUD detour needed.
@@ -28,6 +29,9 @@ export const meQuery = defineQueryHandler({
28
29
  }
29
30
  const db = ctx.systemDb.assertTenantMatch(query.user.tenantId);
30
31
  const row = await fetchOne(db, tenantTable, { id: query.user.tenantId });
31
- return row ?? null;
32
+ if (row === undefined)
33
+ return null;
34
+ const [decrypted] = await decryptTenantNames([row], "tenant:me");
35
+ return decrypted ?? null;
32
36
  },
33
37
  });
@@ -3,6 +3,7 @@ import { defineQueryHandler, SYSTEM_ROLE } from "@cosmicdrift/kumiko-framework/e
3
3
  import { InternalError } from "@cosmicdrift/kumiko-framework/errors";
4
4
  import { parseRoles } from "@cosmicdrift/kumiko-framework/utils";
5
5
  import * as z from "zod";
6
+ import { decryptTenantNames } from "../decrypt-tenant-names.js";
6
7
  import { tenantMembershipsTable } from "../membership-table.js";
7
8
  import { tenantTable } from "../schema/tenant.js";
8
9
  export const membershipsQuery = defineQueryHandler({
@@ -22,9 +23,9 @@ export const membershipsQuery = defineQueryHandler({
22
23
  const rows = await selectMany(db, tenantMembershipsTable, { userId: query.payload.userId });
23
24
  if (rows.length === 0)
24
25
  return [];
25
- const tenants = await selectMany(db, tenantTable, {
26
+ const tenants = await decryptTenantNames(await selectMany(db, tenantTable, {
26
27
  id: rows.map((row) => row["tenantId"]),
27
- });
28
+ }), "tenant:memberships");
28
29
  const tenantById = new Map(tenants.map((t) => [t.id, t]));
29
30
  return rows
30
31
  .map((row) => {
@@ -2,6 +2,7 @@ import { fetchOne, selectMany } from "@cosmicdrift/kumiko-framework/bun-db";
2
2
  import { access, definePagedQueryHandler, MAX_LIST_LIMIT, } from "@cosmicdrift/kumiko-framework/engine";
3
3
  import { InternalError } from "@cosmicdrift/kumiko-framework/errors";
4
4
  import * as z from "zod";
5
+ import { decryptTenantNames } from "../decrypt-tenant-names.js";
5
6
  import { tenantTable } from "../schema/tenant.js";
6
7
  import { isSystemAdmin } from "./is-system-admin.js";
7
8
  // Label source behind every `tenant:tenant` reference column (fw#3142). The
@@ -38,7 +39,7 @@ export const tenantDirectoryQuery = definePagedQueryHandler({
38
39
  tenants = await selectMany(db, tenantTable, undefined, {
39
40
  limit: scanLimit,
40
41
  orderBy: [
41
- { col: "name", direction: "asc" },
42
+ { col: "key", direction: "asc" },
42
43
  { col: "id", direction: "asc" },
43
44
  ],
44
45
  });
@@ -48,10 +49,15 @@ export const tenantDirectoryQuery = definePagedQueryHandler({
48
49
  const row = await fetchOne(db, tenantTable, { id: query.user.tenantId });
49
50
  tenants = row ? [row] : [];
50
51
  }
51
- const labeled = tenants.map((tenant) => {
52
+ // name is ciphertext at rest, so the SQL page is keyed by the plaintext
53
+ // `key`; label order and search happen in memory after decrypting.
54
+ const decrypted = await decryptTenantNames(tenants, "tenant:tenant-directory");
55
+ const labeled = decrypted
56
+ .map((tenant) => {
52
57
  const id = String(tenant.id);
53
58
  return { id, label: typeof tenant.name === "string" ? tenant.name : id };
54
- });
59
+ })
60
+ .sort((a, b) => a.label.localeCompare(b.label) || a.id.localeCompare(b.id));
55
61
  const needle = search?.toLowerCase();
56
62
  const rows = needle === undefined
57
63
  ? labeled
@@ -1,6 +1,7 @@
1
1
  export { cancelPendingInvitation } from "./cancel-pending-invitation.js";
2
2
  export { TenantCommandSchemas } from "./command-schemas.js";
3
3
  export { OWNER_INVITE_ROLE_OPTIONS, TENANT_FEATURE, TenantErrors, TenantHandlers, TenantQueries, } from "./constants.js";
4
+ export { decryptTenantNames } from "./decrypt-tenant-names.js";
4
5
  export { collectAssignableAppRoles, createTenantFeature } from "./feature.js";
5
6
  export type { InvitationStatus } from "./invitation-table.js";
6
7
  export { INVITATION_STATUS, INVITATION_STATUSES, tenantInvitationEntity, tenantInvitationsTable, } from "./invitation-table.js";
@@ -1,6 +1,7 @@
1
1
  export { cancelPendingInvitation } from "./cancel-pending-invitation.js";
2
2
  export { TenantCommandSchemas } from "./command-schemas.js";
3
3
  export { OWNER_INVITE_ROLE_OPTIONS, TENANT_FEATURE, TenantErrors, TenantHandlers, TenantQueries, } from "./constants.js";
4
+ export { decryptTenantNames } from "./decrypt-tenant-names.js";
4
5
  export { collectAssignableAppRoles, createTenantFeature } from "./feature.js";
5
6
  export { INVITATION_STATUS, INVITATION_STATUSES, tenantInvitationEntity, tenantInvitationsTable, } from "./invitation-table.js";
6
7
  export { isTenantServingPublicContent } from "./is-tenant-serving-public-content.js";
@@ -11,6 +11,7 @@ export declare const tenantInvitationEntity: import("@cosmicdrift/kumiko-types/f
11
11
  readonly type: "text";
12
12
  readonly description?: string;
13
13
  readonly maxLength?: number;
14
+ readonly minLength?: number;
14
15
  readonly required?: boolean;
15
16
  readonly searchable?: boolean;
16
17
  readonly sortable?: boolean;
@@ -32,6 +33,7 @@ export declare const tenantInvitationEntity: import("@cosmicdrift/kumiko-types/f
32
33
  readonly type: "text";
33
34
  readonly description?: string;
34
35
  readonly maxLength?: number;
36
+ readonly minLength?: number;
35
37
  readonly required?: boolean;
36
38
  readonly searchable?: boolean;
37
39
  readonly sortable?: boolean;
@@ -62,13 +64,14 @@ export declare const tenantInvitationEntity: import("@cosmicdrift/kumiko-types/f
62
64
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
63
65
  readonly display?: "radio" | "dropdown";
64
66
  readonly optionTones?: {
65
- readonly accepted?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
66
- readonly cancelled?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
67
- readonly expired?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
68
- readonly pending?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
67
+ readonly accepted?: "bad" | "neutral" | "ok" | "warn" | undefined;
68
+ readonly cancelled?: "bad" | "neutral" | "ok" | "warn" | undefined;
69
+ readonly expired?: "bad" | "neutral" | "ok" | "warn" | undefined;
70
+ readonly pending?: "bad" | "neutral" | "ok" | "warn" | undefined;
69
71
  } | undefined;
70
72
  readonly optionsQuery?: string;
71
73
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
74
+ readonly optionsAvailabilityQuery?: string;
72
75
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
73
76
  required: true;
74
77
  };
@@ -76,6 +79,7 @@ export declare const tenantInvitationEntity: import("@cosmicdrift/kumiko-types/f
76
79
  readonly type: "text";
77
80
  readonly description?: string;
78
81
  readonly maxLength?: number;
82
+ readonly minLength?: number;
79
83
  readonly required?: boolean;
80
84
  readonly searchable?: boolean;
81
85
  readonly sortable?: boolean;
@@ -114,6 +118,7 @@ export declare const tenantInvitationsTable: import("@cosmicdrift/kumiko-framewo
114
118
  readonly type: "text";
115
119
  readonly description?: string;
116
120
  readonly maxLength?: number;
121
+ readonly minLength?: number;
117
122
  readonly required?: boolean;
118
123
  readonly searchable?: boolean;
119
124
  readonly sortable?: boolean;
@@ -135,6 +140,7 @@ export declare const tenantInvitationsTable: import("@cosmicdrift/kumiko-framewo
135
140
  readonly type: "text";
136
141
  readonly description?: string;
137
142
  readonly maxLength?: number;
143
+ readonly minLength?: number;
138
144
  readonly required?: boolean;
139
145
  readonly searchable?: boolean;
140
146
  readonly sortable?: boolean;
@@ -165,13 +171,14 @@ export declare const tenantInvitationsTable: import("@cosmicdrift/kumiko-framewo
165
171
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
166
172
  readonly display?: "radio" | "dropdown";
167
173
  readonly optionTones?: {
168
- readonly accepted?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
169
- readonly cancelled?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
170
- readonly expired?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
171
- readonly pending?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
174
+ readonly accepted?: "bad" | "neutral" | "ok" | "warn" | undefined;
175
+ readonly cancelled?: "bad" | "neutral" | "ok" | "warn" | undefined;
176
+ readonly expired?: "bad" | "neutral" | "ok" | "warn" | undefined;
177
+ readonly pending?: "bad" | "neutral" | "ok" | "warn" | undefined;
172
178
  } | undefined;
173
179
  readonly optionsQuery?: string;
174
180
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
181
+ readonly optionsAvailabilityQuery?: string;
175
182
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
176
183
  required: true;
177
184
  };
@@ -179,6 +186,7 @@ export declare const tenantInvitationsTable: import("@cosmicdrift/kumiko-framewo
179
186
  readonly type: "text";
180
187
  readonly description?: string;
181
188
  readonly maxLength?: number;
189
+ readonly minLength?: number;
182
190
  readonly required?: boolean;
183
191
  readonly searchable?: boolean;
184
192
  readonly sortable?: boolean;
@@ -3,6 +3,7 @@ export declare const tenantMembershipEntity: import("@cosmicdrift/kumiko-types/f
3
3
  readonly type: "text";
4
4
  readonly description?: string;
5
5
  readonly maxLength?: number;
6
+ readonly minLength?: number;
6
7
  readonly required?: boolean;
7
8
  readonly searchable?: boolean;
8
9
  readonly sortable?: boolean;
@@ -24,6 +25,7 @@ export declare const tenantMembershipEntity: import("@cosmicdrift/kumiko-types/f
24
25
  readonly type: "text";
25
26
  readonly description?: string;
26
27
  readonly maxLength?: number;
28
+ readonly minLength?: number;
27
29
  readonly required?: boolean;
28
30
  readonly searchable?: boolean;
29
31
  readonly sortable?: boolean;
@@ -47,6 +49,7 @@ export declare const tenantMembershipsTable: import("@cosmicdrift/kumiko-framewo
47
49
  readonly type: "text";
48
50
  readonly description?: string;
49
51
  readonly maxLength?: number;
52
+ readonly minLength?: number;
50
53
  readonly required?: boolean;
51
54
  readonly searchable?: boolean;
52
55
  readonly sortable?: boolean;
@@ -68,6 +71,7 @@ export declare const tenantMembershipsTable: import("@cosmicdrift/kumiko-framewo
68
71
  readonly type: "text";
69
72
  readonly description?: string;
70
73
  readonly maxLength?: number;
74
+ readonly minLength?: number;
71
75
  readonly required?: boolean;
72
76
  readonly searchable?: boolean;
73
77
  readonly sortable?: boolean;