Conversation
… client SDK, security hardening - Move all source files from root to src/ directory (PSR-4 namespace ChamberOrchestra\ImageBundle) - Add S3 loader/resolver with pagination support for large buckets - Add async image processing via Symfony Messenger with concurrency limiting - Add ClientAction controller with HMAC-signed URLs for client SDKs - Add RuntimeAction controller replacing ImageController - Add AvifPostProcessor for AVIF conversion via avifenc - Add ProcessImageMessage/Handler with shared lock slot concurrency control - Strengthen Signer HMAC: 16-char base64url tokens (96-bit entropy, up from ~47-bit) - Add array depth limiting in RuntimeAction to prevent recursive input abuse - Add FileSystemLocator absolute path rejection as defence-in-depth - Add file_put_contents return value validation in post-processors - Replace assert() with LogicException in ProcessImageMessageHandler - Add CacheManager::remove() path normalization - Fix WebPathResolver to use RequestContext::getBaseUrl() for sub-path deployments - Strip internal keys before passing to Imagine's image->get() - Add CacheResolver prefix-based cache invalidation - Introduce async: 'auto' config (auto-detect symfony/messenger) - Add comprehensive README with full config reference, client SDKs, web server configs - Add integration tests for all processors and post-processors - Add unit tests for S3Loader, S3Resolver, FilterService, FilterResult, ProcessImageMessageHandler - Improve composer.json SEO: expanded description, keywords, suggest descriptions - Add phpstan.neon.dist, .env.dist, dependabot.yml, updated CI workflows Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…, cache, security, concurrency, bundle boot Fix namespace function calls (\service(), \inline_service()) that broke container compilation, remove unused $cachePath binding, exclude value objects from service auto-registration. Add 51 integration tests covering HMAC-signed client/runtime URLs, CacheResolver with real PSR-6 cache, CacheManager wiring, exposed filter security round-trips, dispatch deduplication with lock slots, and full DI container boot verification. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
src/directory underChamberOrchestra\ImageBundlenamespaceS3Loader,S3Resolver, andS3ResolverFactorywith properlistObjectsV2pagination for large bucketsProcessImageMessage/ProcessImageMessageHandlervia Symfony Messenger with shared lock-slot concurrency limiting;async: 'auto'config auto-detects MessengerClientActionwith HMAC-signed URLs for TypeScript, Swift, Kotlin clients;RuntimeActionreplacing monolithicImageControllerAvifPostProcessorfor avifenc CLI conversionfile_put_contentsvalidation,assert()replaced withLogicExceptionCacheResolver,CacheManager::remove()path normalization,WebPathResolverrespectsRequestContext::getBaseUrl()format,optimize,flatten,animated) before$image->get()Test plan
try_filesserves cached images without hitting PHP🤖 Generated with Claude Code