采用该 Skill 会把第三方前后端包纳入应用的执行路径
原文依据:5 处说明把安装两个指定包和调用其 mixin/API 设为强制要求。前端包接收待上传文件的完整内容,后端包提供平台保留方法,因此这些依赖不是仅供编译的类型声明。所给材料没有包含这些包的源码,无法从本次证据核实其实际网络目标或其他副作用。
这些包及其传递依赖会获得相应构建或运行环境的能力;若包来源、发布者或版本不符合预期,文件数据和应用行为可能受影响。
文档确实要求安装并执行指定的 npm 与 mops 包:前端 API 接收完整文件字节,后端 mixin 提供存储基础设施,所以它们会进入上传执行路径。这与该 Skill 声明的对象存储用途一致,并非单凭第三方依赖即可认定恶意。不过,材料没有包含依赖包源码,无法核实其网络目的地、权限范围或额外副作用。用户可要求作者提供锁定版本、源码审计结果及实际网关域名,并限制依赖和网络权限。
这项判断针对展示的代码和适用条件,不表示风险已经实际发生。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.查看另外 4 个位置
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);};