Skip to content

The API tries to parse error HTML as JSON and fails with an unexpected error response #42

@stralau

Description

@stralau

Describe the bug
When getting a 503 as a response to a POST request, a JSON parse error is returned

Expected behavior
An error informing about the server status should be returned.

Package (please complete the following information):

  • Source: npm
  • Version: 11.6.2

Additional context
The error:

error: SyntaxError: Unexpected token '<', "
      <!DOCTYPE "... is not valid JSON
      at JSON.parse (<anonymous>)
      at REST.fetch (file:///var/task/node_modules/tsl-mastodon-api/lib/REST.js:88:32)
      at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
      at async API.fetch (file:///var/task/node_modules/tsl-mastodon-api/lib/API.js:195:24)
      at async API.postStatus (file:///var/task/node_modules/tsl-mastodon-api/lib/API.js:674:24)
      at async MastodonImageClient.post (file:///var/task/dist/mastodon/client.js:23:28)
      at async Promise.all (index 1)
      at async BufferedInvokeProcessor.handler (file:///var/task/dist/handler.js:35:5)
      at async BufferedInvokeProcessor.processInvoke (file:///var/runtime/index.mjs:1092:22)
      at async _Runtime.processSingleConcurrent (file:///var/runtime/index.mjs:1178:7),
  json: {
    text: '\n' +
      '    <!DOCTYPE html>\n' +
      '    <html lang="en">\n' +
      '      <head>\n' +
      '        <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />\n' +
      '        <meta charset="utf-8" />\n' +
      '        <title>This page is not correct - Mastodon</title>\n' +
      '        <meta content="width=device-width,initial-scale=1" name="viewport" />\n' +
      '        <style>\n' +
      '          body {\n' +
      '            background-color: #282c37;\n' +
      '            color: #9baec8;\n' +
      '            display: flex;\n' +
      '            height: 100vh;\n' +
      '            align-items: center;\n' +
      '            justify-content: center;\n' +
      '            flex-direction: column;\n' +
      '            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";\n' +
      '            line-height: 1.3;\n' +
      '          }\n' +
      '    \n' +
      '          h1 {\n' +
      '            font-weight: 400;\n' +
      '            font-size: 1.4rem;\n' +
      '            text-align: center;\n' +
      '          }\n' +
      '    \n' +
      '          a, a:visited {\n' +
      '            color: #9baec8;\n' +
      '          }\n' +
      '    \n' +
      '          a:hover {\n' +
      '            opacity: 0.9;\n' +
      '          }\n' +
      '    \n' +
      '          img.illus {\n' +
      '            max-width: 100%;\n' +
      '            width: 400px;\n' +
      '            height: 400px;\n' +
      '            aspect-ratio: 1;\n' +
      '            margin-bottom: 1rem;\n' +
      '          }\n' +
      '    \n' +
      '          .status-page {\n' +
      '            max-width: 400px;\n' +
      '            text-align: center;\n' +
      '          }\n' +
      '        </style>\n' +
      '      </head>\n' +
      '      <body class="error">\n' +
      '        <img alt="Mastodon" class="illus" src="data:image/png;base64,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'... 14327 more characters
  },
  path: 'statuses',
  response: Response {
    status: 503,
    statusText: 'Service Unavailable',
    headers: Headers {
      connection: 'close',
      'content-length': '24327',
      server: 'Varnish',
      'retry-after': '0',
      'accept-ranges': 'bytes',
      date: 'Fri, 30 Jan 2026 21:04:33 GMT',
      via: '1.1 varnish',
      'x-served-by': 'cache-fra-eddf8230047-FRA',
      'x-cache': 'MISS',
      'x-cache-hits': '0',
      'x-timer': 'S1769807074.952069,VS0,VE6',
      'strict-transport-security': 'max-age=31557600',
      'alt-svc': 'h3=":443";ma=86400,h3-29=":443";ma=86400,h3-27=":443";ma=86400'
    },
    body: ReadableStream { locked: true, state: 'closed', supportsBYOB: true },
    bodyUsed: true,
    ok: false,
    redirected: false,
    type: 'basic',
    url: 'https://mastodon.social/api/v1/statuses'
  },
  status: 503,
  rateLimit: undefined
}```

Metadata

Metadata

Assignees

No one assigned

    Labels

    Awaiting ResponseFurther information is requestedBugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions