downloadTarget method
Where a client should fetch the asset with id from.
Returns a RedirectDownload when the holding provider can issue a time-limited URL, and a StreamedDownload when it cannot.
Implementation
@override
Future<DownloadTarget> downloadTarget(
String id, {
Duration expiresIn = const Duration(minutes: 15),
}) async {
final response = await _call(StoreProtocol.assetDownloadTarget, {
'id': id,
'expiresIn': expiresIn.inSeconds,
});
if (Json.optString(response, 'kind') == 'redirect') {
return RedirectDownload(
url: Uri.parse(Json.requireString(response, 'url')),
expiresAt: Json.requireTimestamp(response, 'expiresAt'),
providerId: Json.requireString(response, 'providerId'),
);
}
return StreamedDownload(
providerId: Json.optString(response, 'providerId') ?? this.id,
reason: Json.optString(response, 'reason') ?? 'node cannot presign',
);
}