: Staging
: Production
✨ New
Session management with refresh token rotation
Implemented refresh token rotation for the tokenRefresh mutation. Active user sessions now automatically extend their validity when used, providing a smoother and more secure authentication experience.
Metadata support for bulk product operations
Added the ability to set metadata and privateMetadata when using productBulkCreate and productVariantBulkCreate, giving you more flexibility to store custom data during bulk operations.
Enhanced warning reporting for bulk uploads
Product warnings are now reported with their corresponding row index in productBulkCreate, making it easier to identify and fix issues in large imports.
Request queue monitoring
Added logging for each worker's request queue, improving visibility into server performance and helping identify potential bottlenecks.
💎 Changed
Performance improvements
Made several performance improvements across the platform:
- Bulk product uploads are significantly faster by eliminating redundant attribute value lookups.
- Re-uploading existing products no longer reads seller, type, and rate data for every row.
- Product warning checks now read a row's attributes only once during bulk operations.
- Attribute saves are more efficient by reading assignments in a single optimized query.
- Bulk product deletions now announce changes in batches, reducing overhead.
- Collection events are serialized in batches, including owner data.
- Plugin payloads for bulk mutations are now serialized in a single batch operation.
🪲 Fixed
Email and invoice logos now correctly use the tenant's theme settings instead of falling back to defaults.
Fixed several issues with app principal authentication:
- The
staffCreatemutation now correctly recognizes when an app is making the request. - Account mutations now properly identify app principals across all operations.
- Customer events now correctly record when a staff change was made by an app.
Fixed multiple issues with attribute handling:
- Attribute value ownership is now determined per attribute and slug, preventing conflicts.
- Numeric attributes with no usable value no longer store
0.00as a default. - Product attribute rows are now properly deleted when the product is removed.
- Legacy numeric values without decimal points are automatically corrected.
Fixed numerous issues with product mutations:
- The
productVariantBulkCreatemutation now correctly applies attributes and dimensions during upsert operations. - Variant mutations now properly apply SEO, publication, and currency inputs that were previously ignored.
- The
productBulkCreatemutation now respects the locked type when updating existing products. - Product upserts via
productBulkCreatenow apply all the same fields asproductUpdate. - Product slug generation now includes retry logic when a slug is taken, and uses prefix-based lookups.
- Failed
productCreateorproductUpdateoperations now correctly roll back all changes. - The
productUpdatemutation now properly applies SEO settings. - Product creation and bulk operations now correctly execute under the app's identity.
- Image URLs that cannot be fetched are now properly reported as caller errors.
- The
productBulkCreatemutation now ensures one row per product to prevent duplicates. - Images fetched from URLs are now processed in the background for better performance.
- Untyped fetched images are now automatically typed based on their content.
- Long image URLs now attach successfully and clear any previous warnings.
- Video URLs that cannot be fetched are properly reported as errors.
- The
productVideoBulkCreatemutation now reports row-level errors. - Media keys now correctly match on the product level.
- Video uploads now follow the same seller rules as images.
- Bad ports in image URLs now record warnings correctly.
- CSV imports now properly handle fetched images.
- Re-uploading the same image key no longer triggers unnecessary fetches.
- CSV rows now correctly link to their variants.
- Media write operations now verify the caller belongs to the product's seller.
- Malformed reorder IDs are now properly rejected.
- Media reordering now prevents using IDs from different media types or duplicate IDs.
Fixed several infrastructure issues:
- The queue monitor now starts reliably and cannot fail application boot.
- Failing queue samples now log errors only once to prevent log spam.
- Tracing setup errors no longer prevent application startup.
- Log handlers that raise exceptions cannot crash the queue monitor.
- Guard blocks now properly contain all exceptions.
- The saturation monitor now survives bad sampling attempts.
Fixed three migrations that depend on django_celery_beat, ensuring clean database initialization when migrating from an empty database.
Fixed an issue where soft-delete bulk creation operations now correctly insert all items from generators.