about summary refs log tree commit diff
path: root/src/state/messages/convo/agent.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/messages/convo/agent.ts')
-rw-r--r--src/state/messages/convo/agent.ts46
1 files changed, 43 insertions, 3 deletions
diff --git a/src/state/messages/convo/agent.ts b/src/state/messages/convo/agent.ts
index 8673c70ad..0a75401c2 100644
--- a/src/state/messages/convo/agent.ts
+++ b/src/state/messages/convo/agent.ts
@@ -152,6 +152,7 @@ export class Convo {
           fetchMessageHistory: undefined,
         }
       }
+      case ConvoStatus.Disabled:
       case ConvoStatus.Suspended:
       case ConvoStatus.Backgrounded:
       case ConvoStatus.Ready: {
@@ -241,6 +242,13 @@ export class Convo {
             this.withdrawRequestedPollInterval()
             break
           }
+          case ConvoDispatchEvent.Disable: {
+            this.status = ConvoStatus.Disabled
+            this.fetchMessageHistory() // finish init
+            this.cleanupFirehoseConnection?.()
+            this.withdrawRequestedPollInterval()
+            break
+          }
         }
         break
       }
@@ -269,6 +277,12 @@ export class Convo {
             this.withdrawRequestedPollInterval()
             break
           }
+          case ConvoDispatchEvent.Disable: {
+            this.status = ConvoStatus.Disabled
+            this.cleanupFirehoseConnection?.()
+            this.withdrawRequestedPollInterval()
+            break
+          }
         }
         break
       }
@@ -303,6 +317,12 @@ export class Convo {
             this.withdrawRequestedPollInterval()
             break
           }
+          case ConvoDispatchEvent.Disable: {
+            this.status = ConvoStatus.Disabled
+            this.cleanupFirehoseConnection?.()
+            this.withdrawRequestedPollInterval()
+            break
+          }
         }
         break
       }
@@ -321,6 +341,10 @@ export class Convo {
             this.error = action.payload
             break
           }
+          case ConvoDispatchEvent.Disable: {
+            this.status = ConvoStatus.Disabled
+            break
+          }
         }
         break
       }
@@ -343,9 +367,17 @@ export class Convo {
             this.error = action.payload
             break
           }
+          case ConvoDispatchEvent.Disable: {
+            this.status = ConvoStatus.Disabled
+            break
+          }
         }
         break
       }
+      case ConvoStatus.Disabled: {
+        // can't do anything
+        break
+      }
       default:
         break
     }
@@ -424,9 +456,13 @@ export class Convo {
         throw new Error('Convo: could not find recipients in convo')
       }
 
-      // await new Promise(y => setTimeout(y, 2000))
-      // throw new Error('UNCOMMENT TO TEST INIT FAILURE')
-      this.dispatch({event: ConvoDispatchEvent.Ready})
+      const userIsDisabled = this.sender.chatDisabled as boolean
+
+      if (userIsDisabled) {
+        this.dispatch({event: ConvoDispatchEvent.Disable})
+      } else {
+        this.dispatch({event: ConvoDispatchEvent.Ready})
+      }
     } catch (e: any) {
       logger.error(e, {context: 'Convo: setup failed'})
 
@@ -829,6 +865,10 @@ export class Convo {
               ],
             })
             break
+          case 'Account is disabled':
+            this.pendingMessageFailure = 'unrecoverable'
+            this.dispatch({event: ConvoDispatchEvent.Disable})
+            break
           default:
             logger.warn(
               `Convo handleSendMessageFailure could not handle error`,