transloadit/uppy · error · Error

No payload

Error message

No payload

What it means

verifyEncryptedToken decrypts the token, verifies the JWT, and expects a truthy data payload. Because verifyJwtToken already throws on malformed payloads, this 'No payload' error is effectively a defensive guard for a falsy decoded data value (e.g. data: null or data: 0 was signed).

Source

Thrown at packages/@uppy/companion/src/server/helpers/jwt.ts:66

): string => {
  // return payload // for easier debugging
  return encrypt(generateToken(payload, secret, maxAge), secret)
}

export const generateEncryptedAuthToken = (
  payload: unknown,
  secret: EncryptionSecret,
  maxAge?: number,
): string => {
  return generateEncryptedToken(JSON.stringify(payload), secret, maxAge)
}

export const verifyEncryptedToken = (
  token: string,
  secret: EncryptionSecret,
) => {
  const ret = verifyJwtToken(decrypt(token, secret), secret)
  if (!ret) throw new Error('No payload')
  return ret
}

export const verifyEncryptedAuthToken = <T extends Record<string, unknown>>(
  token: string,
  secret: EncryptionSecret,
  providerName: string,
): T => {
  const json = verifyEncryptedToken(token, secret)
  if (typeof json !== 'string') {
    throw new Error('Invalid token payload: expected string')
  }
  const tokens: T = JSON.parse(json)
  if (!isRecord(tokens) || !Object.hasOwn(tokens, providerName))
    throw new Error(`Missing token payload for provider ${providerName}`)
  return tokens
}

View on GitHub (pinned to 5d4dedd02a)

Solutions

  1. Ensure the value wrapped in generateEncryptedToken is non-null before signing
  2. Trace where the token was generated and why its data resolved to a falsy value
  3. Regenerate the token after fixing the producer

Example fix

// before
const token = generateEncryptedToken(null, secret)

// after
if (!payload) throw new Error('cannot create token without payload')
const token = generateEncryptedToken(payload, secret)
Defensive patterns

Strategy: try-catch

Validate before calling

if (!payload) throw new Error('refusing to sign an empty payload')
const token = generateEncryptedToken(payload, secret)

Try / catch

try { verifyEncryptedToken(token, secret) } catch (err) {
  if (err.message === 'No payload') { /* re-authenticate to obtain a fresh token */ }
}

Prevention

When it happens

Trigger: A token whose signed payload is { data: null }, { data: '' }, or { data: 0 } — verified and object-shaped, but with a falsy data field.

Common situations: Token-generation code that passes an empty/failed lookup result into the payload, e.g. generating an uppy auth token when a provider token was null.

Related errors


AI-assisted analysis of transloadit/uppy@5d4dedd02a (2026-08-28). Data as JSON: /api/errors/8c323a46d11b0917. Report an issue: GitHub.