Joaquim Grilo
12/08/2025, 1:44 PMUncaught SyntaxError: The requested module '<https://xxx.cloud.gooddata.com/components/tigerBackend.js>' does not provide an export named 'default'kapa.ai
12/08/2025, 1:45 PMtigerBackend.js no longer exposes a default export in the way your code expects, so your dynamic import fails and the page where the web component should render stays blank. From the working examples in the knowledge sources, the recommended pattern is: js import("<https://your-org.cloud.gooddata.com/components/tigerBackend.js>").then( ({ factory, TigerTokenAuthProvider }) => { import( `<https://your-org.cloud.gooddata.com/components/${workspaceId}.js>` ).then(({ setContext }) => { setContext({ backend: factory() .onHostname("<https://your-org.cloud.gooddata.com>") .withAuthentication(new TigerTokenAuthProvider(token)), workspaceId, }); }); }, ); Notice that: - You do not destructure default from the module. - You import the named export factory (not default) and the auth provider directly. [[Web components integration](https://www.gooddata.com/docs/gooddata-ui/latest/learn/web_components/#integration)] In your current code you likely have something like: js const { default: factory, TigerJwtAuthProvider } = response; Change it to match the pattern actually exported by tigerBackend.js, e.g.: js const { factory, TigerJwtAuthProvider } = response; After updating the import/destructure: 1. Hard-refresh / clear cache. 2. Reopen DevTools and confirm the tigerBackend.js request succeeds and the black page disappears. If this adjustment does not resolve it, capture the full error from DevTools (Console + Network) and share with GoodData Support, as they can check if any recent change to tigerBackend.js for your region is involved.Julius Kos
12/08/2025, 2:05 PMJoaquim Grilo
12/08/2025, 2:08 PMJoaquim Grilo
12/08/2025, 2:08 PMJoaquim Grilo
12/08/2025, 2:09 PMJoaquim Grilo
12/08/2025, 2:09 PMJoaquim Grilo
12/08/2025, 2:11 PMauthenticateAndInjectGdScript(workspaceId: string) {
this.userSvc.getStoredOrNewToken$()
.pipe(
distinctUntilChanged(),
untilDestroyed(this),
)
.subscribe(token => {
// Create and inject new script
const script = this.renderer.createElement('script');
const head = this.renderer.selectRootElement('head', true);
const gdElement = document.createElement('gd-dashboard');
script.type = 'module';
script.id = 'customDashScript';
// Create the script content with imports and context setup
script.textContent = `
import { setContext } from "<https://xxx.cloud.gooddata.com/components/${workspaceId}.js>";
import { factory, TigerTokenAuthProvider } from "<https://xxx.cloud.gooddata.com/components/tigerBackend.js>";
try {
setContext({
backend: factory()
.onHostname("<https://xxx.cloud.gooddata.com>")
.withAuthentication(new TigerTokenAuthProvider("${token}")),
workspaceId: "${workspaceId}",
});
} catch(e) {
// console.log('Context set');
}
`;
// Append script to head
this.renderer.appendChild(head, script);
gdElement.classList.add('dashboard');
gdElement.id = 'gdElement'
gdElement.setAttribute('dashboard', this.dashboardId);
gdElement.addEventListener(INITIALIZED, this.onDashboardLoaded.bind(this));
gdElement.addEventListener(FILTER_CHANGED, this.onDashboardFilterChange.bind(this));
if (document.getElementById('dashboardContainer')) {
document.getElementById('dashboardContainer').innerHTML = '';
document.getElementById('dashboardContainer').appendChild(gdElement);
setTimeout(() => {
this.gdDashboardLoading$.next(false);
this.dashboardConfigured.set(true);
}, 1000);
} else {
this.gdDashboardLoading$.next(false);
this.dashboardConfigured.set(false);
}
});
}Julius Kos
12/08/2025, 2:21 PMMatt MacGillivray
12/08/2025, 3:07 PMJulius Kos
12/08/2025, 3:08 PMMatt MacGillivray
12/08/2025, 3:40 PMJulius Kos
12/08/2025, 3:41 PMSameer Hasan
12/08/2025, 5:52 PMMatt MacGillivray
12/08/2025, 7:48 PMJoseph Heun
12/08/2025, 10:46 PMSameer Hasan
12/11/2025, 3:15 PMSameer Hasan
12/11/2025, 3:17 PM