jadolg/rocketchat_API

API incompatibility in recent versions of RocketChat

tamasgal opened this issue · 4 comments

Sorry for the very generic title, I am still not able to hunt down the exact cause but a few days ago our RocketChat server started to produce tons of error messages (several GB of syslog/daemon.log per day, see RocketChat/Rocket.Chat#22818) and finally I found the culprit: a RocketChatBot which uses rocketchat_API and gets rejected by the server.

I assume that something has changed in the RocketChat API which leads to this, but it might also be that something in RocketChatBot is not implemented in a future-proof way, so I'll start here with the issue hoping that you might shed some light on it.

I could locate the call in rocketchat_API which produces a RuntimeError (message) which is uncatchable:

RuntimeError("Cannot read property 'fetch' of undefined")
RuntimeError("Cannot read property 'fetch' of undefined")
RuntimeError("Cannot read property 'fetch' of undefined")

Here is the call which eventually generates that error:

> /opt/homebrew/Caskroom/miniforge/base/envs/rocketchat/lib/python3.9/site-packages/rocketchat_API/APISections/base.py(72)call_api_get()
     66         params = "&".join(
     67             "&".join(i + "[]=" + j for j in args[i])
     68             if isinstance(args[i], list)
     69             else i + "=" + str(args[i])
     70             for i in args
     71         )
---> 72         return self.req.get(
     73             "%s?%s" % (url, params),
     74             headers=self.headers,
     75             verify=self.ssl_verify,
     76             cert=self.cert,
     77             proxies=self.proxies,
     78             timeout=self.timeout,

Just for the sake of completeness, here is the log entry which is produced on each call:

Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]: Exception on find errorClass [Error]: Match error: Failed Match.OneOf, Match.Maybe or Match.Optional validation
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at check (packages/check/match.js:36:17)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at ns.Collection._getFindOptions (packages/mongo/collection.js:295:7)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at ns.Collection.find (packages/mongo/collection.js:336:12)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at BaseDb.find (app/models/server/models/_BaseDb.js:177:21)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at Messages.find (app/models/server/models/_Base.js:106:29)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at Messages.findVisibleByRoomIdBetweenTimestampsNotContainingTypes (app/models/server/models/Messages.js:374:15)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at MethodInvocation.getChannelHistory (app/lib/server/methods/getChannelHistory.js:56:15)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at MethodInvocation.methodsMap.<computed> (app/lib/server/lib/debug.js:76:34)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1771:12)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at packages/ddp-server/livedata_server.js:1689:15
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1234:12)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at packages/ddp-server/livedata_server.js:1687:36
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at new Promise (<anonymous>)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at Server.applyAsync (packages/ddp-server/livedata_server.js:1686:12)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at Server.apply (packages/ddp-server/livedata_server.js:1625:26)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at Server.call (packages/ddp-server/livedata_server.js:1607:17)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at Object.get (app/api/server/v1/channels.js:392:25)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at app/api/server/api.js:394:82
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1234:12)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at Object._internalRouteActionHandler [as action] (app/api/server/api.js:394:39)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at Route.share.Route.Route._callEndpoint (packages/nimble_restivus/lib/route.coffee:150:32)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at packages/nimble_restivus/lib/route.coffee:59:33
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     at packages/simple_json-routes.js:98:9 {
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:   path: '',
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:   sanitizedError: errorClass [Error]: Match failed [400]
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at errorClass.<anonymous> (packages/check/match.js:91:27)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at new errorClass (packages/meteor.js:655:17)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at check (packages/check/match.js:36:17)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at ns.Collection._getFindOptions (packages/mongo/collection.js:295:7)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at ns.Collection.find (packages/mongo/collection.js:336:12)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at BaseDb.find (app/models/server/models/_BaseDb.js:177:21)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at Messages.find (app/models/server/models/_Base.js:106:29)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at Messages.findVisibleByRoomIdBetweenTimestampsNotContainingTypes (app/models/server/models/Messages.js:374:15)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at MethodInvocation.getChannelHistory (app/lib/server/methods/getChannelHistory.js:56:15)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at MethodInvocation.methodsMap.<computed> (app/lib/server/lib/debug.js:76:34)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1771:12)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at packages/ddp-server/livedata_server.js:1689:15
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1234:12)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at packages/ddp-server/livedata_server.js:1687:36
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at new Promise (<anonymous>)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at Server.applyAsync (packages/ddp-server/livedata_server.js:1686:12)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at Server.apply (packages/ddp-server/livedata_server.js:1625:26)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at Server.call (packages/ddp-server/livedata_server.js:1607:17)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at Object.get (app/api/server/v1/channels.js:392:25)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at app/api/server/api.js:394:82
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1234:12)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at Object._internalRouteActionHandler [as action] (app/api/server/api.js:394:39)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at Route.share.Route.Route._callEndpoint (packages/nimble_restivus/lib/route.coffee:150:32)
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at packages/nimble_restivus/lib/route.coffee:59:33
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:       at packages/simple_json-routes.js:98:9 {
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     isClientSafe: true,
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     error: 400,
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     reason: 'Match failed',
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     details: undefined,
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:     errorType: 'Meteor.Error'
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:   },
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]:   errorType: 'Match.Error'
Jul 29 06:25:23 pi1145 rocketchat-server.rocketchat-server[31056]: } {

Hi, which version of the library and rocket.chat server are you using? The library gets tested weekly against the latest server version and I have not spotted this problem.

Which endpoint are you calling ? I am currently investigating something that could be related.

On my Rocket, it fails with the same cryptic message when I call channel.history WITH latest/oldest params set.

Seeing the Rocket.Chat issue #22713, it is pretty safe to say that the issue you are facing come from Rocket.Chat itself.
The parameter "oldest" in all the xxx.history endpoints leads to an error in version 3.16. Version 3.17 seems to fix it.

Yes, I confirm that it's fixed in 3.17!