Search code examples
node.jsmediawikivisual-editor

RESTBase with VisualEditor gives TypeError: Cannot set property 'etag' of undefined


Fresh install of MediaWiki on FreeBSD 11 (actually a FreeNAS 11.2 jail).

I'm trying to get VisualEditor working, which means Parsoid and RESTbase are needed. Parsoid works fine. RESTbase doesn't.

Using the MediaWiki 1.32 package and Node 11.

Following the installation guides per https://www.mediawiki.org/wiki/Extension:VisualEditor#Linking_with_Parsoid as diligently as possible.

First run with VisualEditor gives these results (replaced domain with "fake.example.net" for privacy):

{"name":"restbase","hostname":"bones","pid":51675,"level":40,"msg":"Client did not supply etag, fallback to mw:TimeUuid meta element","root_req":{"method":"post","uri":"/fake.example.net/v1/transform/html/to/wikitext/MediaWiki_Server/24","headers":{"content-length":"21866","content-type":"application/x-www-form-urlencoded","user-agent":"VisualEditor-MediaWiki/1.32.0","x-client-ip":"::1","x-forwarded-for":"::1","x-request-id":"7e754840-a45d-11e9-95db-4df3c493cdc6","x-request-class":"internal"}},"request_id":"7e754840-a45d-11e9-95db-4df3c493cdc6","api_path":"/fake.example.net/v1/transform/html/to/wikitext/{title}/{revision}","levelPath":"warn/parsoid/etag","time":"2019-07-12T04:28:27.598Z","v":0}

{"name":"restbase","hostname":"bones","pid":51675,"level":50,"message":"500: internal_error","res":{"name":"HTTPError","message":"500: internal_error","status":500,"body":{"type":"internal_error","description":"TypeError: Cannot read property 'body' of undefined"},"innerError":{"requestName":"get_from_backend"},"headers":{"access-control-allow-origin":"*","access-control-allow-methods":"GET,HEAD","access-control-allow-headers":"accept, content-type, content-length, cache-control, accept-language, api-user-agent, if-match, if-modified-since, if-none-match, dnt, accept-encoding","access-control-expose-headers":"etag","x-content-type-options":"nosniff","x-frame-options":"SAMEORIGIN","referrer-policy":"origin-when-cross-origin","x-xss-protection":"1; mode=block","content-security-policy":"default-src 'none'; frame-ancestors 'none'","x-content-security-policy":"default-src 'none'; frame-ancestors 'none'","x-webkit-csp":"default-src 'none'; frame-ancestors 'none'","cache-control":"private, max-age=0, s-maxage=0, must-revalidate","x-request-id":"7e754840-a45d-11e9-95db-4df3c493cdc6","server":"bones"}},"stack":"TypeError: Cannot read property 'body' of undefined
    at contentPromise.tap (/usr/home/wikiuser/restbase-1.0.0/sys/parsoid.js:585:47)
    at PassThroughHandlerContext.finallyHandler (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/finally.js:57:23)
    at PassThroughHandlerContext.tryCatcher (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:517:31)
    at Promise._settlePromise (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:574:18)
    at Promise._settlePromise0 (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:619:10)
    at Promise._settlePromises (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:699:18)
    at Promise._fulfill (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:643:18)
    at Promise._resolveCallback (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:437:57)
    at Promise._settlePromiseFromHandler (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:529:17)
    at Promise._settlePromise (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:574:18)
    at Promise._settlePromise0 (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:619:10)
    at Promise._settlePromises (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:699:18)
    at Promise._fulfill (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:643:18)
    at Promise._resolveCallback (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:437:57)
    at Promise._settlePromiseFromHandler (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:529:17)","latency":404,"root_req":{"method":"post","uri":"/fake.example.net/v1/transform/html/to/wikitext/MediaWiki_Server/24","headers":{"content-length":"21866","content-type":"application/x-www-form-urlencoded","user-agent":"VisualEditor-MediaWiki/1.32.0","x-client-ip":"::1","x-forwarded-for":"::1","x-request-id":"7e754840-a45d-11e9-95db-4df3c493cdc6","x-request-class":"internal"}},"request_id":"7e754840-a45d-11e9-95db-4df3c493cdc6","levelPath":"error/request","msg":"500: internal_error","time":"2019-07-12T04:28:27.608Z","v":0}

{"name":"restbase","hostname":"bones","pid":51674,"level":50,"message":"500: internal_error","res":{"name":"HTTPError","message":"500: internal_error","status":500,"body":{"type":"internal_error","description":"TypeError: Cannot set property 'etag' of undefined"},"innerError":{"requestName":"get_from_backend"},"headers":{"access-control-allow-origin":"*","access-control-allow-methods":"GET,HEAD","access-control-allow-headers":"accept, content-type, content-length, cache-control, accept-language, api-user-agent, if-match, if-modified-since, if-none-match, dnt, accept-encoding","access-control-expose-headers":"etag","x-content-type-options":"nosniff","x-frame-options":"SAMEORIGIN","referrer-policy":"origin-when-cross-origin","x-xss-protection":"1; mode=block","content-security-policy":"default-src 'none'; frame-ancestors 'none'","x-content-security-policy":"default-src 'none'; frame-ancestors 'none'","x-webkit-csp":"default-src 'none'; frame-ancestors 'none'","cache-control":"private, max-age=0, s-maxage=0, must-revalidate","x-request-id":"86f41e10-a45d-11e9-bc34-0b5288621277","server":"bones"}},"stack":"TypeError: Cannot set property 'etag' of undefined
    at contentReq.then.then (/usr/home/wikiuser/restbase-1.0.0/sys/parsoid.js:511:30)
    at tryCatcher (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:517:31)
    at Promise._settlePromise (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:574:18)
    at Promise._settlePromise0 (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:619:10)
    at Promise._settlePromises (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:699:18)
    at Promise._fulfill (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:643:18)
    at Promise._resolveCallback (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:437:57)
    at Promise._settlePromiseFromHandler (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:529:17)
    at Promise._settlePromise (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:574:18)
    at Promise._settlePromise0 (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:619:10)
    at Promise._settlePromises (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:699:18)
    at Promise._fulfill (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:643:18)
    at Promise._settlePromise (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:587:21)
    at Promise._settlePromise0 (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:619:10)
    at Promise._settlePromises (/usr/home/wikiuser/restbase-1.0.0/node_modules/bluebird/js/release/promise.js:699:18)","latency":8,"root_req":{"method":"get","uri":"/fake.example.net/v1/page/html/MediaWiki_Server/24?redirect=false","headers":{"user-agent":"VisualEditor-MediaWiki/1.32.0","x-client-ip":"::1","x-forwarded-for":"::1","x-request-id":"86f41e10-a45d-11e9-bc34-0b5288621277","x-request-class":"internal"}},"request_id":"86f41e10-a45d-11e9-bc34-0b5288621277","levelPath":"error/request","msg":"500: internal_error","time":"2019-07-12T04:28:41.465Z","v":0}

Similar errors result from using curl. I have tried RESTBase 1.0.0 and current git clone. Can't get anything to work, and the error message is complete greek to me. I'm unable to make any sense of the issue by examining the source.


Solution

  • This was caused by an error of my own in my projects/example.yaml, as well as an issue that was fixed by https://phabricator.wikimedia.org/T227842