@plotday/twister 0.43.0 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/bin/commands/deploy.js +87 -10
  2. package/bin/commands/deploy.js.map +1 -1
  3. package/dist/connector.d.ts +87 -7
  4. package/dist/connector.d.ts.map +1 -1
  5. package/dist/connector.js +70 -0
  6. package/dist/connector.js.map +1 -1
  7. package/dist/docs/assets/hierarchy.js +1 -1
  8. package/dist/docs/assets/navigation.js +1 -1
  9. package/dist/docs/assets/search.js +1 -1
  10. package/dist/docs/classes/index.Connector.html +102 -45
  11. package/dist/docs/classes/index.Imap.html +52 -0
  12. package/dist/docs/classes/index.Options.html +2 -2
  13. package/dist/docs/classes/index.Smtp.html +33 -0
  14. package/dist/docs/classes/tool.ITool.html +1 -1
  15. package/dist/docs/classes/tool.Tool.html +23 -16
  16. package/dist/docs/classes/tools_ai.AI.html +1 -1
  17. package/dist/docs/classes/tools_callbacks.Callbacks.html +1 -1
  18. package/dist/docs/classes/tools_integrations.Integrations.html +9 -9
  19. package/dist/docs/classes/tools_network.Network.html +15 -7
  20. package/dist/docs/classes/tools_plot.Plot.html +57 -21
  21. package/dist/docs/classes/tools_store.Store.html +1 -1
  22. package/dist/docs/classes/tools_tasks.Tasks.html +1 -1
  23. package/dist/docs/classes/tools_twists.Twists.html +1 -1
  24. package/dist/docs/classes/twist.Twist.html +29 -18
  25. package/dist/docs/enums/plot.ActionType.html +9 -7
  26. package/dist/docs/enums/plot.ActorType.html +4 -4
  27. package/dist/docs/enums/plot.ConferencingProvider.html +6 -6
  28. package/dist/docs/enums/tools_integrations.AuthProvider.html +13 -11
  29. package/dist/docs/enums/tools_plot.ContactAccess.html +2 -2
  30. package/dist/docs/enums/tools_plot.LinkAccess.html +5 -0
  31. package/dist/docs/enums/tools_plot.PriorityAccess.html +3 -3
  32. package/dist/docs/enums/tools_plot.ThreadAccess.html +8 -3
  33. package/dist/docs/hierarchy.html +1 -1
  34. package/dist/docs/media/AGENTS.md +10 -6
  35. package/dist/docs/media/MULTI_USER_AUTH.md +14 -11
  36. package/dist/docs/modules/index.html +1 -1
  37. package/dist/docs/modules/plot.html +1 -1
  38. package/dist/docs/modules/tools_plot.html +1 -1
  39. package/dist/docs/types/index.BooleanDef.html +2 -2
  40. package/dist/docs/types/index.ImapAddress.html +6 -0
  41. package/dist/docs/types/index.ImapConnectOptions.html +12 -0
  42. package/dist/docs/types/index.ImapFetchOptions.html +8 -0
  43. package/dist/docs/types/index.ImapFlagOperation.html +2 -0
  44. package/dist/docs/types/index.ImapMailbox.html +10 -0
  45. package/dist/docs/types/index.ImapMailboxStatus.html +14 -0
  46. package/dist/docs/types/index.ImapMessage.html +28 -0
  47. package/dist/docs/types/index.ImapSearchCriteria.html +18 -0
  48. package/dist/docs/types/index.ImapSession.html +2 -0
  49. package/dist/docs/types/index.NumberDef.html +2 -2
  50. package/dist/docs/types/index.OptionDef.html +1 -1
  51. package/dist/docs/types/index.OptionsSchema.html +1 -1
  52. package/dist/docs/types/index.ResolvedOptions.html +1 -1
  53. package/dist/docs/types/index.SmtpAddress.html +6 -0
  54. package/dist/docs/types/index.SmtpConnectOptions.html +14 -0
  55. package/dist/docs/types/index.SmtpMessage.html +24 -0
  56. package/dist/docs/types/index.SmtpSendResult.html +8 -0
  57. package/dist/docs/types/index.SmtpSession.html +2 -0
  58. package/dist/docs/types/index.TextDef.html +5 -2
  59. package/dist/docs/types/plot.Action.html +6 -2
  60. package/dist/docs/types/plot.Actor.html +5 -5
  61. package/dist/docs/types/plot.ContentType.html +1 -1
  62. package/dist/docs/types/plot.Link.html +21 -18
  63. package/dist/docs/types/plot.LinkUpdate.html +5 -0
  64. package/dist/docs/types/plot.NewActor.html +1 -1
  65. package/dist/docs/types/plot.NewContact.html +3 -17
  66. package/dist/docs/types/plot.NewLink.html +6 -4
  67. package/dist/docs/types/plot.NewLinkWithNotes.html +5 -4
  68. package/dist/docs/types/plot.NewNote.html +6 -2
  69. package/dist/docs/types/plot.NewTags.html +1 -1
  70. package/dist/docs/types/plot.NewThread.html +1 -1
  71. package/dist/docs/types/plot.NewThreadWithNotes.html +1 -1
  72. package/dist/docs/types/plot.Note.html +1 -1
  73. package/dist/docs/types/plot.NoteUpdate.html +1 -1
  74. package/dist/docs/types/plot.PickPriorityConfig.html +2 -2
  75. package/dist/docs/types/plot.PlanOperation.html +10 -0
  76. package/dist/docs/types/plot.PriorityUpdate.html +5 -3
  77. package/dist/docs/types/plot.Tags.html +1 -1
  78. package/dist/docs/types/plot.Thread.html +1 -1
  79. package/dist/docs/types/plot.ThreadCommon.html +7 -7
  80. package/dist/docs/types/plot.ThreadFilter.html +2 -2
  81. package/dist/docs/types/plot.ThreadMeta.html +1 -1
  82. package/dist/docs/types/plot.ThreadType.html +3 -3
  83. package/dist/docs/types/plot.ThreadUpdate.html +1 -1
  84. package/dist/docs/types/plot.ThreadWithNotes.html +1 -1
  85. package/dist/docs/types/tools_integrations.ArchiveLinkFilter.html +5 -5
  86. package/dist/docs/types/tools_integrations.AuthToken.html +4 -4
  87. package/dist/docs/types/tools_integrations.Authorization.html +4 -4
  88. package/dist/docs/types/tools_integrations.Channel.html +4 -2
  89. package/dist/docs/types/tools_integrations.LinkTypeConfig.html +10 -8
  90. package/dist/docs/types/tools_plot.LinkFilter.html +5 -5
  91. package/dist/docs/types/tools_plot.LinkSearchResult.html +1 -1
  92. package/dist/docs/types/tools_plot.NoteIntentHandler.html +4 -4
  93. package/dist/docs/types/tools_plot.NoteSearchResult.html +1 -1
  94. package/dist/docs/types/tools_plot.SearchOptions.html +4 -4
  95. package/dist/docs/types/tools_plot.SearchResult.html +1 -1
  96. package/dist/docs/variables/tools_plot.SEARCH_DEFAULT_LIMIT.html +1 -1
  97. package/dist/docs/variables/tools_plot.SEARCH_MAX_LIMIT.html +1 -1
  98. package/dist/llm-docs/connector.d.ts +1 -1
  99. package/dist/llm-docs/connector.d.ts.map +1 -1
  100. package/dist/llm-docs/connector.js +1 -1
  101. package/dist/llm-docs/connector.js.map +1 -1
  102. package/dist/llm-docs/index.d.ts.map +1 -1
  103. package/dist/llm-docs/index.js +4 -0
  104. package/dist/llm-docs/index.js.map +1 -1
  105. package/dist/llm-docs/options.d.ts +1 -1
  106. package/dist/llm-docs/options.d.ts.map +1 -1
  107. package/dist/llm-docs/options.js +1 -1
  108. package/dist/llm-docs/options.js.map +1 -1
  109. package/dist/llm-docs/plot.d.ts +1 -1
  110. package/dist/llm-docs/plot.d.ts.map +1 -1
  111. package/dist/llm-docs/plot.js +1 -1
  112. package/dist/llm-docs/plot.js.map +1 -1
  113. package/dist/llm-docs/tool.d.ts +1 -1
  114. package/dist/llm-docs/tool.d.ts.map +1 -1
  115. package/dist/llm-docs/tool.js +1 -1
  116. package/dist/llm-docs/tool.js.map +1 -1
  117. package/dist/llm-docs/tools/imap.d.ts +9 -0
  118. package/dist/llm-docs/tools/imap.d.ts.map +1 -0
  119. package/dist/llm-docs/tools/imap.js +8 -0
  120. package/dist/llm-docs/tools/imap.js.map +1 -0
  121. package/dist/llm-docs/tools/integrations.d.ts +1 -1
  122. package/dist/llm-docs/tools/integrations.d.ts.map +1 -1
  123. package/dist/llm-docs/tools/integrations.js +1 -1
  124. package/dist/llm-docs/tools/integrations.js.map +1 -1
  125. package/dist/llm-docs/tools/network.d.ts +1 -1
  126. package/dist/llm-docs/tools/network.d.ts.map +1 -1
  127. package/dist/llm-docs/tools/network.js +1 -1
  128. package/dist/llm-docs/tools/network.js.map +1 -1
  129. package/dist/llm-docs/tools/plot.d.ts +1 -1
  130. package/dist/llm-docs/tools/plot.d.ts.map +1 -1
  131. package/dist/llm-docs/tools/plot.js +1 -1
  132. package/dist/llm-docs/tools/plot.js.map +1 -1
  133. package/dist/llm-docs/tools/smtp.d.ts +9 -0
  134. package/dist/llm-docs/tools/smtp.d.ts.map +1 -0
  135. package/dist/llm-docs/tools/smtp.js +8 -0
  136. package/dist/llm-docs/tools/smtp.js.map +1 -0
  137. package/dist/llm-docs/twist.d.ts +1 -1
  138. package/dist/llm-docs/twist.d.ts.map +1 -1
  139. package/dist/llm-docs/twist.js +1 -1
  140. package/dist/llm-docs/twist.js.map +1 -1
  141. package/dist/options.d.ts +3 -0
  142. package/dist/options.d.ts.map +1 -1
  143. package/dist/options.js.map +1 -1
  144. package/dist/plot.d.ts +132 -21
  145. package/dist/plot.d.ts.map +1 -1
  146. package/dist/plot.js +2 -0
  147. package/dist/plot.js.map +1 -1
  148. package/dist/tool.d.ts +10 -1
  149. package/dist/tool.d.ts.map +1 -1
  150. package/dist/tool.js +10 -1
  151. package/dist/tool.js.map +1 -1
  152. package/dist/tools/imap.d.ts +235 -0
  153. package/dist/tools/imap.d.ts.map +1 -0
  154. package/dist/tools/imap.js +61 -0
  155. package/dist/tools/imap.js.map +1 -0
  156. package/dist/tools/index.d.ts +2 -0
  157. package/dist/tools/index.d.ts.map +1 -1
  158. package/dist/tools/index.js +2 -0
  159. package/dist/tools/index.js.map +1 -1
  160. package/dist/tools/integrations.d.ts +7 -1
  161. package/dist/tools/integrations.d.ts.map +1 -1
  162. package/dist/tools/integrations.js +2 -0
  163. package/dist/tools/integrations.js.map +1 -1
  164. package/dist/tools/network.d.ts +23 -16
  165. package/dist/tools/network.d.ts.map +1 -1
  166. package/dist/tools/network.js.map +1 -1
  167. package/dist/tools/plot.d.ts +90 -3
  168. package/dist/tools/plot.d.ts.map +1 -1
  169. package/dist/tools/plot.js +14 -0
  170. package/dist/tools/plot.js.map +1 -1
  171. package/dist/tools/smtp.d.ts +155 -0
  172. package/dist/tools/smtp.d.ts.map +1 -0
  173. package/dist/tools/smtp.js +62 -0
  174. package/dist/tools/smtp.js.map +1 -0
  175. package/dist/twist.d.ts +16 -2
  176. package/dist/twist.d.ts.map +1 -1
  177. package/dist/twist.js +15 -1
  178. package/dist/twist.js.map +1 -1
  179. package/package.json +21 -1
