@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.
- package/dist/account-security/constants.d.ts +1 -0
- package/dist/account-security/constants.js +1 -0
- package/dist/account-security/index.d.ts +1 -1
- package/dist/account-security/index.js +1 -1
- package/dist/admin-shell/web/client-plugin.d.ts +1 -1
- package/dist/audit/web/client-plugin.d.ts +1 -1
- package/dist/auth-email-password/mail-notifications.js +1 -1
- package/dist/auth-email-password/web/auth-client.js +1 -1
- package/dist/auth-email-password/web/auth-form-primitives.js +1 -1
- package/dist/auth-email-password/web/default-topbar-actions.js +1 -1
- package/dist/auth-email-password/web/index.js +1 -1
- package/dist/auth-email-password/web/session.js +1 -1
- package/dist/auth-email-password/web/tenant-menu-items.js +1 -1
- package/dist/auth-email-password/web/tenant-switcher.js +1 -1
- package/dist/auth-email-password/web/user-menu.js +1 -1
- package/dist/auth-foundation/env.d.ts +9 -0
- package/dist/auth-foundation/env.js +21 -0
- package/dist/auth-foundation/index.d.ts +1 -0
- package/dist/auth-foundation/index.js +1 -0
- package/dist/auth-mfa/schema/user-mfa.d.ts +6 -6
- package/dist/billing-foundation/consumer-protection/confirmation-mail.js +1 -1
- package/dist/billing-foundation/consumer-protection/termination-pages.js +1 -1
- package/dist/billing-foundation/contact-card.d.ts +2 -0
- package/dist/billing-foundation/contact-card.js +16 -0
- package/dist/billing-foundation/entities.d.ts +8 -8
- package/dist/billing-foundation/handlers/billing-plans.query.js +1 -1
- package/dist/billing-foundation/index.d.ts +1 -1
- package/dist/billing-foundation/plan-catalog.js +1 -0
- package/dist/billing-foundation/projection.d.ts +8 -8
- package/dist/billing-foundation/types.d.ts +11 -0
- package/dist/billing-foundation/validate-options.js +13 -0
- package/dist/billing-foundation/web/billing-contact-plan.d.ts +5 -0
- package/dist/billing-foundation/web/billing-contact-plan.js +17 -0
- package/dist/billing-foundation/web/billing-plans-panel.js +5 -13
- package/dist/billing-foundation/web/cancel-contract-dialog.js +2 -2
- package/dist/billing-foundation/web/checkout-consent-dialog.d.ts +1 -1
- package/dist/billing-foundation/web/checkout-consent-dialog.js +1 -0
- package/dist/billing-foundation/web/client-plugin.d.ts +1 -1
- package/dist/billing-foundation/web/localized-params.d.ts +1 -0
- package/dist/billing-foundation/web/localized-params.js +11 -0
- package/dist/cap-counter/entity.d.ts +1 -1
- package/dist/cap-overview/web/cap-cards-panel.js +3 -3
- package/dist/cap-overview/web/client-plugin.d.ts +1 -1
- package/dist/channel-email/email-channel.d.ts +2 -1
- package/dist/compliance-profiles/web/client-plugin.d.ts +1 -1
- package/dist/config/feature.js +2 -2
- package/dist/config/table.d.ts +6 -6
- package/dist/custom-fields/entity.d.ts +4 -4
- package/dist/custom-fields/web/client-plugin.d.ts +1 -1
- package/dist/data-retention/schema/tenant-retention-override.d.ts +4 -4
- package/dist/delivery/tables.d.ts +6 -6
- package/dist/delivery/unsubscribe-page.js +1 -1
- package/dist/delivery/web/client-plugin.d.ts +1 -1
- package/dist/delivery/web/delivery-status-cell.js +1 -1
- package/dist/document-ingest-foundation/entity.d.ts +4 -4
- package/dist/feature-toggles/web/client-plugin.d.ts +1 -1
- package/dist/file-provider-s3/env-named-feature.d.ts +17 -0
- package/dist/file-provider-s3/env-named-feature.js +23 -0
- package/dist/file-provider-s3/env-schema.d.ts +7 -0
- package/dist/file-provider-s3/env-schema.js +15 -10
- package/dist/file-provider-s3/index.d.ts +1 -0
- package/dist/file-provider-s3/index.js +1 -0
- package/dist/folders/entity.d.ts +8 -8
- package/dist/folders/web/client-plugin.d.ts +1 -1
- package/dist/form-draft/entity.d.ts +2 -2
- package/dist/host-routing/constants.d.ts +2 -0
- package/dist/host-routing/constants.js +3 -0
- package/dist/host-routing/dispatch.d.ts +1 -1
- package/dist/host-routing/dispatch.js +35 -25
- package/dist/host-routing/feature.js +100 -27
- package/dist/host-routing/host.d.ts +9 -0
- package/dist/host-routing/host.js +24 -2
- package/dist/host-routing/index.d.ts +2 -1
- package/dist/host-routing/index.js +1 -0
- package/dist/host-routing/options.d.ts +14 -0
- package/dist/host-routing/redirects.d.ts +6 -0
- package/dist/host-routing/redirects.js +27 -0
- package/dist/host-routing/tenant-lookup.d.ts +7 -0
- package/dist/host-routing/tenant-lookup.js +39 -0
- package/dist/host-routing/validate-options.js +34 -1
- package/dist/inbound-mail-foundation/entities.d.ts +25 -25
- package/dist/inbound-mail-foundation/feature.js +7 -0
- package/dist/inbound-mail-foundation/i18n.d.ts +3 -0
- package/dist/inbound-mail-foundation/i18n.js +35 -0
- package/dist/inbound-mail-foundation/index.d.ts +1 -0
- package/dist/inbound-mail-foundation/index.js +1 -0
- package/dist/inbound-mail-foundation/projection.d.ts +20 -20
- package/dist/inbound-mail-foundation/screens.d.ts +7 -0
- package/dist/inbound-mail-foundation/screens.js +86 -0
- package/dist/inbound-mail-foundation/types.d.ts +2 -2
- package/dist/jobs/job-run-table.d.ts +6 -6
- package/dist/jobs/web/client-plugin.d.ts +1 -1
- package/dist/ledger/entity.d.ts +13 -13
- package/dist/legal-pages/feature.js +11 -1
- package/dist/legal-pages/layout.d.ts +2 -2
- package/dist/legal-pages/layout.js +4 -4
- package/dist/legal-pages/web/client-plugin.d.ts +1 -1
- package/dist/mail-foundation/feature.d.ts +20 -21
- package/dist/mail-foundation/feature.js +1 -1
- package/dist/managed-pages/table.d.ts +12 -12
- package/dist/managed-pages/web/client-plugin.d.ts +1 -1
- package/dist/notes-history/entity.d.ts +12 -12
- package/dist/notes-history/web/client-plugin.d.ts +1 -1
- package/dist/page-render/branding.js +1 -1
- package/dist/page-render/layout.d.ts +1 -1
- package/dist/page-render/layout.js +2 -2
- package/dist/page-render/markdown.js +1 -1
- package/dist/personal-access-tokens/i18n.js +1 -1
- package/dist/personal-access-tokens/schema/api-token.d.ts +6 -6
- package/dist/personal-access-tokens/screens.js +1 -1
- package/dist/secrets/feature.d.ts +1 -1
- package/dist/secrets/feature.js +3 -3
- package/dist/secrets/table.d.ts +1 -1
- package/dist/seo/sitemap.js +1 -1
- package/dist/sessions/schema/user-session.d.ts +4 -4
- package/dist/shared/mail-template-body.js +1 -1
- package/dist/shared/purge-files-reaching-subject.js +98 -3
- package/dist/tags/entity.d.ts +9 -9
- package/dist/tags/web/client-plugin.d.ts +1 -1
- package/dist/template-resolver/document-blocks.d.ts +5 -0
- package/dist/template-resolver/document-blocks.js +21 -0
- package/dist/template-resolver/document-ops.d.ts +167 -0
- package/dist/template-resolver/document-ops.js +390 -0
- package/dist/template-resolver/document-sanitizer.d.ts +3 -0
- package/dist/template-resolver/document-sanitizer.js +6 -0
- package/dist/template-resolver/feature.d.ts +2 -0
- package/dist/template-resolver/feature.js +4 -0
- package/dist/template-resolver/handlers/bundle-import.js +1 -0
- package/dist/template-resolver/handlers/document-base.d.ts +23 -0
- package/dist/template-resolver/handlers/document-base.js +55 -0
- package/dist/template-resolver/handlers/document-blocks.query.d.ts +22 -0
- package/dist/template-resolver/handlers/document-blocks.query.js +46 -0
- package/dist/template-resolver/handlers/export-bundle.query.d.ts +1 -0
- package/dist/template-resolver/handlers/export-bundle.query.js +9 -2
- package/dist/template-resolver/handlers/import-bundle-system.write.d.ts +1 -0
- package/dist/template-resolver/handlers/import-bundle.write.d.ts +1 -0
- package/dist/template-resolver/handlers/patch-draft.write.d.ts +66 -0
- package/dist/template-resolver/handlers/patch-draft.write.js +105 -0
- package/dist/template-resolver/handlers/preview.query.d.ts +1 -0
- package/dist/template-resolver/handlers/preview.query.js +2 -1
- package/dist/template-resolver/handlers/send-test.write.d.ts +1 -0
- package/dist/template-resolver/handlers/send-test.write.js +2 -1
- package/dist/template-resolver/handlers/template-write.d.ts +2 -0
- package/dist/template-resolver/handlers/template-write.js +14 -2
- package/dist/template-resolver/handlers/validate.query.d.ts +10 -4
- package/dist/template-resolver/handlers/validate.query.js +12 -7
- package/dist/template-resolver/{web/placeholder-text.js → placeholder-text.js} +1 -1
- package/dist/template-resolver/qualified-names.d.ts +2 -0
- package/dist/template-resolver/qualified-names.js +2 -0
- package/dist/template-resolver/seeding.d.ts +1 -0
- package/dist/template-resolver/seeding.js +2 -1
- package/dist/template-resolver/table.d.ts +10 -10
- package/dist/template-resolver/template-bundle.d.ts +1 -0
- package/dist/template-resolver/template-bundle.js +6 -1
- package/dist/template-resolver/template-preview.d.ts +4 -1
- package/dist/template-resolver/template-preview.js +16 -3
- package/dist/template-resolver/template-validation.d.ts +2 -1
- package/dist/template-resolver/template-validation.js +1 -1
- package/dist/template-resolver/user-content-table.d.ts +10 -10
- package/dist/template-resolver/web/client-plugin.d.ts +1 -1
- package/dist/template-resolver/web/client-plugin.js +3 -3
- package/dist/template-resolver/web/document-tiptap-editor.js +1 -1
- package/dist/template-resolver/web/document-toolbar-blocks.d.ts +2 -5
- package/dist/template-resolver/web/document-toolbar-blocks.js +1 -21
- package/dist/template-resolver/web/i18n.js +14 -0
- package/dist/template-resolver/web/placeholder-line-editor.js +2 -2
- package/dist/tenant/invitation-table.d.ts +6 -6
- package/dist/tenant/membership-table.d.ts +4 -4
- package/dist/tenant/schema/tenant.d.ts +6 -6
- package/dist/tenant/web/client-plugin.d.ts +1 -1
- package/dist/tenant/web/member-status-cell.js +1 -1
- package/dist/tier-engine/entity.d.ts +1 -1
- package/dist/tier-engine/tier-resolver.d.ts +1 -1
- package/dist/tier-engine/web/client-plugin.d.ts +1 -1
- package/dist/user/schema/user.d.ts +12 -12
- package/dist/user-data-rights/env.d.ts +5 -0
- package/dist/user-data-rights/env.js +11 -0
- package/dist/user-data-rights/feature.js +4 -2
- package/dist/user-data-rights/index.d.ts +1 -0
- package/dist/user-data-rights/index.js +1 -0
- package/dist/user-data-rights/lib/mail-transport-resolver.js +1 -1
- package/dist/user-data-rights/lib/storage-provider-resolver.js +1 -1
- package/dist/user-data-rights/mail-notifications.js +1 -1
- package/dist/user-data-rights/schema/download-attempt.d.ts +14 -14
- package/dist/user-data-rights/schema/download-token.d.ts +8 -8
- package/dist/user-data-rights/schema/export-job.d.ts +6 -6
- package/dist/user-data-rights/web/client-plugin.d.ts +1 -1
- package/dist/user-data-rights/web/privacy-center-screen.js +2 -2
- package/dist/waitlist/entity.d.ts +14 -14
- package/dist/waitlist/legacy-migrate.d.ts +2 -0
- package/dist/waitlist/legacy-migrate.js +38 -3
- package/package.json +16 -11
- package/src/account-security/changes.json +6 -0
- package/src/auth-foundation/changes.json +6 -0
- package/src/billing-foundation/changes.json +6 -0
- package/src/channel-email/changes.json +6 -0
- package/src/crypto-shredding/changes.json +6 -0
- package/src/file-provider-s3/changes.json +6 -0
- package/src/host-routing/changes.json +6 -0
- package/src/inbound-mail-foundation/changes.json +7 -0
- package/src/legal-pages/changes.json +6 -0
- package/src/template-resolver/changes.json +18 -0
- package/src/user-data-rights/changes.json +6 -0
- package/src/waitlist/changes.json +6 -0
- /package/dist/template-resolver/{web/placeholder-text.d.ts → placeholder-text.d.ts} +0 -0
|
@@ -15,7 +15,7 @@ export declare const mailAccountEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
15
15
|
readonly sensitive?: boolean;
|
|
16
16
|
readonly writeOnly?: boolean;
|
|
17
17
|
readonly readAsInstruction?: boolean;
|
|
18
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
18
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
19
19
|
readonly default?: string;
|
|
20
20
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
21
21
|
readonly multiline?: boolean | {
|
|
@@ -38,7 +38,7 @@ export declare const mailAccountEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
38
38
|
readonly sensitive?: boolean;
|
|
39
39
|
readonly writeOnly?: boolean;
|
|
40
40
|
readonly readAsInstruction?: boolean;
|
|
41
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
41
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
42
42
|
readonly default?: string;
|
|
43
43
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
44
44
|
readonly multiline?: boolean | {
|
|
@@ -61,7 +61,7 @@ export declare const mailAccountEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
61
61
|
readonly sensitive?: boolean;
|
|
62
62
|
readonly writeOnly?: boolean;
|
|
63
63
|
readonly readAsInstruction?: boolean;
|
|
64
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
64
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
65
65
|
readonly default?: string;
|
|
66
66
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
67
67
|
readonly multiline?: boolean | {
|
|
@@ -84,7 +84,7 @@ export declare const mailAccountEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
84
84
|
readonly sensitive?: boolean;
|
|
85
85
|
readonly writeOnly?: boolean;
|
|
86
86
|
readonly readAsInstruction?: boolean;
|
|
87
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
87
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
88
88
|
readonly default?: string;
|
|
89
89
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
90
90
|
readonly multiline?: boolean | {
|
|
@@ -107,7 +107,7 @@ export declare const mailAccountEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
107
107
|
readonly sensitive?: boolean;
|
|
108
108
|
readonly writeOnly?: boolean;
|
|
109
109
|
readonly readAsInstruction?: boolean;
|
|
110
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
110
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
111
111
|
readonly default?: string;
|
|
112
112
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
113
113
|
readonly multiline?: boolean | {
|
|
@@ -130,7 +130,7 @@ export declare const mailAccountEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
130
130
|
readonly sensitive?: boolean;
|
|
131
131
|
readonly writeOnly?: boolean;
|
|
132
132
|
readonly readAsInstruction?: boolean;
|
|
133
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
133
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
134
134
|
readonly default?: string;
|
|
135
135
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
136
136
|
readonly multiline?: boolean | {
|
|
@@ -153,7 +153,7 @@ export declare const mailAccountEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
153
153
|
readonly sensitive?: boolean;
|
|
154
154
|
readonly writeOnly?: boolean;
|
|
155
155
|
readonly readAsInstruction?: boolean;
|
|
156
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
156
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
157
157
|
readonly default?: string;
|
|
158
158
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
159
159
|
readonly multiline?: boolean | {
|
|
@@ -196,7 +196,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
196
196
|
readonly sensitive?: boolean;
|
|
197
197
|
readonly writeOnly?: boolean;
|
|
198
198
|
readonly readAsInstruction?: boolean;
|
|
199
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
199
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
200
200
|
readonly default?: string;
|
|
201
201
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
202
202
|
readonly multiline?: boolean | {
|
|
@@ -219,7 +219,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
219
219
|
readonly sensitive?: boolean;
|
|
220
220
|
readonly writeOnly?: boolean;
|
|
221
221
|
readonly readAsInstruction?: boolean;
|
|
222
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
222
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
223
223
|
readonly default?: string;
|
|
224
224
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
225
225
|
readonly multiline?: boolean | {
|
|
@@ -242,7 +242,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
242
242
|
readonly sensitive?: boolean;
|
|
243
243
|
readonly writeOnly?: boolean;
|
|
244
244
|
readonly readAsInstruction?: boolean;
|
|
245
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
245
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
246
246
|
readonly default?: string;
|
|
247
247
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
248
248
|
readonly multiline?: boolean | {
|
|
@@ -265,7 +265,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
265
265
|
readonly sensitive?: boolean;
|
|
266
266
|
readonly writeOnly?: boolean;
|
|
267
267
|
readonly readAsInstruction?: boolean;
|
|
268
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
268
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
269
269
|
readonly default?: string;
|
|
270
270
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
271
271
|
readonly multiline?: boolean | {
|
|
@@ -288,7 +288,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
288
288
|
readonly sensitive?: boolean;
|
|
289
289
|
readonly writeOnly?: boolean;
|
|
290
290
|
readonly readAsInstruction?: boolean;
|
|
291
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
291
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
292
292
|
readonly default?: string;
|
|
293
293
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
294
294
|
readonly multiline?: boolean | {
|
|
@@ -311,7 +311,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
311
311
|
readonly sensitive?: boolean;
|
|
312
312
|
readonly writeOnly?: boolean;
|
|
313
313
|
readonly readAsInstruction?: boolean;
|
|
314
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
314
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
315
315
|
readonly default?: string;
|
|
316
316
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
317
317
|
readonly multiline?: boolean | {
|
|
@@ -334,7 +334,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
334
334
|
readonly sensitive?: boolean;
|
|
335
335
|
readonly writeOnly?: boolean;
|
|
336
336
|
readonly readAsInstruction?: boolean;
|
|
337
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
337
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
338
338
|
readonly default?: string;
|
|
339
339
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
340
340
|
readonly multiline?: boolean | {
|
|
@@ -357,7 +357,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
357
357
|
readonly sensitive?: boolean;
|
|
358
358
|
readonly writeOnly?: boolean;
|
|
359
359
|
readonly readAsInstruction?: boolean;
|
|
360
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
360
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
361
361
|
readonly default?: string;
|
|
362
362
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
363
363
|
readonly multiline?: boolean | {
|
|
@@ -380,7 +380,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
380
380
|
readonly sensitive?: boolean;
|
|
381
381
|
readonly writeOnly?: boolean;
|
|
382
382
|
readonly readAsInstruction?: boolean;
|
|
383
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
383
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
384
384
|
readonly default?: string;
|
|
385
385
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
386
386
|
readonly multiline?: boolean | {
|
|
@@ -418,7 +418,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
418
418
|
readonly sensitive?: boolean;
|
|
419
419
|
readonly writeOnly?: boolean;
|
|
420
420
|
readonly readAsInstruction?: boolean;
|
|
421
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
421
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
422
422
|
readonly default?: string;
|
|
423
423
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
424
424
|
readonly multiline?: boolean | {
|
|
@@ -441,7 +441,7 @@ export declare const inboundMessageEntity: import("@cosmicdrift/kumiko-types/fie
|
|
|
441
441
|
readonly sensitive?: boolean;
|
|
442
442
|
readonly writeOnly?: boolean;
|
|
443
443
|
readonly readAsInstruction?: boolean;
|
|
444
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
444
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
445
445
|
readonly default?: string;
|
|
446
446
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
447
447
|
readonly multiline?: boolean | {
|
|
@@ -468,7 +468,7 @@ export declare const mailThreadEntity: import("@cosmicdrift/kumiko-types/fields"
|
|
|
468
468
|
readonly sensitive?: boolean;
|
|
469
469
|
readonly writeOnly?: boolean;
|
|
470
470
|
readonly readAsInstruction?: boolean;
|
|
471
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
471
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
472
472
|
readonly default?: string;
|
|
473
473
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
474
474
|
readonly multiline?: boolean | {
|
|
@@ -491,7 +491,7 @@ export declare const mailThreadEntity: import("@cosmicdrift/kumiko-types/fields"
|
|
|
491
491
|
readonly sensitive?: boolean;
|
|
492
492
|
readonly writeOnly?: boolean;
|
|
493
493
|
readonly readAsInstruction?: boolean;
|
|
494
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
494
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
495
495
|
readonly default?: string;
|
|
496
496
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
497
497
|
readonly multiline?: boolean | {
|
|
@@ -557,7 +557,7 @@ export declare const syncCursorEntity: import("@cosmicdrift/kumiko-types/fields"
|
|
|
557
557
|
readonly sensitive?: boolean;
|
|
558
558
|
readonly writeOnly?: boolean;
|
|
559
559
|
readonly readAsInstruction?: boolean;
|
|
560
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
560
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
561
561
|
readonly default?: string;
|
|
562
562
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
563
563
|
readonly multiline?: boolean | {
|
|
@@ -580,7 +580,7 @@ export declare const syncCursorEntity: import("@cosmicdrift/kumiko-types/fields"
|
|
|
580
580
|
readonly sensitive?: boolean;
|
|
581
581
|
readonly writeOnly?: boolean;
|
|
582
582
|
readonly readAsInstruction?: boolean;
|
|
583
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
583
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
584
584
|
readonly default?: string;
|
|
585
585
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
586
586
|
readonly multiline?: boolean | {
|
|
@@ -603,7 +603,7 @@ export declare const syncCursorEntity: import("@cosmicdrift/kumiko-types/fields"
|
|
|
603
603
|
readonly sensitive?: boolean;
|
|
604
604
|
readonly writeOnly?: boolean;
|
|
605
605
|
readonly readAsInstruction?: boolean;
|
|
606
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
606
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
607
607
|
readonly default?: string;
|
|
608
608
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
609
609
|
readonly multiline?: boolean | {
|
|
@@ -647,7 +647,7 @@ export declare const seenMessageEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
647
647
|
readonly sensitive?: boolean;
|
|
648
648
|
readonly writeOnly?: boolean;
|
|
649
649
|
readonly readAsInstruction?: boolean;
|
|
650
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
650
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
651
651
|
readonly default?: string;
|
|
652
652
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
653
653
|
readonly multiline?: boolean | {
|
|
@@ -670,7 +670,7 @@ export declare const seenMessageEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
670
670
|
readonly sensitive?: boolean;
|
|
671
671
|
readonly writeOnly?: boolean;
|
|
672
672
|
readonly readAsInstruction?: boolean;
|
|
673
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
673
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
674
674
|
readonly default?: string;
|
|
675
675
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
676
676
|
readonly multiline?: boolean | {
|
|
@@ -51,8 +51,10 @@ import { ingestMessageHandler } from "./handlers/ingest-message.write.js";
|
|
|
51
51
|
import { listAccountsQuery } from "./handlers/list-accounts.query.js";
|
|
52
52
|
import { listMessagesQuery } from "./handlers/list-messages.query.js";
|
|
53
53
|
import { updateAccountHandler } from "./handlers/update-account.write.js";
|
|
54
|
+
import { INBOUND_MAIL_FOUNDATION_I18N } from "./i18n.js";
|
|
54
55
|
import { applyInboundMessageReceived, applyMailAccountConnected, applyMailAccountDisconnected, applyMailAccountUpdated, applyMailThreadUpdated, inboundMessagesProjectionTable, mailAccountsProjectionTable, mailThreadsProjectionTable, } from "./projection.js";
|
|
55
56
|
import { runInboundMailRetention } from "./retention-sweep.js";
|
|
57
|
+
import { mailAccountEditScreen, mailAccountListScreen } from "./screens.js";
|
|
56
58
|
import { INBOUND_MAIL_TENANT_DESTROY_ARCHIVE_REASON, inboundMessageTenantDestroyHook, mailAccountTenantDestroyHook, mailThreadTenantDestroyHook, } from "./tenant-destroy-hook.js";
|
|
57
59
|
export function createInboundMailFoundationFeature() {
|
|
58
60
|
return defineFeature(INBOUND_MAIL_FOUNDATION_FEATURE, (r) => {
|
|
@@ -141,6 +143,11 @@ export function createInboundMailFoundationFeature() {
|
|
|
141
143
|
// List-Queries (PII-decrypted, scope-gefiltert).
|
|
142
144
|
r.queryHandler(listAccountsQuery);
|
|
143
145
|
r.queryHandler(listMessagesQuery);
|
|
146
|
+
// Declarative mailbox admin: list (rename, disconnect) and rename form.
|
|
147
|
+
// The app places `mailAccountListScreen` via r.nav in its settings area.
|
|
148
|
+
r.screen(mailAccountListScreen);
|
|
149
|
+
r.screen(mailAccountEditScreen);
|
|
150
|
+
r.translations({ keys: INBOUND_MAIL_FOUNDATION_I18N });
|
|
144
151
|
// Entity-genaue GDPR-Destroy-Hooks — der gdpr-storage-Boot-Validator
|
|
145
152
|
// prueft die EXT_TENANT_DATA-Registrierung pro tenant-subject-Entity.
|
|
146
153
|
r.useExtension(EXT_TENANT_DATA, "mail-account", {
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ACTION_FORM_ENTITY } from "@cosmicdrift/kumiko-framework/ui-types";
|
|
2
|
+
import { fieldLabelKey } from "@cosmicdrift/kumiko-renderer/headless";
|
|
3
|
+
import { INBOUND_MAIL_FOUNDATION_FEATURE, InboundMailAccountStatuses } from "./constants.js";
|
|
4
|
+
import { MAIL_ACCOUNT_EDIT_SCREEN_ID, MAIL_ACCOUNT_LIST_SCREEN_ID, MAIL_ACCOUNT_STATUS_OPTION_KEY_PREFIX, } from "./screens.js";
|
|
5
|
+
const formFieldKey = (field) => fieldLabelKey(INBOUND_MAIL_FOUNDATION_FEATURE, ACTION_FORM_ENTITY, field);
|
|
6
|
+
export const INBOUND_MAIL_FOUNDATION_I18N = {
|
|
7
|
+
[`screen:${MAIL_ACCOUNT_LIST_SCREEN_ID}.title`]: { en: "Mailboxes" },
|
|
8
|
+
[`screen:${MAIL_ACCOUNT_EDIT_SCREEN_ID}.title`]: { en: "Edit mailbox" },
|
|
9
|
+
"inboundMail.accounts.col.name": { en: "Name" },
|
|
10
|
+
"inboundMail.accounts.col.address": { en: "Address" },
|
|
11
|
+
"inboundMail.accounts.col.provider": { en: "Provider" },
|
|
12
|
+
"inboundMail.accounts.col.status": { en: "Status" },
|
|
13
|
+
"inboundMail.accounts.col.connected": { en: "Connected" },
|
|
14
|
+
[`${MAIL_ACCOUNT_STATUS_OPTION_KEY_PREFIX}${InboundMailAccountStatuses.active}`]: {
|
|
15
|
+
en: "Active",
|
|
16
|
+
},
|
|
17
|
+
[`${MAIL_ACCOUNT_STATUS_OPTION_KEY_PREFIX}${InboundMailAccountStatuses.authError}`]: {
|
|
18
|
+
en: "Sign-in failed",
|
|
19
|
+
},
|
|
20
|
+
[`${MAIL_ACCOUNT_STATUS_OPTION_KEY_PREFIX}${InboundMailAccountStatuses.degraded}`]: {
|
|
21
|
+
en: "Interrupted",
|
|
22
|
+
},
|
|
23
|
+
[`${MAIL_ACCOUNT_STATUS_OPTION_KEY_PREFIX}${InboundMailAccountStatuses.disconnected}`]: {
|
|
24
|
+
en: "Disconnected",
|
|
25
|
+
},
|
|
26
|
+
"inboundMail.accounts.edit": { en: "Rename" },
|
|
27
|
+
"inboundMail.accounts.edit.submit": { en: "Save" },
|
|
28
|
+
"inboundMail.accounts.disconnect": { en: "Disconnect" },
|
|
29
|
+
"inboundMail.accounts.disconnect.confirm": {
|
|
30
|
+
en: "Disconnect this mailbox? No new mail is fetched; stored mail is kept.",
|
|
31
|
+
},
|
|
32
|
+
[formFieldKey("accountId")]: { en: "Mailbox" },
|
|
33
|
+
[formFieldKey("displayName")]: { en: "Name" },
|
|
34
|
+
[formFieldKey("reason")]: { en: "Reason" },
|
|
35
|
+
};
|
|
@@ -8,5 +8,6 @@ export { createOAuthAccessTokenManager, inboundRefreshTokenSecretOptions, type O
|
|
|
8
8
|
export { type OAuthStatePayload, signOAuthState, type VerifyOAuthStateResult, verifyOAuthState, } from "./oauth-state.ts";
|
|
9
9
|
export { inboundMessagesProjectionTable, mailAccountsProjectionTable, mailThreadsProjectionTable, } from "./projection.ts";
|
|
10
10
|
export { resolveInboundProviderForAccount, resolveInboundProviderForKey, } from "./provider-factory.ts";
|
|
11
|
+
export { MAIL_ACCOUNT_EDIT_SCREEN_ID, MAIL_ACCOUNT_LIST_SCREEN_ID, } from "./screens.ts";
|
|
11
12
|
export { InboundAuthError, InboundCursorInvalidError, type InboundFetchResult, type InboundMailContext, type InboundMailProviderPlugin, type InboundOAuthFlow, InboundRateLimitError, InboundTransientError, isInboundAuthError, isInboundCursorInvalidError, isInboundMailProviderPlugin, isInboundRateLimitError, isInboundTransientError, type MailAccountRecord, type OAuthTokenSet, type RawInboundMessage, type SyncCursorPayload, } from "./types.ts";
|
|
12
13
|
export { createInboundMailSupervisor, type InboundMailSupervisor, type InboundMailSupervisorDeps, } from "./watch-supervisor.ts";
|
|
@@ -9,5 +9,6 @@ export { createOAuthAccessTokenManager, inboundRefreshTokenSecretOptions, usesFo
|
|
|
9
9
|
export { signOAuthState, verifyOAuthState, } from "./oauth-state.js";
|
|
10
10
|
export { inboundMessagesProjectionTable, mailAccountsProjectionTable, mailThreadsProjectionTable, } from "./projection.js";
|
|
11
11
|
export { resolveInboundProviderForAccount, resolveInboundProviderForKey, } from "./provider-factory.js";
|
|
12
|
+
export { MAIL_ACCOUNT_EDIT_SCREEN_ID, MAIL_ACCOUNT_LIST_SCREEN_ID, } from "./screens.js";
|
|
12
13
|
export { InboundAuthError, InboundCursorInvalidError, InboundRateLimitError, InboundTransientError, isInboundAuthError, isInboundCursorInvalidError, isInboundMailProviderPlugin, isInboundRateLimitError, isInboundTransientError, } from "./types.js";
|
|
13
14
|
export { createInboundMailSupervisor, } from "./watch-supervisor.js";
|
|
@@ -13,7 +13,7 @@ export declare const mailAccountsProjectionTable: import("@cosmicdrift/kumiko-fr
|
|
|
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 mailAccountsProjectionTable: import("@cosmicdrift/kumiko-fr
|
|
|
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 mailAccountsProjectionTable: import("@cosmicdrift/kumiko-fr
|
|
|
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 mailAccountsProjectionTable: import("@cosmicdrift/kumiko-fr
|
|
|
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 mailAccountsProjectionTable: import("@cosmicdrift/kumiko-fr
|
|
|
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 mailAccountsProjectionTable: import("@cosmicdrift/kumiko-fr
|
|
|
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 mailAccountsProjectionTable: import("@cosmicdrift/kumiko-fr
|
|
|
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 inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
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 inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
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 inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
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 inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
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 inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
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 inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
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 inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
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 | {
|
|
@@ -352,7 +352,7 @@ export declare const inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
352
352
|
readonly sensitive?: boolean;
|
|
353
353
|
readonly writeOnly?: boolean;
|
|
354
354
|
readonly readAsInstruction?: boolean;
|
|
355
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
355
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
356
356
|
readonly default?: string;
|
|
357
357
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
358
358
|
readonly multiline?: boolean | {
|
|
@@ -375,7 +375,7 @@ export declare const inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
375
375
|
readonly sensitive?: boolean;
|
|
376
376
|
readonly writeOnly?: boolean;
|
|
377
377
|
readonly readAsInstruction?: boolean;
|
|
378
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
378
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
379
379
|
readonly default?: string;
|
|
380
380
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
381
381
|
readonly multiline?: boolean | {
|
|
@@ -413,7 +413,7 @@ export declare const inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
413
413
|
readonly sensitive?: boolean;
|
|
414
414
|
readonly writeOnly?: boolean;
|
|
415
415
|
readonly readAsInstruction?: boolean;
|
|
416
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
416
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
417
417
|
readonly default?: string;
|
|
418
418
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
419
419
|
readonly multiline?: boolean | {
|
|
@@ -436,7 +436,7 @@ export declare const inboundMessagesProjectionTable: import("@cosmicdrift/kumiko
|
|
|
436
436
|
readonly sensitive?: boolean;
|
|
437
437
|
readonly writeOnly?: boolean;
|
|
438
438
|
readonly readAsInstruction?: boolean;
|
|
439
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
439
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
440
440
|
readonly default?: string;
|
|
441
441
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
442
442
|
readonly multiline?: boolean | {
|
|
@@ -461,7 +461,7 @@ export declare const mailThreadsProjectionTable: import("@cosmicdrift/kumiko-fra
|
|
|
461
461
|
readonly sensitive?: boolean;
|
|
462
462
|
readonly writeOnly?: boolean;
|
|
463
463
|
readonly readAsInstruction?: boolean;
|
|
464
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
464
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
465
465
|
readonly default?: string;
|
|
466
466
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
467
467
|
readonly multiline?: boolean | {
|
|
@@ -484,7 +484,7 @@ export declare const mailThreadsProjectionTable: import("@cosmicdrift/kumiko-fra
|
|
|
484
484
|
readonly sensitive?: boolean;
|
|
485
485
|
readonly writeOnly?: boolean;
|
|
486
486
|
readonly readAsInstruction?: boolean;
|
|
487
|
-
readonly format?: "email" | "url" | "phone" | "password";
|
|
487
|
+
readonly format?: "email" | "url" | "phone" | "password" | "month";
|
|
488
488
|
readonly default?: string;
|
|
489
489
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
490
490
|
readonly multiline?: boolean | {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ProjectionListScreenDefinition } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
+
import type { ActionFormScreenDefinition } from "@cosmicdrift/kumiko-framework/ui-types";
|
|
3
|
+
export declare const MAIL_ACCOUNT_LIST_SCREEN_ID = "mail-accounts";
|
|
4
|
+
export declare const MAIL_ACCOUNT_EDIT_SCREEN_ID = "mail-account-edit";
|
|
5
|
+
export declare const MAIL_ACCOUNT_STATUS_OPTION_KEY_PREFIX = "inboundMail.accounts.status.";
|
|
6
|
+
export declare const mailAccountListScreen: ProjectionListScreenDefinition;
|
|
7
|
+
export declare const mailAccountEditScreen: ActionFormScreenDefinition;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { i18nKey, MAX_LIST_LIMIT, } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
+
import { InboundMailAccountStatuses, InboundMailFoundationHandlers, InboundMailFoundationQueries, } from "./constants.js";
|
|
3
|
+
export const MAIL_ACCOUNT_LIST_SCREEN_ID = "mail-accounts";
|
|
4
|
+
export const MAIL_ACCOUNT_EDIT_SCREEN_ID = "mail-account-edit";
|
|
5
|
+
export const MAIL_ACCOUNT_STATUS_OPTION_KEY_PREFIX = "inboundMail.accounts.status.";
|
|
6
|
+
// Same roles as the update/disconnect handlers: a screen rule wider than the
|
|
7
|
+
// handlers would only render actions that 403.
|
|
8
|
+
const MAIL_ACCOUNT_ADMIN_ACCESS = { roles: ["SystemAdmin", "TenantAdmin"] };
|
|
9
|
+
// Several mailboxes per tenant, one row each. The bound query already filters
|
|
10
|
+
// personal mailboxes the caller neither owns nor administers and returns no
|
|
11
|
+
// credential: the secret lives in the secrets feature, never in the row.
|
|
12
|
+
// dormant: the consuming app places the list in its own settings nav.
|
|
13
|
+
export const mailAccountListScreen = {
|
|
14
|
+
id: MAIL_ACCOUNT_LIST_SCREEN_ID,
|
|
15
|
+
type: "projectionList",
|
|
16
|
+
agent: { expose: false },
|
|
17
|
+
query: InboundMailFoundationQueries.listAccounts,
|
|
18
|
+
pagination: false,
|
|
19
|
+
pageSize: MAX_LIST_LIMIT,
|
|
20
|
+
columns: [
|
|
21
|
+
{ field: "displayName", label: i18nKey("inboundMail.accounts.col.name"), sortable: false },
|
|
22
|
+
{ field: "address", label: i18nKey("inboundMail.accounts.col.address"), sortable: false },
|
|
23
|
+
{
|
|
24
|
+
field: "provider",
|
|
25
|
+
label: i18nKey("inboundMail.accounts.col.provider"),
|
|
26
|
+
sortable: false,
|
|
27
|
+
hideOnNarrow: true,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
field: "status",
|
|
31
|
+
label: i18nKey("inboundMail.accounts.col.status"),
|
|
32
|
+
sortable: false,
|
|
33
|
+
renderer: { format: "enumOption", keyPrefix: MAIL_ACCOUNT_STATUS_OPTION_KEY_PREFIX },
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
field: "connectedAt",
|
|
37
|
+
label: i18nKey("inboundMail.accounts.col.connected"),
|
|
38
|
+
sortable: false,
|
|
39
|
+
hideOnNarrow: true,
|
|
40
|
+
renderer: { format: "timestamp" },
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
rowActions: [
|
|
44
|
+
{
|
|
45
|
+
kind: "navigate",
|
|
46
|
+
id: "edit",
|
|
47
|
+
label: i18nKey("inboundMail.accounts.edit"),
|
|
48
|
+
screen: MAIL_ACCOUNT_EDIT_SCREEN_ID,
|
|
49
|
+
params: { map: { accountId: "id", displayName: "displayName" } },
|
|
50
|
+
visible: { field: "status", ne: InboundMailAccountStatuses.disconnected },
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
kind: "writeHandler",
|
|
54
|
+
id: "disconnect",
|
|
55
|
+
label: i18nKey("inboundMail.accounts.disconnect"),
|
|
56
|
+
handler: InboundMailFoundationHandlers.disconnectAccount,
|
|
57
|
+
payload: { map: { accountId: "id" } },
|
|
58
|
+
style: "danger",
|
|
59
|
+
confirm: i18nKey("inboundMail.accounts.disconnect.confirm"),
|
|
60
|
+
visible: { field: "status", ne: InboundMailAccountStatuses.disconnected },
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
access: MAIL_ACCOUNT_ADMIN_ACCESS,
|
|
64
|
+
dormant: true,
|
|
65
|
+
};
|
|
66
|
+
// The reason is the audit label update-account requires; it is not in the
|
|
67
|
+
// layout, so the default is what gets written.
|
|
68
|
+
export const mailAccountEditScreen = {
|
|
69
|
+
id: MAIL_ACCOUNT_EDIT_SCREEN_ID,
|
|
70
|
+
type: "actionForm",
|
|
71
|
+
agent: { expose: false },
|
|
72
|
+
handler: InboundMailFoundationHandlers.updateAccount,
|
|
73
|
+
fields: {
|
|
74
|
+
accountId: { type: "text", required: true },
|
|
75
|
+
displayName: { type: "text", required: true, maxLength: 200 },
|
|
76
|
+
reason: { type: "text", default: "tenant_admin" },
|
|
77
|
+
},
|
|
78
|
+
layout: {
|
|
79
|
+
sections: [{ fields: [{ field: "accountId", readOnly: true }, "displayName"] }],
|
|
80
|
+
},
|
|
81
|
+
submitLabel: i18nKey("inboundMail.accounts.edit.submit"),
|
|
82
|
+
redirect: MAIL_ACCOUNT_LIST_SCREEN_ID,
|
|
83
|
+
cancelTarget: MAIL_ACCOUNT_LIST_SCREEN_ID,
|
|
84
|
+
access: MAIL_ACCOUNT_ADMIN_ACCESS,
|
|
85
|
+
dormant: true,
|
|
86
|
+
};
|
|
@@ -8,7 +8,7 @@ import { INBOUND_MAIL_PROVIDER_EXTENSION, type InboundMailAccountStatus } from "
|
|
|
8
8
|
* config — tenant config reads (host/port/... of the plugins)
|
|
9
9
|
* registry — extension lookup in the factory (not plugin-internal)
|
|
10
10
|
* secrets — tenant secret reads (IMAP password, OAuth refresh token)
|
|
11
|
-
*
|
|
11
|
+
* auditUserId — audit identity for secret reads. Handler path: the dispatcher
|
|
12
12
|
* sets the caller user ID; worker path: system identity.
|
|
13
13
|
* metricsFor — metrics handle of a feature by name, same behavior as
|
|
14
14
|
* HandlerContext.metricsFor: unregistered metrics are a silent
|
|
@@ -18,7 +18,7 @@ export type InboundMailContext = {
|
|
|
18
18
|
readonly config?: ConfigAccessor;
|
|
19
19
|
readonly registry?: Registry;
|
|
20
20
|
readonly secrets?: import("@cosmicdrift/kumiko-framework/secrets").SecretsContext;
|
|
21
|
-
readonly
|
|
21
|
+
readonly auditUserId?: string | undefined;
|
|
22
22
|
readonly metricsFor?: (featureName: string) => MetricsHandle;
|
|
23
23
|
};
|
|
24
24
|
/**
|