@cosmicdrift/kumiko-samples 0.364.0 → 0.365.1
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/LICENSE +1 -1
- package/package.json +1 -1
- package/packages/bundled-features/package.json +1 -1
- package/packages/bundled-features/src/audit/changes.json +12 -0
- package/packages/bundled-features/src/audit/feature.ts +1 -1
- package/packages/bundled-features/src/audit/run-escape-hatch-retention.ts +63 -11
- package/packages/bundled-features/src/auth-email-password/bootstrap.ts +1 -3
- package/packages/bundled-features/src/auth-email-password/changes.json +18 -0
- package/packages/bundled-features/src/auth-email-password/feature.ts +4 -7
- package/packages/bundled-features/src/auth-email-password/handlers/invite-accept-with-login.write.ts +2 -3
- package/packages/bundled-features/src/auth-email-password/handlers/invite-create.write.ts +6 -4
- package/packages/bundled-features/src/auth-email-password/handlers/switch-tenant-mfa-gate.write.ts +2 -2
- package/packages/bundled-features/src/auth-email-password/magic-link-mail.ts +7 -3
- package/packages/bundled-features/src/auth-email-password/mail-i18n.ts +10 -0
- package/packages/bundled-features/src/billing-foundation/changes.json +12 -0
- package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-record.ts +8 -1
- package/packages/bundled-features/src/billing-foundation/i18n.ts +6 -0
- package/packages/bundled-features/src/billing-foundation/subscription-tier-sync.ts +10 -2
- package/packages/bundled-features/src/cap-counter/book-cap-usage.ts +20 -8
- package/packages/bundled-features/src/cap-counter/cap-reservation.ts +7 -2
- package/packages/bundled-features/src/cap-counter/changes.json +13 -0
- package/packages/bundled-features/src/cap-counter/handlers/increment-rolling.write.ts +2 -0
- package/packages/bundled-features/src/cap-overview/changes.json +6 -0
- package/packages/bundled-features/src/cap-overview/handlers/tenant-caps-list.query.ts +2 -1
- package/packages/bundled-features/src/cap-overview/handlers/tenant-options.query.ts +2 -1
- package/packages/bundled-features/src/channel-discord/discord-channel.ts +4 -2
- package/packages/bundled-features/src/channel-email/changes.json +18 -0
- package/packages/bundled-features/src/channel-email/email-channel.ts +30 -20
- package/packages/bundled-features/src/channel-email/smtp-transport.ts +7 -1
- package/packages/bundled-features/src/channel-slack/slack-channel.ts +4 -2
- package/packages/bundled-features/src/channel-teams/teams-channel.ts +4 -2
- package/packages/bundled-features/src/crypto-shredding/changes.json +7 -0
- package/packages/bundled-features/src/crypto-shredding/handlers/forget-subject.write.ts +7 -1
- package/packages/bundled-features/src/custom-fields/db/queries/retention.ts +2 -2
- package/packages/bundled-features/src/data-retention/run-retention-cleanup.ts +4 -5
- package/packages/bundled-features/src/delivery/attachment-ref.ts +18 -1
- package/packages/bundled-features/src/delivery/changes.json +12 -0
- package/packages/bundled-features/src/delivery/delivery-service.ts +93 -92
- package/packages/bundled-features/src/document-ingest-foundation/changes.json +6 -0
- package/packages/bundled-features/src/feature-toggles/changes.json +7 -0
- package/packages/bundled-features/src/feature-toggles/toggle-runtime.ts +26 -12
- package/packages/bundled-features/src/files-tenant-data/index.ts +3 -1
- package/packages/bundled-features/src/form-draft/db/queries/owned-file-refs.ts +12 -3
- package/packages/bundled-features/src/form-draft/handlers/discard.write.ts +1 -1
- package/packages/bundled-features/src/jobs/changes.json +12 -0
- package/packages/bundled-features/src/jobs/job-run-logger.ts +5 -2
- package/packages/bundled-features/src/metrics/changes.json +6 -0
- package/packages/bundled-features/src/metrics/filters.ts +28 -12
- package/packages/bundled-features/src/personal-access-tokens/changes.json +6 -0
- package/packages/bundled-features/src/personal-access-tokens/revoke-for-user.ts +7 -8
- package/packages/bundled-features/src/secrets/changes.json +6 -0
- package/packages/bundled-features/src/secrets/handlers/delete.write.ts +3 -1
- package/packages/bundled-features/src/secrets/write-gate.ts +8 -2
- package/packages/bundled-features/src/shared/index.ts +8 -0
- package/packages/bundled-features/src/shared/resource-image-formats.ts +31 -0
- package/packages/bundled-features/src/shared/sharp-input-limits.ts +7 -8
- package/packages/bundled-features/src/step-dispatcher/changes.json +8 -1
- package/packages/bundled-features/src/step-dispatcher/constants.ts +22 -0
- package/packages/bundled-features/src/step-dispatcher/deliver-dispatch-request.ts +236 -0
- package/packages/bundled-features/src/step-dispatcher/feature.ts +65 -118
- package/packages/bundled-features/src/step-dispatcher/webhook-runner.ts +40 -14
- package/packages/bundled-features/src/template-resolver/changes.json +81 -0
- package/packages/bundled-features/src/template-resolver/compile-document-body.ts +78 -12
- package/packages/bundled-features/src/template-resolver/compile-steps-block.ts +68 -0
- package/packages/bundled-features/src/template-resolver/constants.ts +11 -1
- package/packages/bundled-features/src/template-resolver/document-sanitizer.ts +3 -0
- package/packages/bundled-features/src/template-resolver/document-schema.ts +7 -1
- package/packages/bundled-features/src/template-resolver/document-steps.ts +114 -0
- package/packages/bundled-features/src/template-resolver/feature.ts +12 -0
- package/packages/bundled-features/src/template-resolver/handlers/bundle-import.ts +81 -39
- package/packages/bundled-features/src/template-resolver/handlers/collection-set.write.ts +4 -3
- package/packages/bundled-features/src/template-resolver/handlers/copy-locale.write.ts +111 -61
- package/packages/bundled-features/src/template-resolver/handlers/diff-to-system.query.ts +1 -0
- package/packages/bundled-features/src/template-resolver/handlers/import-bundle-system.write.ts +25 -15
- package/packages/bundled-features/src/template-resolver/handlers/import-bundle.write.ts +12 -1
- package/packages/bundled-features/src/template-resolver/handlers/overview.query.ts +12 -2
- package/packages/bundled-features/src/template-resolver/handlers/resource-upload.write.ts +48 -9
- package/packages/bundled-features/src/template-resolver/handlers/validate.query.ts +4 -1
- package/packages/bundled-features/src/template-resolver/index.ts +6 -1
- package/packages/bundled-features/src/template-resolver/layout-appearance.ts +25 -9
- package/packages/bundled-features/src/template-resolver/mail-constants.ts +4 -0
- package/packages/bundled-features/src/template-resolver/resource-image.ts +9 -16
- package/packages/bundled-features/src/template-resolver/seeding.ts +2 -0
- package/packages/bundled-features/src/template-resolver/store-template-resource.ts +390 -124
- package/packages/bundled-features/src/template-resolver/template-bundle.ts +4 -0
- package/packages/bundled-features/src/template-resolver/template-draft.ts +1 -1
- package/packages/bundled-features/src/template-resolver/template-meta.ts +8 -0
- package/packages/bundled-features/src/template-resolver/template-preview.ts +1 -1
- package/packages/bundled-features/src/template-resolver/template-resources.ts +2 -43
- package/packages/bundled-features/src/template-resolver/template-validation.ts +15 -9
- package/packages/bundled-features/src/template-resolver/web/document-editor-extensions.ts +34 -0
- package/packages/bundled-features/src/template-resolver/web/document-editor.tsx +3 -2
- package/packages/bundled-features/src/template-resolver/web/document-tiptap-editor.tsx +56 -11
- package/packages/bundled-features/src/template-resolver/web/document-toolbar-blocks.ts +6 -3
- package/packages/bundled-features/src/template-resolver/web/i18n.ts +7 -0
- package/packages/bundled-features/src/template-resolver/web/index.ts +1 -0
- package/packages/bundled-features/src/template-resolver/web/placeholder-line-editor.tsx +14 -5
- package/packages/bundled-features/src/tenant/changes.json +6 -0
- package/packages/bundled-features/src/tenant/handlers/update-member-roles.write.ts +3 -8
- package/packages/bundled-features/src/tenant/seeding.ts +33 -27
- package/packages/bundled-features/src/tenant-handover/move-entity-graph.ts +14 -3
- package/packages/bundled-features/src/tenant-lifecycle/changes.json +6 -0
- package/packages/bundled-features/src/tenant-lifecycle/run-tenant-destroy.ts +9 -1
- package/packages/bundled-features/src/tenant-lifecycle/stages.ts +9 -3
- package/packages/bundled-features/src/tier-engine/changes.json +12 -0
- package/packages/bundled-features/src/tier-engine/constants.ts +9 -0
- package/packages/bundled-features/src/tier-engine/entity.ts +9 -4
- package/packages/bundled-features/src/tier-engine/handlers/set-tenant-tier.write.ts +8 -5
- package/packages/bundled-features/src/tier-engine/index.ts +2 -0
- package/packages/bundled-features/src/user/constants.ts +1 -0
- package/packages/bundled-features/src/user/invited-global-roles.ts +2 -4
- package/packages/bundled-features/src/user-data-rights/changes.json +6 -0
- package/packages/bundled-features/src/user-data-rights/email-templates.ts +0 -1
- package/packages/bundled-features/src/user-data-rights/i18n.ts +5 -0
- package/packages/bundled-features/src/user-data-rights/lib/update-user-lifecycle.ts +13 -2
- package/packages/bundled-features/src/user-data-rights/run-forget-cleanup.ts +7 -1
- package/packages/bundled-features/src/waitlist/changes.json +18 -0
- package/packages/bundled-features/src/waitlist/feature.ts +1 -1
- package/packages/bundled-features/src/waitlist/handlers/invite.write.ts +35 -3
- package/packages/bundled-features/src/waitlist/handlers/reject.write.ts +2 -17
- package/packages/bundled-features/src/waitlist/handlers/submit.write.ts +33 -9
- package/packages/bundled-features/src/waitlist/i18n.ts +9 -0
- package/packages/bundled-features/src/waitlist/lib.ts +20 -0
- package/packages/bundled-features/src/workflow-runner/feature.ts +1 -1
- package/samples/apps/ui-walkthrough/src/run-config.ts +14 -1
- package/samples/apps/use-all-bundled/README.md +3 -13
- package/samples/apps/use-all-bundled/feature-manifest.json +4 -4
- package/samples/apps/use-all-bundled/scripts/check-coverage.ts +34 -118
- package/samples/apps/use-all-bundled/src/app/notes-feature.ts +1 -1
- package/samples/apps/use-all-bundled/src/run-config.ts +0 -3
- package/samples/recipes/auth-mfa/README.md +2 -1
- package/samples/recipes/auth-mfa/src/feature.ts +1 -0
- package/samples/recipes/custom-handlers/README.md +4 -3
- package/samples/recipes/custom-handlers/src/feature.ts +21 -12
- package/samples/recipes/dashboard-stats/README.md +38 -0
- package/samples/recipes/dashboard-stats/package.json +8 -0
- package/samples/recipes/dashboard-stats/src/feature.ts +104 -0
- package/samples/recipes/legal-pages/README.md +2 -2
- package/samples/recipes/managed-pages/README.md +2 -2
- package/samples/recipes/pdf-audit-export/README.md +2 -1
- package/samples/recipes/pdf-audit-export/package.json +1 -1
- package/samples/recipes/pdf-audit-export/src/feature.ts +68 -48
- package/samples/recipes/workflow-engine/src/db/queries/suspended-runs.ts +2 -2
- package/samples/apps/use-all-bundled/schema/generate.ts +0 -617
- package/samples/apps/use-all-bundled/schema/migrations/meta/0000_snapshot.json +0 -3055
- package/samples/apps/use-all-bundled/schema/migrations/meta/_journal.json +0 -13
- package/samples/apps/use-all-bundled/schema/schema.generated.ts +0 -94
- package/samples/apps/use-all-bundled/schema/schema.ts +0 -9
|
@@ -10,6 +10,7 @@ import type { ContentFormat, UpsertKind } from "../constants.js";
|
|
|
10
10
|
import type { TemplateWriteScope } from "../layout-regions.js";
|
|
11
11
|
import { imageResourceKeysOf } from "../linked-resources.js";
|
|
12
12
|
import { type TemplateResourceRow, templateResourcesTable } from "../table.js";
|
|
13
|
+
import { isSystemAdmin } from "../template-draft.js";
|
|
13
14
|
import { resolveTemplateVariables, systemPlaceholdersFor } from "../template-validation.js";
|
|
14
15
|
import { contentFormatSchema, kindSchema, localeSchema, templateSlugSchema } from "./shared.js";
|
|
15
16
|
import { evaluateTemplateWrite } from "./template-gates.js";
|
|
@@ -53,7 +54,9 @@ export async function validateTemplateDraft(
|
|
|
53
54
|
payload: TemplateDraftInput,
|
|
54
55
|
) {
|
|
55
56
|
const variables = resolveTemplateVariables(ctx.registry, payload.slug, payload.variableSchema);
|
|
56
|
-
const { slug, kind,
|
|
57
|
+
const { slug, kind, locale } = payload;
|
|
58
|
+
// The dry run must not promise what the caller's write handlers would refuse.
|
|
59
|
+
const scope: TemplateWriteScope = isSystemAdmin(user) ? payload.scope : "tenant";
|
|
57
60
|
const known = [
|
|
58
61
|
...(await knownResourceKeys(ctx.db, {
|
|
59
62
|
tenantId: SYSTEM_TENANT_ID,
|
|
@@ -16,6 +16,7 @@ export {
|
|
|
16
16
|
CONTENT_FORMATS,
|
|
17
17
|
type ContentFormat,
|
|
18
18
|
DEFAULT_MAIL_LAYOUT_SLUG,
|
|
19
|
+
DEFAULT_PDF_LAYOUT_SLUG,
|
|
19
20
|
DOCUMENT_HTML_KINDS,
|
|
20
21
|
type DocumentHtmlKind,
|
|
21
22
|
FALLBACK_LOCALE,
|
|
@@ -110,9 +111,11 @@ export {
|
|
|
110
111
|
} from "./qualified-names.js";
|
|
111
112
|
export { mapRecordToVariables } from "./record-mapping.js";
|
|
112
113
|
export {
|
|
114
|
+
type PreparedTemplateImage,
|
|
115
|
+
prepareTemplateResourceBeforeTransaction,
|
|
113
116
|
readTemplateResourceMaxBytes,
|
|
114
117
|
type StoredTemplateResource,
|
|
115
|
-
|
|
118
|
+
storePreparedTemplateResource,
|
|
116
119
|
} from "./store-template-resource.js";
|
|
117
120
|
export {
|
|
118
121
|
type TemplateResourceRow,
|
|
@@ -124,9 +127,11 @@ export {
|
|
|
124
127
|
isMailTemplateMeta,
|
|
125
128
|
type LayoutTemplateMeta,
|
|
126
129
|
MAIL_CATEGORIES,
|
|
130
|
+
MAIL_TONES,
|
|
127
131
|
type MailCategory,
|
|
128
132
|
type MailLayoutMeta,
|
|
129
133
|
type MailTemplateMeta,
|
|
134
|
+
type MailTone,
|
|
130
135
|
type PdfTemplateMeta,
|
|
131
136
|
parseTemplateMeta,
|
|
132
137
|
pdfAttachmentFileNamePatternSchema,
|
|
@@ -15,26 +15,42 @@ const FONT_FAMILIES = {
|
|
|
15
15
|
serif: "Georgia, 'Times New Roman', serif",
|
|
16
16
|
} as const;
|
|
17
17
|
|
|
18
|
-
const
|
|
18
|
+
const DEFAULT_BUTTON_COLOR = "#1f5468";
|
|
19
19
|
const BUTTON_BASE = "display:inline-block;padding:10px 20px;font-weight:600;text-decoration:none";
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
type ButtonStyle = NonNullable<MailLayoutMeta["buttonStyle"]>;
|
|
22
|
+
|
|
23
|
+
function buttonStyleCss(style: ButtonStyle, color: string): string {
|
|
24
|
+
switch (style) {
|
|
25
|
+
case "filled-rounded":
|
|
26
|
+
return `${BUTTON_BASE};border-radius:6px;background-color:${color};color:#ffffff`;
|
|
27
|
+
case "filled-square":
|
|
28
|
+
return `${BUTTON_BASE};background-color:${color};color:#ffffff`;
|
|
29
|
+
case "outline":
|
|
30
|
+
return `${BUTTON_BASE};border:2px solid ${color};border-radius:6px;color:${color}`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
26
33
|
|
|
27
34
|
export function isHexColor(value: string): boolean {
|
|
28
35
|
return HEX_COLOR_PATTERN.test(value);
|
|
29
36
|
}
|
|
30
37
|
|
|
31
|
-
|
|
38
|
+
// The branding accent colors the buttons only where the layout opted into the branding accent line.
|
|
39
|
+
export function mailLayoutAppearance(
|
|
40
|
+
meta: MailLayoutMeta | unknown,
|
|
41
|
+
brandingAccentColor?: string,
|
|
42
|
+
): MailLayoutAppearance {
|
|
32
43
|
const parsed = readMailLayoutMeta(meta);
|
|
44
|
+
const accentLine = (parsed.accentLine ?? "none") === "branding";
|
|
45
|
+
const buttonColor =
|
|
46
|
+
accentLine && brandingAccentColor !== undefined && isHexColor(brandingAccentColor)
|
|
47
|
+
? brandingAccentColor
|
|
48
|
+
: DEFAULT_BUTTON_COLOR;
|
|
33
49
|
return {
|
|
34
50
|
width: parsed.width ?? 600,
|
|
35
51
|
fontFamily: FONT_FAMILIES[parsed.font ?? "sans"],
|
|
36
52
|
outerBackground: parsed.outerBackground ?? "#f5f5f5",
|
|
37
|
-
accentLine
|
|
38
|
-
buttonStyle:
|
|
53
|
+
accentLine,
|
|
54
|
+
buttonStyle: buttonStyleCss(parsed.buttonStyle ?? "filled-rounded", buttonColor),
|
|
39
55
|
};
|
|
40
56
|
}
|
|
@@ -1,27 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
assertNotSvg,
|
|
3
|
+
isResourceImageFormat,
|
|
4
|
+
RESOURCE_IMAGE_FORMATS,
|
|
5
|
+
type ResourceImageContentType,
|
|
6
|
+
SHARP_INPUT_OPTIONS,
|
|
7
|
+
} from "../shared/index.js";
|
|
2
8
|
|
|
3
9
|
const MAX_RESOURCE_WIDTH = 1200;
|
|
4
10
|
|
|
5
|
-
const CONTENT_TYPE_BY_FORMAT = {
|
|
6
|
-
png: "image/png",
|
|
7
|
-
jpeg: "image/jpeg",
|
|
8
|
-
gif: "image/gif",
|
|
9
|
-
webp: "image/webp",
|
|
10
|
-
} as const;
|
|
11
|
-
|
|
12
|
-
type ResourceImageFormat = keyof typeof CONTENT_TYPE_BY_FORMAT;
|
|
13
|
-
|
|
14
11
|
export type NormalizedResourceImage = {
|
|
15
12
|
readonly data: Uint8Array;
|
|
16
|
-
readonly contentType:
|
|
13
|
+
readonly contentType: ResourceImageContentType;
|
|
17
14
|
readonly width: number;
|
|
18
15
|
readonly height: number;
|
|
19
16
|
};
|
|
20
17
|
|
|
21
|
-
function isResourceImageFormat(format: string | undefined): format is ResourceImageFormat {
|
|
22
|
-
return format !== undefined && Object.hasOwn(CONTENT_TYPE_BY_FORMAT, format);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
18
|
// Re-encodes an uploaded image: the stored content type comes from the decoded format, never
|
|
26
19
|
// from the client, and re-encoding drops metadata and anything appended to the file.
|
|
27
20
|
// sharp is imported lazily because every app loads template-resolver, few of them need an image decoder.
|
|
@@ -40,7 +33,7 @@ export async function normalizeResourceImage(data: Uint8Array): Promise<Normaliz
|
|
|
40
33
|
const { data: output, info } = await pipeline.toBuffer({ resolveWithObject: true });
|
|
41
34
|
return {
|
|
42
35
|
data: new Uint8Array(output),
|
|
43
|
-
contentType:
|
|
36
|
+
contentType: RESOURCE_IMAGE_FORMATS[format].contentType,
|
|
44
37
|
width: info.width,
|
|
45
38
|
height: info.height,
|
|
46
39
|
};
|
|
@@ -155,6 +155,8 @@ export async function seedSystemTemplate(
|
|
|
155
155
|
current?.title === rowFields.title &&
|
|
156
156
|
current?.variableSchema === rowFields.variableSchema &&
|
|
157
157
|
current?.meta === rowFields.meta &&
|
|
158
|
+
current?.status === rowFields.status &&
|
|
159
|
+
current?.parentTemplateId === rowFields.parentTemplateId &&
|
|
158
160
|
(linkedResources === undefined || current?.linkedResources === linkedResources)
|
|
159
161
|
) {
|
|
160
162
|
return { id: String(row.id) };
|