@@ -1 +1 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="./"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Creating Plot Twists</title><link rel="icon" href="assets/favicon.svg" type="image/svg+xml"/><meta name="description" content="Documentation for Creating Plot Twists"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/icons.js" id="tsd-icons-script"></script><script async src="assets/search.js" id="tsd-search-script"></script><script async src="assets/navigation.js" id="tsd-nav-script"></script><script async src="assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="/" class="title">Creating Plot Twists</a><div id="tsd-toolbar-links"><a href="https://plot.day">Plot</a><a href="https://github.com/plotday/plot">GitHub</a><a href="https://www.npmjs.com/package/@plotday/twister">NPM</a></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><h1>Creating Plot Twists</h1></div><h2>Hierarchy Summary</h2><ul class="tsd-full-hierarchy"><li data-refl="125" id="tool.ITool"><a href="classes/tool.ITool.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>ITool</a><ul><li data-refl="128" id="tool.Tool"><a href="classes/tool.Tool.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Tool</a></li><li data-refl="492" id="tools/twists.Twists"><a href="classes/tools_twists.Twists.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Twists</a></li><li data-refl="522" id="tools/ai.AI"><a href="classes/tools_ai.AI.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AI</a></li><li data-refl="713" id="tools/callbacks.Callbacks"><a href="classes/tools_callbacks.Callbacks.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Callbacks</a></li><li data-refl="783" id="tools/integrations.Integrations"><a href="classes/tools_integrations.Integrations.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Integrations</a></li><li data-refl="860" id="tools/network.Network"><a href="classes/tools_network.Network.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Network</a></li><li data-refl="926" id="tools/plot.Plot"><a href="classes/tools_plot.Plot.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Plot</a></li><li data-refl="1019" id="tools/store.Store"><a href="classes/tools_store.Store.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Store</a></li><li data-refl="1040" id="tools/tasks.Tasks"><a href="classes/tools_tasks.Tasks.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Tasks</a></li><li data-refl="1431" id="index.Options"><a href="classes/index.Options.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Options</a></li></ul></li></ul><ul class="tsd-full-hierarchy"><li data-refl="9" id="twist.Twist"><a href="classes/twist.Twist.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Twist</a><ul><li data-refl="1106" id="index.Connector"><a href="classes/index.Connector.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Connector</a></li></ul></li></ul></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav id="tsd-sidebar-links" class="tsd-navigation"><a href="https://plot.day" class="tsd-nav-link">Plot</a><a href="https://github.com/plotday/plot" class="tsd-nav-link">GitHub</a><a href="https://www.npmjs.com/package/@plotday/twister" class="tsd-nav-link">NPM</a></nav><nav class="tsd-navigation"><a href="modules.html">Creating Plot Twists</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
1
+ <!DOCTYPE html><html class="default" lang="en" data-base="./"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Creating Plot Twists</title><link rel="icon" href="assets/favicon.svg" type="image/svg+xml"/><meta name="description" content="Documentation for Creating Plot Twists"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/icons.js" id="tsd-icons-script"></script><script async src="assets/search.js" id="tsd-search-script"></script><script async src="assets/navigation.js" id="tsd-nav-script"></script><script async src="assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="/" class="title">Creating Plot Twists</a><div id="tsd-toolbar-links"><a href="https://plot.day">Plot</a><a href="https://github.com/plotday/plot">GitHub</a><a href="https://www.npmjs.com/package/@plotday/twister">NPM</a></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><h1>Creating Plot Twists</h1></div><h2>Hierarchy Summary</h2><ul class="tsd-full-hierarchy"><li data-refl="125" id="tool.ITool"><a href="classes/tool.ITool.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>ITool</a><ul><li data-refl="128" id="tool.Tool"><a href="classes/tool.Tool.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Tool</a></li><li data-refl="546" id="tools/twists.Twists"><a href="classes/tools_twists.Twists.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Twists</a></li><li data-refl="576" id="tools/ai.AI"><a href="classes/tools_ai.AI.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>AI</a></li><li data-refl="767" id="tools/callbacks.Callbacks"><a href="classes/tools_callbacks.Callbacks.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Callbacks</a></li><li data-refl="839" id="tools/integrations.Integrations"><a href="classes/tools_integrations.Integrations.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Integrations</a></li><li data-refl="917" id="tools/network.Network"><a href="classes/tools_network.Network.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Network</a></li><li data-refl="988" id="tools/plot.Plot"><a href="classes/tools_plot.Plot.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Plot</a></li><li data-refl="1110" id="tools/store.Store"><a href="classes/tools_store.Store.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Store</a></li><li data-refl="1131" id="tools/tasks.Tasks"><a href="classes/tools_tasks.Tasks.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Tasks</a></li><li data-refl="1558" id="index.Imap"><a href="classes/index.Imap.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Imap</a></li><li data-refl="1623" id="index.Smtp"><a href="classes/index.Smtp.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Smtp</a></li><li data-refl="1677" id="index.Options"><a href="classes/index.Options.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Options</a></li></ul></li></ul><ul class="tsd-full-hierarchy"><li data-refl="9" id="twist.Twist"><a href="classes/twist.Twist.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Twist</a><ul><li data-refl="1197" id="index.Connector"><a href="classes/index.Connector.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Class"><use href="assets/icons.svg#icon-128"></use></svg>Connector</a></li></ul></li></ul></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav id="tsd-sidebar-links" class="tsd-navigation"><a href="https://plot.day" class="tsd-nav-link">Plot</a><a href="https://github.com/plotday/plot" class="tsd-nav-link">GitHub</a><a href="https://www.npmjs.com/package/@plotday/twister" class="tsd-nav-link">NPM</a></nav><nav class="tsd-navigation"><a href="modules.html">Creating Plot Twists</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
@@ -178,8 +178,10 @@ export class MyConnector extends Connector<MyConnector> {
178
178
  await this.set(`disable_callback_${channel.id}`, disableCallbackToken);
179
179
  }
