IAUP Architecture
ItemsAdderUploadPlus owns command handling, lifecycle, settings snapshots, upload guard, hook registration, and upload orchestration.
PluginSettings parses config into immutable settings. S3UploadService builds the S3 client, uploads the zip, and returns object key plus download URL. ItemsAdderConfigUpdater writes the URL into ItemsAdder config. ItemsAdderHookRegistrar registers the ItemsAdder compressed-pack event listener.
Uploads run asynchronously. IAUP uses an atomic uploadInProgress flag to reject overlapping uploads.
Reloads and shutdowns can happen during upload, so IAUP uses lifecycle epochs. Before writing config or dispatching /iareload, the async task checks whether its captured epoch is still current. Stale work exits without applying old state.
URL building order: build object key, choose presigned/public URL mode, then append cache-bust query parameter if enabled.