diff --git a/modules/editor-api/external/types/config.d.ts b/modules/editor-api/external/types/config.d.ts index 80e6454eb..5a18b2e5d 100644 --- a/modules/editor-api/external/types/config.d.ts +++ b/modules/editor-api/external/types/config.d.ts @@ -231,5 +231,6 @@ export type LaunchConfig = { oneTrustDomainKey: string, schema: ModelSchema, engineVersions: EngineVersions, - wasmModules?: WasmModule[] + wasmModules?: WasmModule[], + signedUrls?: Record }; diff --git a/src/launch/assets/assets-sync.ts b/src/launch/assets/assets-sync.ts index 6b9361a97..5f246713d 100644 --- a/src/launch/assets/assets-sync.ts +++ b/src/launch/assets/assets-sync.ts @@ -94,13 +94,23 @@ editor.once('load', () => { if (assetData.file) { if (concatenateScripts && assetData.type === 'script' && assetData.file.filename.endsWith('.js') && assetData.preload && !assetData.data.loadingType) { assetData.file.url = concatenatedScriptsUrl; + } else if (config.signedUrls && config.signedUrls[assetData.id]) { + // Use pre-signed CloudFront URL + assetData.file.url = config.signedUrls[assetData.id]; + delete assetData.file.hash; } else { assetData.file.url = getFileUrl(assetData.path, assetData.id, assetData.revision, assetData.file.filename); } if (assetData.file.variants) { for (key in assetData.file.variants) { - assetData.file.variants[key].url = getFileUrl(assetData.path, assetData.id, assetData.revision, assetData.file.variants[key].filename); + const variantSignedKey = `${assetData.id}:${key}`; + if (config.signedUrls && config.signedUrls[variantSignedKey]) { + assetData.file.variants[key].url = config.signedUrls[variantSignedKey]; + delete assetData.file.variants[key].hash; + } else { + assetData.file.variants[key].url = getFileUrl(assetData.path, assetData.id, assetData.revision, assetData.file.variants[key].filename); + } } } }