Maximum call stack size exceeded
Closed this issue · 4 comments
[Rettiwt-API] [2024-10-17T17:56:28.803Z] [AUTHORIZATION] {"authenticated":true}
[Rettiwt-API] [2024-10-17T17:56:28.803Z] [VALIDATE] {"target":"FETCH_ARGS"}
[Rettiwt-API] [2024-10-17T17:56:28.805Z] [GET] {"target":"HTTPS_AGENT"}
[Rettiwt-API] [2024-10-17T17:56:28.805Z] [GET] {"target":"USER_CREDENTIAL"}
[Rettiwt-API] [2024-10-17T17:56:29.753Z] [DESERIALIZE] {"id":"1846972990321574260"}
F:\Proyectos\fetch-tweet\node_modules\rettiwt-api\dist\models\data\Tweet.js:22
this.tweetBy = new User_1.User(tweet.core.user_results.result);
^
RangeError: Maximum call stack size exceeded
at new Tweet (F:\Proyectos\fetch-tweet\node_modules\rettiwt-api\dist\models\data\Tweet.js:22:24)
at Tweet.getQuotedTweet (F:\Proyectos\fetch-tweet\node_modules\rettiwt-api\dist\models\data\Tweet.js:53:20)
at new Tweet (F:\Proyectos\fetch-tweet\node_modules\rettiwt-api\dist\models\data\Tweet.js:25:28)
at Tweet.getQuotedTweet (F:\Proyectos\fetch-tweet\node_modules\rettiwt-api\dist\models\data\Tweet.js:53:20)
at new Tweet (F:\Proyectos\fetch-tweet\node_modules\rettiwt-api\dist\models\data\Tweet.js:25:28)
at Tweet.getQuotedTweet (F:\Proyectos\fetch-tweet\node_modules\rettiwt-api\dist\models\data\Tweet.js:53:20)
at new Tweet (F:\Proyectos\fetch-tweet\node_modules\rettiwt-api\dist\models\data\Tweet.js:25:28)
at Tweet.getQuotedTweet (F:\Proyectos\fetch-tweet\node_modules\rettiwt-api\dist\models\data\Tweet.js:53:20)
at new Tweet (F:\Proyectos\fetch-tweet\node_modules\rettiwt-api\dist\models\data\Tweet.js:25:28)
at Tweet.getQuotedTweet (F:\Proyectos\fetch-tweet\node_modules\rettiwt-api\dist\models\data\Tweet.js:53:20)
Class Tweet
is called with a tweet
:
new Tweet(tweet)
When it tries to get the quoted tweet it does: this.quoted = this.getQuotedTweet(tweet);
(same tweet object reference)
Inside getQuotedTweet
it does:
Tweet.prototype.getQuotedTweet = function (tweet) {
// If tweet with limited visibility
if (tweet.quoted_status_result &&
Object.entries(tweet.quoted_status_result).length &&
tweet.quoted_status_result.result.__typename == 'TweetWithVisibilityResults') {
return new Tweet(tweet.quoted_status_result.result.tweet);
}
// If normal tweet
else if (tweet.quoted_status_result && Object.entries(tweet.quoted_status_result).length) {
return new Tweet(tweet);
}
// Else, skip
else {
// Logging
LogService_1.LogService.log(Logging_1.ELogActions.WARNING, {
action: Logging_1.ELogActions.DESERIALIZE,
message: 'Quoted tweet not found, skipping',
});
return undefined;
}
}
If it is a normal tweet it calls again new Tweet(tweet)
here tweet
is the same object as at the begginning. So it is calling new Tweet
again with the same tweet object that's going to call getQuotedTweet
and it'll call new Tweet
again and again.
Instead of return new Tweet(tweet);
shouldn't it be return new Tweet(tweet.result);
(idk)
Also this is happening for a Tweet that has +300 quotes/retweets.
I wonder why while testing it with a tweet with quotes, that error wasn't thrown. But this tweet did (and thankfully so). Will have to check that too.
Please upgrade to v4.1.3
. Issue has been fixed.