download url
This commit is contained in:
@@ -8,7 +8,7 @@ export interface AssetObject {
|
||||
ordinal?: number;
|
||||
url?: string | null;
|
||||
metadata?: Record<string, unknown> | null;
|
||||
expires_at?: number | null;
|
||||
expires_at?: number;
|
||||
[key: string]: unknown;
|
||||
}
|
||||
|
||||
@@ -16,10 +16,8 @@ export interface AssetLike {
|
||||
id?: Identifier;
|
||||
asset_type?: string;
|
||||
cardinality?: number | null;
|
||||
url?: string | null;
|
||||
expires_at?: number | null;
|
||||
download?: { url: string; expires_at: number } | null;
|
||||
metadata?: Record<string, unknown> | null;
|
||||
expiresAt?: number | null;
|
||||
assets?: Record<string, AssetLike> | AssetLike[] | null;
|
||||
objects?: AssetObject[] | null;
|
||||
[key: string]: unknown;
|
||||
@@ -37,19 +35,11 @@ export interface DocumentLike {
|
||||
[key: string]: unknown;
|
||||
}
|
||||
|
||||
export const resolveAssetExpiresAt = (
|
||||
asset?: { expiresAt?: number | null; expires_at?: number | null } | null,
|
||||
): number | null => {
|
||||
const camel = Number(asset?.expiresAt);
|
||||
if (Number.isFinite(camel)) {
|
||||
return camel;
|
||||
}
|
||||
const snake = Number(asset?.expires_at);
|
||||
if (Number.isFinite(snake)) {
|
||||
return snake;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
export const resolveAssetExpiresAt = (asset?: { download?: { expires_at: number } | null } | null): number | null =>
|
||||
asset?.download?.expires_at ?? null;
|
||||
|
||||
export const resolveAssetUrl = (asset?: { download?: { url: string } | null } | null): string | null =>
|
||||
asset?.download?.url ?? null;
|
||||
|
||||
export type EnsureAssetUrl = (
|
||||
documentId: Identifier,
|
||||
@@ -78,7 +68,7 @@ export const getAssetFromVersion = (currentVersion: Nullable<DocumentVersionLike
|
||||
if (!currentVersion) {
|
||||
return null;
|
||||
}
|
||||
return getAssetFromGroup(currentVersion.assets ?? null, assetType);
|
||||
return getAssetFromGroup(currentVersion.assets, assetType);
|
||||
};
|
||||
|
||||
const normalizeAssetObjects = (objects?: AssetObject[] | null): AssetObject[] => {
|
||||
@@ -140,10 +130,11 @@ export class AssetView {
|
||||
}
|
||||
|
||||
if (ordinal === 1 && this.asset) {
|
||||
if (this.asset.url || this.asset.metadata) {
|
||||
const primaryUrl = resolveAssetUrl(this.asset);
|
||||
if (primaryUrl || this.asset.metadata) {
|
||||
return {
|
||||
ordinal: 1,
|
||||
url: this.asset.url || null,
|
||||
url: primaryUrl || null,
|
||||
metadata: this.asset.metadata || null,
|
||||
expires_at: resolveAssetExpiresAt(this.asset),
|
||||
};
|
||||
@@ -242,7 +233,7 @@ class AssetManager {
|
||||
{ force = false }: { force?: boolean } = {},
|
||||
): Promise<Nullable<AssetLike>> {
|
||||
if (!documentId || !asset?.id) {
|
||||
return Promise.resolve(asset ?? null);
|
||||
return Promise.resolve(asset);
|
||||
}
|
||||
|
||||
const baseAsset = this.assetCache.get(asset.id) || asset;
|
||||
@@ -258,7 +249,8 @@ class AssetManager {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (baseAsset.url && (!assetExpiresAt || assetExpiresAt > now)) {
|
||||
const assetUrl = resolveAssetUrl(baseAsset);
|
||||
if (assetUrl && (!assetExpiresAt || assetExpiresAt > now)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -288,13 +280,13 @@ class AssetManager {
|
||||
.then(({ data }) => {
|
||||
const cachedEntry = this.assetCache.get(asset.id) || baseAsset;
|
||||
const combined = { ...cachedEntry, ...asset, ...data };
|
||||
const expiresAt =
|
||||
const expires_at =
|
||||
resolveAssetExpiresAt(data)
|
||||
?? resolveAssetExpiresAt(combined)
|
||||
?? Date.now() + this.assetPresignTtlMs;
|
||||
?? resolveAssetExpiresAt(combined);
|
||||
const entry = {
|
||||
...combined,
|
||||
expiresAt,
|
||||
url: resolveAssetUrl(combined),
|
||||
expires_at,
|
||||
};
|
||||
|
||||
this.rememberAsset(entry);
|
||||
|
||||
Reference in New Issue
Block a user