Adopting the Skill places third-party frontend and backend packages in the application's execution path
Source references: 5The instructions make installation of two named packages and invocation of their mixin/API mandatory. The frontend package receives complete upload contents, and the backend package supplies platform-reserved methods, so these are not compile-time type declarations alone. Their source is absent from the supplied material, so this audit cannot verify their actual network destinations or other side effects.
The packages and their transitive dependencies gain the capabilities of their respective build or runtime environments. File data and application behavior could be affected if package provenance, publisher, or resolved versions differ from expectations.
The instructions do require installing and executing named npm and mops packages: the frontend API receives complete file bytes, and the backend mixin supplies storage infrastructure, so both enter the upload path. That is consistent with the Skill’s stated object-storage purpose; third-party dependencies alone do not establish malicious behavior. However, their source is absent, so the network destination, permission scope, and additional side effects cannot be verified. Users can ask for pinned versions, source-review results, and the actual gateway domain, and restrict dependency and network permissions.
This assessment concerns the code and conditions shown, not proof that harm has occurred.1. **mops dependency** — add `caffeineai-object-storage` to `mops.toml` under `[dependencies]`.2. **Mixin invocation** — `include MixinObjectStorage()` in `main.mo` (imported from `"mo:caffeineai-object-storage/Mixin"`).3. **Storage.ExternalBlob types** — every data field that represents a file MUST use `Storage.ExternalBlob`, never `Text`.4. **Frontend npm package** — `@caffeineai/object-storage` installed and `ExternalBlob.fromBytes(bytes, file.type, file.name)` used at the call site.Show 4 other places
CRITICAL: The frontend package (`@caffeineai/object-storage`) does NOT work without the backend mops package (`caffeineai-object-storage`). Installing only the npm package and not the mops package causes silent upload failures (403 from the storage gateway). You MUST install both together.NEVER create your own implementation of `_immutableObjectStorageCreateCertificate` or any other `_immutableObjectStorage*` method. These are platform-reserved method names provided exclusively by the `MixinObjectStorage` mixin from the mops package. Hand-written implementations produce wrong return types and cause `403 Forbidden: Invalid payload` at upload time.The only type you use from `mo:caffeineai-object-storage/Storage` is `ExternalBlob` (which is `Blob`). All other functions in `Storage.mo` are internal infrastructure used by `MixinObjectStorage` -- do not call them directly.```typescriptconst handleUpload = async (file: File) => { const bytes = new Uint8Array(await file.arrayBuffer()); const blob = ExternalBlob.fromBytes(bytes, file.type, file.name).withUploadProgress((pct) => { setProgress(pct); }); await actor.uploadFile(file.name, blob);};