@cosmicdrift/kumiko-bundled-features 0.374.0 → 0.377.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 (205) hide show
  1. package/dist/account-security/constants.d.ts +1 -0
  2. package/dist/account-security/constants.js +1 -0
  3. package/dist/account-security/index.d.ts +1 -1
  4. package/dist/account-security/index.js +1 -1
  5. package/dist/admin-shell/web/client-plugin.d.ts +1 -1
  6. package/dist/audit/web/client-plugin.d.ts +1 -1
  7. package/dist/auth-email-password/mail-notifications.js +1 -1
  8. package/dist/auth-email-password/web/auth-client.js +1 -1
  9. package/dist/auth-email-password/web/auth-form-primitives.js +1 -1
  10. package/dist/auth-email-password/web/default-topbar-actions.js +1 -1
  11. package/dist/auth-email-password/web/index.js +1 -1
  12. package/dist/auth-email-password/web/session.js +1 -1
  13. package/dist/auth-email-password/web/tenant-menu-items.js +1 -1
  14. package/dist/auth-email-password/web/tenant-switcher.js +1 -1
  15. package/dist/auth-email-password/web/user-menu.js +1 -1
  16. package/dist/auth-foundation/env.d.ts +9 -0
  17. package/dist/auth-foundation/env.js +21 -0
  18. package/dist/auth-foundation/index.d.ts +1 -0
  19. package/dist/auth-foundation/index.js +1 -0
  20. package/dist/auth-mfa/schema/user-mfa.d.ts +6 -6
  21. package/dist/billing-foundation/consumer-protection/confirmation-mail.js +1 -1
  22. package/dist/billing-foundation/consumer-protection/termination-pages.js +1 -1
  23. package/dist/billing-foundation/contact-card.d.ts +2 -0
  24. package/dist/billing-foundation/contact-card.js +16 -0
  25. package/dist/billing-foundation/entities.d.ts +8 -8
  26. package/dist/billing-foundation/handlers/billing-plans.query.js +1 -1
  27. package/dist/billing-foundation/index.d.ts +1 -1
  28. package/dist/billing-foundation/plan-catalog.js +1 -0
  29. package/dist/billing-foundation/projection.d.ts +8 -8
  30. package/dist/billing-foundation/types.d.ts +11 -0
  31. package/dist/billing-foundation/validate-options.js +13 -0
  32. package/dist/billing-foundation/web/billing-contact-plan.d.ts +5 -0
  33. package/dist/billing-foundation/web/billing-contact-plan.js +17 -0
  34. package/dist/billing-foundation/web/billing-plans-panel.js +5 -13
  35. package/dist/billing-foundation/web/cancel-contract-dialog.js +2 -2
  36. package/dist/billing-foundation/web/checkout-consent-dialog.d.ts +1 -1
  37. package/dist/billing-foundation/web/checkout-consent-dialog.js +1 -0
  38. package/dist/billing-foundation/web/client-plugin.d.ts +1 -1
  39. package/dist/billing-foundation/web/localized-params.d.ts +1 -0
  40. package/dist/billing-foundation/web/localized-params.js +11 -0
  41. package/dist/cap-counter/entity.d.ts +1 -1
  42. package/dist/cap-overview/web/cap-cards-panel.js +3 -3
  43. package/dist/cap-overview/web/client-plugin.d.ts +1 -1
  44. package/dist/channel-email/email-channel.d.ts +2 -1
  45. package/dist/compliance-profiles/web/client-plugin.d.ts +1 -1
  46. package/dist/config/feature.js +2 -2
  47. package/dist/config/table.d.ts +6 -6
  48. package/dist/custom-fields/entity.d.ts +4 -4
  49. package/dist/custom-fields/web/client-plugin.d.ts +1 -1
  50. package/dist/data-retention/schema/tenant-retention-override.d.ts +4 -4
  51. package/dist/delivery/tables.d.ts +6 -6
  52. package/dist/delivery/unsubscribe-page.js +1 -1
  53. package/dist/delivery/web/client-plugin.d.ts +1 -1
  54. package/dist/delivery/web/delivery-status-cell.js +1 -1
  55. package/dist/document-ingest-foundation/entity.d.ts +4 -4
  56. package/dist/feature-toggles/web/client-plugin.d.ts +1 -1
  57. package/dist/file-provider-s3/env-named-feature.d.ts +17 -0
  58. package/dist/file-provider-s3/env-named-feature.js +23 -0
  59. package/dist/file-provider-s3/env-schema.d.ts +7 -0
  60. package/dist/file-provider-s3/env-schema.js +15 -10
  61. package/dist/file-provider-s3/index.d.ts +1 -0
  62. package/dist/file-provider-s3/index.js +1 -0
  63. package/dist/folders/entity.d.ts +8 -8
  64. package/dist/folders/web/client-plugin.d.ts +1 -1
  65. package/dist/form-draft/entity.d.ts +2 -2
  66. package/dist/host-routing/constants.d.ts +2 -0
  67. package/dist/host-routing/constants.js +3 -0
  68. package/dist/host-routing/dispatch.d.ts +1 -1
  69. package/dist/host-routing/dispatch.js +35 -25
  70. package/dist/host-routing/feature.js +100 -27
  71. package/dist/host-routing/host.d.ts +9 -0
  72. package/dist/host-routing/host.js +24 -2
  73. package/dist/host-routing/index.d.ts +2 -1
  74. package/dist/host-routing/index.js +1 -0
  75. package/dist/host-routing/options.d.ts +14 -0
  76. package/dist/host-routing/redirects.d.ts +6 -0
  77. package/dist/host-routing/redirects.js +27 -0
  78. package/dist/host-routing/tenant-lookup.d.ts +7 -0
  79. package/dist/host-routing/tenant-lookup.js +39 -0
  80. package/dist/host-routing/validate-options.js +34 -1
  81. package/dist/inbound-mail-foundation/entities.d.ts +25 -25
  82. package/dist/inbound-mail-foundation/feature.js +7 -0
  83. package/dist/inbound-mail-foundation/i18n.d.ts +3 -0
  84. package/dist/inbound-mail-foundation/i18n.js +35 -0
  85. package/dist/inbound-mail-foundation/index.d.ts +1 -0
  86. package/dist/inbound-mail-foundation/index.js +1 -0
  87. package/dist/inbound-mail-foundation/projection.d.ts +20 -20
  88. package/dist/inbound-mail-foundation/screens.d.ts +7 -0
  89. package/dist/inbound-mail-foundation/screens.js +86 -0
  90. package/dist/inbound-mail-foundation/types.d.ts +2 -2
  91. package/dist/jobs/job-run-table.d.ts +6 -6
  92. package/dist/jobs/web/client-plugin.d.ts +1 -1
  93. package/dist/ledger/entity.d.ts +13 -13
  94. package/dist/legal-pages/feature.js +11 -1
  95. package/dist/legal-pages/layout.d.ts +2 -2
  96. package/dist/legal-pages/layout.js +4 -4
  97. package/dist/legal-pages/web/client-plugin.d.ts +1 -1
  98. package/dist/mail-foundation/feature.d.ts +20 -21
  99. package/dist/mail-foundation/feature.js +1 -1
  100. package/dist/managed-pages/table.d.ts +12 -12
  101. package/dist/managed-pages/web/client-plugin.d.ts +1 -1
  102. package/dist/notes-history/entity.d.ts +12 -12
  103. package/dist/notes-history/web/client-plugin.d.ts +1 -1
  104. package/dist/page-render/branding.js +1 -1
  105. package/dist/page-render/layout.d.ts +1 -1
  106. package/dist/page-render/layout.js +2 -2
  107. package/dist/page-render/markdown.js +1 -1
  108. package/dist/personal-access-tokens/i18n.js +1 -1
  109. package/dist/personal-access-tokens/schema/api-token.d.ts +6 -6
  110. package/dist/personal-access-tokens/screens.js +1 -1
  111. package/dist/secrets/feature.d.ts +1 -1
  112. package/dist/secrets/feature.js +3 -3
  113. package/dist/secrets/table.d.ts +1 -1
  114. package/dist/seo/sitemap.js +1 -1
  115. package/dist/sessions/schema/user-session.d.ts +4 -4
  116. package/dist/shared/mail-template-body.js +1 -1
  117. package/dist/shared/purge-files-reaching-subject.js +98 -3
  118. package/dist/tags/entity.d.ts +9 -9
  119. package/dist/tags/web/client-plugin.d.ts +1 -1
  120. package/dist/template-resolver/document-blocks.d.ts +5 -0
  121. package/dist/template-resolver/document-blocks.js +21 -0
  122. package/dist/template-resolver/document-ops.d.ts +167 -0
  123. package/dist/template-resolver/document-ops.js +390 -0
  124. package/dist/template-resolver/document-sanitizer.d.ts +3 -0
  125. package/dist/template-resolver/document-sanitizer.js +6 -0
  126. package/dist/template-resolver/feature.d.ts +2 -0
  127. package/dist/template-resolver/feature.js +4 -0
  128. package/dist/template-resolver/handlers/bundle-import.js +1 -0
  129. package/dist/template-resolver/handlers/document-base.d.ts +23 -0
  130. package/dist/template-resolver/handlers/document-base.js +55 -0
  131. package/dist/template-resolver/handlers/document-blocks.query.d.ts +22 -0
  132. package/dist/template-resolver/handlers/document-blocks.query.js +46 -0
  133. package/dist/template-resolver/handlers/export-bundle.query.d.ts +1 -0
  134. package/dist/template-resolver/handlers/export-bundle.query.js +9 -2
  135. package/dist/template-resolver/handlers/import-bundle-system.write.d.ts +1 -0
  136. package/dist/template-resolver/handlers/import-bundle.write.d.ts +1 -0
  137. package/dist/template-resolver/handlers/patch-draft.write.d.ts +66 -0
  138. package/dist/template-resolver/handlers/patch-draft.write.js +105 -0
  139. package/dist/template-resolver/handlers/preview.query.d.ts +1 -0
  140. package/dist/template-resolver/handlers/preview.query.js +2 -1
  141. package/dist/template-resolver/handlers/send-test.write.d.ts +1 -0
  142. package/dist/template-resolver/handlers/send-test.write.js +2 -1
  143. package/dist/template-resolver/handlers/template-write.d.ts +2 -0
  144. package/dist/template-resolver/handlers/template-write.js +14 -2
  145. package/dist/template-resolver/handlers/validate.query.d.ts +10 -4
  146. package/dist/template-resolver/handlers/validate.query.js +12 -7
  147. package/dist/template-resolver/{web/placeholder-text.js → placeholder-text.js} +1 -1
  148. package/dist/template-resolver/qualified-names.d.ts +2 -0
  149. package/dist/template-resolver/qualified-names.js +2 -0
  150. package/dist/template-resolver/seeding.d.ts +1 -0
  151. package/dist/template-resolver/seeding.js +2 -1
  152. package/dist/template-resolver/table.d.ts +10 -10
  153. package/dist/template-resolver/template-bundle.d.ts +1 -0
  154. package/dist/template-resolver/template-bundle.js +6 -1
  155. package/dist/template-resolver/template-preview.d.ts +4 -1
  156. package/dist/template-resolver/template-preview.js +16 -3
  157. package/dist/template-resolver/template-validation.d.ts +2 -1
  158. package/dist/template-resolver/template-validation.js +1 -1
  159. package/dist/template-resolver/user-content-table.d.ts +10 -10
  160. package/dist/template-resolver/web/client-plugin.d.ts +1 -1
  161. package/dist/template-resolver/web/client-plugin.js +3 -3
  162. package/dist/template-resolver/web/document-tiptap-editor.js +1 -1
  163. package/dist/template-resolver/web/document-toolbar-blocks.d.ts +2 -5
  164. package/dist/template-resolver/web/document-toolbar-blocks.js +1 -21
  165. package/dist/template-resolver/web/i18n.js +14 -0
  166. package/dist/template-resolver/web/placeholder-line-editor.js +2 -2
  167. package/dist/tenant/invitation-table.d.ts +6 -6
  168. package/dist/tenant/membership-table.d.ts +4 -4
  169. package/dist/tenant/schema/tenant.d.ts +6 -6
  170. package/dist/tenant/web/client-plugin.d.ts +1 -1
  171. package/dist/tenant/web/member-status-cell.js +1 -1
  172. package/dist/tier-engine/entity.d.ts +1 -1
  173. package/dist/tier-engine/tier-resolver.d.ts +1 -1
  174. package/dist/tier-engine/web/client-plugin.d.ts +1 -1
  175. package/dist/user/schema/user.d.ts +12 -12
  176. package/dist/user-data-rights/env.d.ts +5 -0
  177. package/dist/user-data-rights/env.js +11 -0
  178. package/dist/user-data-rights/feature.js +4 -2
  179. package/dist/user-data-rights/index.d.ts +1 -0
  180. package/dist/user-data-rights/index.js +1 -0
  181. package/dist/user-data-rights/lib/mail-transport-resolver.js +1 -1
  182. package/dist/user-data-rights/lib/storage-provider-resolver.js +1 -1
  183. package/dist/user-data-rights/mail-notifications.js +1 -1
  184. package/dist/user-data-rights/schema/download-attempt.d.ts +14 -14
  185. package/dist/user-data-rights/schema/download-token.d.ts +8 -8
  186. package/dist/user-data-rights/schema/export-job.d.ts +6 -6
  187. package/dist/user-data-rights/web/client-plugin.d.ts +1 -1
  188. package/dist/user-data-rights/web/privacy-center-screen.js +2 -2
  189. package/dist/waitlist/entity.d.ts +14 -14
  190. package/dist/waitlist/legacy-migrate.d.ts +2 -0
  191. package/dist/waitlist/legacy-migrate.js +38 -3
  192. package/package.json +16 -11
  193. package/src/account-security/changes.json +6 -0
  194. package/src/auth-foundation/changes.json +6 -0
  195. package/src/billing-foundation/changes.json +6 -0
  196. package/src/channel-email/changes.json +6 -0
  197. package/src/crypto-shredding/changes.json +6 -0
  198. package/src/file-provider-s3/changes.json +6 -0
  199. package/src/host-routing/changes.json +6 -0
  200. package/src/inbound-mail-foundation/changes.json +7 -0
  201. package/src/legal-pages/changes.json +6 -0
  202. package/src/template-resolver/changes.json +18 -0
  203. package/src/user-data-rights/changes.json +6 -0
  204. package/src/waitlist/changes.json +6 -0
  205. /package/dist/template-resolver/{web/placeholder-text.d.ts → placeholder-text.d.ts} +0 -0
@@ -13,7 +13,7 @@ export declare const downloadAttemptEntity: import("@cosmicdrift/kumiko-types/fi
13
13
  readonly sensitive?: boolean;
14
14
  readonly writeOnly?: boolean;
15
15
  readonly readAsInstruction?: boolean;
16
- readonly format?: "email" | "url" | "phone" | "password";
16
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
17
17
  readonly default?: string;
18
18
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
19
19
  readonly multiline?: boolean | {
@@ -36,7 +36,7 @@ export declare const downloadAttemptEntity: import("@cosmicdrift/kumiko-types/fi
36
36
  readonly sensitive?: boolean;
37
37
  readonly writeOnly?: boolean;
38
38
  readonly readAsInstruction?: boolean;
39
- readonly format?: "email" | "url" | "phone" | "password";
39
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
40
40
  readonly default?: string;
41
41
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
42
42
  readonly multiline?: boolean | {
@@ -59,7 +59,7 @@ export declare const downloadAttemptEntity: import("@cosmicdrift/kumiko-types/fi
59
59
  readonly sensitive?: boolean;
60
60
  readonly writeOnly?: boolean;
61
61
  readonly readAsInstruction?: boolean;
62
- readonly format?: "email" | "url" | "phone" | "password";
62
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
63
63
  readonly default?: string;
64
64
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
65
65
  readonly multiline?: boolean | {
@@ -82,7 +82,7 @@ export declare const downloadAttemptEntity: import("@cosmicdrift/kumiko-types/fi
82
82
  readonly sensitive?: boolean;
83
83
  readonly writeOnly?: boolean;
84
84
  readonly readAsInstruction?: boolean;
85
- readonly format?: "email" | "url" | "phone" | "password";
85
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
86
86
  readonly default?: string;
87
87
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
88
88
  readonly multiline?: boolean | {
@@ -105,7 +105,7 @@ export declare const downloadAttemptEntity: import("@cosmicdrift/kumiko-types/fi
105
105
  readonly sensitive?: boolean;
106
106
  readonly writeOnly?: boolean;
107
107
  readonly readAsInstruction?: boolean;
108
- readonly format?: "email" | "url" | "phone" | "password";
108
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
109
109
  readonly default?: string;
110
110
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
111
111
  readonly multiline?: boolean | {
@@ -128,7 +128,7 @@ export declare const downloadAttemptEntity: import("@cosmicdrift/kumiko-types/fi
128
128
  readonly sensitive?: boolean;
129
129
  readonly writeOnly?: boolean;
130
130
  readonly readAsInstruction?: boolean;
131
- readonly format?: "email" | "url" | "phone" | "password";
131
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
132
132
  readonly default?: string;
133
133
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
134
134
  readonly multiline?: boolean | {
@@ -151,7 +151,7 @@ export declare const downloadAttemptEntity: import("@cosmicdrift/kumiko-types/fi
151
151
  readonly sensitive?: boolean;
152
152
  readonly writeOnly?: boolean;
153
153
  readonly readAsInstruction?: boolean;
154
- readonly format?: "email" | "url" | "phone" | "password";
154
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
155
155
  readonly default?: string;
156
156
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
157
157
  readonly multiline?: boolean | {
@@ -191,7 +191,7 @@ export declare const downloadAttemptsTable: import("@cosmicdrift/kumiko-framewor
191
191
  readonly sensitive?: boolean;
192
192
  readonly writeOnly?: boolean;
193
193
  readonly readAsInstruction?: boolean;
194
- readonly format?: "email" | "url" | "phone" | "password";
194
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
195
195
  readonly default?: string;
196
196
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
197
197
  readonly multiline?: boolean | {
@@ -214,7 +214,7 @@ export declare const downloadAttemptsTable: import("@cosmicdrift/kumiko-framewor
214
214
  readonly sensitive?: boolean;
215
215
  readonly writeOnly?: boolean;
216
216
  readonly readAsInstruction?: boolean;
217
- readonly format?: "email" | "url" | "phone" | "password";
217
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
218
218
  readonly default?: string;
219
219
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
220
220
  readonly multiline?: boolean | {
@@ -237,7 +237,7 @@ export declare const downloadAttemptsTable: import("@cosmicdrift/kumiko-framewor
237
237
  readonly sensitive?: boolean;
238
238
  readonly writeOnly?: boolean;
239
239
  readonly readAsInstruction?: boolean;
240
- readonly format?: "email" | "url" | "phone" | "password";
240
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
241
241
  readonly default?: string;
242
242
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
243
243
  readonly multiline?: boolean | {
@@ -260,7 +260,7 @@ export declare const downloadAttemptsTable: import("@cosmicdrift/kumiko-framewor
260
260
  readonly sensitive?: boolean;
261
261
  readonly writeOnly?: boolean;
262
262
  readonly readAsInstruction?: boolean;
263
- readonly format?: "email" | "url" | "phone" | "password";
263
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
264
264
  readonly default?: string;
265
265
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
266
266
  readonly multiline?: boolean | {
@@ -283,7 +283,7 @@ export declare const downloadAttemptsTable: import("@cosmicdrift/kumiko-framewor
283
283
  readonly sensitive?: boolean;
284
284
  readonly writeOnly?: boolean;
285
285
  readonly readAsInstruction?: boolean;
286
- readonly format?: "email" | "url" | "phone" | "password";
286
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
287
287
  readonly default?: string;
288
288
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
289
289
  readonly multiline?: boolean | {
@@ -306,7 +306,7 @@ export declare const downloadAttemptsTable: import("@cosmicdrift/kumiko-framewor
306
306
  readonly sensitive?: boolean;
307
307
  readonly writeOnly?: boolean;
308
308
  readonly readAsInstruction?: boolean;
309
- readonly format?: "email" | "url" | "phone" | "password";
309
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
310
310
  readonly default?: string;
311
311
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
312
312
  readonly multiline?: boolean | {
@@ -329,7 +329,7 @@ export declare const downloadAttemptsTable: import("@cosmicdrift/kumiko-framewor
329
329
  readonly sensitive?: boolean;
330
330
  readonly writeOnly?: boolean;
331
331
  readonly readAsInstruction?: boolean;
332
- readonly format?: "email" | "url" | "phone" | "password";
332
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
333
333
  readonly default?: string;
334
334
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
335
335
  readonly multiline?: boolean | {
@@ -13,7 +13,7 @@ export declare const exportDownloadTokenEntity: import("@cosmicdrift/kumiko-type
13
13
  readonly sensitive?: boolean;
14
14
  readonly writeOnly?: boolean;
15
15
  readonly readAsInstruction?: boolean;
16
- readonly format?: "email" | "url" | "phone" | "password";
16
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
17
17
  readonly default?: string;
18
18
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
19
19
  readonly multiline?: boolean | {
@@ -36,7 +36,7 @@ export declare const exportDownloadTokenEntity: import("@cosmicdrift/kumiko-type
36
36
  readonly sensitive?: boolean;
37
37
  readonly writeOnly?: boolean;
38
38
  readonly readAsInstruction?: boolean;
39
- readonly format?: "email" | "url" | "phone" | "password";
39
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
40
40
  readonly default?: string;
41
41
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
42
42
  readonly multiline?: boolean | {
@@ -116,7 +116,7 @@ export declare const exportDownloadTokenEntity: import("@cosmicdrift/kumiko-type
116
116
  readonly sensitive?: boolean;
117
117
  readonly writeOnly?: boolean;
118
118
  readonly readAsInstruction?: boolean;
119
- readonly format?: "email" | "url" | "phone" | "password";
119
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
120
120
  readonly default?: string;
121
121
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
122
122
  readonly multiline?: boolean | {
@@ -139,7 +139,7 @@ export declare const exportDownloadTokenEntity: import("@cosmicdrift/kumiko-type
139
139
  readonly sensitive?: boolean;
140
140
  readonly writeOnly?: boolean;
141
141
  readonly readAsInstruction?: boolean;
142
- readonly format?: "email" | "url" | "phone" | "password";
142
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
143
143
  readonly default?: string;
144
144
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
145
145
  readonly multiline?: boolean | {
@@ -164,7 +164,7 @@ export declare const exportDownloadTokensTable: import("@cosmicdrift/kumiko-fram
164
164
  readonly sensitive?: boolean;
165
165
  readonly writeOnly?: boolean;
166
166
  readonly readAsInstruction?: boolean;
167
- readonly format?: "email" | "url" | "phone" | "password";
167
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
168
168
  readonly default?: string;
169
169
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
170
170
  readonly multiline?: boolean | {
@@ -187,7 +187,7 @@ export declare const exportDownloadTokensTable: import("@cosmicdrift/kumiko-fram
187
187
  readonly sensitive?: boolean;
188
188
  readonly writeOnly?: boolean;
189
189
  readonly readAsInstruction?: boolean;
190
- readonly format?: "email" | "url" | "phone" | "password";
190
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
191
191
  readonly default?: string;
192
192
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
193
193
  readonly multiline?: boolean | {
@@ -267,7 +267,7 @@ export declare const exportDownloadTokensTable: import("@cosmicdrift/kumiko-fram
267
267
  readonly sensitive?: boolean;
268
268
  readonly writeOnly?: boolean;
269
269
  readonly readAsInstruction?: boolean;
270
- readonly format?: "email" | "url" | "phone" | "password";
270
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
271
271
  readonly default?: string;
272
272
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
273
273
  readonly multiline?: boolean | {
@@ -290,7 +290,7 @@ export declare const exportDownloadTokensTable: import("@cosmicdrift/kumiko-fram
290
290
  readonly sensitive?: boolean;
291
291
  readonly writeOnly?: boolean;
292
292
  readonly readAsInstruction?: boolean;
293
- readonly format?: "email" | "url" | "phone" | "password";
293
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
294
294
  readonly default?: string;
295
295
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
296
296
  readonly multiline?: boolean | {
@@ -27,7 +27,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
27
27
  readonly sensitive?: boolean;
28
28
  readonly writeOnly?: boolean;
29
29
  readonly readAsInstruction?: boolean;
30
- readonly format?: "email" | "url" | "phone" | "password";
30
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
31
31
  readonly default?: string;
32
32
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
33
33
  readonly multiline?: boolean | {
@@ -50,7 +50,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
50
50
  readonly sensitive?: boolean;
51
51
  readonly writeOnly?: boolean;
52
52
  readonly readAsInstruction?: boolean;
53
- readonly format?: "email" | "url" | "phone" | "password";
53
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
54
54
  readonly default?: string;
55
55
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
56
56
  readonly multiline?: boolean | {
@@ -142,7 +142,7 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
142
142
  readonly sensitive?: boolean;
143
143
  readonly writeOnly?: boolean;
144
144
  readonly readAsInstruction?: boolean;
145
- readonly format?: "email" | "url" | "phone" | "password";
145
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
146
146
  readonly default?: string;
147
147
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
148
148
  readonly multiline?: boolean | {
@@ -210,7 +210,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
210
210
  readonly sensitive?: boolean;
211
211
  readonly writeOnly?: boolean;
212
212
  readonly readAsInstruction?: boolean;
213
- readonly format?: "email" | "url" | "phone" | "password";
213
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
214
214
  readonly default?: string;
215
215
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
216
216
  readonly multiline?: boolean | {
@@ -233,7 +233,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
233
233
  readonly sensitive?: boolean;
234
234
  readonly writeOnly?: boolean;
235
235
  readonly readAsInstruction?: boolean;
236
- readonly format?: "email" | "url" | "phone" | "password";
236
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
237
237
  readonly default?: string;
238
238
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
239
239
  readonly multiline?: boolean | {
@@ -325,7 +325,7 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
325
325
  readonly sensitive?: boolean;
326
326
  readonly writeOnly?: boolean;
327
327
  readonly readAsInstruction?: boolean;
328
- readonly format?: "email" | "url" | "phone" | "password";
328
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
329
329
  readonly default?: string;
330
330
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
331
331
  readonly multiline?: boolean | {
@@ -1,5 +1,5 @@
1
1
  import { type TranslationsByLocale } from "@cosmicdrift/kumiko-renderer";
2
- import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer-web";
2
+ import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer/web";
3
3
  import { type PublicDeletionRoutes } from "./public-deletion-gate.tsx";
4
4
  export type UserDataRightsClientOptions = {
5
5
  /** Key-weise Overrides über die Default-Bundles (de/en). */
@@ -1,5 +1,5 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { EMPTY_VALUE_PLACEHOLDER } from "@cosmicdrift/kumiko-headless";
2
+ import { EMPTY_VALUE_PLACEHOLDER } from "@cosmicdrift/kumiko-renderer/headless";
3
3
  // @runtime client
4
4
  // Export section (Art. 20) — the one part of user-data-rights' privacy-center
5
5
  // screen that stays custom (fw#2312). Registered as an EditExtensionSection
@@ -12,7 +12,7 @@ import { EMPTY_VALUE_PLACEHOLDER } from "@cosmicdrift/kumiko-headless";
12
12
  // Restriction (Art. 18) and Deletion (Art. 17) moved onto the screen's
13
13
  // declarative fields/actions instead (feature.ts).
14
14
  import { useDispatcher, usePrimitives, useQuery, useTranslation, } from "@cosmicdrift/kumiko-renderer";
15
- import { postWithDownload } from "@cosmicdrift/kumiko-renderer-web";
15
+ import { postWithDownload } from "@cosmicdrift/kumiko-renderer/web";
16
16
  import { propertyOf } from "@cosmicdrift/kumiko-types/type-guards";
17
17
  import { useEffect, useState } from "react";
18
18
  import { EXPORT_JOB_STATUS, UserDataRightsHandlers, UserDataRightsQueries, } from "../constants.js";
@@ -14,7 +14,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
14
14
  readonly sensitive?: boolean;
15
15
  readonly writeOnly?: boolean;
16
16
  readonly readAsInstruction?: boolean;
17
- readonly format?: "email" | "url" | "phone" | "password";
17
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
18
18
  readonly default?: string;
19
19
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
20
20
  readonly multiline?: boolean | {
@@ -37,7 +37,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
37
37
  readonly sensitive?: boolean;
38
38
  readonly writeOnly?: boolean;
39
39
  readonly readAsInstruction?: boolean;
40
- readonly format?: "email" | "url" | "phone" | "password";
40
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
41
41
  readonly default?: string;
42
42
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
43
43
  readonly multiline?: boolean | {
@@ -60,7 +60,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
60
60
  readonly sensitive?: boolean;
61
61
  readonly writeOnly?: boolean;
62
62
  readonly readAsInstruction?: boolean;
63
- readonly format?: "email" | "url" | "phone" | "password";
63
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
64
64
  readonly default?: string;
65
65
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
66
66
  readonly multiline?: boolean | {
@@ -83,7 +83,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
83
83
  readonly sensitive?: boolean;
84
84
  readonly writeOnly?: boolean;
85
85
  readonly readAsInstruction?: boolean;
86
- readonly format?: "email" | "url" | "phone" | "password";
86
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
87
87
  readonly default?: string;
88
88
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
89
89
  readonly multiline?: boolean | {
@@ -122,7 +122,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
122
122
  readonly sensitive?: boolean;
123
123
  readonly writeOnly?: boolean;
124
124
  readonly readAsInstruction?: boolean;
125
- readonly format?: "email" | "url" | "phone" | "password";
125
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
126
126
  readonly default?: string;
127
127
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
128
128
  readonly multiline?: boolean | {
@@ -199,7 +199,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
199
199
  readonly sensitive?: boolean;
200
200
  readonly writeOnly?: boolean;
201
201
  readonly readAsInstruction?: boolean;
202
- readonly format?: "email" | "url" | "phone" | "password";
202
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
203
203
  readonly default?: string;
204
204
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
205
205
  readonly multiline?: boolean | {
@@ -237,7 +237,7 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
237
237
  readonly sensitive?: boolean;
238
238
  readonly writeOnly?: boolean;
239
239
  readonly readAsInstruction?: boolean;
240
- readonly format?: "email" | "url" | "phone" | "password";
240
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
241
241
  readonly default?: string;
242
242
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
243
243
  readonly multiline?: boolean | {
@@ -262,7 +262,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
262
262
  readonly sensitive?: boolean;
263
263
  readonly writeOnly?: boolean;
264
264
  readonly readAsInstruction?: boolean;
265
- readonly format?: "email" | "url" | "phone" | "password";
265
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
266
266
  readonly default?: string;
267
267
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
268
268
  readonly multiline?: boolean | {
@@ -285,7 +285,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
285
285
  readonly sensitive?: boolean;
286
286
  readonly writeOnly?: boolean;
287
287
  readonly readAsInstruction?: boolean;
288
- readonly format?: "email" | "url" | "phone" | "password";
288
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
289
289
  readonly default?: string;
290
290
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
291
291
  readonly multiline?: boolean | {
@@ -308,7 +308,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
308
308
  readonly sensitive?: boolean;
309
309
  readonly writeOnly?: boolean;
310
310
  readonly readAsInstruction?: boolean;
311
- readonly format?: "email" | "url" | "phone" | "password";
311
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
312
312
  readonly default?: string;
313
313
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
314
314
  readonly multiline?: boolean | {
@@ -331,7 +331,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
331
331
  readonly sensitive?: boolean;
332
332
  readonly writeOnly?: boolean;
333
333
  readonly readAsInstruction?: boolean;
334
- readonly format?: "email" | "url" | "phone" | "password";
334
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
335
335
  readonly default?: string;
336
336
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
337
337
  readonly multiline?: boolean | {
@@ -370,7 +370,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
370
370
  readonly sensitive?: boolean;
371
371
  readonly writeOnly?: boolean;
372
372
  readonly readAsInstruction?: boolean;
373
- readonly format?: "email" | "url" | "phone" | "password";
373
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
374
374
  readonly default?: string;
375
375
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
376
376
  readonly multiline?: boolean | {
@@ -447,7 +447,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
447
447
  readonly sensitive?: boolean;
448
448
  readonly writeOnly?: boolean;
449
449
  readonly readAsInstruction?: boolean;
450
- readonly format?: "email" | "url" | "phone" | "password";
450
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
451
451
  readonly default?: string;
452
452
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
453
453
  readonly multiline?: boolean | {
@@ -485,7 +485,7 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
485
485
  readonly sensitive?: boolean;
486
486
  readonly writeOnly?: boolean;
487
487
  readonly readAsInstruction?: boolean;
488
- readonly format?: "email" | "url" | "phone" | "password";
488
+ readonly format?: "email" | "url" | "phone" | "password" | "month";
489
489
  readonly default?: string;
490
490
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
491
491
  readonly multiline?: boolean | {
@@ -17,6 +17,8 @@ export type LegacyWaitlistMigrateReport = {
17
17
  readonly created: number;
18
18
  readonly skipped: number;
19
19
  readonly unreadable: number;
20
+ /** Event streams of the legacy rows (same aggregate type) taken out of projection replay. */
21
+ readonly archivedStreams: number;
20
22
  };
21
23
  type LegacyRow = Readonly<Record<string, unknown>>;
22
24
  export declare function mapOfflotRow(row: LegacyRow): Promise<WaitlistImportEntry | undefined>;
@@ -1,9 +1,10 @@
1
1
  import { configuredPiiSubjectKms, decryptPiiFieldValues, isPiiCiphertext, PII_ERASED_SENTINEL, } from "@cosmicdrift/kumiko-framework/crypto";
2
- import { createTenantDb, selectMany, table, text as textColumn, timestamp, transaction, uuid, } from "@cosmicdrift/kumiko-framework/db";
2
+ import { countWhere, createTenantDb, selectMany, table, text as textColumn, timestamp, transaction, uuid, } from "@cosmicdrift/kumiko-framework/db";
3
3
  import { SYSTEM_TENANT_ID } from "@cosmicdrift/kumiko-framework/engine";
4
+ import { archiveStream, createArchivedStreamsTable, eventsTable, isStreamArchived, } from "@cosmicdrift/kumiko-framework/event-store";
4
5
  import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
5
6
  import { WAITLIST_STATUS } from "./constants.js";
6
- import { importWaitlistEntry } from "./import.js";
7
+ import { importWaitlistEntry, waitlistImportId } from "./import.js";
7
8
  export const LEGACY_WAITLIST_SOURCES = ["offlot", "publicstatus"];
8
9
  export function isLegacyWaitlistSource(value) {
9
10
  return LEGACY_WAITLIST_SOURCES.some((known) => known === value);
@@ -13,6 +14,8 @@ export const DEFAULT_LEGACY_SOURCE_TABLE = {
13
14
  publicstatus: "marketing_waitlist",
14
15
  };
15
16
  export const DEFAULT_IMPORT_LOCALE = "en";
17
+ const LEGACY_AGGREGATE_TYPE = "waitlistEntry";
18
+ const LEGACY_STREAM_ARCHIVE_REASON = "migrated to a new waitlist entry id by waitlist-migrate";
16
19
  function toInstant(value) {
17
20
  if (value === null || value === undefined)
18
21
  return undefined;
@@ -144,6 +147,32 @@ async function readLegacyRows(db, from, sourceTable) {
144
147
  orderBy: { col: "submittedAt", direction: "asc" },
145
148
  });
146
149
  }
150
+ // A legacy offlot row is the projection of an event stream of the same aggregate type under the
151
+ // old row id, written in the system tenant like every waitlist entry. The imported entry gets a
152
+ // new id, so a rebuild would replay the old stream next to it and bring every migrated entry back
153
+ // twice; archived streams are excluded from replay. The offlot default source table is the entity
154
+ // table itself, so its row ids are live entries by design and no id check can tell a wrong table.
155
+ async function archiveLegacyStream(db, legacyId, importedId) {
156
+ if (legacyId === importedId)
157
+ return 0;
158
+ if (await isStreamArchived(db, SYSTEM_TENANT_ID, legacyId))
159
+ return 0;
160
+ const legacyEvents = await countWhere(db, eventsTable, {
161
+ tenantId: SYSTEM_TENANT_ID,
162
+ aggregateId: legacyId,
163
+ aggregateType: LEGACY_AGGREGATE_TYPE,
164
+ });
165
+ if (legacyEvents === 0)
166
+ return 0;
167
+ await archiveStream(db, {
168
+ tenantId: SYSTEM_TENANT_ID,
169
+ aggregateId: legacyId,
170
+ aggregateType: LEGACY_AGGREGATE_TYPE,
171
+ archivedBy: "waitlist-migrate",
172
+ reason: LEGACY_STREAM_ARCHIVE_REASON,
173
+ });
174
+ return 1;
175
+ }
147
176
  // Idempotent: the new entry id derives from the source row id, so a re-run finds
148
177
  // what an earlier run wrote and skips it. Writes go through the waitlist entity
149
178
  // executor (events, projection, subject encryption), never into tables directly.
@@ -152,6 +181,9 @@ export async function migrateLegacyWaitlist(db, options) {
152
181
  let created = 0;
153
182
  let skipped = 0;
154
183
  let unreadable = 0;
184
+ let archivedStreams = 0;
185
+ if (!options.dryRun && options.from === "offlot")
186
+ await createArchivedStreamsTable(db);
155
187
  for (const row of rows) {
156
188
  const entry = options.from === "offlot"
157
189
  ? await mapOfflotRow(row)
@@ -168,6 +200,9 @@ export async function migrateLegacyWaitlist(db, options) {
168
200
  else
169
201
  skipped += 1;
170
202
  });
203
+ if (!options.dryRun && options.from === "offlot") {
204
+ archivedStreams += await archiveLegacyStream(db, String(row["id"]), waitlistImportId(entry.sourceKey));
205
+ }
171
206
  }
172
- return { read: rows.length, created, skipped, unreadable };
207
+ return { read: rows.length, created, skipped, unreadable, archivedStreams };
173
208
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-bundled-features",
3
- "version": "0.374.0",
3
+ "version": "0.377.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>",
@@ -482,6 +482,10 @@
482
482
  "types": "./dist/account-security/index.d.ts",
483
483
  "default": "./dist/account-security/index.js"
484
484
  },
485
+ "./account-security/constants": {
486
+ "types": "./dist/account-security/constants.d.ts",
487
+ "default": "./dist/account-security/constants.js"
488
+ },
485
489
  "./host-routing": {
486
490
  "types": "./dist/host-routing/index.d.ts",
487
491
  "default": "./dist/host-routing/index.js"
@@ -536,12 +540,9 @@
536
540
  }
537
541
  },
538
542
  "dependencies": {
539
- "@cosmicdrift/kumiko-dispatcher-live": "0.374.0",
540
- "@cosmicdrift/kumiko-framework": "0.374.0",
541
- "@cosmicdrift/kumiko-headless": "0.374.0",
542
- "@cosmicdrift/kumiko-renderer": "0.374.0",
543
- "@cosmicdrift/kumiko-renderer-web": "0.374.0",
544
- "@cosmicdrift/kumiko-types": "0.374.0",
543
+ "@cosmicdrift/kumiko-framework": "0.377.0",
544
+ "@cosmicdrift/kumiko-renderer": "0.377.0",
545
+ "@cosmicdrift/kumiko-types": "0.377.0",
545
546
  "@mollie/api-client": "^4.5.0",
546
547
  "@node-rs/argon2": "^2.0.2",
547
548
  "@tiptap/core": "3.31.3",
@@ -1040,6 +1041,10 @@
1040
1041
  "types": "./dist/account-security/index.d.ts",
1041
1042
  "default": "./dist/account-security/index.js"
1042
1043
  },
1044
+ "./account-security/constants": {
1045
+ "types": "./dist/account-security/constants.d.ts",
1046
+ "default": "./dist/account-security/constants.js"
1047
+ },
1043
1048
  "./host-routing": {
1044
1049
  "types": "./dist/host-routing/index.d.ts",
1045
1050
  "default": "./dist/host-routing/index.js"
@@ -1102,12 +1107,12 @@
1102
1107
  ],
1103
1108
  "devDependencies": {
1104
1109
  "@testing-library/user-event": "^14.6.1",
1105
- "@cosmicdrift/kumiko-locale-de": "0.374.0",
1106
- "@cosmicdrift/kumiko-locale-es": "0.374.0",
1107
- "@cosmicdrift/kumiko-renderer-mail-html": "0.374.0",
1110
+ "@cosmicdrift/kumiko-locale-de": "0.377.0",
1111
+ "@cosmicdrift/kumiko-locale-es": "0.377.0",
1112
+ "@cosmicdrift/kumiko-renderer-mail-html": "0.377.0",
1108
1113
  "jsqr": "^1.4.0",
1109
1114
  "unpdf": "^1.8.1",
1110
- "@cosmicdrift/kumiko-testing": "0.374.0"
1115
+ "@cosmicdrift/kumiko-testing": "0.377.0"
1111
1116
  },
1112
1117
  "peerDependencies": {
1113
1118
  "@cosmicdrift/kumiko-testing": ">=0.366.0 <1.0.0"
@@ -1,4 +1,10 @@
1
1
  [
2
+ {
3
+ "version": "0.376.0",
4
+ "type": "improvement",
5
+ "title": "Client-safe account-security/constants subpath",
6
+ "detail": "\"@cosmicdrift/kumiko-bundled-features/account-security/constants\" exports ACCOUNT_SECURITY_FEATURE, the screen id and QN, the nav label and the new ACCOUNT_SECURITY_SCREEN_TITLE_KEY without importing server code."
7
+ },
2
8
  {
3
9
  "version": "0.370.0",
4
10
  "type": "improvement",
@@ -1,4 +1,10 @@
1
1
  [
2
+ {
3
+ "version": "0.376.0",
4
+ "type": "improvement",
5
+ "title": "authEnvSchema for auth.admin and auth.mail",
6
+ "detail": "authEnvSchema declares APP_BASE_URL, AUTH_ADMIN_EMAIL and AUTH_ADMIN_PASSWORD with descriptions and the pulumi secret marker; an app spreads its shape into its env schema."
7
+ },
2
8
  {
3
9
  "version": "0.371.0",
4
10
  "type": "improvement",
@@ -1,4 +1,10 @@
1
1
  [
2
+ {
3
+ "version": "0.377.0",
4
+ "type": "improvement",
5
+ "title": "Optional contact card in the billing plan catalog",
6
+ "detail": "catalog.contact takes labelKey, benefits, actionLabelKey and an absolute https: or mailto: href. The billing-plans query returns it as contact, the billing-plans panel renders it as the last card without a price for every viewRole, also when the caller cannot purchase or billing is off. Boot validation rejects empty keys and any other href."
7
+ },
2
8
  {
3
9
  "version": "0.371.0",
4
10
  "type": "improvement",
@@ -1,4 +1,10 @@
1
1
  [
2
+ {
3
+ "version": "0.376.0",
4
+ "type": "improvement",
5
+ "title": "resolveEmail receives a typed tenant database",
6
+ "detail": "The context of EmailChannelOptions resolveEmail types db as TenantDb, so resolvers read tables without a cast."
7
+ },
2
8
  {
3
9
  "version": "0.370.0",
4
10
  "type": "improvement",
@@ -1,4 +1,10 @@
1
1
  [
2
+ {
3
+ "version": "0.377.0",
4
+ "type": "fix",
5
+ "title": "Forgetting a user also removes their unbound pending uploads",
6
+ "detail": "forget-subject for a user deleted only files bound to a record. Uploads the user made but never attached (file refs without an entity id) stayed behind. They are now removed with their bytes, except refs a record still names in a single-file column."
7
+ },
2
8
  {
3
9
  "version": "0.372.0",
4
10
  "type": "fix",
@@ -1,4 +1,10 @@
1
1
  [
2
+ {
3
+ "version": "0.376.0",
4
+ "type": "improvement",
5
+ "title": "Named S3 provider feature",
6
+ "detail": "createFileProviderS3NamedEnvFeature mounts an additional S3 provider under its own name with an env prefix, next to the default one, so a second bucket needs no hand-written wiring."
7
+ },
2
8
  {
3
9
  "version": "0.371.0",
4
10
  "type": "improvement",
@@ -1,4 +1,10 @@
1
1
  [
2
+ {
3
+ "version": "0.376.0",
4
+ "type": "improvement",
5
+ "title": "tenantBy resolver, apex path tenants, redirects and anonymous query allowlist",
6
+ "detail": "tenantBy accepts (host, db) => TenantId | null for profile subdomains and custom domains; tenantPathPrefix also works in host and resolver mode for apex path tenants. redirects send fixed 301/302 answers before host classification, apexAnonymousQueryAllowlist limits the anonymous apex anchor to listed query types per host (/api/query and /api/stream), and createHostTenantIdResolver(options, db) maps a Host header to its tenant for managed-pages. Existing \"host\" and \"path\" configs behave as before, except that apexAnonymousQueryAllowlist with tenantBy \"path\" is rejected at boot."
7
+ },
2
8
  {
3
9
  "version": "0.370.0",
4
10
  "type": "improvement",