@inboxsdk/core 0.2.28-alpha.3 → 0.2.28-alpha.5

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 (398) hide show
  1. package/inboxsdk.js +1 -1
  2. package/inboxsdk.js.map +1 -1
  3. package/package.json +5 -1
  4. package/src/build/exec.js +26 -0
  5. package/src/build/spawn.js +17 -0
  6. package/src/common/ajax.js +90 -0
  7. package/src/common/cachebust-url.js +10 -0
  8. package/src/common/censorHTMLstring.js +37 -0
  9. package/src/common/censorHTMLtree.js +28 -0
  10. package/src/common/censorJSONTree.js +15 -0
  11. package/src/common/connectivity-test.js +21 -0
  12. package/src/common/defer.js +11 -0
  13. package/src/common/find-parent.js +10 -0
  14. package/src/common/get-extension-id.js +7 -0
  15. package/src/common/get-or-fail.js +8 -0
  16. package/src/common/get-session-id.js +14 -0
  17. package/src/common/get-stack-trace.js +6 -0
  18. package/src/common/html-to-text.js +7 -0
  19. package/src/common/isElementVisible.js +6 -0
  20. package/src/common/load-script.js +127 -0
  21. package/src/common/log-error.js +191 -0
  22. package/src/common/quoted-split.js +18 -0
  23. package/src/common/rate-limit-queuer.js +57 -0
  24. package/src/common/rate-limit.js +14 -0
  25. package/src/common/version.js +6 -0
  26. package/src/inboxsdk-js/check-requirements.js +7 -3
  27. package/src/inboxsdk-js/header.js +1 -0
  28. package/src/inboxsdk-js/inboxsdk-NONREMOTE-INTEGRATED-PAGEWORLD.js +5 -6
  29. package/src/inboxsdk-js/inboxsdk-NONREMOTE.js +4 -3
  30. package/src/inboxsdk-js/inboxsdk-REMOTE.js +3 -1
  31. package/src/inboxsdk-js/inboxsdk-TEST.js +4 -3
  32. package/src/inboxsdk-js/inboxsdk.js +33 -39
  33. package/src/inboxsdk-js/loading/load-platform-implementation-DEV.js +15 -18
  34. package/src/inboxsdk-js/loading/platform-implementation-loader.js +27 -0
  35. package/src/injected-js/gmail/constants.js +2 -0
  36. package/src/injected-js/gmail/modify-suggestions.js +106 -0
  37. package/src/injected-js/gmail/modify-suggestions.test.js +8 -9
  38. package/src/injected-js/gmail/setup-gmail-interceptor.js +340 -579
  39. package/src/injected-js/gmail/setup-gmonkey-handler.js +49 -0
  40. package/src/injected-js/gmail/sync-compose-processor-20220909.js +298 -0
  41. package/src/injected-js/gmail/sync-compose-processor.js +55 -0
  42. package/src/injected-js/gmail/sync-compose-request-processor.js +110 -0
  43. package/src/injected-js/gmail/sync-compose-request-processor.test.js +39 -49
  44. package/src/injected-js/gmail/thread-identifier/click-and-get-popup-url.js +20 -33
  45. package/src/injected-js/gmail/thread-identifier/index.js +57 -93
  46. package/src/injected-js/gmail/thread-identifier/thread-row-parser.js +22 -31
  47. package/src/injected-js/gmail/thread-identifier/thread-row-parser.test.js +12 -28
  48. package/src/injected-js/inbox/setupAjaxInterceptor.js +64 -121
  49. package/src/injected-js/inbox/setupClickAndGetNewIframeSrc.js +53 -66
  50. package/src/injected-js/inbox/setupComposeViewDraftIDFinder.js +20 -36
  51. package/src/injected-js/inbox/setupInboxFakeWindowResizeListener.js +13 -13
  52. package/src/injected-js/injected-logger.js +50 -0
  53. package/src/injected-js/main.js +11 -24
  54. package/src/injected-js/message-metadata-holder.js +52 -82
  55. package/src/injected-js/setup-data-exposer.js +89 -148
  56. package/src/injected-js/setup-error-silencer.js +21 -21
  57. package/src/injected-js/setup-event-reemitter.js +30 -22
  58. package/src/injected-js/setupCustomViewEventAssassin.js +90 -0
  59. package/src/injected-js/setupInboxCustomViewLinkFixer.js +24 -29
  60. package/src/injected-js/setupPushStateListener.js +18 -11
  61. package/src/injected-js/xhr-helper.js +62 -65
  62. package/src/injected-js/xhr-proxy-factory.js +195 -445
  63. package/src/injected-js/xhr-proxy-factory.test.js +824 -991
  64. package/src/platform-implementation-js/constants/nav-item-types.js +19 -0
  65. package/src/platform-implementation-js/constants/router.js +14 -9
  66. package/src/platform-implementation-js/constants/toolbars.js +8 -3
  67. package/src/platform-implementation-js/dom-driver/gmail/custom-style.js +13 -13
  68. package/src/platform-implementation-js/dom-driver/gmail/gmail-butter-bar-driver.js +115 -136
  69. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.js +21 -0
  70. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-collapsible-panel.js +28 -0
  71. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-nav-item.js +98 -0
  72. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-support-item.js +4 -0
  73. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-toolbar-button-for-app.js +13 -14
  74. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/create-link.js +27 -48
  75. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/encodeDraftUrlId.js +8 -0
  76. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-draft-id-for-message-id.js +31 -42
  77. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-native-nav-item.js +30 -40
  78. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-message-id.js +12 -0
  79. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-thread-id.js +33 -0
  80. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-url-object.js +10 -18
  81. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadForOldGmailThreadId.js +21 -28
  82. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadFromSyncThreadId.js +33 -45
  83. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/gmail-load-event.js +31 -49
  84. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/goto-view.js +58 -65
  85. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/isIntegratedViewGmail.js +4 -0
  86. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/keyboard-shortcut-help-modifier.js +40 -124
  87. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-compose-window.js +17 -22
  88. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.js +44 -0
  89. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.test.js +10 -11
  90. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/override-gmail-back-button.js +44 -80
  91. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-query-rewriter.js +19 -26
  92. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-suggestions-provider.js +71 -147
  93. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-compose-view-driver-stream.js +91 -148
  94. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.js +150 -166
  95. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.test.js +70 -120
  96. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-app-id-warning.js +15 -15
  97. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-route-view.js +44 -67
  98. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.js +230 -379
  99. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.test.js +121 -307
  100. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-native-route-view.js +17 -24
  101. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/suppressAddon.js +41 -49
  102. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/temporary-track-download-url-validity.js +30 -40
  103. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/thread-row-identifier.js +28 -60
  104. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-events.js +61 -133
  105. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.js +95 -0
  106. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.js +30 -42
  107. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.test.js +52 -46
  108. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.js +354 -694
  109. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/get-main-content-element-changed-stream.js +38 -0
  110. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/wait-for-gmail-mode-to-settle.js +12 -0
  111. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.js +253 -0
  112. package/src/platform-implementation-js/dom-driver/gmail/gmail-page-communicator.js +200 -0
  113. package/src/platform-implementation-js/dom-driver/gmail/gmail-response-processor.js +533 -0
  114. package/src/platform-implementation-js/dom-driver/gmail/gmail-sync-response-processor.js +289 -0
  115. package/src/platform-implementation-js/dom-driver/gmail/is-compose-titlebar-light-color.js +21 -0
  116. package/src/platform-implementation-js/dom-driver/gmail/make-xhr-interceptor.js +77 -93
  117. package/src/platform-implementation-js/dom-driver/gmail/makePageParserTree.js +28 -0
  118. package/src/platform-implementation-js/dom-driver/gmail/pageParserOptions.js +19 -0
  119. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.js +126 -0
  120. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.js +35 -82
  121. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.test.js +44 -94
  122. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-global-icon-area.js +12 -19
  123. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-thread-icon-area.js +17 -29
  124. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-to-icon-area.js +26 -26
  125. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/index.js +391 -797
  126. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view/monitor-top-banner-size-and-react.js +7 -9
  127. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view.js +60 -109
  128. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-area-view.js +95 -135
  129. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.js +103 -211
  130. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.test.js +61 -61
  131. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-backdrop.js +17 -17
  132. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.js +188 -541
  133. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-button.js +67 -135
  134. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-compose-notice.js +27 -49
  135. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-inner-sidebar.js +7 -13
  136. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-outer-sidebar.js +9 -22
  137. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-recipient-row.js +36 -63
  138. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-status-bar.js +101 -0
  139. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-tooltip-to-button.js +38 -113
  140. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/detectClassicRecipientsArea.js +38 -0
  141. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-app-button-toolbars-are-closed.js +11 -16
  142. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-grouping-is-open.js +11 -17
  143. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/focus.js +8 -11
  144. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/from-manager.js +27 -47
  145. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-additional-action-toolbar.js +11 -24
  146. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-changes-stream.js +59 -111
  147. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-information-extractor.js +28 -0
  148. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-body-changes-stream.js +15 -14
  149. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-formatting-area-offset-left.js +11 -17
  150. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-minimized-stream.js +18 -24
  151. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-recipients.js +22 -0
  152. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-response-type-changes-stream.js +19 -23
  153. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/gmail-compose-button-view.js +233 -0
  154. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/insert-link-into-body.js +11 -19
  155. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/manage-button-grouping.js +141 -376
  156. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/monitor-selection-range.js +17 -28
  157. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/override-edit-subject.js +34 -70
  158. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/page-parser.js +223 -0
  159. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/position-formatting-toolbar.js +10 -17
  160. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/set-recipients.js +157 -0
  161. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/setupLinkPopovers.js +109 -0
  162. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/size-fixer.js +83 -137
  163. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/update-insert-more-area-left.js +10 -19
  164. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.js +632 -1190
  165. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/attachment-icon.js +5 -0
  166. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/get-updated-contact.js +29 -38
  167. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.js +327 -617
  168. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-nav-item-view.js +759 -0
  169. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-processor.js +26 -49
  170. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.js +188 -380
  171. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-row-list-view.js +104 -194
  172. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-support-item-view.js +84 -0
  173. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-row-view.js +382 -811
  174. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view/add-icon-area.js +34 -58
  175. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.js +330 -581
  176. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.test.js +123 -277
  177. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view/width-manager.js +15 -35
  178. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.js +216 -571
  179. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-toolbar-view.js +152 -336
  180. package/src/platform-implementation-js/dom-driver/gmail/views/native-gmail-nav-item-view.js +87 -211
  181. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-color-classes.js +33 -0
  182. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-view.js +325 -0
  183. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.js +58 -0
  184. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.js +55 -0
  185. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/inbox-dropdown-button-view.js +10 -11
  186. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.js +96 -0
  187. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-dropdown-button-view.js +30 -0
  188. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-parent-accessory-button-view.js +10 -0
  189. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-action-button-view.js +20 -29
  190. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-dropdown-view.js +22 -0
  191. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-label-view.js +41 -76
  192. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-modal-view-driver.js +45 -99
  193. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.js +76 -128
  194. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-tooltip-view.js +128 -319
  195. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-top-message-bar-driver.js +45 -78
  196. package/src/platform-implementation-js/dom-driver/inbox/__mocks__/getSidebarClassnames.js +8 -4
  197. package/src/platform-implementation-js/dom-driver/inbox/addNavItem.js +36 -54
  198. package/src/platform-implementation-js/dom-driver/inbox/addRecipientRow.js +35 -53
  199. package/src/platform-implementation-js/dom-driver/inbox/createLink.js +13 -15
  200. package/src/platform-implementation-js/dom-driver/inbox/createLink.test.js +15 -18
  201. package/src/platform-implementation-js/dom-driver/inbox/custom-style.js +14 -13
  202. package/src/platform-implementation-js/dom-driver/inbox/detection/appToolbarLocation/parser.js +14 -20
  203. package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentCard/parser.js +14 -13
  204. package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentOverlay/parser.js +35 -67
  205. package/src/platform-implementation-js/dom-driver/inbox/detection/chatSidebar/parser.js +16 -18
  206. package/src/platform-implementation-js/dom-driver/inbox/detection/compose/parser.js +68 -185
  207. package/src/platform-implementation-js/dom-driver/inbox/detection/message/parser.js +28 -56
  208. package/src/platform-implementation-js/dom-driver/inbox/detection/nativeDrawer/parser.js +12 -10
  209. package/src/platform-implementation-js/dom-driver/inbox/detection/searchBar/parser.js +16 -16
  210. package/src/platform-implementation-js/dom-driver/inbox/detection/thread/parser.js +24 -35
  211. package/src/platform-implementation-js/dom-driver/inbox/detection/thread-row/parser.js +37 -89
  212. package/src/platform-implementation-js/dom-driver/inbox/getComposeViewDriverLiveSet.js +56 -78
  213. package/src/platform-implementation-js/dom-driver/inbox/getInboxMessageIdForInboxThreadId.js +26 -32
  214. package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.js +52 -109
  215. package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.test.js +7 -8
  216. package/src/platform-implementation-js/dom-driver/inbox/gotoView.js +16 -20
  217. package/src/platform-implementation-js/dom-driver/inbox/gotoView.test.js +15 -16
  218. package/src/platform-implementation-js/dom-driver/inbox/inbox-butter-bar-driver.js +75 -83
  219. package/src/platform-implementation-js/dom-driver/inbox/inbox-driver.js +530 -822
  220. package/src/platform-implementation-js/dom-driver/inbox/inbox-page-communicator.js +48 -61
  221. package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.js +9 -12
  222. package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.test.js +12 -19
  223. package/src/platform-implementation-js/dom-driver/inbox/makePageParserTree.js +24 -33
  224. package/src/platform-implementation-js/dom-driver/inbox/pageParserOptions.js +201 -388
  225. package/src/platform-implementation-js/dom-driver/inbox/registerSearchSuggestionsProvider.js +249 -265
  226. package/src/platform-implementation-js/dom-driver/inbox/setupCustomAutocompleteSelectionHandling.js +84 -152
  227. package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.js +55 -67
  228. package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.test.js +43 -65
  229. package/src/platform-implementation-js/dom-driver/inbox/views/InboxLabelView.js +31 -56
  230. package/src/platform-implementation-js/dom-driver/inbox/views/InboxMoleViewDriver.js +191 -294
  231. package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarButtonView.js +32 -45
  232. package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarView.js +21 -39
  233. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-sidebar-view.js +153 -240
  234. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-button-view.js +75 -150
  235. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-tooltip-view.js +20 -37
  236. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-card-view.js +60 -114
  237. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-overlay-view.js +47 -65
  238. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-backdrop.js +41 -52
  239. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-chat-sidebar-view.js +27 -36
  240. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-button-view.js +52 -80
  241. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-view.js +465 -649
  242. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.js +37 -58
  243. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.test.js +14 -26
  244. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-drawer-view.js +118 -235
  245. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dropdown-view.js +10 -11
  246. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dummy-route-view.js +28 -46
  247. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-message-view.js +131 -202
  248. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-modal-view.js +40 -80
  249. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-route-view.js +35 -61
  250. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-row-view.js +124 -221
  251. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.js +125 -213
  252. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.test.js +104 -126
  253. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-tooltip-view.js +36 -51
  254. package/src/platform-implementation-js/dom-driver/inbox/views/inboxNavItemView.js +158 -297
  255. package/src/platform-implementation-js/dom-driver/inbox/waitForAnimationClickBlockerGone.js +21 -35
  256. package/src/platform-implementation-js/driver-common/compose/getDiscardStream.js +24 -43
  257. package/src/platform-implementation-js/driver-common/compose/getPresendingStream.js +39 -68
  258. package/src/platform-implementation-js/driver-common/getAccountUrlPart.js +17 -0
  259. package/src/platform-implementation-js/driver-common/getGmailMessageIdForSyncMessageId.js +14 -19
  260. package/src/platform-implementation-js/driver-common/getGmailThreadIdForRfcMessageId.js +27 -35
  261. package/src/platform-implementation-js/driver-common/getOriginalMessagePage.js +33 -0
  262. package/src/platform-implementation-js/driver-common/getRfcMessageIdForSyncMessageId.js +16 -22
  263. package/src/platform-implementation-js/driver-common/getSyncThreadsForSearch.js +49 -0
  264. package/src/platform-implementation-js/driver-common/getThreadIdFromMessageId.js +14 -14
  265. package/src/platform-implementation-js/driver-common/gmailAjax.js +65 -0
  266. package/src/platform-implementation-js/driver-common/inboxAjax.js +12 -7
  267. package/src/platform-implementation-js/driver-common/render-custom-icon.js +16 -0
  268. package/src/platform-implementation-js/driver-common/requestGmailThread.js +19 -20
  269. package/src/platform-implementation-js/driver-common/sidebar/AppSidebar.js +197 -306
  270. package/src/platform-implementation-js/driver-common/sidebar/ContentPanelViewDriver.js +113 -161
  271. package/src/platform-implementation-js/driver-common/update-icon.js +90 -0
  272. package/src/platform-implementation-js/driver-interfaces/compose-view-driver.js +1 -114
  273. package/src/platform-implementation-js/driver-interfaces/driver.js +1 -131
  274. package/src/platform-implementation-js/driver-interfaces/message-view-driver.js +4 -48
  275. package/src/platform-implementation-js/driver-interfaces/mole-view-driver.js +1 -29
  276. package/src/platform-implementation-js/driver-interfaces/route-view-driver.js +1 -32
  277. package/src/platform-implementation-js/driver-interfaces/thread-row-view-driver.js +1 -11
  278. package/src/platform-implementation-js/lib/ErrorCollector.js +47 -0
  279. package/src/platform-implementation-js/lib/Membrane.js +22 -0
  280. package/src/platform-implementation-js/lib/ScrollableContainByScreen.js +30 -0
  281. package/src/platform-implementation-js/lib/array-to-lifetimes.js +43 -41
  282. package/src/platform-implementation-js/lib/array-to-lifetimes.test.js +139 -155
  283. package/src/platform-implementation-js/lib/attemptWithRetries.js +16 -0
  284. package/src/platform-implementation-js/lib/common-page-communicator.js +137 -0
  285. package/src/platform-implementation-js/lib/copyAndValidateAutocompleteResults.js +19 -38
  286. package/src/platform-implementation-js/lib/css-selector-escape.js +7 -3
  287. package/src/platform-implementation-js/lib/delay-asap.js +12 -0
  288. package/src/platform-implementation-js/lib/delay-idle.js +16 -0
  289. package/src/platform-implementation-js/lib/dom/block-and-reemit-keyboard-events.js +36 -0
  290. package/src/platform-implementation-js/lib/dom/element-view-mapper.js +8 -11
  291. package/src/platform-implementation-js/lib/dom/generic-button-view.js +39 -0
  292. package/src/platform-implementation-js/lib/dom/get-insert-before-element.js +39 -0
  293. package/src/platform-implementation-js/lib/dom/get-selection.js +23 -52
  294. package/src/platform-implementation-js/lib/dom/insert-element-in-order.js +38 -0
  295. package/src/platform-implementation-js/lib/dom/insert-html-at-cursor.js +69 -101
  296. package/src/platform-implementation-js/lib/dom/is-node-in-range.js +8 -10
  297. package/src/platform-implementation-js/lib/dom/keyboard-shortcut-stream.js +12 -0
  298. package/src/platform-implementation-js/lib/dom/make-element-child-stream.js +79 -0
  299. package/src/platform-implementation-js/lib/dom/make-element-stream-merger.js +28 -0
  300. package/src/platform-implementation-js/lib/dom/make-element-view-stream.js +15 -0
  301. package/src/platform-implementation-js/lib/dom/make-mutation-observer-chunked-stream.js +15 -0
  302. package/src/platform-implementation-js/lib/dom/make-mutation-observer-stream.js +5 -0
  303. package/src/platform-implementation-js/lib/dom/on-mouse-down-and-up.js +15 -17
  304. package/src/platform-implementation-js/lib/dom/outsideClicksAndEscape.js +39 -0
  305. package/src/platform-implementation-js/lib/dom/parentNodes.js +8 -0
  306. package/src/platform-implementation-js/lib/dom/querySelectorOne.js +8 -11
  307. package/src/platform-implementation-js/lib/dom/querySelectorOrFail.js +6 -0
  308. package/src/platform-implementation-js/lib/dom/reemitClickEventForReact.js +22 -0
  309. package/src/platform-implementation-js/lib/dom/set-css.js +7 -3
  310. package/src/platform-implementation-js/lib/dom/set-value-and-dispatch-event.js +9 -11
  311. package/src/platform-implementation-js/lib/dom/simulate-drag-and-drop.js +32 -33
  312. package/src/platform-implementation-js/lib/dom/simulate-key.js +46 -0
  313. package/src/platform-implementation-js/lib/dom/simulate-mouse-event.js +16 -0
  314. package/src/platform-implementation-js/lib/dom/trigger-relay-event.js +7 -0
  315. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.js +25 -0
  316. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.test.js +23 -26
  317. package/src/platform-implementation-js/lib/fake-window-resize.js +5 -0
  318. package/src/platform-implementation-js/lib/from-event-target-capture.js +12 -0
  319. package/src/platform-implementation-js/lib/fromEventsWithOptions.js +10 -0
  320. package/src/platform-implementation-js/lib/handle-compose-link-chips.js +86 -149
  321. package/src/platform-implementation-js/lib/handler-registry.js +67 -0
  322. package/src/platform-implementation-js/lib/idMap.js +45 -0
  323. package/src/platform-implementation-js/lib/imageRequest.js +8 -0
  324. package/src/platform-implementation-js/lib/incrementName.js +7 -0
  325. package/src/platform-implementation-js/lib/inject-script-EMBEDDED.js +14 -0
  326. package/src/platform-implementation-js/lib/inject-script.js +33 -0
  327. package/src/platform-implementation-js/lib/insert-link-chip-into-body.js +42 -57
  328. package/src/platform-implementation-js/lib/is-valid-app-id.js +27 -0
  329. package/src/platform-implementation-js/lib/is-valid-email.js +14 -0
  330. package/src/platform-implementation-js/lib/isNotNil.js +5 -0
  331. package/src/platform-implementation-js/lib/isStreakAppId.js +11 -0
  332. package/src/platform-implementation-js/lib/logger.js +441 -0
  333. package/src/platform-implementation-js/lib/make-revocable-function.js +19 -21
  334. package/src/platform-implementation-js/lib/make-revocable-function.test.js +20 -22
  335. package/src/platform-implementation-js/lib/parseParamsFromRouteID.js +15 -17
  336. package/src/platform-implementation-js/lib/parseParamsFromRouteID.test.js +9 -18
  337. package/src/platform-implementation-js/lib/persistent-queue.js +107 -0
  338. package/src/platform-implementation-js/lib/populateRouteID.js +8 -9
  339. package/src/platform-implementation-js/lib/populateRouteID.test.js +20 -19
  340. package/src/platform-implementation-js/lib/react/ElementContainer.js +23 -20
  341. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.js +10 -9
  342. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.test.js +13 -20
  343. package/src/platform-implementation-js/lib/routeIDmatchesHash.js +13 -18
  344. package/src/platform-implementation-js/lib/routeIDmatchesHash.test.js +11 -17
  345. package/src/platform-implementation-js/lib/safe-event-emitter.js +17 -0
  346. package/src/platform-implementation-js/lib/shared-style.js +14 -13
  347. package/src/platform-implementation-js/lib/stopper-pool.js +41 -0
  348. package/src/platform-implementation-js/lib/stream-wait-for.js +30 -0
  349. package/src/platform-implementation-js/lib/toItemWithLifetimeStream.js +18 -17
  350. package/src/platform-implementation-js/lib/toLiveSet.js +17 -15
  351. package/src/platform-implementation-js/lib/wait-for.js +28 -0
  352. package/src/platform-implementation-js/lib/waitForAsync.js +19 -0
  353. package/src/platform-implementation-js/main-INTEGRATED-PAGEWORLD.js +6 -5
  354. package/src/platform-implementation-js/main.js +9 -24
  355. package/src/platform-implementation-js/namespaces/app-menu.d.ts.map +1 -1
  356. package/src/platform-implementation-js/namespaces/app-menu.js +31 -0
  357. package/src/platform-implementation-js/namespaces/butter-bar.js +163 -0
  358. package/src/platform-implementation-js/namespaces/compose.js +37 -60
  359. package/src/platform-implementation-js/namespaces/conversations.js +52 -124
  360. package/src/platform-implementation-js/namespaces/global.js +27 -39
  361. package/src/platform-implementation-js/namespaces/keyboard.js +29 -33
  362. package/src/platform-implementation-js/namespaces/lists.js +25 -31
  363. package/src/platform-implementation-js/namespaces/modal.js +34 -28
  364. package/src/platform-implementation-js/namespaces/nav-menu.js +30 -45
  365. package/src/platform-implementation-js/namespaces/router.js +70 -137
  366. package/src/platform-implementation-js/namespaces/search.js +19 -17
  367. package/src/platform-implementation-js/namespaces/toolbars.js +71 -117
  368. package/src/platform-implementation-js/namespaces/user.js +36 -37
  369. package/src/platform-implementation-js/namespaces/widgets.js +54 -61
  370. package/src/platform-implementation-js/platform-implementation.js +98 -229
  371. package/src/platform-implementation-js/views/SimpleElementView.js +16 -0
  372. package/src/platform-implementation-js/views/app-menu-item-view.js +257 -0
  373. package/src/platform-implementation-js/views/app-toolbar-button-view.js +26 -47
  374. package/src/platform-implementation-js/views/collapsible-panel-view.js +222 -0
  375. package/src/platform-implementation-js/views/collapsible-section-view.js +66 -63
  376. package/src/platform-implementation-js/views/compose-button-view.js +45 -0
  377. package/src/platform-implementation-js/views/compose-view.js +312 -0
  378. package/src/platform-implementation-js/views/content-panel-view.js +28 -30
  379. package/src/platform-implementation-js/views/conversations/attachment-card-view.js +21 -44
  380. package/src/platform-implementation-js/views/conversations/custom-message-view.js +44 -104
  381. package/src/platform-implementation-js/views/conversations/message-view.js +131 -202
  382. package/src/platform-implementation-js/views/conversations/thread-view.js +75 -127
  383. package/src/platform-implementation-js/views/keyboard-shortcut-handle.js +14 -0
  384. package/src/platform-implementation-js/views/native-nav-item-view.js +32 -65
  385. package/src/platform-implementation-js/views/nav-item-view.js +51 -115
  386. package/src/platform-implementation-js/views/route-view/custom-route-view.js +25 -20
  387. package/src/platform-implementation-js/views/route-view/dummy-route-view-driver.js +18 -18
  388. package/src/platform-implementation-js/views/route-view/list-route-view.js +30 -52
  389. package/src/platform-implementation-js/views/route-view/route-view.js +24 -35
  390. package/src/platform-implementation-js/views/section-view.js +60 -52
  391. package/src/platform-implementation-js/views/thread-row-view.js +49 -74
  392. package/src/platform-implementation-js/widgets/buttons/basic-button-view-controller.js +39 -0
  393. package/src/platform-implementation-js/widgets/buttons/dropdown-button-view-controller.js +98 -0
  394. package/src/platform-implementation-js/widgets/buttons/dropdown-view.js +122 -0
  395. package/src/platform-implementation-js/widgets/drawer-view.js +29 -36
  396. package/src/platform-implementation-js/widgets/modal-view.js +39 -68
  397. package/src/platform-implementation-js/widgets/mole-view.js +22 -22
  398. package/src/platform-implementation-js/widgets/top-message-bar-view.js +13 -10
