diff options
author | Eric Bailey <git@esb.lol> | 2024-05-09 16:31:36 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-09 16:31:36 -0500 |
commit | 55fdbc7399c601a8867ae2517165a16083cef000 (patch) | |
tree | ed88758a7bb46cdb5b1b21d195ce19e072e85ae9 /src/state/messages | |
parent | becc708c610015c510edeac87394b3f77ac4ed06 (diff) | |
download | voidsky-55fdbc7399c601a8867ae2517165a16083cef000.tar.zst |
Add retries to all handlers (#3935)
Diffstat (limited to 'src/state/messages')
-rw-r--r-- | src/state/messages/convo/agent.ts | 122 | ||||
-rw-r--r-- | src/state/messages/events/agent.ts | 41 |
2 files changed, 90 insertions, 73 deletions
diff --git a/src/state/messages/convo/agent.ts b/src/state/messages/convo/agent.ts index a85293494..25e138fb7 100644 --- a/src/state/messages/convo/agent.ts +++ b/src/state/messages/convo/agent.ts @@ -7,6 +7,7 @@ import { } from '@atproto-labs/api' import {nanoid} from 'nanoid/non-secure' +import {networkRetry} from '#/lib/async/retry' import {logger} from '#/logger' import {isNative} from '#/platform/detection' import { @@ -459,16 +460,18 @@ export class Convo { recipients: AppBskyActorDefs.ProfileViewBasic[] }>(async (resolve, reject) => { try { - const response = await this.agent.api.chat.bsky.convo.getConvo( - { - convoId: this.convoId, - }, - { - headers: { - Authorization: this.__tempFromUserDid, + const response = await networkRetry(2, () => { + return this.agent.api.chat.bsky.convo.getConvo( + { + convoId: this.convoId, }, - }, - ) + { + headers: { + Authorization: this.__tempFromUserDid, + }, + }, + ) + }) const convo = response.data.convo @@ -544,18 +547,21 @@ export class Convo { // throw new Error('UNCOMMENT TO TEST RETRY') } - const response = await this.agent.api.chat.bsky.convo.getMessages( - { - cursor: this.oldestRev, - convoId: this.convoId, - limit: isNative ? 25 : 50, - }, - { - headers: { - Authorization: this.__tempFromUserDid, + const nextCursor = this.oldestRev // for TS + const response = await networkRetry(2, () => { + return this.agent.api.chat.bsky.convo.getMessages( + { + cursor: nextCursor, + convoId: this.convoId, + limit: isNative ? 40 : 60, }, - }, - ) + { + headers: { + Authorization: this.__tempFromUserDid, + }, + }, + ) + }) const {cursor, messages} = response.data this.oldestRev = cursor ?? null @@ -736,18 +742,20 @@ export class Convo { // throw new Error('UNCOMMENT TO TEST RETRY') const {id, message} = pendingMessage - const response = await this.agent.api.chat.bsky.convo.sendMessage( - { - convoId: this.convoId, - message, - }, - { - encoding: 'application/json', - headers: { - Authorization: this.__tempFromUserDid, + const response = await networkRetry(2, () => { + return this.agent.api.chat.bsky.convo.sendMessage( + { + convoId: this.convoId, + message, }, - }, - ) + { + encoding: 'application/json', + headers: { + Authorization: this.__tempFromUserDid, + }, + }, + ) + }) const res = response.data /* @@ -786,20 +794,22 @@ export class Convo { try { const messageArray = Array.from(this.pendingMessages.values()) - const {data} = await this.agent.api.chat.bsky.convo.sendMessageBatch( - { - items: messageArray.map(({message}) => ({ - convoId: this.convoId, - message, - })), - }, - { - encoding: 'application/json', - headers: { - Authorization: this.__tempFromUserDid, + const {data} = await networkRetry(2, () => { + return this.agent.api.chat.bsky.convo.sendMessageBatch( + { + items: messageArray.map(({message}) => ({ + convoId: this.convoId, + message, + })), }, - }, - ) + { + encoding: 'application/json', + headers: { + Authorization: this.__tempFromUserDid, + }, + }, + ) + }) const {items} = data /* @@ -838,18 +848,20 @@ export class Convo { this.commit() try { - await this.agent.api.chat.bsky.convo.deleteMessageForSelf( - { - convoId: this.convoId, - messageId, - }, - { - encoding: 'application/json', - headers: { - Authorization: this.__tempFromUserDid, + await networkRetry(2, () => { + return this.agent.api.chat.bsky.convo.deleteMessageForSelf( + { + convoId: this.convoId, + messageId, }, - }, - ) + { + encoding: 'application/json', + headers: { + Authorization: this.__tempFromUserDid, + }, + }, + ) + }) } catch (e) { this.deletedMessages.delete(messageId) this.commit() diff --git a/src/state/messages/events/agent.ts b/src/state/messages/events/agent.ts index eea61a61b..061337d3b 100644 --- a/src/state/messages/events/agent.ts +++ b/src/state/messages/events/agent.ts @@ -2,6 +2,7 @@ import {BskyAgent, ChatBskyConvoGetLog} from '@atproto-labs/api' import EventEmitter from 'eventemitter3' import {nanoid} from 'nanoid/non-secure' +import {networkRetry} from '#/lib/async/retry' import {logger} from '#/logger' import {DEFAULT_POLL_INTERVAL} from '#/state/messages/events/const' import { @@ -265,16 +266,18 @@ export class MessagesEventBus { logger.debug(`${LOGGER_CONTEXT}: init`, {}, logger.DebugContext.convo) try { - const response = await this.agent.api.chat.bsky.convo.listConvos( - { - limit: 1, - }, - { - headers: { - Authorization: this.__tempFromUserDid, + const response = await networkRetry(2, () => { + return this.agent.api.chat.bsky.convo.listConvos( + { + limit: 1, }, - }, - ) + { + headers: { + Authorization: this.__tempFromUserDid, + }, + }, + ) + }) // throw new Error('UNCOMMENT TO TEST INIT FAILURE') const {convos} = response.data @@ -358,16 +361,18 @@ export class MessagesEventBus { // ) try { - const response = await this.agent.api.chat.bsky.convo.getLog( - { - cursor: this.latestRev, - }, - { - headers: { - Authorization: this.__tempFromUserDid, + const response = await networkRetry(2, () => { + return this.agent.api.chat.bsky.convo.getLog( + { + cursor: this.latestRev, }, - }, - ) + { + headers: { + Authorization: this.__tempFromUserDid, + }, + }, + ) + }) // throw new Error('UNCOMMENT TO TEST POLL FAILURE') |