hcengineering/platform · error
No token available
Error message
No token available
What it means
exportToWorkspace reads the ExportUrl metadata and the current session Token. The token is required to authenticate against the export/target workspace endpoint; if presentation.metadata.Token is null, it throws 'No token available' rather than making an unauthenticated request.
Source
Thrown at plugins/export-resources/src/export.ts:46
skipDeletedObsolete?: boolean,
exportOnlyEffective?: boolean,
includeChildren?: boolean
): Promise<void> {
const lang = getCurrentLanguage()
addNotification(
await translate(plugin.string.ExportStarted, {}, lang),
await translate(plugin.string.ExportStartedMessage, {}, lang),
ExportNotification,
undefined,
NotificationSeverity.Info
)
try {
const baseUrl = getMetadata(plugin.metadata.ExportUrl)
const token = getMetadata(presentation.metadata.Token)
if (token == null) {
throw new Error('No token available')
}
const fieldMappers = {
'documents:class:ControlledDocument': {
author: '$currentUser',
owner: '$currentUser',
state: 'draft',
major: 1,
minor: 0,
reviewers: [],
controlledState: '',
seqNumber: '$generateSeqNumber',
code: '$generateCode'
},
'documents:class:DocumentMeta': {
author: '$currentUser',
owner: '$currentUser'
},View on GitHub (pinned to 63e28dc964)
Solutions
- Ensure the user is fully logged in and the presentation plugin has stored the token before triggering export.
- Gate the export action on login state (e.g. only enable when authenticated).
- Check that getMetadata(presentation.metadata.Token) is populated; if null, wait for login completion event.
- Pass or obtain a token explicitly instead of relying on ambient metadata if used outside the main client context.
Example fix
// before
const token = getMetadata(presentation.metadata.Token)
if (token == null) {
throw new Error('No token available')
}
// after
const token = getMetadata(presentation.metadata.Token) ?? (await getTokenAfterLogin())
if (token == null) {
throw new Error('No token available: ensure the user is logged in before exporting')
} Defensive patterns
Strategy: try-catch
Validate before calling
const token = getMetadata(presentation.metadata.Token)
if (token == null) {
throw new Error('Cannot export: no session token. Ensure the user is logged in.')
}
await exportToWorkspace(...) Type guard
function hasToken (t: string | null | undefined): t is string {
return t != null && t.length > 0
} Try / catch
try {
await exportToWorkspace(...)
} catch (err) {
if (err instanceof Error && err.message === 'No token available') {
// prompt login or wait for auth-ready before retrying
await waitForLogin()
return retryExport()
}
throw err
} Prevention
- Gate export actions on an authenticated state in the UI.
- Wait for the login/auth-ready event before performing metadata-dependent operations.
- Never invoke export logic in early startup hooks before presentation metadata is populated.
- After logout, disable or defer any export flows.
When it happens
Trigger: Calling exportToWorkspace before the user session/token has been established (not logged in), token metadata never set by the presentation plugin, or calling during early app startup before login completes.
Common situations: Export invoked from a background context or early lifecycle hook where the login plugin hasn't populated metadata yet; unauthenticated/guest sessions; token cleared after logout but export still triggered.
Related errors
- Workspace or account not found in token
- Authentication token not specified
- Accounts URL or token is not defined
- Accounts URL or token is not defined
- No token available
AI-assisted analysis of hcengineering/platform@63e28dc964 (2026-08-29).
Data as JSON: /api/errors/9ea7f0f04b3936dd.
Report an issue: GitHub.