@@ -0,0 +1,49 @@
1
+ export default function setupGmonkeyHandler() {
2
+ const gmonkeyPromise = setupGmonkey();
3
+ document.addEventListener('inboxSDKtellMeIsConversationViewDisabled', function () {
4
+ gmonkeyPromise.then((gmonkey) => {
5
+ const answer = gmonkey.isConversationViewDisabled();
6
+ const event = document.createEvent('CustomEvent');
7
+ event.initCustomEvent('inboxSDKgmonkeyResponse', false, false, answer);
8
+ document.dispatchEvent(event);
9
+ });
10
+ });
11
+ document.addEventListener('inboxSDKtellMeCurrentThreadId', function (event) {
12
+ let threadId;
13
+ if (event.detail.isPreviewedThread) {
14
+ const rows = Array.from(document.querySelectorAll('[gh=tl] tr.aps'));
15
+ if (rows.length > 0) {
16
+ const elementWithId = rows
17
+ .map((row) => row.querySelector('[data-thread-id]'))
18
+ .filter(Boolean)[0];
19
+ if (elementWithId) {
20
+ threadId = elementWithId.getAttribute('data-thread-id');
21
+ }
22
+ else {
23
+ threadId = rows[0].getAttribute('data-inboxsdk-threadid');
24
+ }
25
+ }
26
+ }
27
+ else {
28
+ threadId = window.gmonkey?.v2?.getCurrentThread?.()?.getThreadId();
29
+ }
30
+ if (threadId) {
31
+ // hash is included in the sync id route url, so we also need to take it out
32
+ threadId = threadId.replace('#', '');
33
+ event.target.setAttribute('data-inboxsdk-currentthreadid', threadId);
34
+ }
35
+ });
36
+ }
37
+ function setupGmonkey() {
38
+ return new Promise((resolve) => {
39
+ function check() {
40
+ if (!window.gmonkey) {
41
+ setTimeout(check, 500);
42
+ }
43
+ else {
44
+ window.gmonkey.load('2.0', resolve);
45
+ }
46
+ }
47
+ check();
48
+ });
49
+ }
@@ -0,0 +1,298 @@
1
+ import sortBy from 'lodash/sortBy';
2
+ import intersection from 'lodash/intersection';
3
+ import isNotNil from '../../platform-implementation-js/lib/isNotNil';
4
+ import { DRAFT_SAVING_ACTIONS, SEND_ACTIONS, } from './constants';
5
+ const ACTION_TYPE_PRIORITY_RANK = [
6
+ 'SEND',
7
+ 'DRAFT_SAVE',
8
+ ];
9
+ export function parseComposeRequestBody_2022_09_09(request) {
10
+ return parseCreateUpdateSendDraftRequestBody(request);
11
+ }
12
+ export function parseComposeResponseBody_2022_09_09(response) {
13
+ return parseCreateUpdateSendDraftResponseBody(response);
14
+ }
15
+ export function replaceBodyContentInComposeSendRequestBody_2022_09_09(request, newBodyHtmlContent) {
16
+ return replaceBodyContentInSendRequestBody(request, newBodyHtmlContent);
17
+ }
18
+ /**
19
+ * Parses request body when compose window either saves a draft for the first time,
20
+ * updates the draft or sends the draft.
21
+ * NOTE: request could contain multiple threads and messages within it,
22
+ * prioritize SEND to DRAFT_SAVE message.
23
+ */
24
+ function parseCreateUpdateSendDraftRequestBody(request) {
25
+ const updateList = request[1]?.[0];
26
+ if (!Array.isArray(updateList)) {
27
+ // cannot parse
28
+ return null;
29
+ }
30
+ const parsedMessages = updateList.map(parseRequestThread).filter(isNotNil);
31
+ const sorted = sortBy(parsedMessages, (m) => ACTION_TYPE_PRIORITY_RANK.indexOf(m.type));
32
+ return sorted[0] || null;
33
+ }
34
+ /**
35
+ * Parses response body when compose window either saved a draft for the first time,
36
+ * updated the draft, or sent the draft.
37
+ * NOTE: response could contain multiple threads and messages within it
38
+ * even not related to a message/thread in the request body.
39
+ * So the calling code should find needed message manually.
40
+ */
41
+ function parseCreateUpdateSendDraftResponseBody(response) {
42
+ const updateList = response[1]?.[5];
43
+ if (!Array.isArray(updateList)) {
44
+ // cannot parse
45
+ return [];
46
+ }
47
+ return updateList
48
+ .map(parseResponseThread)
49
+ .filter(isNotNil)
50
+ .flatMap((parsedThread) => {
51
+ const { threadId, oldThreadId, parsedMessages } = parsedThread;
52
+ return parsedMessages.map((parsedMessage) => {
53
+ const { messageId, to, cc, bcc, actions, rfcID, oldMessageId } = parsedMessage;
54
+ const actionType = actionsToComposeRequestType(actions);
55
+ if (!actionType) {
56
+ // unsupported actions within a message
57
+ return null;
58
+ }
59
+ return {
60
+ threadId,
61
+ messageId,
62
+ to,
63
+ cc,
64
+ bcc,
65
+ actions,
66
+ rfcID,
67
+ oldMessageId,
68
+ oldThreadId,
69
+ type: actionType,
70
+ };
71
+ });
72
+ })
73
+ .filter(isNotNil);
74
+ }
75
+ function replaceBodyContentInSendRequestBody(request, newBodyHtmlContent) {
76
+ // since draftID is not passed from outside,
77
+ // use parse function to find a message which body needs to be replaced
78
+ const parsed = parseCreateUpdateSendDraftRequestBody(request);
79
+ if (!parsed) {
80
+ return null;
81
+ }
82
+ const replaceBodyInThisMessageId = parsed.messageId;
83
+ const updateList = request[1]?.[0];
84
+ if (!Array.isArray(updateList)) {
85
+ // cannot parse
86
+ return null;
87
+ }
88
+ for (const threadWrapper of updateList) {
89
+ if (!Array.isArray(threadWrapper) || !Array.isArray(threadWrapper[1])) {
90
+ // cannot parse
91
+ return null;
92
+ }
93
+ const thread = threadWrapper[1];
94
+ const threadId = parseThreadId(thread[0]);
95
+ if (!threadId) {
96
+ // cannot parse
97
+ return null;
98
+ }
99
+ const parseResult = findAndParseRequestMessage(thread);
100
+ if (parseResult?.parsedMsg.messageId === replaceBodyInThisMessageId) {
101
+ const actionType = actionsToComposeRequestType(parseResult.parsedMsg.actions);
102
+ if (actionType === 'SEND') {
103
+ // find first message with needed messageId and 'SEND' action and replace the body content
104
+ replaceBodyInRequestMsg(parseResult.originalMsg, newBodyHtmlContent);
105
+ return request;
106
+ }
107
+ }
108
+ }
109
+ return null;
110
+ }
111
+ function parseThreadId(threadId) {
112
+ if (!threadId.startsWith('thread-')) {
113
+ return null;
114
+ }
115
+ if (threadId.includes('|')) {
116
+ return threadId.split('|')[0];
117
+ }
118
+ return threadId;
119
+ }
120
+ function parseMsgId(messageId) {
121
+ if (!messageId.startsWith('msg-')) {
122
+ // cannot parse
123
+ return null;
124
+ }
125
+ return messageId;
126
+ }
127
+ function parseContacts(contacts) {
128
+ if (!Array.isArray(contacts)) {
129
+ // cannot parse
130
+ return null;
131
+ }
132
+ return contacts
133
+ .filter((c) => !!c[1])
134
+ .map((c) => ({ emailAddress: c[1], name: c[2] ?? null }));
135
+ }
136
+ function findAndParseRequestMessage(thread) {
137
+ const originalMsgs = [
138
+ thread[1]?.[2]?.[0]?.[4]?.[0],
139
+ thread[1]?.[1]?.[0],
140
+ thread[1]?.[13]?.[0],
141
+ ];
142
+ for (const originalMsg of originalMsgs) {
143
+ const parsedMsg = parseRequestMsg(originalMsg);
144
+ if (parsedMsg) {
145
+ return { parsedMsg, originalMsg };
146
+ }
147
+ }
148
+ return null;
149
+ }
150
+ function parseRequestThread(threadWrapper) {
151
+ if (!Array.isArray(threadWrapper) || !Array.isArray(threadWrapper[1])) {
152
+ // cannot parse
153
+ return null;
154
+ }
155
+ const thread = threadWrapper[1];
156
+ const threadId = parseThreadId(thread[0]);
157
+ if (!threadId) {
158
+ // cannot parse
159
+ return null;
160
+ }
161
+ const parseResult = findAndParseRequestMessage(thread);
162
+ if (!parseResult) {
163
+ // cannot parse
164
+ return null;
165
+ }
166
+ const { parsedMsg: message, originalMsg } = parseResult;
167
+ const { messageId, to, cc, bcc, subject, body, actions } = message;
168
+ let actionType = actionsToComposeRequestType(actions);
169
+ if (!actionType) {
170
+ // exit if doesn't have required actions
171
+ return null;
172
+ }
173
+ // usually for draft_save action when draft or reply got saved for first time, response could be different
174
+ // from usual update response, so replace draft_save action with first_draft_save in this case.
175
+ if (actionType === 'DRAFT_SAVE' &&
176
+ (originalMsg === thread[1]?.[2]?.[0]?.[4]?.[0] ||
177
+ originalMsg === thread[1]?.[1]?.[0])) {
178
+ actionType = 'FIRST_DRAFT_SAVE';
179
+ }
180
+ return {
181
+ threadId,
182
+ messageId,
183
+ to,
184
+ cc,
185
+ bcc,
186
+ subject,
187
+ body,
188
+ actions,
189
+ type: actionType,
190
+ };
191
+ }
192
+ function parseRequestMsg(msg) {
193
+ if (!Array.isArray(msg)) {
194
+ // cannot parse
195
+ return null;
196
+ }
197
+ const messageId = parseMsgId(msg[0]);
198
+ if (!messageId) {
199
+ // cannot parse
200
+ return null;
201
+ }
202
+ const subject = msg[7];
203
+ const to = parseContacts(msg[2]);
204
+ const cc = parseContacts(msg[3]);
205
+ const bcc = parseContacts(msg[4]);
206
+ const body = msg[8][1][0][1];
207
+ const actions = msg[10];
208
+ const rfcID = msg[13];
209
+ const oldMessageId = msg[55];
210
+ return {
211
+ messageId,
212
+ to,
213
+ cc,
214
+ bcc,
215
+ subject,
216
+ body,
217
+ actions,
218
+ rfcID,
219
+ oldMessageId,
220
+ };
221
+ }
222
+ function replaceBodyInRequestMsg(msg, newBodyHtmlContent) {
223
+ if (!Array.isArray(msg)) {
224
+ // cannot parse
225
+ return null;
226
+ }
227
+ msg[8][1][0][1] = newBodyHtmlContent;
228
+ }
229
+ function parseResponseThread(threadWrapper) {
230
+ if (!Array.isArray(threadWrapper) || !Array.isArray(threadWrapper[0])) {
231
+ // cannot parse
232
+ return null;
233
+ }
234
+ const thread = threadWrapper[0];
235
+ const threadId = parseThreadId(thread[0]);
236
+ if (!threadId) {
237
+ // cannot parse
238
+ return null;
239
+ }
240
+ const threadInner = thread[2]?.[6]?.[0];
241
+ if (!Array.isArray(threadInner)) {
242
+ // cannot parse
243
+ return null;
244
+ }
245
+ const oldThreadId = threadInner[19];
246
+ const parsedMessages = Array.isArray(threadInner[4])
247
+ ? threadInner[4]
248
+ .map((msg) => {
249
+ if (!Array.isArray(msg)) {
250
+ // cannot parse
251
+ return null;
252
+ }
253
+ return parseResponseMsg(msg);
254
+ })
255
+ .filter(isNotNil)
256
+ : [];
257
+ return {
258
+ threadId,
259
+ oldThreadId,
260
+ parsedMessages,
261
+ };
262
+ }
263
+ function parseResponseMsg(msg) {
264
+ if (!Array.isArray(msg)) {
265
+ // cannot parse
266
+ return null;
267
+ }
268
+ const messageId = parseMsgId(msg[0]);
269
+ if (!messageId) {
270
+ // cannot parse
271
+ return null;
272
+ }
273
+ const actions = msg[10];
274
+ const to = parseContacts(msg[2]);
275
+ const cc = parseContacts(msg[3]);
276
+ const bcc = parseContacts(msg[4]);
277
+ const rfcID = msg[13];
278
+ const oldMessageId = msg[55];
279
+ return {
280
+ messageId,
281
+ to,
282
+ cc,
283
+ bcc,
284
+ actions,
285
+ rfcID,
286
+ oldMessageId,
287
+ };
288
+ }
289
+ export function actionsToComposeRequestType(actions) {
290
+ if (intersection(actions, DRAFT_SAVING_ACTIONS).length ===
291
+ DRAFT_SAVING_ACTIONS.length) {
292
+ return 'DRAFT_SAVE';
293
+ }
294
+ if (intersection(actions, SEND_ACTIONS).length === SEND_ACTIONS.length) {
295
+ return 'SEND';
296
+ }
297
+ return null;
298
+ }
@@ -0,0 +1,55 @@
1
+ import { parseComposeRequestBody_2022_09_09, parseComposeResponseBody_2022_09_09, replaceBodyContentInComposeSendRequestBody_2022_09_09, } from './sync-compose-processor-20220909';
2
+ import { getDetailsOfComposeRequest, replaceEmailBodyForSendRequest, } from './sync-compose-request-processor';
3
+ import * as logger from '../injected-logger';
4
+ export function parseComposeRequestBody(request) {
5
+ const requestParsed = JSON.parse(request);
6
+ try {
7
+ if (Array.isArray(requestParsed)) {
8
+ const parsed = parseComposeRequestBody_2022_09_09(requestParsed);
9
+ if (parsed) {
10
+ return {
11
+ type: parsed.type,
12
+ to: parsed.to,
13
+ cc: parsed.cc,
14
+ bcc: parsed.bcc,
15
+ draftID: parsed.messageId.replace('msg-a:', ''),
16
+ subject: parsed.subject,
17
+ body: parsed.body,
18
+ };
19
+ }
20
+ return null;
21
+ }
22
+ }
23
+ catch (err) {
24
+ logger.eventSdkPassive('connection.requestResponseParsingFailed', {
25
+ requestParseError: err,
26
+ });
27
+ }
28
+ return getDetailsOfComposeRequest(requestParsed);
29
+ }
30
+ export function parseComposeResponseBody(response) {
31
+ const responseParsed = JSON.parse(response);
32
+ if (Array.isArray(responseParsed)) {
33
+ return parseComposeResponseBody_2022_09_09(responseParsed);
34
+ }
35
+ return [];
36
+ }
37
+ export function replaceBodyContentInComposeSendRequestBody(request, newBodyHtmlContent) {
38
+ const requestParsed = JSON.parse(request);
39
+ try {
40
+ if (Array.isArray(requestParsed)) {
41
+ const replacedRequestObj = replaceBodyContentInComposeSendRequestBody_2022_09_09(requestParsed, newBodyHtmlContent);
42
+ if (replacedRequestObj) {
43
+ return JSON.stringify(replacedRequestObj);
44
+ }
45
+ // if couldn't parse and replace body content, return original object
46
+ return request;
47
+ }
48
+ }
49
+ catch (err) {
50
+ logger.eventSdkPassive('connection.requestResponseParsingFailed', {
51
+ replaceBodyFailed: err,
52
+ });
53
+ }
54
+ return replaceEmailBodyForSendRequest(request, newBodyHtmlContent);
55
+ }
@@ -0,0 +1,110 @@
1
+ /* @flow */
2
+ import intersection from 'lodash/intersection';
3
+ import { SEND_ACTIONS } from './constants';
4
+ export function getDetailsOfComposeRequest(parsed) {
5
+ const updateList = parsed[2] && parsed[2][1];
6
+ if (!updateList)
7
+ return null;
8
+ const messageUpdates = updateList.filter((update) => {
9
+ const updateWrapper = update[2] && update[2][2] && (update[2][2][14] || update[2][2][2]);
10
+ return (updateWrapper &&
11
+ updateWrapper[1] &&
12
+ updateWrapper[1][1] &&
13
+ updateWrapper[1][1].indexOf('msg-a:') > -1);
14
+ });
15
+ if (messageUpdates.length) {
16
+ const sendUpdateMatch = messageUpdates.find((update) => {
17
+ const updateWrapper = update[2] && update[2][2] && (update[2][2][14] || update[2][2][2]);
18
+ return (updateWrapper[1][11] &&
19
+ intersection(updateWrapper[1][11], SEND_ACTIONS).length ===
20
+ SEND_ACTIONS.length);
21
+ });
22
+ if (sendUpdateMatch) {
23
+ const sendUpdateWrapper = sendUpdateMatch[2] &&
24
+ sendUpdateMatch[2][2] &&
25
+ (sendUpdateMatch[2][2][14] || sendUpdateMatch[2][2][2]);
26
+ const sendUpdate = sendUpdateWrapper[1];
27
+ return getComposeRequestFromUpdate(sendUpdate, 'SEND');
28
+ }
29
+ else {
30
+ // There's a small chance that an update list could contain the
31
+ // draft saves for multiple drafts in some situations — we've never
32
+ // seen this so currently just picking the first update and assuming
33
+ // that if there are multiple updates in the request they are for
34
+ // queued up versions of the same draft.
35
+ const firstMessageUpdate = messageUpdates[0];
36
+ const updateWrapper = firstMessageUpdate[2] &&
37
+ firstMessageUpdate[2][2] &&
38
+ (firstMessageUpdate[2][2][14] || firstMessageUpdate[2][2][2]);
39
+ const update = updateWrapper[1];
40
+ return getComposeRequestFromUpdate(update, 'DRAFT_SAVE');
41
+ }
42
+ }
43
+ else {
44
+ // the first time a draft is saved it has a different response format
45
+ const messageUpdates = updateList
46
+ .map((update) => update[2] &&
47
+ update[2][2] &&
48
+ update[2][2][3] &&
49
+ update[2][2][3][1] &&
50
+ update[2][2][3][1][5] &&
51
+ update[2][2][3][1][5][0])
52
+ .filter(Boolean);
53
+ if (messageUpdates.length === 0)
54
+ return null;
55
+ const firstMessageUpdate = messageUpdates[0];
56
+ return getComposeRequestFromUpdate(firstMessageUpdate, 'FIRST_DRAFT_SAVE');
57
+ }
58
+ }
59
+ function getComposeRequestFromUpdate(update, type) {
60
+ const body = update[9] && update[9][2] && update[9][2][0] && update[9][2][0][2];
61
+ if (body == null)
62
+ return null;
63
+ return {
64
+ body,
65
+ type,
66
+ to: parseContacts(update[3]),
67
+ cc: parseContacts(update[4]),
68
+ bcc: parseContacts(update[5]),
69
+ draftID: update[1].replace('msg-a:', ''),
70
+ subject: update[8],
71
+ };
72
+ }
73
+ function parseContacts(contacts) {
74
+ if (!Array.isArray(contacts)) {
75
+ // exit cuz cannot parse
76
+ return null;
77
+ }
78
+ return contacts.map((c) => ({ emailAddress: c[2], name: c[3] || null }));
79
+ }
80
+ export function replaceEmailBodyForSendRequest(request, newBody) {
81
+ if (!newBody)
82
+ return request;
83
+ const parsed = JSON.parse(request);
84
+ const updateList = parsed[2] && parsed[2][1];
85
+ if (!updateList)
86
+ return request;
87
+ const messageUpdates = updateList.filter((update) => {
88
+ const updateWrapper = update[2] && update[2][2] && (update[2][2][14] || update[2][2][2]);
89
+ return (updateWrapper &&
90
+ updateWrapper[1] &&
91
+ updateWrapper[1][1] &&
92
+ updateWrapper[1][1].indexOf('msg-a:') > -1);
93
+ });
94
+ if (!messageUpdates.length)
95
+ return request;
96
+ const sendUpdateMatch = messageUpdates.find((update) => {
97
+ const updateWrapper = update[2] && update[2][2] && (update[2][2][14] || update[2][2][2]);
98
+ return (updateWrapper[1][11] &&
99
+ intersection(updateWrapper[1][11], SEND_ACTIONS).length ===
100
+ SEND_ACTIONS.length);
101
+ });
102
+ if (!sendUpdateMatch)
103
+ return request;
104
+ const sendUpdateWrapper = sendUpdateMatch[2] &&
105
+ sendUpdateMatch[2][2] &&
106
+ (sendUpdateMatch[2][2][14] || sendUpdateMatch[2][2][2]);
107
+ const sendUpdate = sendUpdateWrapper[1];
108
+ sendUpdate[9][2][0][2] = newBody;
109
+ return JSON.stringify(parsed);
110
+ }
@@ -1,16 +1,12 @@
1
- /* @flow */
2
-
3
- import fs from 'fs';
4
-
5
- import * as SCRP from './sync-compose-request-processor';
1
+ "use strict";
6
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _fs = _interopRequireDefault(require("fs"));
5
+ var SCRP = _interopRequireWildcard(require("./sync-compose-request-processor"));
6
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
7
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
7
8
  it('handles first draft save', () => {
8
- const request = fs.readFileSync(
9
- __dirname +
10
- '/../../../__tests__/sync-compose-request-processor/first-draft-save-request-2018-01-25.json',
11
- 'utf8'
12
- );
13
-
9
+ const request = _fs.default.readFileSync(__dirname + '/../../../__tests__/sync-compose-request-processor/first-draft-save-request-2018-01-25.json', 'utf8');
14
10
  const composeRequest = SCRP.getDetailsOfComposeRequest(JSON.parse(request));
15
11
  expect(composeRequest).toMatchObject({
16
12
  body: '<div dir="ltr">new new draft</div>',
@@ -19,17 +15,11 @@ it('handles first draft save', () => {
19
15
  subject: 'new draft',
20
16
  to: null,
21
17
  cc: null,
22
- bcc: null,
18
+ bcc: null
23
19
  });
24
20
  });
25
-
26
21
  it('handles regular draft save', () => {
27
- const request = fs.readFileSync(
28
- __dirname +
29
- '/../../../__tests__/sync-compose-request-processor/draft-save-request-2018-01-25.json',
30
- 'utf8'
31
- );
32
-
22
+ const request = _fs.default.readFileSync(__dirname + '/../../../__tests__/sync-compose-request-processor/draft-save-request-2018-01-25.json', 'utf8');
33
23
  const composeRequest = SCRP.getDetailsOfComposeRequest(JSON.parse(request));
34
24
  expect(composeRequest).toMatchObject({
35
25
  body: '<div dir="ltr">new new draft 2</div>',
@@ -38,53 +28,53 @@ it('handles regular draft save', () => {
38
28
  subject: 'new draft',
39
29
  to: null,
40
30
  cc: null,
41
- bcc: null,
31
+ bcc: null
42
32
  });
43
33
  });
44
-
45
34
  it('handles regular draft save with recipients', () => {
46
- const request = fs.readFileSync(
47
- __dirname +
48
- '/../../../__tests__/sync-compose-request-processor/draft-save-request-2018-01-25-with-recipients.json',
49
- 'utf8'
50
- );
51
-
35
+ const request = _fs.default.readFileSync(__dirname + '/../../../__tests__/sync-compose-request-processor/draft-save-request-2018-01-25-with-recipients.json', 'utf8');
52
36
  const composeRequest = SCRP.getDetailsOfComposeRequest(JSON.parse(request));
53
37
  expect(composeRequest).toMatchObject({
54
38
  body: '<div dir="ltr">new new draft 2</div>',
55
39
  type: 'DRAFT_SAVE',
56
40
  draftID: 'r-5205311597211900881',
57
41
  subject: 'new draft',
58
- to: [
59
- { emailAddress: 'test+to@gmail.com', name: null },
60
- { emailAddress: 'test+to2@gmail.com', name: 'test to2' },
61
- ],
62
- cc: [
63
- { emailAddress: 'test+cc@gmail.com', name: null },
64
- { emailAddress: 'test+cc2@gmail.com', name: 'test cc2' },
65
- ],
66
- bcc: [
67
- { emailAddress: 'test+bcc@gmail.com', name: null },
68
- { emailAddress: 'test+bcc2@gmail.com', name: 'test bcc2' },
69
- ],
42
+ to: [{
43
+ emailAddress: 'test+to@gmail.com',
44
+ name: null
45
+ }, {
46
+ emailAddress: 'test+to2@gmail.com',
47
+ name: 'test to2'
48
+ }],
49
+ cc: [{
50
+ emailAddress: 'test+cc@gmail.com',
51
+ name: null
52
+ }, {
53
+ emailAddress: 'test+cc2@gmail.com',
54
+ name: 'test cc2'
55
+ }],
56
+ bcc: [{
57
+ emailAddress: 'test+bcc@gmail.com',
58
+ name: null
59
+ }, {
60
+ emailAddress: 'test+bcc2@gmail.com',
61
+ name: 'test bcc2'
62
+ }]
70
63
  });
71
64
  });
72
-
73
65
  it('handles sending', () => {
74
- const request = fs.readFileSync(
75
- __dirname +
76
- '/../../../__tests__/sync-compose-request-processor/send-request-2018-01-25.json',
77
- 'utf8'
78
- );
79
-
66
+ const request = _fs.default.readFileSync(__dirname + '/../../../__tests__/sync-compose-request-processor/send-request-2018-01-25.json', 'utf8');
80
67
  const composeRequest = SCRP.getDetailsOfComposeRequest(JSON.parse(request));
81
68
  expect(composeRequest).toMatchObject({
82
69
  body: '<div dir="ltr">new new draft 2</div>',
83
70
  type: 'SEND',
84
71
  draftID: 'r-5205311597211900881',
85
72
  subject: 'new draft',
86
- to: [{ emailAddress: 'test+to@test.com', name: null }],
73
+ to: [{
74
+ emailAddress: 'test+to@test.com',
75
+ name: null
76
+ }],
87
77
  cc: null,
88
- bcc: null,
78
+ bcc: null
89
79
  });
90
- });
80
+ });