@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,441 @@
1
+ /* eslint-disable no-console */
2
+ import Sha256 from 'sha.js/sha256';
3
+ import ajax from '../../common/ajax';
4
+ import getExtensionId from '../../common/get-extension-id';
5
+ import getSessionId from '../../common/get-session-id';
6
+ import logError from '../../common/log-error';
7
+ import PersistentQueue from './persistent-queue';
8
+ import makeMutationObserverStream from './dom/make-mutation-observer-stream';
9
+ import { getXMLHttpRequest } from 'ext-corb-workaround';
10
+ import isStreakAppId from './isStreakAppId';
11
+ // Yeah, this module is a singleton with some shared state. This is just for
12
+ // logging convenience. Other modules should avoid doing this!
13
+ const _extensionAppIds = [];
14
+ let _extensionLoaderVersion;
15
+ let _extensionImplVersion;
16
+ let _extensionUserEmailHash;
17
+ let _extensionUseEventTracking = false;
18
+ let _isUsingSyncAPI = undefined;
19
+ const _sessionId = getSessionId();
20
+ const _loggedDeprecatedMessages = new Set();
21
+ // The logger master is the first InboxSDK extension to load. This
22
+ // first extension is tasked with reporting tracked events to the server.
23
+ const _extensionIsLoggerMaster = (function () {
24
+ if (typeof document === 'undefined') {
25
+ return true; // for unit tests
26
+ }
27
+ if (document.documentElement.hasAttribute('data-inboxsdk-master-claimed')) {
28
+ return false;
29
+ }
30
+ else {
31
+ document.documentElement.setAttribute('data-inboxsdk-master-claimed', 'true');
32
+ return true;
33
+ }
34
+ })();
35
+ function getAllAppIds() {
36
+ const str = (typeof document !== 'undefined' &&
37
+ document.documentElement.getAttribute('data-inboxsdk-active-app-ids')) ||
38
+ '[]';
39
+ return JSON.parse(str);
40
+ }
41
+ const _trackedEventsQueue = new PersistentQueue('events');
42
+ const FIRST_LOADED_TIME = Date.now();
43
+ export default class Logger {
44
+ _appId;
45
+ _isMaster;
46
+ constructor(appId, opts, loaderVersion, implVersion) {
47
+ _extensionLoggerSetup(appId, opts, loaderVersion, implVersion);
48
+ this._appId = appId;
49
+ this._isMaster = (() => {
50
+ if (!_extensionUseEventTracking ||
51
+ (typeof document !== 'undefined' &&
52
+ document.documentElement.hasAttribute('data-inboxsdk-app-logger-master-chosen'))) {
53
+ return false;
54
+ }
55
+ else {
56
+ document.documentElement.setAttribute('data-inboxsdk-app-logger-master-chosen', 'true');
57
+ return true;
58
+ }
59
+ })();
60
+ if (this._isMaster && typeof document !== 'undefined') {
61
+ document.addEventListener('inboxSDKinjectedError', (event) => {
62
+ if (!(event instanceof CustomEvent && event?.detail)) {
63
+ this.error(new Error('Invalid inboxSDKinjectedError event'), event);
64
+ return;
65
+ }
66
+ const detail = event.detail;
67
+ this.error(Object.assign(new Error(detail.message), { stack: detail.stack }), detail.details);
68
+ });
69
+ document.addEventListener('inboxSDKinjectedEventSdkPassive', (event) => {
70
+ const detail = event.detail;
71
+ this.eventSdkPassive(detail.name, detail.details, detail.sensitive);
72
+ });
73
+ }
74
+ }
75
+ setUserEmailAddress(email) {
76
+ _extensionUserEmailHash = hashEmail(email);
77
+ }
78
+ shouldTrackEverything() {
79
+ return (_extensionUserEmailHash ===
80
+ 'ca05afe92819df590a4196c31814fdb24050e8f49d8a41613f3d6cfb5729c785');
81
+ }
82
+ setIsUsingSyncAPI(isUsing) {
83
+ _isUsingSyncAPI = isUsing;
84
+ }
85
+ static run(cb, details) {
86
+ try {
87
+ return cb();
88
+ }
89
+ catch (err) {
90
+ Logger.error(err, details);
91
+ throw err;
92
+ }
93
+ }
94
+ run(cb, details) {
95
+ try {
96
+ return cb();
97
+ }
98
+ catch (err) {
99
+ this.error(err, details);
100
+ throw err;
101
+ }
102
+ }
103
+ static error(err, details) {
104
+ _logError(err, details, undefined, false);
105
+ }
106
+ error(err, details) {
107
+ _logError(err, details, this._appId, false);
108
+ }
109
+ errorApp(err, details) {
110
+ _logError(err, details, this._appId, true);
111
+ }
112
+ errorSite(err, details) {
113
+ // Only the first logger instance reports Site errors.
114
+ if (!this._isMaster) {
115
+ return;
116
+ }
117
+ this.error(err, details);
118
+ }
119
+ // Should only be used by the InboxSDK users for their own app events.
120
+ eventApp(name, details) {
121
+ _trackEvent(this._appId, 'app', name, details);
122
+ }
123
+ // For tracking app events that are possibly triggered by the user. Extensions
124
+ // can opt out of this with a flag passed to InboxSDK.load().
125
+ eventSdkActive(name, details) {
126
+ if (!_extensionUseEventTracking) {
127
+ return;
128
+ }
129
+ _trackEvent(this._appId, 'sdkActive', name, details);
130
+ }
131
+ // Track events unrelated to user activity about how the app uses the SDK.
132
+ // Examples include the app being initialized, and calls to any of the
133
+ // register___ViewHandler functions.
134
+ eventSdkPassive(name, details, sensitive) {
135
+ if (sensitive && !isStreakAppId(this._appId)) {
136
+ // do not log events if they were marked as sensitive
137
+ return;
138
+ }
139
+ _trackEvent(this._appId, 'sdkPassive', name, details);
140
+ }
141
+ // Track Site events.
142
+ eventSite(name, details) {
143
+ // Only the first logger instance reports Site events.
144
+ if (!this._isMaster) {
145
+ return;
146
+ }
147
+ _trackEvent(this._appId, 'gmail', name, details);
148
+ }
149
+ deprecationWarning(name, suggestion) {
150
+ console.warn(`InboxSDK: ${name} is deprecated.` +
151
+ (suggestion ? ` Please use ${suggestion} instead.` : ''));
152
+ const key = name + (suggestion ? ':' + suggestion : '');
153
+ if (!_loggedDeprecatedMessages.has(key)) {
154
+ this.eventSdkPassive(`deprecated.${name}`);
155
+ _loggedDeprecatedMessages.add(key);
156
+ }
157
+ }
158
+ getAppLogger() {
159
+ return {
160
+ error: (err, details) => this.errorApp(err, details),
161
+ event: (name, details) => this.eventApp(name, details),
162
+ };
163
+ }
164
+ trackFunctionPerformance(fn, sampleRate, details) {
165
+ if (Math.random() < sampleRate &&
166
+ document.visibilityState === 'visible' &&
167
+ this._isMaster) {
168
+ const start = Date.now();
169
+ fn();
170
+ setTimeout(() => {
171
+ const now = Date.now();
172
+ this.eventSdkPassive('function performance result', {
173
+ value: now - start,
174
+ timeSinceFirstLoad: now - FIRST_LOADED_TIME,
175
+ ...details,
176
+ });
177
+ }, 10);
178
+ }
179
+ else {
180
+ fn();
181
+ }
182
+ }
183
+ }
184
+ function _extensionLoggerSetup(appId, opts, loaderVersion, implVersion) {
185
+ _extensionAppIds.push(Object.freeze({
186
+ appId: appId,
187
+ version: opts.appVersion || undefined,
188
+ }));
189
+ document.documentElement.setAttribute('data-inboxsdk-active-app-ids', JSON.stringify(getAllAppIds().concat([
190
+ {
191
+ appId: appId,
192
+ version: opts.appVersion || undefined,
193
+ },
194
+ ])));
195
+ if (_extensionLoaderVersion) {
196
+ return;
197
+ }
198
+ _extensionLoaderVersion = loaderVersion;
199
+ _extensionImplVersion = implVersion;
200
+ _extensionUseEventTracking = opts.eventTracking;
201
+ if (opts.globalErrorLogging) {
202
+ if (Error.stackTraceLimit < 40) {
203
+ Error.stackTraceLimit = 40;
204
+ }
205
+ window.addEventListener('error', function (event) {
206
+ // Ugh, currently Chrome makes this pretty useless. Once Chrome fixes
207
+ // this, we can remove the logged function wrappers around setTimeout and
208
+ // things.
209
+ if (event.error) {
210
+ Logger.error(event.error, 'Uncaught exception');
211
+ }
212
+ });
213
+ replaceFunction(window, 'setTimeout', function (original) {
214
+ return function wrappedSetTimeout(...args) {
215
+ if (typeof args[0] == 'function') {
216
+ args[0] = makeLoggedFunction(args[0], 'setTimeout callback');
217
+ }
218
+ return original.apply(this, args);
219
+ };
220
+ });
221
+ replaceFunction(window, 'setInterval', function (original) {
222
+ return function wrappedSetInterval(...args) {
223
+ if (typeof args[0] == 'function') {
224
+ args[0] = makeLoggedFunction(args[0], 'setInterval callback');
225
+ }
226
+ return original.apply(this, args);
227
+ };
228
+ });
229
+ const ETp = (window.EventTarget && window.EventTarget.prototype) ||
230
+ window.Node.prototype;
231
+ replaceFunction(ETp, 'addEventListener', function (original) {
232
+ return function wrappedAddEventListener(...args) {
233
+ if (typeof args[1] == 'function') {
234
+ try {
235
+ // If we've made a logger for this function before, use it again,
236
+ // otherwise attach it as a property to the original function.
237
+ // This is necessary so that removeEventListener is called with
238
+ // the right function.
239
+ let loggedFn = args[1].__inboxsdk_logged;
240
+ if (!loggedFn) {
241
+ loggedFn = makeLoggedFunction(args[1], 'event listener');
242
+ // eslint-disable-next-line
243
+ args[1].__inboxsdk_logged = loggedFn;
244
+ }
245
+ args[1] = loggedFn;
246
+ }
247
+ catch (e) {
248
+ // This could be triggered if the given function was immutable
249
+ // and stopped us from saving the logged copy on it.
250
+ console.error('Failed to error wrap function', e);
251
+ }
252
+ }
253
+ return original.apply(this, args);
254
+ };
255
+ });
256
+ replaceFunction(ETp, 'removeEventListener', function (original) {
257
+ return function wrappedRemoveEventListener(...args) {
258
+ if (typeof args[1] == 'function' && args[1].__inboxsdk_logged) {
259
+ args[1] = args[1].__inboxsdk_logged;
260
+ }
261
+ return original.apply(this, args);
262
+ };
263
+ });
264
+ replaceFunction(window, 'MutationObserver', function (Original) {
265
+ Original = Original || window.WebKitMutationObserver;
266
+ function WrappedMutationObserver(...args) {
267
+ if (typeof args[0] == 'function') {
268
+ args[0] = makeLoggedFunction(args[0], 'MutationObserver callback');
269
+ }
270
+ if (Original.bind && Original.bind.apply) {
271
+ // call constructor with variable number of arguments
272
+ return new (Original.bind.apply(Original, [null].concat(args)))();
273
+ }
274
+ else {
275
+ // Safari's MutationObserver lacks a bind method, but its constructor
276
+ // doesn't support extra arguments anyway, so don't bother logging an
277
+ // error here.
278
+ return new Original(args[0]);
279
+ }
280
+ }
281
+ // Just in case someone wants to monkey-patch the prototype.
282
+ WrappedMutationObserver.prototype = Original.prototype;
283
+ return WrappedMutationObserver;
284
+ });
285
+ }
286
+ }
287
+ function getAppIdsProperty(causedByAppId, onlyExtensionApps = true) {
288
+ const appIds = onlyExtensionApps ? _extensionAppIds : getAllAppIds();
289
+ if (!causedByAppId) {
290
+ return appIds;
291
+ }
292
+ else {
293
+ const appIdsWithCause = appIds.slice();
294
+ let hasSetCause = false;
295
+ appIdsWithCause.forEach((entry, i) => {
296
+ if (!hasSetCause && entry.appId === causedByAppId) {
297
+ hasSetCause = true;
298
+ appIdsWithCause[i] = { ...entry, causedBy: true };
299
+ }
300
+ Object.freeze(appIdsWithCause[i]);
301
+ });
302
+ return Object.freeze(appIdsWithCause);
303
+ }
304
+ }
305
+ // err should be an Error instance, and details can be any JSON-ifiable value.
306
+ function _logError(err, details, appId, sentByApp) {
307
+ logError(err, details, {
308
+ appId,
309
+ sentByApp,
310
+ appIds: getAppIdsProperty(appId),
311
+ loaderVersion: _extensionLoaderVersion,
312
+ implVersion: _extensionImplVersion,
313
+ userEmailHash: _extensionUserEmailHash,
314
+ isUsingSyncAPI: _isUsingSyncAPI,
315
+ });
316
+ }
317
+ function makeLoggedFunction(func, name) {
318
+ const msg = name ? 'Uncaught error in ' + name : 'Uncaught error';
319
+ return function (...args) {
320
+ return Logger.run(() => func.apply(this, args), msg);
321
+ };
322
+ }
323
+ function replaceFunction(parent, name, newFnMaker) {
324
+ const newFn = newFnMaker(parent[name]);
325
+ newFn.__original = parent[name];
326
+ parent[name] = newFn;
327
+ }
328
+ export function hashEmail(str) {
329
+ const hasher = new Sha256();
330
+ hasher.update('inboxsdk:' + str);
331
+ return hasher.digest('hex');
332
+ }
333
+ function _trackEvent(appId, type, eventName, properties) {
334
+ if (properties && typeof properties != 'object') {
335
+ throw new Error('properties must be object or null: ' + properties);
336
+ }
337
+ const event = {
338
+ type: type,
339
+ event: eventName,
340
+ timestamp: Date.now() * 1000,
341
+ origin: document.location.origin,
342
+ sessionId: _sessionId,
343
+ emailHash: _extensionUserEmailHash,
344
+ loaderVersion: _extensionLoaderVersion,
345
+ implementationVersion: _extensionImplVersion,
346
+ isUsingSyncAPI: _isUsingSyncAPI,
347
+ properties: properties,
348
+ };
349
+ if (type != 'gmail') {
350
+ Object.assign(event, {
351
+ extensionId: getExtensionId(),
352
+ appIds: getAppIdsProperty(appId),
353
+ });
354
+ }
355
+ else {
356
+ Object.assign(event, {
357
+ appIds: getAppIdsProperty(null, false),
358
+ });
359
+ }
360
+ if (typeof document === 'undefined') {
361
+ return;
362
+ }
363
+ _trackedEventsQueue.add(event);
364
+ // Signal to the logger master that a new event is ready to be sent.
365
+ document.documentElement.setAttribute('data-inboxsdk-last-event', '' + Date.now());
366
+ }
367
+ let currentAccessToken = null;
368
+ function isTimestampExpired(n) {
369
+ // Let's refresh the token 10 minutes early
370
+ return Date.now() + 10 * 60 * 1000 > n;
371
+ }
372
+ async function retrieveNewEventsAccessToken() {
373
+ const { text } = await ajax({
374
+ url: 'https://api.inboxsdk.com/api/v2/events/oauth',
375
+ // Work around CORB for extensions that have permissions to inboxsdk.com
376
+ XMLHttpRequest: getXMLHttpRequest(),
377
+ });
378
+ const accessToken = JSON.parse(text);
379
+ if (isTimestampExpired(accessToken.expirationDate)) {
380
+ console.warn('Got an apparently already expired token. Assuming our clock is busted...');
381
+ // Let's assume the token expires in 30 minutes. The server refreshes the
382
+ // token 30 minutes before it expires so it's probably a safe bet.
383
+ accessToken.expirationDate = Date.now() + 30 * 60 * 1000;
384
+ }
385
+ return accessToken;
386
+ }
387
+ async function getEventsAccessToken() {
388
+ const t = currentAccessToken;
389
+ if (t && !isTimestampExpired(t.expirationDate)) {
390
+ return t;
391
+ }
392
+ else {
393
+ currentAccessToken = await retrieveNewEventsAccessToken();
394
+ return currentAccessToken;
395
+ }
396
+ }
397
+ if (_extensionIsLoggerMaster &&
398
+ typeof document !== 'undefined' &&
399
+ typeof MutationObserver !== 'undefined') {
400
+ makeMutationObserverStream(document.documentElement, {
401
+ attributes: true,
402
+ attributeFilter: ['data-inboxsdk-last-event'],
403
+ })
404
+ .map(() => null)
405
+ .throttle(120 * 1000)
406
+ .onValue(function () {
407
+ const events = _trackedEventsQueue.removeAll();
408
+ // The trackedEventsQueue is in localStorage, which is shared between
409
+ // multiple tabs. A different tab could have flushed it already recently.
410
+ if (events.length === 0) {
411
+ return;
412
+ }
413
+ (async function () {
414
+ const { oauthToken } = await getEventsAccessToken();
415
+ const apiKey = 'AIzaSyAwlvUR2x3OnCeas8hW8NDzVMswL5hZGg8';
416
+ // TODO change to use CommonPageCommunicator.pageAjax()
417
+ await ajax({
418
+ url: `https://pubsub.googleapis.com/v1/projects/mailfoogae/topics/events:publish?key=${encodeURIComponent(apiKey)}`,
419
+ method: 'POST',
420
+ headers: {
421
+ Authorization: `Bearer ${oauthToken}`,
422
+ 'Content-Type': 'application/json',
423
+ },
424
+ data: JSON.stringify({
425
+ messages: [
426
+ {
427
+ data: Buffer.from(JSON.stringify({
428
+ data: events,
429
+ timestamp: Date.now() * 1000,
430
+ })).toString('base64'),
431
+ },
432
+ ],
433
+ }),
434
+ });
435
+ })().catch((err) => {
436
+ Logger.error(err, {
437
+ type: 'Failed to log events',
438
+ });
439
+ });
440
+ });
441
+ }
@@ -1,40 +1,38 @@
1
- /* @flow */
1
+ "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = makeRevocableFunction;
8
+ var _once = _interopRequireDefault(require("lodash/once"));
9
+ var _noop = _interopRequireDefault(require("lodash/noop"));
3
10
  // Takes an input function, and returns {fn, revoke}.
