storage module uploads files and images to managed cloud storage and returns proxy URLs, plus reads and deletes existing files. Uploads are sent as multipart/form-data — pass the file bytes as a Uint8Array or a Blob.
Uploads can be attributed to a user by passing that user’s Sublay ID as
userId —
your service key performs the upload on behalf of that named user. Omit userId
for a backend/project-owned file (no owning user).uploadFile
Uploads a generic file (PDF, video, document, …) without server-side processing. The file type is inferred from the MIME type.The file bytes to upload. Maximum 50 MB.
Storage path segments. The file is stored under the joined path with a UUID
sub-folder appended, e.g.
["documents", "usr_abc123"] →
documents/usr_abc123/<uuid>/<filename>.Name to store the file under. Defaults to
"upload".MIME type used when wrapping a
Uint8Array. Defaults to
"application/octet-stream". Ignored when file is already a Blob.Display order when a record has multiple attachments. Defaults to
0.Custom key-value data stored alongside the file record.
Associates the file with an entity for cascade deletion. Only one of
entityId / commentId / spaceId may be set.Associates the file with a comment for cascade deletion.
Associates the file with a space.
Attribute the upload to a user. Omit for a backend/project-owned file.
Promise<File>
uploadImage
Uploads an image, processes it with Sharp, and stores the original plus all requested variants. TheimageOptions object is a discriminated union on mode — the shape of the other fields depends on the mode you pick.
The image bytes. Must be a valid image format recognized by Sharp. Maximum 50 MB.
Image-processing configuration — a discriminated union on
All modes also accept optional
mode. The supported
modes and their required fields:mode | Required fields | Notes |
|---|---|---|
exact-dimensions | dimensions ({ [variant]: { width, height } }) | Fixed-size crops. |
aspect-ratio-width-based | aspectRatio, widths ({ [variant]: number }) | Heights computed from the ratio. |
aspect-ratio-height-based | aspectRatio, heights ({ [variant]: number }) | Widths computed from the ratio. |
original-aspect | sizes ({ [variant]: number }) | Preserves source ratio; fit limited to inside/outside. |
multi-aspect-ratio | aspectRatios ({ width, height }[]), sizes | 1–10 aspect ratios. |
quality (1–100), format (webp | jpeg |
png | original), stripExif (boolean), and fit (cover | contain |
inside | outside). Dimension/size values are 50–10000.Name to store the image under. Defaults to
"upload".MIME type used when wrapping a
Uint8Array. Ignored when file is a Blob.Storage path segments. Defaults to
["images", "<fileId>"].Associates the image with an entity. Only one of
entityId / commentId /
spaceId may be set.Associates the image with a comment.
Associates the image with a space.
Attribute the upload to a user. Omit for a backend/project-owned file.
Promise<File> (the image field carries the generated variants).
getFile
Fetches a file’s metadata and proxy URLs by ID. For images, theimage extension (variants, processing details) is included. Reads are project-scoped.
The UUID of the file to retrieve.
Promise<File>
deleteFile
Deletes a file record and removes all associated storage objects (for images, every generated variant too).The UUID of the file to delete.
Promise<void>
With a service key this deletes any file in the project. The same call from an
end-user token only succeeds when that user owns the file (otherwise
403).
