@jini-ai/cms 0.3.4 → 0.3.6
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/README.md +22 -17
- package/dist/content-types/agent-tools.d.ts.map +1 -1
- package/dist/content-types/agent-tools.js +1 -1
- package/dist/content-types/agent-tools.js.map +1 -1
- package/dist/content-types/errors.d.ts +19 -1
- package/dist/content-types/errors.d.ts.map +1 -1
- package/dist/content-types/errors.js +22 -1
- package/dist/content-types/errors.js.map +1 -1
- package/dist/content-types/index-provisioning.d.ts +56 -10
- package/dist/content-types/index-provisioning.d.ts.map +1 -1
- package/dist/content-types/index-provisioning.js +86 -13
- package/dist/content-types/index-provisioning.js.map +1 -1
- package/dist/content-types/index.d.ts +15 -3
- package/dist/content-types/index.d.ts.map +1 -1
- package/dist/content-types/index.js +14 -2
- package/dist/content-types/index.js.map +1 -1
- package/dist/content-types/lifecycle.js +3 -3
- package/dist/content-types/lifecycle.js.map +1 -1
- package/dist/content-types/types.d.ts +64 -3
- package/dist/content-types/types.d.ts.map +1 -1
- package/dist/content-types/types.js +67 -3
- package/dist/content-types/types.js.map +1 -1
- package/dist/content-types/write-service.d.ts +18 -3
- package/dist/content-types/write-service.d.ts.map +1 -1
- package/dist/content-types/write-service.js +28 -2
- package/dist/content-types/write-service.js.map +1 -1
- package/dist/core/ports.d.ts +12 -2
- package/dist/core/ports.d.ts.map +1 -1
- package/dist/entries/field-validation.d.ts.map +1 -1
- package/dist/entries/field-validation.js +96 -1
- package/dist/entries/field-validation.js.map +1 -1
- package/dist/entries/write-service.d.ts +14 -0
- package/dist/entries/write-service.d.ts.map +1 -1
- package/dist/entries/write-service.js +2 -2
- package/dist/entries/write-service.js.map +1 -1
- package/dist/identity/admin-crud-service.d.ts +28 -0
- package/dist/identity/admin-crud-service.d.ts.map +1 -1
- package/dist/identity/admin-crud-service.js +30 -0
- package/dist/identity/admin-crud-service.js.map +1 -1
- package/dist/identity/auth-service.d.ts +32 -1
- package/dist/identity/auth-service.d.ts.map +1 -1
- package/dist/identity/auth-service.js +44 -15
- package/dist/identity/auth-service.js.map +1 -1
- package/dist/identity/index.d.ts +4 -1
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +4 -1
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/seed.d.ts +14 -2
- package/dist/identity/seed.d.ts.map +1 -1
- package/dist/identity/seed.js +197 -45
- package/dist/identity/seed.js.map +1 -1
- package/dist/media/blob-store.fs.d.ts +7 -0
- package/dist/media/blob-store.fs.d.ts.map +1 -1
- package/dist/media/blob-store.fs.js +12 -2
- package/dist/media/blob-store.fs.js.map +1 -1
- package/dist/media/content-type-sniffer.d.ts +1 -1
- package/dist/media/content-type-sniffer.d.ts.map +1 -1
- package/dist/media/content-type-sniffer.js +52 -4
- package/dist/media/content-type-sniffer.js.map +1 -1
- package/dist/media/html-attributes.d.ts +90 -0
- package/dist/media/html-attributes.d.ts.map +1 -0
- package/dist/media/html-attributes.js +161 -0
- package/dist/media/html-attributes.js.map +1 -0
- package/dist/media/image-transformer.sharp.d.ts +35 -1
- package/dist/media/image-transformer.sharp.d.ts.map +1 -1
- package/dist/media/image-transformer.sharp.js +44 -2
- package/dist/media/image-transformer.sharp.js.map +1 -1
- package/dist/media/index.d.ts +2 -1
- package/dist/media/index.d.ts.map +1 -1
- package/dist/media/index.js +2 -1
- package/dist/media/index.js.map +1 -1
- package/dist/media/media-service.d.ts +93 -1
- package/dist/media/media-service.d.ts.map +1 -1
- package/dist/media/media-service.js +254 -7
- package/dist/media/media-service.js.map +1 -1
- package/dist/media/ports.d.ts +8 -1
- package/dist/media/ports.d.ts.map +1 -1
- package/dist/media/rendition-service.d.ts +7 -1
- package/dist/media/rendition-service.d.ts.map +1 -1
- package/dist/media/rendition-service.js +10 -4
- package/dist/media/rendition-service.js.map +1 -1
- package/dist/media/repo.memory.d.ts +4 -0
- package/dist/media/repo.memory.d.ts.map +1 -1
- package/dist/media/repo.memory.js +3 -0
- package/dist/media/repo.memory.js.map +1 -1
- package/dist/media/tool-registrations.d.ts +6 -2
- package/dist/media/tool-registrations.d.ts.map +1 -1
- package/dist/media/tool-registrations.js +19 -2
- package/dist/media/tool-registrations.js.map +1 -1
- package/dist/media/types.d.ts +26 -0
- package/dist/media/types.d.ts.map +1 -1
- package/dist/media/types.js.map +1 -1
- package/dist/navigation/agent-tools.d.ts.map +1 -1
- package/dist/navigation/agent-tools.js +8 -1
- package/dist/navigation/agent-tools.js.map +1 -1
- package/dist/navigation/index.d.ts +10 -1
- package/dist/navigation/index.d.ts.map +1 -1
- package/dist/navigation/index.js +10 -1
- package/dist/navigation/index.js.map +1 -1
- package/dist/navigation/menu-service.d.ts +60 -4
- package/dist/navigation/menu-service.d.ts.map +1 -1
- package/dist/navigation/menu-service.js +106 -8
- package/dist/navigation/menu-service.js.map +1 -1
- package/package.json +1 -1
|
@@ -54,6 +54,7 @@ import { createHash } from "node:crypto";
|
|
|
54
54
|
import { MediaConflictError, MediaNotFoundError, MediaSourceImmutableError, MediaStillReferencedError, MediaValidationError, } from "./types.js";
|
|
55
55
|
import { withSha256Lock } from "./blob-gc-lock.js";
|
|
56
56
|
import { tombstoneBlobIfUnreferenced } from "./blob-gc.js";
|
|
57
|
+
import { describeMediaHtmlAttributeError, parseMediaHtmlAttributes } from "./html-attributes.js";
|
|
57
58
|
export { MediaConflictError, MediaNotFoundError, MediaSourceImmutableError, MediaStillReferencedError, MediaValidationError, };
|
|
58
59
|
/** Default byte-size cap (this pass's stand-in for the real ingress policy's streaming cap). */
|
|
59
60
|
export const DEFAULT_MAX_UPLOAD_BYTES = 10 * 1024 * 1024; // 10 MiB
|
|
@@ -63,6 +64,14 @@ export const DEFAULT_MAX_UPLOAD_BYTES = 10 * 1024 * 1024; // 10 MiB
|
|
|
63
64
|
* that sanitizer is not built in this pass, so SVG upload is rejected rather
|
|
64
65
|
* than accepted unsanitized.
|
|
65
66
|
*
|
|
67
|
+
* `image/avif` (owner-directed, 2026-09-06): a fifth still-image type, on the
|
|
68
|
+
* same footing as the four above — `content-type-sniffer.ts` identifies it by
|
|
69
|
+
* ISO-BMFF brand and the installed `sharp`/libvips build decodes it, so it
|
|
70
|
+
* flows through the ordinary transform/rendition pipeline and is re-encoded
|
|
71
|
+
* like any other image. Adding it required a matching sniffer fix, not just
|
|
72
|
+
* this line: AVIF shares MP4's `ftyp` container tag, so before that fix an
|
|
73
|
+
* AVIF was sniffed as `video/mp4` and served as an unplayable video.
|
|
74
|
+
*
|
|
66
75
|
* `video/mp4`/`video/webm` (owner-directed, 2026-08-24): the two formats
|
|
67
76
|
* `content-type-sniffer.ts` already recognizes by magic bytes. Unlike the four
|
|
68
77
|
* image types above, an accepted video is never re-encoded — there is no
|
|
@@ -78,6 +87,7 @@ export const DEFAULT_ALLOWED_MIME_TYPES = new Set([
|
|
|
78
87
|
"image/png",
|
|
79
88
|
"image/webp",
|
|
80
89
|
"image/gif",
|
|
90
|
+
"image/avif",
|
|
81
91
|
"video/mp4",
|
|
82
92
|
"video/webm",
|
|
83
93
|
]);
|
|
@@ -108,6 +118,103 @@ function deriveTitleFromFilename(filename) {
|
|
|
108
118
|
const base = filename.trim().replace(/\.[^./\\]+$/, "");
|
|
109
119
|
return base.trim() || "Untitled";
|
|
110
120
|
}
|
|
121
|
+
/** Shared slug-format rule (2026-09-07) — same shape as `post`'s `SLUG_FORMAT_PATTERN`: lowercase
|
|
122
|
+
* letters, digits, and dashes only. Media slugs have no reserved-word list (`post`'s `admin`/`api`
|
|
123
|
+
* exclusions exist because a post slug can become a literal URL path segment a route dispatches
|
|
124
|
+
* on; a media slug is only ever a lookup key, never a route itself, so that hazard doesn't apply). */
|
|
125
|
+
const MEDIA_SLUG_FORMAT_PATTERN = /^[a-z0-9-]+$/;
|
|
126
|
+
/**
|
|
127
|
+
* Slugs that spell a UUID are refused outright (2026-09-07 fix).
|
|
128
|
+
*
|
|
129
|
+
* A lowercase UUID is `[a-z0-9-]+` character for character, so {@link MEDIA_SLUG_FORMAT_PATTERN}
|
|
130
|
+
* happily accepted one — and {@link findMediaByIdOrSlug} used to resolve SLUG FIRST, so pointing one
|
|
131
|
+
* asset's slug at another asset's `id` silently took over every reference already authored against
|
|
132
|
+
* that id (every `/m/{id}/…` URL a host's renderer has ever emitted for the victim). That resolution
|
|
133
|
+
* order is now id-first, which closes the hijack for rows that already carry such a slug; this rule
|
|
134
|
+
* is the write-path half — a slug that can only ever shadow an id is not a slug anyone wants, so it
|
|
135
|
+
* is refused where a human can still see why rather than silently shadowed at read time.
|
|
136
|
+
*
|
|
137
|
+
* Shape-based, not a lookup: it rejects EVERY UUID-shaped value, not only ones that currently
|
|
138
|
+
* collide, so a slug cannot become a hijack later when some future upload happens to mint that id.
|
|
139
|
+
* Ordinary hex-and-dash slugs (`abc-123-def`, `2026-09-07-launch-clip`) are unaffected — nothing but
|
|
140
|
+
* the exact 8-4-4-4-12 hex grouping matches.
|
|
141
|
+
*/
|
|
142
|
+
const MEDIA_SLUG_UUID_SHAPE_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
|
|
143
|
+
/** Shared slug max-length rule (2026-09-07) — same bound as `post.ts`'s `MAX_SLUG_LENGTH`, reused
|
|
144
|
+
* rather than inventing a second number. `post.ts` only enforces this on its EXPLICIT/caller-
|
|
145
|
+
* supplied slug path (`resolveExplicitSlug`, reject-with-error); its own title-derived path is
|
|
146
|
+
* uncapped. Media applies the same bound to BOTH paths, but differently per path's nature: an
|
|
147
|
+
* explicit edit ({@link resolveSlugForUpdate}) rejects with an error, exactly like `post.ts`,
|
|
148
|
+
* because a human typed it and should see why it was refused; a derived slug
|
|
149
|
+
* ({@link deriveUniqueMediaSlug}) truncates instead of rejecting, because nothing is prompting a
|
|
150
|
+
* human for a shorter value — silently truncating an internally-derived value is the same
|
|
151
|
+
* "coerce, don't fail" convention `deriveTitleFromFilename`/`slugifyMediaTitle` already use. */
|
|
152
|
+
const MEDIA_MAX_SLUG_LENGTH = 120;
|
|
153
|
+
function isValidMediaSlugFormat(slug) {
|
|
154
|
+
return MEDIA_SLUG_FORMAT_PATTERN.test(slug) && !MEDIA_SLUG_UUID_SHAPE_PATTERN.test(slug);
|
|
155
|
+
}
|
|
156
|
+
/** Truncates a slug candidate to `maxLength`, stripping a trailing dash the cut can introduce (so a
|
|
157
|
+
* truncation never leaves a slug ending mid-word with a dangling "-"), falling back to `"untitled"`
|
|
158
|
+
* if nothing legible survives (only reachable when `maxLength` itself is tiny, e.g. while reserving
|
|
159
|
+
* room for a long numeric suffix — see {@link deriveUniqueMediaSlug}). A no-op when `candidate` is
|
|
160
|
+
* already within bounds. */
|
|
161
|
+
function capSlugCandidate(candidate, maxLength) {
|
|
162
|
+
if (candidate.length <= maxLength)
|
|
163
|
+
return candidate;
|
|
164
|
+
return candidate.slice(0, Math.max(maxLength, 0)).replace(/-+$/, "") || "untitled";
|
|
165
|
+
}
|
|
166
|
+
/** Turns free text into a slug candidate: lowercase, non-alphanumeric runs collapsed to one dash,
|
|
167
|
+
* leading/trailing dashes trimmed. Same algorithm as `post.ts`'s private `slugify` (duplicated, not
|
|
168
|
+
* imported — cross-repo: `post.ts` lives in Tovu, this file in `@jini-ai/cms`; this codebase's own
|
|
169
|
+
* precedent for a small hand-copied helper mirrored across a repo boundary is `DEFAULT_ALLOWED_MIME_TYPES`
|
|
170
|
+
* vs. Tovu's `FILE_HANDLER_ALLOWED_MIME_TYPES`/`IMPORTABLE_CONTENT_TYPES`). Never throws and never
|
|
171
|
+
* returns `undefined` — an all-punctuation input collapses to `""`, which every caller here treats
|
|
172
|
+
* as "derive nothing, fall back to a fixed default" rather than a malformed-input error. */
|
|
173
|
+
function slugifyMediaTitle(title) {
|
|
174
|
+
return title
|
|
175
|
+
.toLowerCase()
|
|
176
|
+
.trim()
|
|
177
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
178
|
+
.replace(/^-+|-+$/g, "");
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Derives a unique-per-workspace slug from `title`, suffixing `-2`, `-3`, … on collision — the
|
|
182
|
+
* identical loop shape `post.ts`'s `createPost` uses for its own derived-slug path. Shared by
|
|
183
|
+
* {@link uploadMedia} (derive-on-create) and the backfill a host runs once for pre-existing rows
|
|
184
|
+
* with no slug yet (see Tovu's `development/scripts/backfill-media-slugs.ts`).
|
|
185
|
+
*
|
|
186
|
+
* `base` falls back to `"untitled"` when `title` slugifies to the empty string (all-punctuation or
|
|
187
|
+
* non-Latin titles that `slugifyMediaTitle` strips to nothing) — `uploadMedia`'s own title is never
|
|
188
|
+
* empty (`deriveTitleFromFilename` guarantees a non-empty string), but the backfill script
|
|
189
|
+
* (`development/scripts/backfill-media-slugs.ts`, Tovu) calls this against arbitrary pre-existing
|
|
190
|
+
* titles, so this fallback is load-bearing there, not just a defensive floor. Note this is the SAME
|
|
191
|
+
* fallback base every empty-slugifying title collapses onto, so two such titles in one workspace
|
|
192
|
+
* collide on `"untitled"` and are disambiguated by the ordinary suffix loop below exactly like any
|
|
193
|
+
* other collision — an empty derived slug is never inserted as a bare empty string (which a unique
|
|
194
|
+
* index would treat as one specific value, not "no value," and a SECOND empty string would then
|
|
195
|
+
* violate it outright rather than surfacing a friendly conflict).
|
|
196
|
+
*
|
|
197
|
+
* `base` (after the empty-string fallback) is also capped at {@link MEDIA_MAX_SLUG_LENGTH} via
|
|
198
|
+
* {@link capSlugCandidate} before any suffix is considered — a long machine-generated title must not
|
|
199
|
+
* produce an equally long slug. When a collision forces a suffix, the BASE (never the suffix itself)
|
|
200
|
+
* is re-truncated just enough to keep the whole `base-suffix` candidate within the cap, so every
|
|
201
|
+
* candidate this loop ever checks already obeys the length bound, not just the first one.
|
|
202
|
+
*
|
|
203
|
+
* @complexity O(n) repo round-trips in the worst case, where n is the number of prior collisions on
|
|
204
|
+
* the same base slug — bounded in practice by how many same-titled uploads exist in one workspace.
|
|
205
|
+
*/
|
|
206
|
+
async function deriveUniqueMediaSlug(mediaRepo, workspaceId, title) {
|
|
207
|
+
const base = capSlugCandidate(slugifyMediaTitle(title) || "untitled", MEDIA_MAX_SLUG_LENGTH);
|
|
208
|
+
let slug = base;
|
|
209
|
+
let suffix = 1;
|
|
210
|
+
while (await mediaRepo.findBySlug({ workspaceId, slug })) {
|
|
211
|
+
suffix += 1;
|
|
212
|
+
const suffixText = `-${suffix}`;
|
|
213
|
+
const truncatedBase = capSlugCandidate(base, MEDIA_MAX_SLUG_LENGTH - suffixText.length);
|
|
214
|
+
slug = `${truncatedBase}${suffixText}`;
|
|
215
|
+
}
|
|
216
|
+
return slug;
|
|
217
|
+
}
|
|
111
218
|
/**
|
|
112
219
|
* Validates, hashes, dedups by `(workspaceId, sha256)`, and writes a new media
|
|
113
220
|
* asset. Ordering (INV-1a): bytes are written (or found already
|
|
@@ -126,7 +233,8 @@ function deriveTitleFromFilename(filename) {
|
|
|
126
233
|
*
|
|
127
234
|
* @complexity O(1) — one hash, one blob lookup, at most one blob write, one
|
|
128
235
|
* media write, one rendition write (the lock itself adds O(1) scheduling
|
|
129
|
-
* overhead, not a scan)
|
|
236
|
+
* overhead, not a scan) — plus {@link deriveUniqueMediaSlug}'s own O(n) in the number of prior
|
|
237
|
+
* same-base-slug collisions (see that function's doc).
|
|
130
238
|
* @overallScore 100
|
|
131
239
|
*/
|
|
132
240
|
export async function uploadMedia(required, optional = {}) {
|
|
@@ -170,10 +278,13 @@ export async function uploadMedia(required, optional = {}) {
|
|
|
170
278
|
});
|
|
171
279
|
return written.storageKey;
|
|
172
280
|
});
|
|
281
|
+
const title = deriveTitleFromFilename(input.filename);
|
|
282
|
+
const slug = await deriveUniqueMediaSlug(deps.mediaRepo, input.workspaceId, title);
|
|
173
283
|
const media = {
|
|
174
284
|
id: deps.idGen.newId(),
|
|
175
285
|
workspaceId: input.workspaceId,
|
|
176
|
-
title
|
|
286
|
+
title,
|
|
287
|
+
slug,
|
|
177
288
|
alt: input.alt?.trim() ?? "",
|
|
178
289
|
caption: input.caption?.trim() ?? "",
|
|
179
290
|
credit: input.credit?.trim() ?? "",
|
|
@@ -187,6 +298,7 @@ export async function uploadMedia(required, optional = {}) {
|
|
|
187
298
|
width: null,
|
|
188
299
|
height: null,
|
|
189
300
|
cssClass: null,
|
|
301
|
+
htmlAttributes: null,
|
|
190
302
|
};
|
|
191
303
|
await deps.mediaRepo.save(media);
|
|
192
304
|
await deps.renditionRepo.save({
|
|
@@ -228,12 +340,45 @@ export async function getMediaById(required, _optional = {}) {
|
|
|
228
340
|
return { media };
|
|
229
341
|
}
|
|
230
342
|
/**
|
|
231
|
-
*
|
|
232
|
-
*
|
|
343
|
+
* Resolves a media asset by either its id or its slug — ID FIRST, slug second. The slug is the
|
|
344
|
+
* handle a human typed into an embed marker or a hand-authored `<img>`/`<video>` tag; the id is the
|
|
345
|
+
* opaque UUID every existing reference already uses, and every URL a host's renderer emits.
|
|
346
|
+
*
|
|
347
|
+
* THE ORDER IS A SECURITY PROPERTY, not a preference (2026-09-07). This resolved slug-first, on the
|
|
348
|
+
* documented assumption that "an id never collides with a slug in practice since slugs pass through
|
|
349
|
+
* {@link isValidMediaSlugFormat}". That assumption was false: a lowercase UUID matched the old slug
|
|
350
|
+
* pattern `[a-z0-9-]+` exactly, so setting asset B's slug to asset A's id made every `/m/{A.id}/…`
|
|
351
|
+
* URL — the ones a renderer emitted for A, already live in published pages — resolve to B instead.
|
|
352
|
+
* An id is minted by the system and is never a value a human chooses, so it must always win; the
|
|
353
|
+
* write path additionally refuses UUID-shaped slugs now (see
|
|
354
|
+
* {@link MEDIA_SLUG_UUID_SHAPE_PATTERN}), but ordering is what protects rows written before that
|
|
355
|
+
* rule existed. Id-first costs nothing on the slug path: a real slug simply misses the id lookup and
|
|
356
|
+
* falls through.
|
|
357
|
+
*
|
|
358
|
+
* Never throws (unlike {@link getMediaById}): every call site that needs this (an embed resolver, a
|
|
359
|
+
* public rendition route) already has its own REQ-27-style non-throwing-miss contract, so this
|
|
360
|
+
* returns `null` on failure and lets the caller apply its own not-found handling rather than forcing
|
|
361
|
+
* one shape on every caller.
|
|
362
|
+
*
|
|
363
|
+
* @complexity O(1) — at most two indexed repo lookups, short-circuited on the first hit.
|
|
364
|
+
*/
|
|
365
|
+
export async function findMediaByIdOrSlug(required, _optional = {}) {
|
|
366
|
+
const { deps, input } = required;
|
|
367
|
+
const byId = await deps.mediaRepo.findById({ workspaceId: input.workspaceId, id: input.idOrSlug });
|
|
368
|
+
if (byId)
|
|
369
|
+
return byId;
|
|
370
|
+
return deps.mediaRepo.findBySlug({ workspaceId: input.workspaceId, slug: input.idOrSlug });
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Updates editorial-only fields (title/alt/caption/credit/slug/width/height/cssClass).
|
|
374
|
+
* `source.sha256` is write-once — this function's input type has no `sha256` field,
|
|
233
375
|
* so there is no code path here that can touch it (see `resolveWriteOnceSource`
|
|
234
376
|
* doc for the directly-tested invariant this relies on).
|
|
235
377
|
*
|
|
236
|
-
*
|
|
378
|
+
* `slug` (2026-09-07) is validated and uniqueness-checked by {@link resolveSlugForUpdate} when
|
|
379
|
+
* provided; every other field keeps its pre-existing undefined-means-unchanged contract.
|
|
380
|
+
*
|
|
381
|
+
* @complexity O(1) plus {@link resolveSlugForUpdate}'s own O(1) when `input.slug` is provided.
|
|
237
382
|
* @overallScore 100
|
|
238
383
|
*/
|
|
239
384
|
/** Validates a `width`/`height` override: must be a positive integer. `null` (explicit clear) and
|
|
@@ -243,6 +388,54 @@ function assertPositiveIntegerOrThrow(value, field) {
|
|
|
243
388
|
throw new MediaValidationError(`media.${field} must be a positive integer, got ${value}`);
|
|
244
389
|
}
|
|
245
390
|
}
|
|
391
|
+
/**
|
|
392
|
+
* Validates and normalizes an explicit `slug` edit, then enforces per-workspace uniqueness against
|
|
393
|
+
* every OTHER row — an app-level courtesy check, not the enforcement itself (see `MediaRecord.slug`'s
|
|
394
|
+
* doc): the host's DB unique index is what actually prevents two rows from landing on the same slug
|
|
395
|
+
* under a concurrent write; this check only exists so a normal, non-racing caller sees a clear
|
|
396
|
+
* `MediaConflictError` naming the conflict instead of a raw constraint-violation message surfacing
|
|
397
|
+
* from whatever the host's repo adapter throws. Mirrors `post.ts`'s `assertSlugAvailableForUpdate`
|
|
398
|
+
* (same "claiming your own current slug is not a conflict" rule).
|
|
399
|
+
*
|
|
400
|
+
* @complexity O(1) — one format check, one uniqueness lookup.
|
|
401
|
+
*/
|
|
402
|
+
async function resolveSlugForUpdate(mediaRepo, workspaceId, id, rawSlug) {
|
|
403
|
+
const slug = rawSlug.trim().toLowerCase();
|
|
404
|
+
if (!slug || !isValidMediaSlugFormat(slug)) {
|
|
405
|
+
throw new MediaValidationError("slug must use lowercase letters, numbers, and dashes, and must not be shaped like a UUID");
|
|
406
|
+
}
|
|
407
|
+
// Same bound and rejection style as `post.ts`'s `resolveExplicitSlug` — a human typed this value,
|
|
408
|
+
// so it is refused with a clear reason rather than silently truncated (unlike the derived-on-
|
|
409
|
+
// upload path, see `MEDIA_MAX_SLUG_LENGTH`'s doc).
|
|
410
|
+
if (slug.length > MEDIA_MAX_SLUG_LENGTH) {
|
|
411
|
+
throw new MediaValidationError(`slug must be ${MEDIA_MAX_SLUG_LENGTH} characters or fewer`);
|
|
412
|
+
}
|
|
413
|
+
const duplicate = await mediaRepo.findBySlug({ workspaceId, slug });
|
|
414
|
+
if (duplicate && duplicate.id !== id) {
|
|
415
|
+
throw new MediaConflictError(`slug '${slug}' is already used by media '${duplicate.id}'`);
|
|
416
|
+
}
|
|
417
|
+
return slug;
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Validates an explicit `htmlAttributes` edit against `html-attributes.ts`'s allowlist — a stored-
|
|
421
|
+
* XSS boundary, not a syntax convenience (see `MediaRecord.htmlAttributes`'s own doc). Throws
|
|
422
|
+
* `MediaValidationError` naming the exact rejected attribute the moment `parseMediaHtmlAttributes`
|
|
423
|
+
* reports one; the caller (`updateMediaMetadata`) must never reach its own `save()` call when this
|
|
424
|
+
* throws, so an invalid value is never partially or fully persisted. A value that validates but
|
|
425
|
+
* trims to empty stores as `null`, matching `cssClass`'s identical "empty means unset" convention.
|
|
426
|
+
*
|
|
427
|
+
* @complexity O(n) in the input string's length (one `parseMediaHtmlAttributes` pass).
|
|
428
|
+
*/
|
|
429
|
+
function resolveHtmlAttributesForUpdate(rawValue) {
|
|
430
|
+
const trimmed = rawValue.trim();
|
|
431
|
+
if (trimmed === "")
|
|
432
|
+
return null;
|
|
433
|
+
const parsed = parseMediaHtmlAttributes(trimmed);
|
|
434
|
+
if (parsed.error) {
|
|
435
|
+
throw new MediaValidationError(`media.htmlAttributes: ${describeMediaHtmlAttributeError(parsed.error)}`);
|
|
436
|
+
}
|
|
437
|
+
return trimmed;
|
|
438
|
+
}
|
|
246
439
|
export async function updateMediaMetadata(required, _optional = {}) {
|
|
247
440
|
const { deps, input } = required;
|
|
248
441
|
const existing = await deps.mediaRepo.findById({ workspaceId: input.workspaceId, id: input.id });
|
|
@@ -252,15 +445,29 @@ export async function updateMediaMetadata(required, _optional = {}) {
|
|
|
252
445
|
assertPositiveIntegerOrThrow(input.width, "width");
|
|
253
446
|
if (input.height !== undefined && input.height !== null)
|
|
254
447
|
assertPositiveIntegerOrThrow(input.height, "height");
|
|
448
|
+
const slug = input.slug !== undefined
|
|
449
|
+
? await resolveSlugForUpdate(deps.mediaRepo, input.workspaceId, input.id, input.slug)
|
|
450
|
+
: existing.slug;
|
|
451
|
+
// Validated BEFORE the record is built (same "fail before any write" discipline `assertPositive
|
|
452
|
+
// IntegerOrThrow` above already follows) — an invalid value must never reach `save()`.
|
|
453
|
+
const htmlAttributes = input.htmlAttributes !== undefined
|
|
454
|
+
? input.htmlAttributes === null
|
|
455
|
+
? null
|
|
456
|
+
: resolveHtmlAttributesForUpdate(input.htmlAttributes)
|
|
457
|
+
: existing.htmlAttributes;
|
|
255
458
|
const media = {
|
|
256
459
|
...existing,
|
|
460
|
+
// `title` and `slug` are deliberately independent (see `MediaRecord.slug`'s doc): renaming the
|
|
461
|
+
// title never recomputes `slug`, and editing `slug` never touches `title`.
|
|
257
462
|
title: input.title !== undefined ? input.title.trim() || existing.title : existing.title,
|
|
463
|
+
slug,
|
|
258
464
|
alt: input.alt !== undefined ? input.alt.trim() : existing.alt,
|
|
259
465
|
caption: input.caption !== undefined ? input.caption.trim() : existing.caption,
|
|
260
466
|
credit: input.credit !== undefined ? input.credit.trim() : existing.credit,
|
|
261
467
|
width: input.width !== undefined ? input.width : existing.width,
|
|
262
468
|
height: input.height !== undefined ? input.height : existing.height,
|
|
263
469
|
cssClass: input.cssClass !== undefined ? (input.cssClass === null ? null : input.cssClass.trim() || null) : existing.cssClass,
|
|
470
|
+
htmlAttributes,
|
|
264
471
|
updatedAt: deps.clock.nowIso(),
|
|
265
472
|
version: existing.version + 1,
|
|
266
473
|
};
|
|
@@ -333,13 +540,53 @@ export async function purgeMedia(required, _optional = {}) {
|
|
|
333
540
|
`where-used index, which is not implemented — see purgeMedia's doc comment)`,
|
|
334
541
|
]);
|
|
335
542
|
}
|
|
543
|
+
await removeMediaRowsAndTombstoneBlob(deps, {
|
|
544
|
+
workspaceId: input.workspaceId,
|
|
545
|
+
id: input.id,
|
|
546
|
+
sha256: existing.source.sha256,
|
|
547
|
+
});
|
|
548
|
+
return { purged: true };
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* Shared row/blob cleanup: removes an asset's renditions and media row, then tombstones its blob
|
|
552
|
+
* if-and-only-if no other active media row in the workspace still references the same sha256 (the
|
|
553
|
+
* same predicate {@link tombstoneBlobIfUnreferenced} always applies). Used by both `purgeMedia`
|
|
554
|
+
* (after its trash guard passes) and {@link rollbackUploadedMedia} (an unconditional internal
|
|
555
|
+
* compensating rollback) — the same three-step deletion, triggered from two different callers.
|
|
556
|
+
*
|
|
557
|
+
* @complexity O(n) in the workspace's media row count, inherited from the tombstone-pass's
|
|
558
|
+
* `isBlobUnreferenced` scan.
|
|
559
|
+
*/
|
|
560
|
+
async function removeMediaRowsAndTombstoneBlob(deps, input) {
|
|
336
561
|
await deps.renditionRepo.removeByAsset({ workspaceId: input.workspaceId, assetId: input.id });
|
|
337
562
|
await deps.mediaRepo.remove({ workspaceId: input.workspaceId, id: input.id });
|
|
338
563
|
const clock = deps.clock ?? { nowIso: () => new Date().toISOString() };
|
|
339
564
|
await tombstoneBlobIfUnreferenced({
|
|
340
565
|
deps: { mediaRepo: deps.mediaRepo, blobRepo: deps.blobRepo, clock },
|
|
341
|
-
input: { workspaceId: input.workspaceId, sha256:
|
|
566
|
+
input: { workspaceId: input.workspaceId, sha256: input.sha256 },
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* Compensating rollback for {@link uploadMedia}: removes the rendition + media rows it just wrote
|
|
571
|
+
* and tombstones the blob if no other active media row in the workspace still references its
|
|
572
|
+
* sha256 (delegates to {@link removeMediaRowsAndTombstoneBlob}, `purgeMedia`'s own cleanup step).
|
|
573
|
+
*
|
|
574
|
+
* For a caller-side step that runs AFTER `uploadMedia()` has already committed and then fails
|
|
575
|
+
* (e.g. `tool-registrations.ts`'s optional `recordUploadContentType` hook) — without this, the
|
|
576
|
+
* rows `uploadMedia()` wrote survive as orphans (bytes and/or rows nothing points at) even though
|
|
577
|
+
* the caller sees the whole upload as failed. Unlike `purgeMedia`, this performs no trashed-status
|
|
578
|
+
* guard: it is an internal compensating action for a partially-failed operation, not a user-facing
|
|
579
|
+
* delete.
|
|
580
|
+
*
|
|
581
|
+
* @complexity O(n) in the workspace's media row count, inherited from
|
|
582
|
+
* {@link removeMediaRowsAndTombstoneBlob}.
|
|
583
|
+
*/
|
|
584
|
+
export async function rollbackUploadedMedia(required, _optional = {}) {
|
|
585
|
+
const { deps, input } = required;
|
|
586
|
+
await removeMediaRowsAndTombstoneBlob(deps, {
|
|
587
|
+
workspaceId: input.workspaceId,
|
|
588
|
+
id: input.media.id,
|
|
589
|
+
sha256: input.media.source.sha256,
|
|
342
590
|
});
|
|
343
|
-
return { purged: true };
|
|
344
591
|
}
|
|
345
592
|
//# sourceMappingURL=media-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-service.js","sourceRoot":"","sources":["../../src/media/media-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"media-service.js","sourceRoot":"","sources":["../../src/media/media-service.ts"],"names":[],"mappings":"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"}
|
package/dist/media/ports.d.ts
CHANGED
|
@@ -31,11 +31,18 @@ export interface MediaRepoPort {
|
|
|
31
31
|
workspaceId: UUID;
|
|
32
32
|
id: UUID;
|
|
33
33
|
}): Promise<MediaRecord | null>;
|
|
34
|
+
/** Second lookup key (2026-09-07) — `MediaRecord.slug`'s own doc has the full identity-model
|
|
35
|
+
* rationale. Mirrors `AssetBlobRepoPort.findByHash`'s shape: one indexed field, one row or `null`. */
|
|
36
|
+
findBySlug(required: {
|
|
37
|
+
workspaceId: UUID;
|
|
38
|
+
slug: string;
|
|
39
|
+
}): Promise<MediaRecord | null>;
|
|
34
40
|
list(required: {
|
|
35
41
|
workspaceId: UUID;
|
|
36
42
|
}): Promise<MediaRecord[]>;
|
|
37
43
|
save(record: MediaRecord): Promise<void>;
|
|
38
|
-
/** Hard delete —
|
|
44
|
+
/** Hard delete — called by `purgeMedia` after the trash guard passes, and by
|
|
45
|
+
* `rollbackUploadedMedia` as an unconditional compensating rollback for a failed upload. */
|
|
39
46
|
remove(required: {
|
|
40
47
|
workspaceId: UUID;
|
|
41
48
|
id: UUID;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/media/ports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC;QAAC,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACjF,IAAI,CAAC,QAAQ,EAAE;QAAE,WAAW,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/media/ports.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,13 @@ export interface ResolveMediaRenditionDeps {
|
|
|
13
13
|
}
|
|
14
14
|
export interface ResolveMediaRenditionInput {
|
|
15
15
|
workspaceId: UUID;
|
|
16
|
-
assetId
|
|
16
|
+
/** The `{assetId}` path segment, verbatim — despite the name, this may be either the asset's real
|
|
17
|
+
* `id` (a UUID) OR its `slug` (2026-09-07: `resolveMediaRendition` now resolves either via
|
|
18
|
+
* `findMediaByIdOrSlug`, so a hand-authored `<img src="/m/{slug}/...">` resolves the same asset a
|
|
19
|
+
* UUID-based one always has). Every rendition-table operation inside this function uses the
|
|
20
|
+
* RESOLVED record's own `media.id`, never this raw field, once the lookup succeeds — see that
|
|
21
|
+
* local rebinding's own comment for why that distinction matters. */
|
|
22
|
+
assetId: string;
|
|
17
23
|
/** The `{transformName}` path segment — cosmetic slug/ext are stripped by the caller (route). */
|
|
18
24
|
transformName: string;
|
|
19
25
|
/** The `{version}` parsed out of the `.v{version}` path segment. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rendition-service.d.ts","sourceRoot":"","sources":["../../src/media/rendition-service.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,aAAa,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"rendition-service.d.ts","sourceRoot":"","sources":["../../src/media/rendition-service.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,aAAa,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAMvI,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,aAAa,EAAE,sBAAsB,CAAC;IACtC,aAAa,EAAE,2BAA2B,CAAC;IAC3C,SAAS,EAAE,aAAa,CAAC;IACzB,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,IAAI,CAAC;IAClB;;;;;0EAKsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,aAAa,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,yBAAyB,CAAC;IAChC,KAAK,EAAE,0BAA0B,CAAC;CACnC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,2BAA2B,GACnC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GACnB;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,6BAA6B,EACvC,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GACpC,OAAO,CAAC,2BAA2B,CAAC,CAuFtC"}
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
* - The real `entry_refs` "referenced by published content" check.
|
|
30
30
|
*/
|
|
31
31
|
import { createHash } from "node:crypto";
|
|
32
|
+
import { findMediaByIdOrSlug } from "./media-service.js";
|
|
32
33
|
import { mimeForTransformFormat } from "./transform-types.js";
|
|
33
34
|
import { isLatestTransformVersion, isReferencedByPublishedContent } from "./transform-registry.js";
|
|
34
35
|
import { withRenditionLock } from "./transform-lock.js";
|
|
@@ -56,11 +57,16 @@ import { withRenditionLock } from "./transform-lock.js";
|
|
|
56
57
|
*/
|
|
57
58
|
export async function resolveMediaRendition(required, _optional = {}) {
|
|
58
59
|
const { deps, input } = required;
|
|
59
|
-
const media = await deps.mediaRepo
|
|
60
|
+
const media = await findMediaByIdOrSlug({ deps: { mediaRepo: deps.mediaRepo }, input: { workspaceId: input.workspaceId, idOrSlug: input.assetId } });
|
|
60
61
|
if (!media)
|
|
61
62
|
return { outcome: "not-found" };
|
|
62
63
|
if (media.status === "trashed")
|
|
63
64
|
return { outcome: "gone" };
|
|
65
|
+
// From here on, every `asset_renditions`/blob operation keys on the RESOLVED record's own `id` —
|
|
66
|
+
// never the raw `input.assetId`, which may have been a slug. `asset_renditions.assetId` is a FK to
|
|
67
|
+
// `media.id`; keying it on the slug text instead would both miss every rendition already stored
|
|
68
|
+
// under the real id and, on the generation path below, write a second, slug-keyed row alongside it.
|
|
69
|
+
const assetId = media.id;
|
|
64
70
|
const definition = await deps.transformRepo.findByNameVersion({
|
|
65
71
|
workspaceId: input.workspaceId,
|
|
66
72
|
name: input.transformName,
|
|
@@ -70,7 +76,7 @@ export async function resolveMediaRendition(required, _optional = {}) {
|
|
|
70
76
|
return { outcome: "not-found" };
|
|
71
77
|
const existing = await deps.renditionRepo.findOne({
|
|
72
78
|
workspaceId: input.workspaceId,
|
|
73
|
-
assetId
|
|
79
|
+
assetId,
|
|
74
80
|
transformName: input.transformName,
|
|
75
81
|
version: input.version,
|
|
76
82
|
});
|
|
@@ -100,7 +106,7 @@ export async function resolveMediaRendition(required, _optional = {}) {
|
|
|
100
106
|
// `imageTransformer.transform` a second time.
|
|
101
107
|
const racedExisting = await deps.renditionRepo.findOne({
|
|
102
108
|
workspaceId: input.workspaceId,
|
|
103
|
-
assetId
|
|
109
|
+
assetId,
|
|
104
110
|
transformName: input.transformName,
|
|
105
111
|
version: input.version,
|
|
106
112
|
});
|
|
@@ -120,7 +126,7 @@ export async function resolveMediaRendition(required, _optional = {}) {
|
|
|
120
126
|
const row = {
|
|
121
127
|
id: deps.idGen.newId(),
|
|
122
128
|
workspaceId: input.workspaceId,
|
|
123
|
-
assetId
|
|
129
|
+
assetId,
|
|
124
130
|
transformName: input.transformName,
|
|
125
131
|
version: input.version,
|
|
126
132
|
storageKey,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rendition-service.js","sourceRoot":"","sources":["../../src/media/rendition-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"rendition-service.js","sourceRoot":"","sources":["../../src/media/rendition-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,10 @@ export declare class InMemoryMediaRepo implements MediaRepoPort {
|
|
|
20
20
|
workspaceId: UUID;
|
|
21
21
|
id: UUID;
|
|
22
22
|
}): Promise<MediaRecord | null>;
|
|
23
|
+
findBySlug(required: {
|
|
24
|
+
workspaceId: UUID;
|
|
25
|
+
slug: string;
|
|
26
|
+
}): Promise<MediaRecord | null>;
|
|
23
27
|
list(required: {
|
|
24
28
|
workspaceId: UUID;
|
|
25
29
|
}): Promise<MediaRecord[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo.memory.d.ts","sourceRoot":"","sources":["../../src/media/repo.memory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"repo.memory.d.ts","sourceRoot":"","sources":["../../src/media/repo.memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,9 @@ export class InMemoryMediaRepo {
|
|
|
6
6
|
async findById(required) {
|
|
7
7
|
return (this.rows.find((row) => row.workspaceId === required.workspaceId && row.id === required.id) ?? null);
|
|
8
8
|
}
|
|
9
|
+
async findBySlug(required) {
|
|
10
|
+
return (this.rows.find((row) => row.workspaceId === required.workspaceId && row.slug === required.slug) ?? null);
|
|
11
|
+
}
|
|
9
12
|
async list(required) {
|
|
10
13
|
return this.rows.filter((row) => row.workspaceId === required.workspaceId);
|
|
11
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo.memory.js","sourceRoot":"","sources":["../../src/media/repo.memory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"repo.memory.js","sourceRoot":"","sources":["../../src/media/repo.memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,8 +81,12 @@ export interface MediaToolDeps {
|
|
|
81
81
|
* Any rejection from this hook propagates out of the `media_upload_asset` handler uncaught — a
|
|
82
82
|
* failure to record the type is a real failure, not swallowed to report a false success (mirrors
|
|
83
83
|
* `resolveCredentialForProvider`'s "never silently fall through" discipline elsewhere in this
|
|
84
|
-
* package's siblings).
|
|
85
|
-
*
|
|
84
|
+
* package's siblings). Before rethrowing, the handler calls `rollbackUploadedMedia`
|
|
85
|
+
* (`media-service.ts`) to remove the rendition + media rows `uploadMedia()` just wrote (and
|
|
86
|
+
* tombstone the blob if unreferenced) — the fix for the sibling defect where those rows survived
|
|
87
|
+
* as orphans even though the caller saw the upload as failed. Omitted entirely: never called,
|
|
88
|
+
* matching this field's own pre-fix absence for every host that has not opted in yet — the exact
|
|
89
|
+
* `resolvePublicUrls`-precedent contract.
|
|
86
90
|
*/
|
|
87
91
|
recordUploadContentType?: (params: {
|
|
88
92
|
media: MediaRecord;
|