4
11
  // Before revoke is called, calling fn is equivalent to calling the input
5
12
  // function.
6
13
  // After revoke is called, calling fn is a no-op, and fn no longer holds a
7
14
  // reference to inputFn.
8
15
  // The revoke function does not hold a reference to inputFn or revokedFn ever.
9
-
10
16
  // The optional second parameter revokedFn is a function to make fn call after
11
17
  // it has been revoked.
12
-
13
- import once from 'lodash/once';
14
- import noop from 'lodash/noop';
15
-
16
- export default function makeRevocableFunction<F: Function>(
17
- inputFn: F,
18
- revokedFn: Function = noop
19
- ): { fn: F, revoke: () => void } {
18
+ function makeRevocableFunction(inputFn) {
19
+ let revokedFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _noop.default;
20
20
  let key = {};
21
-
22
21
  return {
23
- fn: (function () {
22
+ fn: function () {
24
23
  if (!key) {
25
24
  throw new Error('Should not happen');
26
25
  }
27
26
  const _revokedFn = revokedFn;
28
27
  const wm = new WeakMap();
29
28
  wm.set(key, inputFn);
30
- inputFn = revokedFn = (null: any);
31
-
32
- return (function () {
33
- return ((key ? wm.get(key) : _revokedFn): any).apply(this, arguments);
34
- }: any);
35
- })(),
36
- revoke: once(function () {
29
+ inputFn = revokedFn = null;
30
+ return function () {
31
+ return (key ? wm.get(key) : _revokedFn).apply(this, arguments);
32
+ };
33
+ }(),
34
+ revoke: (0, _once.default)(function () {
37
35
  key = null;
38
- }),
36
+ })
39
37
  };
40
- }
38
+ }
@@ -1,63 +1,61 @@
1
- /* @flow */
2
-
3
- import makeRevocableFunction from './make-revocable-function';
1
+ "use strict";
4
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _makeRevocableFunction = _interopRequireDefault(require("./make-revocable-function"));
5
5
  it('works', () => {
6
6
  const adder = {
7
7
  value: 0,
8
- add: (x, y = 0) => {
8
+ add: function (x) {
9
+ let y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
9
10
  adder.value += x + y;
10
11
  return adder.value;
11
- },
12
+ }
12
13
  };
13
-
14
- const { fn, revoke } = makeRevocableFunction(adder.add);
14
+ const {
15
+ fn,
16
+ revoke
17
+ } = (0, _makeRevocableFunction.default)(adder.add);
15
18
  adder.add = fn;
16
-
17
19
  expect(adder.add(5)).toBe(5);
18
20
  expect(adder.add(2, 1)).toBe(8);
19
21
  expect(adder.add(3)).toBe(11);
20
22
  expect(adder.value).toBe(11);
21
-
22
23
  revoke();
23
-
24
24
  expect(adder.add(3)).toBe(undefined);
25
25
  expect(adder.value).toBe(11);
26
-
27
26
  revoke(); // should be no-op
28
27
 
29
28
  expect(adder.add(3)).toBe(undefined);
30
29
  expect(adder.value).toBe(11);
31
30
  });
