{"record":{"id":"8c323a46d11b0917","repo":"transloadit/uppy","slug":"no-payload","errorCode":null,"errorMessage":"No payload","messagePattern":"No payload","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/@uppy/companion/src/server/helpers/jwt.ts","lineNumber":66,"sourceCode":"): string => {\n  // return payload // for easier debugging\n  return encrypt(generateToken(payload, secret, maxAge), secret)\n}\n\nexport const generateEncryptedAuthToken = (\n  payload: unknown,\n  secret: EncryptionSecret,\n  maxAge?: number,\n): string => {\n  return generateEncryptedToken(JSON.stringify(payload), secret, maxAge)\n}\n\nexport const verifyEncryptedToken = (\n  token: string,\n  secret: EncryptionSecret,\n) => {\n  const ret = verifyJwtToken(decrypt(token, secret), secret)\n  if (!ret) throw new Error('No payload')\n  return ret\n}\n\nexport const verifyEncryptedAuthToken = <T extends Record<string, unknown>>(\n  token: string,\n  secret: EncryptionSecret,\n  providerName: string,\n): T => {\n  const json = verifyEncryptedToken(token, secret)\n  if (typeof json !== 'string') {\n    throw new Error('Invalid token payload: expected string')\n  }\n  const tokens: T = JSON.parse(json)\n  if (!isRecord(tokens) || !Object.hasOwn(tokens, providerName))\n    throw new Error(`Missing token payload for provider ${providerName}`)\n  return tokens\n}\n","sourceCodeStart":48,"sourceCodeEnd":84,"githubUrl":"https://github.com/transloadit/uppy/blob/5d4dedd02a1ac0ae022c75c54aca76558f88e256/packages/@uppy/companion/src/server/helpers/jwt.ts#L48-L84","documentation":"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).","triggerScenarios":"A token whose signed payload is { data: null }, { data: '' }, or { data: 0 } — verified and object-shaped, but with a falsy data field.","commonSituations":"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.","solutions":["Ensure the value wrapped in generateEncryptedToken is non-null before signing","Trace where the token was generated and why its data resolved to a falsy value","Regenerate the token after fixing the producer"],"exampleFix":"// before\nconst token = generateEncryptedToken(null, secret)\n\n// after\nif (!payload) throw new Error('cannot create token without payload')\nconst token = generateEncryptedToken(payload, secret)","handlingStrategy":"try-catch","validationCode":"if (!payload) throw new Error('refusing to sign an empty payload')\nconst token = generateEncryptedToken(payload, secret)","typeGuard":null,"tryCatchPattern":"try { verifyEncryptedToken(token, secret) } catch (err) {\n  if (err.message === 'No payload') { /* re-authenticate to obtain a fresh token */ }\n}","preventionTips":["Never sign null/empty payloads","Check truthiness before token generation"],"tags":["companion","jwt","token","null-check"],"backgroundTag":"jwt-payload-shape-invalid","analyzedSha":"5d4dedd02a1ac0ae022c75c54aca76558f88e256","analyzedAt":"2026-08-28T12:18:41.267Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}