openAsset method
Opens the bytes of the asset with id, optionally restricted to range.
Always works, whatever the provider topology: a bucket read, a local file, or a relay across a node's control channel. Prefer downloadTarget when the caller can follow a redirect — that path costs the hub no bandwidth.
Implementation
@override
Future<AssetDownload> openAsset(String id, {ByteRange? range}) async {
final opened = await _call(StoreProtocol.chunkOpen, {
'id': id,
...StoreProtocol.encodeRange(range),
});
final readId = Json.requireString(opened, 'readId');
final asset = Asset.fromJson(Json.asObject(opened['asset'], 'asset'));
return AssetDownload(
asset: asset,
stream: _readChunks(readId),
length: Json.requireInt(opened, 'length'),
range: range,
providerId: Json.optString(opened, 'providerId') ?? id,
);
}