32
-
33
31
  it('revokedFn parameter works', () => {
34
32
  const adder = {
35
33
  value: 0,
36
- add: (x, y = 0) => {
34
+ add: function (x) {
35
+ let y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
37
36
  adder.value += x + y;
38
37
  return adder.value;
39
38
  },
40
- subtract: (x, y = 0) => {
39
+ subtract: function (x) {
40
+ let y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
41
41
  adder.value -= x + y;
42
42
  return adder.value;
43
- },
43
+ }
44
44
  };
45
-
46
- const { fn, revoke } = makeRevocableFunction(adder.add, adder.subtract);
45
+ const {
46
+ fn,
47
+ revoke
48
+ } = (0, _makeRevocableFunction.default)(adder.add, adder.subtract);
47
49
  adder.add = fn;
48
-
49
50
  expect(adder.add(5)).toBe(5);
50
51
  expect(adder.add(2, 1)).toBe(8);
51
52
  expect(adder.add(3)).toBe(11);
52
53
  expect(adder.value).toBe(11);
53
-
54
54
  revoke();
55
-
56
55
  expect(adder.add(3)).toBe(8);
57
56
  expect(adder.value).toBe(8);
58
-
59
57
  revoke(); // should be no-op
60
58
 
61
59
  expect(adder.add(3)).toBe(5);
62
60
  expect(adder.value).toBe(5);
63
- });
61
+ });
@@ -1,20 +1,18 @@
1
- /* @flow */
1
+ "use strict";
2
2
 