180
180
 
181
- // Setup webhook and start initial sync
182
- await this.setupWebhook(channel.id);
181
+ // Queue webhook and sync as separate tasks — do NOT run inline,
182
+ // onChannelEnabled blocks the HTTP response until it returns
183
+ const webhookCallback = await this.callback(this.setupWebhook, channel.id);
184
+ await this.runTask(webhookCallback);
183
185
  await this.startBatchSync(channel.id);
184
186
  }
185
187
 
@@ -222,7 +224,8 @@ export class MyConnector extends Connector<MyConnector> {
222
224
  ): Promise<void> {
223
225
  const callbackToken = await this.tools.callbacks.createFromParent(callback, ...extraArgs);
224
226
  await this.set(`item_callback_${options.projectId}`, callbackToken);
225
- await this.setupWebhook(options.projectId);
227
+ const webhookCallback = await this.callback(this.setupWebhook, options.projectId);
228
+ await this.runTask(webhookCallback);
226
229
  await this.startBatchSync(options.projectId);
227
230
  }
228
231
 
@@ -249,8 +252,8 @@ export class MyConnector extends Connector<MyConnector> {
249
252
  await this.clear(`sync_state_${projectId}`);
250
253
  }
251
254
 
252
- // 8. Webhook setup
253
- private async setupWebhook(resourceId: string): Promise<void> {
255
+ // 8. Webhook setup (non-private so it can be used with this.callback())
256
+ async setupWebhook(resourceId: string): Promise<void> {
254
257
  try {
255
258
  const webhookUrl = await this.tools.network.createWebhook(
256
259
  {},
@@ -869,7 +872,7 @@ After creating a new connector, add it to `pnpm-workspace.yaml` if not already c
869
872
  - [ ] Declare `static readonly Options: SyncToolOptions` and `declare readonly Options: SyncToolOptions`
870
873
  - [ ] Declare all dependencies in `build()`: Integrations, Network, Callbacks, Tasks
871
874
  - [ ] Set `static readonly handleReplies = true` if the connector supports bidirectional sync
872
- - [ ] Implement `getChannels()`, `onChannelEnabled()`, `onChannelDisabled()`
875
+ - [ ] Implement `getChannels()`, `onChannelEnabled()`, `onChannelDisabled()` — **use `runTask()` (not `run()`) in `onChannelEnabled` to avoid blocking the API response**
873
876
  - [ ] Convert parent callbacks to tokens with `createFromParent()` — **never pass functions to `this.callback()`**
874
877
  - [ ] Store callback tokens with `this.set()`, retrieve with `this.get<Callback>()`
875
878
  - [ ] Pass only serializable values (no functions, no undefined) to `this.callback()`
@@ -905,6 +908,7 @@ After creating a new connector, add it to `pnpm-workspace.yaml` if not already c
905
908
  14. **❌ Stripping HTML tags locally** — Pass raw HTML with `contentType: "html"` for server-side conversion. Local regex stripping breaks encoding and loses links
906
909
  15. **❌ Using placeholder titles in comment/update webhooks** — `title` always overwrites on upsert. Always use the real entity title (fetch from API if not in the webhook payload). Never use IDs or keys as placeholder titles
907
910
  16. **❌ Not setting `created` on notes from external data** — Always pass the external system's timestamp (e.g., `internalDate` from Gmail, `created_at` from an API) as the note's `created` field. Omitting it defaults to sync time, making all notes appear to have been created "just now"
911
+ 17. **❌ Using `this.run()` in `onChannelEnabled` to start sync** — `onChannelEnabled` runs synchronously inside the API request handler. Using `this.run()` (which executes inline) blocks the HTTP response until the entire sync completes, causing client timeouts. Always use `this.runTask()` to queue the initial sync as a separate execution so `onChannelEnabled` returns quickly
908
912
 
909
913
  ## Study These Examples
910
914
 
@@ -4,11 +4,11 @@ Twists and connectors operating in shared priorities must handle authentication
4
4
 
5
5
  ## Auth Models
6
6
 
7
- | Model | Use case | Example |
8
- |-------|----------|---------|
9
- | No auth | Twist doesn't need external credentials | Text-only twist |
10
- | Read-only single auth | Installer connects, synced data visible to all | Calendar sync (read) |
11
- | Two-way per-user auth | Write-backs use the acting user's credentials | Comments, RSVP responses |
7
+ | Model | Use case | Example |
8
+ | --------------------- | ---------------------------------------------- | ------------------------ |
9
+ | No auth | Twist doesn't need external credentials | Text-only twist |
10
+ | Read-only single auth | Installer connects, synced data visible to all | Calendar sync (read) |
11
+ | Two-way per-user auth | Write-backs use the acting user's credentials | Comments, RSVP responses |
12
12
 
13
13
  ## Private Auth Activities
14
14
 
@@ -32,6 +32,7 @@ async activate(_priority: Pick<Priority, "id">, context?: { actor: Actor }) {
32
32
  ```
33
33
 
34
34
  Key points:
35
+
35
36
  - `private: true` — only the author and mentioned users can see the activity
36
37
  - `context?.actor` — the user who installed the twist (available from the SDK)
37
38
  - Always guard with `?.` since `context` is optional for backward compatibility
@@ -73,7 +74,7 @@ private async onNoteCreated(note: Note): Promise<void> {
73
74
 
74
75
  ### When Actor ID Is Not Available
75
76
 
76
- For callbacks like `onActivityUpdated` where the acting user's ID is not included in the callback signature, continue using the installer's stored auth token. This is acceptable because:
77
+ For callbacks like `onThreadUpdated` where the acting user's ID is not included in the callback signature, continue using the installer's stored auth token. This is acceptable because:
77
78
 
78
79
  - Activity field updates (title, assignee, done) are less user-specific
79
80
  - The change itself is the same regardless of who made it
@@ -100,11 +101,13 @@ await this.tools.plot.createActivity({
100
101
  title: "Connect to sync your changes",
101
102
  private: true,
102
103
  source: `auth:${actorId}`, // Dedup: one auth request per user
103
- notes: [{
104
- content: "Connect your account so your changes appear under your name.",
105
- links: [authLink],
106
- mentions: [{ id: actorId as ActorId }],
107
- }],
104
+ notes: [
105
+ {
106
+ content: "Connect your account so your changes appear under your name.",
107
+ links: [authLink],
108
+ mentions: [{ id: actorId as ActorId }],
109
+ },
110
+ ],
108
111
  });
109
112
  ```
110
113