3
- import zip from 'lodash/zip';
4
-
5
- export default function parseParamsFromRouteID(
6
- routeID: string,
7
- hash: string
8
- ): { [ix: string]: string } {
9
- const params: { [ix: string]: string } = (Object.create(null): any);
10
- zip(routeID.split('/'), hash.split('/')).forEach(
11
- ([routePart, hashPart], i) => {
12
- if (routePart[0] === ':') {
13
- params[routePart.slice(1)] = decodeURIComponent(
14
- hashPart.replace(/\+/g, ' ')
15
- );
16
- }
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = parseParamsFromRouteID;
8
+ var _zip = _interopRequireDefault(require("lodash/zip"));
9
+ function parseParamsFromRouteID(routeID, hash) {
10
+ const params = Object.create(null);
11
+ (0, _zip.default)(routeID.split('/'), hash.split('/')).forEach((_ref, i) => {
12
+ let [routePart, hashPart] = _ref;
13
+ if (routePart[0] === ':') {
14
+ params[routePart.slice(1)] = decodeURIComponent(hashPart.replace(/\+/g, ' '));
17
15
  }
18
- );
16
+ });
19
17
  return Object.freeze(params);
20
- }
18
+ }
@@ -1,28 +1,19 @@
1
- /* @flow */
2
-
3
- import parseParamsFromRouteID from './parseParamsFromRouteID';
1
+ "use strict";
4
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _parseParamsFromRouteID = _interopRequireDefault(require("./parseParamsFromRouteID"));
5
5
  test('empty', () => {
6
- expect(parseParamsFromRouteID('test', 'test')).toEqual({});
6
+ expect((0, _parseParamsFromRouteID.default)('test', 'test')).toEqual({});
7
7
  });
8
-
9
8
  test('works', () => {
10
- expect(
11
- parseParamsFromRouteID('test/:id/blah/:foo', 'test/123/blah/456')
12
- ).toEqual({
9
+ expect((0, _parseParamsFromRouteID.default)('test/:id/blah/:foo', 'test/123/blah/456')).toEqual({
13
10
  id: '123',
14
- foo: '456',
11
+ foo: '456'
15
12
  });
16
13
  });
17
-
18
14
  test('decodes URI component', () => {
19
- expect(
20
- parseParamsFromRouteID(
21
- 'test/:id/blah/:foo',
22
- "test/123/blah/test+%3C%3E%2B%22'%26%20_"
23
- )
24
- ).toEqual({
15
+ expect((0, _parseParamsFromRouteID.default)('test/:id/blah/:foo', "test/123/blah/test+%3C%3E%2B%22'%26%20_")).toEqual({
25
16
  id: '123',
26
- foo: 'test <>+"\'& _',
17
+ foo: 'test <>+"\'& _'
27
18
  });
28
- });
19
+ });